MRJR0101/CodeGraphX

GitHub: MRJR0101/CodeGraphX

一款基于tree-sitter的确定性代码智能流水线工具,将代码库解析为知识图谱,支持影响分析、快照差异比较和增量审计。

Stars: 0 | Forks: 0

# CodeGraphX [![CI](https://github.com/MRJR0101/CodeGraphX/actions/workflows/ci.yml/badge.svg)](https://github.com/MRJR0101/CodeGraphX/actions/workflows/ci.yml) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Version](https://img.shields.io/badge/version-0.2.0-orange)](CHANGELOG.md) CodeGraphX 是一个本地优先的代码智能 CLI 工具,它能够扫描代码库,将源文件解析为结构化事实,发出确定性图事件,并支持影响分析、快照、差异比较以及可选的 Neo4j 加载。 ## 为什么选择 CodeGraphX - 确定性输出:未更改的输入会生成稳定的 JSONL 构件和哈希值。 - 增量执行:解析、提取和图加载会重用缓存状态。 - 数据库可选:`scan`、`parse`、`extract`、`snapshots` 和 `delta` 可以在没有 Neo4j 的情况下工作。 - 可检查的流水线:每个阶段都会写入可供差异比较、审计和重放的构件。 - CI 覆盖:该代码库在 Ubuntu 和 Windows 上针对 Python 3.11 到 3.13 进行了测试。 ## 安装 ``` git clone https://github.com/MRJR0101/CodeGraphX.git cd CodeGraphX # pip python -m venv .venv .venv\Scripts\activate # Windows PowerShell # source .venv/bin/activate # Linux/macOS pip install -e ".[dev]" # 或 uv uv sync --all-groups ``` 验证 CLI: ``` python -m codegraphx --version python -m codegraphx --help ``` `python cli/main.py` 仍作为旧版兼容性垫片受到支持,但规范的入口点是 `python -m codegraphx` 和 `codegraphx`。 ## 快速开始 1. 从示例创建本地项目文件: ``` cp config/projects.example.yaml config/projects.yaml ``` 2. 编辑 `config/projects.yaml` 以指向一个或多个代码库。 3. 运行流水线: ``` codegraphx scan codegraphx parse codegraphx extract ``` 4. 检查前几个发出的事件: ``` Get-Content data/events.jsonl -TotalCount 5 # Windows PowerShell # head -n 5 data/events.jsonl # POSIX shells ``` ### 可选 Neo4j 设置 复制示例环境文件并填写您的凭据: ``` cp .env.example .env ``` **选项 A -- Docker(推荐用于本地使用):** ``` # 使用 .env 中的凭证启动 Neo4j 5 容器 .\start-neo4j.ps1 ``` 该脚本会创建一个名为 `neo4j-cgx` 的容器,等待 bolt 准备就绪,并打印连接详细信息。在您需要 Neo4j 时随时运行它。要停止: ``` docker stop neo4j-cgx ``` **选项 B -- 现有的 Neo4j 实例:** 将您的 `.env` 中的 `NEO4J_URI`、`NEO4J_USER` 和 `NEO4J_PASSWORD` 指向正在运行的实例。 然后验证并加载: ``` codegraphx doctor codegraphx load codegraphx query "MATCH (f:Function) RETURN f.name LIMIT 10" ``` `load` 之后,`search` 命令会使用快速的 SQLite FTS 索引: ``` codegraphx search parse --index functions ``` CodeGraphX 在被 `config/default.yaml` 引用时会自动加载 `.env`。 ## 流水线 ``` Source repo(s) | v [scan] -> scan.jsonl File inventory by project/root/path | v [parse] -> ast.jsonl Parsed functions/imports/calls parse.cache.json parse.meta.json | v [extract] -> events.jsonl Project/File/Function/Symbol/Module events extract.cache.json extract.meta.json | v [load] -> Neo4j Incremental merge and stale-record cleanup load.state.json load.meta.json | v [search/query/impact/analyze/delta/snapshots] ``` ## 图模型 | Node | Key Properties | |------|----------------| | `Project` | `name` | | `File` | `uid`, `project`, `path`, `rel_path`, `language`, `line_count` | | `Function` | `uid`, `name`, `line`, `project`, `file_uid`, `signature_hash` | | `Symbol` | `uid`, `name` | | `Module` | `uid`, `name` | | Edge | Meaning | |------|---------| | `CONTAINS` | `Project -> File` | | `DEFINES` | `File -> Function` | | `CALLS` | `Function -> Symbol` 或 `File -> Symbol` | | `IMPORTS` | `File -> Module` | | `CALLS_FUNCTION` | `Function -> Function` | ## 命令 ### 核心流水线 | Command | Purpose | |---------|---------| | `scan` | 从 `config/projects.yaml` 发现项目文件 | | `parse` | 将支持的文件解析为类 AST 记录 | | `extract` | 将解析后的记录转换为图事件 | | `load` | 增量地将事件应用到 Neo4j | ### 分析与差异比较 | Command | Purpose | |---------|---------| | `analyze metrics` | 函数扇入/扇出样式指标 | | `analyze hotspots` | 基于已加载图数据的高行数热点 | | `analyze security` | 基于名称的安全模式查询 | | `analyze debt` | 聚合债务样式摘要 | | `analyze refactor` | 基于名称过滤的重构候选 | | `analyze duplicates` | 签名哈希重复检测 | | `analyze patterns` | 面向模式的函数搜索 | | `analyze full` | 多章节摘要报告 | | `snapshots create/list/diff/report` | 快照生命周期命令 | | `delta` | 详细的快照增量报告 | ### 搜索与查询 | Command | Purpose | |---------|---------| | `query` | 针对 Neo4j 运行 Cypher | | `search` | 按名称/路径搜索提取的事件 | | `ask` | 运行基于模板的 NL 样式查询 | | `compare` | 比较两个项目 | | `impact` | 追踪直接和传递调用者 | ### 诊断与自动化 | Command | Purpose | |---------|---------| | `doctor` | 验证配置、导入和可选的 Neo4j 连接 | | `completions` | 打印 shell 补全指南 | | `enrich backlog` | 对来自 SQLite 目录的候选代码库进行排序 | | `enrich chunk-scan` | 针对目标根目录运行分块扫描 | | `enrich campaign` | 计划或执行排序的丰富化活动 | | `enrich index-audit` | 审核推荐的 SQLite 索引 | | `enrich collectors` | 计算收集器样式的项目信号 | | `enrich intelligence` | 计算相似度和智能信号 | ## 配置 项目根目录在本地 `config/projects.yaml` 文件中配置: ``` projects: - name: DemoPython root: C:/path/to/python_project exclude: - .venv - __pycache__ - dist - build ``` 运行时行为来自 `config/default.yaml`: ``` run: out_dir: data max_files: 0 include_ext: [".py", ".js", ".ts"] neo4j: uri: ${NEO4J_URI:-bolt://localhost:7687} user: ${NEO4J_USER:-neo4j} password: ${NEO4J_PASSWORD:-} database: ${NEO4J_DATABASE:-neo4j} ``` 环境变量扩展使用 `${VAR:-default}` 语法。 ## 验证 ``` python -m pytest -q python -m codegraphx --help powershell -ExecutionPolicy Bypass -File .\scripts\smoke_no_db.ps1 -ReportPath smoke_no_db_report.json ``` 要运行完整的本地检查,请安装 `uv` 并运行: ``` powershell -ExecutionPolicy Bypass -File .\scripts\release_check.ps1 ``` ## 安全说明 - 用户提供的 Cypher 参数与查询文本分开传递。 - `query --safe` 为临时查询执行添加词法保护。 - 流水线中的路径处理避免遍历配置的根目录之外。 - 凭据应存在于 `.env` 或环境变量中,而不是提交的 YAML 中。 ## 文档 | Document | Purpose | |----------|---------| | [docs/README.md](docs/README.md) | 文档入口与导航 | | [docs/commands.md](docs/commands.md) | 命令示例与参考 | | [docs/design.md](docs/design.md) | 架构与阶段行为 | | [docs/schema.md](docs/schema.md) | 图实体与身份 | | [docs/queries.md](docs/queries.md) | 查询示例与模式 | | [docs/security-architecture.md](docs/security-architecture.md) | 威胁模型与保障措施 | | [docs/roadmap.md](docs/roadmap.md) | 计划工作 | | [CONTRIBUTING.md](CONTRIBUTING.md) | 贡献者工作流 | | [VERIFY.md](VERIFY.md) | 当前验证清单 | | [CHANGELOG.md](CHANGELOG.md) | 发布历史 | ## 兼容性 | Component | Supported | |-----------|-----------| | Python | 3.10+ | | CI matrix | 3.11, 3.12, 3.13 | | OS | Windows 和 Linux | | Neo4j | 5.x | ## 许可证 [MIT](LICENSE)
标签:AST解析, JSONL, Neo4j, Python, Tree-sitter, WebSocket, 云安全监控, 代码安全, 代码智能, 代码理解, 依赖分析, 增量解析, 影响分析, 快照差异, 数据管道, 数据管道, 无后门, 本地优先, 漏洞枚举, 请求拦截, 软件工程, 软件工程, 逆向工具, 静态分析