ABUGIZA/code-crime-scene

GitHub: ABUGIZA/code-crime-scene

一款离线优先的本地代码库质量分析桌面工具,以法医鉴定的方式评分代码健康度并生成可操作的修复计划。

Stars: 0 | Forks: 0

Code Crime Scene — offline-first forensic code analyzer

Code Crime Scene

一款离线优先的桌面应用,将你的代码库视为犯罪现场。
它会扫描本地项目,为其提取“指纹”,并交给你一份法医鉴定报告 — 评分、嫌疑人以及优先修复列表。所有操作都在你的机器上本地运行。

platform built with offline ai license

🌍 اقرأ بالعربية

## 项目简介 **Code Crime Scene** 是一款本地、单一可执行文件的桌面工具,专为希望在不将任何一行源代码上传到云端的情况下,快速、真实地了解代码库健康状况的开发者和团队而设计。 你只需指定一个文件夹。Rust 引擎会遍历该目录树,完全在你的机器上运行静态分析,并生成一份 **“Forensic Noir(黑色法医)报告”**:五项核心指标评分、分级评定结果,以及一份 **可操作的发现** 列表 —— 每一项发现都包含证据(文件 + 行号 + 一行代码片段)、数值化的风险说明,以及安全、按 PR 拆分的重构计划。该引擎会测量 **每个函数的圈复杂度**,检测 **依赖循环**,挖掘你的 **git 历史** 以寻找热点区域和巴士因子风险,并通过熵分析扫描 **16 种以上类型的泄露密钥**。 此外还提供 **可选的** 第二意见:将精简且 **不含源代码** 的摘要发送给你选择的 AI 提供商 —— **DeepSeek、OpenAI、Claude (Anthropic) 或本地模型 (Ollama / LM Studio)**,以生成书面的“侦探报告”。你的源代码永远不会离开本机 —— 只有聚合指标和文件路径会被传输,而且仅在你明确要求时才会进行。 ## 核心亮点 | | | |---|---| | 🔒 **离线优先** | 无需后端、无需登录、无需遥测。静态分析全部在本地由 Rust 运行。 | | 🧮 **真实的复杂度** | 为每个函数计算圈复杂度 —— 风险最高的将出现在报告的 *审讯室 (Interrogation Room)* 中。 | | 🕰️ **Git 取证** | 变更热点区域、总是同时发生变更的文件,以及单一所有者(巴士因子)风险 —— 全部从你的本地仓库历史中挖掘(*犯罪记录单 (The Rap Sheet)*)。 | | 🎮 **支持 Lua 与 FiveM** | 完整支持 Lua,包括 FiveM 资源:事件、NUI、线程、命令、QBCore/ESX/ox 模式、客户端/服务端检测 —— 甚至能扫描 `server.cfg` 中的密钥。 | | 🧠 **可选 AI —— 由你选择** | DeepSeek、OpenAI、Claude (Anthropic),或本地 Ollama/LM Studio 模型 —— 按需请求,仅发送不含代码的摘要。 | | 🎯 **基于证据的发现评级** | 实际用法比导入/类型/注释更重要。每项发现都会标明文件、行号和代码片段。 | | 📊 **五项评分 + 评定结果** | 项目评分、技术债务、架构、安全风险、可维护性 —— 并附带与上次扫描相比的 ▲▼ 趋势。 | | 🧩 **具备上下文意识** | 能够区分 hook、服务端入口文件或图标文件;建议适合该文件的修复方案。 | | 🛡️ **密钥检测 v2** | 16 种以上的 token 模式(GitHub、Stripe、AWS、Google、Slack、Telegram、JWT、FiveM rcon 等)+ Shannon 熵检测,且始终对敏感信息进行脱敏处理。 | | 🩹 **安全的重构计划** | 每个发现都提供按 PR 拆分的计划 + 精确的 `npm run` 验证命令。 | | 🌍 **双语支持** | 提供完整的英文 / 阿拉伯文 UI (RTL),且 AI 会以你选择的语言进行回复。 | | 🔑 **密钥存储在 OS 钥匙串中** | API 密钥保存在 Windows 凭据管理器中(每个提供商一个槽位)—— 绝不存放在文件中,也绝不暴露在 webview 中。 | | 🗄️ **本地历史记录** | 每份报告都会保存到本地的 SQLite 数据库中,你可以随时重新打开。 | ## 内部一览

The forensic report — five scores, a graded verdict, and prioritized findings

The case file: five scores, a graded verdict, and a prioritized list of findings — each with evidence.

