| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
中文 | English
Semantic Code Map · Code Graph · Code Intelligence · MCP Server
astra-code-map 是一个本地优先、极速响应的高精度语义代码地图与代码图谱引擎,专为 Claude Code、Codex、Cursor 等新一代智能 AI 编程代理与工程团队打造。它能够深度解构复杂代码库,将庞大交错的源文件转化为 SQLite 承载的“高确定性符号拓扑网”,彻底终结 AI 因反复 grep 和盲目读取整文件而导致的上下文(Context)浪费。
除了为 AI Agent 注入高精度的代码空间感外,系统还内置了一个极具视觉震撼力的 Web Dashboard,将抽象的架构提炼为三种极佳的交互式阅读视界:
在大型复杂项目或工业级代码库中,单纯依靠语法层(Tree-sitter 等基于 AST 的文本解析)由于缺乏类型系统支持,在面对多态、接口实现、同名函数重载以及复杂的跨模块依赖时,会产生大量的符号歧义,导致代码地图的关系网严重失真。
为了解决这一本质痛点,AstraMap 确立了以 SCIP 编译器级语义为主导,Tree-sitter 语法级更新为辅助的双层混合高精度架构:
graph LR
A[Source Code] --> B[Tree-sitter Real-time Layer]
A --> C[SCIP Semantic Providers]
B --> D[astra-code-map Merge Engine]
C --> D
D --> E[(SQLite Semantic Code Graph)]
E --> F[MCP Server]
E --> G[REST API]
G --> H[Web Dashboard]
F --> I[AI Coding Agents]
在大型、多模块及类型系统复杂的工业级代码库中,如果仅依靠 Tree-sitter(即单纯基于文本 AST 的正则/符号模式匹配),代码地图会面临以下不可逾越的痛点:
| 维度 | SCIP (高精度语义主导层) | Tree-sitter (语法辅助层) |
|---|---|---|
| 定位与角色 | 高精度跨文件语义核心 | 实时增量结构补丁 |
| 价值体现 | 消除多态与重载歧义,提供确定性的调用链、数据流分析及精准影响面评估。 | 保证编辑器/AI Agent 操作时的实时响应,纠正文件编辑后的符号偏移。 |
| 解析机理 | 结合编译器/构建系统,进行类型推导与符号消歧。 | 纯文本 AST 解析,无需编译,不依赖任何第三方构建工具。 |
| 更新频率 | 按需触发/定时批量生成(amap index),重构或大变更时更新。 | 实时监听(amap watch / 每次文件保存),毫秒级增量覆写到 SQLite。 |
在 AstraMap 的合并引擎(Merge Engine)中:
| 你想知道的问题 | astra-code-map 提供的能力 |
|---|---|
| 某个函数、类型或方法在哪里定义? | 语义符号搜索与精确定位 |
| 谁调用了这个函数?它又调用了谁? | Callers / Callees 查询 |
| 两个模块之间是怎样关联的? | 代码探索与调用路径追踪 |
| 修改某个符号会影响哪些文件和模块? | 递归影响分析与 Git Diff 分析 |
| 大型仓库中哪些内容不应进入 AI 上下文? | 生态感知过滤与生成文件排除 |
| 如何让 AI 用更少上下文理解代码库? | MCP 结构化查询与按需源码片段 |
astra-code-map 不替代源码,也不替代编译器。它为 AI Agent、IDE 和研发平台提供一张可查询、可追踪、可持续更新的代码导航底图。
从项目、目录、文件或函数进入,先观察全局结构,再逐层深入局部实现。
围绕目标函数查看调用者、被调用者和相关调用路径。
生成函数、文件、模块和项目级结构化文档,辅助代码阅读、审查、重构和交接。
完整的平台安装、SCIP Provider 配置和排障方法见 QUICKSTART.md。
在 astra-code-map 仓库根目录执行:
./build.sh
mkdir -p "$HOME/.local/bin"
install -m 755 ./amap "$HOME/.local/bin/amap"
export PATH="$HOME/.local/bin:$PATH"验证安装:
amap --helpGo 版本要求以仓库中的 go.mod 为准。Windows 用户请构建 amap.exe,并将其所在目录加入用户 PATH。
cd /path/to/your/projectamap install该命令会探测本机已安装的客户端,并只为实际存在的客户端写入 astra-code-map MCP 配置。
amap index首次运行会创建:
.astra-code-map/
├── config.yaml
└── astra-code-map.db
amap dashboard浏览器访问:
http://localhost:3000
建议在独立终端中运行:
amap watch 30不要同时启动多个 watcher,以免重复扫描和增加数据库写入。
完成 MCP 注册后,可以在 IDE编程工具问:测试代码地图,验证代码地图的有效性。
对应 MCP 工具:
| 工具 | 用途 |
|---|---|
| astra-code-map_search | 搜索函数、方法、类型及其他符号 |
| astra-code-map_explore | 围绕业务概念或符号探索相关文件和关系 |
| astra-code-map_node | 查看符号定义、签名、位置和源码片段 |
| astra-code-map_callers | 查询直接调用者 |
| astra-code-map_callees | 查询直接被调用者 |
| astra-code-map_impact | 递归分析变更影响范围 |
| astra-code-map_trace | 查找两个符号之间的调用路径 |
| astra-code-map_status | 查看索引覆盖与数据来源 |
| astra-code-map_files | 按目录或模式查询已索引文件 |
Core 内置以下语言的 Tree-sitter 实时解析。安装相应 SCIP Provider 后,可获得更完整的跨文件语义。
| 语言 | 常见扩展名 | 语义 Provider | 实时解析 |
|---|---|---|---|
| Go | .go | scip-go | Tree-sitter |
| TypeScript | .ts .tsx | scip-typescript | Tree-sitter |
| JavaScript | .js .jsx .mjs .cjs | scip-typescript | Tree-sitter |
| Python | .py | scip-python | Tree-sitter |
| Java | .java | scip-java | Tree-sitter |
| Kotlin | .kt .kts | scip-java | Tree-sitter |
| Scala | .scala .sc | scip-java | Tree-sitter |
| C | .c .h | scip-clang | Tree-sitter |
| C++ | .cc .cpp .cxx .hpp .hxx | scip-clang | Tree-sitter |
| Rust | .rs | scip-rust | Tree-sitter |
| C# | .cs | scip-dotnet | Tree-sitter |
| Ruby | .rb .rake | scip-ruby | Tree-sitter |
SCIP Provider 是否可用,取决于对应项目、语言工具链和构建输入。例如,高精度 C/C++ 索引通常需要有效的 compile_commands.json。
| 命令 | 说明 |
|---|---|
| amap install | 注册 MCP 到本机 AI 编程工具 |
| amap index | 构建或增量更新代码地图 |
| amap index --tree-sitter | 只使用 Tree-sitter 实时层 |
| amap index --refresh-scip | 强制刷新 SCIP 语义层 |
| amap index --full | 执行全量刷新 |
| amap watch [seconds] | 监听代码变化并持续同步 |
| amap serve | 启动 MCP stdio Server |
| amap dashboard | 启动 Web Dashboard |
| 命令 | 说明 |
|---|---|
| amap locate <symbol> | 定位符号定义 |
| amap tree <symbol> | 输出调用拓扑树 |
| amap diff [--suggest-tests] | 分析 Git 变更影响并建议测试范围 |
| amap hotspots | 查找代码热点 |
| amap deadcode | 检测不可达函数和方法 |
| amap cycles | 检测循环依赖 |
| amap coupling [--path=...] | 分析模块耦合 |
| amap owners <symbol> | 基于 Git blame 查询代码所有权 |
| amap query "<SQL>" | 直接查询本地 SQLite 代码图谱 |
astra-code-map 遵循一条默认原则:
代码地图优先索引手写的、承载业务语义的源代码。
系统会自动识别常见生态并排除:
用户可通过 .astra-code-map/config.yaml 使用 include、exclude 和 force-include 调整结果。
index:
languages:
- go
exclude:
- "docs/**"
- "vendor/**"
include:
- "src/**"astra-code-map 本身在本地读取和索引代码,并将数据保存在当前项目的 .astra-code-map/ 目录中。
不要将 .astra-code-map/astra-code-map.db 提交到 Git。建议在项目的 .gitignore 中加入:
.astra-code-map/astra-code-map 建立在成熟的开源生态之上,包括 SCIP、Tree-sitter、SQLite 相关组件、sqlx、fsnotify、D3.js 和 Marked 等。
README 中的组件列表仅用于说明主要技术构成,THIRD_PARTY_NOTICES.md、LICENSES/ 和 Release SBOM 才是分发合规的权威清单。
astra-code-map 仍在持续演进。公开接口、配置格式和索引数据结构在稳定版本之前可能发生变化。
适合当前阶段的使用方式:
提交 Issue 前,请尽量提供:
提交代码前,请先通过 Issue 说明问题背景和预期方案。安全问题不要在公开 Issue 中披露敏感细节。
详情见完整 CHANGELOG.md。
Licensed under the Apache License, Version 2.0. See LICENSE for details.
| Back | FazBrowse Home | New Git URL |