rpg-encoder
Give your AI agent a brain for your codebase.
______________________________________________________________________
快速开始
claude mcp add rpg -- npx -y -p rpg-encoder rpg-mcp-server一个命令。可与Claude Code、Cursor、opencode、Windsurf或任何兼容MCP的代理配合使用。没有Rust工具链,没有克隆,没有构建-- npx 为您的平台下载预构建的二进制文件。
然后打开任何回购并告诉您的代理人:
*“为这个仓库构建和提升RPG”*
你的代理处理一切:索引实体(几秒钟),读取每个函数并添加意图级功能(几分钟),将它们组织成语义层次结构,并提交 .rpg/graph.json 为了你的团队。
对于具有~100+个实体的repos, lifting_status 将告诉您的代理将提升循环委托给子代理或更便宜的模型——特征提取是模式匹配,而不是新颖的推理。如果您的运行时没有子代理机制,请运行 rpg-encoder lift --provider anthropic|openai 从具有API密钥的终端-CLI直接驱动外部LLM,而不涉及代理。CLI完成后,调用 reload_rpg 在您的会话中加载更新的图形。CLI提升了没有功能的实体;重新提升过时的实体(代码更改后存在但过时的功能)是由会话中的MCP流而不是CLI处理的。
一旦举起,尝试:
- *“什么处理身份验证?”* --即使没有命名为“auth”,也能查找代码
- *“显示依赖于数据库连接的所有内容”*
- *“计划更改以将速率限制添加到API终结点”*
______________________________________________________________________
使用RPG之前 grep, cat, find
服务器说明告诉您的代理,对于任何 关于代码结构或行为的问题。这种反射很重要-- grep, cat, ad-hoc文件已经读取了烧灼令牌并错过了语义关系RPG 知道。
| 如果你不这样做。.. | 请改用此项 |
|---|---|
grep -r / rg (有意) | search_node(query="...") |
grep -r / rg (按姓名) | search_node(query="...", mode="snippets") |
cat /读取函数 | fetch_node(entity_id="file:name") |
| 用于呼叫者/被呼叫者的链式grep | explore_rpg(entity_id="...", direction="...") |
| 递归grep用于“什么取决于X” | impact_radius(entity_id="...") |
wc -l / find / tree | rpg_info |
| 读取多个文件以获取上下文 | semantic_snapshot |
| 手动搜索→ 获取→ 探索链条 | context_pack(query="...") |
| “如何安全地重构X” | plan_change(goal="...") |
退回到 grep, cat,或者仅当查询涉及文本时才读取文件 (字符串搜索、注释、TODO、日志消息)——与结构无关。
______________________________________________________________________
运作原理
- 解析 --树保姆从15种语言中提取实体(函数、类、方法)和依赖边(导入、调用、继承)。
- 电梯 -LLM(您的代理,或像Haiku这样的廉价API)读取每个实体并编写语言对象功能: *“验证JWT令牌”*, *“将配置序列化到磁盘”*.
- 组织 --特征聚类为3级语义层次结构(Area→ 类别→ 子类别) *代码的作用是什么*,而不是文件树。
- 理解 —
semantic_snapshot将整个图压缩为~25K个标记。你的法学硕士读过一次 *知道回购*.
语义快照
LLM调用 semantic_snapshot 一次并收到:
- 层级 --每个功能区都有聚合特征
- 实体 --按区域分组的每个函数、类、方法及其语义特征
- 依赖关系骨架 --带限定名的压缩调用图
- 热点地区 --前10个连接最紧密的实体(架构骨干)
约25K代币覆盖约1000个实体。这是1M上下文窗口的2-3%——LLM在每个会话开始时已经知道你的仓库。
自维护图
每当您的工作树发生更改时——无论是已提交、暂存还是未暂存——MCP服务器都会在响应下一个查询之前自动重新同步。变更集哈希 (path, size, mtime) 意味着重复保存同一文件会触发一次同步,而空闲查询则不会触发任何同步。还原也会被检测到:如果以前脏的文件返回到其HEAD状态,则图形将被还原。
两种提升方式
| 模式 | 命令 | 成本 | 谁支付 |
|---|---|---|---|
| 代理提升 | *“构建并提升RPG”* | 订阅令牌 | 您的Claude代码/游标订阅 |
| 自主升降 | auto_lift(provider="anthropic", api_key_env="ANTHROPIC_API_KEY") | 每100个实体约0.02美元 | 外部API密钥(Haiku、GPT-4o-mini、OpenRouter、Gemini) |
auto_lift 直接调用廉价的外部LLM——您的编码订阅永远不会涉及提升工作 api_key_env 从环境变量中解析键,使其永远不会出现在工具调用记录中。
______________________________________________________________________
建筑
七个Rust机箱,一个MCP服务器二进制文件,一个CLI二进制文件:
| 板条箱 | 角色 |
|---|---|
rpg-core | 图类型(RPGraph、实体、层次节点)、存储、LCA算法 |
rpg-parser | 树保姆实体+依赖关系提取(15种语言) |
rpg-encoder | 编码管道、起重设施、增量进化 |
rpg-nav | 搜索、获取、探索、快照、TOON序列化 |
rpg-lift | 自主LLM提升(Anthropic、OpenAI、OpenRouter、Gemini) |
rpg-cli | CLI二进制文件(rpg-encoder) |
rpg-mcp | MCP服务器二进制文件(rpg-mcp-server)27工具 |
______________________________________________________________________
MCP工具(27)
Build & Maintain (4 tools)
| 工具 | 说明 |
|---|---|
build_rpg | 索引代码库(运行一次,即时) |
update_rpg | git更改的增量更新 |
reload_rpg | 外部更改后从磁盘重新加载图形 |
rpg_info | 图表统计、层次结构概述、按区域提升覆盖率 |
Navigate & Search (5 tools)
| 工具 | 说明 |
|---|---|
semantic_snapshot | 在一次调用中实现整个回购语义理解(1000个实体约25K个令牌) |
search_node | 按意图或关键字搜索实体(混合嵌入+词汇评分) |
fetch_node | 获取实体元数据、源代码、依赖关系和层次结构上下文 |
explore_rpg | 遍历依赖关系图(上游、下游或两者) |
context_pack | 单次调用搜索+获取+探索代币预算 |
Plan & Analyze (7 tools)
| 工具 | 说明 |
|---|---|
impact_radius | BFS可达性分析——“什么取决于X?” |
plan_change | 变更计划——查找相关实体、修改顺序、爆破半径 |
find_paths | K—两个实体之间的最短依赖路径 |
slice_between | 提取实体之间的最小连接子图 |
analyze_health | 代码健康:耦合、不稳定、上帝对象、克隆检测 |
detect_cycles | 查找循环依赖关系和架构周期 |
reconstruct_plan | 依赖安全重建执行计划 |
Semantic Lifting (11 tools)
| 工具 | 说明 |
|---|---|
auto_lift | 通过廉价的LLM API(Haiku,GPT-4o-mini,OpenRouter,Gemini)实现一体式自动提升 |
lifting_status | 仪表板——覆盖范围、每个区域的进度、下一步 |
get_entities_for_lifting | 获取实体源代码供代理分析 |
submit_lift_results | 将代理的语义特征提交回图中 |
finalize_lifting | 聚合文件级功能,重建层次结构元数据 |
get_files_for_synthesis | 获取文件级实体特征以进行整体综合 |
submit_file_syntheses | 提交整体文件级摘要 |
build_semantic_hierarchy | 获取域发现+层次结构分配提示 |
submit_hierarchy | 将层次结构分配应用于图形 |
get_routing_candidates | 获取需要语义路由的实体(漂移或新提升) |
submit_routing_decisions | 提交路由决策(层次结构路径或“保留”) |
______________________________________________________________________
支持的语言
Tree sitter提供15种语言:
| 语言 | 实体提取 | 依赖关系解析 |
|---|---|---|
| Python | 函数、类、方法 | 导入、调用、继承 |
| Rust | 函数、结构、特征、impl方法 | 使用、调用、特征impls |
| TypeScript | 函数、类、方法、接口 | 导入、调用、继承 |
| JavaScript | 函数、类、方法 | 导入、调用、继承 |
| Go | 函数、结构、方法、接口 | 导入、调用 |
| Java | 类、方法、接口 | 导入、调用、继承 |
| C/C++ | 函数、类、方法、结构 | 包含、调用、继承 |
| C# | 类、方法、接口 | 使用、调用、继承 |
| PHP | 函数、类、方法 | 使用、调用、继承 |
| Ruby | 类、方法、模块 | 需要、调用、继承 |
| Kotlin | 函数、类、方法 | 导入、调用、继承 |
| Swift | 函数、类、结构、协议 | 导入、调用、继承 |
| Scala | 函数、类、对象、特征 | 导入、调用、继承 |
| Bash | 函数 | 源代码,调用 |
______________________________________________________________________
安装
MCP服务器(推荐)
# Claude Code
claude mcp add rpg -- npx -y -p rpg-encoder rpg-mcp-server
# Cursor — add to ~/.cursor/mcp.json
{
"mcpServers": {
"rpg": {
"command": "npx",
"args": ["-y", "-p", "rpg-encoder", "rpg-mcp-server"]
}
}
}服务器会自动检测当前工作目录中的项目根目录,不需要路径参数。
CLI
npm install -g rpg-encoder
# Build a graph
rpg-encoder build
# Query
rpg-encoder search "parse entities from source code"
rpg-encoder fetch "src/parser.rs:extract_entities"
rpg-encoder explore "src/parser.rs:extract_entities" --direction both --depth 2
rpg-encoder info
# Autonomous lifting via API
rpg-encoder lift --provider anthropic --dry-run # estimate cost
rpg-encoder lift --provider anthropic # lift with Haiku (~$0.02/100 entities)
# Incremental update
rpg-encoder update
# Pre-commit hook (auto-updates graph on commit)
rpg-encoder hook installBuild from source
git clone https://github.com/userFRM/rpg-encoder.git
cd rpg-encoder && cargo build --release然后将MCP配置指向 target/release/rpg-mcp-server.
______________________________________________________________________
文档
______________________________________________________________________
灵感与参考
rpg编码器基于rpg编码器研究论文的理论框架构建,其原始扩展灵感来自代码智能领域的工具:
- RPG编码器纸 (Luo等,2026,微软研究院)——语义提升模型、三级层次结构构建、增量进化算法、形式图模型
G = (V_H ∪ V_L, E_dep ∪ E_feature). - GitNexus --预先计算的关系智能、爆炸半径分析、克劳德代码挂钩。表明代码图工具必须是不可见的,才是必不可少的。
- 塞雷娜 --通过LSP实现符号级精度。证明了实时代码感知比批处理分析更重要。
- 香椿 --面向令牌的对象表示法,用于LLM优化输出。
这是一个独立的实现。所有代码都是MIT许可下的原创作品。不隶属于微软或不受微软认可。
______________________________________________________________________