Open a case
Open a case
Point at any local folder — recent scenes are one click away.
Case files
Case files
Every investigation, saved locally in SQLite.
Detective's Report
Detective's Report — optional AI
A written verdict from the provider of your choice, on request, code-free.
Settings
Settings
Language, key-in-keychain, storage & privacy.
## 🔁 在自身上进行测试 —— 我们用这款工具修复了 *这款工具* 大多数质量分析工具从来不会指向它们自己的源代码。而我们将 Code Crime Scene 指向了 **它自己的代码库** —— 结果它起诉了我们。 首次自检结果是残酷的:**51 / 100 · F 级 · “谋杀 (Homicide)。”** 而且它是 *对的*。它点出了真实的技术债务: - 整个项目中有 **12.1% 的重复代码** - 远超 400 行的 **巨型单体文件** —— 仅分析引擎就有 **1,718** 行,发现引擎 **770** 行,i18n 层 **889** 行,某个样式表 **922** 行 - 在两个屏幕之间复制粘贴的 **重复 API 密钥流程** - 引擎自身的几个 *发现* 需要更清晰的证据 所以我们做了诚实的事。我们点击了报告中的 **“作为提示词复制 (Copy as prompt)”** 按钮,将工具自身的法医鉴定报告交给了 AI 结对编程助手,并精确修复了它指出的问题 —— 将每个巨型单体拆分为 400 行以下的专注模块,提取共享流程,并强化了引擎。然后我们 **使用同一款工具重新扫描**:

51 → 87  ·  F 级 → B 级  ·  “谋杀” → “轻微违规”

