From 710316053eadad595b491a359f163ed96a0950c9 Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 04:04:37 -0700 Subject: [PATCH 01/13] feat: add optimize command, in-TUI optimize view, and per-project context budget Optimize engine detects 8 waste patterns from Claude Code session data: - Junk directory reads (node_modules, .git, dist, etc.) - Duplicate file reads per session - Unused MCP servers (configured but never called) - Missing .claudeignore in projects with junk dirs - Bloated CLAUDE.md files (>200 lines) - Uncapped BASH_MAX_OUTPUT_LENGTH - Low Read:Edit ratio (edit-without-reading, per #42796) - High cache_creation overhead (per #46917) Each finding includes impact rating, token/cost savings estimate, and exact fix (paste, command, or file content). Dashboard integration: - o key switches to in-TUI optimize view, b key goes back - Background scan on load, o button only when findings exist - Per-project Context Budget column in By Project panel showing estimated per-call overhead (system + MCP tools + skills + CLAUDE.md) CLI: codeburn optimize [-p period] [--provider] --- src/cli.ts | 13 + src/context-budget.ts | 146 +++++++++ src/dashboard.tsx | 375 +++++++++++----------- src/optimize.ts | 696 +++++++++++++++++++++++++++++++++++++++++ tests/optimize.test.ts | 238 ++++++++++++++ 5 files changed, 1280 insertions(+), 188 deletions(-) create mode 100644 src/context-budget.ts create mode 100644 src/optimize.ts create mode 100644 tests/optimize.test.ts diff --git a/src/cli.ts b/src/cli.ts index 2c83efc..7372507 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -6,6 +6,7 @@ import { renderStatusBar } from './format.js' import { installMenubar, renderMenubarFormat, type PeriodData, type ProviderCost, uninstallMenubar } from './menubar.js' import { CATEGORY_LABELS, type DateRange, type ProjectSummary, type TaskCategory } from './types.js' import { renderDashboard } from './dashboard.js' +import { runOptimize } from './optimize.js' import { getAllProviders } from './providers/index.js' import { readConfig, saveConfig, getConfigFilePath } from './config.js' import { createRequire } from 'node:module' @@ -273,4 +274,16 @@ program console.log(` Config saved to ${getConfigFilePath()}\n`) }) +program + .command('optimize') + .description('Find token waste and get exact fixes') + .option('-p, --period ', 'Analysis period: today, week, 30days, month, all', '30days') + .option('--provider ', 'Filter by provider: all, claude, codex, cursor', 'all') + .action(async (opts) => { + await loadPricing() + const { range, label } = getDateRange(opts.period) + const projects = await parseAllSessions(range, opts.provider) + await runOptimize(projects, label, range) + }) + program.parse() diff --git a/src/context-budget.ts b/src/context-budget.ts new file mode 100644 index 0000000..3db8e95 --- /dev/null +++ b/src/context-budget.ts @@ -0,0 +1,146 @@ +import { readdir, readFile } from 'fs/promises' +import { existsSync } from 'fs' +import { join } from 'path' +import { homedir } from 'os' + +const CHARS_PER_TOKEN = 4 +const SYSTEM_BASE_TOKENS = 10400 +const TOOL_TOKENS_OVERHEAD = 400 +const SKILL_FRONTMATTER_TOKENS = 80 + +export type ContextBudget = { + systemBase: number + mcpTools: { count: number; tokens: number } + skills: { count: number; tokens: number } + memory: { count: number; tokens: number; files: Array<{ name: string; tokens: number }> } + total: number + modelContext: number +} + +function estimateTokens(text: string): number { + return Math.ceil(text.length / CHARS_PER_TOKEN) +} + +async function readConfigFile(path: string): Promise | null> { + if (!existsSync(path)) return null + try { + return JSON.parse(await readFile(path, 'utf-8')) + } catch { return null } +} + +async function countMcpTools(projectPath?: string): Promise { + const home = homedir() + const configPaths = [ + join(home, '.claude', 'settings.json'), + join(home, '.claude', 'settings.local.json'), + ] + if (projectPath) { + configPaths.push(join(projectPath, '.mcp.json')) + configPaths.push(join(projectPath, '.claude', 'settings.json')) + configPaths.push(join(projectPath, '.claude', 'settings.local.json')) + } + + const servers = new Set() + let toolCount = 0 + + for (const p of configPaths) { + const config = await readConfigFile(p) + if (!config) continue + const mcpServers = (config.mcpServers ?? {}) as Record + for (const name of Object.keys(mcpServers)) { + if (servers.has(name)) continue + servers.add(name) + toolCount += 5 + } + } + + return toolCount +} + +async function countSkills(projectPath?: string): Promise { + const dirs = [join(homedir(), '.claude', 'skills')] + if (projectPath) dirs.push(join(projectPath, '.claude', 'skills')) + + let count = 0 + for (const dir of dirs) { + if (!existsSync(dir)) continue + try { + const entries = await readdir(dir) + for (const entry of entries) { + const skillFile = join(dir, entry, 'SKILL.md') + if (existsSync(skillFile)) count++ + } + } catch { continue } + } + + return count +} + +async function scanMemoryFiles(projectPath?: string): Promise> { + const home = homedir() + const files: Array<{ name: string; tokens: number }> = [] + const paths: Array<{ path: string; name: string }> = [ + { path: join(home, '.claude', 'CLAUDE.md'), name: '~/.claude/CLAUDE.md' }, + ] + + if (projectPath) { + paths.push({ path: join(projectPath, 'CLAUDE.md'), name: 'CLAUDE.md' }) + paths.push({ path: join(projectPath, '.claude', 'CLAUDE.md'), name: '.claude/CLAUDE.md' }) + paths.push({ path: join(projectPath, 'CLAUDE.local.md'), name: 'CLAUDE.local.md' }) + } + + for (const { path, name } of paths) { + if (!existsSync(path)) continue + try { + const content = await readFile(path, 'utf-8') + files.push({ name, tokens: estimateTokens(content) }) + } catch { continue } + } + + return files +} + +export async function estimateContextBudget(projectPath?: string, modelContext = 1_000_000): Promise { + const mcpToolCount = await countMcpTools(projectPath) + const skillCount = await countSkills(projectPath) + const memoryFiles = await scanMemoryFiles(projectPath) + + const mcpTokens = mcpToolCount * TOOL_TOKENS_OVERHEAD + const skillTokens = skillCount * SKILL_FRONTMATTER_TOKENS + const memoryTokens = memoryFiles.reduce((s, f) => s + f.tokens, 0) + const total = SYSTEM_BASE_TOKENS + mcpTokens + skillTokens + memoryTokens + + return { + systemBase: SYSTEM_BASE_TOKENS, + mcpTools: { count: mcpToolCount, tokens: mcpTokens }, + skills: { count: skillCount, tokens: skillTokens }, + memory: { count: memoryFiles.length, tokens: memoryTokens, files: memoryFiles }, + total, + modelContext, + } +} + +export async function estimateBudgetsByProject(projectPaths: Map): Promise> { + const results = new Map() + for (const [project, cwd] of projectPaths) { + const budget = await estimateContextBudget(cwd) + results.set(project, budget) + } + return results +} + +export async function discoverProjectCwd(sessionDir: string): Promise { + try { + const files = (await readdir(sessionDir)).filter(f => f.endsWith('.jsonl')) + if (files.length === 0) return null + const content = await readFile(join(sessionDir, files[0]), 'utf-8') + for (const line of content.split('\n')) { + if (!line.trim()) continue + try { + const entry = JSON.parse(line) + if (entry.cwd && typeof entry.cwd === 'string') return entry.cwd + } catch { continue } + } + } catch { return null } + return null +} diff --git a/src/dashboard.tsx b/src/dashboard.tsx index e8aabf6..4d92287 100644 --- a/src/dashboard.tsx +++ b/src/dashboard.tsx @@ -1,14 +1,18 @@ import { homedir } from 'os' -import React, { useState, useCallback, useEffect } from 'react' +import React, { useState, useCallback, useEffect, useRef } from 'react' import { render, Box, Text, useInput, useApp, useWindowSize } from 'ink' import { CATEGORY_LABELS, type ProjectSummary, type TaskCategory } from './types.js' import { formatCost, formatTokens } from './format.js' import { parseAllSessions } from './parser.js' import { loadPricing } from './models.js' import { getAllProviders } from './providers/index.js' +import { scanAndDetect, type WasteFinding, type WasteAction, type OptimizeResult } from './optimize.js' +import { estimateContextBudget, discoverProjectCwd, type ContextBudget } from './context-budget.js' +import { join } from 'path' type Period = 'today' | 'week' | '30days' | 'month' +type View = 'dashboard' | 'optimize' const PERIODS: Period[] = ['today', 'week', '30days', 'month'] const PERIOD_LABELS: Record = { @@ -69,6 +73,8 @@ const CATEGORY_COLORS: Record = { general: '#666666', } +const IMPACT_PANEL_COLORS: Record = { high: '#F55B5B', medium: ORANGE, low: DIM } + function toHex(r: number, g: number, b: number): string { return '#' + [r, g, b].map(v => Math.round(v).toString(16).padStart(2, '0')).join('') } @@ -77,7 +83,6 @@ function lerp(a: number, b: number, t: number): number { return a + t * (b - a) } -// Blue -> amber -> orange gradient across the bar width function gradientColor(pct: number): string { if (pct <= 0.33) { const t = pct / 0.33 @@ -213,37 +218,37 @@ const _homeEncoded = homedir().replace(/\//g, '-') function shortProject(encoded: string): string { let path = encoded.replace(/^-/, '') - if (path.startsWith(_homeEncoded.replace(/^-/, ''))) { path = path.slice(_homeEncoded.replace(/^-/, '').length).replace(/^-/, '') } - - path = path - .replace(/^private-tmp-[^-]+-[^-]+-/, '') // /private/tmp/// - .replace(/^private-tmp-/, '') - .replace(/^tmp-/, '') - + path = path.replace(/^private-tmp-[^-]+-[^-]+-/, '').replace(/^private-tmp-/, '').replace(/^tmp-/, '') if (!path) return 'home' - const parts = path.split('-').filter(Boolean) if (parts.length <= 3) return parts.join('/') return parts.slice(-3).join('/') } -function ProjectBreakdown({ projects, pw, bw }: { projects: ProjectSummary[]; pw: number; bw: number }) { +function ProjectBreakdown({ projects, pw, bw, budgets }: { projects: ProjectSummary[]; pw: number; bw: number; budgets?: Map }) { const maxCost = Math.max(...projects.map(p => p.totalCostUSD)) - const nw = Math.max(8, pw - bw - 23) + const hasBudgets = budgets && budgets.size > 0 + const nw = Math.max(8, pw - bw - (hasBudgets ? 31 : 23)) return ( - {''.padEnd(bw + 1 + nw)}{'cost'.padStart(8)}{'sess'.padStart(6)} - {projects.slice(0, 8).map((project, i) => ( - - - {fit(shortProject(project.project), nw)} - {formatCost(project.totalCostUSD).padStart(8)} - {String(project.sessions.length).padStart(6)} - - ))} + + {''.padEnd(bw + 1 + nw)}{'cost'.padStart(8)}{'sess'.padStart(6)}{hasBudgets ? 'ctx'.padStart(8) : ''} + + {projects.slice(0, 8).map((project, i) => { + const budget = budgets?.get(project.project) + return ( + + + {fit(shortProject(project.project), nw)} + {formatCost(project.totalCostUSD).padStart(8)} + {String(project.sessions.length).padStart(6)} + {hasBudgets && {(budget ? formatTokens(budget.total) : '-').padStart(8)}} + + ) + })} ) } @@ -306,7 +311,6 @@ function ActivityBreakdown({ projects, pw, bw }: { projects: ProjectSummary[]; p } const sorted = Object.entries(categoryTotals).sort(([, a], [, b]) => b.costUSD - a.costUSD) const maxCost = sorted[0]?.[1]?.costUSD ?? 0 - return ( {''.padEnd(bw + 14)}{'cost'.padStart(8)}{'turns'.padStart(6)}{'1-shot'.padStart(7)} @@ -315,9 +319,7 @@ function ActivityBreakdown({ projects, pw, bw }: { projects: ProjectSummary[]; p return ( - - {' '}{fit(CATEGORY_LABELS[cat as TaskCategory] ?? cat, 13)} - + {fit(CATEGORY_LABELS[cat as TaskCategory] ?? cat, 13)} {formatCost(data.costUSD).padStart(8)} {String(data.turns).padStart(6)} {String(oneShotPct).padStart(7)} @@ -333,11 +335,7 @@ function ToolBreakdown({ projects, pw, bw, title, filterPrefix }: { projects: Pr for (const project of projects) { for (const session of project.sessions) { for (const [tool, data] of Object.entries(session.toolBreakdown)) { - if (filterPrefix) { - if (!tool.startsWith(filterPrefix)) continue - } else { - if (tool.startsWith('lang:')) continue - } + if (filterPrefix) { if (!tool.startsWith(filterPrefix)) continue } else { if (tool.startsWith('lang:')) continue } toolTotals[tool] = (toolTotals[tool] ?? 0) + data.calls } } @@ -345,7 +343,6 @@ function ToolBreakdown({ projects, pw, bw, title, filterPrefix }: { projects: Pr const sorted = Object.entries(toolTotals).sort(([, a], [, b]) => b - a) const maxCalls = sorted[0]?.[1] ?? 0 const nw = Math.max(6, pw - bw - 15) - return ( {''.padEnd(bw + 1 + nw)}{'calls'.padStart(7)} @@ -366,29 +363,16 @@ function ToolBreakdown({ projects, pw, bw, title, filterPrefix }: { projects: Pr function McpBreakdown({ projects, pw, bw }: { projects: ProjectSummary[]; pw: number; bw: number }) { const mcpTotals: Record = {} - for (const project of projects) { - for (const session of project.sessions) { - for (const [server, data] of Object.entries(session.mcpBreakdown)) { - mcpTotals[server] = (mcpTotals[server] ?? 0) + data.calls - } - } - } + for (const project of projects) { for (const session of project.sessions) { for (const [server, data] of Object.entries(session.mcpBreakdown)) { mcpTotals[server] = (mcpTotals[server] ?? 0) + data.calls } } } const sorted = Object.entries(mcpTotals).sort(([, a], [, b]) => b - a) - if (sorted.length === 0) { - return No MCP usage - } + if (sorted.length === 0) return No MCP usage const maxCalls = sorted[0]?.[1] ?? 0 const nw = Math.max(6, pw - bw - 15) - return ( {''.padEnd(bw + 1 + nw)}{'calls'.padStart(6)} {sorted.slice(0, 8).map(([server, calls]) => ( - - - {fit(server, nw)} - {String(calls).padStart(6)} - + {fit(server, nw)}{String(calls).padStart(6)} ))} ) @@ -396,29 +380,16 @@ function McpBreakdown({ projects, pw, bw }: { projects: ProjectSummary[]; pw: nu function BashBreakdown({ projects, pw, bw }: { projects: ProjectSummary[]; pw: number; bw: number }) { const bashTotals: Record = {} - for (const project of projects) { - for (const session of project.sessions) { - for (const [cmd, data] of Object.entries(session.bashBreakdown)) { - bashTotals[cmd] = (bashTotals[cmd] ?? 0) + data.calls - } - } - } + for (const project of projects) { for (const session of project.sessions) { for (const [cmd, data] of Object.entries(session.bashBreakdown)) { bashTotals[cmd] = (bashTotals[cmd] ?? 0) + data.calls } } } const sorted = Object.entries(bashTotals).sort(([, a], [, b]) => b - a) - if (sorted.length === 0) { - return No shell commands - } + if (sorted.length === 0) return No shell commands const maxCalls = sorted[0]?.[1] ?? 0 const nw = Math.max(6, pw - bw - 15) - return ( {''.padEnd(bw + 1 + nw)}{'calls'.padStart(7)} {sorted.slice(0, 10).map(([cmd, calls]) => ( - - - {fit(cmd, nw)} - {String(calls).padStart(7)} - + {fit(cmd, nw)}{String(calls).padStart(7)} ))} ) @@ -432,16 +403,9 @@ const PROVIDER_DISPLAY_NAMES: Record = { opencode: 'OpenCode', pi: 'Pi', } +function getProviderDisplayName(name: string): string { return PROVIDER_DISPLAY_NAMES[name] ?? name } -function getProviderDisplayName(name: string): string { - return PROVIDER_DISPLAY_NAMES[name] ?? name -} - -function PeriodTabs({ active, providerName, showProvider }: { - active: Period - providerName?: string - showProvider?: boolean -}) { +function PeriodTabs({ active, providerName, showProvider }: { active: Period; providerName?: string; showProvider?: boolean }) { return ( @@ -452,39 +416,95 @@ function PeriodTabs({ active, providerName, showProvider }: { ))} {showProvider && providerName && ( - - | - [p] - {getProviderDisplayName(providerName)} - + | [p] {getProviderDisplayName(providerName)} )} ) } -function StatusBar({ width, showProvider }: { width: number; showProvider?: boolean }) { +function ContextBudgetPanel({ budget, pw }: { budget: ContextBudget; pw: number }) { + const pct = ((budget.total / budget.modelContext) * 100).toFixed(1) + const available = budget.modelContext - budget.total + const items: Array<{ label: string; tokens: number; color: string }> = [ + { label: 'System base', tokens: budget.systemBase, color: '#5B9EF5' }, + { label: `MCP tools (${budget.mcpTools.count})`, tokens: budget.mcpTools.tokens, color: '#F55BE0' }, + { label: `Skills (${budget.skills.count})`, tokens: budget.skills.tokens, color: '#F5C85B' }, + { label: `Memory (${budget.memory.count})`, tokens: budget.memory.tokens, color: '#5BF5A0' }, + ] + const maxTokens = Math.max(...items.map(i => i.tokens)) + const bw = 6 + return ( + + {''.padEnd(bw + 20)}{'tokens'.padStart(8)} + {items.filter(i => i.tokens > 0).map(item => ( + + + {fit(item.label, 19)} + {formatTokens(item.tokens).padStart(8)} + + ))} + + Overhead: {formatTokens(budget.total)} ({pct}%) Free: {formatTokens(available)} + + + ) +} + +function FindingAction({ action }: { action: WasteAction }) { + const lines = action.type === 'file-content' ? action.content.split('\n') : action.type === 'command' ? action.text.split('\n') : [action.text] + return (<>{action.label}{lines.map((line, i) => {line})}) +} + +function FindingPanel({ index, finding, costRate, width }: { index: number; finding: WasteFinding; costRate: number; width: number }) { + const costSaved = finding.tokensSaved * costRate + const color = IMPACT_PANEL_COLORS[finding.impact] ?? DIM + const label = finding.impact.charAt(0).toUpperCase() + finding.impact.slice(1) + return ( + + {index}. {finding.title} {label} + {finding.explanation} + Savings: ~{formatTokens(finding.tokensSaved)} tokens (~{formatCost(costSaved)}) + + + + ) +} + +function OptimizeView({ findings, costRate, projects, label, width }: { findings: WasteFinding[]; costRate: number; projects: ProjectSummary[]; label: string; width: number }) { + const periodCost = projects.reduce((s, p) => s + p.totalCostUSD, 0) + const totalTokens = findings.reduce((s, f) => s + f.tokensSaved, 0) + const totalCost = totalTokens * costRate + const pctRaw = periodCost > 0 ? (totalCost / periodCost) * 100 : 0 + const pct = pctRaw >= 1 ? pctRaw.toFixed(0) : pctRaw.toFixed(1) + return ( + + + CodeBurn Optimize {label} + Savings: ~{formatTokens(totalTokens)} tokens (~{formatCost(totalCost)}, ~{pct}% of spend) + + {findings.map((f, i) => )} + Token estimates are approximate. + + ) +} + +function StatusBar({ width, showProvider, view, findingCount, optimizeAvailable }: { width: number; showProvider?: boolean; view?: View; findingCount?: number; optimizeAvailable?: boolean }) { + const isOptimize = view === 'optimize' return ( - {'<'}{'>'} - switch - q - quit - 1 - today - 2 - week - 3 - 30 days - 4 - month - {showProvider && ( - <> - - p - provider - + {isOptimize + ? <>b back + : <>{'<'}{'>'} switch } + q quit + 1 today + 2 week + 3 30 days + 4 month + {!isOptimize && optimizeAvailable && findingCount != null && findingCount > 0 && ( + <> o optimize ({findingCount}) )} + {showProvider && (<> p provider)} ) @@ -495,88 +515,87 @@ function Row({ wide, width, children }: { wide: boolean; width: number; children return <>{children} } -function DashboardContent({ projects, period, columns, activeProvider }: { projects: ProjectSummary[]; period: Period; columns?: number; activeProvider?: string }) { +function DashboardContent({ projects, period, columns, activeProvider, budgets }: { projects: ProjectSummary[]; period: Period; columns?: number; activeProvider?: string; budgets?: Map }) { const { dashWidth, wide, halfWidth, barWidth } = getLayout(columns) const isCursor = activeProvider === 'cursor' - - if (projects.length === 0) { - return ( - - No usage data found for {PERIOD_LABELS[period]}. - - ) - } - + if (projects.length === 0) return No usage data found for {PERIOD_LABELS[period]}. const pw = wide ? halfWidth : dashWidth const days = period === 'month' || period === '30days' ? 31 : 14 - return ( - - - - - - - - - - - + + {isCursor ? ( ) : ( - <> - - - - - - + <> )} ) } -function InteractiveDashboard({ initialProjects, initialPeriod, initialProvider, refreshSeconds }: { - initialProjects: ProjectSummary[] - initialPeriod: Period - initialProvider: string - refreshSeconds?: number -}) { +function InteractiveDashboard({ initialProjects, initialPeriod, initialProvider, refreshSeconds }: { initialProjects: ProjectSummary[]; initialPeriod: Period; initialProvider: string; refreshSeconds?: number }) { const { exit } = useApp() const [period, setPeriod] = useState(initialPeriod) const [projects, setProjects] = useState(initialProjects) const [loading, setLoading] = useState(false) const [activeProvider, setActiveProvider] = useState(initialProvider) const [detectedProviders, setDetectedProviders] = useState([]) + const [view, setView] = useState('dashboard') + const [optimizeResult, setOptimizeResult] = useState(null) + const [projectBudgets, setProjectBudgets] = useState>(new Map()) const { columns } = useWindowSize() const { dashWidth } = getLayout(columns) const multipleProviders = detectedProviders.length > 1 + const optimizeAvailable = activeProvider === 'all' || activeProvider === 'claude' + const debounceRef = useRef | null>(null) + const findingCount = optimizeResult?.findings.length ?? 0 useEffect(() => { let cancelled = false async function detect() { const found: string[] = [] - const allProviders = await getAllProviders() - for (const p of allProviders) { - const sessions = await p.discoverSessions() - if (sessions.length > 0) found.push(p.name) - } - if (!cancelled) { - setDetectedProviders(found) - } + for (const p of await getAllProviders()) { const s = await p.discoverSessions(); if (s.length > 0) found.push(p.name) } + if (!cancelled) setDetectedProviders(found) } detect() return () => { cancelled = true } }, []) + useEffect(() => { + let cancelled = false + async function loadBudgets() { + const claudeDir = join(homedir(), '.claude', 'projects') + const budgets = new Map() + for (const project of projects.slice(0, 8)) { + if (cancelled) return + const cwd = await discoverProjectCwd(join(claudeDir, project.project)) + if (!cwd) continue + budgets.set(project.project, await estimateContextBudget(cwd)) + } + if (!cancelled) setProjectBudgets(budgets) + } + loadBudgets() + return () => { cancelled = true } + }, [projects]) + + useEffect(() => { + if (!optimizeAvailable) { setOptimizeResult(null); return } + let cancelled = false + async function scan() { + if (projects.length === 0) { setOptimizeResult(null); return } + const result = await scanAndDetect(projects, getDateRange(period)) + if (!cancelled) setOptimizeResult(result) + } + scan() + return () => { cancelled = true } + }, [projects, period, optimizeAvailable]) + const reloadData = useCallback(async (p: Period, prov: string) => { setLoading(true) - const range = getDateRange(p) - const data = await parseAllSessions(range, prov) - setProjects(data) + setOptimizeResult(null) + setProjects(await parseAllSessions(getDateRange(p), prov)) setLoading(false) }, []) @@ -586,46 +605,34 @@ function InteractiveDashboard({ initialProjects, initialPeriod, initialProvider, return () => clearInterval(id) }, [refreshSeconds, period, activeProvider, reloadData]) - const debounceRef = React.useRef | null>(null) - - const switchPeriod = useCallback((newPeriod: Period) => { - if (newPeriod === period) return - setPeriod(newPeriod) + const switchPeriod = useCallback((np: Period) => { + if (np === period) return + setPeriod(np); setView('dashboard') if (debounceRef.current) clearTimeout(debounceRef.current) - debounceRef.current = setTimeout(() => { - reloadData(newPeriod, activeProvider) - }, 600) + debounceRef.current = setTimeout(() => { reloadData(np, activeProvider) }, 600) }, [period, activeProvider, reloadData]) - const switchPeriodImmediate = useCallback(async (newPeriod: Period) => { - if (newPeriod === period) return - setPeriod(newPeriod) + const switchPeriodImmediate = useCallback(async (np: Period) => { + if (np === period) return + setPeriod(np); setView('dashboard') if (debounceRef.current) clearTimeout(debounceRef.current) - await reloadData(newPeriod, activeProvider) + await reloadData(np, activeProvider) }, [period, activeProvider, reloadData]) useInput((input, key) => { - if (input === 'q') { - exit() - return - } - + if (input === 'q') { exit(); return } + if (input === 'o' && findingCount > 0 && view === 'dashboard' && optimizeAvailable) { setView('optimize'); return } + if ((input === 'b' || key.escape) && view === 'optimize') { setView('dashboard'); return } if (input === 'p' && multipleProviders) { - const options = ['all', ...detectedProviders] - const idx = options.indexOf(activeProvider) - const next = options[(idx + 1) % options.length] - setActiveProvider(next) + const opts = ['all', ...detectedProviders]; const next = opts[(opts.indexOf(activeProvider) + 1) % opts.length] + setActiveProvider(next); setView('dashboard') if (debounceRef.current) clearTimeout(debounceRef.current) - reloadData(period, next) - return + reloadData(period, next); return } - const idx = PERIODS.indexOf(period) - if (key.leftArrow) { - switchPeriod(PERIODS[(idx - 1 + PERIODS.length) % PERIODS.length]) - } else if (key.rightArrow || key.tab) { - switchPeriod(PERIODS[(idx + 1) % PERIODS.length]) - } else if (input === '1') switchPeriodImmediate('today') + if (key.leftArrow && view === 'dashboard') switchPeriod(PERIODS[(idx - 1 + PERIODS.length) % PERIODS.length]) + else if ((key.rightArrow || key.tab) && view === 'dashboard') switchPeriod(PERIODS[(idx + 1) % PERIODS.length]) + else if (input === '1') switchPeriodImmediate('today') else if (input === '2') switchPeriodImmediate('week') else if (input === '3') switchPeriodImmediate('30days') else if (input === '4') switchPeriodImmediate('month') @@ -635,10 +642,8 @@ function InteractiveDashboard({ initialProjects, initialPeriod, initialProvider, return ( - - Loading {PERIOD_LABELS[period]}... - - + Loading {PERIOD_LABELS[period]}... + ) } @@ -646,8 +651,10 @@ function InteractiveDashboard({ initialProjects, initialPeriod, initialProvider, return ( - - + {view === 'optimize' && optimizeResult + ? + : } + ) } @@ -665,21 +672,13 @@ function StaticDashboard({ projects, period, activeProvider }: { projects: Proje export async function renderDashboard(period: Period = 'week', provider: string = 'all', refreshSeconds?: number): Promise { await loadPricing() - const range = getDateRange(period) - const projects = await parseAllSessions(range, provider) - + const projects = await parseAllSessions(getDateRange(period), provider) const isTTY = process.stdin.isTTY && process.stdout.isTTY - if (isTTY) { - const { waitUntilExit } = render( - - ) + const { waitUntilExit } = render() await waitUntilExit() } else { - const { unmount } = render( - , - { patchConsole: false } - ) + const { unmount } = render(, { patchConsole: false }) unmount() } } diff --git a/src/optimize.ts b/src/optimize.ts new file mode 100644 index 0000000..f29a904 --- /dev/null +++ b/src/optimize.ts @@ -0,0 +1,696 @@ +import chalk from 'chalk' +import { readdir, readFile, stat } from 'fs/promises' +import { existsSync, readFileSync } from 'fs' +import { basename, join } from 'path' +import { homedir } from 'os' + +import { discoverAllSessions } from './providers/index.js' +import type { DateRange, ProjectSummary } from './types.js' +import { formatCost } from './currency.js' +import { formatTokens } from './format.js' + +const ORANGE = '#FF8C42' +const DIM = '#666666' +const GOLD = '#FFD700' +const CYAN = '#5BF5E0' +const GREEN = '#5BF5A0' + +const JUNK_DIRS = [ + 'node_modules', '.git', 'dist', 'build', '__pycache__', '.next', + '.nuxt', '.output', 'coverage', '.cache', '.tsbuildinfo', + '.venv', 'venv', '.svn', '.hg', +] +const JUNK_PATTERN = new RegExp(`/(${JUNK_DIRS.join('|')})/`) + +const AVG_TOKENS_PER_READ = 1500 +const TOKENS_PER_MCP_TOOL = 400 +const CLAUDEMD_HEALTHY_LINES = 200 + +export type WasteAction = + | { type: 'paste'; label: string; text: string } + | { type: 'command'; label: string; text: string } + | { type: 'file-content'; label: string; path: string; content: string } + +export type WasteFinding = { + title: string + explanation: string + impact: 'high' | 'medium' | 'low' + tokensSaved: number + fix: WasteAction +} + +export type OptimizeResult = { + findings: WasteFinding[] + costRate: number +} + +type ToolCall = { + name: string + input: Record + sessionId: string + project: string +} + +type ApiCallMeta = { + cacheCreationTokens: number + version: string +} + +type ScanData = { + toolCalls: ToolCall[] + projectCwds: Set + apiCalls: ApiCallMeta[] + versions: Set +} + +const IMPACT_ORDER: Record = { high: 3, medium: 2, low: 1 } + +async function collectJsonlFiles(dirPath: string): Promise { + const files = await readdir(dirPath).catch(() => []) + const result = files.filter(f => f.endsWith('.jsonl')).map(f => join(dirPath, f)) + for (const entry of files) { + if (entry.endsWith('.jsonl')) continue + const subPath = join(dirPath, entry, 'subagents') + const subFiles = await readdir(subPath).catch(() => []) + for (const sf of subFiles) { + if (sf.endsWith('.jsonl')) result.push(join(subPath, sf)) + } + } + return result +} + +type ScanFileResult = { + calls: ToolCall[] + cwds: string[] + apiCalls: ApiCallMeta[] + versions: string[] +} + +async function scanJsonlFile( + filePath: string, + project: string, + dateRange: DateRange | undefined, +): Promise { + let content: string + try { + content = await readFile(filePath, 'utf-8') + } catch { return { calls: [], cwds: [], apiCalls: [], versions: [] } } + + const calls: ToolCall[] = [] + const cwds: string[] = [] + const apiCalls: ApiCallMeta[] = [] + const versions: string[] = [] + const sessionId = basename(filePath, '.jsonl') + + for (const line of content.split('\n')) { + if (!line.trim()) continue + let entry: Record + try { entry = JSON.parse(line) } catch { continue } + + if (entry.cwd && typeof entry.cwd === 'string') cwds.push(entry.cwd) + if (entry.version && typeof entry.version === 'string') versions.push(entry.version) + + if (entry.type !== 'assistant') continue + + if (dateRange && typeof entry.timestamp === 'string') { + const ts = new Date(entry.timestamp) + if (ts < dateRange.start || ts > dateRange.end) continue + } + + const msg = entry.message as Record | undefined + const usage = msg?.usage as Record | undefined + if (usage) { + const cacheCreate = (usage.cache_creation_input_tokens as number) ?? 0 + const ver = versions[versions.length - 1] ?? '' + if (cacheCreate > 0) apiCalls.push({ cacheCreationTokens: cacheCreate, version: ver }) + } + + const blocks = msg?.content + if (!Array.isArray(blocks)) continue + + for (const block of blocks) { + if (block.type !== 'tool_use') continue + calls.push({ + name: block.name as string, + input: (block.input as Record) ?? {}, + sessionId, + project, + }) + } + } + + return { calls, cwds, apiCalls, versions } +} + +async function scanSessions(dateRange?: DateRange): Promise { + const sources = await discoverAllSessions('claude') + const allCalls: ToolCall[] = [] + const allCwds = new Set() + const allApiCalls: ApiCallMeta[] = [] + const allVersions = new Set() + + for (const source of sources) { + const files = await collectJsonlFiles(source.path) + for (const file of files) { + const { calls, cwds, apiCalls, versions } = await scanJsonlFile(file, source.project, dateRange) + allCalls.push(...calls) + for (const cwd of cwds) allCwds.add(cwd) + allApiCalls.push(...apiCalls) + for (const v of versions) if (v) allVersions.add(v) + } + } + + return { toolCalls: allCalls, projectCwds: allCwds, apiCalls: allApiCalls, versions: allVersions } +} + +function detectJunkReads(calls: ToolCall[]): WasteFinding | null { + const readCalls = calls.filter(c => c.name === 'Read' || c.name === 'FileReadTool') + + const dirCounts = new Map() + let totalJunkReads = 0 + + for (const call of readCalls) { + const filePath = call.input.file_path as string | undefined + if (!filePath) continue + if (!JUNK_PATTERN.test(filePath)) continue + + totalJunkReads++ + for (const dir of JUNK_DIRS) { + if (filePath.includes(`/${dir}/`)) { + dirCounts.set(dir, (dirCounts.get(dir) ?? 0) + 1) + break + } + } + } + + if (totalJunkReads < 3) return null + + const sorted = [...dirCounts.entries()].sort((a, b) => b[1] - a[1]) + const dirList = sorted.slice(0, 3).map(([d, n]) => `${d}/ (${n}x)`).join(', ') + const tokensSaved = totalJunkReads * AVG_TOKENS_PER_READ + + const detected = sorted.map(([d]) => d) + const extras = ['node_modules', '.git', 'dist', '__pycache__'] + .filter(d => !dirCounts.has(d)) + .slice(0, Math.max(0, 6 - detected.length)) + const ignoreContent = [...detected, ...extras].join('\n') + + return { + title: 'STOP READING JUNK DIRECTORIES', + explanation: `Claude read into ${dirList} -- ${totalJunkReads} times total. Each read loads ~${AVG_TOKENS_PER_READ.toLocaleString()} tokens of irrelevant content into context. A .claudeignore blocks this.`, + impact: totalJunkReads > 20 ? 'high' : totalJunkReads > 5 ? 'medium' : 'low', + tokensSaved, + fix: { + type: 'file-content', + label: 'Create .claudeignore in your project root:', + path: '.claudeignore', + content: ignoreContent, + }, + } +} + +function detectDuplicateReads(calls: ToolCall[]): WasteFinding | null { + const readCalls = calls.filter(c => c.name === 'Read' || c.name === 'FileReadTool') + + const sessionFiles = new Map>() + + for (const call of readCalls) { + const filePath = call.input.file_path as string | undefined + if (!filePath || JUNK_PATTERN.test(filePath)) continue + + const key = `${call.project}:${call.sessionId}` + if (!sessionFiles.has(key)) sessionFiles.set(key, new Map()) + const fm = sessionFiles.get(key)! + fm.set(filePath, (fm.get(filePath) ?? 0) + 1) + } + + let totalDuplicates = 0 + const fileDupes = new Map() + + for (const fm of sessionFiles.values()) { + for (const [file, count] of fm) { + if (count <= 1) continue + const extra = count - 1 + totalDuplicates += extra + const name = basename(file) + fileDupes.set(name, (fileDupes.get(name) ?? 0) + extra) + } + } + + if (totalDuplicates < 5) return null + + const worst = [...fileDupes.entries()] + .sort((a, b) => b[1] - a[1]) + .slice(0, 3) + .map(([name, n]) => `${name} (+${n})`) + .join(', ') + + const tokensSaved = totalDuplicates * AVG_TOKENS_PER_READ + + return { + title: 'CUT DUPLICATE FILE READS', + explanation: `Claude re-read the same file ${totalDuplicates} times across sessions. Top offenders: ${worst}. Each re-read loads ~${AVG_TOKENS_PER_READ.toLocaleString()} tokens that are already in context.`, + impact: totalDuplicates > 30 ? 'high' : totalDuplicates > 10 ? 'medium' : 'low', + tokensSaved, + fix: { + type: 'paste', + label: 'Give Claude exact locations so it reads once:', + text: 'Look at src/auth.ts lines 45-80, the validateToken function.', + }, + } +} + +function readJsonFile(path: string): Record | null { + try { + return JSON.parse(readFileSync(path, 'utf-8')) + } catch { return null } +} + +function detectUnusedMcp( + calls: ToolCall[], + projects: ProjectSummary[], + projectCwds: Set, +): WasteFinding | null { + const configuredServers = new Map() + + const configPaths = [ + join(homedir(), '.claude', 'settings.json'), + join(homedir(), '.claude', 'settings.local.json'), + ] + for (const cwd of projectCwds) { + configPaths.push(join(cwd, '.mcp.json')) + configPaths.push(join(cwd, '.claude', 'settings.json')) + configPaths.push(join(cwd, '.claude', 'settings.local.json')) + } + + for (const p of configPaths) { + if (!existsSync(p)) continue + const config = readJsonFile(p) + if (!config) continue + const servers = (config.mcpServers ?? {}) as Record + for (const name of Object.keys(servers)) { + const normalized = name.replace(/:/g, '_') + configuredServers.set(normalized, name) + } + } + + if (configuredServers.size === 0) return null + + const calledServers = new Set() + for (const call of calls) { + if (!call.name.startsWith('mcp__')) continue + const seg = call.name.split('__')[1] + if (seg) calledServers.add(seg) + } + for (const p of projects) { + for (const s of p.sessions) { + for (const server of Object.keys(s.mcpBreakdown)) { + calledServers.add(server) + } + } + } + + const unused: string[] = [] + for (const [normalized, original] of configuredServers) { + if (!calledServers.has(normalized)) unused.push(original) + } + + if (unused.length === 0) return null + + const totalSessions = projects.reduce((s, p) => s + p.sessions.length, 0) + const estimatedTools = 5 + const schemaTokens = unused.length * estimatedTools * TOKENS_PER_MCP_TOOL + const tokensSaved = schemaTokens * totalSessions + + return { + title: 'REMOVE UNUSED MCP SERVERS', + explanation: `${unused.length} MCP server${unused.length > 1 ? 's' : ''} configured but never called: ${unused.join(', ')}. Each loads ~${(estimatedTools * TOKENS_PER_MCP_TOOL).toLocaleString()} tokens of schema into every session (${totalSessions.toLocaleString()} sessions in this period).`, + impact: unused.length >= 3 ? 'high' : 'medium', + tokensSaved, + fix: { + type: 'command', + label: `Remove unused server${unused.length > 1 ? 's' : ''}:`, + text: unused.map(s => `claude mcp remove ${s}`).join('\n'), + }, + } +} + +function detectMissingClaudeignore(projectCwds: Set): WasteFinding | null { + const missing: string[] = [] + const hasJunkDir: string[] = [] + + for (const cwd of projectCwds) { + if (existsSync(join(cwd, '.claudeignore'))) continue + if (!existsSync(cwd)) continue + + for (const dir of JUNK_DIRS) { + if (existsSync(join(cwd, dir))) { + missing.push(cwd) + hasJunkDir.push(dir) + break + } + } + } + + if (missing.length === 0) return null + + const shortPaths = missing.map(p => { + const home = homedir() + return p.startsWith(home) ? '~' + p.slice(home.length) : p + }) + const display = shortPaths.length <= 3 + ? shortPaths.join(', ') + : `${shortPaths.slice(0, 2).join(', ')} + ${shortPaths.length - 2} more` + + const tokensSaved = missing.length * 10 * AVG_TOKENS_PER_READ + + return { + title: 'ADD .claudeignore FILES', + explanation: `${missing.length} project${missing.length > 1 ? 's' : ''} ha${missing.length > 1 ? 've' : 's'} junk directories (node_modules, .git, etc.) but no .claudeignore: ${display}. Without it, Claude may read/search these directories.`, + impact: missing.length >= 3 ? 'high' : 'medium', + tokensSaved, + fix: { + type: 'file-content', + label: 'Create .claudeignore in each project root:', + path: '.claudeignore', + content: JUNK_DIRS.slice(0, 8).join('\n'), + }, + } +} + +function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | null { + const bloated: { path: string; lines: number }[] = [] + + for (const cwd of projectCwds) { + for (const name of ['CLAUDE.md', '.claude/CLAUDE.md']) { + const fullPath = join(cwd, name) + if (!existsSync(fullPath)) continue + try { + const content = readFileSync(fullPath, 'utf-8') + const lineCount = content.split('\n').length + if (lineCount > CLAUDEMD_HEALTHY_LINES) { + const short = cwd.startsWith(homedir()) ? '~' + cwd.slice(homedir().length) : cwd + bloated.push({ path: `${short}/${name}`, lines: lineCount }) + } + } catch { continue } + } + } + + if (bloated.length === 0) return null + + const sorted = bloated.sort((a, b) => b.lines - a.lines) + const worst = sorted[0] + const totalExtraLines = sorted.reduce((s, b) => s + (b.lines - CLAUDEMD_HEALTHY_LINES), 0) + const tokensPerLine = 25 + const tokensSaved = totalExtraLines * tokensPerLine + + const list = sorted.slice(0, 3).map(b => `${b.path} (${b.lines} lines)`).join(', ') + + return { + title: 'TRIM BLOATED CLAUDE.md', + explanation: `${list}. Every line loads into every API call as context. Beyond ${CLAUDEMD_HEALTHY_LINES} lines, the extra ~${totalExtraLines} lines cost ~${formatTokens(tokensSaved)} tokens per call.`, + impact: worst.lines > 400 ? 'high' : 'medium', + tokensSaved, + fix: { + type: 'paste', + label: 'Ask Claude to trim it:', + text: 'Review CLAUDE.md and cut it to under 200 lines. Remove anything Claude can figure out from the code itself: file paths, architecture, imports. Keep only: rules, gotchas, and non-obvious conventions.', + }, + } +} + +const READ_TOOL_NAMES = new Set(['Read', 'Grep', 'Glob', 'FileReadTool', 'GrepTool', 'GlobTool']) +const EDIT_TOOL_NAMES = new Set(['Edit', 'Write', 'FileEditTool', 'FileWriteTool', 'NotebookEdit']) + +function detectLowReadEditRatio(calls: ToolCall[]): WasteFinding | null { + let reads = 0 + let edits = 0 + + for (const call of calls) { + if (READ_TOOL_NAMES.has(call.name)) reads++ + else if (EDIT_TOOL_NAMES.has(call.name)) edits++ + } + + if (edits < 10) return null + + const ratio = reads / edits + if (ratio >= 4) return null + + const ratioStr = ratio.toFixed(1) + const impact: 'high' | 'medium' | 'low' = ratio < 2 ? 'high' : ratio < 3 ? 'medium' : 'low' + + const extraReadsNeeded = Math.round(edits * 4) - reads + const tokensSaved = extraReadsNeeded * AVG_TOKENS_PER_READ + + return { + title: 'CLAUDE IS EDITING WITHOUT READING', + explanation: `Read:Edit ratio is ${ratioStr}:1 (${reads} reads, ${edits} edits). Healthy is 4:1+. A low ratio means Claude edits files without fully understanding the codebase first -- leading to more retries and wasted tokens.`, + impact, + tokensSaved: Math.max(tokensSaved, 0), + fix: { + type: 'paste', + label: 'Add to your CLAUDE.md:', + text: 'Before editing any file, read it first. Before modifying a function, grep for all callers. Research before you edit.', + }, + } +} + +function detectCacheBloat(apiCalls: ApiCallMeta[]): WasteFinding | null { + if (apiCalls.length < 10) return null + + const sorted = apiCalls.map(c => c.cacheCreationTokens).sort((a, b) => a - b) + const median = sorted[Math.floor(sorted.length / 2)] + + if (median < 55000) return null + + const versionCounts = new Map() + for (const call of apiCalls) { + if (!call.version) continue + const v = call.version + const entry = versionCounts.get(v) ?? { total: 0, count: 0 } + entry.total += call.cacheCreationTokens + entry.count++ + versionCounts.set(v, entry) + } + + const versionAvgs = [...versionCounts.entries()] + .filter(([, d]) => d.count >= 5) + .map(([v, d]) => ({ version: v, avg: Math.round(d.total / d.count), count: d.count })) + .sort((a, b) => b.avg - a.avg) + + const excess = median - 50000 + const tokensSaved = excess * apiCalls.length + + let versionNote = '' + if (versionAvgs.length >= 2) { + const highest = versionAvgs[0] + const lowest = versionAvgs[versionAvgs.length - 1] + if (highest.avg - lowest.avg > 10000) { + versionNote = ` Version ${highest.version} averages ${formatTokens(highest.avg)} vs ${lowest.version} at ${formatTokens(lowest.avg)}.` + } + } + + return { + title: 'HIGH CACHE CREATION OVERHEAD', + explanation: `Median cache_creation per call is ${formatTokens(median)} tokens (baseline ~50K). The extra ~${formatTokens(excess)} tokens per call may be server-injected content invisible to you.${versionNote} See anthropics/claude-code#46917.`, + impact: excess > 15000 ? 'high' : 'medium', + tokensSaved, + fix: { + type: 'paste', + label: 'Spoof older User-Agent to reduce overhead:', + text: 'export ANTHROPIC_CUSTOM_HEADERS=\'User-Agent: claude-cli/2.1.98 (external, sdk-cli)\'', + }, + } +} + +function detectBashBloat(): WasteFinding | null { + const current = process.env['BASH_MAX_OUTPUT_LENGTH'] + if (current && parseInt(current, 10) <= 15000) return null + + const limit = current ? parseInt(current, 10) : 30000 + const saved = limit - 15000 + const tokensSaved = Math.round(saved * 0.25) + + return { + title: 'CAP BASH OUTPUT LENGTH', + explanation: `Bash output limit is ${(limit / 1000).toFixed(0)}K characters (${current ? 'configured' : 'default'}). Most useful output is under 15K. The extra ${(saved / 1000).toFixed(0)}K chars waste ~${formatTokens(tokensSaved)} tokens per bash call.`, + impact: 'medium', + tokensSaved, + fix: { + type: 'paste', + label: 'Add to your shell profile (~/.zshrc or ~/.bashrc):', + text: 'export BASH_MAX_OUTPUT_LENGTH=15000', + }, + } +} + +function computeInputCostRate(projects: ProjectSummary[]): number { + const sessions = projects.flatMap(p => p.sessions) + const totalCost = sessions.reduce((s, sess) => s + sess.totalCostUSD, 0) + const totalTokens = sessions.reduce((s, sess) => + s + sess.totalInputTokens + sess.totalCacheReadTokens + sess.totalCacheWriteTokens, 0) + if (totalTokens === 0 || totalCost === 0) return 1 / 1_000_000 + return (totalCost * 0.7) / totalTokens +} + +function wrap(text: string, width: number, indent: string): string { + const words = text.split(' ') + const lines: string[] = [] + let current = '' + for (const word of words) { + if (current && current.length + word.length + 1 > width) { + lines.push(indent + current) + current = word + } else { + current = current ? current + ' ' + word : word + } + } + if (current) lines.push(indent + current) + return lines.join('\n') +} + +const IMPACT_COLORS: Record = { high: '#F55B5B', medium: ORANGE, low: DIM } + +function renderFinding(n: number, f: WasteFinding, costRate: number, W: number): string[] { + const lines: string[] = [] + const sep = '\u2500' + const costSaved = f.tokensSaved * costRate + const impactLabel = f.impact.charAt(0).toUpperCase() + f.impact.slice(1) + const savings = `~${formatTokens(f.tokensSaved)} tokens (~${formatCost(costSaved)})` + const titlePad = W - f.title.length - impactLabel.length - 8 + const pad = titlePad > 0 ? ' ' + sep.repeat(titlePad) + ' ' : ' ' + + lines.push(chalk.hex(DIM)(` ${sep}${sep}${sep} `) + + chalk.bold(`${n}. ${f.title}`) + + chalk.hex(DIM)(pad) + + chalk.hex(IMPACT_COLORS[f.impact] ?? DIM)(impactLabel) + + chalk.hex(DIM)(` ${sep}${sep}${sep}`)) + lines.push('') + lines.push(wrap(f.explanation, W - 4, ' ')) + lines.push('') + lines.push(chalk.hex(GOLD)(` Potential savings: ${savings}`)) + lines.push('') + + const a = f.fix + if (a.type === 'file-content') { + lines.push(chalk.hex(DIM)(` ${a.label}`)) + for (const line of a.content.split('\n')) { + lines.push(chalk.hex(CYAN)(` ${line}`)) + } + } else if (a.type === 'command') { + lines.push(chalk.hex(DIM)(` ${a.label}`)) + for (const line of a.text.split('\n')) { + lines.push(chalk.hex(CYAN)(` ${line}`)) + } + } else { + lines.push(chalk.hex(DIM)(` ${a.label}`)) + lines.push(chalk.hex(CYAN)(` ${a.text}`)) + } + + lines.push('') + return lines +} + +function renderOptimize( + findings: WasteFinding[], + costRate: number, + periodLabel: string, + periodCost: number, + sessionCount: number, + callCount: number, +): string { + const lines: string[] = [] + const W = 62 + const sep = '\u2500' + + lines.push('') + lines.push(` ${chalk.bold.hex(ORANGE)('CodeBurn Optimize')}${chalk.dim(' ' + periodLabel)}`) + lines.push(chalk.hex(DIM)(' ' + sep.repeat(W))) + + lines.push(' ' + [ + `${sessionCount} sessions`, + `${callCount.toLocaleString()} calls`, + chalk.hex(GOLD)(formatCost(periodCost)), + ].join(chalk.hex(DIM)(' '))) + lines.push('') + + if (findings.length === 0) { + lines.push(chalk.hex(GREEN)(' No waste detected -- your setup looks clean.')) + lines.push('') + return lines.join('\n') + } + + const totalTokens = findings.reduce((s, f) => s + f.tokensSaved, 0) + const totalCost = totalTokens * costRate + const pctRaw = periodCost > 0 ? (totalCost / periodCost) * 100 : 0 + const pct = pctRaw >= 1 ? pctRaw.toFixed(0) : pctRaw.toFixed(1) + + lines.push(chalk.hex(GREEN)(` Potential savings: ~${formatTokens(totalTokens)} tokens (~${formatCost(totalCost)}, ~${pct}% of spend)`)) + lines.push('') + + const sorted = findings.sort((a, b) => + (IMPACT_ORDER[b.impact] ?? 0) - (IMPACT_ORDER[a.impact] ?? 0) || b.tokensSaved - a.tokensSaved + ) + + for (let i = 0; i < sorted.length; i++) { + lines.push(...renderFinding(i + 1, sorted[i], costRate, W)) + } + + lines.push(chalk.hex(DIM)(' ' + sep.repeat(W))) + lines.push(chalk.dim(' Token estimates are approximate. Actual savings vary by file size and model.')) + lines.push('') + + return lines.join('\n') +} + +export async function scanAndDetect( + projects: ProjectSummary[], + dateRange?: DateRange, +): Promise { + const costRate = computeInputCostRate(projects) + const { toolCalls, projectCwds, apiCalls } = await scanSessions(dateRange) + + const findings: WasteFinding[] = [] + const detectors = [ + () => detectCacheBloat(apiCalls), + () => detectLowReadEditRatio(toolCalls), + () => detectJunkReads(toolCalls), + () => detectDuplicateReads(toolCalls), + () => detectUnusedMcp(toolCalls, projects, projectCwds), + () => detectMissingClaudeignore(projectCwds), + () => detectBloatedClaudeMd(projectCwds), + () => detectBashBloat(), + ] + + for (const detect of detectors) { + const finding = detect() + if (finding) findings.push(finding) + } + + findings.sort((a, b) => + (IMPACT_ORDER[b.impact] ?? 0) - (IMPACT_ORDER[a.impact] ?? 0) || b.tokensSaved - a.tokensSaved + ) + + return { findings, costRate } +} + +export async function runOptimize( + projects: ProjectSummary[], + periodLabel: string, + dateRange?: DateRange, +): Promise { + if (projects.length === 0) { + console.log(chalk.dim('\n No usage data found for this period.\n')) + return + } + + process.stderr.write(chalk.dim(' Scanning sessions for waste patterns...\n')) + + const { findings, costRate } = await scanAndDetect(projects, dateRange) + const sessions = projects.flatMap(p => p.sessions) + const periodCost = projects.reduce((s, p) => s + p.totalCostUSD, 0) + const callCount = projects.reduce((s, p) => s + p.totalApiCalls, 0) + + const output = renderOptimize(findings, costRate, periodLabel, periodCost, sessions.length, callCount) + console.log(output) +} diff --git a/tests/optimize.test.ts b/tests/optimize.test.ts new file mode 100644 index 0000000..c8514ea --- /dev/null +++ b/tests/optimize.test.ts @@ -0,0 +1,238 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' +import { existsSync, readFileSync } from 'fs' +import { homedir } from 'os' +import { join } from 'path' + +vi.mock('fs', async () => { + const actual = await vi.importActual('fs') + return { ...actual, existsSync: vi.fn(), readFileSync: vi.fn() } +}) + +const mockExistsSync = vi.mocked(existsSync) +const mockReadFileSync = vi.mocked(readFileSync) + +type ToolCall = { + name: string + input: Record + sessionId: string + project: string +} + +// Re-implement detector logic for isolated testing +// This avoids importing the module which has side-effect imports + +function detectJunkReadsLogic(calls: ToolCall[]) { + const JUNK_PATTERN = /\/(node_modules|\.git|dist|build|__pycache__|\.next|\.nuxt|\.output|coverage|\.cache|\.tsbuildinfo|\.venv|venv|\.svn|\.hg)\// + const readCalls = calls.filter(c => c.name === 'Read' || c.name === 'FileReadTool') + const dirCounts = new Map() + let total = 0 + for (const call of readCalls) { + const fp = call.input.file_path as string | undefined + if (!fp || !JUNK_PATTERN.test(fp)) continue + total++ + const dirs = ['node_modules', '.git', 'dist', 'build', '__pycache__', '.next', '.venv', 'venv'] + for (const d of dirs) { + if (fp.includes(`/${d}/`)) { dirCounts.set(d, (dirCounts.get(d) ?? 0) + 1); break } + } + } + return { total, dirCounts } +} + +function detectDuplicateReadsLogic(calls: ToolCall[]) { + const JUNK_PATTERN = /\/(node_modules|\.git|dist|build|__pycache__|\.next)\// + const readCalls = calls.filter(c => c.name === 'Read' || c.name === 'FileReadTool') + const sessionFiles = new Map>() + for (const call of readCalls) { + const fp = call.input.file_path as string | undefined + if (!fp || JUNK_PATTERN.test(fp)) continue + const key = `${call.project}:${call.sessionId}` + if (!sessionFiles.has(key)) sessionFiles.set(key, new Map()) + const fm = sessionFiles.get(key)! + fm.set(fp, (fm.get(fp) ?? 0) + 1) + } + let totalDuplicates = 0 + for (const fm of sessionFiles.values()) { + for (const [, count] of fm) { + if (count > 1) totalDuplicates += count - 1 + } + } + return totalDuplicates +} + +describe('optimize: junk reads detection', () => { + it('detects node_modules reads', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/node_modules/foo/index.js' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/node_modules/bar/package.json' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/node_modules/baz/lib.js' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, + ] + const result = detectJunkReadsLogic(calls) + expect(result.total).toBe(3) + expect(result.dirCounts.get('node_modules')).toBe(3) + }) + + it('detects .git reads', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/.git/config' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/.git/HEAD' }, sessionId: 's1', project: 'p1' }, + ] + const result = detectJunkReadsLogic(calls) + expect(result.total).toBe(2) + expect(result.dirCounts.get('.git')).toBe(2) + }) + + it('detects mixed junk directories', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/node_modules/a.js' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/dist/bundle.js' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/.venv/lib/python/site.py' }, sessionId: 's1', project: 'p1' }, + ] + const result = detectJunkReadsLogic(calls) + expect(result.total).toBe(3) + expect(result.dirCounts.get('node_modules')).toBe(1) + expect(result.dirCounts.get('dist')).toBe(1) + expect(result.dirCounts.get('.venv')).toBe(1) + }) + + it('ignores non-junk paths', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/src/index.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/README.md' }, sessionId: 's1', project: 'p1' }, + ] + const result = detectJunkReadsLogic(calls) + expect(result.total).toBe(0) + }) + + it('ignores non-Read tools', () => { + const calls: ToolCall[] = [ + { name: 'Edit', input: { file_path: '/project/node_modules/foo.js' }, sessionId: 's1', project: 'p1' }, + { name: 'Bash', input: { command: 'ls node_modules' }, sessionId: 's1', project: 'p1' }, + ] + const result = detectJunkReadsLogic(calls) + expect(result.total).toBe(0) + }) + + it('handles missing file_path', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: {}, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: null as unknown as string }, sessionId: 's1', project: 'p1' }, + ] + const result = detectJunkReadsLogic(calls) + expect(result.total).toBe(0) + }) +}) + +describe('optimize: duplicate reads detection', () => { + it('detects files read multiple times in same session', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, + ] + expect(detectDuplicateReadsLogic(calls)).toBe(2) + }) + + it('does not count reads across different sessions', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's2', project: 'p1' }, + ] + expect(detectDuplicateReadsLogic(calls)).toBe(0) + }) + + it('excludes junk directory reads from duplicate count', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/node_modules/foo.js' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/node_modules/foo.js' }, sessionId: 's1', project: 'p1' }, + ] + expect(detectDuplicateReadsLogic(calls)).toBe(0) + }) + + it('counts duplicates per file independently', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/a.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/a.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/b.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/b.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/b.ts' }, sessionId: 's1', project: 'p1' }, + ] + expect(detectDuplicateReadsLogic(calls)).toBe(3) + }) + + it('returns 0 for single reads', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: { file_path: '/project/a.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/b.ts' }, sessionId: 's1', project: 'p1' }, + { name: 'Read', input: { file_path: '/project/c.ts' }, sessionId: 's1', project: 'p1' }, + ] + expect(detectDuplicateReadsLogic(calls)).toBe(0) + }) + + it('handles empty calls', () => { + expect(detectDuplicateReadsLogic([])).toBe(0) + }) +}) + +function detectReadEditRatioLogic(calls: ToolCall[]) { + const READ_NAMES = new Set(['Read', 'Grep', 'Glob', 'FileReadTool', 'GrepTool', 'GlobTool']) + const EDIT_NAMES = new Set(['Edit', 'Write', 'FileEditTool', 'FileWriteTool', 'NotebookEdit']) + let reads = 0, edits = 0 + for (const c of calls) { + if (READ_NAMES.has(c.name)) reads++ + else if (EDIT_NAMES.has(c.name)) edits++ + } + return { reads, edits, ratio: edits > 0 ? reads / edits : Infinity } +} + +describe('optimize: read:edit ratio detection', () => { + it('detects low ratio (edit-heavy)', () => { + const calls: ToolCall[] = [ + ...Array(5).fill(null).map(() => ({ name: 'Read', input: {}, sessionId: 's1', project: 'p1' })), + ...Array(10).fill(null).map(() => ({ name: 'Edit', input: {}, sessionId: 's1', project: 'p1' })), + ] + const { ratio } = detectReadEditRatioLogic(calls) + expect(ratio).toBe(0.5) + }) + + it('healthy ratio passes (4:1+)', () => { + const calls: ToolCall[] = [ + ...Array(40).fill(null).map(() => ({ name: 'Read', input: {}, sessionId: 's1', project: 'p1' })), + ...Array(10).fill(null).map(() => ({ name: 'Edit', input: {}, sessionId: 's1', project: 'p1' })), + ] + const { ratio } = detectReadEditRatioLogic(calls) + expect(ratio).toBe(4) + }) + + it('counts Grep and Glob as reads', () => { + const calls: ToolCall[] = [ + { name: 'Read', input: {}, sessionId: 's1', project: 'p1' }, + { name: 'Grep', input: {}, sessionId: 's1', project: 'p1' }, + { name: 'Glob', input: {}, sessionId: 's1', project: 'p1' }, + { name: 'Edit', input: {}, sessionId: 's1', project: 'p1' }, + ] + const { reads, edits } = detectReadEditRatioLogic(calls) + expect(reads).toBe(3) + expect(edits).toBe(1) + }) + + it('counts Write as edit', () => { + const calls: ToolCall[] = [ + { name: 'Write', input: {}, sessionId: 's1', project: 'p1' }, + { name: 'Edit', input: {}, sessionId: 's1', project: 'p1' }, + ] + const { edits } = detectReadEditRatioLogic(calls) + expect(edits).toBe(2) + }) + + it('ignores non-read non-edit tools', () => { + const calls: ToolCall[] = [ + { name: 'Bash', input: {}, sessionId: 's1', project: 'p1' }, + { name: 'Agent', input: {}, sessionId: 's1', project: 'p1' }, + { name: 'mcp__foo__bar', input: {}, sessionId: 's1', project: 'p1' }, + ] + const { reads, edits } = detectReadEditRatioLogic(calls) + expect(reads).toBe(0) + expect(edits).toBe(0) + }) +}) From b88f2cd730984ab0788f4c447d12c8ff761d7923 Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 05:09:01 -0700 Subject: [PATCH 02/13] feat: ghost detectors, health grade, @-import expansion Expanded the optimize engine with new detectors and scoring: 1. Health score + letter grade (A-F) in optimize header. Weighted per-impact with caps. Gives users an instant "is my setup healthy" read that doubles as a shareable number. 2. Urgency score replaces impact-enum sort. Weighted 0.7 * impact + 0.3 * normalized tokens. Produces better-ranked findings. 3. Three new ghost detectors: - Ghost agents: files in ~/.claude/agents/ never invoked via Agent/Task tool - Ghost skills: SKILL.md directories never triggered - Ghost slash-commands: ~/.claude/commands/ files never referenced in user messages 4. @-import chain expansion for CLAUDE.md. Recursively follows @path/to/file imports (max depth 5) so bloat detection counts transitive load, not just the base file. Fixes undercounting for users with modular CLAUDE.md setups. 9 new tests covering health scoring and import expansion. --- src/dashboard.tsx | 14 ++- src/optimize.ts | 257 ++++++++++++++++++++++++++++++++++++----- tests/optimize.test.ts | 80 +++++++++++++ 3 files changed, 322 insertions(+), 29 deletions(-) diff --git a/src/dashboard.tsx b/src/dashboard.tsx index 4d92287..6587614 100644 --- a/src/dashboard.tsx +++ b/src/dashboard.tsx @@ -470,16 +470,24 @@ function FindingPanel({ index, finding, costRate, width }: { index: number; find ) } -function OptimizeView({ findings, costRate, projects, label, width }: { findings: WasteFinding[]; costRate: number; projects: ProjectSummary[]; label: string; width: number }) { +const GRADE_COLORS: Record = { A: '#5BF5A0', B: '#5BF5A0', C: GOLD, D: ORANGE, F: '#F55B5B' } + +function OptimizeView({ findings, costRate, projects, label, width, healthScore, healthGrade }: { findings: WasteFinding[]; costRate: number; projects: ProjectSummary[]; label: string; width: number; healthScore: number; healthGrade: string }) { const periodCost = projects.reduce((s, p) => s + p.totalCostUSD, 0) const totalTokens = findings.reduce((s, f) => s + f.tokensSaved, 0) const totalCost = totalTokens * costRate const pctRaw = periodCost > 0 ? (totalCost / periodCost) * 100 : 0 const pct = pctRaw >= 1 ? pctRaw.toFixed(0) : pctRaw.toFixed(1) + const gradeColor = GRADE_COLORS[healthGrade] ?? DIM return ( - CodeBurn Optimize {label} + + CodeBurn Optimize + {label} Setup: + {healthGrade} + ({healthScore}/100) + Savings: ~{formatTokens(totalTokens)} tokens (~{formatCost(totalCost)}, ~{pct}% of spend) {findings.map((f, i) => )} @@ -652,7 +660,7 @@ function InteractiveDashboard({ initialProjects, initialPeriod, initialProvider, {view === 'optimize' && optimizeResult - ? + ? : } diff --git a/src/optimize.ts b/src/optimize.ts index f29a904..e80744a 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -39,9 +39,13 @@ export type WasteFinding = { fix: WasteAction } +export type HealthGrade = 'A' | 'B' | 'C' | 'D' | 'F' + export type OptimizeResult = { findings: WasteFinding[] costRate: number + healthScore: number + healthGrade: HealthGrade } type ToolCall = { @@ -61,6 +65,7 @@ type ScanData = { projectCwds: Set apiCalls: ApiCallMeta[] versions: Set + userMessages: string[] } const IMPACT_ORDER: Record = { high: 3, medium: 2, low: 1 } @@ -84,6 +89,7 @@ type ScanFileResult = { cwds: string[] apiCalls: ApiCallMeta[] versions: string[] + userMessages: string[] } async function scanJsonlFile( @@ -94,12 +100,13 @@ async function scanJsonlFile( let content: string try { content = await readFile(filePath, 'utf-8') - } catch { return { calls: [], cwds: [], apiCalls: [], versions: [] } } + } catch { return { calls: [], cwds: [], apiCalls: [], versions: [], userMessages: [] } } const calls: ToolCall[] = [] const cwds: string[] = [] const apiCalls: ApiCallMeta[] = [] const versions: string[] = [] + const userMessages: string[] = [] const sessionId = basename(filePath, '.jsonl') for (const line of content.split('\n')) { @@ -110,6 +117,21 @@ async function scanJsonlFile( if (entry.cwd && typeof entry.cwd === 'string') cwds.push(entry.cwd) if (entry.version && typeof entry.version === 'string') versions.push(entry.version) + if (entry.type === 'user') { + const msg = entry.message as Record | undefined + const msgContent = msg?.content + if (typeof msgContent === 'string') { + userMessages.push(msgContent) + } else if (Array.isArray(msgContent)) { + for (const block of msgContent) { + if (block && typeof block === 'object' && block.type === 'text' && typeof block.text === 'string') { + userMessages.push(block.text) + } + } + } + continue + } + if (entry.type !== 'assistant') continue if (dateRange && typeof entry.timestamp === 'string') { @@ -139,7 +161,7 @@ async function scanJsonlFile( } } - return { calls, cwds, apiCalls, versions } + return { calls, cwds, apiCalls, versions, userMessages } } async function scanSessions(dateRange?: DateRange): Promise { @@ -148,19 +170,21 @@ async function scanSessions(dateRange?: DateRange): Promise { const allCwds = new Set() const allApiCalls: ApiCallMeta[] = [] const allVersions = new Set() + const allUserMessages: string[] = [] for (const source of sources) { const files = await collectJsonlFiles(source.path) for (const file of files) { - const { calls, cwds, apiCalls, versions } = await scanJsonlFile(file, source.project, dateRange) + const { calls, cwds, apiCalls, versions, userMessages } = await scanJsonlFile(file, source.project, dateRange) allCalls.push(...calls) for (const cwd of cwds) allCwds.add(cwd) allApiCalls.push(...apiCalls) for (const v of versions) if (v) allVersions.add(v) + allUserMessages.push(...userMessages) } } - return { toolCalls: allCalls, projectCwds: allCwds, apiCalls: allApiCalls, versions: allVersions } + return { toolCalls: allCalls, projectCwds: allCwds, apiCalls: allApiCalls, versions: allVersions, userMessages: allUserMessages } } function detectJunkReads(calls: ToolCall[]): WasteFinding | null { @@ -378,8 +402,36 @@ function detectMissingClaudeignore(projectCwds: Set): WasteFinding | nul } } +const MAX_IMPORT_DEPTH = 5 +const IMPORT_PATTERN = /^@([^\s]+)/gm + +function expandImports(filePath: string, seen: Set, depth: number): { totalLines: number; importedFiles: number } { + if (depth > MAX_IMPORT_DEPTH || seen.has(filePath)) return { totalLines: 0, importedFiles: 0 } + seen.add(filePath) + let content: string + try { content = readFileSync(filePath, 'utf-8') } catch { return { totalLines: 0, importedFiles: 0 } } + + const lines = content.split('\n').length + let totalLines = lines + let importedFiles = 0 + const dir = join(filePath, '..') + + const matches = content.matchAll(IMPORT_PATTERN) + for (const match of matches) { + const rawPath = match[1] + if (!rawPath || rawPath.startsWith('http') || rawPath.includes('@')) continue + const resolved = rawPath.startsWith('/') ? rawPath : join(dir, rawPath) + if (!existsSync(resolved)) continue + const nested = expandImports(resolved, seen, depth + 1) + totalLines += nested.totalLines + importedFiles += 1 + nested.importedFiles + } + + return { totalLines, importedFiles } +} + function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | null { - const bloated: { path: string; lines: number }[] = [] + const bloated: { path: string; lines: number; expandedLines: number; imports: number }[] = [] for (const cwd of projectCwds) { for (const name of ['CLAUDE.md', '.claude/CLAUDE.md']) { @@ -388,9 +440,10 @@ function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | null { try { const content = readFileSync(fullPath, 'utf-8') const lineCount = content.split('\n').length - if (lineCount > CLAUDEMD_HEALTHY_LINES) { + const { totalLines, importedFiles } = expandImports(fullPath, new Set(), 0) + if (totalLines > CLAUDEMD_HEALTHY_LINES) { const short = cwd.startsWith(homedir()) ? '~' + cwd.slice(homedir().length) : cwd - bloated.push({ path: `${short}/${name}`, lines: lineCount }) + bloated.push({ path: `${short}/${name}`, lines: lineCount, expandedLines: totalLines, imports: importedFiles }) } } catch { continue } } @@ -398,23 +451,26 @@ function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | null { if (bloated.length === 0) return null - const sorted = bloated.sort((a, b) => b.lines - a.lines) + const sorted = bloated.sort((a, b) => b.expandedLines - a.expandedLines) const worst = sorted[0] - const totalExtraLines = sorted.reduce((s, b) => s + (b.lines - CLAUDEMD_HEALTHY_LINES), 0) + const totalExtraLines = sorted.reduce((s, b) => s + (b.expandedLines - CLAUDEMD_HEALTHY_LINES), 0) const tokensPerLine = 25 const tokensSaved = totalExtraLines * tokensPerLine - const list = sorted.slice(0, 3).map(b => `${b.path} (${b.lines} lines)`).join(', ') + const list = sorted.slice(0, 3).map(b => { + const importNote = b.imports > 0 ? ` + ${b.imports} imported` : '' + return `${b.path} (${b.expandedLines} lines${importNote})` + }).join(', ') return { title: 'TRIM BLOATED CLAUDE.md', - explanation: `${list}. Every line loads into every API call as context. Beyond ${CLAUDEMD_HEALTHY_LINES} lines, the extra ~${totalExtraLines} lines cost ~${formatTokens(tokensSaved)} tokens per call.`, - impact: worst.lines > 400 ? 'high' : 'medium', + explanation: `${list}. Every line loads into every API call as context, including @-imports. Beyond ${CLAUDEMD_HEALTHY_LINES} lines, the extra ~${totalExtraLines} lines cost ~${formatTokens(tokensSaved)} tokens per call.`, + impact: worst.expandedLines > 400 ? 'high' : 'medium', tokensSaved, fix: { type: 'paste', label: 'Ask Claude to trim it:', - text: 'Review CLAUDE.md and cut it to under 200 lines. Remove anything Claude can figure out from the code itself: file paths, architecture, imports. Keep only: rules, gotchas, and non-obvious conventions.', + text: 'Review CLAUDE.md and all @-imported files. Cut total expanded content to under 200 lines. Remove anything Claude can figure out from the code itself: file paths, architecture, imports. Keep only: rules, gotchas, and non-obvious conventions.', }, } } @@ -503,6 +559,126 @@ function detectCacheBloat(apiCalls: ApiCallMeta[]): WasteFinding | null { } } +const TOKENS_PER_AGENT_DEF = 80 +const TOKENS_PER_COMMAND_DEF = 60 +const SKILL_FRONTMATTER_TOKENS = 80 + +async function listMarkdownFiles(dir: string): Promise { + if (!existsSync(dir)) return [] + try { + const entries = await readdir(dir) + return entries.filter(e => e.endsWith('.md')).map(e => e.replace(/\.md$/, '')) + } catch { return [] } +} + +async function listSkillDirs(dir: string): Promise { + if (!existsSync(dir)) return [] + try { + const entries = await readdir(dir) + const names: string[] = [] + for (const entry of entries) { + if (existsSync(join(dir, entry, 'SKILL.md'))) names.push(entry) + } + return names + } catch { return [] } +} + +async function detectGhostAgents(calls: ToolCall[]): Promise { + const agentDir = join(homedir(), '.claude', 'agents') + const defined = await listMarkdownFiles(agentDir) + if (defined.length === 0) return null + + const invoked = new Set() + for (const call of calls) { + if (call.name !== 'Agent' && call.name !== 'Task') continue + const subType = call.input.subagent_type as string | undefined + if (subType) invoked.add(subType) + } + + const ghosts = defined.filter(name => !invoked.has(name)) + if (ghosts.length === 0) return null + + const tokensSaved = ghosts.length * TOKENS_PER_AGENT_DEF + const list = ghosts.slice(0, 5).join(', ') + (ghosts.length > 5 ? `, +${ghosts.length - 5} more` : '') + + return { + title: 'REMOVE UNUSED CUSTOM AGENTS', + explanation: `${ghosts.length} agent definition${ghosts.length > 1 ? 's' : ''} in ~/.claude/agents/ never invoked: ${list}. Each agent adds ~${TOKENS_PER_AGENT_DEF} tokens of description to the Task tool schema on every session.`, + impact: ghosts.length >= 5 ? 'high' : ghosts.length >= 2 ? 'medium' : 'low', + tokensSaved, + fix: { + type: 'command', + label: `Archive unused agent${ghosts.length > 1 ? 's' : ''}:`, + text: ghosts.slice(0, 10).map(name => `mv ~/.claude/agents/${name}.md ~/.claude/agents/.archived/`).join('\n'), + }, + } +} + +async function detectGhostSkills(calls: ToolCall[]): Promise { + const skillDir = join(homedir(), '.claude', 'skills') + const defined = await listSkillDirs(skillDir) + if (defined.length === 0) return null + + const invoked = new Set() + for (const call of calls) { + if (call.name !== 'Skill') continue + const skillName = (call.input.skill as string) || (call.input.name as string) + if (skillName) invoked.add(skillName) + } + + const ghosts = defined.filter(name => !invoked.has(name)) + if (ghosts.length === 0 || ghosts.length < 3) return null + + const tokensSaved = ghosts.length * SKILL_FRONTMATTER_TOKENS + const list = ghosts.slice(0, 5).join(', ') + (ghosts.length > 5 ? `, +${ghosts.length - 5} more` : '') + + return { + title: 'REMOVE UNUSED SKILLS', + explanation: `${ghosts.length} skill${ghosts.length > 1 ? 's' : ''} in ~/.claude/skills/ never invoked: ${list}. Each skill's frontmatter adds ~${SKILL_FRONTMATTER_TOKENS} tokens to the Skill tool invocation index on every session.`, + impact: ghosts.length >= 10 ? 'high' : ghosts.length >= 5 ? 'medium' : 'low', + tokensSaved, + fix: { + type: 'command', + label: `Archive unused skill${ghosts.length > 1 ? 's' : ''}:`, + text: ghosts.slice(0, 10).map(name => `mv ~/.claude/skills/${name} ~/.claude/skills/.archived/`).join('\n'), + }, + } +} + +async function detectGhostCommands(userMessages: string[]): Promise { + const cmdDir = join(homedir(), '.claude', 'commands') + const defined = await listMarkdownFiles(cmdDir) + if (defined.length === 0) return null + + const invoked = new Set() + const cmdPattern = /([^<]+)<\/command-name>|\/(\w+[-\w]*)/g + for (const msg of userMessages) { + const matches = msg.matchAll(cmdPattern) + for (const m of matches) { + const name = (m[1] || m[2] || '').replace(/^\//, '') + if (name) invoked.add(name) + } + } + + const ghosts = defined.filter(name => !invoked.has(name)) + if (ghosts.length === 0) return null + + const tokensSaved = ghosts.length * TOKENS_PER_COMMAND_DEF + const list = ghosts.slice(0, 5).join(', ') + (ghosts.length > 5 ? `, +${ghosts.length - 5} more` : '') + + return { + title: 'REMOVE UNUSED SLASH COMMANDS', + explanation: `${ghosts.length} slash command${ghosts.length > 1 ? 's' : ''} in ~/.claude/commands/ never used: ${list}. Each adds ~${TOKENS_PER_COMMAND_DEF} tokens of definition per session.`, + impact: ghosts.length >= 10 ? 'medium' : 'low', + tokensSaved, + fix: { + type: 'command', + label: `Archive unused command${ghosts.length > 1 ? 's' : ''}:`, + text: ghosts.slice(0, 10).map(name => `mv ~/.claude/commands/${name}.md ~/.claude/commands/.archived/`).join('\n'), + }, + } +} + function detectBashBloat(): WasteFinding | null { const current = process.env['BASH_MAX_OUTPUT_LENGTH'] if (current && parseInt(current, 10) <= 15000) return null @@ -591,6 +767,8 @@ function renderFinding(n: number, f: WasteFinding, costRate: number, W: number): return lines } +const GRADE_COLORS: Record = { A: GREEN, B: GREEN, C: GOLD, D: ORANGE, F: '#F55B5B' } + function renderOptimize( findings: WasteFinding[], costRate: number, @@ -598,6 +776,8 @@ function renderOptimize( periodCost: number, sessionCount: number, callCount: number, + healthScore: number, + healthGrade: HealthGrade, ): string { const lines: string[] = [] const W = 62 @@ -611,6 +791,7 @@ function renderOptimize( `${sessionCount} sessions`, `${callCount.toLocaleString()} calls`, chalk.hex(GOLD)(formatCost(periodCost)), + `Setup: ${chalk.bold.hex(GRADE_COLORS[healthGrade])(healthGrade)} ${chalk.dim(`(${healthScore}/100)`)}`, ].join(chalk.hex(DIM)(' '))) lines.push('') @@ -628,9 +809,7 @@ function renderOptimize( lines.push(chalk.hex(GREEN)(` Potential savings: ~${formatTokens(totalTokens)} tokens (~${formatCost(totalCost)}, ~${pct}% of spend)`)) lines.push('') - const sorted = findings.sort((a, b) => - (IMPACT_ORDER[b.impact] ?? 0) - (IMPACT_ORDER[a.impact] ?? 0) || b.tokensSaved - a.tokensSaved - ) + const sorted = findings for (let i = 0; i < sorted.length; i++) { lines.push(...renderFinding(i + 1, sorted[i], costRate, W)) @@ -643,15 +822,33 @@ function renderOptimize( return lines.join('\n') } +function computeHealth(findings: WasteFinding[]): { score: number; grade: HealthGrade } { + if (findings.length === 0) return { score: 100, grade: 'A' } + + const impactWeight: Record = { high: 15, medium: 7, low: 3 } + let penalty = 0 + for (const f of findings) penalty += impactWeight[f.impact] ?? 0 + + const score = Math.max(0, 100 - Math.min(80, penalty)) + const grade: HealthGrade = score >= 90 ? 'A' : score >= 75 ? 'B' : score >= 55 ? 'C' : score >= 30 ? 'D' : 'F' + return { score, grade } +} + +function urgencyScore(f: WasteFinding): number { + const impactWeight: Record = { high: 1, medium: 0.5, low: 0.2 } + const normalizedTokens = Math.min(1, f.tokensSaved / 500_000) + return (impactWeight[f.impact] ?? 0) * 0.7 + normalizedTokens * 0.3 +} + export async function scanAndDetect( projects: ProjectSummary[], dateRange?: DateRange, ): Promise { const costRate = computeInputCostRate(projects) - const { toolCalls, projectCwds, apiCalls } = await scanSessions(dateRange) + const { toolCalls, projectCwds, apiCalls, userMessages } = await scanSessions(dateRange) const findings: WasteFinding[] = [] - const detectors = [ + const syncDetectors = [ () => detectCacheBloat(apiCalls), () => detectLowReadEditRatio(toolCalls), () => detectJunkReads(toolCalls), @@ -661,17 +858,25 @@ export async function scanAndDetect( () => detectBloatedClaudeMd(projectCwds), () => detectBashBloat(), ] - - for (const detect of detectors) { + for (const detect of syncDetectors) { const finding = detect() if (finding) findings.push(finding) } - findings.sort((a, b) => - (IMPACT_ORDER[b.impact] ?? 0) - (IMPACT_ORDER[a.impact] ?? 0) || b.tokensSaved - a.tokensSaved - ) + const asyncDetectors = [ + () => detectGhostAgents(toolCalls), + () => detectGhostSkills(toolCalls), + () => detectGhostCommands(userMessages), + ] + for (const detect of asyncDetectors) { + const finding = await detect() + if (finding) findings.push(finding) + } - return { findings, costRate } + findings.sort((a, b) => urgencyScore(b) - urgencyScore(a)) + + const { score, grade } = computeHealth(findings) + return { findings, costRate, healthScore: score, healthGrade: grade } } export async function runOptimize( @@ -686,11 +891,11 @@ export async function runOptimize( process.stderr.write(chalk.dim(' Scanning sessions for waste patterns...\n')) - const { findings, costRate } = await scanAndDetect(projects, dateRange) + const { findings, costRate, healthScore, healthGrade } = await scanAndDetect(projects, dateRange) const sessions = projects.flatMap(p => p.sessions) const periodCost = projects.reduce((s, p) => s + p.totalCostUSD, 0) const callCount = projects.reduce((s, p) => s + p.totalApiCalls, 0) - const output = renderOptimize(findings, costRate, periodLabel, periodCost, sessions.length, callCount) + const output = renderOptimize(findings, costRate, periodLabel, periodCost, sessions.length, callCount, healthScore, healthGrade) console.log(output) } diff --git a/tests/optimize.test.ts b/tests/optimize.test.ts index c8514ea..b77ba25 100644 --- a/tests/optimize.test.ts +++ b/tests/optimize.test.ts @@ -236,3 +236,83 @@ describe('optimize: read:edit ratio detection', () => { expect(edits).toBe(0) }) }) + +function computeHealthLogic(impacts: Array<'high' | 'medium' | 'low'>): { score: number; grade: string } { + if (impacts.length === 0) return { score: 100, grade: 'A' } + const impactWeight: Record = { high: 15, medium: 7, low: 3 } + let penalty = 0 + for (const i of impacts) penalty += impactWeight[i] ?? 0 + const score = Math.max(0, 100 - Math.min(80, penalty)) + const grade = score >= 90 ? 'A' : score >= 75 ? 'B' : score >= 55 ? 'C' : score >= 30 ? 'D' : 'F' + return { score, grade } +} + +describe('optimize: health score and grade', () => { + it('returns A with no findings', () => { + const { score, grade } = computeHealthLogic([]) + expect(score).toBe(100) + expect(grade).toBe('A') + }) + + it('one low finding keeps grade at A', () => { + const { score, grade } = computeHealthLogic(['low']) + expect(score).toBe(97) + expect(grade).toBe('A') + }) + + it('two high findings drop to C', () => { + const { score, grade } = computeHealthLogic(['high', 'high']) + expect(score).toBe(70) + expect(grade).toBe('C') + }) + + it('caps penalty at 80 to prevent going below 20', () => { + const impacts = Array(20).fill('high' as const) + const { score } = computeHealthLogic(impacts) + expect(score).toBe(20) + }) + + it('mix produces D grade', () => { + const { score, grade } = computeHealthLogic(['high', 'high', 'medium', 'medium', 'low']) + expect(score).toBe(100 - 15 - 15 - 7 - 7 - 3) + expect(grade).toBe('D') + }) +}) + +function expandImportsLogic(content: string, resolveMap: Record, depth = 0): number { + if (depth > 5) return 0 + let total = content.split('\n').length + const matches = content.matchAll(/^@([^\s]+)/gm) + for (const m of matches) { + const key = m[1] || '' + if (resolveMap[key]) { + total += expandImportsLogic(resolveMap[key], resolveMap, depth + 1) + } + } + return total +} + +describe('optimize: @-import expansion', () => { + it('counts only the base file when no imports', () => { + const total = expandImportsLogic('line 1\nline 2\nline 3', {}) + expect(total).toBe(3) + }) + + it('expands single @-import', () => { + const main = 'line 1\n@./imported.md\nline 3' + const imported = 'i1\ni2\ni3\ni4\ni5' + expect(expandImportsLogic(main, { './imported.md': imported })).toBe(3 + 5) + }) + + it('expands nested @-imports recursively', () => { + const main = 'a\n@b.md' + const b = 'b1\nb2\n@c.md' + const c = 'c1\nc2\nc3' + expect(expandImportsLogic(main, { 'b.md': b, 'c.md': c })).toBe(2 + 3 + 3) + }) + + it('caps recursion depth', () => { + const circular = '@x.md' + expect(expandImportsLogic(circular, { 'x.md': circular })).toBeLessThan(10) + }) +}) From be45045fd81b510de03b9d7d3539414953b19971 Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 06:30:15 -0700 Subject: [PATCH 03/13] refactor(optimize): correctness, constants, and real tests Phase 1 hardening pass. Bug fixes: - Move cwd/version collection inside date-range filter. 7d and 30d now produce different findings for filesystem detectors. - detectGhostSkills threshold aligned with peer detectors. - detectUnusedMcp gets 24-hour grace period via config file mtime so newly added servers are not flagged as unused. - detectCacheBloat replaces hardcoded 50K baseline with user-derived p25 of cache writes. Flags only when median exceeds 1.4x baseline. - detectBashBloat scans user shell profiles instead of the auditor's process.env. - @-import pattern requires ./ ../ or / to avoid matching email addresses or npm scopes. - Command usage pattern requires leading whitespace/start-of-line before /cmd so path references like /tmp are not counted as usage. - AVG_TOKENS_PER_READ lowered from 1500 to 600 and CLAUDEMD_TOKENS_PER_LINE lowered from 25 to 13 for realistic prose/config sizing. Code quality: - Every magic number extracted to named module-scope constants. - Dead code removed (IMPACT_ORDER, unused stat import). - Shared loadMcpConfigs helper deduplicates config walking. - Shared shortHomePath, isReadTool, inRange helpers. - All detectors and computeHealth exported for real tests. - Ghost detectors run in parallel via Promise.all. - Cost rate defaults to 0 when unknown so UI can suppress instead of showing fabricated numbers. Tests: - Replaced 17 fake tests that re-implemented detector logic with 26 tests importing and exercising the real exports. - Cover threshold boundaries, impact scaling, edge cases. - 121 tests pass. UX header: "Setup" renamed to "Health", issue count shown inline. CLAUDE.md: adds rule against "steal/copy/rip-off" wording in public-facing text. --- CLAUDE.md | 7 + src/optimize.ts | 694 ++++++++++++++++++++++++----------------- tests/optimize.test.ts | 436 +++++++++++--------------- 3 files changed, 600 insertions(+), 537 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index f1cd611..1661a28 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -75,3 +75,10 @@ gh pr comment --body "Merged, thanks!" - NEVER include personal names or usernames in commits - Small, focused commits. One feature per commit - Test locally before every commit + +### Public-facing language (commits, PRs, release notes, README) +- Commits and release notes are public. Write like you'd publish them. +- NEVER use words like "steal", "stealing", "copy", "rip off", "inspired by" in commit messages +- Describe what the code does, not where ideas came from +- If you must credit prior art, do it in code comments or docs, not commit messages +- No snark, no filler, no self-deprecation. Treat each commit as a product statement diff --git a/src/optimize.ts b/src/optimize.ts index e80744a..11b7172 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -1,6 +1,6 @@ import chalk from 'chalk' -import { readdir, readFile, stat } from 'fs/promises' -import { existsSync, readFileSync } from 'fs' +import { readdir, readFile } from 'fs/promises' +import { existsSync, readFileSync, statSync } from 'fs' import { basename, join } from 'path' import { homedir } from 'os' @@ -9,22 +9,99 @@ import type { DateRange, ProjectSummary } from './types.js' import { formatCost } from './currency.js' import { formatTokens } from './format.js' +// ============================================================================ +// Display constants +// ============================================================================ + const ORANGE = '#FF8C42' const DIM = '#666666' const GOLD = '#FFD700' const CYAN = '#5BF5E0' const GREEN = '#5BF5A0' +const RED = '#F55B5B' + +// ============================================================================ +// Token estimation constants +// ============================================================================ + +const AVG_TOKENS_PER_READ = 600 +const TOKENS_PER_MCP_TOOL = 400 +const TOOLS_PER_MCP_SERVER = 5 +const TOKENS_PER_AGENT_DEF = 80 +const TOKENS_PER_SKILL_DEF = 80 +const TOKENS_PER_COMMAND_DEF = 60 +const CLAUDEMD_TOKENS_PER_LINE = 13 +const BASH_TOKENS_PER_CHAR = 0.25 +const ESTIMATED_READS_PER_MISSING_IGNORE = 10 + +// ============================================================================ +// Detector thresholds +// ============================================================================ + +const CLAUDEMD_HEALTHY_LINES = 200 +const CLAUDEMD_HIGH_THRESHOLD_LINES = 400 +const MIN_JUNK_READS_TO_FLAG = 3 +const JUNK_READS_HIGH_THRESHOLD = 20 +const JUNK_READS_MEDIUM_THRESHOLD = 5 +const MIN_DUPLICATE_READS_TO_FLAG = 5 +const DUPLICATE_READS_HIGH_THRESHOLD = 30 +const DUPLICATE_READS_MEDIUM_THRESHOLD = 10 +const MIN_EDITS_FOR_RATIO = 10 +const HEALTHY_READ_EDIT_RATIO = 4 +const LOW_RATIO_HIGH_THRESHOLD = 2 +const LOW_RATIO_MEDIUM_THRESHOLD = 3 +const MIN_API_CALLS_FOR_CACHE = 10 +const CACHE_EXCESS_HIGH_THRESHOLD = 15000 +const MISSING_IGNORE_HIGH_THRESHOLD = 3 +const UNUSED_MCP_HIGH_THRESHOLD = 3 +const GHOST_AGENTS_HIGH_THRESHOLD = 5 +const GHOST_AGENTS_MEDIUM_THRESHOLD = 2 +const GHOST_SKILLS_HIGH_THRESHOLD = 10 +const GHOST_SKILLS_MEDIUM_THRESHOLD = 5 +const GHOST_COMMANDS_MEDIUM_THRESHOLD = 10 +const MCP_NEW_CONFIG_GRACE_MS = 24 * 60 * 60 * 1000 +const BASH_DEFAULT_LIMIT = 30000 +const BASH_RECOMMENDED_LIMIT = 15000 + +// ============================================================================ +// Scoring constants +// ============================================================================ + +const HEALTH_WEIGHT_HIGH = 15 +const HEALTH_WEIGHT_MEDIUM = 7 +const HEALTH_WEIGHT_LOW = 3 +const HEALTH_MAX_PENALTY = 80 +const GRADE_A_MIN = 90 +const GRADE_B_MIN = 75 +const GRADE_C_MIN = 55 +const GRADE_D_MIN = 30 +const URGENCY_IMPACT_WEIGHT = 0.7 +const URGENCY_TOKEN_WEIGHT = 0.3 +const URGENCY_TOKEN_NORMALIZE = 500_000 + +// ============================================================================ +// File system constants +// ============================================================================ + +const MAX_IMPORT_DEPTH = 5 +const IMPORT_PATTERN = /^@(\.\.?\/[^\s]+|\/[^\s]+)/gm +const COMMAND_PATTERN = /([^<]+)<\/command-name>|(?:^|\s)\/([a-zA-Z][\w-]*)/gm const JUNK_DIRS = [ 'node_modules', '.git', 'dist', 'build', '__pycache__', '.next', '.nuxt', '.output', 'coverage', '.cache', '.tsbuildinfo', '.venv', 'venv', '.svn', '.hg', ] -const JUNK_PATTERN = new RegExp(`/(${JUNK_DIRS.join('|')})/`) +const JUNK_PATTERN = new RegExp(`/(?:${JUNK_DIRS.join('|')})/`) -const AVG_TOKENS_PER_READ = 1500 -const TOKENS_PER_MCP_TOOL = 400 -const CLAUDEMD_HEALTHY_LINES = 200 +const SHELL_PROFILES = ['.zshrc', '.bashrc', '.bash_profile', '.profile'] + +// ============================================================================ +// Types +// ============================================================================ + +export type Impact = 'high' | 'medium' | 'low' +export type HealthGrade = 'A' | 'B' | 'C' | 'D' | 'F' export type WasteAction = | { type: 'paste'; label: string; text: string } @@ -34,13 +111,11 @@ export type WasteAction = export type WasteFinding = { title: string explanation: string - impact: 'high' | 'medium' | 'low' + impact: Impact tokensSaved: number fix: WasteAction } -export type HealthGrade = 'A' | 'B' | 'C' | 'D' | 'F' - export type OptimizeResult = { findings: WasteFinding[] costRate: number @@ -48,14 +123,14 @@ export type OptimizeResult = { healthGrade: HealthGrade } -type ToolCall = { +export type ToolCall = { name: string input: Record sessionId: string project: string } -type ApiCallMeta = { +export type ApiCallMeta = { cacheCreationTokens: number version: string } @@ -68,7 +143,9 @@ type ScanData = { userMessages: string[] } -const IMPACT_ORDER: Record = { high: 3, medium: 2, low: 1 } +// ============================================================================ +// JSONL scanner +// ============================================================================ async function collectJsonlFiles(dirPath: string): Promise { const files = await readdir(dirPath).catch(() => []) @@ -92,7 +169,14 @@ type ScanFileResult = { userMessages: string[] } -async function scanJsonlFile( +function inRange(timestamp: string | undefined, range: DateRange | undefined): boolean { + if (!range) return true + if (!timestamp) return false + const ts = new Date(timestamp) + return ts >= range.start && ts <= range.end +} + +export async function scanJsonlFile( filePath: string, project: string, dateRange: DateRange | undefined, @@ -108,16 +192,23 @@ async function scanJsonlFile( const versions: string[] = [] const userMessages: string[] = [] const sessionId = basename(filePath, '.jsonl') + let lastVersion = '' for (const line of content.split('\n')) { if (!line.trim()) continue let entry: Record try { entry = JSON.parse(line) } catch { continue } - if (entry.cwd && typeof entry.cwd === 'string') cwds.push(entry.cwd) - if (entry.version && typeof entry.version === 'string') versions.push(entry.version) + if (entry.version && typeof entry.version === 'string') lastVersion = entry.version + + const ts = typeof entry.timestamp === 'string' ? entry.timestamp : undefined + const withinRange = inRange(ts, dateRange) + + if (entry.cwd && typeof entry.cwd === 'string' && withinRange) cwds.push(entry.cwd) + if (entry.version && typeof entry.version === 'string' && withinRange) versions.push(entry.version) if (entry.type === 'user') { + if (!withinRange) continue const msg = entry.message as Record | undefined const msgContent = msg?.content if (typeof msgContent === 'string') { @@ -133,18 +224,13 @@ async function scanJsonlFile( } if (entry.type !== 'assistant') continue - - if (dateRange && typeof entry.timestamp === 'string') { - const ts = new Date(entry.timestamp) - if (ts < dateRange.start || ts > dateRange.end) continue - } + if (!withinRange) continue const msg = entry.message as Record | undefined const usage = msg?.usage as Record | undefined if (usage) { const cacheCreate = (usage.cache_creation_input_tokens as number) ?? 0 - const ver = versions[versions.length - 1] ?? '' - if (cacheCreate > 0) apiCalls.push({ cacheCreationTokens: cacheCreate, version: ver }) + if (cacheCreate > 0) apiCalls.push({ cacheCreationTokens: cacheCreate, version: lastVersion }) } const blocks = msg?.content @@ -187,17 +273,67 @@ async function scanSessions(dateRange?: DateRange): Promise { return { toolCalls: allCalls, projectCwds: allCwds, apiCalls: allApiCalls, versions: allVersions, userMessages: allUserMessages } } -function detectJunkReads(calls: ToolCall[]): WasteFinding | null { - const readCalls = calls.filter(c => c.name === 'Read' || c.name === 'FileReadTool') +// ============================================================================ +// Shared helpers +// ============================================================================ +function readJsonFile(path: string): Record | null { + try { return JSON.parse(readFileSync(path, 'utf-8')) } catch { return null } +} + +function shortHomePath(absPath: string): string { + const home = homedir() + return absPath.startsWith(home) ? '~' + absPath.slice(home.length) : absPath +} + +function isReadTool(name: string): boolean { + return name === 'Read' || name === 'FileReadTool' +} + +type McpConfigEntry = { normalized: string; original: string; mtime: number } + +export function loadMcpConfigs(projectCwds: Iterable): Map { + const servers = new Map() + const configPaths = [ + join(homedir(), '.claude', 'settings.json'), + join(homedir(), '.claude', 'settings.local.json'), + ] + for (const cwd of projectCwds) { + configPaths.push(join(cwd, '.mcp.json')) + configPaths.push(join(cwd, '.claude', 'settings.json')) + configPaths.push(join(cwd, '.claude', 'settings.local.json')) + } + + for (const p of configPaths) { + if (!existsSync(p)) continue + const config = readJsonFile(p) + if (!config) continue + let mtime = 0 + try { mtime = statSync(p).mtimeMs } catch {} + const serversObj = (config.mcpServers ?? {}) as Record + for (const name of Object.keys(serversObj)) { + const normalized = name.replace(/:/g, '_') + const existing = servers.get(normalized) + if (!existing || existing.mtime < mtime) { + servers.set(normalized, { normalized, original: name, mtime }) + } + } + } + return servers +} + +// ============================================================================ +// Detectors +// ============================================================================ + +export function detectJunkReads(calls: ToolCall[]): WasteFinding | null { const dirCounts = new Map() let totalJunkReads = 0 - for (const call of readCalls) { + for (const call of calls) { + if (!isReadTool(call.name)) continue const filePath = call.input.file_path as string | undefined - if (!filePath) continue - if (!JUNK_PATTERN.test(filePath)) continue - + if (!filePath || !JUNK_PATTERN.test(filePath)) continue totalJunkReads++ for (const dir of JUNK_DIRS) { if (filePath.includes(`/${dir}/`)) { @@ -207,22 +343,21 @@ function detectJunkReads(calls: ToolCall[]): WasteFinding | null { } } - if (totalJunkReads < 3) return null + if (totalJunkReads < MIN_JUNK_READS_TO_FLAG) return null const sorted = [...dirCounts.entries()].sort((a, b) => b[1] - a[1]) const dirList = sorted.slice(0, 3).map(([d, n]) => `${d}/ (${n}x)`).join(', ') const tokensSaved = totalJunkReads * AVG_TOKENS_PER_READ const detected = sorted.map(([d]) => d) - const extras = ['node_modules', '.git', 'dist', '__pycache__'] - .filter(d => !dirCounts.has(d)) - .slice(0, Math.max(0, 6 - detected.length)) + const commonDefaults = ['node_modules', '.git', 'dist', '__pycache__'] + const extras = commonDefaults.filter(d => !dirCounts.has(d)).slice(0, Math.max(0, 6 - detected.length)) const ignoreContent = [...detected, ...extras].join('\n') return { - title: 'STOP READING JUNK DIRECTORIES', - explanation: `Claude read into ${dirList} -- ${totalJunkReads} times total. Each read loads ~${AVG_TOKENS_PER_READ.toLocaleString()} tokens of irrelevant content into context. A .claudeignore blocks this.`, - impact: totalJunkReads > 20 ? 'high' : totalJunkReads > 5 ? 'medium' : 'low', + title: 'Claude is reading build/dependency folders', + explanation: `Claude read into ${dirList} (${totalJunkReads} reads). These are generated or dependency directories, not your code. A .claudeignore tells Claude to skip them.`, + impact: totalJunkReads > JUNK_READS_HIGH_THRESHOLD ? 'high' : totalJunkReads > JUNK_READS_MEDIUM_THRESHOLD ? 'medium' : 'low', tokensSaved, fix: { type: 'file-content', @@ -233,15 +368,13 @@ function detectJunkReads(calls: ToolCall[]): WasteFinding | null { } } -function detectDuplicateReads(calls: ToolCall[]): WasteFinding | null { - const readCalls = calls.filter(c => c.name === 'Read' || c.name === 'FileReadTool') - +export function detectDuplicateReads(calls: ToolCall[]): WasteFinding | null { const sessionFiles = new Map>() - for (const call of readCalls) { + for (const call of calls) { + if (!isReadTool(call.name)) continue const filePath = call.input.file_path as string | undefined if (!filePath || JUNK_PATTERN.test(filePath)) continue - const key = `${call.project}:${call.sessionId}` if (!sessionFiles.has(key)) sessionFiles.set(key, new Map()) const fm = sessionFiles.get(key)! @@ -261,64 +394,36 @@ function detectDuplicateReads(calls: ToolCall[]): WasteFinding | null { } } - if (totalDuplicates < 5) return null + if (totalDuplicates < MIN_DUPLICATE_READS_TO_FLAG) return null const worst = [...fileDupes.entries()] .sort((a, b) => b[1] - a[1]) .slice(0, 3) - .map(([name, n]) => `${name} (+${n})`) + .map(([name, n]) => `${name} (${n + 1}x)`) .join(', ') const tokensSaved = totalDuplicates * AVG_TOKENS_PER_READ return { - title: 'CUT DUPLICATE FILE READS', - explanation: `Claude re-read the same file ${totalDuplicates} times across sessions. Top offenders: ${worst}. Each re-read loads ~${AVG_TOKENS_PER_READ.toLocaleString()} tokens that are already in context.`, - impact: totalDuplicates > 30 ? 'high' : totalDuplicates > 10 ? 'medium' : 'low', + title: 'Claude is re-reading the same files', + explanation: `${totalDuplicates} redundant re-reads across sessions. Top repeats: ${worst}. Each re-read loads the same content into context again.`, + impact: totalDuplicates > DUPLICATE_READS_HIGH_THRESHOLD ? 'high' : totalDuplicates > DUPLICATE_READS_MEDIUM_THRESHOLD ? 'medium' : 'low', tokensSaved, fix: { type: 'paste', - label: 'Give Claude exact locations so it reads once:', - text: 'Look at src/auth.ts lines 45-80, the validateToken function.', + label: 'Point Claude at exact locations in your prompt, for example:', + text: 'In lines -, look at the function.', }, } } -function readJsonFile(path: string): Record | null { - try { - return JSON.parse(readFileSync(path, 'utf-8')) - } catch { return null } -} - -function detectUnusedMcp( +export function detectUnusedMcp( calls: ToolCall[], projects: ProjectSummary[], projectCwds: Set, ): WasteFinding | null { - const configuredServers = new Map() - - const configPaths = [ - join(homedir(), '.claude', 'settings.json'), - join(homedir(), '.claude', 'settings.local.json'), - ] - for (const cwd of projectCwds) { - configPaths.push(join(cwd, '.mcp.json')) - configPaths.push(join(cwd, '.claude', 'settings.json')) - configPaths.push(join(cwd, '.claude', 'settings.local.json')) - } - - for (const p of configPaths) { - if (!existsSync(p)) continue - const config = readJsonFile(p) - if (!config) continue - const servers = (config.mcpServers ?? {}) as Record - for (const name of Object.keys(servers)) { - const normalized = name.replace(/:/g, '_') - configuredServers.set(normalized, name) - } - } - - if (configuredServers.size === 0) return null + const configured = loadMcpConfigs(projectCwds) + if (configured.size === 0) return null const calledServers = new Set() for (const call of calls) { @@ -328,28 +433,28 @@ function detectUnusedMcp( } for (const p of projects) { for (const s of p.sessions) { - for (const server of Object.keys(s.mcpBreakdown)) { - calledServers.add(server) - } + for (const server of Object.keys(s.mcpBreakdown)) calledServers.add(server) } } + const now = Date.now() const unused: string[] = [] - for (const [normalized, original] of configuredServers) { - if (!calledServers.has(normalized)) unused.push(original) + for (const entry of configured.values()) { + if (calledServers.has(entry.normalized)) continue + if (entry.mtime > 0 && now - entry.mtime < MCP_NEW_CONFIG_GRACE_MS) continue + unused.push(entry.original) } if (unused.length === 0) return null const totalSessions = projects.reduce((s, p) => s + p.sessions.length, 0) - const estimatedTools = 5 - const schemaTokens = unused.length * estimatedTools * TOKENS_PER_MCP_TOOL - const tokensSaved = schemaTokens * totalSessions + const schemaTokensPerSession = unused.length * TOOLS_PER_MCP_SERVER * TOKENS_PER_MCP_TOOL + const tokensSaved = schemaTokensPerSession * Math.max(totalSessions, 1) return { - title: 'REMOVE UNUSED MCP SERVERS', - explanation: `${unused.length} MCP server${unused.length > 1 ? 's' : ''} configured but never called: ${unused.join(', ')}. Each loads ~${(estimatedTools * TOKENS_PER_MCP_TOOL).toLocaleString()} tokens of schema into every session (${totalSessions.toLocaleString()} sessions in this period).`, - impact: unused.length >= 3 ? 'high' : 'medium', + title: `${unused.length} MCP server${unused.length > 1 ? 's' : ''} configured but never used`, + explanation: `Never called in this period: ${unused.join(', ')}. Each server loads ~${TOOLS_PER_MCP_SERVER * TOKENS_PER_MCP_TOOL} tokens of tool schema into every session.`, + impact: unused.length >= UNUSED_MCP_HIGH_THRESHOLD ? 'high' : 'medium', tokensSaved, fix: { type: 'command', @@ -359,18 +464,15 @@ function detectUnusedMcp( } } -function detectMissingClaudeignore(projectCwds: Set): WasteFinding | null { +export function detectMissingClaudeignore(projectCwds: Set): WasteFinding | null { const missing: string[] = [] - const hasJunkDir: string[] = [] for (const cwd of projectCwds) { - if (existsSync(join(cwd, '.claudeignore'))) continue if (!existsSync(cwd)) continue - + if (existsSync(join(cwd, '.claudeignore'))) continue for (const dir of JUNK_DIRS) { if (existsSync(join(cwd, dir))) { missing.push(cwd) - hasJunkDir.push(dir) break } } @@ -378,20 +480,17 @@ function detectMissingClaudeignore(projectCwds: Set): WasteFinding | nul if (missing.length === 0) return null - const shortPaths = missing.map(p => { - const home = homedir() - return p.startsWith(home) ? '~' + p.slice(home.length) : p - }) + const shortPaths = missing.map(shortHomePath) const display = shortPaths.length <= 3 ? shortPaths.join(', ') : `${shortPaths.slice(0, 2).join(', ')} + ${shortPaths.length - 2} more` - const tokensSaved = missing.length * 10 * AVG_TOKENS_PER_READ + const tokensSaved = missing.length * ESTIMATED_READS_PER_MISSING_IGNORE * AVG_TOKENS_PER_READ return { - title: 'ADD .claudeignore FILES', - explanation: `${missing.length} project${missing.length > 1 ? 's' : ''} ha${missing.length > 1 ? 've' : 's'} junk directories (node_modules, .git, etc.) but no .claudeignore: ${display}. Without it, Claude may read/search these directories.`, - impact: missing.length >= 3 ? 'high' : 'medium', + title: `Add .claudeignore to ${missing.length} project${missing.length > 1 ? 's' : ''}`, + explanation: `${missing.length} project${missing.length > 1 ? 's have' : ' has'} build/dependency folders (node_modules, .git, etc.) but no .claudeignore: ${display}. Without it, Claude can wander into them.`, + impact: missing.length >= MISSING_IGNORE_HIGH_THRESHOLD ? 'high' : 'medium', tokensSaved, fix: { type: 'file-content', @@ -402,24 +501,20 @@ function detectMissingClaudeignore(projectCwds: Set): WasteFinding | nul } } -const MAX_IMPORT_DEPTH = 5 -const IMPORT_PATTERN = /^@([^\s]+)/gm - function expandImports(filePath: string, seen: Set, depth: number): { totalLines: number; importedFiles: number } { if (depth > MAX_IMPORT_DEPTH || seen.has(filePath)) return { totalLines: 0, importedFiles: 0 } seen.add(filePath) let content: string try { content = readFileSync(filePath, 'utf-8') } catch { return { totalLines: 0, importedFiles: 0 } } - const lines = content.split('\n').length - let totalLines = lines + let totalLines = content.split('\n').length let importedFiles = 0 const dir = join(filePath, '..') - const matches = content.matchAll(IMPORT_PATTERN) - for (const match of matches) { + IMPORT_PATTERN.lastIndex = 0 + for (const match of content.matchAll(IMPORT_PATTERN)) { const rawPath = match[1] - if (!rawPath || rawPath.startsWith('http') || rawPath.includes('@')) continue + if (!rawPath) continue const resolved = rawPath.startsWith('/') ? rawPath : join(dir, rawPath) if (!existsSync(resolved)) continue const nested = expandImports(resolved, seen, depth + 1) @@ -430,22 +525,17 @@ function expandImports(filePath: string, seen: Set, depth: number): { to return { totalLines, importedFiles } } -function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | null { - const bloated: { path: string; lines: number; expandedLines: number; imports: number }[] = [] +export function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | null { + const bloated: { path: string; expandedLines: number; imports: number }[] = [] for (const cwd of projectCwds) { for (const name of ['CLAUDE.md', '.claude/CLAUDE.md']) { const fullPath = join(cwd, name) if (!existsSync(fullPath)) continue - try { - const content = readFileSync(fullPath, 'utf-8') - const lineCount = content.split('\n').length - const { totalLines, importedFiles } = expandImports(fullPath, new Set(), 0) - if (totalLines > CLAUDEMD_HEALTHY_LINES) { - const short = cwd.startsWith(homedir()) ? '~' + cwd.slice(homedir().length) : cwd - bloated.push({ path: `${short}/${name}`, lines: lineCount, expandedLines: totalLines, imports: importedFiles }) - } - } catch { continue } + const { totalLines, importedFiles } = expandImports(fullPath, new Set(), 0) + if (totalLines > CLAUDEMD_HEALTHY_LINES) { + bloated.push({ path: `${shortHomePath(cwd)}/${name}`, expandedLines: totalLines, imports: importedFiles }) + } } } @@ -454,23 +544,22 @@ function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | null { const sorted = bloated.sort((a, b) => b.expandedLines - a.expandedLines) const worst = sorted[0] const totalExtraLines = sorted.reduce((s, b) => s + (b.expandedLines - CLAUDEMD_HEALTHY_LINES), 0) - const tokensPerLine = 25 - const tokensSaved = totalExtraLines * tokensPerLine + const tokensSaved = totalExtraLines * CLAUDEMD_TOKENS_PER_LINE const list = sorted.slice(0, 3).map(b => { - const importNote = b.imports > 0 ? ` + ${b.imports} imported` : '' + const importNote = b.imports > 0 ? ` with ${b.imports} @-import${b.imports > 1 ? 's' : ''}` : '' return `${b.path} (${b.expandedLines} lines${importNote})` }).join(', ') return { - title: 'TRIM BLOATED CLAUDE.md', - explanation: `${list}. Every line loads into every API call as context, including @-imports. Beyond ${CLAUDEMD_HEALTHY_LINES} lines, the extra ~${totalExtraLines} lines cost ~${formatTokens(tokensSaved)} tokens per call.`, - impact: worst.expandedLines > 400 ? 'high' : 'medium', + title: `Your CLAUDE.md is too long`, + explanation: `${list}. CLAUDE.md plus all @-imported files load into every API call. Trimming below ${CLAUDEMD_HEALTHY_LINES} lines saves ~${formatTokens(tokensSaved)} tokens per call.`, + impact: worst.expandedLines > CLAUDEMD_HIGH_THRESHOLD_LINES ? 'high' : 'medium', tokensSaved, fix: { type: 'paste', label: 'Ask Claude to trim it:', - text: 'Review CLAUDE.md and all @-imported files. Cut total expanded content to under 200 lines. Remove anything Claude can figure out from the code itself: file paths, architecture, imports. Keep only: rules, gotchas, and non-obvious conventions.', + text: `Review CLAUDE.md and all @-imported files. Cut total expanded content to under ${CLAUDEMD_HEALTHY_LINES} lines. Remove anything Claude can figure out from the code itself. Keep only rules, gotchas, and non-obvious conventions.`, }, } } @@ -478,31 +567,27 @@ function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | null { const READ_TOOL_NAMES = new Set(['Read', 'Grep', 'Glob', 'FileReadTool', 'GrepTool', 'GlobTool']) const EDIT_TOOL_NAMES = new Set(['Edit', 'Write', 'FileEditTool', 'FileWriteTool', 'NotebookEdit']) -function detectLowReadEditRatio(calls: ToolCall[]): WasteFinding | null { +export function detectLowReadEditRatio(calls: ToolCall[]): WasteFinding | null { let reads = 0 let edits = 0 - for (const call of calls) { if (READ_TOOL_NAMES.has(call.name)) reads++ else if (EDIT_TOOL_NAMES.has(call.name)) edits++ } - if (edits < 10) return null - + if (edits < MIN_EDITS_FOR_RATIO) return null const ratio = reads / edits - if (ratio >= 4) return null + if (ratio >= HEALTHY_READ_EDIT_RATIO) return null - const ratioStr = ratio.toFixed(1) - const impact: 'high' | 'medium' | 'low' = ratio < 2 ? 'high' : ratio < 3 ? 'medium' : 'low' - - const extraReadsNeeded = Math.round(edits * 4) - reads + const impact: Impact = ratio < LOW_RATIO_HIGH_THRESHOLD ? 'high' : ratio < LOW_RATIO_MEDIUM_THRESHOLD ? 'medium' : 'low' + const extraReadsNeeded = Math.max(Math.round(edits * HEALTHY_READ_EDIT_RATIO) - reads, 0) const tokensSaved = extraReadsNeeded * AVG_TOKENS_PER_READ return { - title: 'CLAUDE IS EDITING WITHOUT READING', - explanation: `Read:Edit ratio is ${ratioStr}:1 (${reads} reads, ${edits} edits). Healthy is 4:1+. A low ratio means Claude edits files without fully understanding the codebase first -- leading to more retries and wasted tokens.`, + title: 'Claude edits more than it reads', + explanation: `Claude made ${reads} reads and ${edits} edits (ratio ${ratio.toFixed(1)}:1). A healthy ratio is ${HEALTHY_READ_EDIT_RATIO}+ reads per edit. Editing without reading leads to retries and wasted tokens.`, impact, - tokensSaved: Math.max(tokensSaved, 0), + tokensSaved, fix: { type: 'paste', label: 'Add to your CLAUDE.md:', @@ -511,58 +596,63 @@ function detectLowReadEditRatio(calls: ToolCall[]): WasteFinding | null { } } -function detectCacheBloat(apiCalls: ApiCallMeta[]): WasteFinding | null { - if (apiCalls.length < 10) return null +function computeBudgetAwareCacheBaseline(projects: ProjectSummary[]): number { + const sessions = projects.flatMap(p => p.sessions) + if (sessions.length === 0) return 50_000 + const cacheWrites = sessions.map(s => s.totalCacheWriteTokens).filter(n => n > 0) + if (cacheWrites.length < MIN_API_CALLS_FOR_CACHE) return 50_000 + const sorted = cacheWrites.sort((a, b) => a - b) + return sorted[Math.floor(sorted.length * 0.25)] || 50_000 +} + +export function detectCacheBloat(apiCalls: ApiCallMeta[], projects: ProjectSummary[]): WasteFinding | null { + if (apiCalls.length < MIN_API_CALLS_FOR_CACHE) return null const sorted = apiCalls.map(c => c.cacheCreationTokens).sort((a, b) => a - b) const median = sorted[Math.floor(sorted.length / 2)] + const baseline = computeBudgetAwareCacheBaseline(projects) + const bloatThreshold = baseline * 1.4 - if (median < 55000) return null + if (median < bloatThreshold) return null const versionCounts = new Map() for (const call of apiCalls) { if (!call.version) continue - const v = call.version - const entry = versionCounts.get(v) ?? { total: 0, count: 0 } + const entry = versionCounts.get(call.version) ?? { total: 0, count: 0 } entry.total += call.cacheCreationTokens entry.count++ - versionCounts.set(v, entry) + versionCounts.set(call.version, entry) } - const versionAvgs = [...versionCounts.entries()] .filter(([, d]) => d.count >= 5) - .map(([v, d]) => ({ version: v, avg: Math.round(d.total / d.count), count: d.count })) + .map(([v, d]) => ({ version: v, avg: Math.round(d.total / d.count) })) .sort((a, b) => b.avg - a.avg) - const excess = median - 50000 + const excess = median - baseline const tokensSaved = excess * apiCalls.length let versionNote = '' if (versionAvgs.length >= 2) { - const highest = versionAvgs[0] - const lowest = versionAvgs[versionAvgs.length - 1] - if (highest.avg - lowest.avg > 10000) { - versionNote = ` Version ${highest.version} averages ${formatTokens(highest.avg)} vs ${lowest.version} at ${formatTokens(lowest.avg)}.` + const [high, ...rest] = versionAvgs + const low = rest[rest.length - 1] + if (high.avg - low.avg > 10_000) { + versionNote = ` Version ${high.version} averages ${formatTokens(high.avg)} vs ${low.version} at ${formatTokens(low.avg)}.` } } return { - title: 'HIGH CACHE CREATION OVERHEAD', - explanation: `Median cache_creation per call is ${formatTokens(median)} tokens (baseline ~50K). The extra ~${formatTokens(excess)} tokens per call may be server-injected content invisible to you.${versionNote} See anthropics/claude-code#46917.`, - impact: excess > 15000 ? 'high' : 'medium', + title: 'Session warmup is unusually large', + explanation: `Median cache_creation per call is ${formatTokens(median)} tokens, about ${formatTokens(excess)} above your baseline of ${formatTokens(baseline)}.${versionNote}`, + impact: excess > CACHE_EXCESS_HIGH_THRESHOLD ? 'high' : 'medium', tokensSaved, fix: { type: 'paste', - label: 'Spoof older User-Agent to reduce overhead:', + label: 'Check for recent Claude Code updates or heavy MCP/skill additions. As a workaround (not officially supported):', text: 'export ANTHROPIC_CUSTOM_HEADERS=\'User-Agent: claude-cli/2.1.98 (external, sdk-cli)\'', }, } } -const TOKENS_PER_AGENT_DEF = 80 -const TOKENS_PER_COMMAND_DEF = 60 -const SKILL_FRONTMATTER_TOKENS = 80 - async function listMarkdownFiles(dir: string): Promise { if (!existsSync(dir)) return [] try { @@ -583,9 +673,8 @@ async function listSkillDirs(dir: string): Promise { } catch { return [] } } -async function detectGhostAgents(calls: ToolCall[]): Promise { - const agentDir = join(homedir(), '.claude', 'agents') - const defined = await listMarkdownFiles(agentDir) +export async function detectGhostAgents(calls: ToolCall[]): Promise { + const defined = await listMarkdownFiles(join(homedir(), '.claude', 'agents')) if (defined.length === 0) return null const invoked = new Set() @@ -602,9 +691,9 @@ async function detectGhostAgents(calls: ToolCall[]): Promise 5 ? `, +${ghosts.length - 5} more` : '') return { - title: 'REMOVE UNUSED CUSTOM AGENTS', - explanation: `${ghosts.length} agent definition${ghosts.length > 1 ? 's' : ''} in ~/.claude/agents/ never invoked: ${list}. Each agent adds ~${TOKENS_PER_AGENT_DEF} tokens of description to the Task tool schema on every session.`, - impact: ghosts.length >= 5 ? 'high' : ghosts.length >= 2 ? 'medium' : 'low', + title: `${ghosts.length} custom agent${ghosts.length > 1 ? 's' : ''} you never use`, + explanation: `Defined in ~/.claude/agents/ but never invoked in this period: ${list}. Each adds ~${TOKENS_PER_AGENT_DEF} tokens to the Task tool schema on every session.`, + impact: ghosts.length >= GHOST_AGENTS_HIGH_THRESHOLD ? 'high' : ghosts.length >= GHOST_AGENTS_MEDIUM_THRESHOLD ? 'medium' : 'low', tokensSaved, fix: { type: 'command', @@ -614,9 +703,8 @@ async function detectGhostAgents(calls: ToolCall[]): Promise { - const skillDir = join(homedir(), '.claude', 'skills') - const defined = await listSkillDirs(skillDir) +export async function detectGhostSkills(calls: ToolCall[]): Promise { + const defined = await listSkillDirs(join(homedir(), '.claude', 'skills')) if (defined.length === 0) return null const invoked = new Set() @@ -627,15 +715,15 @@ async function detectGhostSkills(calls: ToolCall[]): Promise !invoked.has(name)) - if (ghosts.length === 0 || ghosts.length < 3) return null + if (ghosts.length === 0) return null - const tokensSaved = ghosts.length * SKILL_FRONTMATTER_TOKENS + const tokensSaved = ghosts.length * TOKENS_PER_SKILL_DEF const list = ghosts.slice(0, 5).join(', ') + (ghosts.length > 5 ? `, +${ghosts.length - 5} more` : '') return { - title: 'REMOVE UNUSED SKILLS', - explanation: `${ghosts.length} skill${ghosts.length > 1 ? 's' : ''} in ~/.claude/skills/ never invoked: ${list}. Each skill's frontmatter adds ~${SKILL_FRONTMATTER_TOKENS} tokens to the Skill tool invocation index on every session.`, - impact: ghosts.length >= 10 ? 'high' : ghosts.length >= 5 ? 'medium' : 'low', + title: `${ghosts.length} skill${ghosts.length > 1 ? 's' : ''} you never use`, + explanation: `In ~/.claude/skills/ but not invoked this period: ${list}. Each adds ~${TOKENS_PER_SKILL_DEF} tokens of metadata to every session.`, + impact: ghosts.length >= GHOST_SKILLS_HIGH_THRESHOLD ? 'high' : ghosts.length >= GHOST_SKILLS_MEDIUM_THRESHOLD ? 'medium' : 'low', tokensSaved, fix: { type: 'command', @@ -645,17 +733,15 @@ async function detectGhostSkills(calls: ToolCall[]): Promise { - const cmdDir = join(homedir(), '.claude', 'commands') - const defined = await listMarkdownFiles(cmdDir) +export async function detectGhostCommands(userMessages: string[]): Promise { + const defined = await listMarkdownFiles(join(homedir(), '.claude', 'commands')) if (defined.length === 0) return null const invoked = new Set() - const cmdPattern = /([^<]+)<\/command-name>|\/(\w+[-\w]*)/g for (const msg of userMessages) { - const matches = msg.matchAll(cmdPattern) - for (const m of matches) { - const name = (m[1] || m[2] || '').replace(/^\//, '') + COMMAND_PATTERN.lastIndex = 0 + for (const m of msg.matchAll(COMMAND_PATTERN)) { + const name = (m[1] || m[2] || '').trim() if (name) invoked.add(name) } } @@ -667,9 +753,9 @@ async function detectGhostCommands(userMessages: string[]): Promise 5 ? `, +${ghosts.length - 5} more` : '') return { - title: 'REMOVE UNUSED SLASH COMMANDS', - explanation: `${ghosts.length} slash command${ghosts.length > 1 ? 's' : ''} in ~/.claude/commands/ never used: ${list}. Each adds ~${TOKENS_PER_COMMAND_DEF} tokens of definition per session.`, - impact: ghosts.length >= 10 ? 'medium' : 'low', + title: `${ghosts.length} slash command${ghosts.length > 1 ? 's' : ''} you never use`, + explanation: `In ~/.claude/commands/ but not referenced this period: ${list}. Each adds ~${TOKENS_PER_COMMAND_DEF} tokens of definition per session.`, + impact: ghosts.length >= GHOST_COMMANDS_MEDIUM_THRESHOLD ? 'medium' : 'low', tokensSaved, fix: { type: 'command', @@ -679,36 +765,137 @@ async function detectGhostCommands(userMessages: string[]): Promise = { + high: HEALTH_WEIGHT_HIGH, + medium: HEALTH_WEIGHT_MEDIUM, + low: HEALTH_WEIGHT_LOW, +} + +export function computeHealth(findings: WasteFinding[]): { score: number; grade: HealthGrade } { + if (findings.length === 0) return { score: 100, grade: 'A' } + let penalty = 0 + for (const f of findings) penalty += HEALTH_WEIGHTS[f.impact] ?? 0 + const score = Math.max(0, 100 - Math.min(HEALTH_MAX_PENALTY, penalty)) + const grade: HealthGrade = + score >= GRADE_A_MIN ? 'A' : + score >= GRADE_B_MIN ? 'B' : + score >= GRADE_C_MIN ? 'C' : + score >= GRADE_D_MIN ? 'D' : 'F' + return { score, grade } +} + +const URGENCY_WEIGHTS: Record = { high: 1, medium: 0.5, low: 0.2 } + +function urgencyScore(f: WasteFinding): number { + const normalizedTokens = Math.min(1, f.tokensSaved / URGENCY_TOKEN_NORMALIZE) + return URGENCY_WEIGHTS[f.impact] * URGENCY_IMPACT_WEIGHT + normalizedTokens * URGENCY_TOKEN_WEIGHT +} + +// ============================================================================ +// Cost estimation +// ============================================================================ + +const INPUT_COST_RATIO = 0.7 +const DEFAULT_COST_PER_TOKEN = 0 + function computeInputCostRate(projects: ProjectSummary[]): number { const sessions = projects.flatMap(p => p.sessions) const totalCost = sessions.reduce((s, sess) => s + sess.totalCostUSD, 0) const totalTokens = sessions.reduce((s, sess) => s + sess.totalInputTokens + sess.totalCacheReadTokens + sess.totalCacheWriteTokens, 0) - if (totalTokens === 0 || totalCost === 0) return 1 / 1_000_000 - return (totalCost * 0.7) / totalTokens + if (totalTokens === 0 || totalCost === 0) return DEFAULT_COST_PER_TOKEN + return (totalCost * INPUT_COST_RATIO) / totalTokens } +// ============================================================================ +// Main entry points +// ============================================================================ + +export async function scanAndDetect( + projects: ProjectSummary[], + dateRange?: DateRange, +): Promise { + const costRate = computeInputCostRate(projects) + const { toolCalls, projectCwds, apiCalls, userMessages } = await scanSessions(dateRange) + + const findings: WasteFinding[] = [] + const syncDetectors: Array<() => WasteFinding | null> = [ + () => detectCacheBloat(apiCalls, projects), + () => detectLowReadEditRatio(toolCalls), + () => detectJunkReads(toolCalls), + () => detectDuplicateReads(toolCalls), + () => detectUnusedMcp(toolCalls, projects, projectCwds), + () => detectMissingClaudeignore(projectCwds), + () => detectBloatedClaudeMd(projectCwds), + () => detectBashBloat(), + ] + for (const detect of syncDetectors) { + const finding = detect() + if (finding) findings.push(finding) + } + + const ghostResults = await Promise.all([ + detectGhostAgents(toolCalls), + detectGhostSkills(toolCalls), + detectGhostCommands(userMessages), + ]) + for (const f of ghostResults) if (f) findings.push(f) + + findings.sort((a, b) => urgencyScore(b) - urgencyScore(a)) + const { score, grade } = computeHealth(findings) + return { findings, costRate, healthScore: score, healthGrade: grade } +} + +// ============================================================================ +// CLI rendering +// ============================================================================ + +const PANEL_WIDTH = 62 +const SEP = '\u2500' +const IMPACT_COLORS: Record = { high: RED, medium: ORANGE, low: DIM } +const GRADE_COLORS: Record = { A: GREEN, B: GREEN, C: GOLD, D: ORANGE, F: RED } + function wrap(text: string, width: number, indent: string): string { const words = text.split(' ') const lines: string[] = [] @@ -725,24 +912,21 @@ function wrap(text: string, width: number, indent: string): string { return lines.join('\n') } -const IMPACT_COLORS: Record = { high: '#F55B5B', medium: ORANGE, low: DIM } - -function renderFinding(n: number, f: WasteFinding, costRate: number, W: number): string[] { +function renderFinding(n: number, f: WasteFinding, costRate: number): string[] { const lines: string[] = [] - const sep = '\u2500' const costSaved = f.tokensSaved * costRate const impactLabel = f.impact.charAt(0).toUpperCase() + f.impact.slice(1) const savings = `~${formatTokens(f.tokensSaved)} tokens (~${formatCost(costSaved)})` - const titlePad = W - f.title.length - impactLabel.length - 8 - const pad = titlePad > 0 ? ' ' + sep.repeat(titlePad) + ' ' : ' ' + const titlePad = PANEL_WIDTH - f.title.length - impactLabel.length - 8 + const pad = titlePad > 0 ? ' ' + SEP.repeat(titlePad) + ' ' : ' ' - lines.push(chalk.hex(DIM)(` ${sep}${sep}${sep} `) + + lines.push(chalk.hex(DIM)(` ${SEP}${SEP}${SEP} `) + chalk.bold(`${n}. ${f.title}`) + chalk.hex(DIM)(pad) + - chalk.hex(IMPACT_COLORS[f.impact] ?? DIM)(impactLabel) + - chalk.hex(DIM)(` ${sep}${sep}${sep}`)) + chalk.hex(IMPACT_COLORS[f.impact])(impactLabel) + + chalk.hex(DIM)(` ${SEP}${SEP}${SEP}`)) lines.push('') - lines.push(wrap(f.explanation, W - 4, ' ')) + lines.push(wrap(f.explanation, PANEL_WIDTH - 4, ' ')) lines.push('') lines.push(chalk.hex(GOLD)(` Potential savings: ${savings}`)) lines.push('') @@ -750,25 +934,18 @@ function renderFinding(n: number, f: WasteFinding, costRate: number, W: number): const a = f.fix if (a.type === 'file-content') { lines.push(chalk.hex(DIM)(` ${a.label}`)) - for (const line of a.content.split('\n')) { - lines.push(chalk.hex(CYAN)(` ${line}`)) - } + for (const line of a.content.split('\n')) lines.push(chalk.hex(CYAN)(` ${line}`)) } else if (a.type === 'command') { lines.push(chalk.hex(DIM)(` ${a.label}`)) - for (const line of a.text.split('\n')) { - lines.push(chalk.hex(CYAN)(` ${line}`)) - } + for (const line of a.text.split('\n')) lines.push(chalk.hex(CYAN)(` ${line}`)) } else { lines.push(chalk.hex(DIM)(` ${a.label}`)) lines.push(chalk.hex(CYAN)(` ${a.text}`)) } - lines.push('') return lines } -const GRADE_COLORS: Record = { A: GREEN, B: GREEN, C: GOLD, D: ORANGE, F: '#F55B5B' } - function renderOptimize( findings: WasteFinding[], costRate: number, @@ -780,23 +957,21 @@ function renderOptimize( healthGrade: HealthGrade, ): string { const lines: string[] = [] - const W = 62 - const sep = '\u2500' - lines.push('') - lines.push(` ${chalk.bold.hex(ORANGE)('CodeBurn Optimize')}${chalk.dim(' ' + periodLabel)}`) - lines.push(chalk.hex(DIM)(' ' + sep.repeat(W))) + lines.push(` ${chalk.bold.hex(ORANGE)('CodeBurn -- config health')}${chalk.dim(' ' + periodLabel)}`) + lines.push(chalk.hex(DIM)(' ' + SEP.repeat(PANEL_WIDTH))) + const issueSuffix = findings.length > 0 ? `, ${findings.length} issue${findings.length > 1 ? 's' : ''}` : '' lines.push(' ' + [ `${sessionCount} sessions`, `${callCount.toLocaleString()} calls`, chalk.hex(GOLD)(formatCost(periodCost)), - `Setup: ${chalk.bold.hex(GRADE_COLORS[healthGrade])(healthGrade)} ${chalk.dim(`(${healthScore}/100)`)}`, + `Health: ${chalk.bold.hex(GRADE_COLORS[healthGrade])(healthGrade)}${chalk.dim(` (${healthScore}/100${issueSuffix})`)}`, ].join(chalk.hex(DIM)(' '))) lines.push('') if (findings.length === 0) { - lines.push(chalk.hex(GREEN)(' No waste detected -- your setup looks clean.')) + lines.push(chalk.hex(GREEN)(' Nothing to fix. Your setup is lean.')) lines.push('') return lines.join('\n') } @@ -806,79 +981,20 @@ function renderOptimize( const pctRaw = periodCost > 0 ? (totalCost / periodCost) * 100 : 0 const pct = pctRaw >= 1 ? pctRaw.toFixed(0) : pctRaw.toFixed(1) - lines.push(chalk.hex(GREEN)(` Potential savings: ~${formatTokens(totalTokens)} tokens (~${formatCost(totalCost)}, ~${pct}% of spend)`)) + const costText = costRate > 0 ? ` (~${formatCost(totalCost)}, ~${pct}% of spend)` : '' + lines.push(chalk.hex(GREEN)(` Potential savings: ~${formatTokens(totalTokens)} tokens${costText}`)) lines.push('') - const sorted = findings - - for (let i = 0; i < sorted.length; i++) { - lines.push(...renderFinding(i + 1, sorted[i], costRate, W)) + for (let i = 0; i < findings.length; i++) { + lines.push(...renderFinding(i + 1, findings[i], costRate)) } - lines.push(chalk.hex(DIM)(' ' + sep.repeat(W))) - lines.push(chalk.dim(' Token estimates are approximate. Actual savings vary by file size and model.')) + lines.push(chalk.hex(DIM)(' ' + SEP.repeat(PANEL_WIDTH))) + lines.push(chalk.dim(' Estimates only.')) lines.push('') - return lines.join('\n') } -function computeHealth(findings: WasteFinding[]): { score: number; grade: HealthGrade } { - if (findings.length === 0) return { score: 100, grade: 'A' } - - const impactWeight: Record = { high: 15, medium: 7, low: 3 } - let penalty = 0 - for (const f of findings) penalty += impactWeight[f.impact] ?? 0 - - const score = Math.max(0, 100 - Math.min(80, penalty)) - const grade: HealthGrade = score >= 90 ? 'A' : score >= 75 ? 'B' : score >= 55 ? 'C' : score >= 30 ? 'D' : 'F' - return { score, grade } -} - -function urgencyScore(f: WasteFinding): number { - const impactWeight: Record = { high: 1, medium: 0.5, low: 0.2 } - const normalizedTokens = Math.min(1, f.tokensSaved / 500_000) - return (impactWeight[f.impact] ?? 0) * 0.7 + normalizedTokens * 0.3 -} - -export async function scanAndDetect( - projects: ProjectSummary[], - dateRange?: DateRange, -): Promise { - const costRate = computeInputCostRate(projects) - const { toolCalls, projectCwds, apiCalls, userMessages } = await scanSessions(dateRange) - - const findings: WasteFinding[] = [] - const syncDetectors = [ - () => detectCacheBloat(apiCalls), - () => detectLowReadEditRatio(toolCalls), - () => detectJunkReads(toolCalls), - () => detectDuplicateReads(toolCalls), - () => detectUnusedMcp(toolCalls, projects, projectCwds), - () => detectMissingClaudeignore(projectCwds), - () => detectBloatedClaudeMd(projectCwds), - () => detectBashBloat(), - ] - for (const detect of syncDetectors) { - const finding = detect() - if (finding) findings.push(finding) - } - - const asyncDetectors = [ - () => detectGhostAgents(toolCalls), - () => detectGhostSkills(toolCalls), - () => detectGhostCommands(userMessages), - ] - for (const detect of asyncDetectors) { - const finding = await detect() - if (finding) findings.push(finding) - } - - findings.sort((a, b) => urgencyScore(b) - urgencyScore(a)) - - const { score, grade } = computeHealth(findings) - return { findings, costRate, healthScore: score, healthGrade: grade } -} - export async function runOptimize( projects: ProjectSummary[], periodLabel: string, @@ -889,7 +1005,7 @@ export async function runOptimize( return } - process.stderr.write(chalk.dim(' Scanning sessions for waste patterns...\n')) + process.stderr.write(chalk.dim(' Analyzing your sessions...\n')) const { findings, costRate, healthScore, healthGrade } = await scanAndDetect(projects, dateRange) const sessions = projects.flatMap(p => p.sessions) diff --git a/tests/optimize.test.ts b/tests/optimize.test.ts index b77ba25..fc2954d 100644 --- a/tests/optimize.test.ts +++ b/tests/optimize.test.ts @@ -1,318 +1,258 @@ -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' -import { existsSync, readFileSync } from 'fs' -import { homedir } from 'os' -import { join } from 'path' +import { describe, it, expect } from 'vitest' -vi.mock('fs', async () => { - const actual = await vi.importActual('fs') - return { ...actual, existsSync: vi.fn(), readFileSync: vi.fn() } -}) +import { + detectJunkReads, + detectDuplicateReads, + detectLowReadEditRatio, + detectCacheBloat, + detectBloatedClaudeMd, + detectMissingClaudeignore, + computeHealth, + type ToolCall, + type ApiCallMeta, + type WasteFinding, +} from '../src/optimize.js' +import type { ProjectSummary } from '../src/types.js' -const mockExistsSync = vi.mocked(existsSync) -const mockReadFileSync = vi.mocked(readFileSync) - -type ToolCall = { - name: string - input: Record - sessionId: string - project: string +function call(name: string, input: Record, sessionId = 's1', project = 'p1'): ToolCall { + return { name, input, sessionId, project } } -// Re-implement detector logic for isolated testing -// This avoids importing the module which has side-effect imports - -function detectJunkReadsLogic(calls: ToolCall[]) { - const JUNK_PATTERN = /\/(node_modules|\.git|dist|build|__pycache__|\.next|\.nuxt|\.output|coverage|\.cache|\.tsbuildinfo|\.venv|venv|\.svn|\.hg)\// - const readCalls = calls.filter(c => c.name === 'Read' || c.name === 'FileReadTool') - const dirCounts = new Map() - let total = 0 - for (const call of readCalls) { - const fp = call.input.file_path as string | undefined - if (!fp || !JUNK_PATTERN.test(fp)) continue - total++ - const dirs = ['node_modules', '.git', 'dist', 'build', '__pycache__', '.next', '.venv', 'venv'] - for (const d of dirs) { - if (fp.includes(`/${d}/`)) { dirCounts.set(d, (dirCounts.get(d) ?? 0) + 1); break } - } - } - return { total, dirCounts } +function emptyProjects(): ProjectSummary[] { + return [] } -function detectDuplicateReadsLogic(calls: ToolCall[]) { - const JUNK_PATTERN = /\/(node_modules|\.git|dist|build|__pycache__|\.next)\// - const readCalls = calls.filter(c => c.name === 'Read' || c.name === 'FileReadTool') - const sessionFiles = new Map>() - for (const call of readCalls) { - const fp = call.input.file_path as string | undefined - if (!fp || JUNK_PATTERN.test(fp)) continue - const key = `${call.project}:${call.sessionId}` - if (!sessionFiles.has(key)) sessionFiles.set(key, new Map()) - const fm = sessionFiles.get(key)! - fm.set(fp, (fm.get(fp) ?? 0) + 1) - } - let totalDuplicates = 0 - for (const fm of sessionFiles.values()) { - for (const [, count] of fm) { - if (count > 1) totalDuplicates += count - 1 - } - } - return totalDuplicates -} - -describe('optimize: junk reads detection', () => { - it('detects node_modules reads', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/node_modules/foo/index.js' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/node_modules/bar/package.json' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/node_modules/baz/lib.js' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, +describe('detectJunkReads', () => { + it('returns null below minimum threshold', () => { + const calls = [ + call('Read', { file_path: '/x/node_modules/a.js' }), + call('Read', { file_path: '/x/node_modules/b.js' }), ] - const result = detectJunkReadsLogic(calls) - expect(result.total).toBe(3) - expect(result.dirCounts.get('node_modules')).toBe(3) + expect(detectJunkReads(calls)).toBeNull() }) - it('detects .git reads', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/.git/config' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/.git/HEAD' }, sessionId: 's1', project: 'p1' }, + it('flags when threshold is met', () => { + const calls = [ + call('Read', { file_path: '/x/node_modules/a.js' }), + call('Read', { file_path: '/x/node_modules/b.js' }), + call('Read', { file_path: '/x/.git/config' }), ] - const result = detectJunkReadsLogic(calls) - expect(result.total).toBe(2) - expect(result.dirCounts.get('.git')).toBe(2) + const finding = detectJunkReads(calls) + expect(finding).not.toBeNull() + expect(finding!.impact).toBe('low') }) - it('detects mixed junk directories', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/node_modules/a.js' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/dist/bundle.js' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/.venv/lib/python/site.py' }, sessionId: 's1', project: 'p1' }, - ] - const result = detectJunkReadsLogic(calls) - expect(result.total).toBe(3) - expect(result.dirCounts.get('node_modules')).toBe(1) - expect(result.dirCounts.get('dist')).toBe(1) - expect(result.dirCounts.get('.venv')).toBe(1) + it('scales impact with read count', () => { + const make = (n: number) => Array.from({ length: n }, (_, i) => + call('Read', { file_path: `/x/node_modules/file-${i}.js` }) + ) + expect(detectJunkReads(make(25))!.impact).toBe('high') + expect(detectJunkReads(make(10))!.impact).toBe('medium') }) it('ignores non-junk paths', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/src/index.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/README.md' }, sessionId: 's1', project: 'p1' }, + const calls = [ + call('Read', { file_path: '/x/src/a.ts' }), + call('Read', { file_path: '/x/src/b.ts' }), + call('Read', { file_path: '/x/README.md' }), ] - const result = detectJunkReadsLogic(calls) - expect(result.total).toBe(0) + expect(detectJunkReads(calls)).toBeNull() }) - it('ignores non-Read tools', () => { - const calls: ToolCall[] = [ - { name: 'Edit', input: { file_path: '/project/node_modules/foo.js' }, sessionId: 's1', project: 'p1' }, - { name: 'Bash', input: { command: 'ls node_modules' }, sessionId: 's1', project: 'p1' }, + it('ignores non-read tools', () => { + const calls = [ + call('Edit', { file_path: '/x/node_modules/a.js' }), + call('Bash', { command: 'ls node_modules' }), + call('Grep', { pattern: 'test', path: '/x/node_modules' }), ] - const result = detectJunkReadsLogic(calls) - expect(result.total).toBe(0) + expect(detectJunkReads(calls)).toBeNull() }) - it('handles missing file_path', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: {}, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: null as unknown as string }, sessionId: 's1', project: 'p1' }, + it('handles missing file_path gracefully', () => { + const calls = [ + call('Read', {}), + call('Read', { file_path: null as unknown as string }), ] - const result = detectJunkReadsLogic(calls) - expect(result.total).toBe(0) + expect(detectJunkReads(calls)).toBeNull() + }) + + it('builds .claudeignore content from detected + common extras', () => { + const calls = Array.from({ length: 5 }, () => call('Read', { file_path: '/x/node_modules/a.js' })) + const finding = detectJunkReads(calls)! + expect(finding.fix.type).toBe('file-content') + if (finding.fix.type === 'file-content') { + expect(finding.fix.content).toContain('node_modules') + } }) }) -describe('optimize: duplicate reads detection', () => { - it('detects files read multiple times in same session', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, +describe('detectDuplicateReads', () => { + it('counts same file read multiple times in same session', () => { + const calls = [ + ...Array.from({ length: 4 }, () => call('Read', { file_path: '/src/a.ts' }, 's1')), + ...Array.from({ length: 4 }, () => call('Read', { file_path: '/src/b.ts' }, 's1')), ] - expect(detectDuplicateReadsLogic(calls)).toBe(2) + const finding = detectDuplicateReads(calls) + expect(finding).not.toBeNull() }) - it('does not count reads across different sessions', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/src/main.ts' }, sessionId: 's2', project: 'p1' }, + it('does not count across sessions', () => { + const calls = [ + call('Read', { file_path: '/src/a.ts' }, 's1'), + call('Read', { file_path: '/src/a.ts' }, 's2'), + call('Read', { file_path: '/src/a.ts' }, 's3'), ] - expect(detectDuplicateReadsLogic(calls)).toBe(0) + expect(detectDuplicateReads(calls)).toBeNull() }) - it('excludes junk directory reads from duplicate count', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/node_modules/foo.js' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/node_modules/foo.js' }, sessionId: 's1', project: 'p1' }, - ] - expect(detectDuplicateReadsLogic(calls)).toBe(0) + it('excludes junk directory reads', () => { + const calls = Array.from({ length: 10 }, () => + call('Read', { file_path: '/x/node_modules/foo.js' }, 's1') + ) + expect(detectDuplicateReads(calls)).toBeNull() }) - it('counts duplicates per file independently', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/a.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/a.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/b.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/b.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/b.ts' }, sessionId: 's1', project: 'p1' }, + it('returns null for single reads', () => { + const calls = [ + call('Read', { file_path: '/src/a.ts' }, 's1'), + call('Read', { file_path: '/src/b.ts' }, 's1'), ] - expect(detectDuplicateReadsLogic(calls)).toBe(3) - }) - - it('returns 0 for single reads', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: { file_path: '/project/a.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/b.ts' }, sessionId: 's1', project: 'p1' }, - { name: 'Read', input: { file_path: '/project/c.ts' }, sessionId: 's1', project: 'p1' }, - ] - expect(detectDuplicateReadsLogic(calls)).toBe(0) - }) - - it('handles empty calls', () => { - expect(detectDuplicateReadsLogic([])).toBe(0) + expect(detectDuplicateReads(calls)).toBeNull() }) }) -function detectReadEditRatioLogic(calls: ToolCall[]) { - const READ_NAMES = new Set(['Read', 'Grep', 'Glob', 'FileReadTool', 'GrepTool', 'GlobTool']) - const EDIT_NAMES = new Set(['Edit', 'Write', 'FileEditTool', 'FileWriteTool', 'NotebookEdit']) - let reads = 0, edits = 0 - for (const c of calls) { - if (READ_NAMES.has(c.name)) reads++ - else if (EDIT_NAMES.has(c.name)) edits++ - } - return { reads, edits, ratio: edits > 0 ? reads / edits : Infinity } -} - -describe('optimize: read:edit ratio detection', () => { - it('detects low ratio (edit-heavy)', () => { - const calls: ToolCall[] = [ - ...Array(5).fill(null).map(() => ({ name: 'Read', input: {}, sessionId: 's1', project: 'p1' })), - ...Array(10).fill(null).map(() => ({ name: 'Edit', input: {}, sessionId: 's1', project: 'p1' })), +describe('detectLowReadEditRatio', () => { + it('returns null below minimum edit count', () => { + const calls = [ + call('Edit', {}), + call('Edit', {}), + call('Read', {}), ] - const { ratio } = detectReadEditRatioLogic(calls) - expect(ratio).toBe(0.5) + expect(detectLowReadEditRatio(calls)).toBeNull() }) - it('healthy ratio passes (4:1+)', () => { - const calls: ToolCall[] = [ - ...Array(40).fill(null).map(() => ({ name: 'Read', input: {}, sessionId: 's1', project: 'p1' })), - ...Array(10).fill(null).map(() => ({ name: 'Edit', input: {}, sessionId: 's1', project: 'p1' })), + it('returns null when ratio is healthy', () => { + const calls = [ + ...Array.from({ length: 40 }, () => call('Read', {})), + ...Array.from({ length: 10 }, () => call('Edit', {})), ] - const { ratio } = detectReadEditRatioLogic(calls) - expect(ratio).toBe(4) + expect(detectLowReadEditRatio(calls)).toBeNull() }) - it('counts Grep and Glob as reads', () => { - const calls: ToolCall[] = [ - { name: 'Read', input: {}, sessionId: 's1', project: 'p1' }, - { name: 'Grep', input: {}, sessionId: 's1', project: 'p1' }, - { name: 'Glob', input: {}, sessionId: 's1', project: 'p1' }, - { name: 'Edit', input: {}, sessionId: 's1', project: 'p1' }, + it('flags when edits outpace reads', () => { + const calls = [ + ...Array.from({ length: 5 }, () => call('Read', {})), + ...Array.from({ length: 10 }, () => call('Edit', {})), ] - const { reads, edits } = detectReadEditRatioLogic(calls) - expect(reads).toBe(3) - expect(edits).toBe(1) + const finding = detectLowReadEditRatio(calls) + expect(finding).not.toBeNull() + expect(finding!.impact).toBe('high') + }) + + it('counts Grep and Glob as reads for ratio', () => { + const calls = [ + ...Array.from({ length: 40 }, () => call('Grep', {})), + ...Array.from({ length: 10 }, () => call('Edit', {})), + ] + expect(detectLowReadEditRatio(calls)).toBeNull() }) it('counts Write as edit', () => { - const calls: ToolCall[] = [ - { name: 'Write', input: {}, sessionId: 's1', project: 'p1' }, - { name: 'Edit', input: {}, sessionId: 's1', project: 'p1' }, + const calls = [ + ...Array.from({ length: 15 }, () => call('Read', {})), + ...Array.from({ length: 10 }, () => call('Write', {})), ] - const { edits } = detectReadEditRatioLogic(calls) - expect(edits).toBe(2) - }) - - it('ignores non-read non-edit tools', () => { - const calls: ToolCall[] = [ - { name: 'Bash', input: {}, sessionId: 's1', project: 'p1' }, - { name: 'Agent', input: {}, sessionId: 's1', project: 'p1' }, - { name: 'mcp__foo__bar', input: {}, sessionId: 's1', project: 'p1' }, - ] - const { reads, edits } = detectReadEditRatioLogic(calls) - expect(reads).toBe(0) - expect(edits).toBe(0) + const finding = detectLowReadEditRatio(calls) + expect(finding).not.toBeNull() }) }) -function computeHealthLogic(impacts: Array<'high' | 'medium' | 'low'>): { score: number; grade: string } { - if (impacts.length === 0) return { score: 100, grade: 'A' } - const impactWeight: Record = { high: 15, medium: 7, low: 3 } - let penalty = 0 - for (const i of impacts) penalty += impactWeight[i] ?? 0 - const score = Math.max(0, 100 - Math.min(80, penalty)) - const grade = score >= 90 ? 'A' : score >= 75 ? 'B' : score >= 55 ? 'C' : score >= 30 ? 'D' : 'F' - return { score, grade } -} +describe('detectCacheBloat', () => { + it('returns null below minimum api calls', () => { + const apiCalls: ApiCallMeta[] = [ + { cacheCreationTokens: 80000, version: '2.1.100' }, + { cacheCreationTokens: 80000, version: '2.1.100' }, + ] + expect(detectCacheBloat(apiCalls, emptyProjects())).toBeNull() + }) -describe('optimize: health score and grade', () => { - it('returns A with no findings', () => { - const { score, grade } = computeHealthLogic([]) + it('returns null when median is close to baseline', () => { + const apiCalls: ApiCallMeta[] = Array.from({ length: 20 }, () => ({ + cacheCreationTokens: 50000, + version: '2.1.98', + })) + expect(detectCacheBloat(apiCalls, emptyProjects())).toBeNull() + }) + + it('flags when median exceeds 1.4x baseline', () => { + const apiCalls: ApiCallMeta[] = Array.from({ length: 20 }, () => ({ + cacheCreationTokens: 80000, + version: '2.1.100', + })) + const finding = detectCacheBloat(apiCalls, emptyProjects()) + expect(finding).not.toBeNull() + }) +}) + +describe('detectBloatedClaudeMd', () => { + it('returns null when no projects have CLAUDE.md', () => { + const result = detectBloatedClaudeMd(new Set(['/nonexistent/path'])) + expect(result).toBeNull() + }) + + it('returns null for empty project set', () => { + const result = detectBloatedClaudeMd(new Set()) + expect(result).toBeNull() + }) +}) + +describe('detectMissingClaudeignore', () => { + it('returns null for empty set', () => { + expect(detectMissingClaudeignore(new Set())).toBeNull() + }) + + it('returns null for non-existent cwds', () => { + expect(detectMissingClaudeignore(new Set(['/does/not/exist']))).toBeNull() + }) +}) + +describe('computeHealth', () => { + it('returns A with 100 for no findings', () => { + const { score, grade } = computeHealth([]) expect(score).toBe(100) expect(grade).toBe('A') }) - it('one low finding keeps grade at A', () => { - const { score, grade } = computeHealthLogic(['low']) + function mockFinding(impact: 'high' | 'medium' | 'low'): WasteFinding { + return { + title: 't', explanation: 'e', impact, tokensSaved: 1000, + fix: { type: 'paste', label: 'l', text: 't' }, + } + } + + it('one low finding stays at A', () => { + const { score, grade } = computeHealth([mockFinding('low')]) expect(score).toBe(97) expect(grade).toBe('A') }) it('two high findings drop to C', () => { - const { score, grade } = computeHealthLogic(['high', 'high']) + const { score, grade } = computeHealth([mockFinding('high'), mockFinding('high')]) expect(score).toBe(70) expect(grade).toBe('C') }) - it('caps penalty at 80 to prevent going below 20', () => { - const impacts = Array(20).fill('high' as const) - const { score } = computeHealthLogic(impacts) + it('caps penalty at 80 to prevent score below 20', () => { + const findings = Array.from({ length: 20 }, () => mockFinding('high')) + const { score } = computeHealth(findings) expect(score).toBe(20) }) - it('mix produces D grade', () => { - const { score, grade } = computeHealthLogic(['high', 'high', 'medium', 'medium', 'low']) - expect(score).toBe(100 - 15 - 15 - 7 - 7 - 3) - expect(grade).toBe('D') - }) -}) - -function expandImportsLogic(content: string, resolveMap: Record, depth = 0): number { - if (depth > 5) return 0 - let total = content.split('\n').length - const matches = content.matchAll(/^@([^\s]+)/gm) - for (const m of matches) { - const key = m[1] || '' - if (resolveMap[key]) { - total += expandImportsLogic(resolveMap[key], resolveMap, depth + 1) - } - } - return total -} - -describe('optimize: @-import expansion', () => { - it('counts only the base file when no imports', () => { - const total = expandImportsLogic('line 1\nline 2\nline 3', {}) - expect(total).toBe(3) - }) - - it('expands single @-import', () => { - const main = 'line 1\n@./imported.md\nline 3' - const imported = 'i1\ni2\ni3\ni4\ni5' - expect(expandImportsLogic(main, { './imported.md': imported })).toBe(3 + 5) - }) - - it('expands nested @-imports recursively', () => { - const main = 'a\n@b.md' - const b = 'b1\nb2\n@c.md' - const c = 'c1\nc2\nc3' - expect(expandImportsLogic(main, { 'b.md': b, 'c.md': c })).toBe(2 + 3 + 3) - }) - - it('caps recursion depth', () => { - const circular = '@x.md' - expect(expandImportsLogic(circular, { 'x.md': circular })).toBeLessThan(10) + it('progresses grades predictably', () => { + expect(computeHealth([mockFinding('low')]).grade).toBe('A') + expect(computeHealth([mockFinding('medium')]).grade).toBe('A') + expect(computeHealth([mockFinding('medium'), mockFinding('medium')]).grade).toBe('B') + expect(computeHealth([mockFinding('high'), mockFinding('high'), mockFinding('high')]).grade).toBe('C') + expect(computeHealth([mockFinding('high'), mockFinding('high'), mockFinding('high'), mockFinding('high'), mockFinding('high')]).grade).toBe('F') }) }) From 7e4edf66b645a9a3a4726fb0b688b203455ab84f Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 06:35:39 -0700 Subject: [PATCH 04/13] perf(optimize): mtime pre-filter, parallel reads, result cache - runWithConcurrency helper runs file reads with configurable parallelism (default 16) instead of sequential await. - isFileStaleForRange skips files whose mtime is older than the date range start, avoiding unnecessary reads for narrow periods. - Result-level cache keyed on (dateRange, project fingerprint) with 60s TTL. Warm dashboard 'o' press now hits cache instead of rescanning. - Early-return when projects array is empty so empty-state path does not trigger filesystem walk. Measured CLI cold scan on 12K files, 1833 sessions week: before: 12-17s after: 6-7s Dashboard warm cache hit: <50ms. --- src/optimize.ts | 67 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 8 deletions(-) diff --git a/src/optimize.ts b/src/optimize.ts index 11b7172..7cb0e61 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -1,5 +1,5 @@ import chalk from 'chalk' -import { readdir, readFile } from 'fs/promises' +import { readdir, readFile, stat } from 'fs/promises' import { existsSync, readFileSync, statSync } from 'fs' import { basename, join } from 'path' import { homedir } from 'os' @@ -147,6 +147,9 @@ type ScanData = { // JSONL scanner // ============================================================================ +const FILE_READ_CONCURRENCY = 16 +const RESULT_CACHE_TTL_MS = 60_000 + async function collectJsonlFiles(dirPath: string): Promise { const files = await readdir(dirPath).catch(() => []) const result = files.filter(f => f.endsWith('.jsonl')).map(f => join(dirPath, f)) @@ -161,6 +164,29 @@ async function collectJsonlFiles(dirPath: string): Promise { return result } +async function isFileStaleForRange(filePath: string, range: DateRange | undefined): Promise { + if (!range) return false + try { + const s = await stat(filePath) + return s.mtimeMs < range.start.getTime() + } catch { return false } +} + +async function runWithConcurrency( + items: T[], + limit: number, + worker: (item: T) => Promise, +): Promise { + let idx = 0 + async function next(): Promise { + while (idx < items.length) { + const current = idx++ + await worker(items[current]) + } + } + await Promise.all(Array.from({ length: Math.min(limit, items.length) }, () => next())) +} + type ScanFileResult = { calls: ToolCall[] cwds: string[] @@ -258,18 +284,24 @@ async function scanSessions(dateRange?: DateRange): Promise { const allVersions = new Set() const allUserMessages: string[] = [] + const tasks: Array<{ file: string; project: string }> = [] for (const source of sources) { const files = await collectJsonlFiles(source.path) for (const file of files) { - const { calls, cwds, apiCalls, versions, userMessages } = await scanJsonlFile(file, source.project, dateRange) - allCalls.push(...calls) - for (const cwd of cwds) allCwds.add(cwd) - allApiCalls.push(...apiCalls) - for (const v of versions) if (v) allVersions.add(v) - allUserMessages.push(...userMessages) + if (await isFileStaleForRange(file, dateRange)) continue + tasks.push({ file, project: source.project }) } } + await runWithConcurrency(tasks, FILE_READ_CONCURRENCY, async ({ file, project }) => { + const { calls, cwds, apiCalls, versions, userMessages } = await scanJsonlFile(file, project, dateRange) + allCalls.push(...calls) + for (const cwd of cwds) allCwds.add(cwd) + allApiCalls.push(...apiCalls) + for (const v of versions) if (v) allVersions.add(v) + allUserMessages.push(...userMessages) + }) + return { toolCalls: allCalls, projectCwds: allCwds, apiCalls: allApiCalls, versions: allVersions, userMessages: allUserMessages } } @@ -852,10 +884,27 @@ function computeInputCostRate(projects: ProjectSummary[]): number { // Main entry points // ============================================================================ +type CacheEntry = { data: OptimizeResult; ts: number } +const resultCache = new Map() + +function cacheKey(projects: ProjectSummary[], dateRange: DateRange | undefined): string { + const dr = dateRange ? `${dateRange.start.getTime()}-${dateRange.end.getTime()}` : 'all' + const fingerprint = projects.length + ':' + projects.reduce((s, p) => s + p.totalApiCalls, 0) + return `${dr}:${fingerprint}` +} + export async function scanAndDetect( projects: ProjectSummary[], dateRange?: DateRange, ): Promise { + if (projects.length === 0) { + return { findings: [], costRate: 0, healthScore: 100, healthGrade: 'A' } + } + + const key = cacheKey(projects, dateRange) + const cached = resultCache.get(key) + if (cached && Date.now() - cached.ts < RESULT_CACHE_TTL_MS) return cached.data + const costRate = computeInputCostRate(projects) const { toolCalls, projectCwds, apiCalls, userMessages } = await scanSessions(dateRange) @@ -884,7 +933,9 @@ export async function scanAndDetect( findings.sort((a, b) => urgencyScore(b) - urgencyScore(a)) const { score, grade } = computeHealth(findings) - return { findings, costRate, healthScore: score, healthGrade: grade } + const result: OptimizeResult = { findings, costRate, healthScore: score, healthGrade: grade } + resultCache.set(key, { data: result, ts: Date.now() }) + return result } // ============================================================================ From a9ca2a1134f2c43b1f452e4a1c81b5a732860ade Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 06:53:08 -0700 Subject: [PATCH 05/13] feat(optimize): fix tracking via recent vs baseline split Solves the problem where users who fixed an issue continued to see the finding for the remainder of the period. Findings now show visible progress or disappear entirely. Mechanism (no state file, no new I/O): - ToolCall and ApiCallMeta gain a `recent` boolean, set when the entry's timestamp falls inside a rolling 48-hour window. - Each session-based detector counts recent vs total occurrences. - computeTrend classifies each finding: active -- recent rate matches baseline improving -- recent rate under half of baseline (green arrow) resolved -- zero recent waste AND confirmed recent activity - Resolved findings are suppressed. Improving findings render with a green "improving down-arrow" badge next to the impact label. - When no recent activity exists, findings default to active so a user who simply paused is not told everything is fixed. Applies to the four session-based detectors: junk reads, duplicate reads, low read:edit ratio, cache bloat. The filesystem detectors (missing .claudeignore, bloated CLAUDE.md, unused MCP, ghost agents / skills / commands, bash limit) already self-heal on next run. 5 new tests cover computeTrend edge cases. 126 tests pass. --- src/dashboard.tsx | 8 ++- src/optimize.ts | 136 +++++++++++++++++++++++++++++++++++------ tests/optimize.test.ts | 53 ++++++++++++++++ 3 files changed, 178 insertions(+), 19 deletions(-) diff --git a/src/dashboard.tsx b/src/dashboard.tsx index 6587614..6157c31 100644 --- a/src/dashboard.tsx +++ b/src/dashboard.tsx @@ -459,9 +459,15 @@ function FindingPanel({ index, finding, costRate, width }: { index: number; find const costSaved = finding.tokensSaved * costRate const color = IMPACT_PANEL_COLORS[finding.impact] ?? DIM const label = finding.impact.charAt(0).toUpperCase() + finding.impact.slice(1) + const trendBadge = finding.trend === 'improving' ? ' improving \u2193' : '' return ( - {index}. {finding.title} {label} + + {index}. {finding.title} + + {label} + {trendBadge && {trendBadge}} + {finding.explanation} Savings: ~{formatTokens(finding.tokensSaved)} tokens (~{formatCost(costSaved)}) diff --git a/src/optimize.ts b/src/optimize.ts index 7cb0e61..84b18df 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -108,12 +108,15 @@ export type WasteAction = | { type: 'command'; label: string; text: string } | { type: 'file-content'; label: string; path: string; content: string } +export type Trend = 'active' | 'improving' + export type WasteFinding = { title: string explanation: string impact: Impact tokensSaved: number fix: WasteAction + trend?: Trend } export type OptimizeResult = { @@ -128,11 +131,13 @@ export type ToolCall = { input: Record sessionId: string project: string + recent?: boolean } export type ApiCallMeta = { cacheCreationTokens: number version: string + recent?: boolean } type ScanData = { @@ -149,6 +154,9 @@ type ScanData = { const FILE_READ_CONCURRENCY = 16 const RESULT_CACHE_TTL_MS = 60_000 +const RECENT_WINDOW_HOURS = 48 +const RECENT_WINDOW_MS = RECENT_WINDOW_HOURS * 60 * 60 * 1000 +const IMPROVING_THRESHOLD = 0.5 async function collectJsonlFiles(dirPath: string): Promise { const files = await readdir(dirPath).catch(() => []) @@ -202,10 +210,16 @@ function inRange(timestamp: string | undefined, range: DateRange | undefined): b return ts >= range.start && ts <= range.end } +function isRecent(timestamp: string | undefined, cutoff: number): boolean { + if (!timestamp) return false + return new Date(timestamp).getTime() >= cutoff +} + export async function scanJsonlFile( filePath: string, project: string, dateRange: DateRange | undefined, + recentCutoffMs = Date.now() - RECENT_WINDOW_MS, ): Promise { let content: string try { @@ -229,6 +243,7 @@ export async function scanJsonlFile( const ts = typeof entry.timestamp === 'string' ? entry.timestamp : undefined const withinRange = inRange(ts, dateRange) + const recent = isRecent(ts, recentCutoffMs) if (entry.cwd && typeof entry.cwd === 'string' && withinRange) cwds.push(entry.cwd) if (entry.version && typeof entry.version === 'string' && withinRange) versions.push(entry.version) @@ -256,7 +271,7 @@ export async function scanJsonlFile( const usage = msg?.usage as Record | undefined if (usage) { const cacheCreate = (usage.cache_creation_input_tokens as number) ?? 0 - if (cacheCreate > 0) apiCalls.push({ cacheCreationTokens: cacheCreate, version: lastVersion }) + if (cacheCreate > 0) apiCalls.push({ cacheCreationTokens: cacheCreate, version: lastVersion, recent }) } const blocks = msg?.content @@ -269,6 +284,7 @@ export async function scanJsonlFile( input: (block.input as Record) ?? {}, sessionId, project, + recent, }) } } @@ -358,15 +374,17 @@ export function loadMcpConfigs(projectCwds: Iterable): Map() let totalJunkReads = 0 + let recentJunkReads = 0 for (const call of calls) { if (!isReadTool(call.name)) continue const filePath = call.input.file_path as string | undefined if (!filePath || !JUNK_PATTERN.test(filePath)) continue totalJunkReads++ + if (call.recent) recentJunkReads++ for (const dir of JUNK_DIRS) { if (filePath.includes(`/${dir}/`)) { dirCounts.set(dir, (dirCounts.get(dir) ?? 0) + 1) @@ -377,6 +395,10 @@ export function detectJunkReads(calls: ToolCall[]): WasteFinding | null { if (totalJunkReads < MIN_JUNK_READS_TO_FLAG) return null + const hasRecentActivity = calls.some(c => c.recent) + const trend = sessionTrend(recentJunkReads, totalJunkReads, dateRange, hasRecentActivity) + if (trend === 'resolved') return null + const sorted = [...dirCounts.entries()].sort((a, b) => b[1] - a[1]) const dirList = sorted.slice(0, 3).map(([d, n]) => `${d}/ (${n}x)`).join(', ') const tokensSaved = totalJunkReads * AVG_TOKENS_PER_READ @@ -397,11 +419,12 @@ export function detectJunkReads(calls: ToolCall[]): WasteFinding | null { path: '.claudeignore', content: ignoreContent, }, + trend, } } -export function detectDuplicateReads(calls: ToolCall[]): WasteFinding | null { - const sessionFiles = new Map>() +export function detectDuplicateReads(calls: ToolCall[], dateRange?: DateRange): WasteFinding | null { + const sessionFiles = new Map>() for (const call of calls) { if (!isReadTool(call.name)) continue @@ -410,17 +433,22 @@ export function detectDuplicateReads(calls: ToolCall[]): WasteFinding | null { const key = `${call.project}:${call.sessionId}` if (!sessionFiles.has(key)) sessionFiles.set(key, new Map()) const fm = sessionFiles.get(key)! - fm.set(filePath, (fm.get(filePath) ?? 0) + 1) + const entry = fm.get(filePath) ?? { count: 0, recent: 0 } + entry.count++ + if (call.recent) entry.recent++ + fm.set(filePath, entry) } let totalDuplicates = 0 + let recentDuplicates = 0 const fileDupes = new Map() for (const fm of sessionFiles.values()) { - for (const [file, count] of fm) { - if (count <= 1) continue - const extra = count - 1 + for (const [file, entry] of fm) { + if (entry.count <= 1) continue + const extra = entry.count - 1 totalDuplicates += extra + if (entry.recent > 1) recentDuplicates += entry.recent - 1 const name = basename(file) fileDupes.set(name, (fileDupes.get(name) ?? 0) + extra) } @@ -428,6 +456,10 @@ export function detectDuplicateReads(calls: ToolCall[]): WasteFinding | null { if (totalDuplicates < MIN_DUPLICATE_READS_TO_FLAG) return null + const hasRecentActivity = calls.some(c => c.recent) + const trend = sessionTrend(recentDuplicates, totalDuplicates, dateRange, hasRecentActivity) + if (trend === 'resolved') return null + const worst = [...fileDupes.entries()] .sort((a, b) => b[1] - a[1]) .slice(0, 3) @@ -446,6 +478,7 @@ export function detectDuplicateReads(calls: ToolCall[]): WasteFinding | null { label: 'Point Claude at exact locations in your prompt, for example:', text: 'In lines -, look at the function.', }, + trend, } } @@ -599,12 +632,19 @@ export function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | const READ_TOOL_NAMES = new Set(['Read', 'Grep', 'Glob', 'FileReadTool', 'GrepTool', 'GlobTool']) const EDIT_TOOL_NAMES = new Set(['Edit', 'Write', 'FileEditTool', 'FileWriteTool', 'NotebookEdit']) -export function detectLowReadEditRatio(calls: ToolCall[]): WasteFinding | null { +export function detectLowReadEditRatio(calls: ToolCall[], dateRange?: DateRange): WasteFinding | null { let reads = 0 let edits = 0 + let recentEdits = 0 + let recentReads = 0 for (const call of calls) { - if (READ_TOOL_NAMES.has(call.name)) reads++ - else if (EDIT_TOOL_NAMES.has(call.name)) edits++ + if (READ_TOOL_NAMES.has(call.name)) { + reads++ + if (call.recent) recentReads++ + } else if (EDIT_TOOL_NAMES.has(call.name)) { + edits++ + if (call.recent) recentEdits++ + } } if (edits < MIN_EDITS_FOR_RATIO) return null @@ -615,6 +655,14 @@ export function detectLowReadEditRatio(calls: ToolCall[]): WasteFinding | null { const extraReadsNeeded = Math.max(Math.round(edits * HEALTHY_READ_EDIT_RATIO) - reads, 0) const tokensSaved = extraReadsNeeded * AVG_TOKENS_PER_READ + let trend: Trend | 'resolved' = 'active' + if (recentEdits >= MIN_EDITS_FOR_RATIO) { + const recentRatio = recentReads / recentEdits + if (recentRatio >= HEALTHY_READ_EDIT_RATIO) trend = 'resolved' + else if (recentRatio > ratio * (1 / IMPROVING_THRESHOLD)) trend = 'improving' + } + if (trend === 'resolved') return null + return { title: 'Claude edits more than it reads', explanation: `Claude made ${reads} reads and ${edits} edits (ratio ${ratio.toFixed(1)}:1). A healthy ratio is ${HEALTHY_READ_EDIT_RATIO}+ reads per edit. Editing without reading leads to retries and wasted tokens.`, @@ -625,6 +673,7 @@ export function detectLowReadEditRatio(calls: ToolCall[]): WasteFinding | null { label: 'Add to your CLAUDE.md:', text: 'Before editing any file, read it first. Before modifying a function, grep for all callers. Research before you edit.', }, + trend, } } @@ -637,16 +686,24 @@ function computeBudgetAwareCacheBaseline(projects: ProjectSummary[]): number { return sorted[Math.floor(sorted.length * 0.25)] || 50_000 } -export function detectCacheBloat(apiCalls: ApiCallMeta[], projects: ProjectSummary[]): WasteFinding | null { +const CACHE_BLOAT_MULTIPLIER = 1.4 + +export function detectCacheBloat(apiCalls: ApiCallMeta[], projects: ProjectSummary[], dateRange?: DateRange): WasteFinding | null { if (apiCalls.length < MIN_API_CALLS_FOR_CACHE) return null const sorted = apiCalls.map(c => c.cacheCreationTokens).sort((a, b) => a - b) const median = sorted[Math.floor(sorted.length / 2)] const baseline = computeBudgetAwareCacheBaseline(projects) - const bloatThreshold = baseline * 1.4 + const bloatThreshold = baseline * CACHE_BLOAT_MULTIPLIER if (median < bloatThreshold) return null + const recentCalls = apiCalls.filter(c => c.recent) + const totalBloated = apiCalls.filter(c => c.cacheCreationTokens > bloatThreshold).length + const recentBloated = recentCalls.filter(c => c.cacheCreationTokens > bloatThreshold).length + const trend = sessionTrend(recentBloated, totalBloated, dateRange, recentCalls.length > 0) + if (trend === 'resolved') return null + const versionCounts = new Map() for (const call of apiCalls) { if (!call.version) continue @@ -682,6 +739,7 @@ export function detectCacheBloat(apiCalls: ApiCallMeta[], projects: ProjectSumma label: 'Check for recent Claude Code updates or heavy MCP/skill additions. As a workaround (not officially supported):', text: 'export ANTHROPIC_CUSTOM_HEADERS=\'User-Agent: claude-cli/2.1.98 (external, sdk-cli)\'', }, + trend, } } @@ -864,6 +922,46 @@ function urgencyScore(f: WasteFinding): number { return URGENCY_WEIGHTS[f.impact] * URGENCY_IMPACT_WEIGHT + normalizedTokens * URGENCY_TOKEN_WEIGHT } +type TrendInputs = { + recentCount: number + recentWindowMs: number + baselineCount: number + baselineWindowMs: number + hasRecentActivity: boolean +} + +export function computeTrend(inputs: TrendInputs): Trend | 'resolved' { + const { recentCount, recentWindowMs, baselineCount, baselineWindowMs, hasRecentActivity } = inputs + if (baselineCount === 0) return 'active' + if (recentCount === 0 && hasRecentActivity) return 'resolved' + if (!hasRecentActivity) return 'active' + const baselineRate = baselineCount / baselineWindowMs + const recentRate = recentCount / Math.max(recentWindowMs, 1) + if (recentRate < baselineRate * IMPROVING_THRESHOLD) return 'improving' + return 'active' +} + +function sessionTrend( + recentItemCount: number, + totalItemCount: number, + dateRange: DateRange | undefined, + hasRecentActivity: boolean, +): Trend | 'resolved' { + const now = Date.now() + const baselineCount = totalItemCount - recentItemCount + const thirtyDaysMs = 30 * 24 * 60 * 60 * 1000 + const periodStart = dateRange ? dateRange.start.getTime() : now - thirtyDaysMs + const recentStart = now - RECENT_WINDOW_MS + const baselineWindowMs = Math.max(recentStart - periodStart, 1) + return computeTrend({ + recentCount: recentItemCount, + recentWindowMs: RECENT_WINDOW_MS, + baselineCount, + baselineWindowMs, + hasRecentActivity, + }) +} + // ============================================================================ // Cost estimation // ============================================================================ @@ -910,10 +1008,10 @@ export async function scanAndDetect( const findings: WasteFinding[] = [] const syncDetectors: Array<() => WasteFinding | null> = [ - () => detectCacheBloat(apiCalls, projects), - () => detectLowReadEditRatio(toolCalls), - () => detectJunkReads(toolCalls), - () => detectDuplicateReads(toolCalls), + () => detectCacheBloat(apiCalls, projects, dateRange), + () => detectLowReadEditRatio(toolCalls, dateRange), + () => detectJunkReads(toolCalls, dateRange), + () => detectDuplicateReads(toolCalls, dateRange), () => detectUnusedMcp(toolCalls, projects, projectCwds), () => detectMissingClaudeignore(projectCwds), () => detectBloatedClaudeMd(projectCwds), @@ -967,14 +1065,16 @@ function renderFinding(n: number, f: WasteFinding, costRate: number): string[] { const lines: string[] = [] const costSaved = f.tokensSaved * costRate const impactLabel = f.impact.charAt(0).toUpperCase() + f.impact.slice(1) + const trendBadge = f.trend === 'improving' ? ' improving \u2193 ' : '' const savings = `~${formatTokens(f.tokensSaved)} tokens (~${formatCost(costSaved)})` - const titlePad = PANEL_WIDTH - f.title.length - impactLabel.length - 8 + const titlePad = PANEL_WIDTH - f.title.length - impactLabel.length - trendBadge.length - 8 const pad = titlePad > 0 ? ' ' + SEP.repeat(titlePad) + ' ' : ' ' lines.push(chalk.hex(DIM)(` ${SEP}${SEP}${SEP} `) + chalk.bold(`${n}. ${f.title}`) + chalk.hex(DIM)(pad) + chalk.hex(IMPACT_COLORS[f.impact])(impactLabel) + + (trendBadge ? chalk.hex(GREEN)(trendBadge) : '') + chalk.hex(DIM)(` ${SEP}${SEP}${SEP}`)) lines.push('') lines.push(wrap(f.explanation, PANEL_WIDTH - 4, ' ')) diff --git a/tests/optimize.test.ts b/tests/optimize.test.ts index fc2954d..5ebcab8 100644 --- a/tests/optimize.test.ts +++ b/tests/optimize.test.ts @@ -8,6 +8,7 @@ import { detectBloatedClaudeMd, detectMissingClaudeignore, computeHealth, + computeTrend, type ToolCall, type ApiCallMeta, type WasteFinding, @@ -256,3 +257,55 @@ describe('computeHealth', () => { expect(computeHealth([mockFinding('high'), mockFinding('high'), mockFinding('high'), mockFinding('high'), mockFinding('high')]).grade).toBe('F') }) }) + +describe('computeTrend', () => { + const window = 48 * 60 * 60 * 1000 + const baselineWindow = 5 * 24 * 60 * 60 * 1000 + + it('returns active when no recent activity detected', () => { + const trend = computeTrend({ + recentCount: 0, recentWindowMs: window, + baselineCount: 100, baselineWindowMs: baselineWindow, + hasRecentActivity: false, + }) + expect(trend).toBe('active') + }) + + it('returns resolved when recent activity exists but zero waste in it', () => { + const trend = computeTrend({ + recentCount: 0, recentWindowMs: window, + baselineCount: 100, baselineWindowMs: baselineWindow, + hasRecentActivity: true, + }) + expect(trend).toBe('resolved') + }) + + it('returns improving when recent rate is less than half of baseline rate', () => { + const trend = computeTrend({ + recentCount: 5, recentWindowMs: window, + baselineCount: 100, baselineWindowMs: baselineWindow, + hasRecentActivity: true, + }) + expect(trend).toBe('improving') + }) + + it('returns active when recent rate matches baseline rate', () => { + const recentRate = 100 / baselineWindow + const recentCount = Math.ceil(recentRate * window) + const trend = computeTrend({ + recentCount, recentWindowMs: window, + baselineCount: 100, baselineWindowMs: baselineWindow, + hasRecentActivity: true, + }) + expect(trend).toBe('active') + }) + + it('returns active when baseline is empty (new finding)', () => { + const trend = computeTrend({ + recentCount: 10, recentWindowMs: window, + baselineCount: 0, baselineWindowMs: baselineWindow, + hasRecentActivity: true, + }) + expect(trend).toBe('active') + }) +}) From 707d2faff137d921d0f61a5da7916e4bd4886a87 Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 06:59:07 -0700 Subject: [PATCH 06/13] feat(optimize): UX polish - Rename "ctx" column to "overhead" with wider padding for legibility in the By Project panel. - Name magic numbers for the project column widths. - Empty-state now includes a one-line description of what optimize does, so first-time users with no findings still understand the feature. --- src/dashboard.tsx | 8 +++++--- src/optimize.ts | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/dashboard.tsx b/src/dashboard.tsx index 6157c31..067158c 100644 --- a/src/dashboard.tsx +++ b/src/dashboard.tsx @@ -231,11 +231,13 @@ function shortProject(encoded: string): string { function ProjectBreakdown({ projects, pw, bw, budgets }: { projects: ProjectSummary[]; pw: number; bw: number; budgets?: Map }) { const maxCost = Math.max(...projects.map(p => p.totalCostUSD)) const hasBudgets = budgets && budgets.size > 0 - const nw = Math.max(8, pw - bw - (hasBudgets ? 31 : 23)) + const PROJECT_COL_BASE_WIDTH = 23 + const PROJECT_COL_WITH_OVERHEAD_WIDTH = 33 + const nw = Math.max(8, pw - bw - (hasBudgets ? PROJECT_COL_WITH_OVERHEAD_WIDTH : PROJECT_COL_BASE_WIDTH)) return ( - {''.padEnd(bw + 1 + nw)}{'cost'.padStart(8)}{'sess'.padStart(6)}{hasBudgets ? 'ctx'.padStart(8) : ''} + {''.padEnd(bw + 1 + nw)}{'cost'.padStart(8)}{'sess'.padStart(6)}{hasBudgets ? 'overhead'.padStart(10) : ''} {projects.slice(0, 8).map((project, i) => { const budget = budgets?.get(project.project) @@ -245,7 +247,7 @@ function ProjectBreakdown({ projects, pw, bw, budgets }: { projects: ProjectSumm {fit(shortProject(project.project), nw)} {formatCost(project.totalCostUSD).padStart(8)} {String(project.sessions.length).padStart(6)} - {hasBudgets && {(budget ? formatTokens(budget.total) : '-').padStart(8)}} + {hasBudgets && {(budget ? formatTokens(budget.total) : '-').padStart(10)}} ) })} diff --git a/src/optimize.ts b/src/optimize.ts index 84b18df..abb55fd 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -1124,6 +1124,10 @@ function renderOptimize( if (findings.length === 0) { lines.push(chalk.hex(GREEN)(' Nothing to fix. Your setup is lean.')) lines.push('') + lines.push(chalk.dim(' CodeBurn optimize scans your Claude Code sessions and config for')) + lines.push(chalk.dim(' token waste: junk directory reads, duplicate file reads, unused')) + lines.push(chalk.dim(' agents/skills/MCP servers, bloated CLAUDE.md, and more.')) + lines.push('') return lines.join('\n') } From b9dffc16ec0efd4e89532b2bd5f5f180d73f7dcd Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 07:09:20 -0700 Subject: [PATCH 07/13] chore(optimize): remove dead versions plumbing + name remaining magic numbers - ScanData.versions and ScanFileResult.versions were collected but never read in scanAndDetect. Per-call version lives on ApiCallMeta.version which is what detectCacheBloat actually uses. Dropped the unused aggregation path end-to-end. - Extract DEFAULT_CACHE_BASELINE_TOKENS, CACHE_BASELINE_QUANTILE, CACHE_VERSION_MIN_SAMPLES, CACHE_VERSION_DIFF_THRESHOLD as named module-scope constants. Honors the "no magic numbers" project rule across the full optimize engine. --- src/optimize.ts | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/optimize.ts b/src/optimize.ts index abb55fd..6acda03 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -144,7 +144,6 @@ type ScanData = { toolCalls: ToolCall[] projectCwds: Set apiCalls: ApiCallMeta[] - versions: Set userMessages: string[] } @@ -199,7 +198,6 @@ type ScanFileResult = { calls: ToolCall[] cwds: string[] apiCalls: ApiCallMeta[] - versions: string[] userMessages: string[] } @@ -224,12 +222,11 @@ export async function scanJsonlFile( let content: string try { content = await readFile(filePath, 'utf-8') - } catch { return { calls: [], cwds: [], apiCalls: [], versions: [], userMessages: [] } } + } catch { return { calls: [], cwds: [], apiCalls: [], userMessages: [] } } const calls: ToolCall[] = [] const cwds: string[] = [] const apiCalls: ApiCallMeta[] = [] - const versions: string[] = [] const userMessages: string[] = [] const sessionId = basename(filePath, '.jsonl') let lastVersion = '' @@ -246,7 +243,6 @@ export async function scanJsonlFile( const recent = isRecent(ts, recentCutoffMs) if (entry.cwd && typeof entry.cwd === 'string' && withinRange) cwds.push(entry.cwd) - if (entry.version && typeof entry.version === 'string' && withinRange) versions.push(entry.version) if (entry.type === 'user') { if (!withinRange) continue @@ -289,7 +285,7 @@ export async function scanJsonlFile( } } - return { calls, cwds, apiCalls, versions, userMessages } + return { calls, cwds, apiCalls, userMessages } } async function scanSessions(dateRange?: DateRange): Promise { @@ -297,7 +293,6 @@ async function scanSessions(dateRange?: DateRange): Promise { const allCalls: ToolCall[] = [] const allCwds = new Set() const allApiCalls: ApiCallMeta[] = [] - const allVersions = new Set() const allUserMessages: string[] = [] const tasks: Array<{ file: string; project: string }> = [] @@ -310,15 +305,14 @@ async function scanSessions(dateRange?: DateRange): Promise { } await runWithConcurrency(tasks, FILE_READ_CONCURRENCY, async ({ file, project }) => { - const { calls, cwds, apiCalls, versions, userMessages } = await scanJsonlFile(file, project, dateRange) + const { calls, cwds, apiCalls, userMessages } = await scanJsonlFile(file, project, dateRange) allCalls.push(...calls) for (const cwd of cwds) allCwds.add(cwd) allApiCalls.push(...apiCalls) - for (const v of versions) if (v) allVersions.add(v) allUserMessages.push(...userMessages) }) - return { toolCalls: allCalls, projectCwds: allCwds, apiCalls: allApiCalls, versions: allVersions, userMessages: allUserMessages } + return { toolCalls: allCalls, projectCwds: allCwds, apiCalls: allApiCalls, userMessages: allUserMessages } } // ============================================================================ @@ -677,17 +671,21 @@ export function detectLowReadEditRatio(calls: ToolCall[], dateRange?: DateRange) } } +const DEFAULT_CACHE_BASELINE_TOKENS = 50_000 +const CACHE_BASELINE_QUANTILE = 0.25 +const CACHE_BLOAT_MULTIPLIER = 1.4 +const CACHE_VERSION_MIN_SAMPLES = 5 +const CACHE_VERSION_DIFF_THRESHOLD = 10_000 + function computeBudgetAwareCacheBaseline(projects: ProjectSummary[]): number { const sessions = projects.flatMap(p => p.sessions) - if (sessions.length === 0) return 50_000 + if (sessions.length === 0) return DEFAULT_CACHE_BASELINE_TOKENS const cacheWrites = sessions.map(s => s.totalCacheWriteTokens).filter(n => n > 0) - if (cacheWrites.length < MIN_API_CALLS_FOR_CACHE) return 50_000 + if (cacheWrites.length < MIN_API_CALLS_FOR_CACHE) return DEFAULT_CACHE_BASELINE_TOKENS const sorted = cacheWrites.sort((a, b) => a - b) - return sorted[Math.floor(sorted.length * 0.25)] || 50_000 + return sorted[Math.floor(sorted.length * CACHE_BASELINE_QUANTILE)] || DEFAULT_CACHE_BASELINE_TOKENS } -const CACHE_BLOAT_MULTIPLIER = 1.4 - export function detectCacheBloat(apiCalls: ApiCallMeta[], projects: ProjectSummary[], dateRange?: DateRange): WasteFinding | null { if (apiCalls.length < MIN_API_CALLS_FOR_CACHE) return null @@ -713,7 +711,7 @@ export function detectCacheBloat(apiCalls: ApiCallMeta[], projects: ProjectSumma versionCounts.set(call.version, entry) } const versionAvgs = [...versionCounts.entries()] - .filter(([, d]) => d.count >= 5) + .filter(([, d]) => d.count >= CACHE_VERSION_MIN_SAMPLES) .map(([v, d]) => ({ version: v, avg: Math.round(d.total / d.count) })) .sort((a, b) => b.avg - a.avg) @@ -724,7 +722,7 @@ export function detectCacheBloat(apiCalls: ApiCallMeta[], projects: ProjectSumma if (versionAvgs.length >= 2) { const [high, ...rest] = versionAvgs const low = rest[rest.length - 1] - if (high.avg - low.avg > 10_000) { + if (high.avg - low.avg > CACHE_VERSION_DIFF_THRESHOLD) { versionNote = ` Version ${high.version} averages ${formatTokens(high.avg)} vs ${low.version} at ${formatTokens(low.avg)}.` } } From c02f63235ac4469a0961c18bf9ced0c0c6f202d2 Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 09:33:03 -0700 Subject: [PATCH 08/13] test(optimize): add 34 filesystem-mocking tests Covers previously untested detectors and helpers with real temp-dir fixtures (not stubs) to verify behavior against actual file I/O. New coverage: - detectMissingClaudeignore: project with/without junk dirs and .claudeignore, impact scaling. - detectBloatedClaudeMd: plain oversized file, @-import expansion, circular import safety, email/npm-scope @-token filtering. - loadMcpConfigs: project reads, colon-to-underscore normalization, malformed JSON tolerance. - detectUnusedMcp: 24-hour grace period, config vs invocation merge. - detectBashBloat: env var unset, configured under/over limit. - detectGhostCommands: path prefixes are not commands, tag parsing. - scanJsonlFile: missing file, tool_use parsing, malformed line skipping, date-range filter. - scanAndDetect: empty projects returns healthy result. - estimateContextBudget: system base, MCP tools, memory files. - discoverProjectCwd: empty dir, no jsonl, cwd extraction. Uses vi.mock to redirect os.homedir() to a disposable temp directory, so tests do not read the tester's real ~/.claude. 34 tests, <30ms wall time. Total suite now 160 tests. --- tests/optimize-fs.test.ts | 445 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 445 insertions(+) create mode 100644 tests/optimize-fs.test.ts diff --git a/tests/optimize-fs.test.ts b/tests/optimize-fs.test.ts new file mode 100644 index 0000000..a476042 --- /dev/null +++ b/tests/optimize-fs.test.ts @@ -0,0 +1,445 @@ +import { describe, it, expect, afterAll, beforeEach, vi } from 'vitest' +import { mkdtempSync, rmSync, mkdirSync, writeFileSync, utimesSync } from 'fs' +import { tmpdir } from 'os' +import { join } from 'path' + +vi.mock('os', async () => { + const actual = await vi.importActual('os') + const fs = await vi.importActual('fs') + const fakeHome = fs.mkdtempSync(actual.tmpdir() + '/codeburn-home-') + fs.mkdirSync(fakeHome + '/.claude', { recursive: true }) + process.env['CODEBURN_TEST_FAKE_HOME'] = fakeHome + return { ...actual, homedir: () => fakeHome } +}) + +const FAKE_HOME_FOR_MOCK = process.env['CODEBURN_TEST_FAKE_HOME']! + +import { + detectMissingClaudeignore, + detectBloatedClaudeMd, + detectUnusedMcp, + detectBashBloat, + detectGhostAgents, + detectGhostSkills, + detectGhostCommands, + loadMcpConfigs, + scanJsonlFile, + scanAndDetect, + type ToolCall, +} from '../src/optimize.js' +import { + estimateContextBudget, + discoverProjectCwd, +} from '../src/context-budget.js' + +// ============================================================================ +// Helpers for filesystem fixtures +// ============================================================================ + +const FIXTURE_ROOTS: string[] = [FAKE_HOME_FOR_MOCK] + +function makeFixtureRoot(): string { + const dir = mkdtempSync(join(tmpdir(), 'codeburn-test-')) + FIXTURE_ROOTS.push(dir) + return dir +} + +function writeFile(path: string, content: string): void { + mkdirSync(join(path, '..'), { recursive: true }) + writeFileSync(path, content) +} + +function touchOld(path: string, daysAgo: number): void { + const past = new Date(Date.now() - daysAgo * 24 * 60 * 60 * 1000) + utimesSync(path, past, past) +} + +afterAll(() => { + for (const dir of FIXTURE_ROOTS) { + rmSync(dir, { recursive: true, force: true }) + } +}) + +// ============================================================================ +// detectMissingClaudeignore +// ============================================================================ + +describe('detectMissingClaudeignore', () => { + it('flags a project with node_modules but no .claudeignore', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(join(projectDir, 'node_modules'), { recursive: true }) + const finding = detectMissingClaudeignore(new Set([projectDir])) + expect(finding).not.toBeNull() + expect(finding!.impact).toBe('medium') + }) + + it('does not flag when .claudeignore exists', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(join(projectDir, 'node_modules'), { recursive: true }) + writeFile(join(projectDir, '.claudeignore'), 'node_modules\n') + expect(detectMissingClaudeignore(new Set([projectDir]))).toBeNull() + }) + + it('does not flag project without junk dirs', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(join(projectDir, 'src'), { recursive: true }) + expect(detectMissingClaudeignore(new Set([projectDir]))).toBeNull() + }) + + it('escalates to high when three or more projects need it', () => { + const root = makeFixtureRoot() + const cwds = new Set() + for (let i = 0; i < 3; i++) { + const p = join(root, `proj-${i}`) + mkdirSync(join(p, 'node_modules'), { recursive: true }) + cwds.add(p) + } + const finding = detectMissingClaudeignore(cwds) + expect(finding!.impact).toBe('high') + }) +}) + +// ============================================================================ +// detectBloatedClaudeMd (including @-import expansion) +// ============================================================================ + +describe('detectBloatedClaudeMd', () => { + it('flags a CLAUDE.md with more than 200 lines', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + const content = Array.from({ length: 300 }, (_, i) => `line ${i}`).join('\n') + writeFile(join(projectDir, 'CLAUDE.md'), content) + const finding = detectBloatedClaudeMd(new Set([projectDir])) + expect(finding).not.toBeNull() + }) + + it('expands @-imports and counts transitive load', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile( + join(projectDir, 'CLAUDE.md'), + 'line 1\nline 2\n@./rules.md\n@./conventions.md\n', + ) + writeFile(join(projectDir, 'rules.md'), Array.from({ length: 120 }, (_, i) => `rule ${i}`).join('\n')) + writeFile(join(projectDir, 'conventions.md'), Array.from({ length: 120 }, (_, i) => `conv ${i}`).join('\n')) + const finding = detectBloatedClaudeMd(new Set([projectDir])) + expect(finding).not.toBeNull() + expect(finding!.explanation).toContain('2 @-imports') + }) + + it('does not flag a lean CLAUDE.md under 200 lines with no imports', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile(join(projectDir, 'CLAUDE.md'), 'just a few\nlines\nhere\n') + expect(detectBloatedClaudeMd(new Set([projectDir]))).toBeNull() + }) + + it('does not recurse infinitely on circular @-imports', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile(join(projectDir, 'CLAUDE.md'), '@./a.md\n') + writeFile(join(projectDir, 'a.md'), '@./b.md\n') + writeFile(join(projectDir, 'b.md'), '@./a.md\n') + expect(() => detectBloatedClaudeMd(new Set([projectDir]))).not.toThrow() + }) + + it('ignores @ tokens that are not paths (emails, npm scopes)', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile( + join(projectDir, 'CLAUDE.md'), + Array.from({ length: 250 }, (_, i) => + i === 10 ? '@user@example.com' : + i === 20 ? '@org/package' : + `line ${i}` + ).join('\n'), + ) + const finding = detectBloatedClaudeMd(new Set([projectDir])) + expect(finding).not.toBeNull() + // "with N @-imports" suffix appears only when non-zero imports were resolved + expect(finding!.explanation).not.toMatch(/with \d+ @-import/) + }) +}) + +// ============================================================================ +// loadMcpConfigs + detectUnusedMcp +// ============================================================================ + +describe('loadMcpConfigs', () => { + it('returns empty map when no configs exist', () => { + const root = makeFixtureRoot() + const servers = loadMcpConfigs([root]) + expect(servers.size).toBe(0) + }) + + it('reads servers from project .mcp.json', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile(join(projectDir, '.mcp.json'), JSON.stringify({ + mcpServers: { foo: { command: 'foo' }, bar: { command: 'bar' } }, + })) + const servers = loadMcpConfigs([projectDir]) + expect(servers.has('foo')).toBe(true) + expect(servers.has('bar')).toBe(true) + }) + + it('normalizes server names by replacing colons with underscores', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile(join(projectDir, '.mcp.json'), JSON.stringify({ + mcpServers: { 'plugin:context7:context7': { command: 'ctx' } }, + })) + const servers = loadMcpConfigs([projectDir]) + expect(servers.has('plugin_context7_context7')).toBe(true) + expect(servers.get('plugin_context7_context7')!.original).toBe('plugin:context7:context7') + }) + + it('handles malformed JSON without crashing', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile(join(projectDir, '.mcp.json'), '{ not valid json') + expect(() => loadMcpConfigs([projectDir])).not.toThrow() + expect(loadMcpConfigs([projectDir]).size).toBe(0) + }) +}) + +describe('detectUnusedMcp', () => { + it('flags servers configured but never called', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile(join(projectDir, '.mcp.json'), JSON.stringify({ + mcpServers: { ghost: { command: 'x' } }, + })) + const configFile = join(projectDir, '.mcp.json') + touchOld(configFile, 30) + const finding = detectUnusedMcp([], [], new Set([projectDir])) + expect(finding).not.toBeNull() + expect(finding!.explanation).toContain('ghost') + }) + + it('does not flag servers configured within 24 hours', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile(join(projectDir, '.mcp.json'), JSON.stringify({ + mcpServers: { freshly_added: { command: 'x' } }, + })) + expect(detectUnusedMcp([], [], new Set([projectDir]))).toBeNull() + }) + + it('does not flag servers that were called', () => { + const root = makeFixtureRoot() + const projectDir = join(root, 'myapp') + mkdirSync(projectDir, { recursive: true }) + writeFile(join(projectDir, '.mcp.json'), JSON.stringify({ + mcpServers: { used: { command: 'x' } }, + })) + touchOld(join(projectDir, '.mcp.json'), 30) + const calls: ToolCall[] = [ + { name: 'mcp__used__some_tool', input: {}, sessionId: 's1', project: 'p1' }, + ] + expect(detectUnusedMcp(calls, [], new Set([projectDir]))).toBeNull() + }) +}) + +// ============================================================================ +// detectBashBloat +// ============================================================================ + +describe('detectBashBloat', () => { + const originalEnv = process.env['BASH_MAX_OUTPUT_LENGTH'] + + beforeEach(() => { + delete process.env['BASH_MAX_OUTPUT_LENGTH'] + }) + + afterAll(() => { + if (originalEnv !== undefined) process.env['BASH_MAX_OUTPUT_LENGTH'] = originalEnv + }) + + it('flags when env var is unset (uses default 30K)', () => { + const finding = detectBashBloat() + expect(finding).not.toBeNull() + expect(finding!.impact).toBe('medium') + }) + + it('does not flag when env var is at recommended 15K', () => { + process.env['BASH_MAX_OUTPUT_LENGTH'] = '15000' + expect(detectBashBloat()).toBeNull() + }) + + it('does not flag when env var is below recommended', () => { + process.env['BASH_MAX_OUTPUT_LENGTH'] = '10000' + expect(detectBashBloat()).toBeNull() + }) + + it('flags when env var is above 15K', () => { + process.env['BASH_MAX_OUTPUT_LENGTH'] = '50000' + const finding = detectBashBloat() + expect(finding).not.toBeNull() + }) +}) + +// ============================================================================ +// detectGhostCommands (the pure-function ghost detector) +// ============================================================================ + +describe('detectGhostCommands', () => { + it('returns null when no commands are defined', async () => { + expect(await detectGhostCommands([])).toBeNull() + }) + + it('does not match /tmp or /usr or other path prefixes as command usage', async () => { + const messages = [ + 'check /tmp/debug.log', + 'look at /usr/local/bin', + 'rm -rf /var/cache', + ] + expect(await detectGhostCommands(messages)).toBeNull() + }) + + it('matches tags in user messages', async () => { + const messages = ['review'] + expect(await detectGhostCommands(messages)).toBeNull() + }) +}) + +// ============================================================================ +// scanJsonlFile +// ============================================================================ + +describe('scanJsonlFile', () => { + it('returns empty result for nonexistent file', async () => { + const result = await scanJsonlFile('/nonexistent/path.jsonl', 'p1', undefined) + expect(result.calls).toEqual([]) + expect(result.cwds).toEqual([]) + expect(result.apiCalls).toEqual([]) + expect(result.userMessages).toEqual([]) + }) + + it('parses tool_use blocks from assistant entries', async () => { + const root = makeFixtureRoot() + const filePath = join(root, 'session.jsonl') + const now = new Date().toISOString() + const lines = [ + JSON.stringify({ + type: 'assistant', + timestamp: now, + message: { + content: [{ type: 'tool_use', name: 'Read', input: { file_path: '/x/foo.ts' } }], + }, + }), + ] + writeFile(filePath, lines.join('\n')) + const result = await scanJsonlFile(filePath, 'p1', undefined) + expect(result.calls).toHaveLength(1) + expect(result.calls[0].name).toBe('Read') + }) + + it('skips malformed JSONL lines without crashing', async () => { + const root = makeFixtureRoot() + const filePath = join(root, 'session.jsonl') + writeFile(filePath, 'this is not json\n{broken\n{"type":"assistant","message":{"content":[]}}\n') + const result = await scanJsonlFile(filePath, 'p1', undefined) + expect(result.calls).toEqual([]) + }) + + it('respects date-range filter for assistant entries', async () => { + const root = makeFixtureRoot() + const filePath = join(root, 'session.jsonl') + const old = '2020-01-01T00:00:00Z' + const now = new Date().toISOString() + writeFile(filePath, [ + JSON.stringify({ + type: 'assistant', timestamp: old, + message: { content: [{ type: 'tool_use', name: 'Read', input: { file_path: '/old' } }] }, + }), + JSON.stringify({ + type: 'assistant', timestamp: now, + message: { content: [{ type: 'tool_use', name: 'Read', input: { file_path: '/new' } }] }, + }), + ].join('\n')) + const today = new Date() + const start = new Date(today.getFullYear(), today.getMonth(), today.getDate()) + const result = await scanJsonlFile(filePath, 'p1', { start, end: today }) + expect(result.calls).toHaveLength(1) + expect((result.calls[0].input as Record).file_path).toBe('/new') + }) +}) + +// ============================================================================ +// scanAndDetect (top-level integration) +// ============================================================================ + +describe('scanAndDetect', () => { + it('returns healthy result for empty projects', async () => { + const result = await scanAndDetect([]) + expect(result.findings).toEqual([]) + expect(result.healthScore).toBe(100) + expect(result.healthGrade).toBe('A') + expect(result.costRate).toBe(0) + }) +}) + +// ============================================================================ +// context-budget +// ============================================================================ + +describe('estimateContextBudget', () => { + it('returns only system base when project has no config', async () => { + const root = makeFixtureRoot() + const budget = await estimateContextBudget(root) + expect(budget.total).toBeGreaterThan(0) + expect(budget.mcpTools.count).toBe(0) + expect(budget.skills.count).toBe(0) + }) + + it('includes MCP tools from project .mcp.json', async () => { + const root = makeFixtureRoot() + writeFile(join(root, '.mcp.json'), JSON.stringify({ + mcpServers: { a: { command: 'x' }, b: { command: 'x' } }, + })) + const budget = await estimateContextBudget(root) + expect(budget.mcpTools.count).toBeGreaterThan(0) + }) + + it('includes memory file tokens from CLAUDE.md', async () => { + const root = makeFixtureRoot() + writeFile(join(root, 'CLAUDE.md'), 'Project context for Claude.\n') + const budget = await estimateContextBudget(root) + expect(budget.memory.count).toBeGreaterThan(0) + expect(budget.memory.tokens).toBeGreaterThan(0) + }) +}) + +describe('discoverProjectCwd', () => { + it('returns null for empty directory', async () => { + const root = makeFixtureRoot() + expect(await discoverProjectCwd(root)).toBeNull() + }) + + it('returns null for directory with no jsonl files', async () => { + const root = makeFixtureRoot() + writeFile(join(root, 'readme.txt'), 'hi') + expect(await discoverProjectCwd(root)).toBeNull() + }) + + it('extracts cwd from the first jsonl entry', async () => { + const root = makeFixtureRoot() + const entry = JSON.stringify({ type: 'assistant', cwd: '/Users/test/project', timestamp: new Date().toISOString() }) + writeFile(join(root, 'session.jsonl'), entry + '\n') + expect(await discoverProjectCwd(root)).toBe('/Users/test/project') + }) +}) From b9b2c7a900f7fbfd4953c33d3179b524d718769a Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 09:35:46 -0700 Subject: [PATCH 09/13] chore: remove dead ContextBudgetPanel and unused dateRange parameter - ContextBudgetPanel in dashboard.tsx was defined but never rendered after the per-project overhead column replaced it in Phase 1. - detectLowReadEditRatio accepted a dateRange parameter that was never used inside the function (trend is computed via recent-call flags on ToolCall). Verified with tsc --noUnusedLocals --noUnusedParameters: 0 errors. 160 tests pass. --- src/dashboard.tsx | 28 ---------------------------- src/optimize.ts | 4 ++-- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/src/dashboard.tsx b/src/dashboard.tsx index 067158c..ac1c9eb 100644 --- a/src/dashboard.tsx +++ b/src/dashboard.tsx @@ -424,34 +424,6 @@ function PeriodTabs({ active, providerName, showProvider }: { active: Period; pr ) } -function ContextBudgetPanel({ budget, pw }: { budget: ContextBudget; pw: number }) { - const pct = ((budget.total / budget.modelContext) * 100).toFixed(1) - const available = budget.modelContext - budget.total - const items: Array<{ label: string; tokens: number; color: string }> = [ - { label: 'System base', tokens: budget.systemBase, color: '#5B9EF5' }, - { label: `MCP tools (${budget.mcpTools.count})`, tokens: budget.mcpTools.tokens, color: '#F55BE0' }, - { label: `Skills (${budget.skills.count})`, tokens: budget.skills.tokens, color: '#F5C85B' }, - { label: `Memory (${budget.memory.count})`, tokens: budget.memory.tokens, color: '#5BF5A0' }, - ] - const maxTokens = Math.max(...items.map(i => i.tokens)) - const bw = 6 - return ( - - {''.padEnd(bw + 20)}{'tokens'.padStart(8)} - {items.filter(i => i.tokens > 0).map(item => ( - - - {fit(item.label, 19)} - {formatTokens(item.tokens).padStart(8)} - - ))} - - Overhead: {formatTokens(budget.total)} ({pct}%) Free: {formatTokens(available)} - - - ) -} - function FindingAction({ action }: { action: WasteAction }) { const lines = action.type === 'file-content' ? action.content.split('\n') : action.type === 'command' ? action.text.split('\n') : [action.text] return (<>{action.label}{lines.map((line, i) => {line})}) diff --git a/src/optimize.ts b/src/optimize.ts index 6acda03..18c3666 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -626,7 +626,7 @@ export function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | const READ_TOOL_NAMES = new Set(['Read', 'Grep', 'Glob', 'FileReadTool', 'GrepTool', 'GlobTool']) const EDIT_TOOL_NAMES = new Set(['Edit', 'Write', 'FileEditTool', 'FileWriteTool', 'NotebookEdit']) -export function detectLowReadEditRatio(calls: ToolCall[], dateRange?: DateRange): WasteFinding | null { +export function detectLowReadEditRatio(calls: ToolCall[]): WasteFinding | null { let reads = 0 let edits = 0 let recentEdits = 0 @@ -1007,7 +1007,7 @@ export async function scanAndDetect( const findings: WasteFinding[] = [] const syncDetectors: Array<() => WasteFinding | null> = [ () => detectCacheBloat(apiCalls, projects, dateRange), - () => detectLowReadEditRatio(toolCalls, dateRange), + () => detectLowReadEditRatio(toolCalls), () => detectJunkReads(toolCalls, dateRange), () => detectDuplicateReads(toolCalls, dateRange), () => detectUnusedMcp(toolCalls, projects, projectCwds), From 3bd3c0d7b4e1bffa072380ed35a5090780a6eae9 Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 16:09:19 -0700 Subject: [PATCH 10/13] chore(optimize): extract trend period magic number to named constant --- src/optimize.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/optimize.ts b/src/optimize.ts index 18c3666..532ec19 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -155,6 +155,8 @@ const FILE_READ_CONCURRENCY = 16 const RESULT_CACHE_TTL_MS = 60_000 const RECENT_WINDOW_HOURS = 48 const RECENT_WINDOW_MS = RECENT_WINDOW_HOURS * 60 * 60 * 1000 +const DEFAULT_TREND_PERIOD_DAYS = 30 +const DEFAULT_TREND_PERIOD_MS = DEFAULT_TREND_PERIOD_DAYS * 24 * 60 * 60 * 1000 const IMPROVING_THRESHOLD = 0.5 async function collectJsonlFiles(dirPath: string): Promise { @@ -947,8 +949,7 @@ function sessionTrend( ): Trend | 'resolved' { const now = Date.now() const baselineCount = totalItemCount - recentItemCount - const thirtyDaysMs = 30 * 24 * 60 * 60 * 1000 - const periodStart = dateRange ? dateRange.start.getTime() : now - thirtyDaysMs + const periodStart = dateRange ? dateRange.start.getTime() : now - DEFAULT_TREND_PERIOD_MS const recentStart = now - RECENT_WINDOW_MS const baselineWindowMs = Math.max(recentStart - periodStart, 1) return computeTrend({ From f9587568617738b6f20118471dd86d15b0d5d99e Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 16:20:53 -0700 Subject: [PATCH 11/13] chore(optimize): name preview-count literals and drop punctuation dashes Rename slice(0, N) and length - N literals used in waste-finding preview strings to GHOST_NAMES_PREVIEW, GHOST_CLEANUP_COMMANDS_LIMIT, TOP_ITEMS_PREVIEW, MISSING_IGNORE_PATHS_PREVIEW, JUNK_DIRS_IGNORE_PREVIEW. Drop the punctuation double-hyphen from the config-health header. --- src/optimize.ts | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/optimize.ts b/src/optimize.ts index 532ec19..fa8ff8e 100644 --- a/src/optimize.ts +++ b/src/optimize.ts @@ -96,6 +96,12 @@ const JUNK_PATTERN = new RegExp(`/(?:${JUNK_DIRS.join('|')})/`) const SHELL_PROFILES = ['.zshrc', '.bashrc', '.bash_profile', '.profile'] +const TOP_ITEMS_PREVIEW = 3 +const MISSING_IGNORE_PATHS_PREVIEW = 2 +const JUNK_DIRS_IGNORE_PREVIEW = 8 +const GHOST_NAMES_PREVIEW = 5 +const GHOST_CLEANUP_COMMANDS_LIMIT = 10 + // ============================================================================ // Types // ============================================================================ @@ -396,7 +402,7 @@ export function detectJunkReads(calls: ToolCall[], dateRange?: DateRange): Waste if (trend === 'resolved') return null const sorted = [...dirCounts.entries()].sort((a, b) => b[1] - a[1]) - const dirList = sorted.slice(0, 3).map(([d, n]) => `${d}/ (${n}x)`).join(', ') + const dirList = sorted.slice(0, TOP_ITEMS_PREVIEW).map(([d, n]) => `${d}/ (${n}x)`).join(', ') const tokensSaved = totalJunkReads * AVG_TOKENS_PER_READ const detected = sorted.map(([d]) => d) @@ -458,7 +464,7 @@ export function detectDuplicateReads(calls: ToolCall[], dateRange?: DateRange): const worst = [...fileDupes.entries()] .sort((a, b) => b[1] - a[1]) - .slice(0, 3) + .slice(0, TOP_ITEMS_PREVIEW) .map(([name, n]) => `${name} (${n + 1}x)`) .join(', ') @@ -542,9 +548,9 @@ export function detectMissingClaudeignore(projectCwds: Set): WasteFindin if (missing.length === 0) return null const shortPaths = missing.map(shortHomePath) - const display = shortPaths.length <= 3 + const display = shortPaths.length <= MISSING_IGNORE_PATHS_PREVIEW + 1 ? shortPaths.join(', ') - : `${shortPaths.slice(0, 2).join(', ')} + ${shortPaths.length - 2} more` + : `${shortPaths.slice(0, MISSING_IGNORE_PATHS_PREVIEW).join(', ')} + ${shortPaths.length - MISSING_IGNORE_PATHS_PREVIEW} more` const tokensSaved = missing.length * ESTIMATED_READS_PER_MISSING_IGNORE * AVG_TOKENS_PER_READ @@ -557,7 +563,7 @@ export function detectMissingClaudeignore(projectCwds: Set): WasteFindin type: 'file-content', label: 'Create .claudeignore in each project root:', path: '.claudeignore', - content: JUNK_DIRS.slice(0, 8).join('\n'), + content: JUNK_DIRS.slice(0, JUNK_DIRS_IGNORE_PREVIEW).join('\n'), }, } } @@ -607,7 +613,7 @@ export function detectBloatedClaudeMd(projectCwds: Set): WasteFinding | const totalExtraLines = sorted.reduce((s, b) => s + (b.expandedLines - CLAUDEMD_HEALTHY_LINES), 0) const tokensSaved = totalExtraLines * CLAUDEMD_TOKENS_PER_LINE - const list = sorted.slice(0, 3).map(b => { + const list = sorted.slice(0, TOP_ITEMS_PREVIEW).map(b => { const importNote = b.imports > 0 ? ` with ${b.imports} @-import${b.imports > 1 ? 's' : ''}` : '' return `${b.path} (${b.expandedLines} lines${importNote})` }).join(', ') @@ -778,7 +784,7 @@ export async function detectGhostAgents(calls: ToolCall[]): Promise 5 ? `, +${ghosts.length - 5} more` : '') + const list = ghosts.slice(0, GHOST_NAMES_PREVIEW).join(', ') + (ghosts.length > GHOST_NAMES_PREVIEW ? `, +${ghosts.length - GHOST_NAMES_PREVIEW} more` : '') return { title: `${ghosts.length} custom agent${ghosts.length > 1 ? 's' : ''} you never use`, @@ -788,7 +794,7 @@ export async function detectGhostAgents(calls: ToolCall[]): Promise 1 ? 's' : ''}:`, - text: ghosts.slice(0, 10).map(name => `mv ~/.claude/agents/${name}.md ~/.claude/agents/.archived/`).join('\n'), + text: ghosts.slice(0, GHOST_CLEANUP_COMMANDS_LIMIT).map(name => `mv ~/.claude/agents/${name}.md ~/.claude/agents/.archived/`).join('\n'), }, } } @@ -808,7 +814,7 @@ export async function detectGhostSkills(calls: ToolCall[]): Promise 5 ? `, +${ghosts.length - 5} more` : '') + const list = ghosts.slice(0, GHOST_NAMES_PREVIEW).join(', ') + (ghosts.length > GHOST_NAMES_PREVIEW ? `, +${ghosts.length - GHOST_NAMES_PREVIEW} more` : '') return { title: `${ghosts.length} skill${ghosts.length > 1 ? 's' : ''} you never use`, @@ -818,7 +824,7 @@ export async function detectGhostSkills(calls: ToolCall[]): Promise 1 ? 's' : ''}:`, - text: ghosts.slice(0, 10).map(name => `mv ~/.claude/skills/${name} ~/.claude/skills/.archived/`).join('\n'), + text: ghosts.slice(0, GHOST_CLEANUP_COMMANDS_LIMIT).map(name => `mv ~/.claude/skills/${name} ~/.claude/skills/.archived/`).join('\n'), }, } } @@ -840,7 +846,7 @@ export async function detectGhostCommands(userMessages: string[]): Promise 5 ? `, +${ghosts.length - 5} more` : '') + const list = ghosts.slice(0, GHOST_NAMES_PREVIEW).join(', ') + (ghosts.length > GHOST_NAMES_PREVIEW ? `, +${ghosts.length - GHOST_NAMES_PREVIEW} more` : '') return { title: `${ghosts.length} slash command${ghosts.length > 1 ? 's' : ''} you never use`, @@ -850,7 +856,7 @@ export async function detectGhostCommands(userMessages: string[]): Promise 1 ? 's' : ''}:`, - text: ghosts.slice(0, 10).map(name => `mv ~/.claude/commands/${name}.md ~/.claude/commands/.archived/`).join('\n'), + text: ghosts.slice(0, GHOST_CLEANUP_COMMANDS_LIMIT).map(name => `mv ~/.claude/commands/${name}.md ~/.claude/commands/.archived/`).join('\n'), }, } } @@ -1108,7 +1114,7 @@ function renderOptimize( ): string { const lines: string[] = [] lines.push('') - lines.push(` ${chalk.bold.hex(ORANGE)('CodeBurn -- config health')}${chalk.dim(' ' + periodLabel)}`) + lines.push(` ${chalk.bold.hex(ORANGE)('CodeBurn config health')}${chalk.dim(' ' + periodLabel)}`) lines.push(chalk.hex(DIM)(' ' + SEP.repeat(PANEL_WIDTH))) const issueSuffix = findings.length > 0 ? `, ${findings.length} issue${findings.length > 1 ? 's' : ''}` : '' From 40b7de6841c6084fcd352abdb1080ecaa19e27b9 Mon Sep 17 00:00:00 2001 From: AgentSeal Date: Thu, 16 Apr 2026 16:27:33 -0700 Subject: [PATCH 12/13] docs: add optimize section with screenshot and command reference Sits between 'Reading the dashboard' (what the numbers mean) and 'How it reads data' (where the data comes from) so the feature lands as the natural next step: here is how to act on the patterns you saw. --- README.md | 32 ++++++++++++++++++++++++++++++++ assets/optimize.jpg | Bin 0 -> 616135 bytes 2 files changed, 32 insertions(+) create mode 100644 assets/optimize.jpg diff --git a/README.md b/README.md index 246aeec..5eaf2c4 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,8 @@ codeburn status # compact one-liner (today + month) codeburn status --format json codeburn export # CSV with today, 7 days, 30 days codeburn export -f json # JSON export +codeburn optimize # find waste, get copy-paste fixes +codeburn optimize -p week # scope the scan to last 7 days ``` Arrow keys switch between Today / 7 Days / 30 Days / Month / All Time. Press `q` to quit, `1` `2` `3` `4` `5` as shortcuts. The dashboard also shows average cost per session and the five most expensive sessions across all projects. @@ -206,6 +208,36 @@ CodeBurn surfaces the data, you read the story. A few patterns worth knowing: These are starting points, not verdicts. A 60% cache hit on a single experimental session is fine. A persistent 60% cache hit across weeks of work is a config issue. +## Optimize + +Once you know what to look for, `codeburn optimize` scans your sessions and your `~/.claude/` setup for the most common waste patterns and hands back exact, copy-paste fixes. It never writes to your files. + +

+ CodeBurn optimize output +

+ +```bash +codeburn optimize # scan the last 30 days +codeburn optimize -p today # today only +codeburn optimize -p week # last 7 days +codeburn optimize --provider claude # restrict to one provider +``` + +**What it detects** + +- Files Claude re-reads across sessions (same content, same context, over and over) +- Low Read:Edit ratio (editing without reading leads to retries and wasted tokens) +- Projects missing a `.claudeignore` (Claude wanders into `node_modules`, `.git`, build dirs) +- Wasted bash output (uncapped `BASH_MAX_OUTPUT_LENGTH`, trailing noise) +- Unused MCP servers still paying their tool-schema overhead every session +- Ghost agents, skills, and slash commands defined in `~/.claude/` but never invoked +- Bloated `CLAUDE.md` files (with `@-import` expansion counted) +- Cache creation overhead and junk directory reads + +Each finding shows the estimated token and dollar savings plus a ready-to-paste fix: a `CLAUDE.md` line, a `.claudeignore` template, an environment variable, or a `mv` command to archive unused items. Findings are ranked by urgency (impact weighted against observed waste) and rolled up into an A-F setup health grade. Repeat runs classify each finding as new, improving, or resolved against a 48-hour recent window. + +You can also open it inline from the dashboard: press `o` when a finding count appears in the status bar, `b` to return. + ## How it reads data **Claude Code** stores session transcripts as JSONL at `~/.claude/projects//.jsonl`. Each assistant entry contains model name, token usage (input, output, cache read, cache write), tool_use blocks, and timestamps. diff --git a/assets/optimize.jpg b/assets/optimize.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d8939d85cf138e0b866db32d4ecf2b62b1a26c3 GIT binary patch literal 616135 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 KVr!YPU$NeSxgMzJ-V|S#!%PJNp?$`m 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≺J#Ii)M+{!pq>9iY7 z-K?Hq2tm#1>&QLSkBX}HU1J80gx0g!Y$d@%+!q0DKAIw6M%?C8u@CrLP_y)}-BVaA9Qw3I%*W zVN}rJ`;rMCETC=G&AKd zz;dun_5d7gU6gSAF7px~n>(83`4ziwjqwliZL8bd;NKl0v#dOru%txIYoxY2MP<{c zcoNeSq$(ZH7X0B`9(AlyNO-F))Homq-bW_LM#V7Dc|3(btzcP16>0CrL6H>I34Wtr z!HrOn9-_@Fe_Xri9No2s;2cyq z7$7JB7e25FwbG5bXB0NuTBcQK%|esmvT_I-fhwCFbenn^(9L9#B34G6k!Z*mm!!ZqhUO8o%t=0GJ~dwa6Um%IledUu z>OPgHj>1`cbYR`P6~SjXN^R2k$5}NN4jj>Mf)%4a3IY8_l>3@i>+6tr-GRA9t9~NQ zDfy&wg6+X4ER$Q5k+4N$qR>a9ROX5E;jm*T0~~G!A8Atyde1U(iXr7hcn7v)P;7qA z@WXKG@DNMuyy*OaP36L~mX}`R5`ugxor8(6k7;g^o1LQqE)e(y@XbWxadAn-wn?af z_SPD#K>=dTT_TCI+$q-CPeu=RZ9t*g?tVK?`J{8e1Y(`>{s9a6j{@Tj0VvZO z-;TbHfEnU2c4Mkn5A|ljs_O(&Yfs_BX0E)6_8D_?kE3AYT;hCbBiulWq>WZ9@d7{m zBbY01z+zu+sV>rpN!q4d1Wa(CmjQN;JP>N(@O14%^FpZI+cc@cf!**25PSzXv;&!W zss%LiMMho~v^bRHsy-|A6RG$yZ;uqoYnwj6cxfDuIw-6FoJsX{ zsovg(j%51X=iCBv$to?h*o6}sk5MVIrHYSwR`1Id_!?yFOR=#Ux@A=TWUbx@ve#iw zL?m%lEXrw4*4VIGQzY%Q)|SmhS&%FNC-BMKzf6;N@DA-dR{J;72d&uMnjA@Y?%MoB za{aY`(19}PisxmkCdO5_dJ-~9`~41iCdiXQ1vlGtEYT*yBOzPQ`!H9ASjT`f_>X`t z>jGR|J*{>ZTGtP^$T>r6*j=Ab_Bz57zO>P+1vdxM0#bl%uOUd|T< zpN0y+P0%eBYj-e6_xo{Uht)^xuMxDhgz6#oygS*EPd;RLREnH$=!Dy18j}UH;I5PA z1jELc(K2t1`jg)Tnh7;yQs04PLLWR}8Si3$KaZ(SBdvU_J`*#+WNxie)QQ52s~#cy zI3!AD;61iaMd>1nm{A#5w_BL|Sq&dJ-~G(U9T4(()Lph))b8?bxYU3oD*9fR0~8h-v<#o#+V!G1!get!#qATaqF zg0#772t@kdOcSLB&^%!y-1W_^%Y+J{c9jp}CgvJ}NCT)^c;&3(cI@wXy1+^?dAF<@ zg(le#=VKex%6~lcNYMli`*RpufsNq0l4r0^%dOE8lfgo#=hPMyyVRT=JR0RD`Gek> zo$8nVXkg043GRzesZ!ZSXjwQt$2KFt;YQSbWc4VU^i;n+@wGTAS7f)pvK<;Q|+vwrtEXg#kF;?uO13lpC7tPb=NbjX+XV={H0+DVVJ8_f@hdxiDFpFl85tCqOOOk%-X#V3cF+1v=$9e@ZzxMclbZdy=6dE-PSgYqDV?fmo!LsgObuA-Q6J|ErLkL zrn{uOgiVKZcbAA8kd|)nTO08{-se8&dEe*z{(OIQueIhJ@XG3Z^xyvu8M~j`B8@tLy`Cu5Kg1S#s=Ax=? ztRlC+YcR9Ifi@Xz;g7i>5*MgdRflVAjLC0S7eGy%?o^a=&0b>h)mc6|L~e@OZP;ZmTcrv4_->ME#3?c!vHA`Vt0Ckga_N|z2ln~rHefo^ z7p-6HcIyI--zWd5^hn_o2M>ul_>fJ2m2{SHeE=eF&bh00_=A2x6c2O2kWrxAVk&k>v~rBR_b+B0-9{(%^qtqVl+Z+YK?V43K(#46*tT+x=;E2?uY#Pot7lVK(23%t}T3E_pX zB1xqVJ)!(ZZp=l3>F&o#b|?0eX?ngf3=*qZtPCaFj7$dhxP*2Y50oVLxQDn#&U_tS zUObYksZq91vCFu0OL57?a2W+P?pH&;u_U@WkFS?$7xR_Rl&bVwykn5cGoO(l1)WfX z&wK#`>ztmoecApm(?vjdCY~_+Q>|c8My9NNc&hki3MH{aQAs%cCKz{5d1 zs9K~j3Xkl3Dqul|rD&#r_5;aTC&Eq_qEO=N&gw=0;pA)tkL`~lJ}T!oKgvvBv+fhX zqdEfEYawgAF}-!cFh@egWIQy6~M9TSMiuGrnq4 zxBKQG1VpwABcd*PAI;h%eGyQfSlm0wdD~RC9<52LikiL!%#^wU9}m!rjSE?1HhC(| zam`OF3!Z!rUl%)@*eSx!y2ck+NL<$m!{D@juE0$lBMPcKe;V7@s7>l4+3U-qPU}PU zUHh{!zC~CtCg#lER|mEaXqsJ`1!Y|0CD#z$EF#+vTrcZK*$bZ?$Wqe_QUnyWj1_4O0h{2R~^PzC2Hpib)3(HT>HvR!vgoLYo7 z#wWoj#q5hB}X#mU7vYp!l%c_N@=v7gz^qD=CBS_I%`oJ37JVARy!(XJm3zFC0AoO-TiA*aZQ1t#;nS5 zbwrQe7Ib~dO3@F-6_3-@gb>Qc3ff>(0}o>wU=*3R57a|HuTZZLChTweY%#=y<6b4~ zyWt*SZBxVd(+{{vNgaQ6KRvMF;31CGE5_<4tf%t02aN-l!J)7aoE<;Q3%eAE8 zJn}dN8ixs^ERwmy*@`L>1lj!OQ`vnQr`X0$N_85s-gX1H18<(Q7sbxYAW^a@6{y01 z!_d2Xg+{RRU|hQ&h4Q^}M4gED4d(uU1gqYuhBFW{RcLds4s%nRZeWi9)8IhD5Zk3G zB{nyW!^f}GSR^rO@FAvo79MH8;lLEOpw4V7G3J66sQ3FPP0Y!VagOIjlKSD~#x~qc zisO&aV$7wn-crE5sT}0!dVejUe18@f(#D)AhPFx>qF7Hg5$sV!F(N89e4a8NQ*sp^@-VU&!bPM#rE%F&&;8E--N140;p zZi~#3nAbc^UC?s!ohIIeo}C7j4)2$$*7H%o3Xs0(30C8F z^>}_eoY8|f%-xsfndd^tTI+`lOD95YR9(MOd6;3V*_HBA;5vvc#q@lMePtp0UBM#gm$uUjR_;e@HY zUKxFl>mLwI$>MNjh>3$FY5ULU_nOeM+Yd+j)7AD;lcDa~SSH|YtGQt%NCDr9USrH{ zZ_1|ui|&eKLNr@~(-tK4a3 z0y&=3lP}pPuY=KSyBMuA%4TDPTQk}0-~+i_OuzOSBZqvlLm20J_h?@PC_yLF&`Z94 zQi3Jfr5ZA!Y>fSV@tDZPJF_IbFII9$iAl*QeOE(ILBzdWl%;3Cr>lL_8(-vp#A%Ol z#jLf7<-Tv{X0Zimy2sdjIIA^kP|Tqb9Yh68=Qc=Nb~zsrV-jUfJ}bayB;dg~Wz)!Y zonbUV5K>D*{XVZ83o@!r z9B62JesuQdUwHvSENuGZ(=RoBI9WPr-h0)Y!lEJ3-Pdtww(r>G;q#qpm>2h2`ehb& zI{7AA1%enH*VBm=a(OArWuKbG9`Ea^~(~fymE_5TZ{6clh zlQy%y)hu9MAQMytu_tdEFx-Pf4R>@qI{9<$x?v+vy7b-7GOhSBAwdI|a5HwvSv$gF z@q?Gs^Tgyl+s(7m6YA@oU+7K|SH6>fJ3tXvq#iVb^oo^RN6ioF znkV)ho4WdZEhq{F%2H~(z0EX@R0oNY%c!?yt9~;}*D*@`N(f-DSJ+*6jP7wFVUYXO z)Gl6E$$T{dWK2Thhx<3Jsq^iTIO+TTr0)`-#a-yY3mKhA=9+}9T?XxT)BM%dtCu

_lho-54hNBs^ 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ΝA&s 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

&ljtDEk!~D9X0cgvMh_`rY)b!nilHh9 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 |LEp#Fs(S;nyyWzgmkrt7G6^;6cjt;&jvT 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

vH*k5O2;dj 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%0D@h_TOsgyh5h_S`=z4ebbN@x)EmQD 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

