Code Maps

粘一个仓库进来,它会变成一座你能走进去的城市:每个文件夹是一座建筑,高度是复杂度,颜色由你想看什么决定。

或者先看看这几个: react/react langchain-ai/langchain expressjs/express

打开控制台 公开仓库免费。扫描器全部在你自己的机器上跑。

巡检评级每个仓库都会拿到一个,从 A 到 E。

在城市里走一圈

同一批建筑,六个问题。往下滚动,地图一个一个回答。

  1. 01

    风险

    漏洞、不安全配置、密钥和热点,按权重合成一种颜色。几乎所有风险都压在一个街区上。

  2. 02

    债务

    同一座城市,换算成清理所需的工时。天际线随之重排:最高的塔不一定最贵。

  3. 03

    脉搏

    每个模块上一次被改动是多久以前。颜色越淡越沉寂,而沉寂又紧挨着红色,才是最值得担心的组合。

  4. 04

    流量

    有多少提交经过这里。这些就是全队每周都要走的主干道。

  5. 05

    热力图

    镜头升到正上方,天际线消失,剩下的是一张风险聚集在哪里的热力图。

  6. 06

    问问 AI

    它读真实代码,用文件和行号回答,并在你阅读时把提到的每一栋楼点亮。

我们写代码的速度,已经超过了任何人读代码的速度

一个模型一下午就能写完一个服务,而人要读懂它仍然得花一周。团队发布出去的东西和团队真正读过的东西之间,差距从没这么大过,而且每个迭代都在变大。

常见的应对方式是再出一份报告:一千条问题按严重度排好,却完全看不出它们落在系统的哪个部位。你关掉它,什么也没改变,因为清单没有地理位置。

报告告诉你有多少问题,地图告诉你问题在哪。

怎么用

三步,不用注册,也不用上传任何东西。

  1. 粘一个仓库

    GitHub 地址或本地路径都行。公开仓库会以 shallow 方式克隆到 .repos/ 并缓存,所以第二次打开是秒开。

  2. 城市升起来

    文件夹变成建筑和街区的同时,Trivy、gitleaks 和技术债启发式规则在本地后台运行。它们跑完之后,巡检报告会自己出现。

  3. 查看、提问、修复

    点开一座建筑,读它的问题清单,每条都带文件和行号。问 AI 该先修什么:它会去读真实代码,并把提到的建筑点亮。

你能看到什么

地图上的每一个形状都对应一个可度量的值,没有一处是装饰。

react/react 仓库的等距城市:数百座建筑分布在五块彩色街区底板上,最高的塔是红色,地面上有一片热力污渍在扩散。
react/react:416 座建筑,444.162 行,评级 D。旧 lockfile 带来的漏洞全都堆在 fixtures 街区。

同一座城市,四种透镜

外墙颜色取决于你选的透镜。建筑本身从不移动,所以切换透镜就是让同一个地方回答另一个问题。

  • 风险漏洞、不安全配置、密钥和热点,按权重合成。决定先修哪一个。
  • 债务估算的清理工时:TODO、超大文件、分支过深的逻辑、热点。安排重构,看清哪个街区正在腐烂。
  • 脉搏根据 git 历史,模块上一次被人动过是多久以前。分清活代码和睡着的代码。又睡着又有风险,是最危险的组合。
  • 流量有多少次提交经过这个模块。找出整个团队天天都要走的那条主干道。

热点:bug 住的地方

红色桅杆标记那些既频繁改动又足够复杂的代码,也就是“提交次数 × 复杂度”排进全仓库前 5% 的部分。这个组合是预测下一个缺陷出现在哪里的最佳单一指标。

一层一层地看

点街区就进入它;双击带子目录的建筑,就单独展开那一块。报告会按你当前看到的范围重新计算,面包屑负责把你带回来。

packages/react-reconciler/src:47,019 行,复杂度 7,473,是热点;每条问题都链到具体的文件和行号。

巡检报告

A 到 E 的评级和百分制分数、按严重度分列的数量、估算的债务工时、街区列表和热点列表。点某一行严重度,就只保留那些建筑,其余的城市变成半透明。

如何评估 →

react/react 的巡检报告:47 分,评级 D,主因是 215 个未修复的严重漏洞。

星座视图:模块是圆点,按街区聚成区域,之间用带方向的依赖连线相连。
langchain-ai/langchain 的星座图:鼠标停在 runnables 上,橙色是它引用的 13 个模块,蓝色是引用它的 99 个。

把你已有的发现带进来

Code Maps 不与你的扫描器竞争:它给它们一张地图。除了自己运行的扫描,它还会读取你已在使用的工具的报告,把每个发现放到对应的建筑上。

内置

自动在本地运行,无需任何配置。

  • Trivy免费
  • gitleaks免费
  • git免费

通过 SARIF 报告

现已可用。把工具导出的 .sarif 放进 .codemap/ 再重新分析。带 security-severity 的算安全问题,不带的算技术债。

  • Snyk免费和付费
  • Semgrep免费和付费
  • CodeQL免费和付费
  • ESLint免费
  • Checkov免费
  • Bandit免费
  • gosec免费
  • SARIF 2.1.0免费
snyk code test --sarif-file-output=.codemap/snyk.sarif
semgrep scan --sarif -o .codemap/semgrep.sarif

路线图中

直接对接,无需文件中转。目前尚不存在。

  • SonarQube 与 SonarCloud API
  • Strix 渗透测试结果
  • GitHub App:每次 push 分析与 PR 评论
  • Slack、Jira 与 Linear:告警与工单

