# 🔍 dsh-f12-inspector
**[简体中文](README.md)** · [**English**](README.en.md)
> 一个用于 **DSH(DeepSeek Harness)** Web 前端的元素检查插件:把浏览器「F12 检查元素」的交互搬进网页界面的**第三栏(右侧详情栏)**,并内置工作区文件树和 HTML 编辑器。
在 DSH Web 界面里浏览工作区、点选 HTML 页面载入预览,开启「检查模式」后**悬停高亮、点击定位**,一键拿到元素的 **CSS 选择器 / XPath / 计算样式 / outerHTML**,还能**直接改源码、刷新预览继续检查**,并把元素上下文「+加入对话」发给 AI 让它修改。
## ✨ 功能
- **🔍 F12 元素检查**
- 侧边栏底部「🔍 F12 检查器」按钮,点击即打开第三栏
- 检查模式:**悬停 → 蓝色高亮 + 元素标签**,**点击 → 锁定选中**
- 元素信息:tagName / data-dom-id / CSS 选择器 / XPath / 文本 / 尺寸 / 计算样式 / outerHTML
- 「📋 复制选择器」一键复制;「+ 加入对话」把元素上下文填进对话输入框发给 AI
- 底部「协议日志」实时展示检查器内部消息(host ↔ iframe),方便调试
- **📁 工作区文件树**
- 跟随当前会话 cwd,自动列出工程目录树,展开/折叠文件夹,点选文件载入
- HTML 文件 → 载入预览检查;其他文本文件 → 打开编辑器
- **✏️ 内置 HTML 编辑器**(VSCode 风格,纯 JS 无依赖)
- 语法高亮(HTML 标签 / 属性 / 字符串 / 注释)、行号栏、Tab 缩进 + 回车自动缩进、状态栏
- 「保存」写回磁盘;「刷新预览」把改后的源码重新渲染进预览框,**继续检查改完的页面**
- **载入方式**:工作区相对路径 / 绝对路径 / 文件夹点选 / 网址
- 输入**文件夹**路径自动列出里面的 HTML 文件,点选即可载入
## 🧩 原理
客户端插件向 DSH Web 的槽位系统注册两个槽位:
| 槽位 | 作用 |
| --- | --- |
| `sidebar.footer.action` | 侧边栏底部的「打开第三栏」按钮 |
| `details`(priority: -1) | 占据第三栏(右侧详情栏)显示检查器 |
预览页面放入 `sandbox` iframe 中。检查引擎通过 iframe 的 `contentDocument` 注入监听(`mouseover` / `click` / `keydown`),并在点击时生成元素的定位 payload(XPath / CSS 选择器 / computedStyles / inlineStyles / rect / outerHTML)。所有定位逻辑均基于标准 DOM API(`getBoundingClientRect` / `getComputedStyle` / `closest` / `previousElementSibling`)自行实现。
**宿主侧**(`dsh/index.js`)注册一个 JSON API,**所有文件访问都走 DSH 官方 `fs` 服务**:
```
POST /api/f12-inspector
{ op: 'list', path } -> { ok, path, entries: [{ name, type, size }] }
{ op: 'read', path } -> { ok, path, content }
{ op: 'write', path, content } -> { ok: true }
```
路径解析与 DSH 自带文件工具一致:`''` / `'.'` → 工作区根;`'a/b'` → 相对路径;`'/abs'` → 绝对路径。
## 📦 安装
> 标准 DSH bundle 插件,一条命令即可安装(发布到 GitHub 后):
```sh
dsh plugin --profile web add "github:AlloyPlane/dsh-f12-inspector#v1.1.0&path:/"
```
> `v1.1.0` 为当前发布标签(换用最新提交号亦可)。包根 = 仓库根。
或**本地目录**(包目录内执行):
```sh
cd dsh-f12-inspector && dsh plugin --profile web add .
```
装完**重启 DSH**(`npx -y @deepseek-ai/dsh web`),浏览器打开后侧边栏底部出现 **「🔍 F12 检查器」**。
> 手动方式(旧版):在 web profile 的 `package.json` dependencies 里 link 本包、在 `dsh.profile.bundles` 加 `dsh-f12-inspector`、`pnpm install` 后重启。
## 🚀 使用
1. 点侧边栏底部「🔍 F12 检查器」打开第三栏
2. 顶部文件树点选 HTML 文件(或输入路径 / 网址)载入
3. 页面加载后自动进入检查模式:**悬停高亮,点击选中**
4. 选中后查看元素信息,点「📋 复制选择器」或「+ 加入对话」
5. 点「✏️ 编辑」改源码 →「保存」写回 /「刷新预览」重新检查
6. `Esc` 取消选中;「✕」清空选择
### 同源 / 跨域说明
| 页面来源 | 能否检查 |
| --- | --- |
| srcdoc / 工作区文件(走本机读取) / DSH 自身 | ✅ 完整检查 |
| 跨域网址(直接 iframe) | ⚠️ 只能显示,不能注入检查引擎(界面会提示) |
检查自己的网站 / 组件库页面时,**优先用文件树 / 载入文件**(走本机读取,无跨域限制)。
## ⚠️ 安全说明
- 所有文件读写都通过 DSH 的 `fs` 服务进行(不是裸 `node:fs`),遵循 DSH 的沙箱与权限体系;路径按 `fs.resolve` 规则解析(工作区根为相对路径基准)。
- 这仍是**本地开发工具**:`/api/f12-inspector` 暴露在工作区上。**请不要把该插件部署到公网 / 不受信任的网络环境**。
## 🧡 致谢 / 设计参考
- 工作区文件树与内置编辑器的**设计思路**参考自 [lak321/dsh-filetree](https://github.com/lak321/dsh-filetree)(MIT 协议)。相关归属声明见 [ACKNOWLEDGEMENTS.md](./ACKNOWLEDGEMENTS.md)。
## 📄 License
[MIT](./LICENSE) © AlloyPlane
## 🧩 插件市场
本项目也按 [WhaleHub 插件市场提交规范](./docs/whalehub-submission.md) 整理,可提交到
[vvlife/whalehub-dsh](https://github.com/vvlife/whalehub-dsh) 社区市场。