adder-factory/cartograph

GitHub: adder-factory/cartograph

为 AI 编程 agent 提供本地优先的语义代码智能,通过对代码库构建知识图谱来减少 agent 的重复文件读取,提升探索效率和准确性。

Stars: 0 | Forks: 0

# Cartograph **为 AI 编程 agent 提供的本地优先代码智能。** 只需对代码库进行一次索引,随后即可查询其中的符号、调用方、影响半径、受影响的测试以及代码健康度信号,而无需反复重新阅读源码。它可作为 CLI、MCP 服务器和 TypeScript 库运行 —— 完全在本地,在你的机器上运行。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/c0/c01fb2a0556c7d863147ab088afaf8dfbdd357892c29eb8636345030be6bf95e.svg)](https://github.com/adder-factory/cartograph/actions/workflows/check.yml) [![Version](https://img.shields.io/github/package-json/v/adder-factory/cartograph?label=version&color=8b5cf6)](package.json) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/github/package-json/dependency-version/adder-factory/cartograph/dev/typescript?label=TypeScript&color=3178c6)](tsconfig.json) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/adder-factory/cartograph/issues) [![Runtime: Bun](https://img.shields.io/badge/runtime-Bun%20%E2%89%A5%201.3-black.svg)](https://bun.sh) [![MCP](https://img.shields.io/badge/MCP-stdio-4f46e5.svg)](docs/MCP-USAGE.md) [![Storage](https://img.shields.io/badge/storage-SQLite%20%7C%20PostgreSQL-0f766e.svg)](docs/STORAGE-BACKENDS.md) [![Languages](https://img.shields.io/badge/languages-73_modes-0ea5e9.svg)](docs/SUPPORT-MATRIX.md) [![Platforms](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-555.svg)](docs/AGENT-INSTALL.md) [为什么](#why-cartograph) · [开始使用](#get-started) · [功能](#features) · [用法](#usage) · [查看器](#local-viewer) · [语言和存储](#languages-and-storage) · [文档](#documentation) Cartograph viewer tour cycling through a focused symbol graph with detail pane, the System overview with readiness meters and LLM backend status, the health dashboard, the agent-trace timeline, and the live tool-call feed 自动循环演示:符号聚焦 → 项目图谱 → agent 追踪 → 实时信息流 → 健康度。静态截图见下方图库。
🖼️ Gallery — open each screen as a still

Focused symbol — neighborhood graph, health / centrality / coverage, source, callers

Cartograph viewer focused on a symbol with detail pane, source panel, and callers

Project overview — hub-centred core graph of this repository

Cartograph viewer project overview graph with a hub starburst neighborhood

Agent trace — full-page timeline of a recorded MCP session, with per-step detail and graph-link chips

Cartograph viewer agent-trace timeline showing recorded MCP tool calls with timing columns and a step-detail card

Live — MCP tool calls streaming in as an agent works, with the active-session card and tool mix

Cartograph viewer live feed streaming MCP tool calls with durations, results, active-session card, and tool-mix breakdown

Health dashboard — project score, findings, risk hotspots, index coverage

Cartograph viewer health dashboard with code health score gauge, findings, risk hotspots, index stats, and symbol breakdown

System overview — project status, feature-readiness meters, and LLM backend reachability

Cartograph viewer system overview with project stat tiles, feature-readiness meters, and LLM backend reachability

