Aethvion/Aethvion-ProjectMapper

GitHub: Aethvion/Aethvion-ProjectMapper

面向 AI 编程助手的代码知识图谱工具,通过一次性静态扫描构建结构化索引,让 agent 精准查询所需上下文从而大幅降低 token 消耗。

Stars: 0 | Forks: 0

# Aethvion Project Mapper ## 快速开始 **第 1 步 — 安装 `uv`**(一次性操作,自动管理 Python): ``` # macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell) powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" ``` **第 2 步 — 安装 Project Mapper:** ``` uv tool install "aethvion-project-mapper[languages]" ``` **第 3 步 — 连接到你的 agent:** | Agent | 设置指南 | |---|---| | Claude Code | [docs/howto/setup-pm-on-claude-code.md](docs/howto/setup-pm-on-claude-code.md) | | Cursor | [docs/howto/setup-pm-on-cursor.md](docs/howto/setup-pm-on-cursor.md) | | Antigravity (Google) | [docs/howto/setup-pm-on-antigravity.md](docs/howto/setup-pm-on-antigravity.md) | | Codex | [docs/howto/setup-pm-on-codex.md](docs/howto/setup-pm-on-codex.md) | 或者直接跳转到下方的[完整 MCP 配置部分](#mcp-stdio-claude-code--cursor--antigravity--codex)查看原始 JSON。 第一次来这里?[`docs/explained/`](docs/explained/README.md) 文件夹涵盖了[Project Mapper 是什么](docs/explained/what-is-project-mapper.md)、[MCP 工具是什么](docs/explained/what-is-mcp.md)、[PM 在你的机器上具体读取和存储了什么](docs/explained/what-does-pm-access.md),以及[完整的工具参考](docs/explained/pm-tools-reference.md)。 ## 为什么会有这个项目 AI 编程 agent(Claude Code、Cursor、Copilot 等)在每次执行任务时都会搜索你的文件——读取源代码文件、追踪导入、通过 grep 寻找上下文。这不仅昂贵而且缓慢,当 agent 真正发现关键内容之前,上下文窗口早就被半相关的内容填满了。 Project Mapper 只需扫描你的代码库一次,就能构建出一个结构化的知识图谱,涵盖每个模块、类、函数及其关系,并让 agent 在几毫秒内查询*他们只需要的内容*,从而将 token 成本平均降低 **87–92%**。 ## 基准测试数据 在 [11 个真实的代码库](docs/benchmarks/README.md)中进行了测量——包括 Python、Java/Kotlin、C#、PHP、C、Go、Ruby、TypeScript/JS、Rust、C++、Swift——文件数量从 57 到 11,083 不等。 ### 汇总(所有 11 个项目的几何平均数) | 模式 | Token 减少 | 相对于正常模式的速度提升 | |:---|:---|:---| | **PM Full** | **~87%** | **~快 380 倍** | | **PM Slim** | **~92%** | **~快 380 倍** | 在输入 100,000 个 token 时,PM 通常只使用 **~13,000**(Full)或 **~8,000**(Slim)个 token。 PM Slim 仅返回名称 + 文件路径 + 行号——足以满足导航和重构任务的需求。PM Full 返回完整的实体上下文。有关每个代码库的具体数据,请参阅[完整基准测试套件](docs/benchmarks/README.md);有关 3 项测试的审计对比,请参阅[安全基准测试](docs/benchmarks_security/README.md)。 ### 查询延迟(实测) | 查询 | 延迟 | |---|---| | 上下文查询 | 1–100 ms(缓存已预热) | | 影响查询 | < 1–10 ms | ### 会话启动 — 实体映射加载(实测) 实体映射存储为一个在每次扫描结束时构建的单一快照文件。 | 代码库大小 | 加载时间 | |---|---| | ~400 个实体 | < 50 ms | | ~12,000 个实体 | ~145 ms | | ~33,000 个实体 | ~300 ms | ### 规模化时的财务影响(模型推算) | 团队规模 | 每月 AI 编程成本(预估) | 使用 PM 节省的费用 | |---|---|---| | 独立开发者 | $80 | $74 | | 10 人团队 | $2,400 | $2,230 | | 100 人团队 | $48,000 | $44,600 | | 企业级(1,000 名开发者) | $480,000 | $446,400 | ## 它的功能 1. **静态扫描** — 遍历你的项目,通过 AST 分析提取每个模块 / 类 / 函数。此步骤无需 AI。 2. **知识图谱** — 将实体 + 关系(imports、calls、extends、depends_on 等)存储在本地 JSON 数据库中。 3. **Agent 查询** — 10 个 MCP 工具,agent 可以调用它们来代替直接读取原始文件: | 工具 | 回答的问题 | |---|---| | `pm_context` | "在动 auth 系统之前我需要了解什么?" | | `pm_impact` | "如果我修改 `UserService` 会破坏什么?" | | `pm_path` | "`RateLimiter` 是怎么跟支付流程连起来的?" | | `pm_find` | "`validateToken` 定义在哪里?" | | `pm_orphans` | "有哪些代码从未被调用过?" | | `pm_security` | "这个代码库里有安全漏洞吗?" | | `pm_contribute` | "记录一下我给 endpoint X 加了限流" | | `pm_stats` | "这个数据库里已经索引了什么?" | | `pm_delta` | "自上次扫描以来有什么变化?" | | `pm_scan` | "立刻扫描这个项目目录" | 有关每个工具的完整文档,请参阅 [PM 工具参考](docs/explained/pm-tools-reference.md)。 ## 安全扫描 `pm_security` 是内置于 Project Mapper 中的独立 SAST 风格扫描器。只需一次调用即可检查整个代码库——除了安装之外,没有任何扫描依赖或设置。 - **132+ 个模式**,涵盖 8 种语言中的 OWASP Top 10 (A01–A10):Python、TypeScript/JS、Java、Go、C#、PHP、Ruby、C/C++ - **执行时间 1–5 秒**,适用于任何大小的代码库 - **路由可达性污点分析** — ⚡ 标记已确认可从 HTTP handler 访问的发现结果 - **每次发现都包含 CWE 映射**,拥有稳定的发现 ID 以便持久化分类管理,支持跨扫描的快照差异对比 它旨在与 `pm_context` 配合使用:`pm_security` 在几秒钟内捕获 100% 文件中可通过模式检测到的漏洞;`pm_context` 随后弥补模式无法检测到的逻辑缺陷和 IDOR 漏洞。有关在 OWASP Juice Shop 上的 3 项测试对比,请参阅[安全基准测试](docs/benchmarks_security/README.md)。 ## 其他访问方式 ### HTTP API ``` # 安装 pip install aethvion-project-mapper # 启动 server uvicorn server:app --port 7474 # 扫描你的项目 curl -X POST http://localhost:7474/api/project-mapper/scan \ -H "Content-Type: application/json" \ -d '{"project_root": "/path/to/your/project", "enrich": false}' # 为任务查询 context curl -X POST http://localhost:7474/api/project-mapper/query/context \ -H "Content-Type: application/json" \ -d '{"q": "add rate limiting to auth endpoints", "detail_level": "medium"}' ``` 文档位于 **http://localhost:7474/docs** ### Docker ``` docker compose up # Server 运行于 http://localhost:7474 ``` 挂载你的项目: ``` # docker-compose.yml — 将 PROJECTS_DIR 设置为你的代码根目录 PROJECTS_DIR=/home/you/code docker compose up ``` ### MCP stdio (Claude Code / Cursor / Antigravity / Codex) 单一的全局配置让每个会话都能访问 Project Mapper。AI 会在调用 `pm_scan` 时传入项目根目录,因此你无需预先指定——只需告诉 Claude(或 Cursor 等)扫描当前项目,它就会处理剩下的事情。 **第 1 步 — 安装 `uv`**(一次性操作,如果已经安装可跳过): ``` # macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell) powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # 已经有 Python?或者: pip install uv ``` `uv` 会管理自己的 Python 环境——即使未安装 Python,上面的 curl/PowerShell 安装脚本也能正常工作。 **第 2 步 — 安装 Project Mapper**(一次性操作): ``` uv tool install "aethvion-project-mapper[languages]" ``` 这会将 `pm-mcp` 安装为全局命令,并下载所有语言解析器。首次运行大约需要 30 秒,后续启动则是瞬间完成。 **第 3 步 — 添加到你的 agent 配置并重启:** **Claude Code** — 添加到 `~/.claude/settings.json`: ``` { "mcpServers": { "project-mapper": { "type": "stdio", "command": "pm-mcp", "args": ["--db", "workspace"] } } } ``` **Cursor** — 添加到 `.cursor/mcp.json`: ``` { "mcpServers": { "project-mapper": { "command": "pm-mcp", "args": ["--db", "workspace"] } } } ``` **Antigravity (Google)** — 添加到 `~/.gemini/antigravity/mcp_config.json`: ``` { "mcpServers": { "project-mapper": { "type": "stdio", "command": "pm-mcp", "args": ["--db", "workspace"] } } } ``` **备选方案 — 无需安装,直接使用 uvx 运行:** ``` { "command": "uvx", "args": ["--from", "aethvion-project-mapper[languages]", "pm-mcp", "--db", "workspace"] } ``` **可选 — 锁定到单个项目:** 如果你总是开发同一个代码库,可以添加 `PM_PROJECT_ROOT`,这样 AI 就永远不需要明确指定它了: ``` { "mcpServers": { "project-mapper": { "...", "env": { "PM_PROJECT_ROOT": "/absolute/path/to/your/project" } } } } ``` ## 配置 | 变量 | 默认值 | 描述 | |---|---|---| | `PM_DATA_DIR` | `~/.aethvion_pm/data` | 所有数据库的根目录 | | `PM_LOG_LEVEL` | `INFO` | 日志级别:DEBUG / INFO / WARNING / ERROR | | `PM_DB_NAME` | `default` | MCP server:数据库名称 | | `PM_DB_PATH` | *(未设置)* | MCP server:明确的数据库路径 | | `PM_PROJECT_ROOT` | *(未设置)* | MCP server:pm_scan 的默认项目根目录 | ## 项目结构 ``` project_mapper/ ├── config.py — DATA_DIR config ├── routes.py — FastAPI router (/api/project-mapper/*) ├── scanner.py — Async background scan engine ├── ingestor.py — CodeAnalysis → AethvionDB entities ├── code_analyzer.py — Python AST extractor ├── query.py — Impact / context / shortest-path algorithms ├── cleanup.py — Incremental scan maintenance ├── delta.py — Filesystem diff (no DB writes) ├── mcp_tools.py — 10 MCP tool schemas + handlers ├── mcp_server.py — JSON-RPC 2.0 stdio MCP server └── db/ ├── entity_schema.py — Entity data model + validation ├── entity_writer.py — Create / update / delete entities ├── name_index.py — Thread-safe name → ID index ├── file_manifest.py — File ↔ entity provenance tracking ├── snapshot.py — Fast-load snapshot cache └── db_registry.py — Named database registry server.py — FastAPI app entry point ``` ## 增量扫描 后续扫描仅处理自上次运行以来 SHA-256 哈希值发生变化的文件。 在之前已扫描过的 10,000 个文件的代码库中,增量模式通常只需处理 不到 1% 的文件——扫描时间从约 60 秒骤降至 2 秒以内。 ``` # 全量扫描(首次或强制刷新) curl -X POST .../scan -d '{"project_root": "...", "incremental": false}' # 增量扫描(默认 — 仅限已更改的文件) curl -X POST .../scan -d '{"project_root": "..."}' ``` ## 许可证 **开源核心:** [GNU AGPL v3](LICENSE) 可自由使用、修改和自托管。网络使用要求将你的修改部分开源。 **商业许可证:** [COMMERCIAL_LICENSE.md](COMMERCIAL_LICENSE.md) 面向需要专有许可、SLA 或集成支持团队的可用选项。 ## 支持开发 如果 Project Mapper 为你节省了 token、时间或金钱——请考虑赞助。这能保障项目的持续维护以及新语言 / 功能的不断推出。 [![GitHub Sponsors](https://img.shields.io/badge/Sponsor-30363D?logo=githubsponsors&logoColor=EA4AAA)](https://github.com/sponsors/Aethvion) 查看完整的[赞助者列表](https://github.com/Aethvion/.github/blob/main/SPONSORS.md)。 *由 Aethvion 团队用心打造。*
标签:AI编程辅助, MCP, SOC Prime, 上下文优化, 安全专业人员, 开发工具, 请求拦截, 逆向工具, 错误基检测, 静态代码分析