炸弹
Bombe是一个用于AI编码代理的结构感知代码检索MCP服务器。 它从源代码构建一个本地图索引,然后为以下对象提供图感知工具:
- 符号发现
- 呼叫者/被呼叫者/引用遍历
- 数据流跟踪
- 变更影响估算
- 令牌预算上下文组装
运行时首先是本地的,在没有任何控制平面的情况下工作。当需要共享智能时,包括可选的混合同步模块用于增量/工件交换。
目录
特性
- 使用SQLite进行本地首图索引
- 多语言符号提取(Python、TypeScript、Java、Go)
- 调用/导入/类型依赖边进行结构遍历
- 具有合约测试的严格MCP工具模式
- 增量索引支持(git+非git回退)和性能趋势跟踪
- 具有每次运行摘要的持久解析/索引诊断
- 包括/排除索引过滤器+
.bombeignore支持 - 具有确定性合并+吞吐量遥测的并行提取路径
- 敏感路径排除和上下文编辑保护
- 发布延迟和工作流质量门的治理检查
需求
安装
构建并安装Rust扩展,然后是Python包:
maturin develop --manifest-path crates/bombe-core/Cargo.toml
python3 -m pip install .开发人员安装:
maturin develop --manifest-path crates/bombe-core/Cargo.toml
python3 -m pip install ".[dev]"快速开始
初始化存储:
PYTHONPATH=src python3 -m bombe.server --repo . --init-only --log-level INFO运行完整索引:
PYTHONPATH=src python3 -m bombe.server --repo . index-full启动服务器(STDIO MCP运行时 mcp 可用):
PYTHONPATH=src python3 -m bombe.server --repo . --log-level INFO检查运行时运行状况:
PYTHONPATH=src python3 -m bombe.server --repo . doctorCLI参考
全球争论
| 参数 | 描述 | 默认值 |
|---|---|---|
--repo | 存储库根目录到索引 | . |
--db-path | 显式SQLite路径 | /.bombe/bombe.db |
--log-level | DEBUG, INFO, WARNING, ERROR | INFO |
--init-only | 初始化存储并退出 | false |
--hybrid-sync | 启用后索引同步周期 | false |
--control-plane-root | 文件支持的控制平面根目录 | /.bombe/control-plane |
--sync-timeout-ms | 同步推/拉超时预算 | 500 |
--runtime-profile | 运行时策略(default 或严格硬故障模式) | default |
--diagnostics-limit | 最大诊断行数 status, doctor, diagnostics | 50 |
--include | 可选包括glob(可重复) | [] |
--exclude | 可选排除glob(可重复) | [] |
子指令
| 命令 | 目的 | 关键选项 | ||
|---|---|---|---|---|
serve | 启动MCP服务器运行时 | `--index-mode none | full | incremental` |
index-full | 运行完整索引并退出(JSON统计) | --workers | ||
index-incremental | 从git状态或文件系统快照(JSON统计)运行增量索引 | --workers | ||
watch | 循环增量索引(JSON摘要) | --max-cycles, --poll-interval-ms, --watch-mode, --debounce-ms, --max-change-batch | ||
status | 打印索引/同步状态JSON并退出 | - | ||
diagnostics | 打印解析/索引诊断JSON并退出 | --run-id, --stage, --severity | ||
doctor | 运行健康检查(JSON报告) | --fix | ||
preflight | 运行启动兼容性检查(JSON报告) | --runtime-profile |
命令示例
完整索引:
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo index-full增量指数:
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo index-incremental带过滤器的增量索引:
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo --include "src/**/*.py" --exclude "*test*" index-incremental混合全索引+同步:
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo --hybrid-sync index-full以渐进式热身方式上菜:
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo --hybrid-sync serve --index-mode incremental监视模式(单周期):
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo watch --max-cycles 1 --poll-interval-ms 500在可用时使用文件系统事件的监视模式:
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo watch --watch-mode fs --max-cycles 1最新运行的诊断:
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo diagnostics --severity error --diagnostics-limit 100具有安全自动修复功能的医生:
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo doctor --fix严格的配置文件预检(当所需的解析器后端不可用时,会很快失败):
PYTHONPATH=src python3 -m bombe.server --repo /abs/repo --runtime-profile strict preflight环境变量
| 变量 | 描述 | |
|---|---|---|
BOMBE_RUN_PERF=1 | 在中启用性能套件 tests/perf | |
BOMBE_PERF_HISTORY=/abs/path/file.jsonl | 性能套件和释放门的度量历史输出 | |
BOMBE_SYNC_SIGNING_KEY=... | 启用混合工件签名/验证 | |
| `BOMBE_SYNC_SIGNING_ALGO=hmac-sha256\ | ed25519` | 签名算法(ed25519 需要 cryptography) |
BOMBE_SYNC_KEY_ID=... | 工件签名密钥标识符 | |
BOMBE_REAL_REPO_PATHS=/path/repo1,/path/repo2 | 可选的真实回购性能/评估覆盖率 | |
BOMBE_SEMANTIC_HINTS_FILE=/abs/semantic-hints.json | 用于呼叫解析的可选语义接收者类型提示 | |
BOMBE_REQUIRE_TREE_SITTER=1 | 内部严格解析器开关(通常通过以下方式设置 --runtime-profile strict) | |
BOMBE_EXCLUDE_SENSITIVE=0 | 禁用默认敏感路径排除(不建议) |
MCP工具
可用工具:
search_symbolsget_referencesget_contextget_structureget_blast_radiustrace_data_flowchange_impactget_indexing_diagnosticsget_server_statusestimate_context_sizeget_context_summaryget_entry_pointsget_hot_pathsget_orphan_symbols
输入示例
search_symbols
{"query":"auth","kind":"function","limit":20}get_references
{"symbol_name":"app.auth.authenticate","direction":"both","depth":2}get_context
{"query":"authenticate flow","entry_points":["app.auth.authenticate"],"token_budget":1200}get_structure
{"path":".","token_budget":4000,"include_signatures":true}get_blast_radius
{"symbol_name":"app.auth.authenticate","change_type":"behavior","max_depth":3}trace_data_flow
{"symbol_name":"app.auth.authenticate","direction":"both","max_depth":3}change_impact
{"symbol_name":"app.auth.authenticate","change_type":"signature","max_depth":3}get_indexing_diagnostics
{"run_id":"","stage":"parse","severity":"error","limit":50}get_server_status
{"diagnostics_limit":20,"metrics_limit":20}estimate_context_size
{"query":"authenticate flow","entry_points":["app.auth.authenticate"],"token_budget":1200}get_context_summary
{"query":"authenticate flow","entry_points":["app.auth.authenticate"],"token_budget":1200}get_entry_points
{"limit":20}get_hot_paths
{"limit":20}get_orphan_symbols
{"limit":50}所有字典返回工具也接受:
{"include_explanations":true}启用后,响应包括 explanations 带有推理元数据的部分。
所有工具还接受:
{"include_plan":true}启用后,dict响应包括 planner_trace 元数据(缓存模式、查找/计算定时、缓存纪元令牌)。
合同生效
严格的合同行为通过以下方式验证:
tests/test_mcp_contract.py
建筑
Bombe使用Rust内核(_bombe_core 通过PyO3/multerin),使用薄Python包装器提供面向MCP的API。
本地运行时
- 文件扫描和语言检测(Rust)
- 树保姆解析加上符号提取加上调用/导入解析(Rust)
- 可选的语义接收者类型提示合并到呼叫解析中
- SQLite图形存储(Rust通过rusqlite)
- files - symbols - edges - external_deps - FTS虚拟表 symbol_fts
- 查询引擎
- 搜索 - 参考文献 - 上下文组装 - 爆炸半径 - 数据流 - 变更影响
- MCP工具注册和处理程序接线
- 用于重复有效载荷的查询计划器缓存层
- 带有可选模型感知令牌计数的令牌化器抽象(
tiktoken如果已安装)
混合模块
src/bombe/sync/client.py
- 兼容性检查 - 异步推/拉 - 超时预算 - 断路器 - 校验和验证 - 可选工件签名验证 - 隔离
src/bombe/sync/reconcile.py
- 晋升政策关卡 - 触摸范围合并优先级
src/bombe/sync/transport.py
- 本地混合部署的文件支持控制平面传输
src/bombe/sync/orchestrator.py
- 基于局部图状态的delta构造 - 持续同步队列状态更新 - pull+conference+artifact pin flow
发布治理
src/bombe/release/gates.py 根据硬阈值评估记录的套件指标,并返回通过/失败。
可观察性和持久状态
SQLite模式版本 6 包括操作和诊断状态:
sync_queueartifact_quarantineartifact_pinscircuit_breakerssync_eventstool_metricsindexing_diagnosticsmigration_historytrusted_signing_keys- 回购元数据密钥
cache_epoch用于查询缓存无效
索引模型
高层管道:
- 浏览存储库文件并检测支持的语言。
- 解析文件并提取符号/导入。
- 解析导入并调用边。
- 将符号/边/依赖关系持久化到SQLite中。
- 重新计算查询层使用的排名特征。
增量路径仅更新更改的文件,然后重建受影响的图形状态。
护栏和安全限制
对深度、限制和查询长度实施了运行时有效负载护栏:
- 搜索限制限制为最大值
100 - 图形深度限制为最大值
6 - 上下文令牌预算被限制在最大值
32000 - 入境点上限为
32 - 横向节点/边缘帽可防止失控膨胀
- 自适应遍历上限按存储库符号计数缩放,以确保大型存储库内存安全
这些限制在 src/bombe/query/guards.py.
混合同步模型
混合同步是累加的,不会取代本地查询服务。
- 本地路径仍然具有权威性和可用性。
- 不兼容的工件被拒绝。
- 损坏的文物被隔离。
- 配置签名时,将隔离签名不匹配。
- 可以在中的每个存储库中持久化受信任的密钥策略
trusted_signing_keys用于验证密钥选择。 - 重复的远程故障会打开断路器。
- 结果明确暴露了回退模式(
local_fallback)当远程操作被跳过或失败时。 - 同步结果保存在SQLite中(
sync_queue,sync_events,artifact_pins,circuit_breakers).
备份和恢复
数据库备份/还原助手可在 Database:
from pathlib import Path
from bombe.store.database import Database
db = Database(Path("/abs/repo/.bombe/bombe.db"))
backup_path = db.backup_to(Path("/tmp/bombe-backup.db"))
db.restore_from(backup_path)性能和释放门
运行性能套件:
BOMBE_RUN_PERF=1 PYTHONPATH=src python3 -m unittest discover -s tests/perf -p "test_*.py" -v运行可选的真实仓库评估(OpenSearch/KubeKubernetes风格的本地签出):
BOMBE_RUN_PERF=1 BOMBE_REAL_REPO_PATHS=/abs/opensearch,/abs/kubernetes PYTHONPATH=src python3 -m unittest tests.perf.test_real_repo_eval -v评估放行门:
PYTHONPATH=src python3 -m bombe.release.gates --history /tmp/bombe-perf-history.jsonl当前闸门系列:
indexincrementalqueryworkflow_gatesgold_eval
阈值定义见 src/bombe/release/gates.py.
仓库布局
src/bombe/indexer:扫描、解析、提取、导入、调用图、排名、管道src/bombe/query:工具后端src/bombe/store:SQLite模式和迁移src/bombe/tools:MCP定义和模式src/bombe/sync:混合同步客户端和协调逻辑src/bombe/release:释放门评估器tests:单元和集成测试tests/perf:perf套件和工作流工具tests/perf/real_repo_harness.py:env驱动的真实仓库评估工具docs/plans:实施设计文档docs/runbooks:操作员操作手册
Runbook
docs/runbooks/local-only-mode.mddocs/runbooks/hybrid-mode.mddocs/runbooks/rollback-and-quarantine.md
开发流程
编译:
PYTHONPATH=src python3 -m compileall src tests运行测试套件:
PYTHONPATH=src python3 -W error -m unittest discover -s tests -p "test_*.py"烟雾初始化服务器:
PYTHONPATH=src python3 -m bombe.server --repo . --init-only --log-level INFOCI职位 .github/workflows/ci.yml:
rust-check--fmt、clippy、Rust单元测试python-with-rust--构建扩展、Python测试、覆盖率(90%阈值)、lint、类型检查
建议本地所有检查运行:
PYTHONPATH=src python3 -m compileall src tests
PYTHONPATH=src python3 -W error -m unittest discover -s tests -p "test_*.py"
BOMBE_RUN_PERF=1 PYTHONPATH=src python3 -m unittest discover -s tests/perf -p "test_*.py" -v
PYTHONPATH=src python3 -m bombe.release.gates --history /tmp/bombe-perf-history.jsonl规范路线图
实施被跟踪为九个执行阶段,因此代理可以根据规范结果审核进度:
- 合同和身份基础
- 本地呼叫解析精度
- 碰撞安全符号/边缘标识映射
- 迁移框架和持久状态
- 查询护栏和质量指标
- 混合同步协议与协调
- 服务器生命周期命令和操作状态
- 工作流基准门和发布门集成
- 可观察性、运行手册和操作员准备情况
详细执行计划:
docs/plans/2026-02-08-spec-completion-9-phase-execution-plan.md
验证快照
最新本地验证运行(2026-02-10):
PYTHONPATH=src python3 -m compileall src tests->通行证PYTHONPATH=src python3 -W error -m unittest discover -s tests -p "test_*.py"->通行证(190测验,8跳过性能基准测试)BOMBE_RUN_PERF=1 BOMBE_PERF_HISTORY=/tmp/bombe-perf-history.final.jsonl PYTHONPATH=src python3 -m unittest discover -s tests/perf -p "test_*.py" -v->通行证(6测验,1跳过时BOMBE_REAL_REPO_PATHS未设置)PYTHONPATH=src python3 -m bombe.release.gates --history /tmp/bombe-perf-history.final.jsonl->RELEASE_GATES=PASS
故障排除和限制
故障排除
- 解析/提取失败
- 验证文件扩展名和语法 - 确认文件位于索引仓库路径下
- 空查询输出
- 验证索引是否已完成以及DB中是否存在符号
- 闸门故障
- 检查性能历史JSONL - 只重新运行失败的套件 - 再次评估 bombe.release.gates
已知限制
- 静态呼叫解析可能会错过动态调度和反射密集型模式。
- 高度动态代码库中的精确性/召回率取决于语义信号质量。
- 实现了混合同步原语,但共享控制平面的部署拓扑仍然是特定于运营商的。
状态
积极实现混合、规范完整的MCP遍历/运行时,带有硬释放门和运算符运行本。