## 为什么选择 Cartograph 编程 agent 会将其大部分预算花费在反复阅读文件上,以回答结构性的问题:*它是在哪里实现的?谁调用了它?如果我修改它会破坏什么?哪些测试覆盖了它?* 对于大型代码库而言,反复扫描源码不仅速度慢、token 消耗大,而且很容易出错。 Cartograph 为你的代码库构建了一个本地知识图谱,并通过精确的查询将其暴露出来。agent(或开发者)可以准确请求其所需的符号、邻近范围、影响集或分析结果,并在无需将整个文件加载到上下文的情况下,获得紧凑且结构化的答案。 | agent 询问 | Cartograph 的回答 | |---|---| | “这是在哪里实现的?” | 名称、正则表达式、环境变量和 SQL 引用搜索,以及对已索引图谱的可选语义和意图搜索 | | “如果我编辑这个会破坏什么?” | 调用者、被调用者、影响半径、相关符号、共同变更历史以及受影响的测试 | | “这有风险吗?” | 生物标志物和代码健康度发现、热点、代码流失、覆盖率关联、依赖审计以及信任检查 | | “我应该先阅读什么?” | 来自 `cartograph context --format plan` 的路线规划,然后仅在需要的地方提供精确的源码 | | “我的修改涉及了什么?” | 交接前通过 `cartograph compare-to-ref` 获得的结构和发现差异 | 核心图谱功能不需要 LLM,并且在安装依赖项后即可离线工作。可选的 OpenAI 兼容 LLM 层级增加了摘要、embedding、语义搜索、`ask` 和重排序功能 —— 这些可由本地后端(llama.cpp、Ollama、Apple MLX、LM Studio)或云提供商(OpenAI、OpenRouter)提供服务。 ## 开始使用 只需安装一次 `cartograph` 二进制文件,然后在每个项目内运行安装程序 —— 安装和设置是一体化的流程。 ### 1. 安装 CLI 这行命令会获取适用于你平台的预构建独立二进制文件,并在安装前将其与发行版的 `SHA256SUMS` 进行校验(设置 `CARTOGRAPH_SKIP_CHECKSUM=1` 可跳过校验): ``` curl -fsSL https://raw.githubusercontent.com/adder-factory/cartograph/main/install.sh | sh ``` PowerShell 等效脚本 (`install.ps1`) 以及由 agent 驱动的安装流程已在 [Agent 辅助安装](docs/AGENT-INSTALL.md) 中记录。 更倾向于从源码运行?需要 [Bun](https://bun.sh) `>= 1.3`: ``` git clone https://github.com/adder-factory/cartograph.git cd cartograph bun install bun link ``` `bun link` 会将 `cartograph` 添加到你的 `PATH` 中。使用 `cartograph --version` 进行验证。 以后若要更新源码安装版本: ``` cartograph upgrade # check how far behind the checkout is cartograph upgrade --apply # fast-forward + bun install, with safety guards ``` `cartograph update` 是一个别名。如果工作树不干净、分支已偏离其上游,或者 HEAD 处于分离状态,更新将被拒绝(不会进行任何更改)。之后请重启所有正在运行的 MCP 会话,以便它们加载新代码。 ### 2. 设置你的项目 ``` cd /path/to/your/project cartograph install --yes --location=local ``` 更喜欢交互式提示?运行普通的 `cartograph`(或 `cartograph install`)体验相同流程的交互式版本 —— 它会主动帮你把二进制文件链接到 `PATH`,让你选择 agent 和位置,并且在修改 git hooks 之前会进行询问。 SQLite 是零配置的默认选项;无需其他要求即可开始查询: ``` cartograph status --verbose cartograph find "SymbolName" --mode fuzzy ``` 从这里开始,你可以在[本地查看器](#local-viewer)中直观地探索已索引的图谱 —— 这是 Cartograph 的主要功能之一(`cartograph viewer .`,完整指南见 [docs/VIEWER.md](docs/VIEWER.md))。 要在*不*触碰任何 agent 配置的情况下为项目建立索引,请使用 `cartograph index .`(仅包含 init + index + 就绪检查;前身为 `quickstart`,目前仍作为别名有效)。 ### 3. 可选:LLM 功能 核心图谱不需要 LLM。若要添加摘要、语义搜索、`ask` 和重排序功能,请运行设置向导 —— 它会检测你环境中正在运行的本地后端(Ollama、llama-server、MLX、LM Studio)和云端密钥,并推荐一个预设: ``` cartograph llm setup # interactive wizard cartograph admin llm-apply --preset cloud-openrouter # or apply one directly ``` 设置了 `OPENROUTER_API_KEY` 后,一个密钥即可支持数百种托管模型的聊天层级 —— 在默认模型上,每处理一千个符号的批量摘要只需几分钱。而本地 GGUF 设置则保持完全离线。请参阅[配置](docs/CONFIGURATION.md)了解每个预设和层级。 应用预设会立即生效:正在运行的 MCP 服务器会实时获取 `.cartograph/config.json` 的更改,无需重启。
安装程序写入了什么(MCP 配置、git hooks、卸载) - 为检测到的 agent 提供 **MCP 服务器配置及 agent 指令**(前提是目标支持)。支持的目标包括:Claude Code、Cursor、Codex CLI、GitHub Copilot CLI、CodeBuddy、CodeWhale、Zed、opencode、Hermes、Gemini CLI、Antigravity、Kiro、Factory Droid、Rovo Dev、Qoder CLI、IBM Bob、Kimi Code、Pi Agent 和 Reasonix。可以使用 `--target=` 显式指定。 - **托管的 git hooks**(`post-merge`、`post-checkout`、`post-rewrite`),确保在拉取、切换分支和变基时保持索引为最新。使用 `--no-hooks` 跳过;之后可使用 `cartograph install-hooks [--remove]` 进行管理。 - 如果 `cartograph` 无法在 `PATH` 中解析,安装程序会自动将绝对路径锁定到生成的配置中;使用 `--command ` 可覆盖此设置。 - 使用 `--location=global` 时,MCP 配置只需为所有项目写入一次,并且会跳过项目本地的步骤(init、index、hooks)—— 改为在每个项目中运行 `cartograph index .`。 为 `--location=local`(项目级 MCP 条目和指令文件)写入的配置会被添加到 `.gitignore` 中,因为它可能包含绝对的检出路径和个人的 agent 规则。以后若要从已安装的 agent 中删除 Cartograph 的 MCP 条目: ``` cartograph uninstall # global entries (default) cartograph uninstall --location local ``` 请参阅 [Agent 辅助安装](docs/AGENT-INSTALL.md)获取一个可直接粘贴的提示词,让编程 agent 执行整个设置过程,以及 PowerShell 的变体。
## 功能 所有功能界面及深入了解的途径: | | 功能 | 深入了解 | |---|---|---| | 🔎 | **搜索** —— 按符号名称搜索(精确、模糊、语义、意图),正则表达式内容搜索,环境变量读取,以及 SQL 表引用 | [搜索与导航](docs/CLI-REFERENCE.md#search-and-navigation) | | 🕸️ | **图谱导航** —— 调用者、被调用者、影响半径、多跳遍历、最短路径以及 embedding 相似度的同类节点 | [搜索与导航](docs/CLI-REFERENCE.md#search-and-navigation) | | 🧪 | **影响与测试** —— 针对已更改文件的受影响测试、各符号的覆盖率关联,以及包脚本验证命令 | [变更与测试选择](docs/CLI-REFERENCE.md#change-and-test-selection) | | 🩺 | **代码健康度** —— 生物标志物和代码健康度发现、代码流失 × 中心性的热点、死代码候选者以及依赖审计 | [审查与风险](docs/CLI-REFERENCE.md#review-and-risk) | | 🕰️ | **历史记录** —— 符号级别的 git blame 和共同变更信号 | [历史与重构](docs/CLI-REFERENCE.md#history-and-refactors) | | ✅ | **审查** —— diff 驱动的上下文、语义邻近内容、组合风险分拣以及就绪状态自检 | [审查与风险](docs/CLI-REFERENCE.md#review-and-risk) | | 🧭 | **上下文计划** —— 针对任务范围的路线规划,会在阅读任何源码之前建议下一步的查询 | [MCP 用法](docs/MCP-USAGE.md) | | 🚪 | **入口点** —— 跨越多种框架的路由、CLI 命令、MCP 工具和公共导出 | [支持矩阵](docs/SUPPORT-MATRIX.md) | | 🗺️ | **交互式查看器** —— 具备节点形状语言、健康度边框、枢纽光晕、影响/路径/对比工具的本地 Web UI | [查看器指南](docs/VIEWER.md) | | 📡 | **Agent 可观测性** —— 观看 agent 实时遍历图谱(按会话的信息流),并利用图谱链接芯片回放完整的工具调用时间线 | [查看器指南](docs/VIEWER.md) | | 📤 | **导出** —— 将图谱快照导出为 JSON、DOT、Mermaid 和 Cytoscape 格式 | [导出格式](docs/GRAPH-EXPORT-FORMATS.md) | | 🤖 | **MCP 服务器** —— 配置文件、加载预算、低 token 模式,以及为每个主要 agent 提供的客户端代码片段 | [MCP 用法](docs/MCP-USAGE.md) | | 🧩 | **LLM 层级(可选)** —— 通过本地后端(Ollama、llama.cpp、MLX)或云端(OpenAI、OpenRouter)提供摘要、embedding、语义搜索、提问和重排序 | [配置](docs/CONFIGURATION.md) | | 🗄️ | **存储** —— 零配置的 SQLite 或可选的 PostgreSQL 18+;两者均内置了向量搜索(sqlite-vec + HNSW,或原生 pgvector)—— 无需单独的向量数据库 | [存储后端](docs/STORAGE-BACKENDS.md) | Cartograph 支持 **73 种语言模式**,并能识别跨越 JavaScript / TypeScript、Python、PHP、Ruby、JVM、Go、Rust、C#、Dart、Swift 和 Salesforce 生态系统的框架感知信号(路由、控制器、组件、schema、DI 绑定)。诸如 Zod、Pydantic、GraphQL SDL、Prisma 和 SQL 等嵌入式 DSL 会贡献结构化节点和引用边。请查看[支持矩阵](docs/SUPPORT-MATRIX.md)获取完整列表。 ## 用法 ### 从 MCP agent 运行 直接运行服务器,或者让 `cartograph install` 将其连接到你的客户端: ``` cartograph serve --mcp # default 'core' profile cartograph serve --mcp --profile full # full tool surface cartograph serve --mcp --no-daemon # standalone (CI / test isolation) ``` 默认情况下,`serve --mcp` 作为共享的**每个项目守护进程**运行 —— 每个项目一个写入器 —— 这样多个在同一个项目上工作的 agent 可以共享一个单一的索引写入器,而不是同时重新建立索引并互相破坏;stdio 进程会代理到该守护进程。传递 `--no-daemon` 可使用独立的进程内服务器。请参阅 [MCP 用法](docs/MCP-USAGE.md)了解守护进程模型。 Cartograph 注册了 **34 个 MCP 工具**(均带有 `cartograph_` 前缀)。默认的 `core` 配置文件只公布 14 个最常用的编程 agent 工具,以保持已加载工具集的精简;`full` 配置文件公开所有内容,而 `read-only` 和 `review` 配置文件则属于特定作用域的子集。一个典型的编辑会话链如下: ``` cartograph_context({ task: "", format: "plan" }) → follow the suggested next action → cartograph_affected({ includeCommands: true }) → cartograph_compare_to_ref({ findingsDelta: true }) ``` 请参阅 [MCP 用法](docs/MCP-USAGE.md)了解配置文件、启动时的加载预算、低 token 模式以及客户端配置片段。 ### CLI 运行 ``` # 查找和检查代码 cartograph find "AuthService" --by name --mode fuzzy cartograph graph AuthService --direction impact cartograph node AuthService --include-callers --include-tests # 检查文件和结构 cartograph files . --format tree cartograph files --format symbols --file src/auth/service.ts # 审查当前工作 cartograph review context --diff "$(git diff)" cartograph affected --include-commands cartograph compare-to-ref --findings-delta ``` CLI 一对一地镜像了 MCP 的工具表面。请参阅 [CLI 参考](docs/CLI-REFERENCE.md)了解所有的命令和标志。 ### 从 TypeScript 运行 ``` import Cartograph from '@adder-factory/cartograph'; const cg = await Cartograph.open('/path/to/project'); // ... query the graph, then cg.close() ``` MCP 服务器也可以从 `@adder-factory/cartograph/mcp` 子路径导入。 ### 本地查看器 ``` cartograph viewer . # 打开 http://localhost:8765/ ``` 该查看器强制仅绑定到回环地址的 HTTP,在本地托管其浏览器资产,并读取与 CLI 和 MCP 服务器相同的图谱索引。配置的 PostgreSQL 或 LLM 端点可能仍然是远程的;System 会探测这些 LLM 端点,而 Ask 会将其选择的上下文发送到配置的聊天后端。节点形状编码了符号种类(圆形代表可调用对象,菱形代表契约,六边形代表路由,桶形代表数据存储),边框编码了代码健康度,而中心性缩放的光晕则让枢纽符号更加显眼。Rails 可按种类、健康度、边种类以及按项目的文件范围进行过滤;内置工具涵盖了影响分析、最短路径、与 HEAD 对比、保存的视图以及 PNG/SVG/JSON 导出。 图谱之外:**Agent 追踪**选项卡将记录的 MCP 会话作为全页时间线回放(包含每次调用的时间、参数、结果,以及可从追踪步骤跳转至其所涉符号的图谱链接芯片),**Live** 选项卡在 agent 工作时实时流式传输工具调用,而 **System** 选项卡则汇集了**概览**状态页面(项目计数、数据库大小、版本、同步状态、功能就绪情况和 LLM 后端可达性)、**健康度**仪表板(项目得分、发现的问题和风险热点),以及一个用于 `.cartograph/config.json` 的**设置**编辑器。会话严格按项目划分(一个数据库 = 一个查看器),每个浏览器标签页都以其项目名称命名,而 `cartograph viewer --session ` 可为单个 agent 提供其独立的隔离窗口。请参阅 [docs/VIEWER.md](docs/VIEWER.md) 获取完整指南。 ## 语言和存储 ### 语言 Cartograph 支持 **73 种语言模式**,包括 TypeScript / JavaScript / ArkTS、Python、Go、Rust、Java / Kotlin / Scala / Groovy、C / C++ / C# / CUDA、Swift / Objective-C、PHP、Ruby、Salesforce Apex 及其他数十种语言,并辅以框架感知信号和嵌入式 DSL 提取。[支持矩阵](docs/SUPPORT-MATRIX.md)是从注册表生成的,是权威列表。 ### 存储 SQLite 是默认选项,无需任何配置即可立即工作。它是最快的本地单写入器后端,并通过 Bun 嵌入的 SQLite 运行时进行能力检查。向量搜索也是内置的:语义查询在 sqlite-vec 和 USearch HNSW 索引上运行 —— 没有单独的向量数据库需要安装或操作。 PostgreSQL 18+ 是可选的,用于共享或外部存储、托管备份、运营级数据库控制,以及用于在服务器端进行相同向量搜索的原生 pgvector: ``` cartograph admin init -i \ --database-provider postgres \ --database-url postgres://cartograph:cartograph@localhost:5432/cartograph \ --database-schema cartograph \ --database-pgvector auto ``` 现有的图谱支持**双向**在后端之间迁移 —— 从 SQLite 迁移到 PostgreSQL 并可回迁,无需重新建立索引 —— 可通过 `cartograph admin storage-migrate` 完成。 请参阅 [存储后端](docs/STORAGE-BACKENDS.md)了解 PostgreSQL 的最低要求、pgvector 模式、生产环境授权、托管 TLS 说明、迁移细节以及本地基准测试。 ## Cartograph 不是什么 | 期望 | 现实 | |---|---| | 托管的 SaaS | 本地优先;默认情况下图谱存在于本地 SQLite 中,或者存在于你自己的 PostgreSQL 实例中 | | 测试替代品 | 它会揭示受影响的测试和风险;你的测试套件仍然是事实的来源 | | 纯 LLM 审查器 | 审查和风险工具首先依赖确定性的图谱查询;LLM 功能是可选的 | | 云端依赖 | 核心索引和图谱查询在安装依赖项后即可离线运行 | ## 文档 | 主题 | 文档 | |---|---| | Agent 辅助安装(可粘贴的提示词,PowerShell) | [docs/AGENT-INSTALL.md](docs/AGENT-INSTALL.md) | | CLI 命令参考 | [docs/CLI-REFERENCE.md](docs/CLI-REFERENCE.md) | | MCP 设置、配置文件、加载预算、客户端片段 | [docs/MCP-USAGE.md](docs/MCP-USAGE.md) | | 查看器指南(形状、过滤器、工具、快捷键) | [docs/VIEWER.md](docs/VIEWER.md) | | PostgreSQL、pgvector、迁移、存储基准测试 | [docs/STORAGE-BACKENDS.md](docs/STORAGE-BACKENDS.md) | | 配置和高级选项 | [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | | 语言和框架支持矩阵 | [docs/SUPPORT-MATRIX.md](docs/SUPPORT-MATRIX.md) | | 图谱导出工件格式 | [docs/GRAPH-EXPORT-FORMATS.md](docs/GRAPH-EXPORT-FORMATS.md) | | 添加一种语言 | [docs/ADDING-A-LANGUAGE.md](docs/ADDING-A-LANGUAGE.md) | | 故障排除 | [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) | ## 许可证 [MIT](https://opensource.org/licenses/MIT)
如果 Cartograph 为你的 agent 节省了 token,一颗 ⭐ 能帮助其他人发现它。 [报告 Bug](https://github.com/adder-factory/cartograph/issues) · [请求功能](https://github.com/adder-factory/cartograph/issues)
标签:AI编程助手, MCP, Petitpotam, SOC Prime, TypeScript, 云安全监控, 代码智能, 安全插件, 开发工具, 测试用例, 自动化攻击, 静态分析