jaudiger/zcodeprism
GitHub: jaudiger/zcodeprism
一个用 Zig 编写的语义代码图构建工具,通过解析本地代码库生成结构化图谱,并以 MCP 服务器形式暴露给 LLM 使用,帮助 AI 和人类更好地理解和分析代码架构。
Stars: 1 | Forks: 0
# ZCodePrism
一个 [Zig](https://ziglang.org) 库、CLI 和 MCP 服务器,用于摄取本地代码库,构建语义代码图,通过 LSP 对其进行丰富,并将其暴露给 LLM 和人类进行探索。
该库是核心。CLI 和 MCP 服务器是轻量级消费者。MCP 服务器是只读的,仅暴露对图的读取查询。所有变更(索引、快照、diff)都通过 CLI 进行。
## 开始使用
### 构建
```
zig build
```
### 测试
```
zig build test
```
使用 [kcov](https://github.com/SimonKagworths/kcov) 生成测试覆盖率:
```
zig build test -Dcoverage=true
```
结果写入 `kcov-output/`。
## CLI
`zcodeprism` 二进制文件是索引和检查代码库的主要入口点。
```
Usage: zcodeprism [options]
```
### 命令
**`zcodeprism init`** 在当前工作目录中创建 `.zcodeprism.zon` 配置文件和
`.zcodeprism/` 数据目录。使用 `--force`
覆盖现有配置。传递 `--workspace` 以创建
`zcodeprism-workspace.zon` 模板。
```
cd my-project
zcodeprism init
# 或用于 workspace
zcodeprism init --workspace
```
**`zcodeprism index`** 解析当前目录下所有受支持的源文件(`.zig`、`.rs`),
构建语义代码图,并将其保存到
`.zcodeprism/graph.bin`(根据 `storage.format` 设置,可选择保存为 `.zcodeprism/graph.jsonl`)。
传递 `--full` 以进行完整的重新索引。
```
zcodeprism index --full
```
**`zcodeprism export`** 以选定格式渲染持久化的图,并将其
写入标准输出(或使用 `--output` 写入文件)。
```
# Compact Text Graph 输出到 stdout
zcodeprism export --ctg
# Mermaid flowchart 限制在 parser subtree 内
zcodeprism export --mermaid --scope src/parser/ --output parser.mmd
# JSONL (每行一个 JSON object,可使用 git 进行 diff)
zcodeprism export --jsonl --output graph.jsonl
```
| 标志 | 描述 |
|------|-------------|
| `--ctg` | 紧凑文本图 格式 |
| `--mermaid` | Mermaid 流程图格式 |
| `--jsonl` | 每个节点/边对应一行 JSON |
| `--scope ` | 将输出限制为文件路径以给定前缀开头的节点 |
| `--output ` | 写入文件而不是标准输出 |
| `--test-nodes` | 包含测试节点(默认排除) |
| `--external-nodes` | 包含外部/幻象节点(默认排除) |
**`zcodeprism snapshot`** 将当前图的命名快照保存为
`.zcodeprism/snapshots/.bin` 下的二进制文件。标签必须为
字母数字、连字符或下划线(最多 64 个字符)。
```
zcodeprism snapshot --name v1
```
要以任何格式导出快照,请使用 `export --snapshot`:
```
zcodeprism export --ctg --snapshot v1
```
**`zcodeprism diff`** 计算两个命名快照之间的语义差异。
它检测已添加、已移除、已修改(结构化哈希已更改)和已重命名
(结构化哈希相同,名称不同)的实体。
```
zcodeprism diff v1 v2
```
示例输出:
```
summary: +1 added, -1 removed, ~1 modified, >0 renamed
+ function newFunc (main.zig:16)
- function oldFunc (main.zig:10)
~ function parse (parser.zig:5)
```
**`zcodeprism serve`** 启动 MCP 服务器(只读,基于
stdio 的 JSON-RPC 2.0)。该服务器暴露了跨 `graph.*`、`explorer.*` 和
`analysis.*` 命名空间的工具。传递 `--workspace` 以提供从多个项目组装的统一图。
```
zcodeprism serve
# serve 一个 workspace (将多个 project 作为单个 graph)
zcodeprism serve --workspace zcodeprism-workspace.zon
```
**`zcodeprism status`** 加载持久化的图并打印统计信息:按类型划分的节点
计数、边计数以及从文件内容哈希派生的 `source_hash` 指纹。传递 `--workspace` 获取工作区级别的统计信息。
```
zcodeprism status
# workspace 统计信息
zcodeprism status --workspace zcodeprism-workspace.zon
```
### 全局选项
| 选项 | 描述 |
|--------|-------------|
| `--version` | 打印版本并退出 |
| `--help` | 显示使用帮助 |
| `--project-root ` | 设置项目根目录 |
| `--name ` | 快照标签名称(与 `snapshot` 一起使用) |
| `--snapshot ` | 加载快照而不是当前图(与 `export` 一起使用) |
| `--workspace ` | 工作区配置文件(与 `init`、`serve`、`status` 一起使用) |
| `-v`, `-vv`, `-vvv` | 增加日志详细程度(info, debug, trace) |
### 配置
运行 `zcodeprism init` 会生成一个具有合理
默认值的 `.zcodeprism.zon` 文件。所有字段都是可选的。
```
.{
.exclude_paths = .{ "zig-cache", "zig-out", ".git", "target" },
.storage = .{
.path = ".zcodeprism/",
.format = .binary, // .binary or .jsonl
},
.memory = .{
.budget_mb = 512,
},
}
```
### 工作区配置
工作区将多个独立索引的项目分组为一个
统一的图。运行 `zcodeprism init --workspace` 会生成一个
`zcodeprism-workspace.zon` 文件。每个被引用的项目必须有其自己的
`.zcodeprism.zon` 并单独进行索引。
```
.{
.name = "my-workspace",
.projects = .{
.{ .name = "frontend", .path = "frontend/" },
.{ .name = "backend", .path = "backend/" },
},
}
```
项目名称必须唯一,最多 64 个字符,且不得包含 `:`。
`.path` 字段相对于工作区文件目录。使用 `"."` 引用
相同的目录。
### 调试工具
| 命令 | 描述 |
|---------|-------------|
| `zig build analyze-graph -- ` | 在已索引的目录上运行分析算法 |
| `zig build dump-ast -- ` | 转储源文件的原始 tree-sitter AST |
| `zig build parse-directory -- ` | 索引所有受支持的源文件并转储完整的代码图 |
| `zig build parse-file -- ` | 解析源文件并转储语义图 |
| `zig build query-graph -- ` | 在已索引的目录上执行查询引擎 |
| `zig build render-graph -- ` | 以 CTG 或 Mermaid 格式渲染代码图 |
标签:DLL 劫持, LLM集成, LSP, MCP服务器, Mermaid, Rust, SOC Prime, ZCodePrism, Zig, Zig语言, 云安全监控, 人工智能辅助编程, 代码可视化, 代码图谱, 代码审查, 代码搜索, 代码索引, 代码解析, 大语言模型, 开发工具, 源码解析, 网络流量审计, 静态分析