NoWreck v0.4.0 – 确定性AI验证器
NoWreck 是一个开源工具,用于确定性验证 AI 对代码变更的描述是否与实际修改一致。它支持 Python 和 JavaScript 文件,通过解析 AST 构建符号索引,检测结构性变更,并与 AI 声明进行精确匹配,输出确认、矛盾或无法验证的结果。该工具专注于事实核查,不依赖 AI 主观判断。
NoWreck 是一个专注于验证 AI 对代码变更所作声明准确性的工具。它由 AstralXVoid 开发,旨在解决 AI 代码助手可能生成虚假或不准确描述的问题。该工具的核心理念是:不依赖 AI 进行判断,而是通过确定性分析比对代码结构的变化。
NoWreck 的工作流程分为三个阶段:扫描、检测和验证。扫描阶段递归查找 Python(.py)和 JavaScript(.js)文件,使用各自的语言解析器构建符号索引,索引中包含所有函数、类和方法。Python 利用内置的 ast 模块,JavaScript 则使用 Tree-sitter 及其 JavaScript 语法。检测阶段比较前后快照的符号索引,识别结构性变更,如添加或删除函数、类、文件以及新增的函数调用。验证阶段则针对 AI 提供的声明,在已检测的变化中寻找匹配项,若找到类型和身份完全匹配的变化则标记为“已确认”(CONFIRMED),若找到矛盾的变化则标记为“矛盾”(CONTRADICTED),若没有匹配则标记为“无法验证”(UNVERIFIABLE)。
该工具支持七种声明类型:ADD_FUNCTION、REMOVE_FUNCTION、ADD_CLASS、REMOVE_CLASS、FILE_CREATED、FILE_DELETED 和 CALLS_FUNCTION。每种类型都通过直接的结构事实进行验证,不涉及关键词猜测或语义解释。NoWreck 还会为每个结果提供置信度分数:确认和矛盾均为 100%,无法验证为 50%。
NoWreck 提供了多种使用模式。交互模式(nowreck --interactive)启动终端菜单,适合新用户和一次性验证。提示模式(nowreck fix "...")让用户用自然语言描述变更,NoWreck 会调用配置的 AI 模型生成差异和声明,然后自动验证。前后模式(nowreck fix --pre PATH --post PATH)允许用户手动提供两个快照目录,并可选地附带 JSON 格式的声明进行验证。此外,还支持 --json 输出以集成到 CI 流水线。
配置方面,NoWreck 支持任何与 OpenAI API 兼容的模型端点,如 Groq、DeepSeek、Ollama、LM Studio、OpenRouter 以及 OpenAI 本身。用户可以通过 nowreck config 命令设置 API 密钥、基础 URL、模型、温度和最大重试次数。环境变量 NOWRECK_API_KEY 也可替代配置文件中存储的密钥。
与其他工具相比,NoWreck 的定位独特。它不像 Cursor 或 Copilot 那样生成代码,也不像 CodeRabbit 那样进行代码审查,而是专注于验证代码变更描述的真实性。类似的验证工具如 slopcheck 检查包名注册,但 NoWreck 聚焦于代码结构层面的声明验证。
NoWreck 的局限性包括仅支持 Python 和 JavaScript,无法处理动态行为(如 exec、eval、动态导入、元类等),仅检测简单函数调用(不支持 obj.method() 或链式调用),缺乏跨文件语义分析,且不支持 TypeScript。开发路线图包括添加 --verbose 模式、更多模型提供商(Anthropic、Gemini)、大型仓库缓存、TypeScript 支持和 CI/CD 集成。
安装方面,目前需要从源代码通过 pipx 或 pip 安装,PyPI 发布将在后续推出。要求 Python 3.10 或更高版本。总体而言,NoWreck 为依赖 AI 协助的开发者提供了一种验证工具,确保 AI 的说明与实际代码变更保持一致。