同一座城市,四种透镜
外墙颜色取决于你选的透镜。建筑本身从不移动,所以切换透镜就是让同一个地方回答另一个问题。
- 风险漏洞、不安全配置、密钥和热点,按权重合成。决定先修哪一个。
- 债务估算的清理工时:TODO、超大文件、分支过深的逻辑、热点。安排重构,看清哪个街区正在腐烂。
- 脉搏根据 git 历史,模块上一次被人动过是多久以前。分清活代码和睡着的代码。又睡着又有风险,是最危险的组合。
- 流量有多少次提交经过这个模块。找出整个团队天天都要走的那条主干道。
粘一个仓库进来,它会变成一座你能走进去的城市:每个文件夹是一座建筑,高度是复杂度,颜色由你想看什么决定。
或者先看看这几个: react/react langchain-ai/langchain expressjs/express
打开控制台 公开仓库免费。扫描器全部在你自己的机器上跑。
同一批建筑,六个问题。往下滚动,地图一个一个回答。
我该先修哪个?
先啃依赖这堵墙。tomcat-embed-core 10.1.52 带着两个认证绕过 CVE,升到 10.1.58 就都消掉了。
然后是 Thymeleaf:任何用户可控模板都能触发的 SSTI,声明在 pom.xml:64。
接着是 src/main/resources/application.yml:14 里的两个密钥——动别的之前,先把它们轮换掉。
(root) · pom.xmlweb/templatesmain/resources
漏洞、不安全配置、密钥和热点,按权重合成一种颜色。几乎所有风险都压在一个街区上。
同一座城市,换算成清理所需的工时。天际线随之重排:最高的塔不一定最贵。
每个模块上一次被改动是多久以前。颜色越淡越沉寂,而沉寂又紧挨着红色,才是最值得担心的组合。
有多少提交经过这里。这些就是全队每周都要走的主干道。
镜头升到正上方,天际线消失,剩下的是一张风险聚集在哪里的热力图。
它读真实代码,用文件和行号回答,并在你阅读时把提到的每一栋楼点亮。
一个模型一下午就能写完一个服务,而人要读懂它仍然得花一周。团队发布出去的东西和团队真正读过的东西之间,差距从没这么大过,而且每个迭代都在变大。
常见的应对方式是再出一份报告:一千条问题按严重度排好,却完全看不出它们落在系统的哪个部位。你关掉它,什么也没改变,因为清单没有地理位置。
报告告诉你有多少问题,地图告诉你问题在哪。
三步,不用注册,也不用上传任何东西。
GitHub 地址或本地路径都行。公开仓库会以 shallow 方式克隆到 .repos/ 并缓存,所以第二次打开是秒开。
文件夹变成建筑和街区的同时,Trivy、gitleaks 和技术债启发式规则在本地后台运行。它们跑完之后,巡检报告会自己出现。
点开一座建筑,读它的问题清单,每条都带文件和行号。问 AI 该先修什么:它会去读真实代码,并把提到的建筑点亮。
地图上的每一个形状都对应一个可度量的值,没有一处是装饰。
fixtures 街区。外墙颜色取决于你选的透镜。建筑本身从不移动,所以切换透镜就是让同一个地方回答另一个问题。
红色桅杆标记那些既频繁改动又足够复杂的代码,也就是“提交次数 × 复杂度”排进全仓库前 5% 的部分。这个组合是预测下一个缺陷出现在哪里的最佳单一指标。
点街区就进入它;双击带子目录的建筑,就单独展开那一块。报告会按你当前看到的范围重新计算,面包屑负责把你带回来。
最后改动于 2026/9/18。 依赖 1 个被 1 个使用
12 严重 48 高
单击打开 · 双击进入packages/react-reconciler/src:47,019 行,复杂度 7,473,是热点;每条问题都链到具体的文件和行号。
点击某一行,只保留这些建筑。
react/react 的巡检报告:47 分,评级 D,主因是 215 个未修复的严重漏洞。
runnables 上,橙色是它引用的 13 个模块,蓝色是引用它的 99 个。Code Maps 不与你的扫描器竞争:它给它们一张地图。除了自己运行的扫描,它还会读取你已在使用的工具的报告,把每个发现放到对应的建筑上。
自动在本地运行,无需任何配置。
现已可用。把工具导出的 .sarif 放进 .codemap/ 再重新分析。带 security-severity 的算安全问题,不带的算技术债。
snyk code test --sarif-file-output=.codemap/snyk.sarif
semgrep scan --sarif -o .codemap/semgrep.sarif
直接对接,无需文件中转。目前尚不存在。
已用一份 SARIF 2.1.0 示例报告做过端到端测试。密钥的值从不读取:来自密钥扫描器的发现只保留规则名和文件:行号。
现已可用
Trivy 和 gitleaks 的默认规则,加上技术债启发式。其他任何工具的规则,则通过其 SARIF 报告进入。
即将推出
你的 .gitleaks.toml、Semgrep 规则包和抑制清单,从一处应用到所有仓库。
即将推出
基于地图已有度量的自定义规则:“复杂度超过 40 的建筑必须有测试”、“billing/ 不得从 web/ 导入”。
* 需要 Code Maps Cloud 付费方案,该方案目前尚不存在。 价格 →
这个对话不是在复述报告。AI 有一组能读仓库的工具:列出问题、打开模块、读文件、搜代码,以及在城市里高亮建筑。
所以当你问“该先修什么”,答案会带着文件名和行号出现,而它正在说的那些建筑,会在你读的时候亮起来。
简短回答:哪里都没去,除非你用对话功能。
克隆、解析、读取 git 历史、Trivy、gitleaks,全都是本地进程。中间没有任何 Code Maps 服务器,也不会上传任何东西。
gitleaks 报告的是命中的规则加上文件和行号,Code Maps 也只保存和显示这些。匹配到的那串字符不会写入磁盘、不会显示在界面上,也不会进入对话。
每一条启发式规则、每个权重和阈值都在仓库里。你可以读它、反驳它、改它:github.com/juanarangot/code-map
分数从 100 开始,分别按严重 / 高 / 中等级的问题、密钥数量,以及每千行的债务工时扣分,每一项都有上限。它是用来一眼对比的启发式,不是行业标准,而且全都写在明面上。
不需要安全团队,也不需要公司:一个仓库就够了。它支持大多数语言和技术栈——JavaScript 与 TypeScript、Python、Java 与 Kotlin、Go、Rust、Ruby、PHP、C#、Swift、C 与 C++、Vue、Svelte……——以及任何目录结构:单体、monorepo,或一个 80 个文件的微服务。
开源版就是完整的产品——公开仓库、查看器、扫描器和 AI 向导——今天就能在你自己的机器上免费使用。带托管私有仓库、历史、告警和团队功能的 Code Maps Cloud 尚不存在,价格页会清楚说明哪个是哪个,以及各自的配额。
gitleaks 会标记任何长得像密钥的字符串,包括文档里的示例和测试 fixture。点开那座建筑看看:如果文件在 docs/、*.test.* 或 README 里,几乎肯定是误报。真正的密钥通常躺在 .env、application.yml 或者脚本里。
它们来自仓库根目录清单文件里声明的依赖库,而不是某个具体的源文件,所以会归到放清单文件的那个目录上,通常就是名为“依赖与配置”的那座建筑。
多半不是。Trivy 需要 lockfile 或者编译产物。没有 package-lock.json、yarn.lock、gradle.lockfile 或 build/libs 里的 jar,它根本无法评估依赖。
分析在 10.000 个代码文件处停止。改成指向某个子目录即可,例如 .repos/owner__repo/packages。
只有对话功能会访问 API。它发送的是模块列表及其指标、不含密钥值的问题清单,以及 AI 为了回答而决定读取的文件。扫描器、分析和城市本身全部在本地。
高度是复杂度,不是体量。一个塞满嵌套条件的文件,会比又长又平铺直叙的文件高得多。
不必。没有它们城市照样能用,只是没有漏洞和密钥。在 macOS 上 brew install trivy gitleaks 就能打开这两项。
挑一个你自认为了解的。大约一分钟,第一个意外通常在扫描器跑完之前就出现了。
我们正在寻找 design partner 和投资人。如果你负责一家公司的研发,而那套代码已经没人能整个装进脑子里;或者你投资开发者工具,欢迎写信到 hello@codemaps.co