lindseystead/ArchGuard

GitHub: lindseystead/ArchGuard

ArchGuard 是一个 React + TypeScript 架构守卫工具,在 CI 中强制执行层级导入边界与依赖规则,专为 AI 辅助开发工作流设计。

Stars: 0 | Forks: 0

# ArchGuard [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/lindseystead/ArchGuard/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/lindseystead/ArchGuard)](https://github.com/lindseystead/ArchGuard/releases/latest) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) **面向 AI 辅助 React PR 的架构守卫。** ArchGuard 在 React + TypeScript 项目中强制执行层级导入边界 —— 具备五分钟快速设置、monorepo 支持、面向遗留代码的 baseline 模式,以及专为 coding agent 设计的 CI 输出。 ## 为什么选择 ArchGuard AI 编程助手引入架构违规的速度远超人工审查的速度。ESLint 和 TypeScript 并不强制执行文件夹层级规则。dependency-cruiser 虽然功能强大,但配置繁琐,且不提供 PR diff 模式或面向 agent 的输出。 ArchGuard 填补了这一空白: | 你需要…… | ArchGuard 提供…… | | --- | --- | | 简易设置 | 一个 `architecture.yaml`,几分钟内运行 `archguard init` | | 层级强制执行 | 在 `domain`、`features`、`ui` 等之间实现确定性的导入边界 | | Monorepo 支持 | `--root`、workspace 包、tsconfig project references | | 遗留代码 | baseline 模式 —— 仅针对**新**违规报错 | | AI 工作流 | Agent JSON、`AGENTS.md` 同步、Cursor/Copilot 规则、MCP server | | 快速 PR 检查 | `--diff` 模式 (v2.1) | 有关与 dependency-cruiser、eslint-plugin-boundaries 和 Steiger 的客观对比,请参阅 [docs/COMPARISON.md](docs/COMPARISON.md)。 ## 功能状态 | 功能 | 状态 | | --- | --- | | 层级导入边界 | ✅ 已发布 | | 循环依赖检测 | ✅ 已发布 | | baseline / 增量采用 | ✅ 已发布 | | Monorepo `--root` + workspace 解析 | ✅ 已发布 | | JSON / SARIF / GitHub Action | ✅ 已发布 | | React UI 启发式检测(循环、组件内 fetch) | ✅ 已发布(可选) | | npm install (`@lifesavertech/archguard-cli`) | ✅ 已发布 (v2.1.0) | | 自定义层 `paths` 映射 | ✅ 已发布 (v2.0.4) | | `patterns:` schema + 智能 `init` | ✅ 已发布 (v2.0.5) | | `--config`, `--json`, `--format github` | ✅ 已发布 (v2.0.6) | | Agent 输出 (`--format agent`,修复提示) | ✅ 已发布 (v2.0.6) | | `archguard sync` + `sync --check` | ✅ 已发布 (v2.0.7) | | Action SARIF 上传 + `sync-check` | ✅ 已发布 (v2.0.7) | | PR diff 模式 (`--diff`) | ✅ 已发布 (v2.1.0) | | 多 Agent 输出 | ✅ 已发布 (v2.1.0) | | MCP server (`@lifesavertech/archguard-mcp`) | ✅ 已发布 (v2.1.0) | | Barrel 绕过检测 | ✅ 已发布 (v2.2.0) | | Mermaid 图表 | 🔜 v2.3 | | VS Code 扩展 | 🔜 v2.4 | 完整路线图:[ROADMAP.md](ROADMAP.md) · 采用指南:[docs/ADOPTION.md](docs/ADOPTION.md) ## 快速开始 ### 安装 ``` npm install -D @lifesavertech/archguard-cli@2.2.0 npx archguard --version npx archguard check --json # machine-readable CI output npx archguard check --format github # GitHub Actions annotations ``` 要求 **Node.js 20 或更高版本**(`package.json` 中的 `engines.node`)。在 Node 18 上,CLI 会以明确的错误提示退出,而不是安装损坏的依赖。 ### 自定义文件夹布局 默认预设匹配文件夹**名称**(`domain/`、`features/`、`ui/`)。对于 `components/`、`db/`、`pages/` 等,请使用 `patterns`(推荐)或 `layers.*.paths` 映射文件夹: ``` patterns: root: src ignore: ["**/*.test.{ts,tsx}", "**/__tests__/**"] layers: ui: include: [components/**, pages/**] db: include: [db/**] exclude: [db/migrations/**] layers: ui: allowedImports: [features, db] db: allowedImports: [] ``` 简写(仍然支持): ``` layers: ui: paths: [src/components, src/pages] allowedImports: [features, db] db: paths: [src/db] allowedImports: [] ``` 如果启用了边界规则但**没有任何文件匹配到任何层**,`check` 将报错,而不是报告虚假的通过。 **GitHub Action (CI):** ``` - uses: lindseystead/ArchGuard@v2 # or @v1 for legacy ``` **从源码运行(npm 发布前):** ``` git clone https://github.com/lindseystead/ArchGuard.git cd ArchGuard npm install && npm run build && npm link ``` ### 初始化 ``` archguard init # smart-detect folders + boundaries-only rules archguard init --no-detect # static preset only (skip repo scan) archguard init --preset react-layered # detected layout + UI heuristics rules archguard init --preset feature-sliced-react ``` 写入 `architecture.yaml`、`AGENTS.md` 和 `.archguard/ARCHITECTURE_RULES.md`。 ### 检查 ``` archguard check ``` 示例输出: ``` ✗ Found 3 violation(s): src/ui/UserProfile.tsx:2:1 - Layer 'ui' cannot import from 'domain'. Import from allowed layers only: features, shared. Move the imported code to an allowed layer or restructure dependencies. (layer-import-boundary) ``` ### Monorepo ``` archguard check --root apps/web --verbose ``` ### 增量采用 ``` archguard check --update-baseline # capture existing violations archguard check --baseline # fail only on new ones ``` ## 配置 `architecture.yaml` 是唯一事实来源: ``` layers: domain: allowedImports: [] features: allowedImports: [domain, shared] ui: allowedImports: [features, shared] shared: allowedImports: [] uiLayers: [ui] # optional: scope React UI rules rules: enforceLayerBoundaries: true noCircularLayerDeps: true # Optional UI heuristics (off by default in v2 init; use react-layered preset to enable) noBusinessLogicInComponents: false noDataFetchingInUI: false ``` 完整参考:[docs/architecture.example.yaml](docs/architecture.example.yaml) `enforceFeatureBoundaries` 仍然是 `enforceLayerBoundaries` 的已弃用别名。 ## 命令参考 | 命令 | 描述 | | --- | --- | | `archguard init` | 生成配置脚手架(默认仅包含边界规则) | | `archguard init --preset ` | `boundaries-only`, `react-layered`, `feature-sliced-react` | | `archguard check --diff` | PR 范围扫描(更改的文件 + 导入相邻文件) | | `archguard check --diff-base ` | 用于 diff 的 Git 引用(默认为 `origin/main`) | | `archguard sync` | 根据配置重新生成指南 | | `archguard sync --check` | 如果指南已过期则报错 (CI) | | `archguard sync --targets cursor,copilot` | 仅写入 Cursor/Copilot 规则文件 | | `archguard sync --force` | 覆盖现有的 agent 规则文件 | | `archguard check` | 全仓库扫描 | | `archguard check --root ` | 扫描 monorepo 应用包 | | `archguard check --config ` | 使用自定义的 `architecture.yaml` | | `archguard check --baseline` | 屏蔽已知的违规 | | `archguard check --update-baseline` | 写入 baseline 文件 | | `archguard check --json` | JSON 输出(别名) | | `archguard check --format json\|sarif\|github\|agent` | 结构化输出 | | `archguard check --verbose` | 解析诊断信息 | **同时可用:** `archguard diagram`(计划于 v2.3 推出)—— 参见 [ROADMAP.md](ROADMAP.md)。 ## GitHub Actions ``` - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: lindseystead/ArchGuard@v2 with: diff-only: true diff-base: origin/main baseline: .archguard-baseline.json format: agent ``` Monorepo、SARIF 上传、sync-check 和 baseline 工作流:[docs/github-action.md](docs/github-action.md) ## MCP server (Cursor / Claude) ``` npm install -D @lifesavertech/archguard-mcp@2.1.0 ``` 添加至 `.cursor/mcp.json`: ``` { "mcpServers": { "archguard": { "command": "npx", "args": ["-y", "@lifesavertech/archguard-mcp@2.1.0"] } } } ``` 工具:`archguard_check`、`archguard_explain`、`archguard_init`(通过 `ARCHGUARD_MCP_ALLOW_WRITE=true` 开启写入权限)。 ## 项目结构 ``` ArchGuard/ ├── packages/ │ ├── core/ # Config, parsing, resolution, workspace discovery │ ├── cli/ # archguard command + presets/ │ │ └── src/presets/ # init preset definitions │ ├── rules-react/ # Boundary, cycle, and optional UI rules │ ├── guidance/ # AGENTS.md generation │ └── mcp/ # MCP server for AI agents ├── tests/fixture-*/ # CI fixtures ├── examples/react-layered-app/ ├── docs/ # Adoption, comparison, engineering plan ├── action.yml # Composite GitHub Action └── architecture.schema.ts ``` ## 文档 | 文档 | 描述 | | --- | --- | | [docs/ADOPTION.md](docs/ADOPTION.md) | 团队逐步采用指南 | | [docs/COMPARISON.md](docs/COMPARISON.md) | 对比 dependency-cruiser, ESLint, Steiger | | [docs/PRODUCT.md](docs/PRODUCT.md) | 产品定位与目标用户 | | [docs/ENGINEERING_PLAN.md](docs/ENGINEERING_PLAN.md) | v2 重构计划(面向维护者) | | [docs/architecture.example.yaml](docs/architecture.example.yaml) | 配置参考 | | [docs/github-action.md](docs/github-action.md) | Action 输入项与工作流 | | [docs/migration/v1-to-v2.md](docs/migration/v1-to-v2.md) | 升级指南 | | [ROADMAP.md](ROADMAP.md) | 已发布与计划中的功能 | | [CONTRIBUTING.md](CONTRIBUTING.md) | 开发环境设置 | | [PUBLISHING.md](PUBLISHING.md) | 发布流程 | ## 示例项目 [examples/react-layered-app](examples/react-layered-app) —— 通过检查的参考示例,采用 `domain` / `features` / `ui` 布局。 ## 工作原理 1. 使用 TypeScript compiler API 解析 `.ts` / `.tsx` 2. 通过精确的路径段(`src/ui`,而非子字符串)将文件映射到层级 3. 解析导入:相对路径、tsconfig 别名、workspace 包、project references 4. 评估来自 `architecture.yaml` 的边界规则 5. 以文本、JSON 或 SARIF 格式输出违规项 `AGENTS.md` 是为贡献者和 agent 准备的参考材料。强制执行通过 CLI 和 `architecture.yaml` 进行。编辑配置后,请运行 `archguard sync` 以保持指南同步。 ## 已知限制 - UI 行为规则基于启发式算法,需**主动开启**(在 v2 的 `init` 中默认关闭) - 层级检测使用**精确路径段** - Barrel/re-export 绕过通过 `no-barrel-boundary-bypass` 检测(在强制执行层级边界时默认开启) - 全仓库扫描仍然是默认设置;建议在 CI 中定期安排全量扫描,并与 PR diff 检查结合使用 - npm 包:`@lifesavertech/archguard-cli`(待发布) - 暂无 IDE 扩展 (v2.4) —— 目前仅支持 CI 和 CLI ## 测试 ``` npm test ``` 涵盖核心、CLI(包括预设)、规则和指南的 37 项测试。CI 会对 Action、通过的示例、失败的 fixture 以及 monorepo `--root` 进行冒烟测试。 ## 贡献 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。在开始 v2 相关工作之前,请阅读 [docs/ENGINEERING_PLAN.md](docs/ENGINEERING_PLAN.md)。 ## 许可证 MIT —— 详见 [LICENSE](LICENSE)。
标签:MITM代理, React, Syscalls, TypeScript, 云安全监控, 安全插件, 架构守护, 自动化攻击, 静态分析