按真实手机比例测量界面并生成像素基线报告
30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LUgABeEEE/dsh-mobile-ui该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · vision
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 33 处,展示前 31 条)
- 读取本地文件lab/src/baseline.mjs:31
return createHash('sha256').update(readFileSync(path)).digest('hex') - 读取本地文件lab/src/baseline.mjs:59
const current = readFileSync(paths.current).toString('base64') - 读取本地文件lab/src/baseline.mjs:60
const reference = readFileSync(paths.reference).toString('base64') - 写入本地文件lab/src/baseline.mjs:115
mkdirSync(baselineDir, { recursive: true }) - 读取本地文件lab/src/baseline.mjs:118
if (entry.current === null || !existsSync(entry.current)) continue - 写入本地文件lab/src/baseline.mjs:120
copyFileSync(entry.current, target) - 写入本地文件lab/src/baseline.mjs:129
writeFileSync(join(baselineDir, 'baseline.json'), `${JSON.stringify(manifest, null, 2)}\n`, 'utf8') - 读取本地文件lab/src/baseline.mjs:139
if (!existsSync(path)) return null - 读取本地文件lab/src/baseline.mjs:141
const parsed = JSON.parse(readFileSync(path, 'utf8')) - 读取本地文件lab/src/capture.mjs:74
const reuseState = surface === 'mobile' && fresh !== true && existsSync(statePath) - 写入本地文件lab/src/capture.mjs:156
mkdirSync(outDir, { recursive: true }) - 读取本地文件lab/src/capture.mjs:164
if (existsSync(paths.reference) === false) { - 读取本地文件lab/src/cli.mjs:18
const pkg = JSON.parse(readFileSync(join(PACKAGE_ROOT, 'package.json'), 'utf8')) - 读取本地文件lab/src/inject.mjs:17
if (!existsSync(target)) throw new UsageError(`--inject path does not exist: ${input}`) - 读取本地文件lab/src/inject.mjs:19
const stat = statSync(target) - 读取本地文件lab/src/inject.mjs:22
if (!existsSync(manifestPath)) { - 读取本地文件lab/src/inject.mjs:27
manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) - 读取本地文件lab/src/inject.mjs:31
const cssPath = existsSync(join(target, 'mobile.css')) ? join(target, 'mobile.css') : null - 读取本地文件lab/src/inject.mjs:32
const jsPath = existsSync(join(target, 'mobile.js')) ? join(target, 'mobile.js') : null - 发起网络请求lab/src/pairing.mjs:57
response = await fetch(statusUrl, { signal: AbortSignal.timeout(timeoutMs) }) - 发起网络请求lab/src/pairing.mjs:92
response = await fetch(new URL('/api/mobile-access/pairing/open', adminUrl), { - 写入本地文件lab/src/pairing.mjs:130
mkdirSync(dirname(statePath), { recursive: true }) - 写入本地文件lab/src/pairing.mjs:133
chmodSync(statePath, 0o600) - 读取本地文件lab/src/playwright.mjs:37
if (existsSync(join(absolute, 'package.json'))) { - 读取本地文件lab/src/playwright.mjs:54
if (!existsSync(anchor)) continue - 读取本地文件lab/src/profiles.mjs:113
text = readFileSync(filePath, 'utf8') - 写入本地文件lab/src/report.mjs:187
mkdirSync(outDir, { recursive: true }) - 写入本地文件lab/src/report.mjs:191
writeFileSync(htmlPath, renderReportHtml(summary), 'utf8') - 写入本地文件lab/src/report.mjs:192
writeFileSync(jsonPath, `${JSON.stringify(summary, null, 2)}\n`, 'utf8') - 读取本地文件lab/src/token.mjs:28
stats = statSync(filePath) - 读取本地文件lab/src/token.mjs:49
token = readFileSync(filePath, 'utf8').trim()
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
测量并修复 DeepSeek Harness 的移动端界面:一套无头比例实验室(截图、指标、矩阵报告、像素基线),外加可选的适配包,用于通过 dsh-mobile 扩展目录加载的第三方插件面板。
README
由 DeepSeek 最新模型翻译生成本仓库已拆分,由新仓库取代。
- 测量工具 → LUgABeEEE/dsh-ui-lab
- 适配包 → LUgABeEEE/dsh-mobile-adapt
本仓库已归档,不再更新。
dsh-mobile-ui
先测量 DSH 移动端界面,再修掉测量发现的问题。
DeepSeek Harness 优先面向桌面端。到了手机上——无论是专用的 dsh-mobile 界面,还是手机宽度下的原生 Web UI——布局大体能用,但第三方插件面板往往在这里出问题:按钮拇指点不到,内容被浮动组件挡住,行与导航栏挤在一起。
本仓库负责这件事的两半:
| | 是什么 | 给谁用 |
| lab/ | dsh-ui-lab——无头 Chromium 测试台,按真实设备比例加载 DSH 界面,输出截图、测量数据和矩阵报告,并带像素基线门禁 | 想确认某次 UI 改动有没有在手机上挪动东西的人 |
| packs/ | 可选适配包,由 dsh-mobile 的 extensions/ 目录加载——44px 触摸下限、导航栏留白、浮动组件留白 | 插件面板现在就得在手机上扛住的人 |
两者互相独立。lab 不需要 pack,pack 也不需要 lab。合起来才闭环:lab 指出哪里坏了,pack 修好它,lab 的基线判断修复是否守住。
展开完整文档(README 剩余 1 节)
本仓库已拆分,由新仓库取代。 - 测量工具 → LUgABeEEE/dsh-ui-lab - 适配包 → LUgABeEEE/dsh-mobile-adapt 本仓库已归档,不再更新。 dsh-mobile-ui 先测量 DSH 移动端界面,再修掉测量发现的问题。 DeepSeek Harness 优先面向桌面端。到了手机上——无论是专用的 dsh-mobile 界面,还是手机宽度下的原生 Web UI——布局大体能用,但第三方插件面板往往在这里出问题:按钮拇指点不到,内容被浮动组件挡住,行与导航栏挤在一起。 本仓库负责这件事的两半: | | 是什么 | 给谁用 | | lab/ | dsh-ui-lab——无头 Chromium 测试台,按真实设备比例加载 DSH 界面,输出截图、测量数据和矩阵报告,并带像素基线门禁 | 想确认某次 UI 改动有没有在手机上挪动东西的人 | | packs/ | 可选适配包,由 dsh-mobile 的 extensions/ 目录加载——44px 触摸下限、导航栏留白、浮动组件留白 | 插件面板现在就得在手机上扛住的人 | 两者互相独立。lab 不需要 pack,pack 也不需要 lab。合起来才闭环:lab 指出哪里坏了,pack 修好它,lab 的基线判断修复是否守住。 dsh-ui-lab ──measure──▶ DSH surface (390×844, coarse pointer) ▲ packs ──install────▶ $DSH_HOME/mobile-access/extensions/<id>/ 快速开始——lab 需要 Node 20+,以及给 Playwright 用的 Chromium。 cd lab npm ci npx playwright install chromium npx . list # 10 proportions: 6 phones, 4 tablets npx . shot --surface mobile --profile phone-390x844 --open Todos npx . matrix --surface mobile --class phone --open Todos --out .shots/phone --surface mobile 驱动真实的 dsh-mobile 网关(它会配对一次设备并缓存状态)。--surface web 按同样比例打开原生 DSH Web。--open 先点侧边栏条目,这样截到的是面板,而不是欢迎页。 完全没有 DSH?仓库自带 fixture: cd lab npx . shot --surface web --profile phone-390x844 \ --url "file://$PWD/test/fixtures/desktop.html" --out .shots/fixture 基线把矩阵变成门禁: npx . matrix --surface mobile --class phone --open Todos --out .shots/run --save-baseline ../.baselines/todos npx . matrix --surface mobile --class phone --open Todos --out .shots/run --baseline ../.baselines/todos exit 1 when the pixels moved past the tolerance 完整文档:lab/README.md(英文)· lab/README.zh.md(中文)。 快速开始——packs 这些包由 dsh-mobile 通过公开的 extensions/ 接口加载 —— 不用 fork,不用给已安装的文件打补丁,删掉目录后两秒内就会卸载。 node tools/check-pack.mjs # validate every pack (static + fixture + opt-out) node tools/install.mjs pack core-panel --dry-run node tools/install.mjs pack core-panel --yes | 包 | 作用范围 | 做什么 | | core-panel | 插件面板 | 面板内 44px 下限、回收宽度、为 56px 折叠侧栏留出空隙 | | shell-chrome | 外壳本身 | 面板的「返回会话」栏,以及展开抽屉的各行 | | floaters | 浮动组件 | 测量右下角固定组件并预留其高度,最后几行不再被压在下面 | 每个包都是 experimental,默认关闭;catalog.json 记录哪些已经验证、哪些还没有。每个包都支持退出开关(),发布前都会对照 fixture 检查。 完整文档:docs/收录标准.md · packs/core-panel/README.md · docs/phone-instance.md。 实际验证了什么 这里诚实比绿色对勾更重要,所以每个包的状态都写在 catalog.json 的 evidence 字段里: | | 状态 | | Fixture 测量(390×844 粗指针、1280×800 细指针零回归、退出开关) | ✅ 每个包,tools/check-pack.mjs | | 在 dsh-mobile 0.7.1 上的真实运行时 | ✅ 每个包,在真实网关上测量 | | 在 0.8.0 上的真实运行时 | ❌ 只对 lib/mobile-layout.js 做了文本级检查 | | 真机 | ❌ 从未 —— 没有拇指、没有软键盘、没有真实的 env(safe-area-inset-*) | 所以这些包保持 experimental(不是 candidate)。如果你在真机上跑,lab 里的基线门禁是判断差异是否来自该包的最快方式。 这些包还依赖 dsh-mobile 不承诺保留的类名(.dshm-shell、.dshm-main、.dshm-drawer 等)。catalog.json 精确列出每个包触及的标记,出问题时可追溯,但 dsh-mobile 一次改版仍可能把它们弄坏。这是非官方兼容层,不是 dsh-mobile 维护者发布或支持的东西。 贡献 加一个比例,就是在 lab/profiles/profiles.json 里加一条。加一个包从 packs/_template/ 开始,并且必须通过 node tools/check-pack.mjs packs/<id>;规则见 docs/收录标准.md。测试与提交约定见 lab/CONTRIBUTING.md。 许可证 MIT —— 见 LICENSE。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
LUgABeEEE/dsh-mobile-ui
按真实手机比例测量界面并生成像素基线报告
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,359已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,514已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,289已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,675已汉化DSH
71.2
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,522已汉化DSH
71
这是你的仓库?认领条目