2026年6月27日 2 分钟阅读

Depwire 场景聚焦:用确定性依赖图阻止 AI Agent 盲目重构

tinyash 0 条评论

AI 编程助手越来越聪明,但它们仍然有一个根本的盲区:不知道代码架构

你让 Claude Code 删掉一个工具文件,它删得干净利落,毫无警告。然后你跑构建,30 个文件断裂。Claude 根本不知道——它只看到了一个文件,没看到那 30 个下游消费者。

这不是模型的问题,是上下文的问题。AI 在盲目飞行。

这周我深度体验了一个叫 Depwire 的开源工具——它不是又一个 AI 编码助手,而是 AI 编码助手和代码库之间的上下文与安全层。Depwire 用 tree-sitter 构建了一个确定性的依赖图(不是 RAG、不是向量数据库、不是概率估算),通过 23 个 MCP 工具让 AI Agent 在动代码之前就知道后果。

三分钟上手

Depwire 是一个 CLI 工具,一条命令安装:

npm install -g depwire-cli

安装后有三个核心命令:

depwire whatif     # 改动前模拟影响范围
depwire security   # 发现 AI 引入的安全漏洞
depwire viz        # 可视化整个架构

以 TypeScript 项目 honojs/hono(352 个文件、6,462 个符号)为例,depwire whatif 模拟删除一个工具函数,几毫秒内就给出了精确的影响报告:29 个受影响节点、30 个断裂的 import、零架构健康分下降。

这个精度来自 tree-sitter——不是 LLM 的最佳猜测,而是编译器级别的确定性分析。

为什么不是 RAG、不是构建图?

你可能在想:这和传统的代码分析工具有什么不同?

不是 RAG。Depwire 不做嵌入、不计算相似度、不用向量数据库。它遍历精确的依赖图,返回的是精确的文件列表——不是「看起来像」的估算答案。

不是构建图。Nx、Turborepo 这类工具跟踪的是包级别的依赖关系,用于构建缓存。Depwire 跟踪的是符号级别的依赖——每个函数、每个类、每个 import 关系。这才是模拟「删除这个函数会牵连哪些文件」所需要的精度。

五种模拟操作

Depwire 的 whatif 子命令支持五种变更模拟:

depwire whatif . --simulate delete --target src/utils/encode.ts

depwire whatif . --simulate move --target src/utils/encode.ts --destination src/core/encode.ts

depwire whatif . --simulate rename --target src/utils/encode.ts --destination src/utils/encoder.ts

depwire whatif . --simulate split --target src/services/auth.ts --symbols "validateToken,refreshToken"

depwire whatif . --simulate merge --target src/utils/helpers.ts --merge-target src/utils/formatters.ts

在模拟时,不会真正读写文件——所有运算在内存中完成,零 I/O、零副作用。不加 --simulate 参数会打开浏览器 UI,左右对照当前状态和模拟后状态的弧线图。

对于多模块项目(Maven、Gradle),Depwire 能跨模块解析依赖关系。测试中,google/guice(13 个模块的 Java DI 框架)模拟删除核心文件时,准确检测到了 124 个断裂的 import,其中 106 个是跨模块依赖。

给 AI 装架构眼睛:23 个 MCP 工具

Depwire 最实用的功能是 MCP 服务器集成。23 个 MCP 工具让 AI 编码助手在动代码之前就能获取架构上下文:

  • what_if — 让 Claude Code 或 Cursor 在重构前先查询影响范围
  • verify_change — 验证修改是否安全,检查断裂 import、新循环依赖、健康分变化和安全问题
  • security_scan — 扫描代码安全风险(10 个检查类别)
  • structural_diff — 对比两个 commit 之间的结构变化
  • health_score — 查询当前架构健康分

举个实际工作流:你在 Cursor 中对 Terminal 说「重构 auth 模块」,Cursor 可以在执行前调用 verify_change MCP 工具,Depwire 返回一份变更报告:健康分变化、断裂 import 数量、新安全发现。Cursor 拿到这份报告后,要么自动修复问题,要么回退操作。

这种「先查后改」的模式,从根本上解决了 AI 盲目重构的问题。

安全扫描:架构感知的 SAST

一般的 SAST 工具会报一堆安全发现,但你分不清哪些是真正可被攻击的。Depwire 的 security_scan 有「图感知严重度提升」:一个中等严重度的漏洞,如果从 MCP 工具入口或 HTTP 路由可达,会被自动提升为严重级。

depwire security .                        # 全仓库扫描
depwire security . --target src/auth.ts   # 单文件
depwire security . --format sarif         # GitHub Security tab 集成
depwire security . --fail-on high         # CI 门禁

对 honojs/hono 扫描结果:6 个严重、19 个高、14 个中、1 个低。覆盖 10 个检查类别——依赖 CVE、进程安全、凭据管理、路径安全、认证安全、输入验证、信息泄露、加密弱点、输出编码安全、架构级风险。

PR 代码审查:每个 PR 都能看见架构影响

Depwire 提供 GitHub Action,每次 PR 自动发布依赖影响报告:

name: Depwire PR Impact
on:
  pull_request:
    branches: [main]

jobs:
  depwire:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - uses: depwire/depwire-action@v1
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}

reviewer 在 PR 页面就能看到哪些符号被修改、哪些 import 链断裂、健康分升降了多少。甚至可以设置门禁——健康分下降超过 5 分时自动阻止合并。

适合谁用

Depwire 的价值在项目规模达到一定程度时才显现出来:

  • 50 个文件以内的项目:手动管理就够了
  • 100-500 个文件的项目:AI 重构开始频繁出错,需要架构感知层
  • 500+ 个文件或多模块项目:跨模块依赖的断裂几乎不可能靠人工追踪

它支持 16 种语言(TypeScript、JavaScript、Python、Go、Rust、Java、C#、C++、PHP、Ruby、Dart、Kotlin、Swift、Mojo、R 等),所以不管技术栈是什么,Depwire 都能覆盖。

总结

Depwire 解决的是一个非常具体但影响深远的痛点:AI 编码助手在做重构时不知道代码架构,导致批量断裂。它的设计理念很清晰——不给 AI 更多的「智能」,而是给 AI 更精确的「上下文」。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。