Files that are both large and changed often are where bugs tend to cluster and where refactoring pays off first. Each file in the current tree is placed by its size and by the number of commits that changed it; its hotspot score is changes × √lines. Files without counted lines, such as binary files, are left out.
Each dot is a file; a bigger dot is a higher score. The dashed lines mark the median file size and the median number of changes, so the large files that change often are in the top right. Both axes are logarithmic. Showing the 2,000 highest-scoring of 2,962 files.
The files ranked by hotspot score: the larger a file is and the more often it changes, the higher it ranks. Authors is how many people have changed the file, bots aside, as on the Code Ownership page: a hotspot only one person has changed is also a bus-factor risk.
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| package-lock.json | 20,743 | 409 | 80 | 58,905.9 | |
| packages/core/src/config/config.ts | 4,255 | 535 | 112 | 34,898.2 | |
| packages/cli/src/config/settingsSchema.ts | 3,654 | 282 | 79 | 17,046.4 | |
| schemas/settings.schema.json | 4,775 | 224 | 62 | 15,478.7 | |
| packages/core/src/config/config.test.ts | 4,632 | 209 | 68 | 14,224.3 | |
| packages/cli/src/ui/AppContainer.tsx | 3,184 | 251 | 71 | 14,163.2 | |
| packages/cli/src/config/config.ts | 1,184 | 400 | 113 | 13,763.7 | |
| packages/cli/src/config/config.test.ts | 3,893 | 199 | 76 | 12,416.4 | |
| packages/cli/src/ui/hooks/useGeminiStream.ts | 2,429 | 245 | 67 | 12,074.8 | |
| packages/cli/src/ui/components/InputPrompt.test.tsx | 5,567 | 133 | 51 | 9,923.4 |
| File | Lines | Changes | Authors | Score | |
|---|---|---|---|---|---|
| package-lock.json | 20,743 | 409 | 80 | 58,905.9 | |
| packages/core/src/config/config.ts | 4,255 | 535 | 112 | 34,898.2 | |
| packages/cli/src/config/settingsSchema.ts | 3,654 | 282 | 79 | 17,046.4 | |
| schemas/settings.schema.json | 4,775 | 224 | 62 | 15,478.7 | |
| packages/core/src/config/config.test.ts | 4,632 | 209 | 68 | 14,224.3 | |
| packages/cli/src/ui/AppContainer.tsx | 3,184 | 251 | 71 | 14,163.2 | |
| packages/cli/src/config/config.ts | 1,184 | 400 | 113 | 13,763.7 | |
| packages/cli/src/config/config.test.ts | 3,893 | 199 | 76 | 12,416.4 | |
| packages/cli/src/ui/hooks/useGeminiStream.ts | 2,429 | 245 | 67 | 12,074.8 | |
| packages/cli/src/ui/components/InputPrompt.test.tsx | 5,567 | 133 | 51 | 9,923.4 | |
| packages/cli/src/ui/hooks/useGeminiStream.test.tsx | 5,063 | 133 | 49 | 9,463.6 | |
| packages/core/src/core/client.test.ts | 3,581 | 157 | 53 | 9,395.1 | |
| packages/core/src/core/geminiChat.test.ts | 5,916 | 108 | 36 | 8,306.9 | |
| packages/cli/src/ui/components/InputPrompt.tsx | 1,936 | 185 | 67 | 8,140.0 | |
| packages/core/src/core/__snapshots__/prompts.test.ts.snap | 4,751 | 118 | 34 | 8,133.4 | |
| packages/core/src/core/client.ts | 1,329 | 216 | 72 | 7,874.4 | |
| packages/cli/src/gemini.tsx | 1,089 | 233 | 84 | 7,689.0 | |
| packages/core/src/core/geminiChat.ts | 2,093 | 161 | 54 | 7,365.6 | |
| packages/cli/src/config/settings.ts | 1,442 | 182 | 76 | 6,911.2 | |
| docs/reference/configuration.md | 3,161 | 120 | 53 | 6,746.7 | |
| packages/cli/src/ui/AppContainer.test.tsx | 4,260 | 96 | 42 | 6,265.8 | |
| packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts | 2,214 | 132 | 43 | 6,211.0 | |
| packages/cli/src/config/settings.test.ts | 3,927 | 92 | 51 | 5,765.3 | |
| packages/core/src/tools/mcp-client.ts | 2,473 | 114 | 59 | 5,669.1 | |
| packages/cli/src/ui/components/shared/text-buffer.ts | 4,285 | 83 | 27 | 5,433.2 | |
| packages/core/src/telemetry/types.ts | 2,502 | 106 | 39 | 5,302.1 | |
| packages/core/src/telemetry/loggers.test.ts | 2,881 | 95 | 34 | 5,099.1 | |
| packages/cli/src/config/extension.test.ts | 2,502 | 99 | 32 | 4,952.0 | |
| packages/cli/src/ui/hooks/slashCommandProcessor.ts | 763 | 175 | 56 | 4,833.9 | |
| packages/core/src/tools/mcp-client.test.ts | 3,468 | 76 | 46 | 4,475.6 | |
| packages/core/src/tools/shell.ts | 1,260 | 125 | 54 | 4,437.1 | |
| package.json | 184 | 315 | 53 | 4,272.9 | |
| packages/cli/src/gemini.test.tsx | 1,938 | 92 | 43 | 4,050.1 | |
| packages/core/src/tools/edit.ts | 1,542 | 100 | 53 | 3,926.8 | |
| packages/cli/src/utils/sandbox.ts | 1,431 | 97 | 38 | 3,669.4 | |
| packages/core/src/services/shellExecutionService.ts | 2,090 | 79 | 36 | 3,611.6 | |
| packages/core/src/policy/policy-engine.test.ts | 4,570 | 53 | 24 | 3,582.9 | |
| packages/cli/src/nonInteractiveCli.test.ts | 2,621 | 69 | 40 | 3,532.5 | |
| packages/core/src/tools/shell.test.ts | 2,020 | 78 | 38 | 3,505.7 | |
| packages/core/src/services/shellExecutionService.test.ts | 2,946 | 61 | 29 | 3,310.9 | |
| packages/cli/src/ui/components/shared/text-buffer.test.ts | 3,624 | 54 | 18 | 3,250.8 | |
| packages/core/src/index.ts | 321 | 179 | 58 | 3,207.0 | |
| packages/core/src/agents/local-executor.test.ts | 4,243 | 48 | 14 | 3,126.6 | |
| packages/core/src/tools/tools.ts | 1,152 | 89 | 38 | 3,020.8 | |
| packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx | 1,108 | 90 | 36 | 2,995.8 | |
| packages/core/src/telemetry/loggers.ts | 1,032 | 92 | 36 | 2,955.5 | |
| packages/cli/src/test-utils/render.tsx | 961 | 90 | 29 | 2,790.0 | |
| packages/core/src/tools/edit.test.ts | 1,595 | 69 | 39 | 2,755.7 | |
| packages/core/src/prompts/snippets.ts | 977 | 88 | 24 | 2,750.6 | |
| packages/core/src/code_assist/oauth2.test.ts | 1,984 | 59 | 30 | 2,628.0 | |
| packages/cli/src/ui/components/SettingsDialog.test.tsx | 1,958 | 59 | 25 | 2,610.7 | |
| packages/cli/src/ui/hooks/atCommandProcessor.test.ts | 2,010 | 56 | 41 | 2,510.6 | |
| packages/cli/src/ui/types.ts | 582 | 103 | 46 | 2,484.8 | |
| packages/core/src/agents/local-executor.ts | 1,589 | 62 | 18 | 2,471.5 | |
| packages/cli/package.json | 91 | 256 | 39 | 2,442.1 | |
| packages/cli/src/config/extension-manager.ts | 1,491 | 63 | 25 | 2,432.6 | |
| packages/core/package.json | 120 | 215 | 51 | 2,355.2 | |
| packages/core/src/core/prompts.test.ts | 968 | 73 | 30 | 2,271.2 | |
| packages/core/src/tools/tool-registry.ts | 824 | 78 | 40 | 2,239.0 | |
| README.md | 412 | 109 | 59 | 2,212.5 | |
| packages/core/src/telemetry/clearcut-logger/clearcut-logger.test.ts | 1,876 | 51 | 30 | 2,209.0 | |
| packages/cli/src/ui/contexts/KeypressContext.test.tsx | 1,582 | 53 | 17 | 2,108.0 | |
| packages/core/src/telemetry/metrics.ts | 1,801 | 49 | 27 | 2,079.5 | |
| packages/core/src/code_assist/oauth2.ts | 891 | 69 | 35 | 2,059.6 | |
| packages/cli/src/ui/components/Footer.tsx | 546 | 88 | 36 | 2,056.3 | |
| packages/core/src/tools/write-file.ts | 772 | 74 | 42 | 2,056.1 | |
| packages/cli/src/ui/App.test.tsx | 295 | 116 | 46 | 1,992.4 | |
| packages/cli/src/nonInteractiveCli.ts | 636 | 78 | 39 | 1,967.1 | |
| packages/cli/src/ui/contexts/KeypressContext.tsx | 920 | 64 | 16 | 1,941.2 | |
| packages/core/src/tools/web-fetch.ts | 990 | 61 | 29 | 1,919.3 | |
| packages/cli/src/ui/hooks/useToolScheduler.test.ts | 734 | 70 | 30 | 1,896.5 | |
| packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts | 756 | 68 | 29 | 1,869.7 | |
| packages/cli/src/ui/hooks/atCommandProcessor.ts | 821 | 65 | 38 | 1,862.5 | |
| packages/cli/src/ui/components/messages/ToolGroupMessage.tsx | 507 | 82 | 27 | 1,846.4 | |
| packages/a2a-server/src/agent/task.ts | 1,345 | 50 | 24 | 1,833.7 | |
| packages/core/src/services/chatRecordingService.ts | 1,711 | 44 | 23 | 1,820.0 | |
| docs/changelogs/index.md | 1,266 | 51 | 8 | 1,814.6 | |
| packages/core/src/agents/registry.test.ts | 1,609 | 45 | 15 | 1,805.1 | |
| packages/core/src/tools/write-file.test.ts | 1,238 | 51 | 32 | 1,794.4 | |
| packages/core/src/tools/mcp-tool.ts | 750 | 63 | 36 | 1,725.3 | |
| packages/core/src/tools/tool-registry.test.ts | 907 | 57 | 34 | 1,716.6 | |
| packages/core/src/policy/policy-engine.ts | 1,207 | 49 | 22 | 1,702.4 | |
| packages/core/src/core/contentGenerator.test.ts | 1,540 | 43 | 32 | 1,687.4 | |
| packages/cli/src/ui/components/Composer.test.tsx | 1,262 | 47 | 21 | 1,669.7 | |
| .github/workflows/ci.yml | 518 | 73 | 28 | 1,661.5 | |
| packages/core/src/utils/shell-utils.ts | 1,197 | 48 | 26 | 1,660.7 | |
| packages/core/src/core/contentGenerator.ts | 427 | 80 | 50 | 1,653.1 | |
| packages/core/src/mcp/oauth-provider.test.ts | 2,487 | 32 | 24 | 1,595.8 | |
| packages/core/src/tools/ripGrep.test.ts | 1,964 | 36 | 22 | 1,595.4 | |
| packages/core/src/ide/ide-client.ts | 664 | 61 | 22 | 1,571.9 | |
| packages/core/src/services/chatRecordingService.test.ts | 2,395 | 32 | 20 | 1,566.0 | |
| docs/tools/mcp-server.md | 1,315 | 43 | 28 | 1,559.3 | |
| packages/core/src/scheduler/scheduler.test.ts | 1,849 | 36 | 22 | 1,548.0 | |
| packages/core/src/telemetry/metrics.test.ts | 2,021 | 34 | 20 | 1,528.5 | |
| packages/core/src/agents/registry.ts | 765 | 55 | 16 | 1,521.2 | |
| eslint.config.js | 445 | 71 | 31 | 1,497.7 | |
| packages/cli/src/ui/App.tsx | 38 | 242 | 63 | 1,491.8 | |
| packages/core/src/core/turn.ts | 542 | 64 | 35 | 1,490.0 | |
| packages/cli/src/config/settingsSchema.test.ts | 658 | 58 | 29 | 1,487.8 | |
| packages/vscode-ide-companion/package.json | 147 | 120 | 13 | 1,454.9 |