Self-scan before — 51, Grade F
Before — caught by its own scan
Self-scan after — 87, Grade B
After — same tool, re-scanned
| 评分项 | 之前 | 之后 | | |---|:--:|:--:|:--| | **项目评分** | 51 · F | **87 · B** | ▲ 36 | | **可维护性** | 37 | **85** | ▲ 48 | | **技术债务** | 47 | **86** | ▲ 39 | | **架构** | 53 | **80** | ▲ 27 | | **安全风险** | 72 | **100** | ▲ 28 | | **代码重复率** | 12.1% | **0.0%** | ▼ 全部消除 | 📊 **[查看测量引擎基准测试 →](https://ccs-benchmark.vercel.app)** —— v1 与 v2 针对 34 个植入证据项的对比,两个引擎均已实际执行,完全可复现。 ## 工作原理 ``` ┌──────────────────────── your machine ────────────────────────┐ pick a │ │ folder ──▶ │ Scanner (Rust) ──▶ Static Analysis (Rust) ──▶ Report (UI) │ │ │ │ │ ▼ (only on request, │ │ compact, code-free summary) │ └───────────────────────────────────┼──────────────────────────┘ ▼ AI provider (optional) — DeepSeek / OpenAI / Claude / local Ollama ``` 1. **扫描** —— 遍历文件夹;忽略 `node_modules`、构建输出、`.git`、锁文件和生成的文件。 2. **分析** —— 文件/行数指标、长函数、**每个函数的圈复杂度**、滑动窗口重复代码检测、未使用的 import、带有 **循环检测** 的依赖图,以及 **16 种以上带有熵分析的密钥模式** —— 全部由 Rust 完成,全部在本地运行。 3. **Git 取证** —— 如果该文件夹是一个仓库,则在本地挖掘最近 1000 次提交,以寻找热点区域、共同变更的文件对以及巴士因子风险。不是仓库?报告将直接跳过该面板。 4. **报告** —— 评分(包含与上次扫描相比的 ▲▼ 趋势)、分级评定结果,以及包含证据和重构计划的优先发现列表。 5. **(可选)使用 AI 分析** —— 将一份精简摘要(数字 + 文件路径,**绝不包含源代码**)发送给你选择的提供商,以生成书面报告。 ## 安装说明 ### 下载 (Windows) 直接从此仓库获取 **[Code-Crime-Scene.exe](https://github.com/ABUGIZA/code-crime-scene/raw/main/Code-Crime-Scene.exe)**(约 11 MB)并双击 —— 一个独立的二进制文件,无需安装程序,没有额外依赖项。 ### 从源码构建 ``` # 前提条件:Node 18+、Rust (stable) 以及适用于你的操作系统的 Tauri 前提条件 git clone https://github.com/ABUGIZA/code-crime-scene.git cd code-crime-scene npm install npm run tauri dev # run in development npm run tauri build # produce a standalone binary ``` ## 设置 AI(可选) AI 是 **可选的** —— 没有密钥,本地报告也能完全正常运行。内置了四个提供商: | 提供商 | 密钥来源 | 备注 | |---|---|---| | **DeepSeek** | [platform.deepseek.com](https://platform.deepseek.com/) | 默认,最便宜 | | **OpenAI** | [platform.openai.com](https://platform.openai.com/) | | | **Claude (Anthropic)** | [console.anthropic.com](https://console.anthropic.com/) | | | **本地 / 自定义** | — 无需密钥 | 任何兼容 OpenAI 的服务器:Ollama, LM Studio, vLLM 等 | 1. 打开 **Settings → AI detective** 并选择你的提供商(或在引导设置时进行)。 2. 粘贴密钥并点击 **Verify & save**。应用程序会发送一个微小的真实请求以确认密钥有效,然后将其存储在你的 **OS 钥匙串** 中(每个提供商一个槽位)。对于 **Local/Custom**,只需将其指向你服务器的基础 URL(例如 `http://localhost:11434/v1`)—— 无需密钥。 3. 可选:为每个提供商覆盖默认的 **model**。 4. 打开任何报告 → 滚动到 **Detective's Report** → 点击 **Analyze with AI**。

The optional Detective's Report panel — contacting DeepSeek

**保障机制** - 在链接提供商之前,**“Analyze with AI”** 按钮是隐藏的 —— 并且如果没有提供商,后端将拒绝运行。没有密钥 ⇒ 绝不会有 AI 调用(根据你的明确选择,本地服务器除外)。 - 你的 **源代码永远不会被发送**。离开机器的只有聚合指标和文件路径,并且仅在你明确点击时才会传输。 - 密钥 **仅在 Rust 中** 调用提供商时读取;它们永远不会跨越到 Web 层。 ## 扩展到其他 AI 提供商(开源 💚) 整个 AI 集成都存在于 **一个文件** 中:[`src-tauri/src/ai.rs`](src-tauri/src/ai.rs),它已经通过两个函数接入了四个提供商: ``` pub async fn verify_key(provider: &str, base_url: &str, key: &str) -> Result<(), String>; pub async fn analyze(provider: &str, base_url: &str, key: &str, model: &str, summary: &str, lang: &str) -> Result; ``` 如今,大多数兼容 OpenAI 的服务已经可以通过 **Local / Custom** 运行(只需提供一个基础 URL)。要添加一等公民提供商(Gemini, Mistral 等):在提供商匹配项中添加一个分支,保持相同的 **system prompt**(`SYSTEM_PROMPT` / `SYSTEM_PROMPT_AR`),将响应映射为 Markdown,并在 [`src/lib/types.ts`](src/lib/types.ts) 的 `AI_PROVIDERS` 列表中注册。UI、密钥存储、语言处理和报告渲染都将保持不变。欢迎提交 PR。 ## 隐私与安全 - **任何源代码都不会离开你的机器。** 可选的 AI 调用仅传输聚合指标和文件路径。 - **无后端、无登录、无分析。** 除非你点击“Analyze with AI”,否则该应用不会进行任何网络调用。 - **API 密钥存储在 OS 钥匙串** (Windows Credential Manager) 中 —— 绝不以明文写入磁盘,绝不暴露给 webview。 - **报告本地存储** 在你应用数据目录下的 SQLite 中。 - 密钥检测是一项尽力而为的静态检查 —— 它 **不是** 安全审计。 ## 架构 一个小巧、模块化的代码库(每个源代码文件都保持在 400 行以内)。 ``` src-tauri/src/ analysis/ # static-analysis engine, split into focused modules mod.rs # orchestration (analyze) defs.rs # types, patterns, responsibility tiers (incl. FiveM) detect.rs # runtime / artifact-type / responsibility detection metrics.rs # line + function metrics complexity.rs # cyclomatic complexity per function lua.rs # Lua / FiveM: functions, requires, runtime, artifacts secrets.rs # 16+ secret patterns + Shannon-entropy detection dup.rs # stride-1 sliding-window duplication index graph.rs # dependency cycles (iterative Tarjan SCC) parse.rs # imports (TS/JS/Python/Lua) + edge resolution git/ # git-history forensics: hotspots, co-change, bus factor scanner.rs # file-tree walking + noise classification ai.rs # multi-provider AI client (DeepSeek/OpenAI/Anthropic/custom) keychain.rs # OS keychain access (one account per provider) db.rs # SQLite persistence commands.rs # Tauri command surface src/ lib/ # api, scoring, findings engine (classify/refactor/verify), i18n views/ # onboarding, home, report (parts/dashboard/sections/forensics), # settings (provider panel), cases components/ # shared UI styles/ # the "Forensic Noir" design system ``` **技术栈:** Tauri v2 · Rust · React 19 · TypeScript · Vite · SQLite (rusqlite, bundled)。 ## 路线图 - [x] 在设置中添加提供商选择器 (DeepSeek / OpenAI / Claude / 本地 Ollama) - [x] 为分析器的启发式算法提供更多语言支持 —— **已内置 Lua + FiveM** - [x] 圈复杂度、依赖循环、git 取证、密钥检测 v2、评分趋势 - [ ] macOS 与 Linux 发行二进制文件 - [ ] 依赖/耦合图 **可视化**(循环 + 共同变更检测已内置) - [ ] 每条规则的配置与阈值设定 ## 参与贡献 欢迎提交 Issue 和 PR —— 特别是新的 AI 提供商、更多语言启发式规则以及设计优化。静态分析引擎由 Rust 测试用例保护(`cargo test`),因此行为更改非常容易验证。 ## 许可证 [MIT](LICENSE) © mhmds — 可自由使用、修改和在此基础上进行构建。
标签:AI风险缓解, React, Rust, Syscalls, Tauri, 云安全监控, 代码审查, 代码质量分析, 可视化界面, 弱口令爆破, 桌面应用, 网络流量审计, 自动化攻击, 静态分析