Free, local tool to track AI coding token usage and cost across 37 tools and agents (Claude Code, Cursor, Codex, Gemini and more), by model, project, and task. npx codeburn
This report summarizes scanner evidence for getagentseal/codeburn, a TypeScript project with 11,633 GitHub stars. SynthScan examined 405,728 lines of code across 1342 source files, recording 1009 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 3.4 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 777 finding(s).
Are imports declared and package/API names verified? 23 finding(s).
Are wrappers, guards, and repeated structures necessary? 510 finding(s).
Which changes need focused human review? 1009 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1009 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/electron/cli.ts | 726 | // ── Resident serve child ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/workflow-insights.test.ts | 326 | // ── Review-findings regressions (post-#756 review) ───────────────────────── | COMMENT |
| MEDIUM | tests/workflow-insights.test.ts | 326 | // ── Review-findings regressions (post-#756 review) ───────────────────────── | COMMENT |
| MEDIUM | tests/parser-rich-capture.test.ts | 16 | // ── structuredPatch LOC counting ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser-rich-capture.test.ts | 55 | // ── tool-result meta extraction + per-call attribution ───────────────── | COMMENT |
| MEDIUM | tests/parser-rich-capture.test.ts | 147 | // ── gitBranch representation (per-turn dedup) ────────────────────────── | COMMENT |
| MEDIUM | tests/parser-rich-capture.test.ts | 187 | // ── per-turn PR references (prRefs) ──────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser-rich-capture.test.ts | 224 | // ── session meta: ai-title last-wins, pr-link accumulation ───────────── | COMMENT |
| MEDIUM | tests/parser-rich-capture.test.ts | 255 | // ── subagent linkage: parentSessionId + agentSpawnLinks ──────────────── | COMMENT |
| MEDIUM | tests/parser-rich-capture.test.ts | 319 | // ── per-turn subagent spawn ids (spawnToolUseIds) ────────────────────── | COMMENT |
| MEDIUM | tests/parser-incremental-append.test.ts | 48 | // ── fixture builders ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser-incremental-append.test.ts | 99 | // ── helpers ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser-incremental-append.test.ts | 122 | // ── tests ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/sync-cb3-wire.test.ts | 25 | // ── Helpers ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/sync-cb3-wire.test.ts | 68 | // ── buildOtlpPayload: CB-3 attributes ──────────────────────────────── | COMMENT |
| MEDIUM | tests/sync-cb3-wire.test.ts | 187 | // ── collectUnsentCalls: session wire context ───────────────────────── | COMMENT |
| MEDIUM | tests/parser-claude-cwd.test.ts | 366 | // ── Helpers for Cowork local-agent-mode session fixtures ──────────────── | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 373 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 375 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 782 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 784 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 1000 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 1003 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 1754 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 1757 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 1767 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/parser.test.ts | 1769 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 26 | // ── Synthetic provider state ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser.test.ts | 88 | // ── OTel DB helpers ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser.test.ts | 153 | // ── Copilot JSONL helpers ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser.test.ts | 177 | // ── Helpers ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser.test.ts | 194 | // ── Common env setup ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/parser.test.ts | 225 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 227 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 256 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 258 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 295 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 297 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 323 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 325 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 538 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 540 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 586 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 592 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 627 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 635 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 709 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 718 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 815 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 819 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 926 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 928 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 1238 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 1240 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 1426 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 1428 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 1505 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 1507 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 1574 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/parser.test.ts | 1577 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| 149 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/renderer/App.tsx | 501 | }, [headlineSnapshot?.currency, overview.data]) | COMMENT |
| LOW | app/renderer/App.tsx | 621 | COMMENT | |
| LOW | app/renderer/sections/Plans.tsx | 81 | // read can momentarily report `disconnected`; either one, rendered verbatim, | COMMENT |
| LOW | app/renderer/sections/Overview.tsx | 1141 | const chartBucketSize = barBucketDays(chartDaily.length) | COMMENT |
| LOW | app/renderer/hooks/usePolled.ts | 21 | /** The most recent result that was refused for being partial or stale while a | COMMENT |
| LOW | app/renderer/hooks/usePolled.ts | 501 | // `memoKey`). Deliberately NOT keyed on the cadence: changing how OFTEN to | COMMENT |
| LOW | app/scripts/tray-settings-xproc-worker.ts | 1 | // One party in the cross-process lock test. The Rust side (windows/src-tauri/src/dock.rs, test | COMMENT |
| LOW | app/electron/cli.ts | 61 | this.detail = detail | COMMENT |
| LOW | app/electron/cli.ts | 81 | // is simply left behind and the next cold parse takes it over once it sees the | COMMENT |
| LOW | app/electron/cli.ts | 721 | * | COMMENT |
| LOW | app/electron/cli.ts | 1161 | const key = JSON.stringify([generation, spec.bin, ...spec.args]) | COMMENT |
| LOW | app/electron/tray-settings-atomic.test.ts | 1 | // @vitest-environment node | COMMENT |
| LOW | app/electron/telemetry.ts | 1 | import { randomUUID } from 'node:crypto' | COMMENT |
| LOW | app/electron/bridge-handlers.ts | 541 | // Until the cold hydration finishes, EVERY read shares the overview's floor. | COMMENT |
| LOW | app/electron/bridge-handlers.ts | 581 | } | COMMENT |
| LOW | app/electron/updates.ts | 1 | // "Update available" check for CodeBurn Desktop, mirroring the Swift menubar's | COMMENT |
| LOW | app/electron/tray-settings.ts | 1 | // The tray app's own preferences, read and written from the desktop app. | COMMENT |
| LOW | app/electron/tray-settings.ts | 101 | } | COMMENT |
| LOW | app/electron/menubar.ts | 1 | // The tray app and the Capacity Dock, as the desktop app owns them on Windows. | COMMENT |
| LOW | app/electron/quota/antigravity.ts | 1 | // Live Antigravity quota from LOCAL surfaces only - the Antigravity app's own | COMMENT |
| LOW | app/electron/quota/kimi.ts | 1 | // Live Kimi Code quota via the CLI's own usage endpoint (ported from the | COMMENT |
| LOW | app/electron/quota/grokbot.ts | 1 | // Live Grok Bot weekly allowance (ported from src/quota/grokbot.ts, which the | COMMENT |
| LOW | app/electron/quota/gemini.ts | 1 | // Live Gemini quota via the OAuth-backed Code Assist APIs the Gemini CLI | COMMENT |
| LOW | app/electron/quota/copilot.ts | 1 | // Live GitHub Copilot quota via the editor plugins' internal usage endpoint. | COMMENT |
| LOW | app/electron/quota/index.ts | 101 | const allowKeychain = Boolean(options.allowKeychain) | COMMENT |
| LOW | app/electron/quota/index.ts | 201 | // Keychain reads can raise a one-time macOS permission dialog, so only attempt | COMMENT |
| LOW | app/electron/quota/zcode.ts | 1 | // Live ZCode (z.ai coding plan) quota via the same usage endpoint the ZCode | COMMENT |
| LOW | tests/provider-phase-partial-save.test.ts | 1 | // Regression test for the codex/non-Claude cold-parse restart-loop: a run | COMMENT |
| LOW | tests/session-cache-status-snapshot.test.ts | 1 | // The status-snapshot file (one `status-snapshot.<queryKeyHash>.json` per | COMMENT |
| LOW | tests/day-aggregator.test.ts | 601 | expect(costDay!.date).toBe(expectedDate) | COMMENT |
| LOW | tests/cli-durable-totals.test.ts | 321 | // Issue #852 review: per-call slicing is only conservation-correct when day | COMMENT |
| LOW | tests/models.test.ts | 121 | // though getModelCosts would still resolve both ids via the `gpt-5.6` prefix | COMMENT |
| LOW | tests/parser.test.ts | 701 | // Every row is still derivable, so the union must recognise all of them | COMMENT |
| LOW | tests/parser.test.ts | 1641 | // (m) The probe-to-parse race, at serve level: rows commit, THEN the shutdown | COMMENT |
| LOW | tests/parser.test.ts | 1681 | const second = sumUsage(await parseAllSessions(undefined, 'copilot')) | COMMENT |
| LOW | tests/parser.test.ts | 1721 | // store being DISCOVERED made an absence epoch flip served totals — the | COMMENT |
| LOW | tests/parser.test.ts | 1761 | // then saw the row and suppressed the rollup — against a store snapshot | COMMENT |
| LOW | tests/parser.test.ts | 1981 | // (c6) A migrated cache must reconcile like a virgin one | COMMENT |
| LOW | tests/parser.test.ts | 2141 | COMMENT | |
| LOW | tests/parser.test.ts | 2341 | // list. An index is only stable while nothing is ever inserted before it, and | COMMENT |
| LOW | tests/parser.test.ts | 2401 | `copilot:sess-reskey:shutdown-residual:claude-sonnet-4-5:${Date.parse(at(2))}`, | COMMENT |
| LOW | tests/parser.test.ts | 2581 | }) | COMMENT |
| LOW | tests/parser.test.ts | 3301 | COMMENT | |
| LOW | tests/parser.test.ts | 3381 | COMMENT | |
| LOW | tests/daily-cache-carry-forward.test.ts | 821 | // value: `overview` served 2,980,804 tokens for 2026-08-06 where the fresh | COMMENT |
| LOW | tests/parser-proxy-merge.test.ts | 1 | import { mkdtemp, mkdir, rm, writeFile } from 'fs/promises' | COMMENT |
| LOW | tests/otel-cache-aggregation.test.ts | 1 | // Regression test for the OTel multi-conversation cache overwrite bug. | COMMENT |
| LOW | tests/provider-env-declarations.test.ts | 1 | // Static guard for issue #920: every `process.env` read inside | COMMENT |
| LOW | tests/provider-env-declarations.test.ts | 61 | 'ibm-bob.ts': ['ibm-bob'], | COMMENT |
| LOW | tests/provider-env-declarations.test.ts | 81 | // the guard goes silent for that var in that file — the reason must say | COMMENT |
| LOW | tests/currency-rounding.test.ts | 1 | import { describe, it, expect, beforeEach, afterEach } from 'vitest' | COMMENT |
| LOW | tests/kiro-projectpath.test.ts | 201 | }) | COMMENT |
| LOW | tests/reported-cost-cache.test.ts | 1 | // A cost the tool itself reported must survive the session cache. Every | COMMENT |
| LOW | tests/cache-refresh-lock-corrupt-body.test.ts | 81 | try { | COMMENT |
| LOW | tests/session-cache.test.ts | 421 | // carry-forward in getOrCreateProviderSection (src/parser.ts:2650) drops | COMMENT |
| LOW | tests/codex-pricing-1075.test.ts | 1 | // Regression suite for #1075 (reported by chr-evensen). | COMMENT |
| LOW | tests/kiro-cache-invalidation.test.ts | 1 | // Regression test for the Kiro stale-cache path (#618, #619). | COMMENT |
| LOW | tests/providers/cursor-bubble-dedup.test.ts | 1 | import { describe, it, expect, beforeEach, afterEach } from 'vitest' | COMMENT |
| LOW | tests/providers/copilot.test.ts | 2301 | expect(sources.filter(s => s.path.includes('chat-multi-root')).map(s => s.project)).toEqual(['team']) | COMMENT |
| LOW | tests/providers/copilot.test.ts | 4381 | }) | COMMENT |
| 400 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/renderer/hooks/usePolled.ts | 241 | function removeOldestDurableSnapshot(storage: Storage, except: string): boolean { | CODE |
| LOW | app/renderer/lib/session-count-label.ts | 34 | export function formatCombinedSessionCount(): string { | CODE |
| LOW | app/renderer/lib/investigation.ts | 274 | function rowMatchesSessionDimensions(row: SessionDrillRow, filters: InvestigationFilters): boolean { | CODE |
| LOW | app/renderer/lib/investigation.ts | 323 | export function readPersistedInvestigation(): InvestigationFilters | null { | CODE |
| LOW | app/renderer/lib/investigation.ts | 333 | export function clearPersistedInvestigation(): void { | CODE |
| LOW | app/electron/main.ts | 186 | export function createApplicationMenuTemplate(isDev = Boolean(process.env.VITE_DEV_SERVER_URL)): MenuItemConstructorOpti | CODE |
| LOW | app/electron/cli.ts | 1123 | function restartServeAfterMutation(): void { | CODE |
| LOW | app/electron/quota/grokbot.ts | 60 | export async function cursorAccessTokenFromDatabase(databasePath: string): Promise<string | null> { | CODE |
| LOW | app/electron/quota/security.ts | 176 | export function atomicWriteSecureFileSync(filePath: string, contents: string): void { | CODE |
| LOW⚡ | tests/opencode-route-cache-invalidation.test.ts | 7 | function preOpenRouterRouteFingerprint(): string { | CODE |
| LOW⚡ | tests/opencode-route-cache-invalidation.test.ts | 17 | function preKiloCodeOpenRouterRouteFingerprint(): string { | CODE |
| LOW⚡ | tests/opencode-route-cache-invalidation.test.ts | 25 | function openCodeOpenRouterOnlyFingerprint(): string { | CODE |
| LOW⚡ | tests/opencode-route-cache-invalidation.test.ts | 35 | function kiloCodeOpenRouterOnlyFingerprint(): string { | CODE |
| LOW | tests/cli-project-filter-commands.test.ts | 56 | async function seedHomeWithOlderSessions(): Promise<string> { | CODE |
| LOW | tests/parser.test.ts | 849 | async function writeClaudeSessionWithPrLink(): Promise<string> { | CODE |
| LOW | tests/optimize-fs.test.ts | 646 | function claudeSessionWithEditHeavyTurns(): void { | CODE |
| LOW | tests/sqlite-readonly-parent.test.ts | 78 | function writeUncheckpointedWalDatabase(dbPath: string): void { | CODE |
| LOW | tests/dashboard-progressive-startup.test.ts | 93 | async function renderAutoPeriodDashboard(initialProjects: ProjectSummary[], initialDurable: Awaited<ReturnType<typeof as | CODE |
| LOW | tests/bash-commands.test.ts | 204 | function isReadShapedBashCommandOld(rawCommand: string): boolean { | CODE |
| LOW | tests/bash-commands.test.ts | 228 | function buildWhitespaceHeavyCommand(): string { | CODE |
| LOW | tests/optimize.test.ts | 89 | function projectWithDeliveredSessions(costs: number[], project = 'app'): ProjectSummary { | CODE |
| LOW | tests/optimize.test.ts | 136 | function projectWithContextSessions(sessions: TestSession[], project = 'app'): ProjectSummary { | CODE |
| LOW | tests/optimize.test.ts | 713 | function projectWithLowWorthSessions(sessions: TestSession[], project = 'app'): ProjectSummary { | CODE |
| LOW | tests/optimize.test.ts | 968 | function projectWithReliabilityTurns(turns: LowWorthTurn[], project = 'app'): ProjectSummary { | CODE |
| LOW | tests/optimize.test.ts | 1302 | function checkAllPasteFixesHaveDestination(findings: WasteFinding[]) { | CODE |
| LOW | tests/optimize-zero-edit-savings.test.ts | 60 | function projectWithLowWorthSessions(sessions: TestSession[], project = 'app'): ProjectSummary { | CODE |
| LOW | tests/codex-cache-invalidation.test.ts | 38 | function preUsageRecordFingerprint(): string { | CODE |
| LOW | tests/codex-cache-invalidation.test.ts | 48 | function prePriorityTierFingerprint(): string { | CODE |
| LOW | tests/dashboard-period-truth.test.ts | 45 | function historicalProviderProject( | CODE |
| LOW | tests/session-cache-shards.test.ts | 314 | async function assertReferentialIntegrity(expected: string[]): Promise<void> { | CODE |
| LOW | tests/project-filter-durable-totals.test.ts | 80 | function carriedDayWithoutProjects(date: string): DailyEntry { | CODE |
| LOW | tests/project-filter-durable-totals.test.ts | 116 | function carriedDaySiblingProjects(date: string): DailyEntry { | CODE |
| LOW | tests/parser-large-session.test.ts | 66 | function messageFirstLargeAssistantLine(sessionId: string, timestamp: string, messageId: string): string { | CODE |
| LOW | tests/quota.test.ts | 30 | function resetsAfterElapsedFraction(fraction: number, windowSeconds: number): Date { | CODE |
| LOW | tests/providers/copilot-skills.test.ts | 38 | function assistantMessageWithSkill(opts: { messageId: string; skill: string }) { | CODE |
| LOW | tests/providers/cursor-bubble-dedup.test.ts | 103 | async function updateAssistantBubbleTokens(dbPath: string, inputTokens: number, outputTokens: number): Promise<void> { | CODE |
| LOW | tests/providers/antigravity.test.ts | 79 | function createCurrentAntigravityCliDb(dbPath: string, fixture: CurrentCliFixture): void { | CODE |
| LOW | tests/providers/hermes.test.ts | 150 | async function createHermesDbWithSession(hermesHome: string, sessionId: string): Promise<string> { | CODE |
| LOW | tests/providers/copilot.test.ts | 98 | function transcriptAssistantMessage(opts: { messageId: string; content?: string; reasoningText?: string; toolCallIds?: s | CODE |
| LOW | gnome/dataClient.js | 7 | function isCombinedDetailsUnsupported(error) { | CODE |
| LOW | docs/design/codeburn-mcp-plan.md | 148 | export async function buildMenubarPayloadForRange( | CODE |
| LOW | windows/src/lib/session-count-label.ts | 25 | export function formatCompactSessionCount( | CODE |
| LOW | windows/src/lib/session-count-label.ts | 36 | export function formatSessionAveragePlaceholder(): string { | CODE |
| LOW | windows/src/lib/session-count-label.ts | 40 | export function formatCombinedSessionCount(): string { | CODE |
| LOW | src/session-output.ts | 84 | export function sessionModelBillableOutputTokens(session: SessionSummary): Record<string, number> { | CODE |
| LOW | src/session-output.ts | 116 | export function sessionBillableOutputTokens(session: SessionSummary): number { | CODE |
| LOW | src/doctor.ts | 426 | function collectSessionCacheIssues(cache: SessionCache): DoctorSessionCacheIssue[] { | CODE |
| LOW | src/peak-hours.ts | 74 | export function deepSeekHolidayCoverageYears(): ReadonlySet<number> { | CODE |
| LOW | src/main.ts | 264 | function formatDisplayCurrencyAmount(amount: number): string { | CODE |
| LOW | src/main.ts | 313 | function getOverviewBudgetProgress(tier: BudgetTier, range: DateRange, today = new Date()): Pick<BudgetPeriodInfo, 'elap | CODE |
| LOW | src/main.ts | 343 | function isOverviewBudgetFilterActive(opts: { provider: string; project: string[]; exclude: string[] }): boolean { | CODE |
| LOW | src/main.ts | 592 | async function reportExcludedGatewayCost(range: DateRange, provider?: string): Promise<void> { | CODE |
| LOW | src/dashboard.tsx | 61 | function normalizeTerminalDimension(value: number | undefined, fallback: number): number { | CODE |
| LOW | src/dashboard.tsx | 76 | export function createDebouncedResizeStream(source: NodeJS.WriteStream, delayMs: number): DebouncedResizeStream { | CODE |
| LOW | src/dashboard.tsx | 181 | export function renderDebouncedInteractive( | CODE |
| LOW | src/dashboard.tsx | 429 | export function selectDashboardPeriodProjects(projects: ProjectSummary[], period: Period, scrollableHistory: boolean): P | CODE |
| LOW | src/dashboard.tsx | 801 | function getProjectBreakdownRowLimit(period: Period, dayMode = false): number { | CODE |
| LOW | src/dashboard.tsx | 954 | function aggregateActivityBreakdown(projects: ProjectSummary[]) { | CODE |
| LOW | src/dashboard.tsx | 980 | function getActivityBreakdownRowCount(projects: ProjectSummary[]): number { | CODE |
| LOW | src/dashboard.tsx | 2347 | export function dashboardIndexSupportsPeriod(index: DashboardHistoryIndex, period: Period): boolean { | CODE |
| 241 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/session-why.test.ts | 74 | m.result('e1', 'updated', 200, { tur: { structuredPatch: [{ oldStart: 40, oldLines: 1, newStart: 40, newLines: 1, line | CODE |
| HIGH | tests/session-why.test.ts | 304 | expect(edit.kind === 'tool' && edit.detail?.diff).toContain('+ return None') | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 166 | print(chalk.dim('\n No appliable config-class fixes for this period.')) | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 171 | print() | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 175 | print(renderApplyList(appliable, manual, costRate)) | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 178 | print(chalk.dim(' Dry run: nothing was changed.\n')) | CODE |
| HIGH | src/act/optimize-apply.ts | 191 | print(chalk.yellow(` Skipped ${fp.finding.id}: CLAUDE.md edits are not applied with --yes; use the interactive pi | CODE |
| HIGH | src/act/optimize-apply.ts | 199 | print(chalk.dim(' Nothing applied.\n')) | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 212 | print() | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 218 | print(` Applied ${chalk.bold(shortId(record.id))} ${record.description}`) | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 219 | print(chalk.dim(` Undo anytime: codeburn act undo ${shortId(record.id)}`)) | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 222 | print(chalk.cyan(' Still requires manual action:')) | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 231 | print(chalk.dim(` CodeBurn will re-measure these on your next optimize run after ${REPORT_MIN_AGE_DAYS} days.`)) | CODE |
| HIGH⚡ | src/act/optimize-apply.ts | 233 | print() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/flathub/org.agentseal.CodeBurn.yaml | 14 | # CodeBurn reads local session logs written by AI coding tools into | COMMENT |
| HIGH | src/context-tui.tsx | 32 | /// The primary label for a session row: its AI-generated title when present, | COMMENT |
| HIGH | src/context-tree.ts | 532 | // Claude Code stores an AI-generated session name as "ai-title" entries (the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/pr-insights.test.ts | 70 | prompt: 'Read audit-0926/PR-REVIEW-BRIEF.md and follow it. PR #1712 by dcaldr (2 merged PRs here, incl. #1620): "fix | CODE |
| MEDIUM | …rnMenubarTests/CredentialKeychainContinuityTests.swift | 132 | #expect(harness.fakeKeychain.upsertCount == 0) | COMMENT |
| MEDIUM | …rnMenubarTests/CredentialKeychainContinuityTests.swift | 151 | #expect(CapacityDockProviderCredentialPresence.providerIDs(defaults: harness.defaults) == [ | COMMENT |
| MEDIUM | …rnMenubarTests/CredentialKeychainContinuityTests.swift | 158 | #expect(CapacityDockProviderCredentialPresence.providerIDs(defaults: harness.defaults) == [ | COMMENT |
| MEDIUM | …rnMenubarTests/CredentialKeychainContinuityTests.swift | 326 | #expect(harness.fakeKeychain.upsertCount >= 1) | COMMENT |
| MEDIUM | …rnMenubarTests/CredentialKeychainContinuityTests.swift | 355 | #expect(harness.fakeKeychain.upsertCount == 0) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 339 | - **`codeburn sessions --by-work-unit` groups the sessions report into provider-recorded work units.** The new determini | CODE |
| MEDIUM | docs/README.md | 64 | - [providers/mux.md](providers/mux.md) — [coder/mux](https://github.com/coder/mux), Coder's desktop/CLI app for parallel | CODE |
| MEDIUM | docs/providers/mux.md | 3 | [coder/mux](https://github.com/coder/mux) — Coder's desktop/CLI app for parallel agentic development. Mux makes its own | CODE |
| MEDIUM | src/daily-cache.ts | 207 | // v36: Cursor Agent counts every assistant message of an agentic loop, not | COMMENT |
| MEDIUM | src/providers/cursor-agent.ts | 37 | // same agentic loop; this turn only carries it for display. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/parser.test.ts | 379 | await writeFile(synthFile, 'placeholder') | CODE |
| LOW⚡ | tests/parser.test.ts | 788 | await writeFile(synthFile, 'placeholder') | CODE |
| LOW⚡ | tests/parser.test.ts | 1011 | await writeFile(synthFile, 'placeholder') | CODE |
| LOW | tests/parser.test.ts | 432 | await writeFile(synthFile, 'placeholder') | CODE |
| LOW | tests/parser.test.ts | 471 | await writeFile(synthFile, 'placeholder') | CODE |
| LOW | tests/parser.test.ts | 506 | await writeFile(synthFile, 'placeholder') | CODE |
| LOW | tests/parser.test.ts | 876 | await writeFile(synthFile, 'placeholder') | CODE |
| LOW | tests/parser.test.ts | 1123 | await writeFile(synthFile, 'placeholder') | CODE |
| LOW | tests/parser.test.ts | 3472 | await writeFile(synthFile, 'placeholder') | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | gnome/indicator.js | 817 | // If an older CLI cannot provide detailed device payloads, the local | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mac/Scripts/package-app.sh | 5 | # Usage: | COMMENT |