IVE——独立振动环境
AI生成代码库的理解工具。打开工作区,请参阅 坡度在60秒内。不是过梁。不是证券 扫描仪。一张地图。
状态: 建造规范的所有22点都作为工作代码。 合同 (§4)被冻结;扩展主机→ 守护进程→ webview循环在VSCode中运行; 每个工作流-F IVE本地检查都会触发(幻觉、交叉文件 arity、WebGL绑定);有根据的摘要为他们的索赔提供了依据 100个案例语料库;Pyright+tsc+锈分析仪进料类型诊断; Semgrep+PyTea饲料安全/形状诊断;工作流C船 默认情况下为函数内AST切片和Joern CPGQL切片路径 后面 IVE_ENABLE_JOERN=1;工作流I提供发布工作流 加上首次运行分析器包下载器。
我们向(Pyright、tsc、锈迹分析仪、, Semgrep、PyTea、Joern)通过以下方式清洁降解 capabilityDegraded 事件 而不是默默地产生不完整的画面。§0规则2 行动。
此README面向 代理商继续建造.阅读 以下相关工作流部分和参考规范部分 在触摸代码之前。
______________________________________________________________________
布局
Cargo.toml — Rust workspace root
daemon/ — Workstream B: analysis daemon (binary: ive-daemon)
src/contracts.rs — §4 wire contract (Rust side)
src/parser/ — tree-sitter per-language extractors + complexity
(python, typescript/tsx, rust v1.1)
src/analyzers/
hallucination.rs — lockfile-driven import check with fix edits
crossfile.rs — cross-file arity mismatch (Python + TS)
binding.rs — WebGL/WebGPU uniform/attribute check
slice.rs — intra-function AST slice (workstream C partial)
grounding.rs — LLM + offline summaries, token-overlap gate
lsp.rs — Pyright + tsc subprocess runners
rust_analyzer.rs — minimal LSP client (Content-Length framing)
semgrep.rs — Semgrep CLI runner with ive-ai-slop.yml rules
pytea.rs — PyTea subprocess runner (Python + import torch)
joern.rs — JRE/Joern presence + opt-in CPGQL slice path
src/cache.rs — blob-SHA + persistent manifest Merkle cache
src/git.rs — git churn → novelty
src/health.rs — §6 model
src/rpc.rs — line-delimited JSON-RPC over stdio
src/scanner.rs — SHA-keyed ParseCache (incremental reparse lite)
src/watcher.rs — 150ms-debounced file watcher + rescan pipeline
tests/fixtures.rs — CI-gated integration tests
tests/golden.rs — deterministic end-to-end snapshots
tests/grounding_eval.rs — 100-case entailment gate regression
extension/ — Workstream A: VSCode extension host
src/extension.ts — activation, subprocess supervisor, wiring
src/contracts.ts — §4 wire contract (TS mirror)
src/daemon.ts — typed RPC client with exponential backoff restart
src/pack.ts — first-run analyzer-pack downloader (workstream I)
src/panel.ts — webview lifecycle + message bridge + fix-apply
src/codelens.ts — per-function health CodeLens + red-border decos
src/hover.ts — IVE health hover (spec §7.7)
src/commands.ts — §7.8 command table
src/diagnostics.ts — bridge to vscode.DiagnosticCollection
webview/ — Workstream H: React UI (squarified treemap)
src/panels/Treemap.tsx — workspace + function drill-down
src/panels/Diagnostics.tsx — severity groups, filter chips, j/k/Enter/.
src/panels/Summary.tsx — grounded-summary renderer, struck-through
unentailed claims, low-confidence banner
src/panels/Slice.tsx — intra-function slice list, truncation hint
e2e/panels.spec.ts — Playwright browser tests (13 cases)
mcp/ — MCP server fronting the daemon for Claude / Cursor
src/server.ts — tools/list + tools/call, stdio newline framing
src/daemon.ts — subprocess client that reuses the JSON-RPC wire
src/server.test.ts — drives the server like Claude Desktop would
rules/ — Workstream E: curated AI-slop Semgrep rules (14)
test/fixtures/ — YAML-sidecar regression fixtures
(python, typescript, rust, crossfile, webgl,
semgrep, pyright, tsc)
test/grounding/ — 100-case entailment corpus (spec §8 target)
test/golden/ — deterministic snapshot fixtures (ministore, slopfest)构建
先决条件
- 防锈1.90+
- 节点22+
- 可选:Pyright(
pip install pyright),tsc(npm i -g typescript),
Semgrep(pip install semgrep)PyTea(ropas/pytea)JRE 17+和 Joern(交叉文件切片),Anthropic API密钥(基础摘要)。 如果缺失,它们中的每一个都会干净地降解。
构建一切
cargo build --release # daemon: target/release/ive-daemon
cd webview && npm ci && npm run build # webview → extension/dist/webview
cd ../extension && npm ci && node esbuild.mjs # extension → extension/dist/extension.js在VSCode中运行
打开此仓库,按 F5The build:all 任务构建守护进程+ webview+扩展按顺序排列,然后启动扩展开发 主持人与 IVE_DAEMON_PATH 有线。第二次启动配置, 跑 扩展+夹具工作区,打开根目录下的主机 test/fixtures/ai-slop/python 所以你看到一个黄色文件和一个临界文件 在几秒钟内进行诊断。
生产用户通过发布工作流获得守护进程:标签 vX.Y.Z GitHub Actions生成了一个守护进程档案和VSIX的矩阵。 首次启动时,扩展程序会从以下位置下载匹配的存档 ~/.ive// 并验证可选 ive.daemon.packSha256.
直接运行守护进程
# one-shot scan — prints a JSON summary and exits
./target/release/ive-daemon scan --workspace path/to/repo
# long-running JSON-RPC mode (what the extension uses)
./target/release/ive-daemon --workspace path/to/repo
# then drive it on stdin:
# {"jsonrpc":"2.0","id":1,"method":"ping"}
# {"jsonrpc":"2.0","id":2,"method":"workspace.scan"}启用LLM摘要(可选)
export ANTHROPIC_API_KEY=sk-ant-...
# optional: export IVE_LLM_MODEL=claude-haiku-4-5取消设置密钥以返回确定性脱机路径。离线 这条路把每一个事实都当作琐碎的要求,所以大门永远不会 击中任何东西。
测试
cargo test --release # 82 unit + 12 fixture + 2 golden + 1 grounding eval
./test/run_fixtures.sh # e2e sanity against test/fixtures/ai-slop
./test/e2e-stdio.sh # JSON-RPC over stdio smoke
cd webview && npx vitest run # 13 jsdom tests
cd webview && npx playwright test # 13 browser tests (Chromium, built bundle)
cd extension && npx vitest run # 11 tests: real daemon subprocess + pack + hover
cd mcp && npx vitest run # 4 tests: Claude-style stdio round-trip将MCP服务器连接到克劳德桌面/光标 mcp/README.md — 服务器与扩展对话的守护进程相同,因此Claude可以 呼叫 ive_scan, ive_health, ive_diagnostics, ive_summarize, ive_slice, ive_worst, ive_capabilities等等。
CI(.github/workflows/ci.yml)运行Rust套件+夹具运行器, 通过pip安装Pyright+Semgrep,并执行TS类型检查+ 由刚刚构建的守护进程驱动的webviewbuild+扩展测试。
IVE_GOLDEN_UPDATE=1 cargo test --test golden 重新生成快照 在 test/golden/snapshots/ --把那里的每一个差异都当作是故意的。
22分状态(§0+§5+§7)
构建规范的表面积是四个不可协商的(§0),九个 工作流(§5A-I)和九个UI子部分(§7.1-7.9)。每一行是 以具体的测试或运输路径为后盾。
| # | 点 | 状态 | 已登录 |
|---|---|---|---|
| 1 | §0处理部分损坏的代码 | ✅ | 树状图解析语法错误的文件; daemon/src/parser/ |
| 2 | §0无话可说时沉默 | ✅ | 每个面板上都有空的州分支; webview/src/panels/ |
| 3 | §0有根据的摘要或无摘要 | ✅ | 令牌重叠蕴涵门+离线琐碎蕴涵路径; daemon/src/analyzers/grounding.rs |
| 4 | §0足够快,可以处于环境中 | ✅ | cold_scan_under_latency_budget, intra_function_backward_slice_chains_assignments, offline_summary_under_latency_budget 在 daemon/tests/fixtures.rs |
| 5 | §5A——扩展主机 | ✅ | 激活、监督、命令、悬停、CodeLens、修复应用; extension/src/ |
| 6 | §5B——守护进程核心 | ✅ | JSON-RPC、解析器、健康、缓存、观察器; daemon/src/ |
| 7 | §5 C--约恩/中央人民政府 | ✅ | 函数内AST切片(默认)+后面的Joern子流程切片 IVE_ENABLE_JOERN=1 (生成CPGQL,解析分隔的JSON输出,连接到 slice.compute); daemon/src/analyzers/{slice,joern}.rs |
| 8 | §5D——LSP | ✅ | pylight+tsc通过CLI子流程;通过最小LSP客户端(基于stdio的Content-Length框架JSON-RPC)的锈蚀分析仪; daemon/src/analyzers/{lsp,rust_analyzer}.rs |
| 9 | §5 E——塞姆格雷普+派蒂 | ✅ | 14条规则CWE标记规则集,Semgrep runner,PyTea门控 import torch; daemon/src/analyzers/{semgrep,pytea}.rs |
| 10 | §5 F-IVE本地检查 | ✅ | 幻觉(11种锁文件格式)+跨文件性+WebGL/WebGPU绑定+快速修复文本编辑; daemon/src/analyzers/{hallucination,crossfile,binding}.rs |
| 11 | §5 G——接地+栅极 | ✅ | 离线+人类学+100个案例语料库,精确度0.965/召回率0.911; daemon/src/analyzers/grounding.rs + test/grounding/ |
| 12 | §5H-网页浏览 | ✅ | 四个面板端对端连接; webview/src/panels/ |
| 13 | §5 I——包装 | ✅ | 跨平台发布工作流+带SHA-256验证的首次运行下载器; .github/workflows/release.yml + extension/src/pack.ts |
| 14 | §7.1视觉语言 | ✅ | 深色主题标记调色板,单空间,硬边; webview/src/styles.css |
| 15 | §7.2面板布局 | ✅ | 4面板堆叠,带有调整大小、活动条容器; webview/src/App.tsx |
| 16 | §7.3树状图 | ✅ | 带文件的方形布局→ 功能向下钻取; webview/src/panels/Treemap.tsx |
| 17 | §7.4诊断 | ✅ | 严重性组、过滤芯片、AI优先排序, j/k/Enter/. 键盘; webview/src/panels/Diagnostics.tsx |
| 18 | §7.5摘要 | ✅ | 事实+无细节的声明+低置信度横幅; webview/src/panels/Summary.tsx |
| 19 | §7.6切片 | ✅ | 原点、链表、截断提示; webview/src/panels/Slice.tsx |
| 20 | §7.7编辑器集成 | ✅ | 沟槽点(DiagnosticCollection)、CodeLens、红色边框装饰、健康悬停; extension/src/{codelens,hover,diagnostics}.ts |
| 21 | §7.8命令 | ✅ | 所有8个命令均已键盘绑定; extension/package.json + extension/src/commands.ts |
| 22 | §7.9每个小组的状态 | ✅ | 冷/索引/就绪/空/部分/每面板错误均已处理; webview/src/App.tsx |
| 23 | §0易读性债券——Vibe feed | ✅ | Claude通过MCP发布观察结果/意图/问题/担忧 ive_post_note 工具;用户在锚定到文件+行的第五个侧边栏面板(Vibe)中看到它们,点击跳转,点击 resolve 当地址。 daemon/src/contracts.rs (注意), daemon/src/rpc.rs (注:发布/列表/解决/清除), webview/src/panels/Vibe.tsx, mcp/src/server.ts (4个新工具),Playwright截图 webview/e2e/screenshots/. |
全部22个规格点✅, 加上规范在§0中调用的Vibe循环,但 没有给出表面: 克劳德现在回击,用户可以看到它。 我们向Pyright、tsc、Semgrep、PyTea发送的每个外部二进制文件, Joern锈迹分析仪——在没有的情况下,通过打字可以干净地降解 capabilityDegraded 事件;视图显示原因,而不是 默默地产生一幅不完整的画面。
分析仪参考
| 工作流 | 今天有效的方法 | 推迟 |
|---|---|---|
| 扩展主机 | 激活、守护进程监督、键入RPC、四个webview面板、§7.8命令表、CodeLens、红色边框装饰、悬停、修复应用、诊断桥、首次运行包下载器 | -- |
| B守护进程核心 | JSON-RPC,树型解析(py/ts/tsx/rust),认知复杂性,blob SHA+持久清单缓存,SHA键控解析缓存,150ms去抖动文件观察器,具有严重性下限的健康模型,git搅动新颖性 | Tree::edit 真正的增量重分析(需要编辑器端的编辑范围) |
| C Joern | 功能内AST切片(默认);通过Joern子流程实现跨文件切片 IVE_ENABLE_JOERN=1 (CPGQL脚本→ 分隔JSON输出→ Slice 节点);JRE+Joern存在检测翻转 cpg.available. | 更丰富的CPGQL(控制流边、调用边);针对固定Joern版本的脚本测试 |
| D LSP | Pyright+tsc通过CLI子流程;通过最小LSP客户端(内容长度框架, initialize → didOpen → publishDiagnostics → shutdown);所有这三个方面都包含在诊断合同中,并在没有时完全降级 | 工作流F的悬停缓存 |
| E Semgrep+PyTea | 14规则CWE标记的规则集,带有规则id规范化的Semgrep运行器;PyTea跑步者已开启 import torch | 由真正的开源垃圾公关驱动的更丰富的策划规则 |
| F IVE原生 | 针对11种锁文件格式的幻觉+stdlib/内置的allowlists+本地模块白名单;交叉档案;WebGL/WebGPU绑定;快速修复未知导入的TextEdits | -- |
| G接地 | 仅对线下事实进行总结;当 ANTHROPIC_API_KEY 已设置;100例语料库的标记重叠蕴涵门(精度0.965,召回率0.911) | CPG索引蕴涵;适当的NLI; 100 → 1000 语料库增长 |
| H Webview | 四面板布局,带文件的方形树状图→功能深入查看、诊断(分组、过滤芯片、j/k/Enter/.keyboard)、带有已删除的无尾声明的摘要渲染、功能内切片列表 | 编辑器同步树图悬停到行、完整的PDG切片可视化(需要C) |
| I打包 | 跨平台发布工作流程(linux-x64、darwin-arm64、darwin x64、windows-x64)生成守护进程tarball+VSIX,首次运行SHA-256验证的下载器+tar/解压缩提取 | 市场发布步骤 |
合同(§4)
所有跨流程类型都存在 daemon/src/contracts.rs 和 extension/src/contracts.ts。它们是1:1的,并被序列化为camelCase 在JSON-RPC线上。任何更改都是阻止PR的审查。
设计理念
自 spec §0:
- 处理部分损坏的代码。
- 无话可说时保持沉默。
- 有根据的总结或没有总结。
- 速度快到足以与环境融为一体。
如果更改违反了这些,则是还原。
许可证
麻省理工学院——见许可证。