7fH2IszC`9AmlSG2J+KsjkvCRbpo(+fIQ5n>|L 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 os@bUH)xI;;Eg>0&{9sTf|49HqQ3Qb%isGj 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 $Avhj_Q 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 o#;&^IH#F$~03kgW7-%x@_ Date: Thu, 16 Apr 2026 16:31:19 -0700 Subject: [PATCH 13/13] chore: release 0.7.0 -- codeburn optimize New top-level command plus in-TUI view for finding token waste and getting copy-paste fixes. 11 detectors, A-F setup health grade, recent-vs-baseline trend tracking, per-project context budget column. 198 tests. --- CHANGELOG.md | 35 +++++++++++++++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd0b560..aa90735 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,40 @@ # Changelog +## 0.7.0 - 2026-04-16 + +### Added +- **`codeburn optimize` command.** Scans your sessions and your `~/.claude/` + setup for 11 common waste patterns and hands back exact copy-paste fixes. + Detection-only, never writes to user files. Supports `--period` (today, + week, 30days, month, all) and `--provider` (all, claude, codex, cursor). +- **Setup health grade (A-F).** Urgency-weighted rollup of all findings, with + impact scored against observed waste so the most expensive issues rank + first. High findings penalise more, medium less, low least. +- **Trend tracking.** Repeat runs classify each finding as new, improving, + or resolved against a 48-hour recent window, so fixed issues disappear + instead of lingering as noise. +- **11 detectors:** files Claude re-reads across sessions, low Read:Edit + ratio, projects missing `.claudeignore`, uncapped `BASH_MAX_OUTPUT_LENGTH`, + unused MCP servers, ghost agents, ghost skills, ghost slash commands, + bloated `CLAUDE.md` files (with `@-import` expansion counted), cache + creation overhead, and junk directory reads. +- **Copy-paste fixes.** Each finding comes with a ready-to-paste remedy: a + `CLAUDE.md` line, a `.claudeignore` template, an environment variable, or + a `mv` command to archive unused items. +- **In-TUI optimize view.** Press `o` in the dashboard when the status bar + shows a finding count, `b` to return. Same engine as the standalone + command, scoped to the current period and provider. +- **Per-project context budget column.** By Project panel now shows the + estimated per-session context overhead for each project (system prompt + + tools + `CLAUDE.md` + skills). +- **34 filesystem-mocking tests.** Tmpdir fixtures with `os.homedir` mocked + via `vi.mock` cover the detector surface end to end. Total suite: 198 + tests across 13 files. + +### Performance +- **mtime pre-filter + parallel reads + 60s result cache** cut a cold scan + from 12-17s to 6-7s on a 10k-session history. + ## 0.6.1 - 2026-04-16 ### Added diff --git a/package-lock.json b/package-lock.json index d40c129..e9a6b9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codeburn", - "version": "0.6.1", + "version": "0.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codeburn", - "version": "0.6.1", + "version": "0.7.0", "license": "MIT", "dependencies": { "chalk": "^5.4.1", diff --git a/package.json b/package.json index 35ad388..15cb1bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codeburn", - "version": "0.6.1", + "version": "0.7.0", "description": "See where your AI coding tokens go - by task, tool, model, and project", "type": "module", "main": "./dist/cli.js",