trailofbits/aicov

GitHub: trailofbits/aicov

aicov 追踪 AI 编程代理在代码库中的逐行读取行为,并将其转化为类似 gcov 的覆盖率报告,帮助开发者量化和审计 AI agent 对代码的理解范围。

Stars: 2 | Forks: 0

# aicov `aicov` 用于追踪 AI 编程代理读取了代码库中的哪些行。它会 将 AI 的读取计数映射到 LCOV 和文本格式的 `.gcov` 报告中,同时也会 生成一种原生 JSON 格式,其中包含逐行的读取计数、搜索命中、命令以及 任务元数据。 ## 安装 从此代码库安装: ``` uv tool install . ``` 通过已发布的包安装,使用相同的形式: ``` uv tool install aicov ``` 用于本地开发: ``` uv sync --dev uv run aicov --help ``` ## 快速开始 安装 Codex hooks: ``` aicov install-codex-hooks --user ``` 如果需要在代码库本地安装: ``` aicov install-codex-hooks --repo ``` 回填现有会话: ``` aicov backfill --agent auto --session-id aicov backfill --agent auto --path ~/.codex/sessions/.jsonl aicov backfill --agent pi --path ~/.pi/agent/sessions//.jsonl ``` 生成报告: ``` aicov report --format lcov --counts full --out aicov.info aicov report --format gcov --counts binary --out-dir coverage-gcov aicov html --out aicov.html aicov summary aicov unread --limit 20 ``` 使用标准工具渲染 LCOV: ``` genhtml aicov.info --output-directory coverage-html ``` ## 捕获内容 - 来自 `Bash`、`apply_patch` 和 MCP 工具的 Codex hook payload。 - 通过 session id 或 JSONL 路径,对 Codex、Claude Code 和 Pi 的记录进行回填。 在回填 Pi 会话路径时,通过 `parentSession` 关联的 Pi 子会话也会被包含在内。 - 常见的 shell 读取操作:`sed`、`head`、`tail`、`cat`、`awk` 和 `nl|sed`。 - `rg` 和 `grep` 的输出被作为 `search_seen` 记录,与直接读取分开。在原生 JSON 和 HTML 中,匹配行和上下文行会分别进行计数。 - 未被读取但受 Git 追踪的文本文件,这样未被触及的文件将以零覆盖率显示。 不支持的类读取 shell 形式会被记录为未知事件,而不会 被盲目猜测为全文件读取。 ## 输出 - `.aicov/events.jsonl`:仅追加的已观测读取事件。 - `.aicov/coverage.json`:原生逐文件和逐行覆盖率数据。 - `aicov.info`:兼容 `genhtml` 的 LCOV tracefile。 - `coverage-gcov/*.gcov`:文本格式的 gcov 样式文件。 - `aicov.html`:自包含的热力图报告。 `--counts full` 会将观测到的读取计数写入 LCOV/gcov 输出。`--counts binary` 会为已读取的行写入 `1`,为未读取的行写入 `0`。 原生 JSON 和 HTML 包含已读取行和范围的紧凑归属信息: agent、session id、来源、工具名称、命令、任务路径、时间戳,以及 可用时的置信度。未知事件也会被呈现出来,以便可以审计不支持的 命令,而不是让它们默默地消失。 ## 配置 当需要调整默认设置时,在代码库根目录创建 `.aicov.toml`: ``` storage_dir = ".aicov" exclude = [".aicov/", "node_modules/", "vendor/", "dist/", "build/", ".git/"] include_lockfiles = true auto_reports = ["json"] ``` `auto_reports` 控制在 Codex `Stop` 时写入的额外报告。JSON 覆盖率始终 会刷新;添加 `lcov`、`gcov` 或 `html` 以在 `.aicov/reports/` 下生成可共享的报告。 推荐的本地忽略规则: ``` .aicov/ ``` 仅当您需要持久的审计产物时,才提交或归档 `.aicov/coverage.json`、LCOV、gcov 或 HTML 输出。 ## 隐私 默认情况下,`aicov` 会存储命令、路径、行范围、时间戳、session 和 工具 ID、agent 名称以及任务归属。回填的记录可能会在 `task_path` 中包含 agent 的 prompt 或任务标签,以便报告能解释某行为何 被检查。它不会在事件日志中存储原始的工具输出或源代码片段。 原生覆盖率 JSON 和 HTML 报告包含来自事件日志的归属信息。 HTML 报告还会嵌入源代码行,因为它是一个源代码查看器;分享 这些文件时,请采取与分享代码库和记录元数据相同的谨慎态度。 ## 开发 ``` uv run pytest uv run ruff check . uv run ruff format . ```
标签:AI编程助手, API集成, Python, SOC Prime, 代码覆盖率, 可观测性, 安全规则引擎, 开发工具, 无后门, 逆向工具