honow48-tech/CodeBread

GitHub: honow48-tech/CodeBread

CodeBread 是一个零依赖的交互式代码库可视化工具,能将文件、函数、API 路由和数据库表之间的调用关系渲染为可探索的节点图,帮助开发者快速理解陌生代码库的真实结构。

Stars: 2 | Forks: 0

CodeBread

剖析任何代码库,看清它的真实连接方式。
一个交互式、零依赖的关系映射图:文件 → 函数 → API 路由 → 数据库表。

version python deps license

## 这是什么 CodeBread 会扫描项目,提取每一个函数和类,映射出所有内容的连接方式——**前端 → API → 后端 → 数据库**——并将其渲染为浏览器中的交互式节点图。点击文件可将其剖析展开为其中的函数;点击函数可查看它调用的所有内容以及调用它的所有内容,并完整展示端到端的链条。 **它解决的问题:** 接手一个不是你写的代码库——或者是由 AI 为你生成的代码库——却不知道任何东西在哪里。逐个阅读文件无法快速建立心智模型。CodeBread 为你构建模型:它找到路由,顺着 `fetch()` 调用找到响应它们的处理程序,顺着处理程序找到它们触及的表,并绘制出整个路径。 ## 为什么开发这个工具 这最初是一个个人工具。我不断使用 AI 生成项目,然后盯着结果发呆,不知道各个部分是如何组合在一起的——哪个文件调用了哪个,API 的边界到底在哪里,什么操作了数据库。我想要一个能直接向我*展示*这一切的工具,而不是让我在文件树中逐个文件地去 `grep`。CodeBread 就是那个工具。 这是一个 v1.0 版本——我已在自己项目中积极使用它,并且会持续为其添加新功能。如果它对你也有用,那就更好了。欢迎提交 Issue 和 PR。 ## 使用的技术栈 - **后端/分析引擎:** 纯 Python **标准库**——无需任何第三方包,除了 Python 本身之外,不需要 `pip install` 任何东西。Python 使用标准库的 `ast` 进行解析,其他所有语言均使用结构化正则表达式进行解析(见下方的语言支持表)。 - **前端:** 原生 **JavaScript + SVG**,无框架,无构建步骤,无需 `npm install`。整个 UI 只有三个文件(`app.js`、`index.html`、`style.css`)。 - **服务端:** 基于标准库中 `http.server` 构建的微型本地服务器。 就是这样。克隆它,运行它,无需编译任何内容。 ## 安装 ``` pip install codebread ``` 可选额外步骤(在扫描时实现更好的 `.gitignore` 匹配): ``` pip install codebread[full] # adds pathspec ``` 需要 **Python 3.9+**。除此之外无需其他依赖。 更倾向于从源码运行以便贡献代码吗? ``` git clone https://github.com/honow48-tech/CodeBread.git cd CodeBread pip install . # or: python codebread.py --path /path/to/project ``` ## 使用 ``` codebread --path /path/to/project # scan + open the UI in your browser codebread # prompts for the path ``` 这就是完整的快速入门:将其指向一个文件夹,随后会打开一个浏览器标签页,里面已经是扫描好的关系映射图。 ### CLI 参考 | 标志 | 作用 | |---|---| | `--path, -p PATH` | 要扫描的根文件夹(如果省略则会提示输入) | | `--port 8137` | 本地服务器端口(如果被占用,会自动在附近寻找空闲端口) | | `--json out.json` | 将完整关系图导出为 JSON | | `--load out.json` | 重新打开已保存的扫描结果,无需重新扫描 | | `--html out.html` | 导出**独立的静态 HTML** 文件,方便分享 | | `--diff old.json new.json` | 对比两次保存的扫描结果并打印出差异(新增、移除、修改的文件/函数/表) | | `--no-open` | 不自动打开浏览器 | | `--no-serve` | 仅扫描 + 导出,不启动服务器 | | `--version` | 打印已安装的版本号 | ## 功能特性 - **侧边资源管理器** —— 完整的文件夹树,可像文件管理器一样展开;每个文件都标有其所属的层级颜色。 - **轨道布局(默认)** —— 文件在空间中自由浮动,均匀展开以保持连接线不交错。展开一个文件,其内部函数会围绕中心排列成整齐的圆环,并由直线轮辐连回中心。此外还提供了一种**自由**力导向布局(可在右下角切换)。 - **专注模式** —— 清空画布,让你一次只检查一个文件:在资源管理器中选择一个文件,界面上将只显示该文件、其内部函数及其直接关联。关闭此模式即可返回全局概览。 - **渐进式展现(OSINT 风格)** —— 点击文件将其剖析展开为带编号的函数;点击函数即可绘制出它调用的内容以及调用它的内容。让密集的代码库依然保持良好的可读性。 - **全链路高亮** —— 选择任意节点,其完整的端到端调用链路都会被点亮(前端 `fetch()` → `GET /api/users` 路由 → 处理程序 → `users` 表),所有无关的内容都会变暗。 - **右键操作** —— 每个节点、连线和空白画布上都有右键上下文菜单:展现连接、专注查看某文件、在 IDE 视图中打开、跳转到路由的源/目标位置、复制名称或路径等等。 - **洞察面板** —— 标记孤立的函数(未检测到调用者)和循环调用链,两者均可点击以直接跳转查看。 - **Diff 模式** —— 对比两次保存的扫描结果(`--diff old.json new.json`),清晰查看它们之间的具体差异。 - **小地图 + 面包屑导航** —— 包含可拖动视口的整个关系图的实时小地图,以及显示当前所选内容真实文件夹路径的面包屑导航。 - **键盘导航** —— `←`/`→` 在选中节点的相邻项之间切换,`↑`/`↓` 在你的选择历史中前进/后退,`/` 进行搜索。 - **详情面板** —— 显示参数、返回类型、自动生成的描述(“函数 3 · 处理 GET /api/users · 查询 users 表”),以及所有调用者和被调用者,均可点击。 - **查看实际代码** —— 每个函数都有一个可展开的 **▸ 查看代码** 区域:带有真实行号的语法高亮源码。完整的 **IDE 视图**(⌗)可整体打开任何文件,并带有大纲侧边栏。 - **搜索**(`/`)和位于顶部的**层级过滤器**(前端 / 后端 / 数据库 / 配置)。 - **警告,从不静默** —— 无法读取的文件、不支持的语言以及权限问题都会以 ⚠ 徽章的形式显示并出现在警告列表中,从不隐藏。在配置文件中发现的密钥也会被自动脱敏掩码。 ## 它如何划分层级 基于评分的启发式方法,结合了框架导入特征(React/Vue → 前端,Flask/Express → 后端,SQLAlchemy/Prisma → 数据库)、目录约定(`/client`、`/server`、`/models`…)、文件扩展名以及提取到的事实(定义了路由 → 后端,定义了模型 → 数据库)。对于模糊不清的文件,会被标记为 **未分类**,而不是盲目猜测。 ## 孤立节点 + 循环依赖检测的工作原理 - **孤立的函数**:任何被检测到入站调用次数为零的函数/方法,且既不是路由处理程序,也不是常见的框架入口点(`__init__`、`main`、`setUp`、测试函数等)。会在节点上使用徽章进行标记,并列在洞察面板中——这是寻找死代码的良好起点(属于启发式算法,并非穷举:可能会漏掉静态解析器无法识别的调用)。 - **循环调用链**:对调用图进行迭代式的循环检测(不使用递归,因此在大型代码库上是安全的),标记出在循环中相互调用的函数,既在节点上进行标记(↻ 徽章),也作为链条列表显示在洞察面板中。 ## 项目结构 ``` codebread.py ← runnable entry point (no install needed) codebread/ cli.py ← argparse CLI scanner.py ← .gitignore-aware recursive walker languages.py ← language detection / binary sniffing parsers/ python_parser.py ← ast-based Python extractor javascript_parser.py ← JS/TS/Vue/Svelte extractor generic_parser.py ← Java/C#/Go/PHP/Ruby + SQL + config classifier.py ← frontend/backend/database/config scoring connections.py ← call graph + API↔route + fn↔table matching + orphan/cycle detection analyzer.py ← pipeline orchestration diff.py ← compares two saved scans server.py ← stdlib local web server export.py ← JSON + single-file HTML export web/ ← the UI (vanilla JS + SVG, zero dependencies) assets/ ← logo (.svg source + .png for the README — GitHub blocks same-repo SVG embeds) ``` ## 路线图 在 v1.0 版本中已完成: - [x] 孤立函数和循环依赖检测 - [x] 两次扫描结果之间的 Diff 模式 - [x] 专注模式、轨道布局、右键操作、小地图、面包屑导航 尚未实现但已计划: - [ ] “解释此函数” —— 生成通俗语言的 AI 摘要按钮 - [ ] 更精确的多语言解析(目前除 Python 外,其他所有语言均使用结构化正则表达式) - [ ] 自动化测试套件 有想法吗?欢迎提交 Issue。 ## 许可协议 [MIT](LICENSE) —— 随意使用、修改、发布或出售。除了保留许可文件外,无需其他归属说明。全文请参阅 [LICENSE](LICENSE)。
标签:SOC Prime, 云安全监控, 代码可视化, 代码地图, 开发工具, 数据可视化, 架构分析, 逆向工具, 静态分析