freundapps/NBSvision
GitHub: freundapps/NBSvision
将任意网页的 DOM 逆向为人类可读的 Unicode 结构化框图,帮助 AI 智能体和开发者在零 token 消耗下发现并定位 CSS 布局问题。
Stars: 1 | Forks: 0
# NBSvision — 看清你的 UI 究竟长什么样
[🇬🇧 English](README.md) | [🇷🇺 Русский](README.ru.md) | [🇩🇪 Deutsch](README.de.md)
## 🇬🇧 English {#english}
**“我的页面看起来没问题”** —— AI 智能体是这么说的。直到它运行了 NBSvision。
你设计了一个完美的布局。规格说明书标明了 36px 高度、8px 间距、居中的图标。你的 AI 智能体声称已经完成了。然后你运行了一条命令,看到了现实:按钮紧贴边缘、间距为 -1px、文本溢出、缺少 padding。所有这些都对智能体不可见。而所有这些在 NBS 中都瞬间可见。
**专为没有视觉能力的 AI 智能体打造。** NBSvision 是 LLM 的眼睛。你的智能体无法看懂屏幕截图——但它能读懂 NBS map。每一个像素都变成了结构化数据。无需视觉模型。适用于任何终端、任何控制台、任何 CI pipeline。人类可读,机器可解析,零 token。
**NBS**(Nested Box Schema)将你的 DOM 映射为人类可读的 Unicode 框图。每个元素都有自己嵌套的框,包含精确的 `W×H`、在父元素中的位置、边框、字体大小和显示模式。问题会用带编号的标记标出——你不需要去寻找 bug,它们会主动找上你。
**逆向工程任何网站。** 将 check-props 指向一个 URL,就能获得完整的 DOM 结构框图。使用 nbs-find 进行搜索。并据此生成页面。从神秘的 DOM 到干净的代码,全程无需消耗 LLM token。
### 为什么会有这个项目
你肯定有这种感觉:你让 LLM 构建一个页面,它声称“完成了”,但布局却是一团糟。你花了 30 分钟调试 CSS,又花了 20 分钟折腾 Playwright 选择器,而 LLM 在这个过程中烧掉了 5000 个 token。NBSvision 用一个 Python 脚本取代了这一切。零 LLM token。瞬间获取基本事实。
## 快速开始
### 安装
```
# 环境要求:Python 3.11+, pip, Playwright
git clone https://github.com/freundapps/NBSvision.git
cd NBSvision
pip install playwright && playwright install chromium
```
### 运行
```
# 映射任意网站
python scripts/check-props/check-props.py --url https://apple.com --map
# 搜索 JSON
python scripts/check-props/check-props.py --url https://apple.com --map --json --compact | python scripts/nbs-find/nbs-find.py --tag button
# 提取 design tokens
python scripts/check-props/check-props.py --url https://apple.com --tokens
```
### 真实世界示例
| 网站 | NBS Map | Token(精简版 NBS) |
|------|---------|:-----:|
| [Apple](examples/apple/map.nbs) | 482KB | ~120K |
| [Google](examples/google/map.nbs) | 56KB | ~14K |
| [TikTok](examples/tiktok/map.nbs) | 29KB | ~7K |
| [GitHub](examples/github/raw-map.nbs) | 63KB | ~16K |
*将完整的 NBS map 加载到 LLM 时的情况。
## 脚本
### Playwright
| 脚本 | 描述 | 依赖 |
|--------|------------|:---:|
| `check-props.py` | DOM → NBS map:`--map`, `--json`, `--compact`, `--tokens`, `--sweep` | Playwright |
### 生成器
| 脚本 | 描述 | 依赖 |
|--------|------------|:---:|
| `nbs-gen.py` | JSON → NBS schema (标准输入→标准输出) | — |
| `generate-page.py` | JSON 配置 → page.tsx + Body + Row + scss + API hook | — |
| `gen-playwright-test.py` | NBS JSON → Playwright 幂等性测试 | Playwright |
| `mk-tree.py` | ASCII 树状图 → 文件系统 | — |
| `nbs-slice.py` | 深层 NBS 树状图 → 概览 + 细节块 | — |
### 分析器
| 脚本 | 描述 | 依赖 |
|--------|------------|:---:|
| `nbs-find.py` | 搜索 NBS JSON:标签、文本、class、问题。**节省 99.6-99.9% token** | — |
| `nbs-to-compact.py` | NBS → 精简 DSL。为 LLM 阅读节省 70-90% token | — |
| `count-tokens.py` | 从 SQLite 会话数据库进行 token 使用分析 | — |
| `github-scout.py` | 无需 LLM token 的 GitHub 搜索 | — |
## AI Pipeline:零 Token 搜索
`nbs-find` 让 AI 智能体无需阅读即可搜索庞大的 JSON schema。搜索过程不消耗任何 LLM token——只消耗在微小的结果上。
### Token 节省情况
| 查询 | 完整 JSON (精简版) | nbs-find | 节省量 |
|-------|:-----:|:-----:|:-----:|
| 在 Apple 中查找 "iPhone" (75KB) | 18,750 | 67 | **99.6%** |
| 在 GitHub 中查找 footer (41KB) | 10,250 | 23 | **99.8%** |
| 在 Google 中查找所有 buttons | 5,500 | 3 | **99.9%** |
### 工作原理
```
# AI agent 提取页面 schema(紧凑——不浪费 tokens)
python check-props.py --url https://apple.com --map --json --compact > schema.json
# AI 询问 nbs-find 而不是读取 75KB JSON
python nbs-find.py --text "iPhone" schema.json # → 67 tokens
python nbs-find.py --tag button schema.json # → 3 tokens
python nbs-find.py --issue 1 schema.json # → only broken elements
python nbs-find.py --wider-than 500 --limit 5 schema.json # → top 5 widest
```
### 智能体间通信
所有 JSON 输出都支持 `--compact` 标志——移除缩进和空格。LLM 解析它们的方式完全相同,但消耗的 token 减少了 23%。
```
# 人类:可读
python check-props.py --url https://apple.com --json > human.json # 97KB
# Agent:紧凑
python check-props.py --url https://apple.com --json --compact > agent.json # 75KB, -23%
```
### 搜索标志
| 标志 | 查找目标 |
|------|-------|
| `--tag button` | 所有 `
标签:DOM解析, LLM辅助开发, UI测试, Web开发工具, 云资产清单, 反调试, 特征检测, 逆向工具, 逆向工程