RandomCodeSpace/codeiq

GitHub: RandomCodeSpace/codeiq

一个通过纯静态分析构建确定性代码知识图谱的工具,能自动扫描 35+ 种语言的代码库并将其中的服务、端点、实体、依赖等关系映射为 Neo4j 图谱,供 REST API、MCP server 和 Web UI 查询与可视化。

Stars: 0 | Forks: 0

codeiq

确定性代码知识图谱 -- 扫描代码库以映射服务、端点、实体、基础设施、身份验证模式和框架使用情况。无需 AI,纯静态分析。

Maven Central CI Java 25 MIT License Security (OSV-Scanner + Trivy + Semgrep + Gitleaks + jscpd + SBOM) OpenSSF Scorecard OpenSSF Best Practices 97 Detectors 35+ Languages

## 快速开始 ``` # 从源码构建 (需要 Java 25+, Maven 3.9+) git clone https://github.com/RandomCodeSpace/codeiq.git cd codeiq mvn clean package -DskipTests # 分析代码库 java -jar target/code-iq-*-cli.jar analyze /path/to/repo # 启动服务器 (REST API + MCP + React UI) java -jar target/code-iq-*-cli.jar serve /path/to/repo # 打开 http://localhost:8080 ``` ## 工作原理 codeiq 使用 35+ 种语言的 99 个检测器扫描源文件,构建代码关系的知识图谱,并通过 REST API、MCP server 和 React UI 提供服务。 ``` graph TD subgraph "1. Index" A[File Discovery] -->|git ls-files| B[Parsing Layer] B -->|JavaParser / ANTLR / Regex| C[99 Detectors] C -->|Virtual Threads| D[Graph Builder] D --> E[(H2 Cache)] end subgraph "2. Enrich" E --> F[Neo4j Bulk Load] F --> G[Cross-file Linkers] G --> H[Layer Classifier] H --> I[Service Detector] I --> J[(Neo4j Graph)] end subgraph "3. Serve" J --> K[REST API - 37 endpoints] J --> L[MCP Server - 34 tools] J --> M[React UI - 4 pages] end ``` ### 三步命令流水线 适用于大型代码库或内存受限的环境: ``` # 1. Index: 批量 H2 流式传输,低内存 (~20K 文件仅需 1-2GB) java -jar code-iq-*-cli.jar index /path/to/repo --batch-size 500 # 2. Enrich: 将 H2 加载到 Neo4j,运行 linkers + classifier + topology java -jar code-iq-*-cli.jar enrich /path/to/repo # 3. Serve: REST API + MCP + React UI java -jar code-iq-*-cli.jar serve /path/to/repo ``` 对于小型代码库,`analyze` 一步即可完成所有操作: ``` java -jar code-iq-*-cli.jar analyze /path/to/repo ``` ## CLI 命令 | 命令 | 描述 | |---------|-------------| | `analyze [path]` | 扫描并构建知识图谱(内存中,多合一) | | `index [path]` | 内存高效的批量索引至 H2 | | `enrich [path]` | 将 H2 数据加载至 Neo4j,包含链接器、分类器和拓扑 | | `serve [path]` | 启动 React UI + REST API + MCP server | | `stats [path]` | 丰富的分类统计数据 | | `graph [path]` | 导出图谱 (JSON, YAML, Mermaid, DOT) | | `query [path]` | 查询关系(消费者、生产者、调用者) | | `find [what] [path]` | 预设查询 (endpoints, guards, entities, topics) | | `cypher [query]` | 对 Neo4j 执行原生 Cypher 查询 | | `topology [path]` | 服务拓扑(爆炸半径、循环依赖、瓶颈) | | `flow [path]` | 架构流程图 | | `bundle [path]` | 将图谱及源码打包为可分发的 ZIP 文件 | | `cache [action]` | 管理分析缓存 | | `plugins [action]` | 列出/检查检测器,建议配置 | | `version` | 显示版本信息 | ## 服务器 ``` java -jar target/code-iq-*-cli.jar serve /path/to/repo --port 8080 ``` ``` graph LR subgraph "http://localhost:8080" A["/ React UI"] --- B["/api REST API"] B --- C["/mcp MCP Server"] end ``` | 界面 | 描述 | |-----------|-------------| | **React UI** (`/`) | 仪表盘 (统计 + 图表)、代码库地图 (ECharts treemap)、浏览器 (节点浏览)、MCP 控制台 (工具调用)、API 文档 | | **REST API** (`/api`) | 37 个端点 -- stats, nodes, edges, topology, triage, search, flow | | **MCP Server** (`/mcp`) | 通过 Spring AI 流式 HTTP 提供 34 个工具,用于 AI 驱动的代码分诊 | ## 支持的框架 | 语言 | 框架与模式 | |----------|----------------------| | **Java** | Spring REST, Spring Security, JPA/Hibernate, Kafka, RabbitMQ, JMS, gRPC, JAX-RS, WebSocket, Quarkus, Micronaut | | **Python** | Flask, Django (views + models + auth), FastAPI (routes + auth), SQLAlchemy, Celery, Pydantic | | **TypeScript** | Express, NestJS, Fastify, Remix, GraphQL, TypeORM, Prisma, Sequelize, Mongoose, KafkaJS, Passport/JWT | | **前端** | React, Vue, Angular, Svelte 组件和路由 | | **Go** | Gin, Echo, Chi, gorilla/mux, net/http, GORM, sqlx | | **C#** | Entity Framework Core, Minimal APIs, ASP.NET Core | | **Rust** | Actix-web, Axum | | **Kotlin** | Ktor 路由 | | **基础设施** | Terraform, Kubernetes, Docker Compose, Dockerfile, Bicep, Helm, GitHub Actions, GitLab CI, CloudFormation | | **身份验证** | Spring Security, Django Auth, FastAPI Auth, NestJS Guards, Passport/JWT, K8s RBAC, LDAP | ## 服务拓扑 基于静态代码分析生成 AppDynamics 风格的服务拓扑: ``` # 查看服务 topology java -jar code-iq-*-cli.jar topology /path/to/monorepo # Blast radius 分析 java -jar code-iq-*-cli.jar topology /path/to/repo --blast-radius service-name # 多仓库支持 java -jar code-iq-*-cli.jar index /repo1 --graph /shared --service-name frontend java -jar code-iq-*-cli.jar index /repo2 --graph /shared --service-name backend java -jar code-iq-*-cli.jar serve /shared ``` ## 配置 codeiq 由代码仓库根目录下的一个 YAML 文件进行配置:**`codeiq.yml`**。 每个字段都是可选的;省略的字段将回退到代码内的默认值 (`ConfigDefaults.builtIn()`)。请参阅 [`docs/codeiq.yml.example`](docs/codeiq.yml.example) 获取带有内联文档的完整参考。 所有键均采用 **snake_case** 格式;接受 camelCase 拼写作为已弃用的别名(仅限一个版本),并在加载时记录 WARN 日志。 ### 解析顺序(后者覆盖前者) 1. 内置默认值 2. `~/.codeiq/config.yml` (用户全局) 3. `./codeiq.yml` (项目) 4. 环境变量:`CODEIQ_
_`(例如 `CODEIQ_SERVING_PORT=9090`, `CODEIQ_MCP_AUTH_MODE=bearer`, `CODEIQ_INDEXING_BATCH_SIZE=1000`)。嵌套的 键使用下划线展平;值作为 YAML 标量解析。 5. `codeiq ` 上的 CLI 标志 ### 命令 ``` codeiq config validate # Validate ./codeiq.yml, exit 1 on error codeiq config validate -p custom.yml codeiq config explain # Print each effective value + its source layer ``` ### 最小示例 ``` project: name: my-service root: . indexing: exclude: ['**/node_modules/**', '**/build/**', '**/dist/**'] cache_dir: .codeiq/cache batch_size: 500 serving: port: 8080 bind_address: 0.0.0.0 mcp: enabled: true transport: http ``` ### Spring 所属键(保留在 `application.yml` 中) 少数几个键控制着 Spring 的 `@ConditionalOnProperty` / `@Value` 装配逻辑, 并且尚未迁移到 `codeiq.yml` 中。请将它们保留在 `src/main/resources/application.yml` 中: - `codeiq.neo4j.enabled` -- 基于 profile 条件控制的 Neo4j 开关(在 `indexing` profile 下为 `false`,在 `serving` profile 下为 `true`)。 - `codeiq.neo4j.bolt.port` -- 内嵌 Neo4j Bolt 监听端口。 - `codeiq.cors.allowed-origin-patterns` -- REST API 的 CORS 允许列表。 - `codeiq.ui.enabled` -- 切换 React SPA 静态资源处理器。 其他所有配置均应放在 `codeiq.yml` 中。`UnifiedConfigBeans` 为同时存在于两个文件中的值搭建了桥梁。 有关完整的 schema,请参阅 `docs/codeiq.yml.example`。 ## 图模型 ``` graph LR subgraph "Node Types (34)" direction TB N1[service] --- N2[endpoint] N2 --- N3[class] N3 --- N4[method] N4 --- N5[entity] N5 --- N6[topic / queue] N6 --- N7[guard / middleware] N7 --- N8[config_file] end subgraph "Edge Types (28)" direction TB E1[calls] --- E2[imports] E2 --- E3[depends_on] E3 --- E4[produces / consumes] E4 --- E5[queries / connects_to] E5 --- E6[extends / implements] E6 --- E7[protects / contains] end ``` ## 基准测试 | 项目 | 文件数 | 节点数 | 边数 | 耗时 | |---------|-------|-------|-------|------| | kubernetes | 20,240 | 193,391 | 349,707 | 9s | | kafka | 6,919 | 62,692 | 120,422 | 50s | | django | 3,467 | 51,402 | 99,086 | 54s | | spring-boot | 10,524 | 27,993 | 39,776 | 27s | | fastapi | 2,740 | 25,475 | 30,430 | 10s | | nest | 2,037 | 5,757 | 11,904 | 1s | 所有结果在多次运行中均保持 100% 的确定性。 ## 开发 ``` git clone https://github.com/RandomCodeSpace/codeiq.git cd codeiq mvn clean package # Build + test (3,270 tests across 236 files) mvn test # Tests only ``` ### Maven 依赖 ``` io.github.randomcodespace.iq code-iq 0.0.1-beta.0 ``` ## 许可证 MIT 许可证。详情请参阅 [LICENSE](LICENSE)。

凭智慧构建。无需 AI。

标签:API端点发现, DevSecOps, IP 地址批量处理, Maven, MCP Server, Neo4j, REST API, Spring AI, TCP SYN 扫描, WebSocket, Web UI, 上游代理, 代码可视化, 代码安全审计, 代码知识图谱, 依赖分析, 图谱数据库, 域名枚举, 基础设施即代码分析, 多语言支持, 威胁情报, 安全测试框架, 实体识别, 开发者工具, 数据管道, 无AI, 服务拓扑映射, 架构分析, 漏洞验证, 确定性分析, 认证模式检测, 软件工程, 错误基检测, 静态代码分析, 静态检测器