anky2901/repo-xray

GitHub: anky2901/repo-xray

一款本地优先、输出确定性的全维度代码仓库智能分析工具,旨在为开发者提供可解释的安全、架构及发布就绪度等全面审查报告。

Stars: 0 | Forks: 0

# Repo X-Ray [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/anky2901/repo-xray/actions/workflows/ci.yml) 本地优先的代码仓库智能分析工具。将其指向某个 repo,它就会针对安全性、架构、依赖项、测试、CI、发布就绪度、可维护性、性能、git 健康、代码风格、业务上下文等方面生成可解释的、确定性的报告——此外还提供可直接复制粘贴的 AI 提示词和修复建议。 - **本地优先:** 克隆/复制 repo 并在你的机器上进行分析。默认情况下,不会对外发送任何数据。 - **确定性:** 相同的输入会产生字节完全一致的 `scan.json` 和报告。 - **可解释性:** 每一项发现都附带证据、置信度评分和通俗的英文推理说明。 - **离线可用:** 支持 `--offline` 从缓存运行;网络仅用于 CVE/registry 查询。 ## 环境要求 - Node.js >= 18(已在 22 上测试) - pnpm 10+ - PATH 中包含 git(用于扫描 GitHub URL 和分析 git-history) ## 设置说明 ``` pnpm install pnpm build ``` 你可以随时验证你的环境(以下两种形式均可——请参阅下文的“The `xray` command”): ``` node apps/cli/dist/index.js doctor ``` ## 快速开始 扫描 GitHub repo(零配置): ``` xray scan https://github.com/expressjs/express --mode=deep ``` 报告默认会写入 `.xray-reports/` 目录。在浏览器中打开 `.xray-reports/DASHBOARD.html` 即可查看交互式视图,或阅读 `REPORT.md` 获取摘要。 ## 使用指南 从安装到读取结果的完整操作流程。 ### 1. 安装与构建 ``` pnpm install pnpm build ``` ### 2. 检查你的环境 ``` node apps/cli/dist/index.js doctor ``` 这将检查 Node、pnpm、git、SQLite、缓存访问权限和磁盘空间。请在扫描前修复任何标记为 `FAIL` 的状态。 ### 3. 运行你的首次扫描 选择一个目标——本地文件夹、GitHub URL 或 `.zip` 归档文件——并选择一种模式。要进行完整审查,请使用 `deep` 模式: ``` # 本地项目 node apps/cli/dist/index.js scan ./path/to/project --mode=deep # 远程仓库 node apps/cli/dist/index.js scan https://github.com/expressjs/express --mode=deep # 当前目录 node apps/cli/dist/index.js scan . --mode=deep ``` 使用 `--output=` 可将报告写入 `.xray-reports/` 之外的其他位置。 ### 4. 读取分析结果 扫描完成后,请查看输出目录(默认为 `.xray-reports/`): - **`DASHBOARD.html`** —— 在浏览器中打开以获取交互式视图:评分卡片、严重性摘要以及可过滤的发现列表。建议从这里开始。 - **`REPORT.md`** —— 包含健康评分卡和首要发现的文本摘要。 - **专项报告** —— 深入了解特定领域:`SECURITY.md`、`DEPENDENCY.md`、`ARCHITECTURE.md`、`TEST_PLAN.md`、`RELEASE.md` 等其他报告(完整列表请参阅 [Output files](#output-files-deep-mode))。 - **`FIXES.md`** —— 按优先级排列且可直接复制粘贴的具体修复列表。 - **`scan.json`** —— 如果你需要通过脚本进行调用,可查看此完整的机器可读结果。 每一项发现都包含文件/行号证据、置信度评分以及通俗的英文原因说明。 ### 5. 根据任务选择合适的模式 - 快速筛选或 pre-commit 阶段:`--mode=quick`(仅检查安全性,速度最快)。 - 完整审查:`--mode=deep`(包含所有模块)。 - 深度审计:`--mode=paranoid`。 - 在 pipeline 中使用:`--ci --fail-on=HIGH`(机器输出 + 退出码)。 ### 6. 常见工作流 ``` # 拦截 CI 构建:发现 HIGH 或 CRITICAL 时以非零状态码退出 node apps/cli/dist/index.js scan . --ci --fail-on=HIGH # 快速 release-readiness 检查(仅限 release 和 CI 健康状态) node apps/cli/dist/index.js release-check . # 基于此仓库真实事实生成 AI 提示词 node apps/cli/dist/index.js prompts . # 使用缓存的 CVE/registry 数据重新扫描(无需网络访问) node apps/cli/dist/index.js scan . --mode=deep --offline # 从本地历史记录比较过去的两次扫描 node apps/cli/dist/index.js history node apps/cli/dist/index.js compare ``` ## `xray` 命令 CLI 包提供了一个名为 `xray` 的 `bin`。要将其作为全局命令使用: ``` pnpm --filter @repo-xray/cli build # ensure dist is built pnpm setup # one-time: creates pnpm's global bin dir (restart shell after) pnpm --filter @repo-xray/cli link --global xray --help ``` 如果你不想设置全局 bin,也可以通过以下方式运行所有命令: ``` node apps/cli/dist/index.js ``` 这两种形式是等效的;下文示例均使用 `xray`。 ## 命令说明 ### `scan ` 扫描本地路径、GitHub URL 或 `.zip` 归档文件。 | 选项 | 描述 | |---|---| | `--mode ` | `quick`(仅检查安全性,速度快)、`deep`(所有模块)、`paranoid`(所有模块 + 额外扫描)、`ci`(机器输出 + 退出码)。默认值:`quick`。 | | `--output ` | 报告的输出目录。默认值:`.xray-reports`。 | | `--offline` | 仅使用缓存数据;跳过实时的 CVE/registry 查询。 | | `--ci` | 适配机器读取的运行方式,附带 CI 退出码(包含 `ci` 模式)。 | | `--fail-on ` | 在 CI 模式下,当存在达到或超过此严重程度(如 `HIGH`)的发现时,以非零状态退出。 | 示例: ``` # 针对当前目录的快速安全检查 xray scan . --mode=quick # 将本地项目的完整分析输出到自定义文件夹 xray scan ./my-app --mode=deep --output=reports/ # CI 拦截:发现 HIGH+ 时使构建失败 xray scan . --ci --fail-on=HIGH # 使用缓存的 CVE/registry 数据进行离线重新扫描 xray scan https://github.com/user/repo --mode=deep --offline ``` CI 退出码:`0` 代表正常,`1` 代表存在低于阈值的发现,`2` 代表存在 HIGH 级别发现,`3` 代表存在 CRITICAL 级别发现。 ### `release-check ` 快速通道,仅运行发布就绪度(M17)+ CI 健康(M18)检查。生成 `RELEASE.md`、`RELEASE_CHECKLIST.md`、`CI_REPORT.md`。 ``` xray release-check . --output=reports/ ``` ### `prompts ` 基于 repo 的实际事实生成可直接复制粘贴的 AI 提示词。生成 `PROMPTS/{dev,bugfix,feature,audit,onboarding}.md`。 ``` xray prompts . ``` ### `history [repoId]`, `compare ` 查询并对存储在 SQLite 历史记录(`.xray-reports/xray.db`)中的过往扫描进行 diff 分析。 ``` xray history xray compare ``` ### `config`, `doctor` `config` 打印解析后的配置;`doctor` 运行环境诊断。 ## 扫描模式 | 模式 | 模块 | 用途 | |---|---|---| | `quick` | 仅安全性 | 快速 pre-commit / 筛选 | | `deep` | 所有模块 | 完整审查(默认推荐) | | `paranoid` | 所有模块 + 额外扫描 | 深度审计 | | `ci` | 所有模块,机器输出,附带退出码 | Pipelines | ## 输出文件 (deep 模式) | 文件 | 内容 | |---|---| | `REPORT.md` | 核心摘要 + 健康评分卡 + 徽章 | | `DASHBOARD.html` | 交互式、可过滤的 dashboard | | `SECURITY.md` | 密钥、危险 pattern、配置问题、CVE(密钥始终会被掩码处理) | | `ARCHITECTURE.md` / `ARCHITECTURE.html` | import 关系图、循环依赖、超大文件、分层结构、无效模块 | | `DEPENDENCY.md` | 存在漏洞/重复/被废弃/体积过大的依赖项,许可证冲突 | | `TEST_PLAN.md` | 测试覆盖率、测试盲区、不稳定测试 (flaky-test) 模式 | | `RELEASE.md` / `RELEASE_CHECKLIST.md` | 加权发布就绪度评分卡 + 检查清单 | | `CI_REPORT.md` | 工作流健康度:测试、版本固定的 actions、密钥、权限、超时时间 | | `MAINTAINABILITY.md` | 复杂度、文件大小、注释密度、热点模块 | | `PERFORMANCE.md` | 静态性能热点分析 | | `GIT.md` | Commit 频率、贡献者、巴士因子 (bus factor)、代码变动热点 | | `CODE_STYLE.md` | 缩进/引号一致性、行尾空格、长代码行 | | `BUSINESS.md` | 推断出的项目用途、领域、用户群、分发渠道 | | `VULN_REPORT.md` | 针对单个漏洞的修复方案(极简版 + 最佳实践 + AI 提示词 + 测试) | | `ADOPTION.md` | 带有置信区间的采用潜力评估 | | `FIXES.md` | 已整合并按严重程度分组的修复建议 | | `PROMPTS/*.md` | 基于提取到的 repo 事实生成的 AI 提示词 | | `scan.json` | 完整的结构化结果(schema 1.0),具备确定性 | | `scan.sarif` | 用于 GitHub Code Scanning 的 SARIF 2.1.0 | | `scan.pdf` | 当存在可用的 Chrome runtime 时进行渲染(否则自动优雅跳过) | ## 配置 开箱即用,无需任何配置。如需自定义,请在 repo 根目录添加 `.xrayrc.json` 文件,设置 `XRAY_*` 环境变量,或传递 CLI flags(优先级顺序为:CLI flags > 环境变量 > 配置文件 > 默认值)。常用设置包括:`output.dir`、`cache.dir`、`ignore.patterns`、`github.token`、`ai.provider`。遥测功能始终处于关闭状态。 忽略规则:默认遵循 `.gitignore` 配置;可在 `.xrayignore` 中添加针对特定 repo 的排除项。 ## 使用 SDK 所有功能均可通过 `@repo-xray/sdk` 进行编程调用: ``` import { XRayPipeline, FileCache, loadConfig, logger, renderDashboard } from '@repo-xray/sdk'; const config = loadConfig(); const result = await new XRayPipeline().run({ source: './my-app', mode: 'deep', modules: ['security', 'architecture', 'dependency', 'test-intelligence', 'release', 'ci-health'], config, cache: new FileCache(config.cache.dir), logger, }); console.log(result.scores); const html = renderDashboard(result); // self-contained dashboard HTML ``` ## 开发说明 ``` pnpm typecheck # strict TypeScript across all packages pnpm lint # eslint pnpm test # vitest pnpm build # lint + build all packages ``` 该 repo 是一个 pnpm workspace:包含 `apps/`(cli、web)、`packages/`(sdk、core、各模块 analyzers、cache、storage、export、reporting)以及 `shared/`。Apps 仅依赖于 SDK;analyzers 依赖于 `@repo-xray/types`。此边界由测试强制执行。
标签:DevSecOps, GNU通用公共许可证, MITM代理, Node.js, WebSocket, 上游代理, 云安全监控, 代码质量审查, 依赖分析, 自动化攻击, 静态分析