# Doctor：本地与远程诊断

通过诊断码与 CI 退出状态检查文件、依赖及 HTTP 响应。

需要 WU CLI `1.2.0`，应用 API 需要 WU Framework `4.0.0`。请检查 `wu --version` 和项目依赖。

```sh
wu info
wu doctor --json
wu doctor --url https://example.com --route /guide/ --entry /apps/cart/entry.js --json
```

`wu info` 显示有效配置。本地 doctor 使用原生二进制；远程 doctor 使用 Node `>=20`，通过 GET 请求检查且不发送 cookie 或凭据。它不执行 JavaScript，也不修复文件。JSON 输出不含 ANSI 和更新提示。本地 JSON 模式不探测端口 `3000`，人类可读输出保留该旧检查。

| 代码 | 检查 |
| --- | --- |
| `WU_D000` | 未找到项目。 |
| `WU_D001` | 应用目录。 |
| `WU_D002` | 宿主入口或构建。 |
| `WU_D003` | 版本范围一致，并兼容目录中的目标 Framework 版本。 |
| `WU_D004` | 目录覆盖配置与工具链。 |
| `WU_D005` | 端口冲突。 |
| `WU_D006` | 公开输出中的敏感文件。 |
| `WU_D007` | 安全响应头与内联事件处理器。 |
| `WU_D008` | HTTP 检查提示或本地响应。 |
| `WU_D009` | 多个应用使用的框架未列入 `shared`。 |

报告包含 `schemaVersion: 1`、`tool`、`mode`、`ok`、`checks`、`problems` 与 `diagnostics`，本地报告还包含 `version`。每条诊断包含 `code`、`severity` 与 `message`。一个类别可以产生多个发现。有警告时仍可返回 `0`，错误返回 `1`，无效选项或远程执行失败返回 `2`。

`WU_D003` 接受限定在目录中 Framework 主版本内的范围，例如 `^4.0.0`、`4.x`、`4.2.3` 或 `>=4 <5`。它拒绝不兼容、格式错误、空范围或跨主版本的范围，例如 `^3 || ^4` 和 `>=4`。Shell 与应用的声明必须一致；本地依赖保留目标路径检查。

<span id="alcance-del-escaneo-remoto"></span>

<span class="section-anchor" id="section-1"></span>

## 远程扫描范围

`--url` 选择 HTTP 或 HTTPS。可重复使用 `--route` 指定页面，使用 `--entry` 指定模块或明确允许的外部源。`--timeout` 默认每次响应 `5000` 毫秒，包含响应体，允许范围为 `100`–`30000`。扫描仅跟踪静态引用，计算型导入和运行时发现的应用需要浏览器测试。

扫描限制为 32 个资源、40 次请求、每资源 3 次重定向、每响应 2 MiB 和总计 30 秒。未完成检查会报错。诊断区分 HTTP 状态、错误 MIME、内联 CSP、资源返回 HTML 回退、网络失败及跳过的外部源。大型站点应拆分为明确的扫描流程。

<span id="integridad-de-un-despliegue"></span>

<span class="section-anchor" id="section-2"></span>

## 部署完整性

```sh
wu doctor --url https://example.com --integrity --pubkey keys/deploy.pub.json --json
```

`--integrity` 验证由 `wu build --sign` 创建的 `wu-integrity.json`，并比较已发布的签名、字节、MIME、CSP 和导入映射。`--pubkey` 接受可信 PEM 或 JWK。不指定时，内嵌密钥仅证明一致性，并产生 `WU_INTEGRITY_UNPINNED`。此模式有独立限制：最多 10000 个文件、32 MiB 清单及 64 MiB 文件；不使用普通扫描的 32 资源限制。

本地扫描检查 `dist/` 中所有页面的 CSP；远程扫描还从 `#wu-apps` 发现应用。两者都不能替代在浏览器中挂载应用。签名和发布流程请参阅[构建](/zh-cn/docs/cli/build/)。

<span id="referencia-de-implementación"></span>

<span class="section-anchor" id="section-3"></span>

## 实现参考

- `wu-cli/src/commands/doctor.zig`
- `wu-cli/src/commands/doctor-remote.cjs`
- `wu-cli/tests/doctor-policy.test.cjs`
- `wu-cli/tests/doctor-remote-apps.test.cjs`
- `wu-cli/tests/build-deploy.test.cjs`