已用一份 SARIF 2.1.0 示例报告做过端到端测试。密钥的值从不读取:来自密钥扫描器的发现只保留规则名和文件:行号

规则:现成的、团队的,以及你自己的

现已可用

你已熟悉的规则

Trivy 和 gitleaks 的默认规则,加上技术债启发式。其他任何工具的规则,则通过其 SARIF 报告进入。

即将推出

导入团队的规则*

你的 .gitleaks.toml、Semgrep 规则包和抑制清单,从一处应用到所有仓库。

即将推出

编写你自己的规则*

基于地图已有度量的自定义规则:“复杂度超过 40 的建筑必须有测试”、“billing/ 不得从 web/ 导入”。

* 需要 Code Maps Cloud 付费方案,该方案目前尚不存在。 价格 →

问 AI,看着它指给你

这个对话不是在复述报告。AI 有一组能读仓库的工具:列出问题、打开模块、读文件、搜代码,以及在城市里高亮建筑。

所以当你问“该先修什么”,答案会带着文件名和行号出现,而它正在说的那些建筑,会在你读的时候亮起来。

  • 引用的是真实的 文件:行号,因为它确实打开了那个文件。
  • 提到的每一个模块,都会在城市里高亮出来。
  • 它永远拿不到密钥的值,只能拿到命中的规则和位置。

你的代码去了哪里

简短回答:哪里都没去,除非你用对话功能。

  • 分析全部在你的机器上跑

    克隆、解析、读取 git 历史、Trivy、gitleaks,全都是本地进程。中间没有任何 Code Maps 服务器,也不会上传任何东西。

  • 密钥的值永远不会离开扫描器

    gitleaks 报告的是命中的规则加上文件和行号,Code Maps 也只保存和显示这些。匹配到的那串字符不会写入磁盘、不会显示在界面上,也不会进入对话。

  • 开源,MIT 许可证

    每一条启发式规则、每个权重和阈值都在仓库里。你可以读它、反驳它、改它:github.com/juanarangot/code-map

  • 评级用的是公开的公式

    分数从 100 开始,分别按严重 / 高 / 中等级的问题、密钥数量,以及每千行的债务工时扣分,每一项都有上限。它是用来一眼对比的启发式,不是行业标准,而且全都写在明面上。

如何评估 →

适合谁

单体、monorepo 或微服务

给任何正在构建软件的人

不需要安全团队,也不需要公司:一个仓库就够了。它支持大多数语言和技术栈——JavaScript 与 TypeScript、Python、Java 与 Kotlin、Go、Rust、Ruby、PHP、C#、Swift、C 与 C++、Vue、Svelte……——以及任何目录结构:单体、monorepo,或一个 80 个文件的微服务。

CTO 和研发负责人
用一张图向董事会或团队说明,系统里真正在扛风险的是哪一块,以及它在两次发布之间是怎么变化的。
安全负责人
把漏洞和泄露的密钥放到架构上,而不是放进表格里,这样定级排序可以从影响范围开始,而不是从 CVSS 排序开始。
技术尽职调查
一小时走完一个陌生的代码库,拿到一个站得住脚的评级、一份热点清单和一个债务估算,可以直接写进备忘录。
刚接手项目的人
面对一个四十万行的仓库?先从它的形状开始:有哪些街区、哪几座塔是承重的、哪些角落两年没人碰过。

多少钱

开源版就是完整的产品——公开仓库、查看器、扫描器和 AI 向导——今天就能在你自己的机器上免费使用。带托管私有仓库、历史、告警和团队功能的 Code Maps Cloud 尚不存在,价格页会清楚说明哪个是哪个,以及各自的配额。

查看套餐

大家真正会问的问题

为什么密钥这么多?

gitleaks 会标记任何长得像密钥的字符串,包括文档里的示例和测试 fixture。点开那座建筑看看:如果文件在 docs/*.test.* 或 README 里,几乎肯定是误报。真正的密钥通常躺在 .envapplication.yml 或者脚本里。

为什么漏洞全都落在同一座建筑上?

它们来自仓库根目录清单文件里声明的依赖库,而不是某个具体的源文件,所以会归到放清单文件的那个目录上,通常就是名为“依赖与配置”的那座建筑。

我一个漏洞都没有,是真的吗?

多半不是。Trivy 需要 lockfile 或者编译产物。没有 package-lock.jsonyarn.lockgradle.lockfilebuild/libs 里的 jar,它根本无法评估依赖。

“仓库已截断”是什么意思?

分析在 10.000 个代码文件处停止。改成指向某个子目录即可,例如 .repos/owner__repo/packages

有什么会离开我的机器?

只有对话功能会访问 API。它发送的是模块列表及其指标、不含密钥值的问题清单,以及 AI 为了回答而决定读取的文件。扫描器、分析和城市本身全部在本地。

那座建筑行数不多,为什么那么高?

高度是复杂度,不是体量。一个塞满嵌套条件的文件,会比又长又平铺直叙的文件高得多。

必须装 Trivy 和 gitleaks 吗?

不必。没有它们城市照样能用,只是没有漏洞和密钥。在 macOS 上 brew install trivy gitleaks 就能打开这两项。

给一个你熟悉的仓库画张地图

挑一个你自认为了解的。大约一分钟,第一个意外通常在扫描器跑完之前就出现了。

打开地图 阅读源码

我们正在寻找 design partner 和投资人。如果你负责一家公司的研发,而那套代码已经没人能整个装进脑子里;或者你投资开发者工具,欢迎写信到 hello@codemaps.co