关于 Vinv
Vinv 是面向 AI Agent 的代码验证工具,通过采集运行时追踪并将其关联到源代码,让编码 Agent 基于实际运行证据修复问题,并重新运行代码验证修复结果。它提供编辑器扩展、命令行和 MCP 服务三种使用方式,目前以 Python 服务和 API 为主。
主要功能
- 01零代码修改的运行时追踪与源码关联
- 02语义代码搜索与代码图谱
- 03基于运行结果的故障定位与死代码检测
- 04端点自动测试并保存为回归用例
- 05经验证的修复与性能优化流程
适用场景
- 01为编码 Agent 提供运行时证据以定位 Python 服务的错误
- 02检测未被执行的死代码并决定保留或删除
- 03验证性能优化是否改变输出结果
MCP 相关
该项目提供一个 MCP 服务,包含 16 个工具,覆盖语义搜索、死代码、故障定位、运行时数据与验证优化循环,可安装到 Claude Code、Codex、Gemini CLI 等客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y vinv-mcpVINV_WORKSPACEOptional override for the repo/workspace Vinv analyzes. Normally unset — the server uses the folder your client exposes via MCP roots, falling back to the current working directory.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
16收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| query | string | 是 | 自然语言搜索查询。 |
| top_k | number | 否 | 结果数量(默认值为 5)。 |
详细介绍
VinvAI
帮助 AI Agent 测试、修复和优化代码库的工具。
Vinv 将运行时跟踪与生成它们的确切源码关联起来,把这些证据交给你已经在使用的编码 Agent,然后重新运行代码,验证修复确实有效。它不是另一个编码 Agent,而是你现有 Agent 背后的证据层:你的 Agent 提出方案,Vinv 负责验证。
|
编辑器扩展 |
MCP 服务 |
查看实际效果 · 功能介绍 · 深入了解其原理 · 2 分钟演示
只构建一次工作区上下文——每个 Agent 都读取同一个 .vinv/ 存储。
为什么选择 Vinv
如今,84% 的开发者已经在使用或计划使用 AI 编码工具,但不信任其输出的人(46%)多于信任的人(33%),而且不信任的人数在一年内几乎翻了一倍(Stack Overflow 2025,49k 名开发者)。
原因并不陌生:Agent 修改了错误的处理程序,臆造返回结构,然后自己批改自己的作业,而服务甚至无法启动。或者它陷入循环——测试失败,Agent 修改同一个函数,测试再次失败——把上下文窗口浪费在“让我验证一下”上。
这两种失败有着共同的根源:Agent 从未观察过你的代码运行。 它只根据静态文本进行判断。
这个行业自动化了代码的编写,却把代码的验证完全留给了人工。Vinv 自动化验证,然后才进行查找和修复。
安装
Vinv 有三种使用方式:编辑器扩展、CLI,或供任何 Agent 使用的 MCP 服务。三者共用相同的本地引擎。
编辑器扩展
只需单击一次——从 vinv.ai 安装,即可在编辑器中直接打开扩展(VS Code、Cursor、Windsurf、VSCodium、Trae 和 Insiders)。扩展发布在 Open VSX 和 VS Code Marketplace。
也可以使用编辑器的 CLI 安装:
| 编辑器 | 命令 |
|---|---|
| VS Code | code --install-extension VinvAI.VinvAI |
| Cursor | cursor --install-extension VinvAI.VinvAI |
| Windsurf | windsurf --install-extension VinvAI.VinvAI |
| VSCodium | codium --install-extension VinvAI.VinvAI |
| Trae | trae --install-extension VinvAI.VinvAI |
| VS Code Insiders | code-insiders --install-extension VinvAI.VinvAI |
首次运行时会构建引擎——大约需要 3 分钟,主要用于编译 Rust 索引;此外还会一次性下载约 100 MB 的本地嵌入模型(需要安装 uv 和 Rust)。大约一分钟后即可获得第一条跟踪记录;之后的操作只需几秒。
CLI(Python 引擎)
pip install vinv # every engine as a console script
# or run one with zero install:
uvx --from vinv exerciser campaign <repo> --budget 20
MCP 服务(适用于任何 Agent)
为 Claude Code、Cursor 或任何 MCP 客户端提供 Vinv 工具——只需配置一个全局配置,即可通过 MCP 根自动找到已打开的工作区。
Claude Code、Codex、Gemini CLI——只需安装一次,即可用于你打开的每个文件夹,而不只是当前文件夹:
claude mcp add --scope user vinv -- npx -y vinv-mcp
codex mcp add vinv -- npx -y vinv-mcp
gemini mcp add --scope user vinv npx -- -y vinv-mcp
Claude Code 默认使用当前目录,Gemini CLI 默认使用当前项目,因此二者都需要设置 --scope user;Codex 始终写入 ~/.codex/config.toml,没有 scope 标志。
其他客户端:在 mcpServers.vinv 下添加 { "command": "npx", "args": ["-y", "vinv-mcp"] }。参见 vinv-mcp——共 16 个工具:语义搜索、死代码检测、故障定位、运行时值/切片/覆盖率,以及验证/优化循环。
从源代码构建 — 面向贡献者
git clone https://github.com/VinvAI/VinvAI ~/.vinv/engines && cd ~/.vinv/engines && ./install.sh
Windows(PowerShell):
git clone https://github.com/VinvAI/VinvAI $HOME\.vinv\engines; cd $HOME\.vinv\engines; .\install.ps1
运行 → 测试 → 发现 → 证明。 将 Vinv 指向一个 Python 仓库;其余工作交给它——无需修改代码,也无需 API 密钥。
flowchart LR
T[Trace] --> I[Index] --> S[Serve MCP] --> V[Verify] --> L[Learn] --> T
- 运行 — 无需任何修改,即可在追踪环境下启动所有服务,从实际运行中捕获耗时、参数、返回值和调用树。
- 测试 — 向每个端点发送真实请求(有效、边界、负面、经过身份验证),并将每个响应存为回归用例。
- 发现 — 找出实际出现的问题或性能变慢之处——服务器错误、崩溃、延迟热点、死代码——并将每项问题关联到确切的源代码行。
- 证明 — 将证据交给你已经在用的 Agent,然后根据修复前编写、且 Agent 从未见过的验收测试验证修复。任何改变输出的“加速”改动都会自动回滚。
你的 Agent 是唯一的大模型——不增加费用、不用挑选模型,也无需提供商密钥。查看 vinv.ai/#under-the-hood 上的完整演示。
查看实际效果
这不是实验室基准测试,而是在真实项目(scikit-learn、watermarks-remover、semantica、FastAPI、Typer、smolagents)中发现并提交的真实问题,每项都有可打开的上游讨论串。所有工作均由安装了 Vinv、运行 Composer 2.5 的 Cursor驱动——并非前沿模型。发挥作用的是证据,而不是模型。 查看包含截图的完整列表:vinv.ai/#catches。
死代码——以从未运行过来证明
静态工具只能证明*“没有任何内容引用它。”* Vinv 则能证明*“没有任何一次捕获执行过它,”*将每个未追踪的代码孤岛及仍指向它的活动调用方一并呈现,并让你的 Agent 给出结论——集成、删除或保留。
| 上游 | Vinv 发现的问题 | 状态 |
|---|---|---|
| scikit-learn#34790 | _ridge.py 中未使用的 _find_smallest_angle 辅助函数,在重构后被遗留 | ✅ 已合并 — “感谢清理” |
| semantica#1176 | 9 个文件中有 13 个未被引用的符号(删除 289 行,新增 0 行) | ✅ 已合并 — 审查后将其中 2 个恢复为已弃用 |
| fastapi/typer#1937 | vendored Click 中未使用的 OptionHelpExtra TypedDict | ✅ 维护者已确认 |
semantica#1176 在一个讨论串中展现了严谨做法:维护者指出有两个符号可供下游导入,Vinv 为其添加弃用警告并予以恢复,同一位维护者随后合并了更改。
优化——必须证明有效的加速
每次调用都会计时,并将耗时归属到实际消耗它的符号。只有当配对自助法 95% 置信区间高于零,且行为测试套件重放结果逐字节完全一致时,候选修复才会发布——更快但结果不同的改动会自动回滚。
| 上游 | Vinv 证明了什么 | 状态 |
|---|---|---|
| watermarks-remover#261 | 在 clean_image 中跳过已丢弃的 exiftool 子进程和冗余的 SynthID 评分——输出完全一致,且通过回归测试 | ✅ 已合并 |
| smolagents#2572 | sanitize_for_rich 中的快速路径:36.27 KB → 0.00 KB/次调用(减少约 37,137 倍),通过 2,014 个输入的回归测试 | 🔵 开放,正在审查 |
| semantica#1178 | 一次性构建内置算法目录,并通过写时复制共享 | 🔵 开放,已分诊 |
错误报告 — 只在运行时才会出现的错误
扫描器读取源代码并猜测。Vinv 驱动服务并监视返回结果:
- 驱动 — 对每个发现的端点进行测试,使用无人编写过的输入。
- 判定 — 500 状态码本身不算发现;判定器会指出本应返回的状态码。
- 移交 — 以证据包的形式交付:复现命令、调用链、实际参数值。
在 fastapi/full-stack-fastapi-template(约 44k★)上,经过身份验证的扫描提交了讨论 #2454——4 个端点对本应返回 4xx 的输入返回了 500,每个端点都有一个复现用例——随后另一位贡献者在 master 上逐一复现了这 4 个问题,并指出文件和行号:“已在 master 上验证——全都是真实问题。”
Vinv 能为你的 Agent 做什么
一个循环,按你要解决的问题分类。每项能力都链接到网站上的实时演示。
理解代码库 → vinv.ai/#what-it-does
- 语义代码搜索 — 按含义提问,获取带排名的符号及其
def函数体和行号,由本地模型生成嵌入。 - 代码图谱 — 持久化记录每个符号和调用边的映射,保存时增量更新,并附带实时运行时叠加信息。
- 运行时追踪 — 无需修改代码即可追踪:每次调用的耗时、内存、参数、返回值和错误,并关联到源代码。
- 询问 Vinv — 用通俗英语提问有关运行中系统的问题,每个回答都引用确切的追踪片段和源代码行,并由确定性审查器拦截证据无法支撑的任何说法。
找出实际出错之处 → vinv.ai/#catches
- 故障嫌疑项排名 — 对任何故障,依据真实成功/失败请求的故障定位得分为符号排序,并附上实际错误消息。
- 行为测试器 — Vinv 不会等待流量:它会自行驱动每个发现的端点,使用 Thompson 抽样多臂老虎机选择策略,并将每个响应保存为永久回归用例。
清理死代码 → vinv.ai/#what-it-does
- 死代码区段 — 将未追踪的孤岛划分为“没有引用”和“由活动代码触达但从未执行”两类,每个区段都附有仍指向它的活动调用方,以及附带理由的保留或删除结论。
找回延迟损耗 → vinv.ai/#what-it-does
- 可找回耗时 — 按实际可节省的毫秒数为延迟热点排序,并将每项作为先预测、后验证的优化任务分派,而不是凭猜测行事。
信任修复结果 → vinv.ai/#under-the-hood
- 已验证的修复 — 重放启动流程、使用实时端口、运行 Agent 看不到的验收测试。点击一次即可还原某个任务执行过程中的所有更改。
- 旅程 — 一次演示所有已验证内容:每个服务,以及每个端点的调用树、延迟火焰图和精确输入 → 输出;还可添加自己的测试输入,由引擎永久重放。
- 自动驾驶 — 点击一次即可依次执行发现 → 设置 → 追踪 → 测试 → 修复 → 验证,直到全部通过或预算耗尽;出现新的追踪错误时,等你在图谱中看到红色圆环,修复任务已经分派完毕。
- 发现项 — 问题聚类、带配对自助法置信区间的优化任务、按类型区分的回归差异,以及可供 Agent 直接使用的机器可读
findings.json。
诚实说明范围: 目前优先支持 Python——服务和 API。其他语言可使用索引、图谱和基于证据的问答,但目前尚无运行时证据。接下来将支持 TypeScript 和 Go。
仅使用 Agent 与使用 Agent + Vinv
| 仅使用 Agent | 使用 Agent + Vinv | |
|---|---|---|
| 查找代码 | 用 grep 搜索并猜测文件 | 按含义排序的符号及其行号 |
| “完成” | 自称完成,自己给自己的作业打分 | 重放启动过程、检查实时端口、运行未见过的验收测试 |
| 记忆 | 每次会话后都忘记 | 持久化索引 + 图谱,保存时更新 |
| 运行时 | 无法查看 | 每次调用的真实跟踪、值和火焰图 |
| 调试 | 阅读源码,推测问题 | 按故障可能性排序的嫌疑项,附真实错误消息 |
| 死代码 | 无法分辨已使用和未使用的代码 | 从未执行过的代码区段及其实时调用方,并给出判定 |
| 错误修复 | 自己比较差异,然后祈祷 | 一键还原本次执行涉及的所有内容 |
| API 测试 | 编写测试后再自己给测试打分 | 测试每个端点,并将每个响应存为未见过的回归用例 |
| 性能声明 | “现在应该更快了” | 配对自举法的 95% 置信区间必须排除零,行为必须逐字节一致,否则自动还原 |
| 成本 | 花费 token 反复探索 | 一次在本地组合证据包;多臂老虎机会学习哪种组合最有效 |
为什么 Agent 在 Vinv 下无法通过奖励入侵取巧
Vinv 将每条运行时轨迹都与生成它的确切代码关联起来,并基于这种关联为你的 Agent 构建上下文图,因此 Agent 依据证据推理,而非凭感觉判断。而当它宣称成功时,Vinv 不会只听它的一面之词:
- 验收测试会在修复前编写,存储在工作区之外,并使用不透明令牌;这些测试必须在有缺陷的代码上确定性地失败两次——修复前就能通过的测试会被丢弃。
- 任何会改变可观察输出的“更快”修复都会自动回滚——行为测试套件必须重放出逐字节一致的结果,而且加速效果的配对自助法 95% 置信区间必须不包含零。
- 有意返回的 4xx 拒绝并非需要修复的“错误”——缺陷分类器能区分服务正确地说“不”和服务发生故障,因此 Agent 不会收到只能靠取巧达成的虚假目标。
- 当两次尝试都不再取得进展时,纳什议价僵局裁判只有在探索者立场和审计者立场都严格认为继续尝试优于询问你时,才会继续。
幕后机制:预言机阵容、预算调度器与沙箱
测试阶段并非由单个测试器执行,而是由一组预言机组成;它们各自搜寻不同类别的缺陷,并将结果统一写入发现项和修复调度路径。
| 预言机 | 发现内容 | 发现类型 |
|---|---|---|
| HTTP 测试器 | 自行驱动每个端点——包括符合架构的请求、边界情况、负面情况、从真实轨迹中挖掘出的值、多步身份验证 | server-error · crash · invariant-violation |
| 差分预言机 | 将处理器或求值器与参考实现比较——对于解析器,参考实现就是 CPython;出现分歧本身就是错误报告 | differential-mismatch |
| 故障注入 | 在依赖边界注入对抗性但合法的数据形态,并测试流中的每个分块拆分点 | fault-crash · fault-divergence |
| 并发预言机 | 确定性交错执行和超时注入——并行调用时发生损坏的共享状态、导致死锁的锁顺序 | concurrency-divergence · concurrency-hang |
| 环境预言机 | 依赖解析矩阵,以及签名发生变化的上游符号 | signature-drift |
| 黄金 I/O 基线 | 悄然丢弃字段或更改状态类别的“更快”改动 | baseline-degraded |
| 死代码 | 未追踪的代码片段,以及仍引用它们的活动调用方 | 死代码片段 |
| 运行时分析 | 延迟热点、内存泄漏疑点(Theil–Sen)、值得缓存的重复计算、吞吐量上限(USL 拟合) | 热点 · 泄漏 · 缓存候选项 · throughput-ceiling |
调度器采用多臂老虎机算法。 exerciser campaign 使用 Thompson 抽样,在 (目标 × 技术 × 预言机) 上为所有已启用的预言机分配一份预算。成本会被实际测量(墙上时钟时间按探测等价单位归一化,再加上启动的子进程),而且每个缺陷签名只计分一次,因此确定性预言机无法因同一个错误重复获得积分。后验分布会保存在 campaign.json 中——系统会逐渐学会哪种技术在你的代码库上最有效。
未经验证的代码会在分级隔离机制下运行:优先使用内核强制实施的操作系统沙箱(sandbox-exec / bwrap / unshare);如果主机不支持,则使用进程垫片——始终搭配一次性仓库副本、重定向的 HOME/TMPDIR、被阻止的网络访问和子进程创建。隔离级别由一次探测决定:探测会验证对根目录外的写入确实失败,而不是仅根据二进制文件是否位于 PATH 中来判断。Postgres、Redis 和 S3 会在监狱环境内部替换,这样依赖它们的代码就能运行,而不会因连接失败而中断。
Vinv 的发布门禁就是 Vinv——以下数据来自在本仓库上运行该循环:
| 指标 | 结果 |
|---|---|
| 索引 | 4,036 个符号 |
| 搜索 | 文件命中率@10 0.90 · 符号 MRR 0.51 · p50 81ms |
| 崩溃恢复 | 索引器、嵌入器和跟踪服务都经过运行中途强制终止测试 |
| 自行发现的浪费 | 发现 83% 的重复计算 → 现已缓存 |
| 检索调优 | 基于 800 条已记录决策进行离策略评估(双重稳健、BCa 自助法),最终采用 top-k 10(+0.173,95% CI [+0.081, +0.317]),并淘汰另外两个候选方案 |
| 测试套件 | 2,376 项测试——1,575 项 Python · 801 项扩展 |
完整的学习过程——奖励、倾向评分、门控计算,以及每项主张对应的 file:line——见 docs/learning.md。测试分类体系见 docs/testing-ontology.md。
适配你的 Agent
运行一条命令(在 Agent Tools 中注册 Vinv MCP),即可将服务写入检测到的每个 Agent:
| Agent | 修复分发 | MCP 工具 |
|---|---|---|
| Claude Code | ✅ | ✅ 自动 |
| Cursor(CLI + 聊天) | ✅ | ✅ 自动 |
| Codex CLI | ✅ | ✅ 自动 |
| Gemini CLI | ✅ | ✅ 手动 |
| Copilot Chat(VS Code) | ✅ | ✅ 自动 |
| Windsurf Cascade | ✅ | ✅ 自动 |
各客户端的配置位置及验证方法
注册操作可幂等执行,且绝不会提交密钥。服务(vinv-index、vinv-runtime、vinv-exercise)通过编辑器自带的运行时,以 stdio 启动。
- Claude Code —
~/.claude.json,项目本地范围。验证:claude mcp list。 - Cursor —
<repo>/.cursor/mcp.json。验证:在 Settings → MCP 中确认它们显示为绿色。 - Codex CLI —
~/.codex/config.toml中的[mcp_servers.vinv-index]/[mcp_servers.vinv-runtime]。 - Copilot Chat — 原生 VS Code MCP 提供程序(自动);较旧版本使用
.vscode/mcp.json。 - Windsurf Cascade —
~/.codeium/windsurf/mcp_config.json。 - Gemini CLI — 分发功能开箱即用;如需使用 MCP 工具,请将相同的 stdio 服务添加到
~/.gemini/settings.json。
你的 Agent 也是 Vinv 唯一使用的大模型——每个分析步骤都会通过你已经付费使用的编码 Agent CLI 进行。
MCP 工具参考 — 有意精简工具名称;会话工具可复用处理多种操作
vinv-index — 你的代码和会话:
| 工具 | 返回内容 |
|---|---|
vinv_query | 按排名排列的符号及其路径和决策 ID——适用于任何按含义搜索的场景,在 grep 之前使用 |
vinv_feedback | 确认响应——根据结果采取行动后提供 −1..1 的奖励;用于训练检索 |
vinv_session | 一个工具包含 10 项操作——读取:trajectory · status · issues · hotspots · memory_trends · cache_candidates;执行:fix · run_sweep · set_goal · set_budget |
vinv-runtime — 已捕获的运行记录(只读,附带来源标记):
| 工具 | 返回内容 |
|---|---|
rank_suspects | 对通过/失败请求涉及的符号按故障可能性排序,并附上真实错误 |
values_of | 观测到的参数/返回类型、空值率和范围 |
slice | 从请求根节点开始观测到的调用链,以及每个栈帧的值 |
coverage_of | 运行过的内容、运行频次、成功/错误状态及耗时 |
callers_of / blast_radius / why_did_this_run | 观测到的调用方 · 传递影响范围 · 入口点路径 |
vinv-exercise — 你的 Agent 会对你的服务进行测试并回报运行结果;Vinv 会评估返回的内容。
pip install vinv 会将所有引擎作为控制台脚本一并安装,也可以单独使用其中任意一个:
| 引擎 | 命令 | 功能 |
|---|---|---|
| exerciser | exerciser campaign <repo> --budget N | **从这里开始。**覆盖率引导的 API 测试工具 + oracle 群组;积累永久回归测试套件,并报告哪种技术发挥了作用。 |
| tracelens | tracelens run -- <cmd> | 无需修改代码的运行时追踪器——记录耗时、参数、返回值和调用树。 |
| index | index query <repo> · index deadcode <repo> | Rust 语义代码索引——按含义搜索,并生成仅针对源代码的死代码报告。 |
| identification | identification consolidate <repo> | 将追踪记录与源代码关联——生成 API 接口面和调用图映射。 |
| bringup | bringup list/start <repo> | 在追踪模式下启动服务。 |
| handbook | handbook generate <repo> | 生成 Agent 执行的代码库探索任务。仅提示词。 |
| goal | goal create <context> | 将工作上下文提炼为一个长期目标。仅提示词。 |
| embedder | vinv-embedder serve | 本地嵌入侧车(granite-embedding-small)——无需云端密钥。 |
| contracts | (库) | lens_contracts——所有引擎读写的共享数据契约。 |
exerciser CLI——oracle 群组,可独立运行
| 命令 | 功能 |
|---|---|
exerciser campaign <repo> [--base-url URL] [--budget N] | **从这里开始。**通过 Thompson 采样,将一份预算分配给所有已启用的 oracle |
exerciser plan <repo> [--base-url URL] | 为每个端点制定输入计划(模式 + 已观察数据 + 语义层) |
exerciser run <repo> --base-url URL | 对正在运行且已追踪的服务执行计划,并以覆盖率为引导 |
exerciser functions <repo> [--require-tier os-sandbox] | 在进程内驱动入口点和导出函数,并进行隔离 |
exerciser differential <repo> [--target M:f --reference cpython-exec] | 将函数与参考实现进行比较 |
exerciser faults <repo> [--auto-target M:f] | 在依赖边界处测试合法但具有对抗性的输入形式 |
exerciser concurrency <repo> --target M:f | 确定性调度 + 超时注入 |
exerciser environment <repo> | 依赖解析矩阵 + 上游签名漂移 |
exerciser containment | 此主机实际可提供哪种隔离等级,以及原因 |
exerciser throughput-sweep <repo> --base-url URL | 并发扫描 + USL 拟合 → throughput-ceiling 机会 |
exerciser regress <repo> --base-url URL | 重放累积的行为测试套件,并按差异类型报告 |
exerciser scorecard <repo> | 服务评分卡:覆盖率前后对比、不变量、问题和延迟 |
对于 apis.json,必须先运行 identification consolidate;如需获得真实覆盖率,还必须让服务在 tracelens 下运行。
我需要自己的 API 密钥吗?
不需要。Vinv 会在本地运行所有内容。语义索引和代码嵌入器无需任何服务提供商密钥,就能在你的机器上运行。你的 Agent CLI(Claude Code、Cursor、……)会使用你已配置的身份验证,自行处理与大模型的通信。是否会进行遥测或数据收集?
不会进行遥测、分析、使用情况上报或崩溃报告。Vinv 会将每个仓库的状态存储在.vinv/ 中,并将每台机器的状态存储在 ~/.vinv/ 中;跟踪记录中的敏感数据会经过脱敏,绝不会发送到任何地方。该扩展自身只会发出一次出站请求:激活时从 notices.vinv.ai 获取一个静态文件,让你知晓有问题的版本。没有查询字符串、没有标识符,也不会上传任何内容;最多每小时一次。使用 vinv.notices.enabled 可将其关闭。
Vinv 会修改我的代码吗?
不会。Vinv 使用零修改跟踪器,可在运行时为你的 Python 后端添加检测,无需 SDK 集成、装饰器或修改源代码。它如何判断修复是否有效?
验收测试会在修复前编写,并使用不透明令牌存储在工作区之外;它们必须在有问题的代码上确定性地连续失败两次——修复前就能通过的测试会被丢弃。随后,修复必须通过这些测试,同时满足重放的启动过程、活动端口以及所有其他可观察行为都逐字节一致。针对差异内容的确定性反作弊审计会直接阻止修改测试、吞掉异常和影子模块。支持哪些语言和 Agent?
目前,运行时证据——跟踪、oracle 群集和已验证修复——仅支持 Python,适用于服务和 API;其他技术栈可使用语义索引、代码图谱和基于依据的问答。接下来将支持 TypeScript 和 Go。编辑器:VS Code、Cursor、Windsurf、VSCodium、Trae、VS Code Insiders。它可驱动的 Agent:Claude Code、Cursor CLI、Codex CLI、Gemini CLI、Copilot Chat、Windsurf Cascade。它真的免费且开源吗?
是的——Apache 2.0,所有引擎都可在此仓库中从源代码构建。隐私
- 所有内容都在你的机器上——每个仓库的状态存储在
.vinv/中(自动加入 Git 忽略),每台机器的状态存储在~/.vinv/中。无需账户、无需 API 密钥,没有遥测——完全没有。 - 仅有一次出站请求,你可以查看其内容:激活时获取
notices.vinv.ai上的一个静态 JSON 文件,仅用于发布版本问题和安全通知。没有查询字符串、没有标识符,也不会上传任何内容;最多每 12 小时一次;使用vinv.notices.enabled可将其关闭。 - 唯一的下载内容是嵌入模型(来自 Hugging Face,仅下载一次,约 100 MB);其他所有内容都从此仓库构建。
- 跟踪记录存储的是有限长度的摘要,而非原始值;敏感参数名称(
password、token、api_key、……)会经过脱敏,绝不会被捕获。 - Vinv 唯一会与之通信的大模型,是你配置的编码 Agent CLI,通过该 CLI 自身的身份验证进行通信。
贡献与许可
请参阅 CONTRIBUTING.md — 运行 uv sync,在 index/ 中运行 cargo build,在 extension/ 中运行 npm install && npm run check,并确保 tests/e2e/planted_bug_golden/run.py 通过。适合新手的问题都有标签。参与即表示你同意我们的行为准则;如需报告漏洞,请参阅 SECURITY.md。Apache License 2.0 © 2026 VinvAI。
你的 Agent 说它完成了。Vinv 说,拿证据来。
如果 Vinv 发现了你的 Agent 遗漏的问题——在 Open VSX 上留下评价,并 ⭐ 为此仓库点星。
vinv.ai · 它能发现的问题 · Open VSX · LinkedIn · [email protected]
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。