From 495a25433838ca577f92fe83ca383c31adfb61b4 Mon Sep 17 00:00:00 2001 From: Resham Joshi Date: Fri, 17 Apr 2026 16:55:56 -0700 Subject: [PATCH] feat(mac): native Swift menubar app + one-command install Introduces mac/ with a native SwiftUI menubar app that replaces the previous SwiftBar plugin entirely. Install via `npx codeburn menubar`, which downloads the .app from GitHub Releases, strips Gatekeeper quarantine, and drops it into ~/Applications. Highlights - mac/ SwiftUI app: agent tabs, Today/7/30/Month/All period switcher, Trend/Forecast/Pulse/Stats/Plan insights, activity + model breakdowns, optimize findings, CSV/JSON export, Star-on-GitHub banner, live 60s refresh, instant currency switching with offline FX cache. - Security: CodeburnCLI argv-based spawn (no shell interpretation), SafeFile symlink guards + O_NOFOLLOW writes, FX rate clamping to [0.0001, 1_000_000], keychain filtered to account == "default", removed byte-window credential log, in-flight refresh guard, POSIX flock on config.json writes, TerminalLauncher validates argv before AppleScript interpolation. - Performance: shared static NumberFormatter (thousands of allocations per popover redraw eliminated), concurrent pipe drain with 20 MB cap + 60s timeout in DataClient, Observation-tracked reactive UI, 5-min payload cache keyed on (period, provider). - CLI: new `codeburn menubar` subcommand that downloads + installs + launches the .app (no clone, no build). New `status --format menubar-json` payload builder. `export` rewritten to produce a folder of one-table-per-file CSVs with a `.codeburn-export` marker so arbitrary -o paths cannot be silently deleted. - Removed: src/menubar.ts (SwiftBar plugin generator), install-menubar / uninstall-menubar subcommands, `status --format menubar` directive output, tests/menubar.test.ts, tests/security/menubar-injection.test.ts. - Release: .github/workflows/release-menubar.yml builds universal binary, assembles .app, ad-hoc signs, zips, uploads on mac-v* tag push. Runs on the free macos-latest runner. Tests - 230 TypeScript tests pass - 10 Swift CapacityEstimator tests pass - TypeScript typecheck clean - Swift release build clean --- .github/workflows/release-menubar.yml | 70 + README.md | 11 +- assets/menubar.png | Bin 304605 -> 307483 bytes mac/.gitignore | 6 + mac/Package.swift | 29 + mac/README.md | 88 ++ mac/Scripts/package-app.sh | 103 ++ mac/Sources/CodeBurnMenubar/AppStore.swift | 307 +++++ mac/Sources/CodeBurnMenubar/CodeBurnApp.swift | 182 +++ .../CodeBurnMenubar/CurrencyState.swift | 209 +++ .../Data/CapacityEstimator.swift | 127 ++ .../CodeBurnMenubar/Data/DataClient.swift | 107 ++ .../CodeBurnMenubar/Data/MenubarPayload.swift | 123 ++ .../Data/SubscriptionClient.swift | 306 +++++ .../Data/SubscriptionSnapshotStore.swift | 102 ++ .../Data/SubscriptionUsage.swift | 46 + .../Security/CodeburnCLI.swift | 59 + .../CodeBurnMenubar/Security/SafeFile.swift | 128 ++ .../Security/TerminalLauncher.swift | 40 + mac/Sources/CodeBurnMenubar/Theme/Theme.swift | 32 + .../Views/ActivitySection.swift | 87 ++ .../CodeBurnMenubar/Views/AgentTabStrip.swift | 92 ++ .../Views/FindingsSection.swift | 290 ++++ .../Views/HeatmapSection.swift | 1219 +++++++++++++++++ .../CodeBurnMenubar/Views/HeroSection.swift | 55 + .../Views/MenuBarContent.swift | 401 ++++++ .../CodeBurnMenubar/Views/ModelsSection.swift | 97 ++ .../Views/PeriodSegmentedControl.swift | 36 + .../Views/SectionCaption.swift | 85 ++ .../CodeBurnMenubar/Views/SparklineView.swift | 99 ++ .../CapacityEstimatorTests.swift | 158 +++ src/cli.ts | 217 ++- src/currency.ts | 25 +- src/daily-cache.ts | 118 ++ src/day-aggregator.ts | 142 ++ src/export.ts | 310 +++-- src/menubar-installer.ts | 173 +++ src/menubar-json.ts | 182 +++ src/menubar.ts | 334 ----- src/parser.ts | 17 +- tests/daily-cache.test.ts | 189 +++ tests/day-aggregator.test.ts | 258 ++++ tests/export.test.ts | 11 +- tests/menubar-json.test.ts | 234 ++++ tests/menubar.test.ts | 57 - tests/security/menubar-injection.test.ts | 47 - 46 files changed, 6433 insertions(+), 575 deletions(-) create mode 100644 .github/workflows/release-menubar.yml create mode 100644 mac/.gitignore create mode 100644 mac/Package.swift create mode 100644 mac/README.md create mode 100755 mac/Scripts/package-app.sh create mode 100644 mac/Sources/CodeBurnMenubar/AppStore.swift create mode 100644 mac/Sources/CodeBurnMenubar/CodeBurnApp.swift create mode 100644 mac/Sources/CodeBurnMenubar/CurrencyState.swift create mode 100644 mac/Sources/CodeBurnMenubar/Data/CapacityEstimator.swift create mode 100644 mac/Sources/CodeBurnMenubar/Data/DataClient.swift create mode 100644 mac/Sources/CodeBurnMenubar/Data/MenubarPayload.swift create mode 100644 mac/Sources/CodeBurnMenubar/Data/SubscriptionClient.swift create mode 100644 mac/Sources/CodeBurnMenubar/Data/SubscriptionSnapshotStore.swift create mode 100644 mac/Sources/CodeBurnMenubar/Data/SubscriptionUsage.swift create mode 100644 mac/Sources/CodeBurnMenubar/Security/CodeburnCLI.swift create mode 100644 mac/Sources/CodeBurnMenubar/Security/SafeFile.swift create mode 100644 mac/Sources/CodeBurnMenubar/Security/TerminalLauncher.swift create mode 100644 mac/Sources/CodeBurnMenubar/Theme/Theme.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/ActivitySection.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/AgentTabStrip.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/FindingsSection.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/HeatmapSection.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/HeroSection.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/MenuBarContent.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/ModelsSection.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/PeriodSegmentedControl.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/SectionCaption.swift create mode 100644 mac/Sources/CodeBurnMenubar/Views/SparklineView.swift create mode 100644 mac/Tests/CodeBurnMenubarTests/CapacityEstimatorTests.swift create mode 100644 src/daily-cache.ts create mode 100644 src/day-aggregator.ts create mode 100644 src/menubar-installer.ts create mode 100644 src/menubar-json.ts delete mode 100644 src/menubar.ts create mode 100644 tests/daily-cache.test.ts create mode 100644 tests/day-aggregator.test.ts create mode 100644 tests/menubar-json.test.ts delete mode 100644 tests/menubar.test.ts delete mode 100644 tests/security/menubar-injection.test.ts diff --git a/.github/workflows/release-menubar.yml b/.github/workflows/release-menubar.yml new file mode 100644 index 0000000..df8fd31 --- /dev/null +++ b/.github/workflows/release-menubar.yml @@ -0,0 +1,70 @@ +name: Release macOS Menubar + +# Triggers on a `mac-v*` tag push (e.g. `git tag mac-v0.8.0 && git push origin mac-v0.8.0`), +# or manually via the Actions tab. Runs entirely on the free macos-latest runner -- no Apple +# Developer Program membership, no signing certificates, no secrets required. The bundle ships +# ad-hoc signed; `npx codeburn menubar` strips the download quarantine flag on install so +# Gatekeeper stays quiet. +on: + push: + tags: + - 'mac-v*' + workflow_dispatch: + inputs: + version: + description: 'Version label for the bundle (e.g. v0.8.0 or dev-preview)' + required: true + default: 'dev-preview' + +permissions: + contents: write # Needed to create the release + upload assets. + +jobs: + build: + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Resolve version label + id: version + run: | + if [[ "${GITHUB_REF}" == refs/tags/mac-v* ]]; then + echo "value=${GITHUB_REF#refs/tags/mac-}" >> "$GITHUB_OUTPUT" + else + echo "value=${{ github.event.inputs.version }}" >> "$GITHUB_OUTPUT" + fi + + - name: Show Swift toolchain + run: swift --version + + - name: Build + bundle + zip + run: mac/Scripts/package-app.sh "${{ steps.version.outputs.value }}" + + - name: Upload artifact (for manual runs) + if: github.event_name == 'workflow_dispatch' + uses: actions/upload-artifact@v4 + with: + name: CodeBurnMenubar-${{ steps.version.outputs.value }} + path: mac/.build/dist/CodeBurnMenubar-*.zip + if-no-files-found: error + + - name: Create / update GitHub Release + if: startsWith(github.ref, 'refs/tags/mac-v') + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.ref_name }} + name: Menubar ${{ steps.version.outputs.value }} + body: | + Install with: + + ``` + npx codeburn menubar + ``` + + Unsigned build. The installer clears Gatekeeper quarantine on download, so the + app launches without warnings. Direct-download users from this page may see + "cannot verify developer" -- right-click → Open once to dismiss it, or use the + npx command above. + files: mac/.build/dist/CodeBurnMenubar-*.zip + fail_on_unmatched_files: true diff --git a/README.md b/README.md index 151a090..4b6e167 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ CodeBurn TUI dashboard

-By task type, tool, model, MCP server, and project. Supports **Claude Code**, **Codex** (OpenAI), **Cursor**, **OpenCode**, **Pi**, and **GitHub Copilot** with a provider plugin system. Tracks one-shot success rate per activity type so you can see where the AI nails it first try vs. burns tokens on edit/test/fix retries. Interactive TUI dashboard with gradient charts, responsive panels, and keyboard navigation. macOS menu bar widget via SwiftBar. CSV/JSON export. +By task type, tool, model, MCP server, and project. Supports **Claude Code**, **Codex** (OpenAI), **Cursor**, **OpenCode**, **Pi**, and **GitHub Copilot** with a provider plugin system. Tracks one-shot success rate per activity type so you can see where the AI nails it first try vs. burns tokens on edit/test/fix retries. Interactive TUI dashboard with gradient charts, responsive panels, and keyboard navigation. Native macOS menubar app in `mac/`. CSV/JSON export. Works by reading session data directly from disk. No wrapper, no proxy, no API keys. Pricing from LiteLLM (auto-cached, all models supported). @@ -156,14 +156,13 @@ The menu bar widget includes a currency picker with 17 common currencies. For an ## Menu Bar -CodeBurn SwiftBar menu bar widget +CodeBurn macOS menubar app ```bash -codeburn install-menubar # install SwiftBar/xbar plugin -codeburn uninstall-menubar # remove it +npx codeburn menubar ``` -Requires [SwiftBar](https://github.com/swiftbar/SwiftBar) (`brew install --cask swiftbar`). Shows today's cost in the menu bar with a flame icon. Dropdown shows activity breakdown, model costs, token stats, per-provider cost breakdown, and a currency picker. Refreshes every 5 minutes. +One command: downloads the latest `.app`, installs into `~/Applications`, and launches it. Re-run with `--force` to reinstall. Native Swift + SwiftUI app lives in `mac/` (see `mac/README.md` for build details). Shows today's cost with a flame icon, opens a popover with agent tabs, period switcher (Today / 7 Days / 30 Days / Month / All), Trend / Forecast / Pulse / Stats / Plan insights, activity and model breakdowns, optimize findings, and CSV/JSON export. Refreshes live via FSEvents plus a 60-second poll. ## What it tracks @@ -269,7 +268,7 @@ src/ classifier.ts 13-category task classifier types.ts Type definitions format.ts Text rendering (status bar) - menubar.ts SwiftBar plugin generator + menubar-json.ts Payload builder consumed by the native macOS menubar app in mac/ export.ts CSV/JSON multi-period export config.ts Config file management (~/.config/codeburn/) currency.ts Currency conversion, exchange rates, Intl formatting diff --git a/assets/menubar.png b/assets/menubar.png index 1f93d4dcde5953733fcafa858d6e0215f3d615d7..1ad264aa0588e9e4a9d3cc680f82608a28f3b672 100644 GIT binary patch literal 307483 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%0D~&Aq6o9P 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ⅅiNlvL>&U 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%0AXS|uD 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 viuilbEX|(3E(c|}Lva85* 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

    M>P_s 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

    ak&8&7XIK+=xWamC`3awMu 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

  1. 9**Gc9*DP5zEz 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] +# Defaults to `dev` if no version is given. + +set -euo pipefail + +VERSION="${1:-dev}" +BUNDLE_NAME="CodeBurnMenubar.app" +BUNDLE_ID="org.agentseal.codeburn-menubar" +EXECUTABLE_NAME="CodeBurnMenubar" +MIN_MACOS="14.0" + +repo_root() { + git rev-parse --show-toplevel 2>/dev/null || (cd "$(dirname "$0")/../.." && pwd) +} + +ROOT=$(repo_root) +MAC_DIR="${ROOT}/mac" +DIST_DIR="${MAC_DIR}/.build/dist" + +cd "${MAC_DIR}" + +echo "▸ Cleaning previous dist..." +rm -rf "${DIST_DIR}" +mkdir -p "${DIST_DIR}" + +echo "▸ Building universal binary (arm64 + x86_64)..." +swift build -c release --arch arm64 --arch x86_64 + +BIN_PATH=$(swift build -c release --arch arm64 --arch x86_64 --show-bin-path) +BUILT_BINARY="${BIN_PATH}/${EXECUTABLE_NAME}" +if [[ ! -x "${BUILT_BINARY}" ]]; then + echo "Binary not found at ${BUILT_BINARY}" >&2 + exit 1 +fi + +echo "▸ Assembling ${BUNDLE_NAME}..." +BUNDLE="${DIST_DIR}/${BUNDLE_NAME}" +mkdir -p "${BUNDLE}/Contents/MacOS" +mkdir -p "${BUNDLE}/Contents/Resources" +cp "${BUILT_BINARY}" "${BUNDLE}/Contents/MacOS/${EXECUTABLE_NAME}" + +cat > "${BUNDLE}/Contents/Info.plist" < + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + CodeBurn Menubar + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + AppIcon + CFBundleIdentifier + ${BUNDLE_ID} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${EXECUTABLE_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${VERSION} + CFBundleVersion + ${VERSION} + LSMinimumSystemVersion + ${MIN_MACOS} + LSUIElement + + NSHighResolutionCapable + + NSHumanReadableCopyright + © AgentSeal + + +PLIST + +cat > "${BUNDLE}/Contents/PkgInfo" <<'PKG' +APPL???? +PKG + +# Ad-hoc sign so macOS treats the bundle as internally consistent. This does NOT give us a +# recognisable developer name in Finder (that needs the $99 Developer ID cert), but it +# satisfies macOS's minimum bundle-validity checks on 14+ and prevents some Gatekeeper edge +# cases on managed Macs. +echo "▸ Ad-hoc signing..." +codesign --force --sign - --timestamp=none --deep "${BUNDLE}" 2>/dev/null || true +codesign --verify --deep --strict "${BUNDLE}" 2>/dev/null || echo " (signature verify skipped)" + +ZIP_NAME="CodeBurnMenubar-${VERSION}.zip" +ZIP_PATH="${DIST_DIR}/${ZIP_NAME}" +echo "▸ Packaging ${ZIP_NAME}..." +(cd "${DIST_DIR}" && /usr/bin/ditto -c -k --keepParent "${BUNDLE_NAME}" "${ZIP_NAME}") + +echo "" +echo "✓ Built ${ZIP_PATH}" +ls -la "${DIST_DIR}" diff --git a/mac/Sources/CodeBurnMenubar/AppStore.swift b/mac/Sources/CodeBurnMenubar/AppStore.swift new file mode 100644 index 0000000..cd26d76 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/AppStore.swift @@ -0,0 +1,307 @@ +import Foundation +import Observation + +private let cacheTTLSeconds: TimeInterval = 300 + +struct CachedPayload { + let payload: MenubarPayload + let fetchedAt: Date + var isFresh: Bool { Date().timeIntervalSince(fetchedAt) < cacheTTLSeconds } +} + +struct PayloadCacheKey: Hashable { + let period: Period + let provider: ProviderFilter +} + +@MainActor +@Observable +final class AppStore { + var selectedProvider: ProviderFilter = .all + var selectedPeriod: Period = .today + var selectedInsight: InsightMode = .trend + var currency: String = "USD" + var isLoading: Bool = false + var lastError: String? + var subscription: SubscriptionUsage? + var subscriptionError: String? + var subscriptionLoadState: SubscriptionLoadState = .idle + var capacityEstimates: [String: CapacityEstimate] = [:] + + private var cache: [PayloadCacheKey: CachedPayload] = [:] + + private var currentKey: PayloadCacheKey { + PayloadCacheKey(period: selectedPeriod, provider: selectedProvider) + } + + var payload: MenubarPayload { + cache[currentKey]?.payload ?? .empty + } + + /// Today (across all providers) is pinned for the always-visible menubar icon, independent of + /// the popover's selected period or provider. + var todayPayload: MenubarPayload? { + cache[PayloadCacheKey(period: .today, provider: .all)]?.payload + } + + var hasCachedData: Bool { + cache[currentKey] != nil + } + + var findingsCount: Int { + payload.optimize.findingCount + } + + /// Switch to a period. Uses cached payload if fresh; otherwise fetches. + func switchTo(period: Period) async { + selectedPeriod = period + if let cached = cache[currentKey], cached.isFresh { return } + await refresh(includeOptimize: true) + } + + /// Switch to a provider filter. Uses cached payload if fresh; otherwise fetches. + func switchTo(provider: ProviderFilter) async { + selectedProvider = provider + if let cached = cache[currentKey], cached.isFresh { return } + await refresh(includeOptimize: true) + } + + private var inFlightKeys: Set = [] + + /// Refresh the currently selected (period, provider) combination. Guards against concurrent + /// fetches for the same key so a slow initial request can't overwrite a newer one that + /// finished first (which would show stale numbers the user has already moved past). + func refresh(includeOptimize: Bool) async { + let key = currentKey + guard !inFlightKeys.contains(key) else { return } + inFlightKeys.insert(key) + isLoading = true + defer { + inFlightKeys.remove(key) + isLoading = false + } + do { + let fresh = try await DataClient.fetch(period: key.period, provider: key.provider, includeOptimize: includeOptimize) + cache[key] = CachedPayload(payload: fresh, fetchedAt: Date()) + lastError = nil + } catch { + lastError = String(describing: error) + NSLog("CodeBurn: fetch failed for \(key.period.rawValue)/\(key.provider.rawValue): \(error)") + } + } + + /// Background refresh for a period other than the visible one (e.g. keeping today fresh for the menubar badge). + /// Does not toggle isLoading, so the popover's loading overlay is unaffected. + /// Always uses the .all provider since the menubar badge shows total spend. + func refreshQuietly(period: Period) async { + do { + let fresh = try await DataClient.fetch(period: period, provider: .all, includeOptimize: true) + cache[PayloadCacheKey(period: period, provider: .all)] = CachedPayload(payload: fresh, fetchedAt: Date()) + } catch { + NSLog("CodeBurn: quiet refresh failed for \(period.rawValue): \(error)") + } + } + + /// Fetch Claude subscription usage. Sets subscription = nil on missing creds (API users / unauthenticated). + /// Triggered lazily when the user opens the Plan pill, so the Keychain prompt only fires on intent. + func refreshSubscription() async { + subscriptionLoadState = .loading + do { + let usage = try await SubscriptionClient.fetch() + subscription = usage + subscriptionError = nil + subscriptionLoadState = .loaded + await captureSnapshots(for: usage) + } catch SubscriptionError.noCredentials { + subscription = nil + subscriptionError = nil + subscriptionLoadState = .noCredentials + } catch { + subscription = nil + subscriptionError = String(describing: error) + subscriptionLoadState = .failed + NSLog("CodeBurn: subscription fetch failed: \(error)") + } + } + + /// Persist one snapshot per window so we can answer "what did the prior cycle end at?" + /// when the current window has just reset and projection from current data isn't meaningful. + /// Also computes the effective_tokens consumed inside each 7-day window from local history, + /// which the CapacityEstimator uses to derive the absolute token capacity per tier. + private func captureSnapshots(for usage: SubscriptionUsage) async { + let now = Date() + let history = payload.history.daily + + let captures: [(key: String, percent: Double?, resetsAt: Date?, effective: Double?)] = [ + ("five_hour", usage.fiveHourPercent, usage.fiveHourResetsAt, nil), + ("seven_day", usage.sevenDayPercent, usage.sevenDayResetsAt, + effectiveTokensInLast7Days(history: history, asOf: now)), + ("seven_day_opus", usage.sevenDayOpusPercent, usage.sevenDayOpusResetsAt, nil), + ("seven_day_sonnet", usage.sevenDaySonnetPercent, usage.sevenDaySonnetResetsAt, nil), + ] + for capture in captures { + guard let percent = capture.percent, let resetsAt = capture.resetsAt else { continue } + await SubscriptionSnapshotStore.record(SubscriptionSnapshot( + windowKey: capture.key, + percent: percent, + resetsAt: resetsAt, + capturedAt: now, + effectiveTokens: capture.effective + )) + } + + await refreshCapacityEstimates() + } + + /// Sum effective tokens (input + 5*output + cache_creation + 0.1*cache_read) across the + /// last 7 days of dailyHistory. Used as the "tokens consumed in 7-day window" reading paired + /// with the API-reported percent for capacity estimation. + private func effectiveTokensInLast7Days(history: [DailyHistoryEntry], asOf now: Date) -> Double { + let cutoff = ISO8601DateFormatter().string(from: now.addingTimeInterval(-7 * 86400)).prefix(10) + return history + .filter { $0.date >= cutoff } + .reduce(0.0) { $0 + $1.effectiveTokens } + } + + /// Run CapacityEstimator over each window's accumulated snapshots. Only snapshots with a + /// non-nil effectiveTokens contribute. Result lives in capacityEstimates dict for UI gating. + private func refreshCapacityEstimates() async { + var next: [String: CapacityEstimate] = [:] + for key in ["seven_day", "seven_day_opus", "seven_day_sonnet"] { + let snaps = await SubscriptionSnapshotStore.snapshots(for: key) + let capacitySnaps = snaps.compactMap { s -> CapacitySnapshot? in + guard let effective = s.effectiveTokens, effective > 0 else { return nil } + return CapacitySnapshot(percent: s.percent, effectiveTokens: effective, capturedAt: s.capturedAt) + } + if let estimate = CapacityEstimator.estimate(capacitySnaps) { + next[key] = estimate + } + } + capacityEstimates = next + } +} + +enum SupportedCurrency: String, CaseIterable, Identifiable { + case USD, GBP, EUR, AUD, CAD, NZD, JPY, CHF, INR, BRL, SEK, SGD, HKD, KRW, MXN, ZAR, DKK + var id: String { rawValue } + var displayName: String { + switch self { + case .USD: "US Dollar" + case .GBP: "British Pound" + case .EUR: "Euro" + case .AUD: "Australian Dollar" + case .CAD: "Canadian Dollar" + case .NZD: "New Zealand Dollar" + case .JPY: "Japanese Yen" + case .CHF: "Swiss Franc" + case .INR: "Indian Rupee" + case .BRL: "Brazilian Real" + case .SEK: "Swedish Krona" + case .SGD: "Singapore Dollar" + case .HKD: "Hong Kong Dollar" + case .KRW: "South Korean Won" + case .MXN: "Mexican Peso" + case .ZAR: "South African Rand" + case .DKK: "Danish Krone" + } + } +} + +enum ProviderFilter: String, CaseIterable, Identifiable { + case all = "All" + case claude = "Claude" + case codex = "Codex" + case cursor = "Cursor" + case copilot = "Copilot" + + var id: String { rawValue } + + /// Maps to the CLI's `--provider` argument values. + var cliArg: String { + switch self { + case .all: "all" + case .claude: "claude" + case .codex: "codex" + case .cursor: "cursor" + case .copilot: "copilot" + } + } +} + +enum SubscriptionLoadState: Sendable, Equatable { + case idle // never tried, awaiting user intent + case loading // fetch in progress + case loaded // success; subscription is populated + case noCredentials // tried; user has no Claude OAuth (API user / not logged in) + case failed // tried; error occurred +} + +enum InsightMode: String, CaseIterable, Identifiable { + case plan = "Plan" + case trend = "Trend" + case forecast = "Forecast" + case pulse = "Pulse" + case stats = "Stats" + var id: String { rawValue } +} + +enum Period: String, CaseIterable, Identifiable { + case today = "Today" + case sevenDays = "7 Days" + case thirtyDays = "30 Days" + case month = "Month" + case all = "All" + + var id: String { rawValue } + + /// Maps to the CLI's `--period` argument values. + var cliArg: String { + switch self { + case .today: "today" + case .sevenDays: "week" + case .thirtyDays: "30days" + case .month: "month" + case .all: "all" + } + } +} + +/// NumberFormatter is expensive to instantiate (~microseconds each) and currency/token values +/// are formatted dozens of times per popover refresh. These shared instances avoid thousands of +/// allocations per frame while SwiftUI's Observation framework still triggers redraws when +/// CurrencyState.shared mutates. +private let groupedDecimalFormatter: NumberFormatter = { + let f = NumberFormatter() + f.numberStyle = .decimal + f.groupingSeparator = "," + f.decimalSeparator = "." + f.maximumFractionDigits = 2 + f.minimumFractionDigits = 2 + return f +}() + +private let thousandsFormatter: NumberFormatter = { + let f = NumberFormatter() + f.numberStyle = .decimal + f.groupingSeparator = "," + return f +}() + +extension Double { + func asCurrency() -> String { + let state = CurrencyState.shared + let converted = self * state.rate + return state.symbol + (groupedDecimalFormatter.string(from: NSNumber(value: converted)) ?? "\(converted)") + } + + func asCompactCurrency() -> String { + let state = CurrencyState.shared + return String(format: "\(state.symbol)%.2f", self * state.rate) + } +} + +extension Int { + func asThousandsSeparated() -> String { + thousandsFormatter.string(from: NSNumber(value: self)) ?? "\(self)" + } +} diff --git a/mac/Sources/CodeBurnMenubar/CodeBurnApp.swift b/mac/Sources/CodeBurnMenubar/CodeBurnApp.swift new file mode 100644 index 0000000..9a18364 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/CodeBurnApp.swift @@ -0,0 +1,182 @@ +import SwiftUI +import AppKit +import Observation + +private let refreshIntervalSeconds: UInt64 = 60 +private let nanosPerSecond: UInt64 = 1_000_000_000 +private let refreshIntervalNanos: UInt64 = refreshIntervalSeconds * nanosPerSecond +/// Fixed so the popover's anchor point doesn't shift each time today's cost changes. +private let statusItemFixedWidth: CGFloat = 130 +private let popoverWidth: CGFloat = 360 +private let popoverHeight: CGFloat = 660 +private let menubarTitleFontSize: CGFloat = 13 + +@main +struct CodeBurnApp: App { + @NSApplicationDelegateAdaptor(AppDelegate.self) var delegate + + var body: some Scene { + // SwiftUI App needs at least one scene. Settings is invisible by default. + Settings { + EmptyView() + } + } +} + +@MainActor +final class AppDelegate: NSObject, NSApplicationDelegate, NSPopoverDelegate { + private var statusItem: NSStatusItem! + private var popover: NSPopover! + private let store = AppStore() + private var refreshTask: Task? + + func applicationDidFinishLaunching(_ notification: Notification) { + // Menubar accessory -- no Dock icon, no app switcher entry. + NSApp.setActivationPolicy(.accessory) + + restorePersistedCurrency() + setupStatusItem() + setupPopover() + observeStore() + startRefreshLoop() + // Subscription is fetched lazily when the user opens the Plan pill, so the macOS + // Keychain prompt never fires until the user explicitly asks for it. + } + + /// Loads the currency code persisted by `codeburn currency` so a relaunch picks up where + /// the user left off. Rate is resolved from the on-disk FX cache if present, otherwise + /// fetched live in the background. + private func restorePersistedCurrency() { + guard let code = CLICurrencyConfig.loadCode(), code != "USD" else { return } + let symbol = CurrencyState.symbolForCode(code) + store.currency = code + + Task { + let cached = await FXRateCache.shared.cachedRate(for: code) + await MainActor.run { + CurrencyState.shared.apply(code: code, rate: cached, symbol: symbol) + } + let fresh = await FXRateCache.shared.rate(for: code) + if let fresh, fresh != cached { + await MainActor.run { + CurrencyState.shared.apply(code: code, rate: fresh, symbol: symbol) + } + } + } + } + + func applicationWillTerminate(_ notification: Notification) { + refreshTask?.cancel() + } + + private func startRefreshLoop() { + refreshTask = Task { [weak self] in + while !Task.isCancelled { + guard let self else { return } + if self.store.selectedPeriod != .today { + await self.store.refreshQuietly(period: .today) + } + // Optimize is fast (~1s warm-cache) so include findings on every refresh. + await self.store.refresh(includeOptimize: true) + try? await Task.sleep(nanoseconds: refreshIntervalNanos) + } + } + } + + private func observeStore() { + withObservationTracking { + _ = store.payload + _ = store.todayPayload + } onChange: { [weak self] in + Task { @MainActor in + self?.refreshStatusButton() + self?.observeStore() + } + } + } + + // MARK: - Status Item + + private func setupStatusItem() { + // Fixed width so the popover anchor (and thus popover position) doesn't shift + // every time today's cost or findings badge changes. + statusItem = NSStatusBar.system.statusItem(withLength: statusItemFixedWidth) + guard let button = statusItem.button else { return } + button.target = self + button.action = #selector(handleButtonClick(_:)) + button.sendAction(on: [.leftMouseUp, .rightMouseUp]) + refreshStatusButton() + } + + /// Composes the menubar title as a single attributed string with the flame as an inline + /// NSTextAttachment. NSStatusItem's separate `image` + `attributedTitle` path leaves a + /// stubborn gap between icon and text on some macOS releases (the icon hugs the left edge + /// of the status item, the title starts at its own baseline), so we inline both so they + /// flow as one typographic unit with a single, controllable gap. + private func refreshStatusButton() { + guard let button = statusItem.button else { return } + + // Clear any previously-set image so the attachment is the only glyph rendered. + button.image = nil + button.imagePosition = .noImage + + let font = NSFont.monospacedDigitSystemFont(ofSize: menubarTitleFontSize, weight: .medium) + let flameConfig = NSImage.SymbolConfiguration(pointSize: menubarTitleFontSize, weight: .medium) + let flame = NSImage(systemSymbolName: "flame.fill", accessibilityDescription: "CodeBurn")? + .withSymbolConfiguration(flameConfig) + flame?.isTemplate = true + + let attachment = NSTextAttachment() + attachment.image = flame + if let size = flame?.size { + // Nudge the image down ~2pt so its visual centre sits on the text baseline mid-line + // rather than riding high. Exact value tuned against SF Pro Display 13pt. + attachment.bounds = CGRect(x: 0, y: -2, width: size.width, height: size.height) + } + + let hasPayload = store.todayPayload != nil + let valueText = " " + (store.todayPayload?.current.cost.asCompactCurrency() ?? "$—") + let color: NSColor = hasPayload ? .labelColor : .secondaryLabelColor + + let composed = NSMutableAttributedString() + composed.append(NSAttributedString(attachment: attachment)) + composed.append(NSAttributedString( + string: valueText, + attributes: [.font: font, .foregroundColor: color] + )) + button.attributedTitle = composed + } + + // MARK: - Popover + + private func setupPopover() { + popover = NSPopover() + popover.contentSize = NSSize(width: popoverWidth, height: popoverHeight) + popover.behavior = .transient // auto-close only on explicit outside click + popover.animates = true + popover.delegate = self + + let content = MenuBarContent() + .environment(store) + .frame(width: popoverWidth) + + popover.contentViewController = NSHostingController(rootView: content) + } + + @objc private func handleButtonClick(_ sender: AnyObject?) { + guard let button = statusItem.button else { return } + if popover.isShown { + popover.performClose(sender) + } else { + NSApp.activate(ignoringOtherApps: true) + popover.show(relativeTo: button.bounds, of: button, preferredEdge: .minY) + popover.contentViewController?.view.window?.makeKey() + } + } + + // MARK: - NSPopoverDelegate + + func popoverShouldDetach(_ popover: NSPopover) -> Bool { + false + } +} diff --git a/mac/Sources/CodeBurnMenubar/CurrencyState.swift b/mac/Sources/CodeBurnMenubar/CurrencyState.swift new file mode 100644 index 0000000..e668139 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/CurrencyState.swift @@ -0,0 +1,209 @@ +import Foundation +import Observation + +private let fxCacheTTLSeconds: TimeInterval = 24 * 3600 +private let frankfurterBaseURL = "https://api.frankfurter.app/latest?from=USD&to=" +/// Defensive bounds on any fetched FX rate. Real-world USD→X rates sit in [0.0001, 200000] +/// for every ISO 4217 pair; anything outside is either a parser bug or a MITM poisoning +/// attempt. We clamp hard so UI can't render NaN, negative, or astronomical numbers. +private let minValidFXRate: Double = 0.0001 +private let maxValidFXRate: Double = 1_000_000 +private let fxFetchTimeoutSeconds: TimeInterval = 10 + +@Observable +final class CurrencyState: @unchecked Sendable { + static let shared = CurrencyState() + + var code: String = "USD" + var rate: Double = 1.0 + var symbol: String = "$" + + private init() {} + + /// Applies a new currency context. Callers must invoke on the main actor so @Observable + /// view updates run on the UI thread. Rejects non-finite or out-of-band rates so a + /// poisoned Frankfurter response can't corrupt displayed costs. + func apply(code: String, rate: Double?, symbol: String) { + self.code = code + self.symbol = symbol + if let r = rate, r.isFinite, r >= minValidFXRate, r <= maxValidFXRate { + self.rate = r + } + } + + static func symbolForCode(_ code: String) -> String { + // Some locales return "US$" for USD or "CA$" for CAD via NumberFormatter. Prefer the + // plain glyph form everyone recognises. + if let override = symbolOverrides[code] { return override } + let formatter = NumberFormatter() + formatter.numberStyle = .currency + formatter.currencyCode = code + formatter.locale = Locale(identifier: "en_\(code.prefix(2))") + return formatter.currencySymbol ?? code + } + + private static let symbolOverrides: [String: String] = [ + "USD": "$", + "CAD": "$", + "AUD": "$", + "NZD": "$", + "HKD": "$", + "SGD": "$", + "MXN": "$", + "EUR": "\u{20AC}", + "GBP": "\u{00A3}", + "JPY": "\u{00A5}", + "CNY": "\u{00A5}", + "KRW": "\u{20A9}", + "INR": "\u{20B9}", + "BRL": "R$", + "CHF": "CHF", + "SEK": "kr", + "DKK": "kr", + "ZAR": "R" + ] +} + +actor FXRateCache { + static let shared = FXRateCache() + + private struct Entry: Codable { + let rate: Double + let savedAt: TimeInterval + } + + private var entries: [String: Entry] = [:] + private var loaded = false + + private var cacheFilePath: String { + let base = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0] + return base + .appendingPathComponent("codeburn-mac", isDirectory: true) + .appendingPathComponent("fx-rates.json") + .path + } + + private func loadIfNeeded() { + guard !loaded else { return } + loaded = true + do { + let data = try SafeFile.read(from: cacheFilePath) + let decoded = try JSONDecoder().decode([String: Entry].self, from: data) + // Drop any persisted entries whose rate violates the sanity bounds -- covers an + // old cache that was written before the clamp was introduced. + entries = decoded.filter { _, entry in + entry.rate.isFinite && entry.rate >= minValidFXRate && entry.rate <= maxValidFXRate + } + } catch { + entries = [:] + } + } + + private func persist() { + guard let data = try? JSONEncoder().encode(entries) else { return } + try? SafeFile.write(data, to: cacheFilePath) + } + + /// Returns a cached rate regardless of freshness. Nil if never fetched. + func cachedRate(for code: String) -> Double? { + if code == "USD" { return 1.0 } + loadIfNeeded() + return entries[code]?.rate + } + + /// Returns a fresh rate, fetching from Frankfurter when cache is stale or absent. Nil on + /// failure. The returned rate is always finite, positive, and within the sanity bounds. + func rate(for code: String) async -> Double? { + if code == "USD" { return 1.0 } + loadIfNeeded() + + if let entry = entries[code], + Date().timeIntervalSince1970 - entry.savedAt < fxCacheTTLSeconds { + return entry.rate + } + + guard let url = URL(string: "\(frankfurterBaseURL)\(code)") else { return entries[code]?.rate } + + let config = URLSessionConfiguration.ephemeral + config.timeoutIntervalForRequest = fxFetchTimeoutSeconds + config.tlsMinimumSupportedProtocolVersion = .TLSv12 + let session = URLSession(configuration: config) + + do { + let (data, response) = try await session.data(from: url) + guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { + return entries[code]?.rate + } + struct Response: Decodable { let rates: [String: Double] } + let decoded = try JSONDecoder().decode(Response.self, from: data) + guard let fresh = decoded.rates[code], + fresh.isFinite, fresh >= minValidFXRate, fresh <= maxValidFXRate else { + NSLog("CodeBurn: discarding out-of-band FX rate for \(code)") + return entries[code]?.rate + } + entries[code] = Entry(rate: fresh, savedAt: Date().timeIntervalSince1970) + persist() + return fresh + } catch { + return entries[code]?.rate + } + } +} + +/// Reads and writes the CLI's persisted currency config (~/.config/codeburn/config.json). +/// Uses an on-disk flock so a concurrent `codeburn currency ...` invocation from a terminal +/// can't race the menubar and silently drop each other's writes (TOCTOU on config.json). +enum CLICurrencyConfig { + private static var configDir: String { + (NSHomeDirectory() as NSString).appendingPathComponent(".config/codeburn") + } + private static var configPath: String { + (configDir as NSString).appendingPathComponent("config.json") + } + private static var lockPath: String { + (configDir as NSString).appendingPathComponent(".config.lock") + } + + static func loadCode() -> String? { + guard + let data = try? SafeFile.read(from: configPath), + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let currency = json["currency"] as? [String: Any], + let code = currency["code"] as? String + else { + return nil + } + return code.uppercased() + } + + static func persist(code: String) { + do { + try SafeFile.withExclusiveLock(at: lockPath) { + var existing: [String: Any] = [:] + if let data = try? SafeFile.read(from: configPath), + let parsed = try? JSONSerialization.jsonObject(with: data) as? [String: Any] { + existing = parsed + } + + if code == "USD" { + existing.removeValue(forKey: "currency") + } else { + existing["currency"] = [ + "code": code, + "symbol": CurrencyState.symbolForCode(code) + ] + } + + guard let data = try? JSONSerialization.data( + withJSONObject: existing, + options: [.prettyPrinted, .sortedKeys] + ) else { + return + } + try SafeFile.write(data, to: configPath, mode: 0o600) + } + } catch { + NSLog("CodeBurn: failed to persist currency config: \(error)") + } + } +} diff --git a/mac/Sources/CodeBurnMenubar/Data/CapacityEstimator.swift b/mac/Sources/CodeBurnMenubar/Data/CapacityEstimator.swift new file mode 100644 index 0000000..446d0e7 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Data/CapacityEstimator.swift @@ -0,0 +1,127 @@ +import Foundation + +public struct CapacitySnapshot: Sendable, Equatable { + public let percent: Double // 0..100, Anthropic-reported utilization + public let effectiveTokens: Double // weighted sum of input/output/cache tokens consumed at capture + public let capturedAt: Date + + public init(percent: Double, effectiveTokens: Double, capturedAt: Date) { + self.percent = percent + self.effectiveTokens = effectiveTokens + self.capturedAt = capturedAt + } +} + +public enum CapacityConfidence: String, Sendable { + case low, medium, solid +} + +public struct CapacityEstimate: Sendable, Equatable { + public let capacity: Double // tokens equivalent to 100% + public let confidence: CapacityConfidence + public let sampleSize: Int // post-decorrelation count + public let nonLinearityWarning: Bool + + public init(capacity: Double, confidence: CapacityConfidence, sampleSize: Int, nonLinearityWarning: Bool) { + self.capacity = capacity + self.confidence = confidence + self.sampleSize = sampleSize + self.nonLinearityWarning = nonLinearityWarning + } +} + +public enum CapacityEstimator { + private static let minSampleSize = 5 + private static let minPercentRange = 15.0 + private static let recencyHalfLifeSeconds: Double = 30 * 86400 + private static let solidR2 = 0.97 + private static let mediumR2 = 0.85 + private static let solidSampleThreshold = 15 + private static let mediumSampleThreshold = 6 + private static let nonLinearityRunLengthThreshold = 0.7 + + public static func estimate(_ snapshots: [CapacitySnapshot], asOf now: Date = Date()) -> CapacityEstimate? { + guard snapshots.count >= minSampleSize else { return nil } + let percents = snapshots.map(\.percent) + let range = (percents.max() ?? 0) - (percents.min() ?? 0) + guard range >= minPercentRange else { return nil } + + let weighted = snapshots.map { snap -> (p: Double, t: Double, w: Double) in + let ageSeconds = now.timeIntervalSince(snap.capturedAt) + let weight = pow(0.5, max(0, ageSeconds) / recencyHalfLifeSeconds) + return (snap.percent, snap.effectiveTokens, weight) + } + + // Weighted least squares through origin: minimize sum(w * (t - p * cap/100)^2) + // Solution: cap = 100 * sum(w * t * p) / sum(w * p * p) + let numerator = weighted.reduce(0.0) { $0 + $1.w * $1.t * $1.p } + let denominator = weighted.reduce(0.0) { $0 + $1.w * $1.p * $1.p } + guard denominator > 0 else { return nil } + let capacity = 100.0 * numerator / denominator + guard capacity > 0 else { return nil } + + // Weighted R^2 against the through-origin fit. + let weightedTokenSum = weighted.reduce(0.0) { $0 + $1.w * $1.t } + let weightSum = weighted.reduce(0.0) { $0 + $1.w } + let weightedMeanT = weightedTokenSum / max(weightSum, .ulpOfOne) + let ssRes = weighted.reduce(0.0) { acc, s in + let predicted = s.p * capacity / 100 + let diff = s.t - predicted + return acc + s.w * diff * diff + } + let ssTot = weighted.reduce(0.0) { acc, s in + let diff = s.t - weightedMeanT + return acc + s.w * diff * diff + } + let r2 = ssTot > 0 ? max(0.0, 1.0 - ssRes / ssTot) : 0.0 + + let n = snapshots.count + let confidence: CapacityConfidence = { + if n >= solidSampleThreshold && r2 >= solidR2 { return .solid } + if n >= mediumSampleThreshold && r2 >= mediumR2 { return .medium } + return .low + }() + + let nonLinearityWarning = detectNonLinearity(snapshots: weighted, capacity: capacity) + + return CapacityEstimate( + capacity: capacity, + confidence: confidence, + sampleSize: n, + nonLinearityWarning: nonLinearityWarning + ) + } + + /// Sign-test on residuals across the percent range. If residuals form a long monotonic run + /// (e.g. all-negative in low percents then all-positive at high), the relationship isn't linear. + private static func detectNonLinearity( + snapshots: [(p: Double, t: Double, w: Double)], + capacity: Double + ) -> Bool { + let sorted = snapshots.sorted { $0.p < $1.p } + let signs = sorted.map { s -> Int in + let predicted = s.p * capacity / 100 + let diff = s.t - predicted + if abs(diff) < .ulpOfOne { return 0 } + return diff > 0 ? 1 : -1 + }.filter { $0 != 0 } + guard signs.count >= minSampleSize else { return false } + + // Longest single-sign run length / total + var longestRun = 0 + var currentRun = 0 + var currentSign = 0 + for s in signs { + if s == currentSign { + currentRun += 1 + } else { + longestRun = max(longestRun, currentRun) + currentSign = s + currentRun = 1 + } + } + longestRun = max(longestRun, currentRun) + let runFraction = Double(longestRun) / Double(signs.count) + return runFraction >= nonLinearityRunLengthThreshold + } +} diff --git a/mac/Sources/CodeBurnMenubar/Data/DataClient.swift b/mac/Sources/CodeBurnMenubar/Data/DataClient.swift new file mode 100644 index 0000000..6e4dbeb --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Data/DataClient.swift @@ -0,0 +1,107 @@ +import Foundation + +/// Upper bound on payload + stderr bytes read from the CLI. Real payloads top out near 500 KB +/// (365 days of history with dozens of models); anything larger is pathological and truncating +/// prevents unbounded memory growth. Hard timeout guards against a hung CLI keeping Process and +/// Pipe file descriptors pinned forever. +private let maxPayloadBytes = 20 * 1024 * 1024 +private let maxStderrBytes = 256 * 1024 +private let spawnTimeoutSeconds: UInt64 = 60 + +enum DataClientError: Error { + case spawn(String) + case nonZeroExit(code: Int32, stderr: String) + case decode(Error) + case timeout + case outputTooLarge +} + +/// Runs the CLI via argv (no shell interpretation). See `CodeburnCLI` for why we never route +/// commands through `/bin/zsh -c` anymore. +struct DataClient { + static func fetch(period: Period, provider: ProviderFilter, includeOptimize: Bool) async throws -> MenubarPayload { + var subcommand = [ + "status", + "--format", "menubar-json", + "--period", period.cliArg, + "--provider", provider.cliArg, + ] + if !includeOptimize { + subcommand.append("--no-optimize") + } + + let result = try await runCLI(subcommand: subcommand) + guard result.exitCode == 0 else { + throw DataClientError.nonZeroExit(code: result.exitCode, stderr: result.stderr) + } + do { + return try JSONDecoder().decode(MenubarPayload.self, from: result.stdout) + } catch { + throw DataClientError.decode(error) + } + } + + private struct ProcessResult { + let stdout: Data + let stderr: String + let exitCode: Int32 + } + + private static func runCLI(subcommand: [String]) async throws -> ProcessResult { + let process = CodeburnCLI.makeProcess(subcommand: subcommand) + + let outPipe = Pipe() + let errPipe = Pipe() + process.standardOutput = outPipe + process.standardError = errPipe + + do { + try process.run() + } catch { + throw DataClientError.spawn(error.localizedDescription) + } + + // Drain both pipes concurrently so a large stderr can't deadlock stdout (the child + // blocks on write once the pipe buffer fills). `drain` also enforces a byte cap. + async let stdoutData = drain(outPipe.fileHandleForReading, limit: maxPayloadBytes) + async let stderrData = drain(errPipe.fileHandleForReading, limit: maxStderrBytes) + + // Wall-clock timeout: if the CLI hangs (parser stuck, disk stall), kill it. + let timeoutTask = Task.detached(priority: .utility) { + try? await Task.sleep(nanoseconds: spawnTimeoutSeconds * 1_000_000_000) + if process.isRunning { + process.terminate() + } + } + defer { timeoutTask.cancel() } + + let (out, err) = await (stdoutData, stderrData) + process.waitUntilExit() + + if out.count >= maxPayloadBytes { + throw DataClientError.outputTooLarge + } + + let stderrString = String(data: err, encoding: .utf8) ?? "" + return ProcessResult(stdout: out, stderr: stderrString, exitCode: process.terminationStatus) + } + + /// Pulls bytes off a pipe until EOF or `limit`. Intentionally uses `availableData`, which + /// returns empty on EOF -- no blocking once the child exits. + private static func drain(_ handle: FileHandle, limit: Int) async -> Data { + await Task.detached(priority: .utility) { + var buffer = Data() + while buffer.count < limit { + let chunk = handle.availableData + if chunk.isEmpty { break } + let remaining = limit - buffer.count + if chunk.count > remaining { + buffer.append(chunk.prefix(remaining)) + break + } + buffer.append(chunk) + } + return buffer + }.value + } +} diff --git a/mac/Sources/CodeBurnMenubar/Data/MenubarPayload.swift b/mac/Sources/CodeBurnMenubar/Data/MenubarPayload.swift new file mode 100644 index 0000000..2e44fae --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Data/MenubarPayload.swift @@ -0,0 +1,123 @@ +import Foundation + +/// Shape of `codeburn status --format menubar-json --period `. +/// `current` is scoped to the requested period; the whole payload reflects that slice. +struct MenubarPayload: Codable, Sendable { + let generated: String + let current: CurrentBlock + let optimize: OptimizeBlock + let history: HistoryBlock +} + +struct HistoryBlock: Codable, Sendable { + let daily: [DailyHistoryEntry] +} + +struct DailyModelBreakdown: Codable, Sendable { + let name: String + let cost: Double + let calls: Int + let inputTokens: Int + let outputTokens: Int + + var totalTokens: Int { inputTokens + outputTokens } +} + +struct DailyHistoryEntry: Codable, Sendable { + let date: String + let cost: Double + let calls: Int + let inputTokens: Int + let outputTokens: Int + let cacheReadTokens: Int + let cacheWriteTokens: Int + let topModels: [DailyModelBreakdown] + + /// Pricing-ratio prior: input + 5x output + cache_creation + 0.1x cache_read. + /// Matches Anthropic's published per-token pricing on Sonnet/Opus closely enough to be a useful proxy. + var effectiveTokens: Double { + Double(inputTokens) + 5.0 * Double(outputTokens) + Double(cacheWriteTokens) + 0.1 * Double(cacheReadTokens) + } +} + +extension DailyHistoryEntry { + /// Required for legacy payloads (no topModels emitted yet). + enum CodingKeys: String, CodingKey { + case date, cost, calls, inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens, topModels + } + init(from decoder: Decoder) throws { + let c = try decoder.container(keyedBy: CodingKeys.self) + date = try c.decode(String.self, forKey: .date) + cost = try c.decode(Double.self, forKey: .cost) + calls = try c.decode(Int.self, forKey: .calls) + inputTokens = try c.decode(Int.self, forKey: .inputTokens) + outputTokens = try c.decode(Int.self, forKey: .outputTokens) + cacheReadTokens = try c.decode(Int.self, forKey: .cacheReadTokens) + cacheWriteTokens = try c.decode(Int.self, forKey: .cacheWriteTokens) + topModels = try c.decodeIfPresent([DailyModelBreakdown].self, forKey: .topModels) ?? [] + } +} + +struct CurrentBlock: Codable, Sendable { + let label: String + let cost: Double + let calls: Int + let sessions: Int + let oneShotRate: Double? + let inputTokens: Int + let outputTokens: Int + let cacheHitPercent: Double + let topActivities: [ActivityEntry] + let topModels: [ModelEntry] + let providers: [String: Double] +} + +struct ActivityEntry: Codable, Sendable { + let name: String + let cost: Double + let turns: Int + let oneShotRate: Double? +} + +struct ModelEntry: Codable, Sendable { + let name: String + let cost: Double + let calls: Int +} + +struct OptimizeBlock: Codable, Sendable { + let findingCount: Int + let savingsUSD: Double + let topFindings: [FindingEntry] +} + +struct FindingEntry: Codable, Sendable { + let title: String + let impact: String + let savingsUSD: Double +} + +// MARK: - Empty fallback + +extension MenubarPayload { + /// Strictly-empty payload. Used as the fallback before real data arrives, so no + /// plausible-looking fake numbers leak into the UI. + static let empty = MenubarPayload( + generated: "", + current: CurrentBlock( + label: "", + cost: 0, + calls: 0, + sessions: 0, + oneShotRate: nil, + inputTokens: 0, + outputTokens: 0, + cacheHitPercent: 0, + topActivities: [], + topModels: [], + providers: [:] + ), + optimize: OptimizeBlock(findingCount: 0, savingsUSD: 0, topFindings: []), + history: HistoryBlock(daily: []) + ) +} diff --git a/mac/Sources/CodeBurnMenubar/Data/SubscriptionClient.swift b/mac/Sources/CodeBurnMenubar/Data/SubscriptionClient.swift new file mode 100644 index 0000000..79c5794 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Data/SubscriptionClient.swift @@ -0,0 +1,306 @@ +import Foundation +import Security + +private let credentialsRelativePath = ".claude/.credentials.json" +private let keychainService = "Claude Code-credentials" +private let oauthClientID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e" +private let refreshURL = URL(string: "https://platform.claude.com/v1/oauth/token")! +private let usageURL = URL(string: "https://api.anthropic.com/api/oauth/usage")! +private let betaHeader = "oauth-2025-04-20" +private let userAgent = "claude-code/2.1.0" +private let requestTimeout: TimeInterval = 30 + +/// Claude Code writes Keychain items with `kSecAttrAccount = "default"`. Filtering on this +/// prevents a planted Keychain item from another app (or a stale install with a mangled +/// account) from being accepted as our source of OAuth credentials. +private let expectedKeychainAccounts: Set = ["default"] +private let maxCredentialBytes = 64 * 1024 + +enum SubscriptionError: Error, LocalizedError { + case noCredentials + case credentialsInvalid + case refreshFailed(Int, String?) + case usageFetchFailed(Int, String?) + case decodeFailed(Error) + + var errorDescription: String? { + switch self { + case .noCredentials: "No Claude OAuth credentials found" + case .credentialsInvalid: "Claude OAuth credentials malformed" + case let .refreshFailed(code, body): "Token refresh failed (\(code))\(body.map { ": \($0)" } ?? "")" + case let .usageFetchFailed(code, body): "Usage fetch failed (\(code))\(body.map { ": \($0)" } ?? "")" + case let .decodeFailed(err): "Decode failed: \(err.localizedDescription)" + } + } +} + +struct SubscriptionClient { + static func fetch() async throws -> SubscriptionUsage { + let creds = try loadCredentials() + + // Try the usage call with the existing token first. Only refresh on 401. + do { + let response = try await fetchUsage(token: creds.accessToken) + return mapResponse(response, rawTier: creds.rateLimitTier) + } catch SubscriptionError.usageFetchFailed(401, _) { + guard let refreshToken = creds.refreshToken, !refreshToken.isEmpty else { + throw SubscriptionError.usageFetchFailed(401, "no refresh token available") + } + let newToken = try await refreshAccessToken(refreshToken: refreshToken) + let response = try await fetchUsage(token: newToken) + return mapResponse(response, rawTier: creds.rateLimitTier) + } + } + + // MARK: - Credentials + + private static func loadCredentials() throws -> StoredCredentials { + if let data = try readFileCredentials() { + return try parseCredentials(data: sanitizeKeychainData(data)) + } + if let creds = try readKeychainCredentials() { + return creds + } + throw SubscriptionError.noCredentials + } + + private static func readFileCredentials() throws -> Data? { + let url = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent(credentialsRelativePath) + guard FileManager.default.fileExists(atPath: url.path) else { return nil } + // SafeFile refuses to follow symlinks and caps the read, so a 6 GB /dev/urandom + // masquerading as the creds file can't blow up the app. + return try SafeFile.read(from: url.path, maxBytes: maxCredentialBytes) + } + + /// Two-phase keychain enumeration: (1) list persistent refs + accounts, (2) fetch each + /// item's data by ref. The combination kSecMatchLimitAll + kSecReturnData errors with -50, + /// so the data fetch has to be per-item. + private static func readKeychainCredentials() throws -> StoredCredentials? { + let listQuery: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: keychainService, + kSecMatchLimit as String: kSecMatchLimitAll, + kSecReturnAttributes as String: true, + kSecReturnPersistentRef as String: true, + ] + var listResult: CFTypeRef? + let listStatus = SecItemCopyMatching(listQuery as CFDictionary, &listResult) + if listStatus == errSecItemNotFound { + NSLog("CodeBurn: keychain query found no items for service \(keychainService)") + return nil + } + guard listStatus == errSecSuccess, let rows = listResult as? [[String: Any]] else { + NSLog("CodeBurn: keychain enumerate failed status=\(listStatus)") + return nil + } + + var best: StoredCredentials? = nil + for row in rows { + guard let ref = row[kSecValuePersistentRef as String] as? Data else { continue } + let account = (row[kSecAttrAccount as String] as? String) ?? "" + // Ignore rows whose account doesn't match Claude Code's known writer. Stops another + // app's item (or a legacy install with an unexpected account) from being accepted. + guard expectedKeychainAccounts.contains(account) else { continue } + let dataQuery: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecValuePersistentRef as String: ref, + kSecMatchLimit as String: kSecMatchLimitOne, + kSecReturnData as String: true, + ] + var dataResult: CFTypeRef? + let dataStatus = SecItemCopyMatching(dataQuery as CFDictionary, &dataResult) + guard dataStatus == errSecSuccess, let data = dataResult as? Data else { continue } + let sanitized = sanitizeKeychainData(data) + guard let parsed = try? parseCredentials(data: sanitized) else { continue } + if let current = best { + if (parsed.expiresAt ?? .distantPast) > (current.expiresAt ?? .distantPast) { + best = parsed + } + } else { + best = parsed + } + } + return best + } + + /// Claude Code's keychain writer line-wraps long string values (newline + leading spaces) + /// mid-token, producing JSON with literal control chars and stray spaces inside string + /// values. Replace every newline (CR/LF) plus the run of spaces/tabs that follows it. + /// Drops both the wrapping in tokens AND pretty-print indentation between fields (both + /// produce valid, compact JSON afterward). + private static func sanitizeKeychainData(_ data: Data) -> Data { + guard var s = String(data: data, encoding: .utf8) else { return data } + s = s.replacingOccurrences(of: "\r", with: "") + let regex = try? NSRegularExpression(pattern: "\\n[ \\t]*", options: []) + if let regex { + let range = NSRange(s.startIndex.. StoredCredentials { + do { + let root = try JSONDecoder().decode(CredentialsRoot.self, from: data) + guard let oauth = root.claudeAiOauth else { throw SubscriptionError.credentialsInvalid } + let token = oauth.accessToken?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + guard !token.isEmpty else { throw SubscriptionError.credentialsInvalid } + let expiresAt = oauth.expiresAt.map { Date(timeIntervalSince1970: $0 / 1000.0) } + return StoredCredentials( + accessToken: token, + refreshToken: oauth.refreshToken, + expiresAt: expiresAt, + rateLimitTier: oauth.rateLimitTier + ) + } catch let err as SubscriptionError { + throw err + } catch { + throw SubscriptionError.decodeFailed(error) + } + } + + // MARK: - Refresh + + private static func refreshAccessToken(refreshToken: String) async throws -> String { + var request = URLRequest(url: refreshURL) + request.httpMethod = "POST" + request.timeoutInterval = requestTimeout + request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") + request.setValue("application/json", forHTTPHeaderField: "Accept") + var components = URLComponents() + components.queryItems = [ + URLQueryItem(name: "grant_type", value: "refresh_token"), + URLQueryItem(name: "refresh_token", value: refreshToken), + URLQueryItem(name: "client_id", value: oauthClientID), + ] + request.httpBody = (components.percentEncodedQuery ?? "").data(using: .utf8) + + let (data, response) = try await URLSession.shared.data(for: request) + guard let http = response as? HTTPURLResponse else { + throw SubscriptionError.refreshFailed(-1, nil) + } + guard http.statusCode == 200 else { + let body = String(data: data, encoding: .utf8) + throw SubscriptionError.refreshFailed(http.statusCode, body) + } + do { + let decoded = try JSONDecoder().decode(TokenRefreshResponse.self, from: data) + return decoded.accessToken + } catch { + throw SubscriptionError.decodeFailed(error) + } + } + + // MARK: - Usage fetch + + private static func fetchUsage(token: String) async throws -> UsageResponse { + var request = URLRequest(url: usageURL) + request.httpMethod = "GET" + request.timeoutInterval = requestTimeout + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + request.setValue("application/json", forHTTPHeaderField: "Accept") + request.setValue(betaHeader, forHTTPHeaderField: "anthropic-beta") + request.setValue(userAgent, forHTTPHeaderField: "User-Agent") + + let (data, response) = try await URLSession.shared.data(for: request) + guard let http = response as? HTTPURLResponse else { + throw SubscriptionError.usageFetchFailed(-1, nil) + } + guard http.statusCode == 200 else { + let body = String(data: data, encoding: .utf8) + throw SubscriptionError.usageFetchFailed(http.statusCode, body) + } + do { + return try JSONDecoder().decode(UsageResponse.self, from: data) + } catch { + throw SubscriptionError.decodeFailed(error) + } + } + + // MARK: - Mapping + + private static func mapResponse(_ r: UsageResponse, rawTier: String?) -> SubscriptionUsage { + SubscriptionUsage( + tier: SubscriptionUsage.tier(from: rawTier), + rawTier: rawTier, + fiveHourPercent: r.fiveHour?.utilization, + fiveHourResetsAt: parseDate(r.fiveHour?.resetsAt), + sevenDayPercent: r.sevenDay?.utilization, + sevenDayResetsAt: parseDate(r.sevenDay?.resetsAt), + sevenDayOpusPercent: r.sevenDayOpus?.utilization, + sevenDayOpusResetsAt: parseDate(r.sevenDayOpus?.resetsAt), + sevenDaySonnetPercent: r.sevenDaySonnet?.utilization, + sevenDaySonnetResetsAt: parseDate(r.sevenDaySonnet?.resetsAt), + fetchedAt: Date() + ) + } + + private static func parseDate(_ s: String?) -> Date? { + guard let s, !s.isEmpty else { return nil } + let f = ISO8601DateFormatter() + f.formatOptions = [.withInternetDateTime, .withFractionalSeconds] + if let d = f.date(from: s) { return d } + f.formatOptions = [.withInternetDateTime] + return f.date(from: s) + } +} + +// MARK: - Internal models + +private struct StoredCredentials { + let accessToken: String + let refreshToken: String? + let expiresAt: Date? + let rateLimitTier: String? +} + +private struct CredentialsRoot: Decodable { + let claudeAiOauth: OAuthBlock? +} + +private struct OAuthBlock: Decodable { + let accessToken: String? + let refreshToken: String? + let expiresAt: Double? + let rateLimitTier: String? +} + +private struct TokenRefreshResponse: Decodable { + let accessToken: String + let refreshToken: String? + let expiresIn: Int? + + enum CodingKeys: String, CodingKey { + case accessToken = "access_token" + case refreshToken = "refresh_token" + case expiresIn = "expires_in" + } +} + +private struct UsageResponse: Decodable { + let fiveHour: Window? + let sevenDay: Window? + let sevenDayOpus: Window? + let sevenDaySonnet: Window? + + enum CodingKeys: String, CodingKey { + case fiveHour = "five_hour" + case sevenDay = "seven_day" + case sevenDayOpus = "seven_day_opus" + case sevenDaySonnet = "seven_day_sonnet" + } +} + +private struct Window: Decodable { + let utilization: Double? + let resetsAt: String? + + enum CodingKeys: String, CodingKey { + case utilization + case resetsAt = "resets_at" + } +} diff --git a/mac/Sources/CodeBurnMenubar/Data/SubscriptionSnapshotStore.swift b/mac/Sources/CodeBurnMenubar/Data/SubscriptionSnapshotStore.swift new file mode 100644 index 0000000..931154a --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Data/SubscriptionSnapshotStore.swift @@ -0,0 +1,102 @@ +import Foundation + +/// Persisted snapshot of a single utilization reading. We capture one per window every time +/// SubscriptionClient.fetch() succeeds so we can answer "what did the prior 7-day cycle finish at?" +/// when the current window has no usable data yet (just reset). +struct SubscriptionSnapshot: Codable, Sendable { + let windowKey: String // "five_hour", "seven_day", "seven_day_opus", "seven_day_sonnet" + let percent: Double // 0..100 + let resetsAt: Date // resets_at active at capture (identifies which window cycle this belongs to) + let capturedAt: Date // when the snapshot was recorded + let effectiveTokens: Double? // tokens consumed in window at capture (nil if not computed) +} + +private let snapshotFilename = "subscription-snapshots.json" +private let pruneOlderThanSeconds: TimeInterval = 30 * 24 * 3600 + +private func snapshotsCacheDir() -> String { + return ProcessInfo.processInfo.environment["CODEBURN_CACHE_DIR"] + ?? (NSHomeDirectory() as NSString).appendingPathComponent(".cache/codeburn") +} + +private func snapshotsPath() -> String { + return (snapshotsCacheDir() as NSString).appendingPathComponent(snapshotFilename) +} + +private actor SnapshotLock { + static let shared = SnapshotLock() + func run(_ fn: () throws -> T) rethrows -> T { try fn() } +} + +enum SubscriptionSnapshotStore { + /// Append a snapshot. Auto-prunes entries older than 30 days. Idempotent: if a snapshot + /// with the same windowKey + resetsAt already exists, only update percent if new is higher + /// (so "final" reading near reset is preserved). + static func record(_ snapshot: SubscriptionSnapshot) async { + await SnapshotLock.shared.run { + do { + var all = loadAll() + let key = "\(snapshot.windowKey)|\(snapshot.resetsAt.timeIntervalSince1970)" + if let idx = all.firstIndex(where: { "\($0.windowKey)|\($0.resetsAt.timeIntervalSince1970)" == key }) { + if snapshot.percent > all[idx].percent { + all[idx] = snapshot + } + } else { + all.append(snapshot) + } + let cutoff = Date().addingTimeInterval(-pruneOlderThanSeconds) + all = all.filter { $0.capturedAt >= cutoff } + try save(all) + } catch { + NSLog("CodeBurn: snapshot record failed: \(error)") + } + } + } + + /// Returns the final percent of the immediately-prior cycle for this window, or nil if no + /// prior data is available. Logic: among snapshots whose resetsAt < currentResetsAt, pick + /// the group with the largest resetsAt (most recent prior cycle), then return the max + /// percent in that group (the closest-to-final reading we have). + static func previousWindowFinal(windowKey: String, currentResetsAt: Date) async -> Double? { + await SnapshotLock.shared.run { + let all = loadAll() + let priors = all.filter { $0.windowKey == windowKey && $0.resetsAt < currentResetsAt } + guard let mostRecentPriorReset = priors.map({ $0.resetsAt }).max() else { return nil } + let priorWindow = priors.filter { $0.resetsAt == mostRecentPriorReset } + return priorWindow.map(\.percent).max() + } + } + + /// Return all snapshots for a given window key, useful for capacity estimation. + static func snapshots(for windowKey: String) async -> [SubscriptionSnapshot] { + await SnapshotLock.shared.run { + loadAll().filter { $0.windowKey == windowKey } + } + } + + /// Test seam: clear all snapshots. + static func resetForTesting() async { + await SnapshotLock.shared.run { + try? FileManager.default.removeItem(atPath: snapshotsPath()) + } + } + + // MARK: - Internals + + private static func loadAll() -> [SubscriptionSnapshot] { + let path = snapshotsPath() + guard FileManager.default.fileExists(atPath: path) else { return [] } + guard let data = try? SafeFile.read(from: path) else { return [] } + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .iso8601 + return (try? decoder.decode([SubscriptionSnapshot].self, from: data)) ?? [] + } + + private static func save(_ snapshots: [SubscriptionSnapshot]) throws { + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .iso8601 + let data = try encoder.encode(snapshots) + // SafeFile.write refuses symlinked targets and does the tmp+rename atomic dance. + try SafeFile.write(data, to: snapshotsPath(), mode: 0o600) + } +} diff --git a/mac/Sources/CodeBurnMenubar/Data/SubscriptionUsage.swift b/mac/Sources/CodeBurnMenubar/Data/SubscriptionUsage.swift new file mode 100644 index 0000000..350983f --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Data/SubscriptionUsage.swift @@ -0,0 +1,46 @@ +import Foundation + +struct SubscriptionUsage: Sendable, Equatable { + enum Tier: String, Sendable, Equatable { + case pro + case max5x + case max20x + case team + case enterprise + case unknown + + var displayName: String { + switch self { + case .pro: "Pro" + case .max5x: "Max 5x" + case .max20x: "Max 20x" + case .team: "Team" + case .enterprise: "Enterprise" + case .unknown: "Subscription" + } + } + } + + let tier: Tier + let rawTier: String? + let fiveHourPercent: Double? + let fiveHourResetsAt: Date? + let sevenDayPercent: Double? + let sevenDayResetsAt: Date? + let sevenDayOpusPercent: Double? + let sevenDayOpusResetsAt: Date? + let sevenDaySonnetPercent: Double? + let sevenDaySonnetResetsAt: Date? + let fetchedAt: Date + + static func tier(from raw: String?) -> Tier { + guard let raw = raw?.lowercased() else { return .unknown } + if raw.contains("max_20x") || raw.contains("max20x") || raw.contains("max-20x") { return .max20x } + if raw.contains("max_5x") || raw.contains("max5x") || raw.contains("max-5x") { return .max5x } + if raw.contains("max") { return .max5x } + if raw.contains("pro") { return .pro } + if raw.contains("team") { return .team } + if raw.contains("enterprise") { return .enterprise } + return .unknown + } +} diff --git a/mac/Sources/CodeBurnMenubar/Security/CodeburnCLI.swift b/mac/Sources/CodeBurnMenubar/Security/CodeburnCLI.swift new file mode 100644 index 0000000..d86987a --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Security/CodeburnCLI.swift @@ -0,0 +1,59 @@ +import Foundation + +/// Single entry point for spawning the `codeburn` CLI. All callers route through here so the +/// binary argv is validated once and no code path ever passes user-influenced strings through +/// a shell (`/bin/zsh -c`, `open --args`, AppleScript). This closes the shell-injection attack +/// surface end-to-end. +enum CodeburnCLI { + /// Matches a plain file path / program name: alphanumerics, dot, underscore, slash, hyphen, + /// space. Deliberately excludes shell metacharacters (`$`, `;`, `&`, `|`, quotes, backticks, + /// newlines) so a malicious `CODEBURN_BIN="codeburn; rm -rf ~"` can't slip through. + private static let safeArgPattern = try! NSRegularExpression(pattern: "^[A-Za-z0-9 ._/\\-]+$") + + /// PATH additions for GUI-launched apps, which otherwise get a minimal PATH that misses + /// Homebrew and npm global installs. + private static let additionalPathEntries = ["/opt/homebrew/bin", "/usr/local/bin"] + + /// Returns the argv that launches the CLI. Dev override via `CODEBURN_BIN` is honoured only + /// if every whitespace-delimited token passes `safeArgPattern`. Otherwise falls back to the + /// plain `codeburn` name (resolved via PATH). + static func baseArgv() -> [String] { + guard let raw = ProcessInfo.processInfo.environment["CODEBURN_BIN"], !raw.isEmpty else { + return ["codeburn"] + } + let parts = raw.split(separator: " ", omittingEmptySubsequences: true).map(String.init) + guard parts.allSatisfy(isSafe) else { + NSLog("CodeBurn: refusing unsafe CODEBURN_BIN; using default 'codeburn'") + return ["codeburn"] + } + return parts + } + + /// Builds a `Process` that runs the CLI with the given subcommand args. Uses `/usr/bin/env` + /// so PATH lookup happens without involving a shell, and augments PATH with Homebrew + /// defaults. Caller sets stdout/stderr pipes and calls `run()`. + static func makeProcess(subcommand: [String]) -> Process { + let process = Process() + process.executableURL = URL(fileURLWithPath: "/usr/bin/env") + var environment = ProcessInfo.processInfo.environment + environment["PATH"] = augmentedPath(environment["PATH"] ?? "") + process.environment = environment + // `env --` treats everything following as argv, not VAR=val pairs -- guards against an + // argument accidentally resembling an env assignment. + process.arguments = ["--"] + baseArgv() + subcommand + return process + } + + static func isSafe(_ s: String) -> Bool { + let range = NSRange(s.startIndex.. String { + var parts = existing.split(separator: ":", omittingEmptySubsequences: true).map(String.init) + for extra in additionalPathEntries where !parts.contains(extra) { + parts.append(extra) + } + return parts.joined(separator: ":") + } +} diff --git a/mac/Sources/CodeBurnMenubar/Security/SafeFile.swift b/mac/Sources/CodeBurnMenubar/Security/SafeFile.swift new file mode 100644 index 0000000..3d6bda5 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Security/SafeFile.swift @@ -0,0 +1,128 @@ +import Foundation + +/// Symlink-safe file I/O with atomic writes and optional cross-process flock. +/// +/// Every cache file we touch (`~/Library/Caches/codeburn-mac/fx-rates.json`, +/// `~/.cache/codeburn/subscription-snapshots.json`, `~/.config/codeburn/config.json`) is a +/// legitimate target for a local-symlink attack: if an attacker plants a symlink from one of +/// those paths to, say, `~/.ssh/config`, a naive `Data.write(to:)` blindly follows the link and +/// clobbers the real file. `O_NOFOLLOW` on the write() refuses the operation instead. +enum SafeFile { + enum Error: Swift.Error { + case symlinkDetected(String) + case openFailed(String, Int32) + case writeFailed(String, Int32) + case renameFailed(String, Int32) + case readFailed(String, Int32) + case sizeLimitExceeded(String, Int) + } + + /// Default max bytes when reading untrusted cache files. Prevents a malicious cache file + /// from exhausting memory in the Swift process. + static let defaultReadLimit = 8 * 1024 * 1024 + + /// Refuses to follow symlinks and writes atomically via a tmp file + rename. `mode` is the + /// final file permission (0o600 by default so cache files stay user-private). + static func write(_ data: Data, to path: String, mode: mode_t = 0o600) throws { + let parent = (path as NSString).deletingLastPathComponent + try FileManager.default.createDirectory( + atPath: parent, + withIntermediateDirectories: true, + attributes: [.posixPermissions: NSNumber(value: 0o700)] + ) + + // Reject if the existing file is a symlink. We use lstat so the link itself is + // inspected, not its target. + var linkInfo = stat() + if lstat(path, &linkInfo) == 0, (linkInfo.st_mode & S_IFMT) == S_IFLNK { + throw Error.symlinkDetected(path) + } + + let tmpPath = parent + "/.codeburn-" + UUID().uuidString + ".tmp" + let flags: Int32 = O_CREAT | O_WRONLY | O_EXCL | O_NOFOLLOW + let fd = Darwin.open(tmpPath, flags, mode) + guard fd >= 0 else { + throw Error.openFailed(tmpPath, errno) + } + + let writeResult: Int = data.withUnsafeBytes { buffer -> Int in + guard let base = buffer.baseAddress else { return 0 } + return Darwin.write(fd, base, buffer.count) + } + let writeErrno = errno + fsync(fd) + Darwin.close(fd) + + guard writeResult == data.count else { + unlink(tmpPath) + throw Error.writeFailed(tmpPath, writeErrno) + } + + if rename(tmpPath, path) != 0 { + let renameErrno = errno + unlink(tmpPath) + throw Error.renameFailed(path, renameErrno) + } + } + + /// Refuses to read through a symlink. `maxBytes` bounds the read so a tampered cache file + /// can't balloon the process. + static func read(from path: String, maxBytes: Int = defaultReadLimit) throws -> Data { + var linkInfo = stat() + guard lstat(path, &linkInfo) == 0 else { + throw Error.readFailed(path, errno) + } + if (linkInfo.st_mode & S_IFMT) == S_IFLNK { + throw Error.symlinkDetected(path) + } + + let fd = Darwin.open(path, O_RDONLY | O_NOFOLLOW) + guard fd >= 0 else { + throw Error.readFailed(path, errno) + } + defer { Darwin.close(fd) } + + let size = Int(linkInfo.st_size) + if size > maxBytes { + throw Error.sizeLimitExceeded(path, size) + } + + var data = Data(count: size) + let readBytes: Int = data.withUnsafeMutableBytes { buffer -> Int in + guard let base = buffer.baseAddress else { return 0 } + return Darwin.read(fd, base, buffer.count) + } + guard readBytes >= 0 else { + throw Error.readFailed(path, errno) + } + if readBytes < size { + data = data.prefix(readBytes) + } + return data + } + + /// Runs `body` while holding an exclusive POSIX advisory lock on `path`. The lock file is + /// created if missing (with 0o600 permissions) and released on scope exit, so other + /// codeburn processes (the CLI running in a terminal, say) block on the same file instead + /// of racing on a shared config. + static func withExclusiveLock(at path: String, body: () throws -> T) throws -> T { + let parent = (path as NSString).deletingLastPathComponent + try FileManager.default.createDirectory( + atPath: parent, + withIntermediateDirectories: true, + attributes: [.posixPermissions: NSNumber(value: 0o700)] + ) + let fd = Darwin.open(path, O_CREAT | O_RDWR | O_NOFOLLOW, 0o600) + guard fd >= 0 else { + throw Error.openFailed(path, errno) + } + defer { Darwin.close(fd) } + + guard flock(fd, LOCK_EX) == 0 else { + throw Error.openFailed(path, errno) + } + defer { _ = flock(fd, LOCK_UN) } + + return try body() + } +} diff --git a/mac/Sources/CodeBurnMenubar/Security/TerminalLauncher.swift b/mac/Sources/CodeBurnMenubar/Security/TerminalLauncher.swift new file mode 100644 index 0000000..09f8dad --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Security/TerminalLauncher.swift @@ -0,0 +1,40 @@ +import AppKit +import Foundation + +/// Opens a codeburn subcommand in the user's Terminal. The argv is validated through +/// `CodeburnCLI.isSafe` before it's interpolated into AppleScript so there's no path for a +/// rogue environment variable to smuggle shell metacharacters into the `do script` call. +/// Falls back to a detached headless spawn on machines without Terminal.app (iTerm/Ghostty/Warp +/// users) so the subcommand still runs. +enum TerminalLauncher { + private static let terminalPaths = [ + "/System/Applications/Utilities/Terminal.app", + "/Applications/Utilities/Terminal.app", + ] + + static func open(subcommand: [String]) { + let argv = CodeburnCLI.baseArgv() + subcommand + guard argv.allSatisfy(CodeburnCLI.isSafe) else { + NSLog("CodeBurn: refusing to open terminal with unsafe argv") + return + } + let command = argv.joined(separator: " ") + + if terminalPaths.contains(where: FileManager.default.fileExists(atPath:)) { + let script = """ + tell application "Terminal" + activate + do script "\(command)" + end tell + """ + let process = Process() + process.executableURL = URL(fileURLWithPath: "/usr/bin/osascript") + process.arguments = ["-e", script] + try? process.run() + return + } + + let headless = CodeburnCLI.makeProcess(subcommand: subcommand) + try? headless.run() + } +} diff --git a/mac/Sources/CodeBurnMenubar/Theme/Theme.swift b/mac/Sources/CodeBurnMenubar/Theme/Theme.swift new file mode 100644 index 0000000..de79860 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Theme/Theme.swift @@ -0,0 +1,32 @@ +import SwiftUI + +/// Design tokens. Warm terracotta-ember palette, not generic orange. +enum Theme { + static let brandAccent = Color(red: 0xC9/255.0, green: 0x52/255.0, blue: 0x1D/255.0) + static let brandAccentDark = Color(red: 0xE8/255.0, green: 0x77/255.0, blue: 0x4A/255.0) + static let brandEmberDeep = Color(red: 0x8B/255.0, green: 0x3E/255.0, blue: 0x13/255.0) + static let brandEmberGlow = Color(red: 0xF0/255.0, green: 0xA0/255.0, blue: 0x70/255.0) + + static let warmSurface = Color(red: 0xFA/255.0, green: 0xF7/255.0, blue: 0xF3/255.0) + static let warmSurfaceDark = Color(red: 0x1C/255.0, green: 0x18/255.0, blue: 0x16/255.0) + + static let categoricalClaude = Color(red: 0xC9/255.0, green: 0x52/255.0, blue: 0x1D/255.0) + static let categoricalCursor = Color(red: 0x3F/255.0, green: 0x6B/255.0, blue: 0x8C/255.0) + static let categoricalCodex = Color(red: 0x4A/255.0, green: 0x7D/255.0, blue: 0x5C/255.0) + + static let oneShotGood = Color(red: 0x30/255.0, green: 0xD1/255.0, blue: 0x58/255.0) + static let oneShotMid = Color(red: 0xFF/255.0, green: 0x9F/255.0, blue: 0x0A/255.0) + static let oneShotLow = Color(red: 0xFF/255.0, green: 0x45/255.0, blue: 0x3A/255.0) + + // Semantic colors -- tuned to sit alongside the terracotta accent without clashing. + static let semanticDanger = Color(red: 0xC8/255.0, green: 0x3F/255.0, blue: 0x2C/255.0) // brick-red, terracotta-leaning + static let semanticWarning = Color(red: 0xD9/255.0, green: 0x8F/255.0, blue: 0x29/255.0) // amber, warmer than vanilla + static let semanticSuccess = Color(red: 0x4E/255.0, green: 0xA8/255.0, blue: 0x65/255.0) // muted green that holds against terracotta +} + +extension Font { + /// SF Mono for currency values -- developer-tool identity. + static func codeMono(size: CGFloat, weight: Font.Weight = .regular) -> Font { + .system(size: size, weight: weight, design: .monospaced) + } +} diff --git a/mac/Sources/CodeBurnMenubar/Views/ActivitySection.swift b/mac/Sources/CodeBurnMenubar/Views/ActivitySection.swift new file mode 100644 index 0000000..9803387 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/ActivitySection.swift @@ -0,0 +1,87 @@ +import SwiftUI + +struct ActivitySection: View { + @Environment(AppStore.self) private var store + @State private var isExpanded: Bool = true + + var body: some View { + CollapsibleSection( + caption: "Activity", + isExpanded: $isExpanded, + trailing: { + HStack(spacing: 8) { + Text("Cost").frame(minWidth: 54, alignment: .trailing) + Text("Turns").frame(minWidth: 52, alignment: .trailing) + Text("1-shot").frame(minWidth: 44, alignment: .trailing) + } + .font(.system(size: 10, weight: .medium)) + .foregroundStyle(.tertiary) + .tracking(-0.05) + } + ) { + VStack(alignment: .leading, spacing: 7) { + let maxCost = store.payload.current.topActivities.map(\.cost).max() ?? 1 + ForEach(store.payload.current.topActivities, id: \.name) { activity in + ActivityRow(activity: activity, maxCost: maxCost) + } + } + } + } +} + +struct ActivityRow: View { + let activity: ActivityEntry + let maxCost: Double + + var body: some View { + HStack(spacing: 8) { + FixedBar(fraction: activity.cost / maxCost) + .frame(width: 56, height: 6) + + Text(activity.name) + .font(.system(size: 12.5, weight: .medium)) + .frame(maxWidth: .infinity, alignment: .leading) + + Text(activity.cost.asCompactCurrency()) + .font(.codeMono(size: 12, weight: .medium)) + .tracking(-0.2) + .frame(minWidth: 54, alignment: .trailing) + + Text("\(activity.turns)") + .font(.system(size: 11)) + .monospacedDigit() + .foregroundStyle(.secondary) + .frame(minWidth: 52, alignment: .trailing) + + Text(oneShotText) + .font(.system(size: 10.5)) + .monospacedDigit() + .foregroundStyle(.secondary) + .frame(minWidth: 44, alignment: .trailing) + } + .padding(.horizontal, 2) + .padding(.vertical, 1) + } + + private var oneShotText: String { + guard let rate = activity.oneShotRate else { return "—" } + return "\(Int(rate * 100))%" + } +} + +/// Fixed-width horizontal bar that shows a fill fraction. +struct FixedBar: View { + let fraction: Double + + var body: some View { + GeometryReader { geo in + ZStack(alignment: .leading) { + RoundedRectangle(cornerRadius: 2) + .fill(.secondary.opacity(0.15)) + RoundedRectangle(cornerRadius: 2) + .fill(Theme.brandAccent) + .frame(width: max(0, min(geo.size.width, geo.size.width * CGFloat(fraction)))) + } + } + } +} diff --git a/mac/Sources/CodeBurnMenubar/Views/AgentTabStrip.swift b/mac/Sources/CodeBurnMenubar/Views/AgentTabStrip.swift new file mode 100644 index 0000000..4feb180 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/AgentTabStrip.swift @@ -0,0 +1,92 @@ +import SwiftUI + +struct AgentTabStrip: View { + @Environment(AppStore.self) private var store + + var body: some View { + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 5) { + ForEach(visibleFilters) { filter in + Button { + Task { await store.switchTo(provider: filter) } + } label: { + AgentTab( + filter: filter, + cost: cost(for: filter), + isActive: store.selectedProvider == filter + ) + } + .buttonStyle(.plain) + } + } + .padding(.horizontal, 12) + .padding(.top, 8) + .padding(.bottom, 4) + } + } + + /// Drive tab visibility and per-tab cost labels from the *all-provider* payload (today), + /// not the currently selected provider's payload. Without this, switching to Codex (which + /// has no data) would hide every other tab including Claude. + private var allProvidersToday: MenubarPayload { + store.todayPayload ?? store.payload + } + + private var visibleFilters: [ProviderFilter] { + let activeKeys = Set(allProvidersToday.current.providers.keys.map { $0.lowercased() }) + return ProviderFilter.allCases.filter { filter in + if filter == .all { return true } + return activeKeys.contains(filter.rawValue.lowercased()) + } + } + + private func cost(for filter: ProviderFilter) -> Double? { + switch filter { + case .all: + return allProvidersToday.current.cost + default: + let key = filter.rawValue.lowercased() + return allProvidersToday.current.providers[key] + } + } +} + +private struct AgentTab: View { + let filter: ProviderFilter + let cost: Double? + let isActive: Bool + + var body: some View { + HStack(spacing: 5) { + Text(filter.rawValue) + .font(.system(size: 11.5, weight: .medium)) + .tracking(-0.05) + if let cost, cost > 0 { + Text(cost.asCompactCurrency()) + .font(.codeMono(size: 10.5, weight: .medium)) + .foregroundStyle(isActive ? AnyShapeStyle(.white.opacity(0.8)) : AnyShapeStyle(.secondary)) + .tracking(-0.2) + } + } + .padding(.horizontal, 10) + .padding(.vertical, 4) + .background( + RoundedRectangle(cornerRadius: 6) + .fill(isActive ? AnyShapeStyle(Theme.brandAccent) : AnyShapeStyle(Color.secondary.opacity(0.08))) + ) + .foregroundStyle(isActive ? AnyShapeStyle(.white) : AnyShapeStyle(.secondary)) + .contentShape(Rectangle()) + } +} + +extension ProviderFilter { + var color: Color { + switch self { + case .all: return Theme.brandAccent + case .claude: return Theme.categoricalClaude + case .codex: return Theme.categoricalCodex + case .cursor: return Theme.categoricalCursor + case .copilot: return Color(red: 0x6D/255.0, green: 0x8F/255.0, blue: 0xA6/255.0) + } + } +} diff --git a/mac/Sources/CodeBurnMenubar/Views/FindingsSection.swift b/mac/Sources/CodeBurnMenubar/Views/FindingsSection.swift new file mode 100644 index 0000000..3b31e76 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/FindingsSection.swift @@ -0,0 +1,290 @@ +import SwiftUI + +private let winColor = Theme.brandAccent +private let riskColor = Theme.brandAccent +private let improveColor = Theme.brandAccent + +/// Three-category insights panel: wins, improvements, risks. +/// Wins/risks are derived from current + history; improvements come from the optimize findings. +struct FindingsSection: View { + @Environment(AppStore.self) private var store + @State private var isExpanded: Bool = true + + var body: some View { + let groups = computeTipGroups(payload: store.payload) + if groups.allSatisfy({ $0.items.isEmpty }) { return AnyView(EmptyView()) } + + return AnyView( + VStack(alignment: .leading, spacing: 8) { + Button { + withAnimation(.easeInOut(duration: 0.18)) { isExpanded.toggle() } + } label: { + HStack(alignment: .firstTextBaseline) { + HStack(spacing: 6) { + Image(systemName: "lightbulb.fill") + .font(.system(size: 11, weight: .semibold)) + .foregroundStyle(Theme.brandAccent) + Text("Tips for you") + .font(.system(size: 12.5, weight: .semibold)) + .foregroundStyle(.primary) + } + Spacer() + Text("\(groups.flatMap { $0.items }.count) signals") + .font(.system(size: 10.5)) + .foregroundStyle(.secondary) + Image(systemName: "chevron.right") + .font(.system(size: 9, weight: .semibold)) + .rotationEffect(.degrees(isExpanded ? 90 : 0)) + .opacity(0.55) + .foregroundStyle(.secondary) + } + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + + if isExpanded { + VStack(alignment: .leading, spacing: 10) { + ForEach(groups) { group in + if !group.items.isEmpty { + TipsGroup(group: group) + } + } + + if store.payload.optimize.findingCount > 0 { + Button { + openOptimize() + } label: { + HStack(spacing: 4) { + Text("Open Full Optimize") + .font(.system(size: 11.5, weight: .semibold)) + Image(systemName: "arrow.forward") + .font(.system(size: 9, weight: .semibold)) + } + .foregroundStyle(Theme.brandAccent) + } + .buttonStyle(.plain) + } + } + .transition(.opacity) + } + } + .padding(12) + .background( + RoundedRectangle(cornerRadius: 8) + .fill(Color.secondary.opacity(0.06)) + ) + .padding(.horizontal, 14) + .padding(.vertical, 8) + ) + } + + private func openOptimize() { + TerminalLauncher.open(subcommand: ["optimize"]) + } +} + +private struct TipsGroup: View { + let group: TipGroup + + var body: some View { + VStack(alignment: .leading, spacing: 5) { + HStack(spacing: 5) { + Image(systemName: group.icon) + .font(.system(size: 10, weight: .bold)) + .foregroundStyle(group.color) + Text(group.label) + .font(.system(size: 10.5, weight: .semibold)) + .foregroundStyle(group.color) + .textCase(.uppercase) + .tracking(0.4) + } + VStack(alignment: .leading, spacing: 4) { + ForEach(group.items) { item in + HStack(alignment: .firstTextBaseline, spacing: 6) { + Circle().fill(group.color).frame(width: 3, height: 3).padding(.top, 4) + Text(item.text) + .font(.system(size: 11.5)) + .foregroundStyle(.primary) + .frame(maxWidth: .infinity, alignment: .leading) + if let trailing = item.trailing { + Text(trailing) + .font(.codeMono(size: 11, weight: .medium)) + .foregroundStyle(.secondary) + .tracking(-0.2) + } + } + } + } + } + } +} + +private struct TipGroup: Identifiable { + let id = UUID() + let label: String + let icon: String + let color: Color + let items: [TipItem] +} + +private struct TipItem: Identifiable { + let id = UUID() + let text: String + let trailing: String? +} + +private func computeTipGroups(payload: MenubarPayload) -> [TipGroup] { + let stats = computeHistoryStats(history: payload.history.daily) + + // What's working + var wins: [TipItem] = [] + let cacheHit = payload.current.cacheHitPercent + if cacheHit >= 80 { + wins.append(TipItem( + text: "Cache hit at \(Int(cacheHit))% — most prompts reuse cache", + trailing: nil + )) + } + if let oneShot = payload.current.oneShotRate, oneShot >= 0.75 { + wins.append(TipItem( + text: "\(Int(oneShot * 100))% one-shot — edits landing first try", + trailing: nil + )) + } + if let delta = stats.weekDeltaPercent, delta < -10 { + wins.append(TipItem( + text: "Spend down \(Int(abs(delta)))% vs last 7 days", + trailing: nil + )) + } + if stats.activeStreakDays >= 5 { + wins.append(TipItem( + text: "\(stats.activeStreakDays)-day usage streak", + trailing: nil + )) + } + + // What to improve (existing optimize findings) + var improvements: [TipItem] = [] + for finding in payload.optimize.topFindings.prefix(3) { + improvements.append(TipItem( + text: finding.title, + trailing: finding.savingsUSD.asCompactCurrency() + )) + } + + // Risks + var risks: [TipItem] = [] + if let delta = stats.weekDeltaPercent, delta > 25 { + risks.append(TipItem( + text: "Spend up \(Int(delta))% vs prior 7 days", + trailing: nil + )) + } + if cacheHit > 0 && cacheHit < 50 { + risks.append(TipItem( + text: "Cache hit only \(Int(cacheHit))% — paying for cold prompts", + trailing: nil + )) + } + if let oneShot = payload.current.oneShotRate, oneShot < 0.5 { + risks.append(TipItem( + text: "\(Int(oneShot * 100))% one-shot — lots of iteration", + trailing: nil + )) + } + if let projected = stats.projectedMonth, let prevMonth = stats.previousMonthTotal, projected > prevMonth * 1.3 { + risks.append(TipItem( + text: "On pace for \(projected.asCompactCurrency()) this month (+\(Int(((projected - prevMonth) / prevMonth) * 100))% vs last)", + trailing: nil + )) + } + + return [ + TipGroup(label: "What's working", icon: "checkmark.circle.fill", color: winColor, items: wins), + TipGroup(label: "What to improve", icon: "arrow.up.right.circle.fill", color: improveColor, items: improvements), + TipGroup(label: "Risks", icon: "exclamationmark.triangle.fill", color: riskColor, items: risks), + ] +} + +private struct HistoryStats { + let weekDeltaPercent: Double? + let activeStreakDays: Int + let projectedMonth: Double? + let previousMonthTotal: Double? +} + +private func computeHistoryStats(history: [DailyHistoryEntry]) -> HistoryStats { + var calendar = Calendar(identifier: .gregorian) + calendar.timeZone = TimeZone(identifier: "UTC")! + let formatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "yyyy-MM-dd" + f.timeZone = TimeZone(identifier: "UTC") + return f + }() + let now = Date() + let today = calendar.startOfDay(for: now) + let costByDate = Dictionary(uniqueKeysWithValues: history.map { ($0.date, $0.cost) }) + + let lastWeekStart = calendar.date(byAdding: .day, value: -6, to: today) + let priorWeekStart = calendar.date(byAdding: .day, value: -13, to: today) + let priorWeekEnd = calendar.date(byAdding: .day, value: -7, to: today) + var weekDeltaPercent: Double? = nil + if let lws = lastWeekStart, let pws = priorWeekStart, let pwe = priorWeekEnd { + let lwsStr = formatter.string(from: lws) + let pwsStr = formatter.string(from: pws) + let pweStr = formatter.string(from: pwe) + let thisWeek = history.filter { $0.date >= lwsStr }.reduce(0.0) { $0 + $1.cost } + let prior = history.filter { $0.date >= pwsStr && $0.date <= pweStr }.reduce(0.0) { $0 + $1.cost } + if prior > 0 { + weekDeltaPercent = ((thisWeek - prior) / prior) * 100 + } + } + + var streak = 0 + for offset in 0..<60 { + guard let d = calendar.date(byAdding: .day, value: -offset, to: today) else { break } + let key = formatter.string(from: d) + if (costByDate[key] ?? 0) > 0 { streak += 1 } else { break } + } + + var projectedMonth: Double? = nil + var previousMonthTotal: Double? = nil + let comps = calendar.dateComponents([.year, .month, .day], from: now) + if + let firstOfMonth = calendar.date(from: DateComponents(year: comps.year, month: comps.month, day: 1)), + let rangeOfMonth = calendar.range(of: .day, in: .month, for: firstOfMonth) + { + let firstStr = formatter.string(from: firstOfMonth) + let mtd = history.filter { $0.date >= firstStr }.reduce(0.0) { $0 + $1.cost } + let dayOfMonth = comps.day ?? 1 + if dayOfMonth > 0 { + projectedMonth = (mtd / Double(dayOfMonth)) * Double(rangeOfMonth.count) + } + + if + let prevMonth = calendar.date(byAdding: .month, value: -1, to: firstOfMonth), + let prevRange = calendar.range(of: .day, in: .month, for: prevMonth), + let prevFirst = calendar.date(from: DateComponents( + year: calendar.component(.year, from: prevMonth), + month: calendar.component(.month, from: prevMonth), + day: 1 + )), + let prevLast = calendar.date(byAdding: .day, value: prevRange.count - 1, to: prevFirst) + { + let prevFirstStr = formatter.string(from: prevFirst) + let prevLastStr = formatter.string(from: prevLast) + let prevTotal = history.filter { $0.date >= prevFirstStr && $0.date <= prevLastStr } + .reduce(0.0) { $0 + $1.cost } + if prevTotal > 0 { previousMonthTotal = prevTotal } + } + } + + return HistoryStats( + weekDeltaPercent: weekDeltaPercent, + activeStreakDays: streak, + projectedMonth: projectedMonth, + previousMonthTotal: previousMonthTotal + ) +} diff --git a/mac/Sources/CodeBurnMenubar/Views/HeatmapSection.swift b/mac/Sources/CodeBurnMenubar/Views/HeatmapSection.swift new file mode 100644 index 0000000..6466ad0 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/HeatmapSection.swift @@ -0,0 +1,1219 @@ +import SwiftUI + +private let trendDays = 19 +private let trendBarWidth: CGFloat = 13 +private let trendBarGap: CGFloat = 4 +private let trendChartHeight: CGFloat = 90 + +/// Three switchable insight visualizations: Calendar (this month), Forecast (burn rate), +/// Pulse (efficiency KPIs). Pills at top toggle between them. +struct HeatmapSection: View { + @Environment(AppStore.self) private var store + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + InsightPillSwitcher(selected: bindingMode, visibleModes: visibleModes) + content + } + .frame(maxWidth: .infinity, alignment: .leading) + .onAppear { ensureValidSelection() } + .onChange(of: store.selectedProvider) { _, _ in ensureValidSelection() } + } + + private var bindingMode: Binding { + Binding(get: { store.selectedInsight }, set: { store.selectedInsight = $0 }) + } + + private var visibleModes: [InsightMode] { + // Plan sources from Claude's OAuth usage endpoint, so it only makes sense when the + // Claude provider tab is selected. Hidden on All/Cursor/Codex/etc. + InsightMode.allCases.filter { mode in + if mode == .plan { return store.selectedProvider == .claude } + return true + } + } + + private func ensureValidSelection() { + if !visibleModes.contains(store.selectedInsight) { + store.selectedInsight = visibleModes.first ?? .trend + } + } + + @ViewBuilder + private var content: some View { + switch store.selectedInsight { + case .plan: PlanInsight(usage: store.subscription) + case .trend: TrendInsight(days: store.payload.history.daily) + case .forecast: ForecastInsight(days: store.payload.history.daily) + case .pulse: PulseInsight(payload: store.payload) + case .stats: StatsInsight(payload: store.payload) + } + } +} + +// MARK: - Pill Switcher + +private struct InsightPillSwitcher: View { + @Binding var selected: InsightMode + let visibleModes: [InsightMode] + + var body: some View { + HStack(spacing: 4) { + ForEach(visibleModes) { mode in + Button { + selected = mode + } label: { + Text(mode.rawValue) + .font(.system(size: 11, weight: .medium)) + .foregroundStyle(selected == mode ? AnyShapeStyle(.white) : AnyShapeStyle(.secondary)) + .padding(.horizontal, 10) + .padding(.vertical, 4) + .background( + RoundedRectangle(cornerRadius: 6) + .fill(selected == mode ? AnyShapeStyle(Theme.brandAccent) : AnyShapeStyle(Color.secondary.opacity(0.10))) + ) + } + .buttonStyle(.plain) + } + } + } +} + +// MARK: - Trend (14-day bar chart with peak + average) + +private struct TrendInsight: View { + let days: [DailyHistoryEntry] + + var body: some View { + let bars = buildTrendBars(from: days) + let stats = computeTrendStats(bars: bars, allDays: days) + // Tokens are real for the .all-providers view; per-provider history doesn't carry + // token breakdown yet, so fall back to $ when no tokens are present. + let totalTokens = bars.reduce(0.0) { $0 + $1.tokens } + let useTokens = totalTokens > 0 + let metric: (TrendBar) -> Double = useTokens ? { $0.tokens } : { $0.cost } + let maxValue = max(bars.map(metric).max() ?? 1, 0.01) + let avgValue = bars.isEmpty ? 0 : bars.map(metric).reduce(0, +) / Double(bars.count) + let peakValue = bars.filter({ metric($0) > 0 }).max(by: { metric($0) < metric($1) }) + let yesterdayValue = stats.yesterdayBar.map(metric) + + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .firstTextBaseline) { + VStack(alignment: .leading, spacing: 1) { + Text("Last \(trendDays) days") + .font(.system(size: 10, weight: .medium)) + .foregroundStyle(.tertiary) + Text(formatHero(useTokens: useTokens, tokens: totalTokens, dollars: stats.totalThisWindow)) + .font(.system(size: 18, weight: .semibold, design: .rounded)) + .monospacedDigit() + .foregroundStyle(.primary) + } + Spacer() + if let delta = stats.deltaPercent { + HStack(spacing: 3) { + Image(systemName: delta >= 0 ? "arrow.up.right" : "arrow.down.right") + .font(.system(size: 9, weight: .bold)) + Text("\(delta >= 0 ? "+" : "")\(String(format: "%.0f", delta))% vs prior \(trendDays)d") + .font(.system(size: 10.5)) + .monospacedDigit() + } + .foregroundStyle(Theme.brandAccent) + } + } + + TrendChart( + bars: bars, + maxValue: maxValue, + avgValue: avgValue, + metric: metric, + formatValue: { formatValue($0, useTokens: useTokens) } + ) + .zIndex(1) + + HStack(spacing: 14) { + MiniStat(label: "Avg/day", value: formatValue(avgValue, useTokens: useTokens)) + MiniStat(label: "Peak", value: peakLabel(peakValue, metric: metric, useTokens: useTokens)) + MiniStat(label: "Yesterday", value: yesterdayValue.map { formatValue($0, useTokens: useTokens) } ?? "—") + } + } + } + + private func formatHero(useTokens: Bool, tokens: Double, dollars: Double) -> String { + useTokens ? "\(formatTokens(tokens)) tokens" : dollars.asCurrency() + } + + private func formatValue(_ v: Double, useTokens: Bool) -> String { + useTokens ? "\(formatTokens(v)) tok" : v.asCompactCurrency() + } + + private func peakLabel(_ peak: TrendBar?, metric: (TrendBar) -> Double, useTokens: Bool) -> String { + guard let peak, metric(peak) > 0 else { return "—" } + return "\(formatValue(metric(peak), useTokens: useTokens)) on \(shortDate(peak.date))" + } + + private func formatTokens(_ n: Double) -> String { + if n >= 1_000_000 { return String(format: "%.1fM", n / 1_000_000) } + if n >= 1_000 { return String(format: "%.0fK", n / 1_000) } + return String(format: "%.0f", n) + } + + private func shortDate(_ ymd: String) -> String { + let parts = ymd.split(separator: "-") + guard parts.count == 3 else { return ymd } + return "\(parts[1])/\(parts[2])" + } +} + +private struct TrendChart: View { + let bars: [TrendBar] + let maxValue: Double + let avgValue: Double + let metric: (TrendBar) -> Double + let formatValue: (Double) -> String + + @State private var hoveredBarID: TrendBar.ID? + + var body: some View { + let avgFraction = maxValue > 0 ? CGFloat(min(avgValue / maxValue, 1.0)) : 0 + + ZStack(alignment: .bottomLeading) { + HStack(alignment: .bottom, spacing: trendBarGap) { + ForEach(bars) { bar in + BarColumn( + bar: bar, + value: metric(bar), + maxValue: maxValue, + isHovered: hoveredBarID == bar.id + ) + .onHover { hovering in + hoveredBarID = hovering ? bar.id : (hoveredBarID == bar.id ? nil : hoveredBarID) + } + } + } + .frame(maxWidth: .infinity, alignment: .leading) + .frame(height: trendChartHeight, alignment: .bottom) + + GeometryReader { geo in + Path { p in + let y = geo.size.height - (geo.size.height * avgFraction) + p.move(to: CGPoint(x: 0, y: y)) + p.addLine(to: CGPoint(x: geo.size.width, y: y)) + } + .stroke(Color.secondary.opacity(0.5), style: StrokeStyle(lineWidth: 1, dash: [3, 3])) + } + .frame(height: trendChartHeight) + .allowsHitTesting(false) + } + .frame(height: trendChartHeight) + .overlay(alignment: .bottomLeading) { + // Floats below the chart without taking layout space. Opaque dark card hides + // whatever sits beneath it (mini stats, activity rows). + if let hoveredBar { + BarTooltipCard(bar: hoveredBar, formatValue: formatValue) + .padding(.top, 6) + .offset(y: 92) + .transition(.opacity) + .allowsHitTesting(false) + .zIndex(10) + } + } + .animation(.easeInOut(duration: 0.12), value: hoveredBarID) + } + + private var hoveredBar: TrendBar? { + guard let id = hoveredBarID else { return nil } + return bars.first { $0.id == id } + } +} + +private struct BarColumn: View { + let bar: TrendBar + let value: Double + let maxValue: Double + let isHovered: Bool + + var body: some View { + let fraction = maxValue > 0 ? CGFloat(value / maxValue) : 0 + let height = max(2, trendChartHeight * fraction) + + VStack(spacing: 2) { + Spacer(minLength: 0) + RoundedRectangle(cornerRadius: 2) + .fill(barColor) + .frame(width: trendBarWidth, height: height) + .overlay( + RoundedRectangle(cornerRadius: 2) + .stroke(Theme.brandAccent.opacity(isHovered ? 0.9 : 0), lineWidth: 1) + ) + .scaleEffect(x: isHovered ? 1.08 : 1.0, y: 1.0, anchor: .bottom) + .animation(.easeOut(duration: 0.12), value: isHovered) + } + .contentShape(Rectangle()) + } + + private var barColor: Color { + if bar.isToday { return Theme.brandAccent } + if value <= 0 { return Color.secondary.opacity(0.15) } + return isHovered ? Theme.brandAccent.opacity(0.85) : Theme.brandAccent.opacity(0.55) + } +} + +private struct BarTooltipCard: View { + let bar: TrendBar + let formatValue: (Double) -> String + @Environment(\.colorScheme) private var colorScheme + + private var backgroundFill: Color { + colorScheme == .dark ? Color.white : Color.black + } + + private var primaryText: Color { + colorScheme == .dark ? Color.black : Color.white + } + + private var secondaryText: Color { + colorScheme == .dark ? Color.black.opacity(0.7) : Color.white.opacity(0.72) + } + + private var tertiaryText: Color { + colorScheme == .dark ? Color.black.opacity(0.5) : Color.white.opacity(0.52) + } + + private var borderStroke: Color { + colorScheme == .dark ? Color.black.opacity(0.12) : Color.white.opacity(0.12) + } + + var body: some View { + VStack(alignment: .leading, spacing: 5) { + HStack(alignment: .firstTextBaseline) { + Text(prettyDate(bar.date)) + .font(.system(size: 11, weight: .semibold)) + .foregroundStyle(primaryText) + Spacer() + Text("\(formatValue(bar.tokens))") + .font(.codeMono(size: 10.5, weight: .semibold)) + .foregroundStyle(Theme.brandAccent) + } + + if !bar.topModels.isEmpty { + VStack(alignment: .leading, spacing: 3) { + ForEach(bar.topModels.prefix(4), id: \.name) { m in + HStack(spacing: 6) { + Circle().fill(Theme.brandAccent.opacity(0.7)).frame(width: 4, height: 4) + Text(m.name) + .font(.system(size: 10, weight: .medium)) + .foregroundStyle(primaryText) + Spacer() + Text("\(formatTokensCompact(Double(m.totalTokens))) tok") + .font(.codeMono(size: 9.5, weight: .medium)) + .foregroundStyle(secondaryText) + Text("(\(formatTokensCompact(Double(m.inputTokens)))/\(formatTokensCompact(Double(m.outputTokens))))") + .font(.codeMono(size: 9, weight: .regular)) + .foregroundStyle(tertiaryText) + } + } + } + } else { + Text("No model breakdown available") + .font(.system(size: 10)) + .foregroundStyle(tertiaryText) + } + } + .padding(11) + .frame(maxWidth: .infinity, alignment: .leading) + .background( + RoundedRectangle(cornerRadius: 8) + .fill(backgroundFill) + ) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(borderStroke, lineWidth: 0.5) + ) + .shadow(color: Color.black.opacity(0.35), radius: 10, y: 4) + } + + private func formatTokensCompact(_ n: Double) -> String { + if n >= 1_000_000 { return String(format: "%.1fM", n / 1_000_000) } + if n >= 1_000 { return String(format: "%.0fK", n / 1_000) } + return String(format: "%.0f", n) + } +} + +private func prettyDate(_ ymd: String) -> String { + let parser = DateFormatter() + parser.dateFormat = "yyyy-MM-dd" + parser.timeZone = TimeZone(identifier: "UTC") + guard let date = parser.date(from: ymd) else { return ymd } + let display = DateFormatter() + display.dateFormat = "EEE MMM d" + return display.string(from: date) +} + +private struct MiniStat: View { + let label: String + let value: String + + var body: some View { + VStack(alignment: .leading, spacing: 1) { + Text(label) + .font(.system(size: 9.5, weight: .medium)) + .foregroundStyle(.tertiary) + Text(value) + .font(.system(size: 11.5, weight: .semibold)) + .monospacedDigit() + .foregroundStyle(.primary) + } + .frame(maxWidth: .infinity, alignment: .leading) + } +} + +private struct TrendBar: Identifiable { + let id = UUID() + let date: String + let cost: Double + let inputTokens: Double + let outputTokens: Double + let isToday: Bool + let topModels: [DailyModelBreakdown] + + var tokens: Double { inputTokens + outputTokens } +} + +private struct TrendStats { + let totalThisWindow: Double + let avgPerDay: Double + let peak: TrendBar? + let activeDays: Int + let deltaPercent: Double? + let yesterdayBar: TrendBar? +} + +private func buildTrendBars(from days: [DailyHistoryEntry]) -> [TrendBar] { + var calendar = Calendar(identifier: .gregorian) + calendar.timeZone = TimeZone(identifier: "UTC")! + let formatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "yyyy-MM-dd" + f.timeZone = TimeZone(identifier: "UTC") + return f + }() + let entryByDate = Dictionary(uniqueKeysWithValues: days.map { ($0.date, $0) }) + let today = calendar.startOfDay(for: Date()) + let todayKey = formatter.string(from: today) + + var bars: [TrendBar] = [] + for offset in (0.. TrendStats { + let total = bars.reduce(0.0) { $0 + $1.cost } + let active = bars.filter { $0.cost > 0 }.count + let avg = bars.isEmpty ? 0 : total / Double(bars.count) + let peak = bars.filter { $0.cost > 0 }.max(by: { $0.cost < $1.cost }) + + var calendar = Calendar(identifier: .gregorian) + calendar.timeZone = TimeZone(identifier: "UTC")! + let formatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "yyyy-MM-dd" + f.timeZone = TimeZone(identifier: "UTC") + return f + }() + let today = calendar.startOfDay(for: Date()) + let priorWindowStart = calendar.date(byAdding: .day, value: -(2 * trendDays - 1), to: today) + let thisWindowStart = calendar.date(byAdding: .day, value: -(trendDays - 1), to: today) + var deltaPercent: Double? = nil + if let priorStart = priorWindowStart, let thisStart = thisWindowStart { + let priorStartStr = formatter.string(from: priorStart) + let thisStartStr = formatter.string(from: thisStart) + let priorTotal = allDays + .filter { $0.date >= priorStartStr && $0.date < thisStartStr } + .reduce(0.0) { $0 + $1.cost } + if priorTotal > 0 { + deltaPercent = ((total - priorTotal) / priorTotal) * 100 + } + } + + let yesterdayDate = calendar.date(byAdding: .day, value: -1, to: today) + let yesterdayKey = yesterdayDate.map { formatter.string(from: $0) } + let yesterdayBar = bars.first(where: { $0.date == yesterdayKey }) + + return TrendStats( + totalThisWindow: total, + avgPerDay: avg, + peak: peak, + activeDays: active, + deltaPercent: deltaPercent, + yesterdayBar: yesterdayBar + ) +} + +// MARK: - Forecast + +private struct ForecastInsight: View { + let days: [DailyHistoryEntry] + + var body: some View { + let stats = computeForecast(days: days) + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .firstTextBaseline) { + VStack(alignment: .leading, spacing: 2) { + Text("Month-to-date") + .font(.system(size: 10, weight: .medium)) + .foregroundStyle(.tertiary) + Text(stats.mtd.asCurrency()) + .font(.system(size: 22, weight: .semibold, design: .rounded)) + .monospacedDigit() + .foregroundStyle(Theme.brandAccent) + } + Spacer() + VStack(alignment: .trailing, spacing: 2) { + Text("On pace for") + .font(.system(size: 10, weight: .medium)) + .foregroundStyle(.tertiary) + Text(stats.projection.asCurrency()) + .font(.system(size: 16, weight: .semibold)) + .monospacedDigit() + } + } + + HStack(spacing: 14) { + ForecastStat(label: "Avg/day (this wk)", value: stats.weekAvg.asCompactCurrency()) + ForecastStat(label: "Yesterday", value: stats.yesterday.asCompactCurrency()) + ForecastStat(label: "Last 7d", value: stats.weekTotal.asCompactCurrency()) + } + + if let prevTotal = stats.previousMonthTotal { + HStack(spacing: 4) { + Image(systemName: stats.projection > prevTotal ? "arrow.up.right" : "arrow.down.right") + .font(.system(size: 9, weight: .bold)) + Text(comparisonText(projection: stats.projection, previous: prevTotal)) + .font(.system(size: 10.5)) + .monospacedDigit() + } + .foregroundStyle(Theme.brandAccent) + } + } + } + + private func comparisonText(projection: Double, previous: Double) -> String { + guard previous > 0 else { return "no prior month" } + let diff = ((projection - previous) / previous) * 100 + let sign = diff >= 0 ? "+" : "" + return "\(sign)\(String(format: "%.0f", diff))% vs last month ($\(String(format: "%.0f", previous)))" + } +} + +private struct ForecastStat: View { + let label: String + let value: String + var body: some View { + VStack(alignment: .leading, spacing: 1) { + Text(label) + .font(.system(size: 9.5, weight: .medium)) + .foregroundStyle(.tertiary) + Text(value) + .font(.system(size: 12, weight: .semibold)) + .monospacedDigit() + .foregroundStyle(.primary) + } + .frame(maxWidth: .infinity, alignment: .leading) + } +} + +private struct ForecastStats { + let mtd: Double + let projection: Double + let weekAvg: Double + let weekTotal: Double + let yesterday: Double + let previousMonthTotal: Double? +} + +private func computeForecast(days: [DailyHistoryEntry]) -> ForecastStats { + var calendar = Calendar(identifier: .gregorian) + calendar.timeZone = TimeZone(identifier: "UTC")! + let formatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "yyyy-MM-dd" + f.timeZone = TimeZone(identifier: "UTC") + return f + }() + let now = Date() + let comps = calendar.dateComponents([.year, .month, .day], from: now) + guard + let firstOfMonth = calendar.date(from: DateComponents(year: comps.year, month: comps.month, day: 1)), + let rangeOfMonth = calendar.range(of: .day, in: .month, for: firstOfMonth) + else { + return ForecastStats(mtd: 0, projection: 0, weekAvg: 0, weekTotal: 0, yesterday: 0, previousMonthTotal: nil) + } + + let firstStr = formatter.string(from: firstOfMonth) + let totalDays = rangeOfMonth.count + let dayOfMonth = comps.day ?? 1 + + let mtdEntries = days.filter { $0.date >= firstStr } + let mtd = mtdEntries.reduce(0.0) { $0 + $1.cost } + let avgPerElapsedDay = dayOfMonth > 0 ? mtd / Double(dayOfMonth) : 0 + let projection = avgPerElapsedDay * Double(totalDays) + + let weekStart = calendar.date(byAdding: .day, value: -6, to: calendar.startOfDay(for: now)) + let weekStartStr = weekStart.map { formatter.string(from: $0) } ?? "" + let weekEntries = days.filter { $0.date >= weekStartStr } + let weekTotal = weekEntries.reduce(0.0) { $0 + $1.cost } + let weekAvg = weekTotal / 7.0 + + let yesterdayDate = calendar.date(byAdding: .day, value: -1, to: calendar.startOfDay(for: now)) + let yesterdayStr = yesterdayDate.map { formatter.string(from: $0) } ?? "" + let yesterday = days.first(where: { $0.date == yesterdayStr })?.cost ?? 0 + + var previousMonthTotal: Double? = nil + if + let prevMonthDate = calendar.date(byAdding: .month, value: -1, to: firstOfMonth), + let prevRange = calendar.range(of: .day, in: .month, for: prevMonthDate), + let prevFirst = calendar.date(from: DateComponents(year: calendar.component(.year, from: prevMonthDate), month: calendar.component(.month, from: prevMonthDate), day: 1)), + let prevLast = calendar.date(byAdding: .day, value: prevRange.count - 1, to: prevFirst) + { + let prevFirstStr = formatter.string(from: prevFirst) + let prevLastStr = formatter.string(from: prevLast) + let prevEntries = days.filter { $0.date >= prevFirstStr && $0.date <= prevLastStr } + if !prevEntries.isEmpty { + previousMonthTotal = prevEntries.reduce(0.0) { $0 + $1.cost } + } + } + + return ForecastStats( + mtd: mtd, + projection: projection, + weekAvg: weekAvg, + weekTotal: weekTotal, + yesterday: yesterday, + previousMonthTotal: previousMonthTotal + ) +} + +// MARK: - Pulse + +private struct PulseInsight: View { + let payload: MenubarPayload + + var body: some View { + HStack(spacing: 10) { + PulseTile(label: "Cache hit", value: cacheHitText, color: Theme.brandAccent) + PulseTile(label: "1-shot", value: oneShotText, color: oneShotColor) + PulseTile( + label: "Cost / session", + value: payload.current.sessions > 0 + ? (payload.current.cost / Double(payload.current.sessions)).asCompactCurrency() + : "—", + color: .secondary + ) + } + } + + private var cacheHitText: String { + let v = payload.current.cacheHitPercent + return v <= 0 ? "—" : String(format: "%.0f%%", v) + } + + private var oneShotText: String { + guard let r = payload.current.oneShotRate else { return "—" } + return String(format: "%.0f%%", r * 100) + } + + private var oneShotColor: Color { + payload.current.oneShotRate == nil ? .secondary : Theme.brandAccent + } +} + +private struct PulseTile: View { + let label: String + let value: String + let color: Color + + var body: some View { + VStack(alignment: .leading, spacing: 3) { + Text(label) + .font(.system(size: 10, weight: .medium)) + .foregroundStyle(.tertiary) + Text(value) + .font(.system(size: 18, weight: .semibold, design: .rounded)) + .monospacedDigit() + .foregroundStyle(color) + } + .padding(.horizontal, 10) + .padding(.vertical, 8) + .frame(maxWidth: .infinity, alignment: .leading) + .background( + RoundedRectangle(cornerRadius: 6) + .fill(Color.secondary.opacity(0.06)) + ) + } +} + +/// Connects optimize findings directly to plan utilization: "address N findings to recover X +/// tokens" framed as the same currency the rest of the Plan view uses (effective tokens). +/// Scoped to whatever period the user selected (today / 7d / 30d / month / all). +private struct OptimizeSavingsBadge: View { + let payload: MenubarPayload + + var body: some View { + let findingCount = payload.optimize.findingCount + let savingsUSD = payload.optimize.savingsUSD + if findingCount == 0 || savingsUSD <= 0 { + EmptyView() + } else { + Button { openOptimize() } label: { + HStack(spacing: 6) { + Image(systemName: "lightbulb.fill") + .font(.system(size: 10, weight: .semibold)) + .foregroundStyle(Theme.brandAccent) + Text(captionText(findingCount: findingCount, savingsUSD: savingsUSD)) + .font(.system(size: 11, weight: .medium)) + .foregroundStyle(.primary) + Spacer() + Image(systemName: "chevron.right") + .font(.system(size: 8, weight: .semibold)) + .foregroundStyle(.tertiary) + } + .padding(.horizontal, 10) + .padding(.vertical, 7) + .background( + RoundedRectangle(cornerRadius: 6) + .fill(Theme.brandAccent.opacity(0.10)) + ) + } + .buttonStyle(.plain) + .padding(.top, 2) + } + } + + private func captionText(findingCount: Int, savingsUSD: Double) -> String { + let tokens = savingsUSD / 9.0 * 1_000_000 // ~$9/M effective tokens (Sonnet-weighted approx) + let tokensLabel = formatTokens(tokens) + let plural = findingCount == 1 ? "finding" : "findings" + return "Save ~\(savingsUSD.asCompactCurrency()) / ~\(tokensLabel) tokens · \(findingCount) \(plural)" + } + + private func openOptimize() { + TerminalLauncher.open(subcommand: ["optimize"]) + } + + private func formatTokens(_ n: Double) -> String { + if n >= 1_000_000 { return String(format: "%.1fM", n / 1_000_000) } + if n >= 1_000 { return String(format: "%.0fK", n / 1_000) } + return String(format: "%.0f", n) + } +} + +// MARK: - Stats + +private struct StatsInsight: View { + let payload: MenubarPayload + + var body: some View { + let stats = computeAllStats(payload: payload) + + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .top, spacing: 14) { + VStack(alignment: .leading, spacing: 8) { + StatRow(label: "Favorite model", value: stats.favoriteModel) + StatRow(label: "Active days (month)", value: stats.activeDaysFraction) + StatRow(label: "Most active day", value: stats.mostActiveDay) + StatRow(label: "Peak day spend", value: stats.peakDaySpend) + } + .frame(maxWidth: .infinity, alignment: .leading) + + VStack(alignment: .leading, spacing: 8) { + StatRow(label: "Sessions today", value: "\(payload.current.sessions)") + StatRow(label: "Calls today", value: payload.current.calls.asThousandsSeparated()) + StatRow(label: "Current streak", value: stats.currentStreak) + StatRow(label: "Longest streak", value: stats.longestStreak) + } + .frame(maxWidth: .infinity, alignment: .leading) + } + + if let lifetime = stats.lifetimeTotal { + Divider().opacity(0.5) + HStack { + Text("Tracked spend (last \(stats.historyDayCount) days)") + .font(.system(size: 10.5, weight: .medium)) + .foregroundStyle(.tertiary) + Spacer() + Text(lifetime.asCurrency()) + .font(.system(size: 13, weight: .semibold, design: .rounded)) + .monospacedDigit() + .foregroundStyle(Theme.brandAccent) + } + } + } + } +} + +private struct StatRow: View { + let label: String + let value: String + + var body: some View { + VStack(alignment: .leading, spacing: 1) { + Text(label) + .font(.system(size: 9.5, weight: .medium)) + .foregroundStyle(.tertiary) + Text(value) + .font(.system(size: 12, weight: .semibold)) + .monospacedDigit() + .foregroundStyle(.primary) + } + } +} + +private struct AllStats { + let favoriteModel: String + let activeDaysFraction: String + let mostActiveDay: String + let peakDaySpend: String + let currentStreak: String + let longestStreak: String + let lifetimeTotal: Double? + let historyDayCount: Int +} + +private func computeAllStats(payload: MenubarPayload) -> AllStats { + let history = payload.history.daily + let favoriteModel = payload.current.topModels.first?.name ?? "—" + + var calendar = Calendar(identifier: .gregorian) + calendar.timeZone = TimeZone(identifier: "UTC")! + let formatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "yyyy-MM-dd" + f.timeZone = TimeZone(identifier: "UTC") + return f + }() + let displayFormatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "MMM d" + f.timeZone = TimeZone(identifier: "UTC") + return f + }() + + let now = Date() + let today = calendar.startOfDay(for: now) + let comps = calendar.dateComponents([.year, .month, .day], from: now) + + var activeDaysFraction = "—" + if + let firstOfMonth = calendar.date(from: DateComponents(year: comps.year, month: comps.month, day: 1)), + let rangeOfMonth = calendar.range(of: .day, in: .month, for: firstOfMonth) + { + let firstStr = formatter.string(from: firstOfMonth) + let mtdActive = history.filter { $0.date >= firstStr && $0.cost > 0 }.count + activeDaysFraction = "\(mtdActive)/\(rangeOfMonth.count)" + } + + let peak = history.max(by: { $0.cost < $1.cost }) + let mostActiveDay: String + let peakDaySpend: String + if let peak, peak.cost > 0, let date = formatter.date(from: peak.date) { + mostActiveDay = displayFormatter.string(from: date) + peakDaySpend = peak.cost.asCompactCurrency() + } else { + mostActiveDay = "—" + peakDaySpend = "—" + } + + let costByDate = Dictionary(uniqueKeysWithValues: history.map { ($0.date, $0.cost) }) + + var currentStreak = 0 + for offset in 0..<400 { + guard let d = calendar.date(byAdding: .day, value: -offset, to: today) else { break } + let key = formatter.string(from: d) + if (costByDate[key] ?? 0) > 0 { currentStreak += 1 } else { break } + } + + var longestStreak = 0 + var running = 0 + let sortedDates = history.map(\.date).sorted() + for date in sortedDates { + if (costByDate[date] ?? 0) > 0 { + running += 1 + longestStreak = max(longestStreak, running) + } else { + running = 0 + } + } + + let lifetimeTotal: Double? = history.isEmpty ? nil : history.reduce(0.0) { $0 + $1.cost } + + return AllStats( + favoriteModel: favoriteModel, + activeDaysFraction: activeDaysFraction, + mostActiveDay: mostActiveDay, + peakDaySpend: peakDaySpend, + currentStreak: currentStreak == 0 ? "—" : "\(currentStreak) days", + longestStreak: longestStreak == 0 ? "—" : "\(longestStreak) days", + lifetimeTotal: lifetimeTotal, + historyDayCount: history.count + ) +} + +// MARK: - Plan (subscription) + +private struct PlanInsight: View { + @Environment(AppStore.self) private var store + let usage: SubscriptionUsage? + + private static let fiveHourSeconds: TimeInterval = 5 * 3600 + private static let sevenDaySeconds: TimeInterval = 7 * 86400 + private static let freshWindowThreshold: Double = 0.05 + + @State private var projections: [String: WindowProjection] = [:] + + var body: some View { + Group { + switch store.subscriptionLoadState { + case .idle: + PlanIdleView() + case .loading: + PlanLoadingView() + case .noCredentials: + PlanNoCredentialsView() + case .failed: + PlanFailedView(error: store.subscriptionError) + case .loaded: + if let usage { + loadedBody(usage: usage) + } else { + PlanNoCredentialsView() + } + } + } + .task { + // Lazy-trigger fetch the first time Plan is opened. + if store.subscriptionLoadState == .idle { + await store.refreshSubscription() + } + } + } + + @ViewBuilder + private func loadedBody(usage: SubscriptionUsage) -> some View { + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .firstTextBaseline) { + Text(usage.tier.displayName) + .font(.system(size: 13, weight: .semibold)) + .foregroundStyle(Theme.brandAccent) + Spacer() + if let resets = headlineReset(usage: usage) { + Text("Resets \(resets)") + .font(.system(size: 10.5)) + .foregroundStyle(.secondary) + } + } + + VStack(spacing: 8) { + if let p = usage.fiveHourPercent { + UtilizationRow(label: "5-hour window", percent: p, resetsAt: usage.fiveHourResetsAt, projection: projections["five_hour"]) + } + if let p = usage.sevenDayPercent { + UtilizationRow(label: "7-day total", percent: p, resetsAt: usage.sevenDayResetsAt, projection: projections["seven_day"]) + } + if let p = usage.sevenDayOpusPercent { + UtilizationRow(label: "7-day Opus", percent: p, resetsAt: usage.sevenDayOpusResetsAt, projection: projections["seven_day_opus"]) + } + if let p = usage.sevenDaySonnetPercent { + UtilizationRow(label: "7-day Sonnet", percent: p, resetsAt: usage.sevenDaySonnetResetsAt, projection: projections["seven_day_sonnet"]) + } + } + + OptimizeSavingsBadge(payload: store.payload) + } + .task(id: usage.fetchedAt) { + await recomputeProjections(usage: usage) + } + } + + private func recomputeProjections(usage: SubscriptionUsage) async { + var result: [String: WindowProjection] = [:] + let inputs: [(String, Double?, Date?, TimeInterval)] = [ + ("five_hour", usage.fiveHourPercent, usage.fiveHourResetsAt, Self.fiveHourSeconds), + ("seven_day", usage.sevenDayPercent, usage.sevenDayResetsAt, Self.sevenDaySeconds), + ("seven_day_opus", usage.sevenDayOpusPercent, usage.sevenDayOpusResetsAt, Self.sevenDaySeconds), + ("seven_day_sonnet", usage.sevenDaySonnetPercent, usage.sevenDaySonnetResetsAt, Self.sevenDaySeconds), + ] + for (key, percent, resetsAt, windowSeconds) in inputs { + if let projection = await project(key: key, percent: percent, resetsAt: resetsAt, windowSeconds: windowSeconds) { + result[key] = projection + } + } + projections = result + } + + /// Linear extrapolation when window is past the freshness threshold; otherwise falls back to + /// the prior cycle's final percent from the snapshot store. + private func project(key: String, percent: Double?, resetsAt: Date?, windowSeconds: TimeInterval) async -> WindowProjection? { + guard let percent, let resetsAt else { return nil } + let windowStart = resetsAt.addingTimeInterval(-windowSeconds) + let elapsed = Date().timeIntervalSince(windowStart) + let elapsedFraction = elapsed / windowSeconds + + if elapsedFraction > Self.freshWindowThreshold, percent > 0 { + let projectedPercent = percent / elapsedFraction + var hitDate: Date? = nil + if projectedPercent > 100, percent < 100 { + let remainingPercent = 100 - percent + let percentPerSecond = percent / elapsed + if percentPerSecond > 0 { + hitDate = Date().addingTimeInterval(remainingPercent / percentPerSecond) + } + } + return WindowProjection(percent: projectedPercent, willOverflow: projectedPercent > 100, hitsLimitAt: hitDate, source: .linear) + } + + // Window too fresh OR percent exactly zero -- use the prior cycle's final reading. + if let prior = await SubscriptionSnapshotStore.previousWindowFinal(windowKey: key, currentResetsAt: resetsAt) { + return WindowProjection(percent: prior, willOverflow: prior > 100, hitsLimitAt: nil, source: .historicalBaseline) + } + return nil + } + + private func headlineReset(usage: SubscriptionUsage) -> String? { + let candidates = [ + usage.fiveHourResetsAt, + usage.sevenDayResetsAt, + usage.sevenDayOpusResetsAt, + usage.sevenDaySonnetResetsAt, + ].compactMap { $0 } + guard let earliest = candidates.min() else { return nil } + return relativeReset(earliest) + } +} + +// MARK: - Plan empty/loading/failure states + +private struct PlanIdleView: View { + var body: some View { + VStack(spacing: 8) { + Image(systemName: "person.crop.circle.dashed") + .font(.system(size: 22)) + .foregroundStyle(.tertiary) + Text("Loading your plan...") + .font(.system(size: 11.5, weight: .medium)) + .foregroundStyle(.secondary) + Text("macOS may ask permission to read your Claude Code credentials.") + .font(.system(size: 10)) + .foregroundStyle(.tertiary) + .multilineTextAlignment(.center) + .frame(maxWidth: 260) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 16) + } +} + +private struct PlanLoadingView: View { + var body: some View { + VStack(spacing: 8) { + ProgressView().scaleEffect(0.8) + Text("Reading Claude credentials...") + .font(.system(size: 11, weight: .medium)) + .foregroundStyle(.secondary) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 16) + } +} + +private struct PlanNoCredentialsView: View { + @Environment(AppStore.self) private var store + + var body: some View { + VStack(spacing: 8) { + Image(systemName: "key.slash") + .font(.system(size: 20)) + .foregroundStyle(.tertiary) + Text("No Claude subscription connected") + .font(.system(size: 12, weight: .semibold)) + .foregroundStyle(.primary) + Text("Run `claude login` in your terminal, then retry.") + .font(.system(size: 10.5)) + .foregroundStyle(.secondary) + .multilineTextAlignment(.center) + .frame(maxWidth: 260) + Button("Retry") { + Task { await store.refreshSubscription() } + } + .controlSize(.small) + .buttonStyle(.bordered) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 14) + } +} + +private struct PlanFailedView: View { + @Environment(AppStore.self) private var store + let error: String? + + var body: some View { + VStack(spacing: 8) { + Image(systemName: "exclamationmark.triangle") + .font(.system(size: 18)) + .foregroundStyle(Theme.brandAccent) + Text("Couldn't load plan data") + .font(.system(size: 12, weight: .semibold)) + .foregroundStyle(.primary) + if let error { + Text(error) + .font(.system(size: 10)) + .foregroundStyle(.tertiary) + .multilineTextAlignment(.center) + .frame(maxWidth: 280) + .lineLimit(3) + } + Button("Retry") { + Task { await store.refreshSubscription() } + } + .controlSize(.small) + .buttonStyle(.bordered) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 14) + } +} + +private struct WindowProjection { + enum Source { case linear, historicalBaseline } + let percent: Double + let willOverflow: Bool + let hitsLimitAt: Date? + let source: Source +} + +private struct UtilizationRow: View { + let label: String + /// API returns utilization as 0..100 (a percentage value, not a fraction). + let percent: Double + let resetsAt: Date? + let projection: WindowProjection? + + var body: some View { + VStack(spacing: 3) { + HStack(alignment: .firstTextBaseline) { + Text(label) + .font(.system(size: 11, weight: .medium)) + .foregroundStyle(.secondary) + Spacer() + Text(String(format: "%.0f%%", clampedPercent)) + .font(.codeMono(size: 11, weight: .semibold)) + .foregroundStyle(barColor) + .monospacedDigit() + } + UtilizationBar( + fraction: clampedPercent / 100, + color: barColor, + markerFraction: projection.map { min(max($0.percent, 0), 100) / 100 } + ) + .frame(height: 6) + if let projection { + ProjectionCaption(projection: projection) + } + } + } + + private var clampedPercent: Double { min(max(percent, 0), 100) } + + /// Single-color brand palette decision (see session notes): the number is the signal, not + /// the color. Keeping this as a computed property so a future threshold-based palette + /// reintroduction stays scoped to one place. + private var barColor: Color { Theme.brandAccent } +} + +private struct ProjectionCaption: View { + let projection: WindowProjection + + var body: some View { + HStack(spacing: 3) { + if projection.willOverflow { + Image(systemName: "exclamationmark.triangle.fill") + .font(.system(size: 8, weight: .bold)) + .foregroundStyle(Theme.brandAccent) + } else { + Image(systemName: "arrow.up.right") + .font(.system(size: 8, weight: .bold)) + .foregroundStyle(.tertiary) + } + Text(captionText) + .font(.system(size: 9.5, weight: .medium)) + .foregroundStyle(projection.willOverflow + ? AnyShapeStyle(Theme.brandAccent) + : AnyShapeStyle(.tertiary)) + Spacer() + } + } + + private var captionText: String { + let projected = String(format: "%.0f%%", projection.percent) + switch projection.source { + case .linear: + if projection.willOverflow, let hit = projection.hitsLimitAt { + return "On pace: \(projected) at reset · hits 100% \(relativeReset(hit))" + } + return "On pace: \(projected) at reset" + case .historicalBaseline: + return "Based on last cycle: \(projected)" + } + } +} + +private struct UtilizationBar: View { + /// 0..1 fraction of the bar to fill. + let fraction: Double + let color: Color + /// Optional 0..1 marker position for projected utilization at reset. + let markerFraction: Double? + + var body: some View { + GeometryReader { geo in + ZStack(alignment: .leading) { + RoundedRectangle(cornerRadius: 3).fill(Color.secondary.opacity(0.12)) + RoundedRectangle(cornerRadius: 3) + .fill(color) + .frame(width: max(0, geo.size.width * CGFloat(fraction))) + if let m = markerFraction { + Rectangle() + .fill(Color.primary.opacity(0.55)) + .frame(width: 1.5) + .offset(x: max(0, geo.size.width * CGFloat(m)) - 0.75) + } + } + } + } +} + +private func relativeReset(_ date: Date) -> String { + let interval = date.timeIntervalSinceNow + if interval <= 0 { return "now" } + let hours = interval / 3600 + if hours < 1 { + let minutes = Int(ceil(interval / 60)) + return "in \(minutes)m" + } + if hours < 24 { return "in \(Int(ceil(hours)))h" } + let days = Int(ceil(hours / 24)) + return "in \(days)d" +} + diff --git a/mac/Sources/CodeBurnMenubar/Views/HeroSection.swift b/mac/Sources/CodeBurnMenubar/Views/HeroSection.swift new file mode 100644 index 0000000..ca30cee --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/HeroSection.swift @@ -0,0 +1,55 @@ +import SwiftUI + +struct HeroSection: View { + @Environment(AppStore.self) private var store + + var body: some View { + VStack(alignment: .leading, spacing: 8) { + SectionCaption(text: caption) + + HStack(alignment: .firstTextBaseline) { + Text(store.payload.current.cost.asCurrency()) + .font(.system(size: 32, weight: .semibold, design: .rounded)) + .monospacedDigit() + .tracking(-1) + .foregroundStyle( + LinearGradient( + colors: [Theme.brandAccent, Theme.brandEmberDeep], + startPoint: .top, + endPoint: .bottom + ) + ) + + Spacer() + + VStack(alignment: .trailing, spacing: 2) { + Text("\(store.payload.current.calls.asThousandsSeparated()) calls") + .font(.system(size: 11)) + .monospacedDigit() + .foregroundStyle(.secondary) + Text("\(store.payload.current.sessions) sessions") + .font(.system(size: 10.5)) + .monospacedDigit() + .foregroundStyle(.tertiary) + } + } + } + .padding(.horizontal, 14) + .padding(.top, 10) + .padding(.bottom, 12) + } + + private var caption: String { + let label = store.payload.current.label.isEmpty ? store.selectedPeriod.rawValue : store.payload.current.label + if store.selectedPeriod == .today { + return "\(label) · \(todayDate)" + } + return label + } + + private var todayDate: String { + let formatter = DateFormatter() + formatter.dateFormat = "EEE MMM d" + return formatter.string(from: Date()) + } +} diff --git a/mac/Sources/CodeBurnMenubar/Views/MenuBarContent.swift b/mac/Sources/CodeBurnMenubar/Views/MenuBarContent.swift new file mode 100644 index 0000000..b6c550d --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/MenuBarContent.swift @@ -0,0 +1,401 @@ +import AppKit +import SwiftUI + +/// Popover root. Assembles all sections matching the HTML design spec. +struct MenuBarContent: View { + @Environment(AppStore.self) private var store + + var body: some View { + VStack(spacing: 0) { + Header() + + Divider() + + AgentTabStrip() + + Divider() + + ZStack { + ScrollView(.vertical, showsIndicators: false) { + VStack(spacing: 0) { + HeroSection() + Divider().opacity(0.5) + PeriodSegmentedControl() + Divider().opacity(0.5) + if isFilteredEmpty { + EmptyProviderState(provider: store.selectedProvider, period: store.selectedPeriod) + } else { + HeatmapSection() + .padding(.horizontal, 14) + .padding(.top, 10) + .padding(.bottom, 10) + .zIndex(10) + Divider().opacity(0.5) + ActivitySection() + Divider().opacity(0.5) + ModelsSection() + Divider().opacity(0.5) + FindingsSection() + } + } + } + + if store.isLoading { + BurnLoadingOverlay(periodLabel: store.selectedPeriod.rawValue) + .transition(.opacity) + } + } + .frame(height: 520) + .animation(.easeInOut(duration: 0.2), value: store.isLoading) + + Divider() + + FooterBar() + + StarBanner() + } + } + + /// True when a specific provider tab is selected and that provider has no spend in the + /// currently selected period. The .all tab is exempt -- it always shows aggregated data. + private var isFilteredEmpty: Bool { + guard store.selectedProvider != .all else { return false } + return store.payload.current.cost <= 0 && store.payload.current.calls == 0 + } + +} + +private struct EmptyProviderState: View { + let provider: ProviderFilter + let period: Period + + var body: some View { + VStack(spacing: 10) { + Image(systemName: "tray") + .font(.system(size: 26)) + .foregroundStyle(.tertiary) + Text("No \(provider.rawValue) data for \(periodPhrase)") + .font(.system(size: 12, weight: .medium)) + .foregroundStyle(.secondary) + .multilineTextAlignment(.center) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 60) + } + + private var periodPhrase: String { + switch period { + case .today: "today" + case .sevenDays: "the last 7 days" + case .thirtyDays: "the last 30 days" + case .month: "this month" + case .all: "all time" + } + } +} + +/// Translucent overlay that blurs whatever's behind it (the previous tab/period content) +/// and centers an animated burning flame -- the brand mark filling up bottom-to-top in +/// yellow→orange→red, looping. +private struct BurnLoadingOverlay: View { + let periodLabel: String + @State private var fillProgress: CGFloat = 0 + @State private var glowing: Bool = false + + private let flameSize: CGFloat = 64 + + var body: some View { + ZStack { + // Blur backdrop -- ultraThinMaterial uses live blur of underlying content. + Rectangle() + .fill(.ultraThinMaterial) + + VStack(spacing: 14) { + BurnFlame(size: flameSize, fillProgress: fillProgress, glowing: glowing) + Text("Loading \(periodLabel)…") + .font(.system(size: 11.5, weight: .medium)) + .foregroundStyle(.secondary) + } + } + .onAppear { + withAnimation(.easeInOut(duration: 1.4).repeatForever(autoreverses: true)) { + fillProgress = 1.0 + } + withAnimation(.easeInOut(duration: 0.9).repeatForever(autoreverses: true)) { + glowing = true + } + } + } +} + +private struct BurnFlame: View { + let size: CGFloat + let fillProgress: CGFloat + let glowing: Bool + + var body: some View { + ZStack { + // Soft outer glow that pulses, matching the brand terracotta palette. + Image(systemName: "flame.fill") + .font(.system(size: size, weight: .regular)) + .foregroundStyle(Theme.brandEmberGlow.opacity(glowing ? 0.55 : 0.20)) + .blur(radius: glowing ? 14 : 6) + + // Empty (cool) flame as base + Image(systemName: "flame") + .font(.system(size: size, weight: .regular)) + .foregroundStyle(Theme.brandAccent.opacity(0.25)) + + // Burning gradient (brand orange) masked by an animated bottom-up rectangle + Image(systemName: "flame.fill") + .font(.system(size: size, weight: .regular)) + .foregroundStyle( + LinearGradient( + colors: [ + Theme.brandEmberGlow, + Theme.brandAccentDark, + Theme.brandAccent, + Theme.brandEmberDeep + ], + startPoint: .bottom, + endPoint: .top + ) + ) + .mask( + GeometryReader { geo in + Rectangle() + .frame(height: geo.size.height * fillProgress) + .frame(maxHeight: .infinity, alignment: .bottom) + } + ) + } + .frame(width: size, height: size) + } +} + +private struct Header: View { + var body: some View { + VStack(alignment: .leading, spacing: 1) { + ( + Text("Code").foregroundStyle(.primary) + + Text("Burn").foregroundStyle(Theme.brandAccent) + ) + .font(.system(size: 13, weight: .semibold)) + .tracking(-0.15) + Text("AI Coding Cost Tracker") + .font(.system(size: 10.5)) + .foregroundStyle(.secondary) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, 14) + .padding(.top, 10) + .padding(.bottom, 8) + } +} + +struct FlameMark: View { + var body: some View { + ZStack { + RoundedRectangle(cornerRadius: 5) + .fill( + LinearGradient( + colors: [Theme.brandAccentDark, Theme.brandEmberDeep], + startPoint: .topLeading, + endPoint: .bottomTrailing + ) + ) + .shadow(color: .black.opacity(0.2), radius: 1, y: 0.5) + Image(systemName: "flame.fill") + .font(.system(size: 12, weight: .semibold)) + .foregroundStyle(.white) + } + } +} + +private let starBannerGitHubURL = URL(string: "https://github.com/AgentSeal/codeburn")! + +/// Shown at the very bottom on first launch. A small terracotta strip nudges users to star the +/// repo; clicking opens GitHub, clicking the close icon hides it forever (persisted to +/// UserDefaults so it never returns across launches). +struct StarBanner: View { + @AppStorage("codeburn.starBannerDismissed") private var dismissed: Bool = false + + var body: some View { + if !dismissed { + HStack(spacing: 8) { + Image(systemName: "star.fill") + .font(.system(size: 10, weight: .semibold)) + .foregroundStyle(Theme.brandAccent) + + Button { + NSWorkspace.shared.open(starBannerGitHubURL) + } label: { + HStack(spacing: 4) { + Text("Enjoying CodeBurn?") + .foregroundStyle(.primary) + Text("Star us on GitHub") + .foregroundStyle(Theme.brandAccent) + .underline(true, pattern: .solid) + } + .font(.system(size: 10.5, weight: .medium)) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + + Spacer() + + Button { + dismissed = true + } label: { + Image(systemName: "xmark") + .font(.system(size: 9, weight: .semibold)) + .foregroundStyle(.secondary) + .padding(4) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .help("Hide this banner") + } + .padding(.horizontal, 12) + .padding(.vertical, 6) + .background(Theme.brandAccent.opacity(0.08)) + .overlay(alignment: .top) { + Rectangle() + .fill(Color.secondary.opacity(0.18)) + .frame(height: 0.5) + } + } + } +} + +struct FooterBar: View { + @Environment(AppStore.self) private var store + + var body: some View { + HStack(spacing: 6) { + Menu { + ForEach(SupportedCurrency.allCases) { currency in + Button { + applyCurrency(code: currency.rawValue) + } label: { + if currency.rawValue == store.currency { + Label("\(currency.displayName) (\(currency.rawValue))", systemImage: "checkmark") + } else { + Text("\(currency.displayName) (\(currency.rawValue))") + } + } + } + } label: { + Label(store.currency, systemImage: "dollarsign.circle") + .font(.system(size: 11, weight: .medium)) + .labelStyle(.titleAndIcon) + } + .menuStyle(.button) + .menuIndicator(.hidden) + .buttonStyle(.bordered) + .controlSize(.small) + .fixedSize() + + Button { + Task { await store.refresh(includeOptimize: true) } + } label: { + Image(systemName: store.isLoading ? "arrow.triangle.2.circlepath" : "arrow.clockwise") + .font(.system(size: 11, weight: .medium)) + } + .buttonStyle(.bordered) + .controlSize(.small) + .disabled(store.isLoading) + + Menu { + Button("CSV (folder)") { runExport(format: .csv) } + Button("JSON") { runExport(format: .json) } + } label: { + Label("Export", systemImage: "square.and.arrow.down") + .font(.system(size: 11, weight: .medium)) + .labelStyle(.titleAndIcon) + } + .menuStyle(.button) + .menuIndicator(.hidden) + .buttonStyle(.bordered) + .controlSize(.small) + .fixedSize() + + Spacer() + + Button { openReport() } label: { + Label("Open Full Report", systemImage: "terminal") + .font(.system(size: 11, weight: .semibold)) + .labelStyle(.titleAndIcon) + } + .buttonStyle(.borderedProminent) + .controlSize(.small) + .tint(Theme.brandAccent) + } + .padding(.horizontal, 12) + .padding(.vertical, 8) + } + + private func openReport() { + TerminalLauncher.open(subcommand: ["report"]) + } + + private enum ExportFormat { + case csv, json + var cliName: String { self == .csv ? "csv" : "json" } + var suffix: String { self == .csv ? "" : ".json" } + } + + /// Runs `codeburn export` directly into ~/Downloads and reveals the result in Finder. CSV + /// produces a folder of clean one-table-per-file CSVs; JSON produces a single structured + /// file. The CLI is spawned with argv (no shell interpretation), so the output path cannot + /// be abused to inject shell commands even if a pathological value slips through. + private func runExport(format: ExportFormat) { + Task { + let downloads = (NSHomeDirectory() as NSString).appendingPathComponent("Downloads") + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + let base = "codeburn-\(formatter.string(from: Date()))" + let outputPath = (downloads as NSString).appendingPathComponent(base + format.suffix) + + let process = CodeburnCLI.makeProcess(subcommand: [ + "export", "-f", format.cliName, "-o", outputPath + ]) + + do { + try process.run() + process.waitUntilExit() + if process.terminationStatus == 0 { + NSWorkspace.shared.activateFileViewerSelecting([URL(fileURLWithPath: outputPath)]) + } else { + NSLog("CodeBurn: \(format.cliName.uppercased()) export exited with status \(process.terminationStatus)") + } + } catch { + NSLog("CodeBurn: \(format.cliName.uppercased()) export failed: \(error)") + } + } + } + + /// Instant-feeling currency switch. Updates the symbol and any cached FX rate on the main + /// thread right away so the UI redraws the next frame, then fetches a fresh rate in the + /// background. CLI config is persisted so other codeburn commands stay in sync. + private func applyCurrency(code: String) { + store.currency = code + let symbol = CurrencyState.symbolForCode(code) + + Task { + let cached = await FXRateCache.shared.cachedRate(for: code) + await MainActor.run { + CurrencyState.shared.apply(code: code, rate: cached, symbol: symbol) + } + + let fresh = await FXRateCache.shared.rate(for: code) + if let fresh, fresh != cached { + await MainActor.run { + CurrencyState.shared.apply(code: code, rate: fresh, symbol: symbol) + } + } + } + + CLICurrencyConfig.persist(code: code) + } +} diff --git a/mac/Sources/CodeBurnMenubar/Views/ModelsSection.swift b/mac/Sources/CodeBurnMenubar/Views/ModelsSection.swift new file mode 100644 index 0000000..cac5457 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/ModelsSection.swift @@ -0,0 +1,97 @@ +import SwiftUI + +struct ModelsSection: View { + @Environment(AppStore.self) private var store + @State private var isExpanded: Bool = true + + var body: some View { + CollapsibleSection( + caption: "Models", + isExpanded: $isExpanded, + trailing: { + HStack(spacing: 8) { + Text("Cost").frame(minWidth: 54, alignment: .trailing) + Text("Calls").frame(minWidth: 52, alignment: .trailing) + } + .font(.system(size: 10, weight: .medium)) + .foregroundStyle(.tertiary) + .tracking(-0.05) + } + ) { + VStack(alignment: .leading, spacing: 7) { + let maxCost = store.payload.current.topModels.map(\.cost).max() ?? 1 + ForEach(store.payload.current.topModels, id: \.name) { model in + ModelRow(model: model, maxCost: maxCost) + } + + TokensLine() + .padding(.top, 5) + } + } + } +} + +private struct ModelRow: View { + let model: ModelEntry + let maxCost: Double + + var body: some View { + HStack(spacing: 8) { + FixedBar(fraction: model.cost / maxCost) + .frame(width: 56, height: 6) + + Text(model.name) + .font(.system(size: 12.5, weight: .medium)) + .frame(maxWidth: .infinity, alignment: .leading) + + Text(model.cost.asCompactCurrency()) + .font(.codeMono(size: 12, weight: .medium)) + .tracking(-0.2) + .frame(minWidth: 54, alignment: .trailing) + + Text("\(model.calls)") + .font(.system(size: 11)) + .monospacedDigit() + .foregroundStyle(.secondary) + .frame(minWidth: 52, alignment: .trailing) + } + .padding(.horizontal, 2) + .padding(.vertical, 1) + } +} + +private struct TokensLine: View { + @Environment(AppStore.self) private var store + + var body: some View { + let t = store.payload.current + let cacheHit = String(format: "%.0f", t.cacheHitPercent) + + HStack(spacing: 4) { + Text("Tokens") + .foregroundStyle(.tertiary) + Text(formatTokens(t.inputTokens) + " in") + .foregroundStyle(.secondary) + Text("·") + .foregroundStyle(.tertiary) + Text(formatTokens(t.outputTokens) + " out") + .foregroundStyle(.secondary) + Text("·") + .foregroundStyle(.tertiary) + Text(cacheHit + "% cache hit") + .foregroundStyle(.secondary) + Spacer() + } + .font(.system(size: 10.5)) + .monospacedDigit() + } + + private func formatTokens(_ n: Int) -> String { + if n >= 1_000_000 { + return String(format: "%.1fM", Double(n) / 1_000_000) + } else if n >= 1_000 { + return String(format: "%.1fK", Double(n) / 1_000) + } + return "\(n)" + } +} diff --git a/mac/Sources/CodeBurnMenubar/Views/PeriodSegmentedControl.swift b/mac/Sources/CodeBurnMenubar/Views/PeriodSegmentedControl.swift new file mode 100644 index 0000000..a636932 --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/PeriodSegmentedControl.swift @@ -0,0 +1,36 @@ +import SwiftUI + +struct PeriodSegmentedControl: View { + @Environment(AppStore.self) private var store + + var body: some View { + HStack(spacing: 1) { + ForEach(Period.allCases) { period in + Button { + Task { await store.switchTo(period: period) } + } label: { + Text(period.rawValue) + .font(.system(size: 11, weight: .medium)) + .foregroundStyle(store.selectedPeriod == period ? AnyShapeStyle(.primary) : AnyShapeStyle(.secondary)) + .frame(maxWidth: .infinity) + .padding(.vertical, 4) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .background( + RoundedRectangle(cornerRadius: 5) + .fill(store.selectedPeriod == period ? Color(NSColor.windowBackgroundColor).opacity(0.85) : .clear) + .shadow(color: .black.opacity(store.selectedPeriod == period ? 0.06 : 0), radius: 1, y: 0.5) + ) + } + } + .padding(2) + .background( + RoundedRectangle(cornerRadius: 7) + .fill(Color.secondary.opacity(0.08)) + ) + .padding(.horizontal, 12) + .padding(.top, 6) + .padding(.bottom, 10) + } +} diff --git a/mac/Sources/CodeBurnMenubar/Views/SectionCaption.swift b/mac/Sources/CodeBurnMenubar/Views/SectionCaption.swift new file mode 100644 index 0000000..1c4db4c --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/SectionCaption.swift @@ -0,0 +1,85 @@ +import SwiftUI + +struct SectionCaption: View { + let text: String + + var body: some View { + HStack(spacing: 5) { + Circle() + .fill(Theme.brandAccent.opacity(0.7)) + .frame(width: 3, height: 3) + Text(text) + .font(.system(size: 11.5, weight: .medium)) + .foregroundStyle(.secondary) + .tracking(-0.1) + } + } +} + +/// Collapsible section shell with a clickable caption, optional inline trailing +/// view (e.g. column headers), and a chevron. +struct CollapsibleSection: View { + let caption: String + @Binding var isExpanded: Bool + let trailing: Trailing + let content: Content + + init( + caption: String, + isExpanded: Binding, + @ViewBuilder trailing: () -> Trailing, + @ViewBuilder content: () -> Content + ) { + self.caption = caption + self._isExpanded = isExpanded + self.trailing = trailing() + self.content = content() + } + + var body: some View { + VStack(alignment: .leading, spacing: 7) { + Button { + withAnimation(.easeInOut(duration: 0.18)) { + isExpanded.toggle() + } + } label: { + HStack(spacing: 8) { + HStack(spacing: 5) { + Circle() + .fill(Theme.brandAccent.opacity(0.7)) + .frame(width: 3, height: 3) + Text(caption) + .font(.system(size: 11.5, weight: .medium)) + .tracking(-0.1) + } + Spacer() + trailing + Image(systemName: "chevron.right") + .font(.system(size: 9, weight: .semibold)) + .rotationEffect(.degrees(isExpanded ? 90 : 0)) + .opacity(0.55) + } + .foregroundStyle(.secondary) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + + if isExpanded { + content + .transition(.opacity) + } + } + .padding(.horizontal, 14) + .padding(.vertical, 11) + } +} + +extension CollapsibleSection where Trailing == EmptyView { + init( + caption: String, + isExpanded: Binding, + @ViewBuilder content: () -> Content + ) { + self.init(caption: caption, isExpanded: isExpanded, trailing: { EmptyView() }, content: content) + } +} diff --git a/mac/Sources/CodeBurnMenubar/Views/SparklineView.swift b/mac/Sources/CodeBurnMenubar/Views/SparklineView.swift new file mode 100644 index 0000000..db7d7cc --- /dev/null +++ b/mac/Sources/CodeBurnMenubar/Views/SparklineView.swift @@ -0,0 +1,99 @@ +import SwiftUI + +struct SparklineView: View { + let points: [Double] + + var body: some View { + GeometryReader { geo in + let cgPoints = makePoints(in: geo.size) + let smooth = smoothPath(cgPoints) + + ZStack { + // Gradient fill under the curve + let fill = closedPath(smooth, width: geo.size.width, height: geo.size.height) + fill.fill( + LinearGradient( + colors: [Theme.brandAccent.opacity(0.25), .clear], + startPoint: .top, + endPoint: .bottom + ) + ) + + // Smooth accent stroke + smooth.stroke( + Theme.brandAccent.opacity(0.85), + style: StrokeStyle(lineWidth: 1.6, lineCap: .round, lineJoin: .round) + ) + + // Highlighted current-day point + if let last = cgPoints.last { + Circle() + .fill(Theme.brandAccent) + .frame(width: 6, height: 6) + .overlay( + Circle() + .stroke(Color(NSColor.windowBackgroundColor).opacity(0.9), lineWidth: 1.3) + ) + .position(last) + } + } + } + } + + // MARK: - Geometry + + private func makePoints(in size: CGSize) -> [CGPoint] { + guard !points.isEmpty else { return [] } + let w = size.width + let h = size.height + let maxV = points.max() ?? 1 + let minV = points.min() ?? 0 + let range = max(maxV - minV, 1) + let count = max(points.count - 1, 1) + let topPad: CGFloat = 5 + let bottomPad: CGFloat = 5 + let usable = max(h - topPad - bottomPad, 1) + + return points.enumerated().map { idx, v in + CGPoint( + x: w * CGFloat(idx) / CGFloat(count), + y: h - bottomPad - usable * CGFloat(v - minV) / CGFloat(range) + ) + } + } + + /// Catmull-Rom → cubic bezier. Standard smooth interpolation, no overshoot. + private func smoothPath(_ pts: [CGPoint]) -> Path { + var path = Path() + guard pts.count >= 2 else { return path } + path.move(to: pts[0]) + + let tension: CGFloat = 0.5 + for i in 0..<(pts.count - 1) { + let p0 = i > 0 ? pts[i - 1] : pts[i] + let p1 = pts[i] + let p2 = pts[i + 1] + let p3 = i + 2 < pts.count ? pts[i + 2] : p2 + + let cp1 = CGPoint( + x: p1.x + (p2.x - p0.x) * tension / 3, + y: p1.y + (p2.y - p0.y) * tension / 3 + ) + let cp2 = CGPoint( + x: p2.x - (p3.x - p1.x) * tension / 3, + y: p2.y - (p3.y - p1.y) * tension / 3 + ) + path.addCurve(to: p2, control1: cp1, control2: cp2) + } + return path + } + + /// Close the path along the bottom to form a fill region. + private func closedPath(_ line: Path, width: CGFloat, height: CGFloat) -> Path { + var p = line + p.addLine(to: CGPoint(x: width, y: height)) + p.addLine(to: CGPoint(x: 0, y: height)) + p.closeSubpath() + return p + } +} diff --git a/mac/Tests/CodeBurnMenubarTests/CapacityEstimatorTests.swift b/mac/Tests/CodeBurnMenubarTests/CapacityEstimatorTests.swift new file mode 100644 index 0000000..b23ba5f --- /dev/null +++ b/mac/Tests/CodeBurnMenubarTests/CapacityEstimatorTests.swift @@ -0,0 +1,158 @@ +import Foundation +import Testing +@testable import CodeBurnMenubar + +private let now = Date(timeIntervalSince1970: 1_734_000_000) + +private func snap(_ percent: Double, _ tokens: Double, ageDays: Double = 0) -> CapacitySnapshot { + CapacitySnapshot( + percent: percent, + effectiveTokens: tokens, + capturedAt: now.addingTimeInterval(-ageDays * 86400) + ) +} + +@Suite("CapacityEstimator -- gating") +struct CapacityEstimatorGatingTests { + @Test("returns nil with no snapshots") + func emptyReturnsNil() { + #expect(CapacityEstimator.estimate([], asOf: now) == nil) + } + + @Test("returns nil with fewer than 5 snapshots") + func tooFewReturnsNil() { + let snaps = (1...4).map { snap(Double($0 * 10), Double($0) * 100_000) } + #expect(CapacityEstimator.estimate(snaps, asOf: now) == nil) + } + + @Test("returns nil when percent range is below 15 points") + func tooNarrowReturnsNil() { + let snaps = [ + snap(40, 4_000_000), + snap(42, 4_200_000), + snap(44, 4_400_000), + snap(46, 4_600_000), + snap(48, 4_800_000), + snap(50, 5_000_000), + ] + #expect(CapacityEstimator.estimate(snaps, asOf: now) == nil) + } +} + +@Suite("CapacityEstimator -- recovery") +struct CapacityEstimatorRecoveryTests { + @Test("recovers capacity from 10 noise-free snapshots within 0.5%") + func recoverFromCleanData() { + let trueCapacity: Double = 10_000_000 + let percents = [5.0, 12, 20, 28, 35, 47, 55, 68, 80, 92] + let snaps = percents.map { p in snap(p, p / 100 * trueCapacity) } + let est = CapacityEstimator.estimate(snaps, asOf: now) + #expect(est != nil) + #expect(est!.capacity > trueCapacity * 0.995) + #expect(est!.capacity < trueCapacity * 1.005) + // 10 perfect samples is below the solid sample threshold (15) but easily medium. + #expect(est!.confidence == .medium || est!.confidence == .solid) + } + + @Test("recovers capacity within 5% from 30 noisy snapshots") + func recoverFromNoisyData() { + let trueCapacity: Double = 8_000_000 + var rng = LinearCongruentialGenerator(seed: 42) + let snaps: [CapacitySnapshot] = (0..<30).map { i in + let p = 5.0 + Double(i) * 3.0 // 5..92, spanning enough + let noise = (rng.nextDouble() - 0.5) * 0.10 // ±5% + let tokens = (p / 100) * trueCapacity * (1 + noise) + return snap(p, tokens) + } + let est = CapacityEstimator.estimate(snaps, asOf: now) + #expect(est != nil) + let ratio = est!.capacity / trueCapacity + #expect(ratio > 0.95 && ratio < 1.05) + #expect(est!.confidence == .solid || est!.confidence == .medium) + } +} + +@Suite("CapacityEstimator -- confidence tiers") +struct CapacityEstimatorConfidenceTests { + @Test("six clean snapshots span sufficient range -> at least medium") + func sixCleanSnapshotsMedium() { + let trueCapacity: Double = 5_000_000 + let percents = [5.0, 18, 32, 51, 70, 88] + let snaps = percents.map { p in snap(p, p / 100 * trueCapacity) } + let est = CapacityEstimator.estimate(snaps, asOf: now) + #expect(est != nil) + #expect(est!.confidence == .medium || est!.confidence == .solid) + } + + @Test("noisy small-sample data falls to low confidence") + func noisySmallSampleLow() { + let trueCapacity: Double = 5_000_000 + var rng = LinearCongruentialGenerator(seed: 7) + let percents = [5.0, 22, 40, 60, 80, 95] + let snaps: [CapacitySnapshot] = percents.map { p in + let noise = (rng.nextDouble() - 0.5) * 1.6 // ±80% noise -> drops R^2 below medium gate + return snap(p, p / 100 * trueCapacity * (1 + noise)) + } + let est = CapacityEstimator.estimate(snaps, asOf: now) + #expect(est != nil) + #expect(est!.confidence == .low) + } +} + +@Suite("CapacityEstimator -- recency weighting") +struct CapacityEstimatorRecencyTests { + @Test("recent snapshots dominate over old ones with different capacity") + func recencyShiftsEstimate() { + // Old data: capacity = 5M (45 days ago) + // New data: capacity = 10M (today) + // With 30-day half-life, recent data should win. + let oldSnaps = (0..<10).map { i -> CapacitySnapshot in + let p = 10.0 + Double(i) * 8 + return snap(p, p / 100 * 5_000_000, ageDays: 45) + } + let newSnaps = (0..<10).map { i -> CapacitySnapshot in + let p = 10.0 + Double(i) * 8 + return snap(p, p / 100 * 10_000_000, ageDays: 1) + } + let est = CapacityEstimator.estimate(oldSnaps + newSnaps, asOf: now) + #expect(est != nil) + // Recent capacity is 10M; estimate should be closer to 10M than 5M. + #expect(est!.capacity > 7_500_000) + } +} + +@Suite("CapacityEstimator -- non-linearity") +struct CapacityEstimatorNonLinearityTests { + @Test("flags non-linearity when residuals show systematic sign pattern") + func detectsKneePattern() { + // Data follows a knee: linear up to 60%, then flatter (Anthropic capping). + let snaps: [CapacitySnapshot] = (0..<20).map { i in + let p = 5.0 + Double(i) * 5 + let tokens: Double = p < 60 ? p / 100 * 8_000_000 : 0.6 * 8_000_000 + (p - 60) / 100 * 4_000_000 + return snap(p, tokens) + } + let est = CapacityEstimator.estimate(snaps, asOf: now) + #expect(est != nil) + #expect(est!.nonLinearityWarning == true) + } + + @Test("does not flag clean linear data") + func cleanLinearNoFlag() { + let trueCapacity: Double = 6_000_000 + let percents = stride(from: 5.0, to: 95.0, by: 5.0).map { $0 } + let snaps = percents.map { p in snap(p, p / 100 * trueCapacity) } + let est = CapacityEstimator.estimate(snaps, asOf: now) + #expect(est != nil) + #expect(est!.nonLinearityWarning == false) + } +} + +// Lightweight deterministic RNG for reproducible noise in tests. +struct LinearCongruentialGenerator { + private var state: UInt64 + init(seed: UInt64) { self.state = seed } + mutating func nextDouble() -> Double { + state = state &* 6364136223846793005 &+ 1442695040888963407 + return Double(state >> 11) / Double(1 << 53) + } +} diff --git a/src/cli.ts b/src/cli.ts index 342a9f2..ac87127 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,13 +1,17 @@ import { Command } from 'commander' +import { installMenubarApp } from './menubar-installer.js' import { exportCsv, exportJson, type PeriodExport } from './export.js' import { loadPricing } from './models.js' import { parseAllSessions, filterProjectsByName } from './parser.js' import { convertCost } from './currency.js' import { renderStatusBar } from './format.js' -import { installMenubar, renderMenubarFormat, type PeriodData, type ProviderCost, uninstallMenubar } from './menubar.js' +import { type PeriodData, type ProviderCost } from './menubar-json.js' +import { buildMenubarPayload } from './menubar-json.js' +import { addNewDays, getDaysInRange, loadDailyCache, saveDailyCache, withDailyCacheLock } from './daily-cache.js' +import { aggregateProjectsIntoDays, buildPeriodDataFromDays } from './day-aggregator.js' import { CATEGORY_LABELS, type DateRange, type ProjectSummary, type TaskCategory } from './types.js' import { renderDashboard } from './dashboard.js' -import { runOptimize } from './optimize.js' +import { runOptimize, scanAndDetect } from './optimize.js' import { getAllProviders } from './providers/index.js' import { readConfig, saveConfig, getConfigFilePath } from './config.js' import { createRequire } from 'node:module' @@ -16,6 +20,13 @@ const require = createRequire(import.meta.url) const { version } = require('../package.json') import { loadCurrency, getCurrency, isValidCurrencyCode } from './currency.js' +const MS_PER_DAY = 24 * 60 * 60 * 1000 +const BACKFILL_DAYS = 365 + +function toDateString(date: Date): string { + return date.toISOString().slice(0, 10) +} + function getDateRange(period: string): { range: DateRange; label: string } { const now = new Date() const end = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59, 999) @@ -43,7 +54,11 @@ function getDateRange(period: string): { range: DateRange; label: string } { return { range: { start, end }, label: 'Last 30 Days' } } case 'all': { - return { range: { start: new Date(0), end }, label: 'All Time' } + // Cap "All Time" to the last 6 months. Older data is rarely actionable for a cost + // tracker and keeps the parse path bounded so providers like Codex/Cursor with sparse + // data still load in seconds. + const start = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()) + return { range: { start, end }, label: 'Last 6 months' } } default: { const start = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 7) @@ -98,8 +113,10 @@ function buildJsonReport(projects: ProjectSummary[], period: string, periodKey: const totalOutput = sessions.reduce((s, sess) => s + sess.totalOutputTokens, 0) const totalCacheRead = sessions.reduce((s, sess) => s + sess.totalCacheReadTokens, 0) const totalCacheWrite = sessions.reduce((s, sess) => s + sess.totalCacheWriteTokens, 0) - const allInput = totalInput + totalCacheRead + totalCacheWrite - const cacheHitPercent = allInput > 0 ? Math.round((totalCacheRead / allInput) * 1000) / 10 : 0 + // Match src/menubar-json.ts:cacheHitPercent: reads over reads+fresh-input. cache_write + // counts tokens being stored, not served, so it doesn't belong in the denominator. + const cacheHitDenom = totalInput + totalCacheRead + const cacheHitPercent = cacheHitDenom > 0 ? Math.round((totalCacheRead / cacheHitDenom) * 1000) / 10 : 0 const dailyMap: Record = {} for (const sess of sessions) { @@ -262,6 +279,7 @@ function buildPeriodData(label: string, projects: ProjectSummary[]): PeriodData label, cost: projects.reduce((s, p) => s + p.totalCostUSD, 0), calls: projects.reduce((s, p) => s + p.totalApiCalls, 0), + sessions: projects.reduce((s, p) => s + p.sessions.length, 0), inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens, categories: Object.entries(catTotals) .sort(([, a], [, b]) => b.cost - a.cost) @@ -275,27 +293,148 @@ function buildPeriodData(label: string, projects: ProjectSummary[]): PeriodData program .command('status') .description('Compact status output (today + week + month)') - .option('--format ', 'Output format: terminal, menubar, json', 'terminal') + .option('--format ', 'Output format: terminal, menubar-json, json', 'terminal') .option('--provider ', 'Filter by provider: all, claude, codex, cursor', 'all') .option('--project ', 'Show only projects matching name (repeatable)', collect, []) .option('--exclude ', 'Exclude projects matching name (repeatable)', collect, []) + .option('--period ', 'Primary period for menubar-json: today, week, 30days, month, all', 'today') + .option('--no-optimize', 'Skip optimize findings (menubar-json only, faster)') .action(async (opts) => { await loadPricing() const pf = opts.provider const fp = (p: ProjectSummary[]) => filterProjectsByName(p, opts.project, opts.exclude) - if (opts.format === 'menubar') { - const todayRange = getDateRange('today').range - const todayData = buildPeriodData('Today', fp(await parseAllSessions(todayRange, pf))) - const weekData = buildPeriodData('7 Days', fp(await parseAllSessions(getDateRange('week').range, pf))) - const thirtyDayData = buildPeriodData('30 Days', fp(await parseAllSessions(getDateRange('30days').range, pf))) - const monthData = buildPeriodData('Month', fp(await parseAllSessions(getDateRange('month').range, pf))) - const todayProviders: ProviderCost[] = [] - for (const p of await getAllProviders()) { - const data = fp(await parseAllSessions(todayRange, p.name)) - const cost = data.reduce((s, proj) => s + proj.totalCostUSD, 0) - if (cost > 0) todayProviders.push({ name: p.displayName, cost }) + if (opts.format === 'menubar-json') { + const periodInfo = getDateRange(opts.period) + const now = new Date() + const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()) + const yesterdayEnd = new Date(todayStart.getTime() - 1) + const yesterdayStr = toDateString(new Date(todayStart.getTime() - MS_PER_DAY)) + const isAllProviders = pf === 'all' + + // The daily cache is provider-agnostic: always backfill it from .all so subsequent + // provider-filtered reads can derive per-provider cost+calls from DailyEntry.providers. + const cache = await withDailyCacheLock(async () => { + let c = await loadDailyCache() + const gapStart = c.lastComputedDate + ? new Date(new Date(`${c.lastComputedDate}T00:00:00.000Z`).getTime() + MS_PER_DAY) + : new Date(todayStart.getTime() - BACKFILL_DAYS * MS_PER_DAY) + + if (gapStart.getTime() <= yesterdayEnd.getTime()) { + const gapRange: DateRange = { start: gapStart, end: yesterdayEnd } + const gapProjects = filterProjectsByName(await parseAllSessions(gapRange, 'all'), opts.project, opts.exclude) + const gapDays = aggregateProjectsIntoDays(gapProjects) + c = addNewDays(c, gapDays, yesterdayStr) + await saveDailyCache(c) + } + return c + }) + + // CURRENT PERIOD DATA + // - .all provider: assemble from cache + today (fast) + // - specific provider: parse the period range with provider filter (correct, but slower) + let currentData: PeriodData + let scanProjects: ProjectSummary[] + let scanRange: DateRange + + if (isAllProviders) { + const todayRange: DateRange = { start: todayStart, end: now } + const todayProjects = fp(await parseAllSessions(todayRange, 'all')) + const todayDays = aggregateProjectsIntoDays(todayProjects) + const rangeStartStr = toDateString(periodInfo.range.start) + const rangeEndStr = toDateString(periodInfo.range.end) + const historicalDays = getDaysInRange(cache, rangeStartStr, yesterdayStr) + const todayInRange = todayDays.filter(d => d.date >= rangeStartStr && d.date <= rangeEndStr) + const allDays = [...historicalDays, ...todayInRange].sort((a, b) => a.date.localeCompare(b.date)) + currentData = buildPeriodDataFromDays(allDays, periodInfo.label) + scanProjects = todayProjects + scanRange = todayRange + } else { + const projects = fp(await parseAllSessions(periodInfo.range, pf)) + currentData = buildPeriodData(periodInfo.label, projects) + scanProjects = projects + scanRange = periodInfo.range } - console.log(renderMenubarFormat(todayData, weekData, thirtyDayData, monthData, todayProviders)) + + // PROVIDERS + // For .all: enumerate every provider with cost across the period (from cache) + installed-but-zero. + // For specific: just this single provider with its scoped cost. + const allProviders = await getAllProviders() + const displayNameByName = new Map(allProviders.map(p => [p.name, p.displayName])) + const providers: ProviderCost[] = [] + if (isAllProviders) { + const todayRangeForProviders: DateRange = { start: todayStart, end: now } + const todayDaysForProviders = aggregateProjectsIntoDays(fp(await parseAllSessions(todayRangeForProviders, 'all'))) + const rangeStartStr = toDateString(periodInfo.range.start) + const allDaysForProviders = [ + ...getDaysInRange(cache, rangeStartStr, yesterdayStr), + ...todayDaysForProviders.filter(d => d.date >= rangeStartStr), + ] + const providerTotals: Record = {} + for (const d of allDaysForProviders) { + for (const [name, p] of Object.entries(d.providers)) { + providerTotals[name] = (providerTotals[name] ?? 0) + p.cost + } + } + for (const [name, cost] of Object.entries(providerTotals)) { + providers.push({ name: displayNameByName.get(name) ?? name, cost }) + } + for (const p of allProviders) { + if (providers.some(pc => pc.name === p.displayName)) continue + const sources = await p.discoverSessions() + if (sources.length > 0) providers.push({ name: p.displayName, cost: 0 }) + } + } else { + const display = displayNameByName.get(pf) ?? pf + providers.push({ name: display, cost: currentData.cost }) + } + + // DAILY HISTORY (last 365 days) + // Cache stores per-provider cost+calls per day in DailyEntry.providers, so we can derive + // a provider-filtered history without re-parsing. Tokens aren't broken down per provider + // in the cache, so the filtered view shows zero tokens (heatmap/trend still works on cost). + const historyStartStr = toDateString(new Date(todayStart.getTime() - BACKFILL_DAYS * MS_PER_DAY)) + const allCacheDays = getDaysInRange(cache, historyStartStr, yesterdayStr) + const allTodayDaysForHistory = aggregateProjectsIntoDays(fp(await parseAllSessions({ start: todayStart, end: now }, 'all'))) + const fullHistory = [...allCacheDays, ...allTodayDaysForHistory] + const dailyHistory = fullHistory.map(d => { + if (isAllProviders) { + const topModels = Object.entries(d.models) + .filter(([name]) => name !== '') + .sort(([, a], [, b]) => b.cost - a.cost) + .slice(0, 5) + .map(([name, m]) => ({ + name, + cost: m.cost, + calls: m.calls, + inputTokens: m.inputTokens, + outputTokens: m.outputTokens, + })) + return { + date: d.date, + cost: d.cost, + calls: d.calls, + inputTokens: d.inputTokens, + outputTokens: d.outputTokens, + cacheReadTokens: d.cacheReadTokens, + cacheWriteTokens: d.cacheWriteTokens, + topModels, + } + } + const prov = d.providers[pf] ?? { calls: 0, cost: 0 } + return { + date: d.date, + cost: prov.cost, + calls: prov.calls, + inputTokens: 0, + outputTokens: 0, + cacheReadTokens: 0, + cacheWriteTokens: 0, + topModels: [], + } + }) + + const optimize = opts.optimize === false ? null : await scanAndDetect(scanProjects, scanRange) + console.log(JSON.stringify(buildMenubarPayload(currentData, providers, optimize, dailyHistory))) return } @@ -374,29 +513,37 @@ program const outputPath = opts.output ?? `${defaultName}.${opts.format}` let savedPath: string - if (opts.format === 'json') { - savedPath = await exportJson(periods, outputPath) - } else { - savedPath = await exportCsv(periods, outputPath) + try { + if (opts.format === 'json') { + savedPath = await exportJson(periods, outputPath) + } else { + savedPath = await exportCsv(periods, outputPath) + } + } catch (err) { + // Protection guards in export.ts (symlink refusal, non-codeburn folder refusal, etc.) + // throw with a user-readable message. Print just the message, not the stack, so the CLI + // doesn't spray its internals at the user. + const message = err instanceof Error ? err.message : String(err) + console.error(`\n Export failed: ${message}\n`) + process.exit(1) } console.log(`\n Exported (Today + 7 Days + 30 Days) to: ${savedPath}\n`) }) program - .command('install-menubar') - .description('Install macOS menu bar plugin (SwiftBar/xbar)') - .action(async () => { - const result = await installMenubar() - console.log(result) - }) - -program - .command('uninstall-menubar') - .description('Remove macOS menu bar plugin') - .action(async () => { - const result = await uninstallMenubar() - console.log(result) + .command('menubar') + .description('Install and launch the macOS menubar app (one command, no clone)') + .option('--force', 'Reinstall even if an older copy is already in ~/Applications') + .action(async (opts: { force?: boolean }) => { + try { + const result = await installMenubarApp({ force: opts.force }) + console.log(`\n Ready. ${result.installedPath}\n`) + } catch (err) { + const message = err instanceof Error ? err.message : String(err) + console.error(`\n Menubar install failed: ${message}\n`) + process.exit(1) + } }) program diff --git a/src/currency.ts b/src/currency.ts index 53bdb1f..8788e07 100644 --- a/src/currency.ts +++ b/src/currency.ts @@ -12,6 +12,17 @@ type CurrencyState = { const CACHE_TTL_MS = 24 * 60 * 60 * 1000 const FRANKFURTER_URL = 'https://api.frankfurter.app/latest?from=USD&to=' +// Defensive bounds on any fetched FX rate. Outside this band the rate is either a parser bug +// or a tampered Frankfurter response, and we refuse to multiply it into displayed costs. +const MIN_VALID_FX_RATE = 0.0001 +const MAX_VALID_FX_RATE = 1_000_000 + +function isValidRate(value: unknown): value is number { + return typeof value === 'number' + && Number.isFinite(value) + && value >= MIN_VALID_FX_RATE + && value <= MAX_VALID_FX_RATE +} let active: CurrencyState = { code: 'USD', rate: 1, symbol: '$' } @@ -54,18 +65,22 @@ function getRateCachePath(): string { async function fetchRate(code: string): Promise { const response = await fetch(`${FRANKFURTER_URL}${code}`) if (!response.ok) throw new Error(`HTTP ${response.status}`) - const data = await response.json() as { rates: Record } - const rate = data.rates[code] - if (!rate) throw new Error(`No rate returned for ${code}`) + const data = await response.json() as { rates?: Record } + const rate = data.rates?.[code] + if (!isValidRate(rate)) throw new Error(`Invalid rate returned for ${code}`) return rate } async function loadCachedRate(code: string): Promise { try { const raw = await readFile(getRateCachePath(), 'utf-8') - const cached = JSON.parse(raw) as { timestamp: number; code: string; rate: number } - if (cached.code !== code) return null + const cached = JSON.parse(raw) as Partial<{ timestamp: number; code: string; rate: number }> + // Validate every field -- a tampered cache file could set rate to a string, null, or + // Infinity and break downstream math silently. + if (typeof cached.code !== 'string' || cached.code !== code) return null + if (typeof cached.timestamp !== 'number' || !Number.isFinite(cached.timestamp)) return null if (Date.now() - cached.timestamp > CACHE_TTL_MS) return null + if (!isValidRate(cached.rate)) return null return cached.rate } catch { return null diff --git a/src/daily-cache.ts b/src/daily-cache.ts new file mode 100644 index 0000000..1320aa6 --- /dev/null +++ b/src/daily-cache.ts @@ -0,0 +1,118 @@ +import { randomBytes } from 'crypto' +import { existsSync } from 'fs' +import { mkdir, open, readFile, rename, unlink } from 'fs/promises' +import { homedir } from 'os' +import { join } from 'path' + +export const DAILY_CACHE_VERSION = 2 +const DAILY_CACHE_FILENAME = 'daily-cache.json' + +export type DailyEntry = { + date: string + cost: number + calls: number + sessions: number + inputTokens: number + outputTokens: number + cacheReadTokens: number + cacheWriteTokens: number + editTurns: number + oneShotTurns: number + models: Record + categories: Record + providers: Record +} + +export type DailyCache = { + version: number + lastComputedDate: string | null + days: DailyEntry[] +} + +function getCacheDir(): string { + return process.env['CODEBURN_CACHE_DIR'] ?? join(homedir(), '.cache', 'codeburn') +} + +function getCachePath(): string { + return join(getCacheDir(), DAILY_CACHE_FILENAME) +} + +function emptyCache(): DailyCache { + return { version: DAILY_CACHE_VERSION, lastComputedDate: null, days: [] } +} + +function isValidCache(parsed: unknown): parsed is DailyCache { + if (!parsed || typeof parsed !== 'object') return false + const c = parsed as Partial + if (c.version !== DAILY_CACHE_VERSION) return false + if (!Array.isArray(c.days)) return false + return true +} + +export async function loadDailyCache(): Promise { + const path = getCachePath() + if (!existsSync(path)) return emptyCache() + try { + const raw = await readFile(path, 'utf-8') + const parsed: unknown = JSON.parse(raw) + if (!isValidCache(parsed)) return emptyCache() + return parsed + } catch { + return emptyCache() + } +} + +export async function saveDailyCache(cache: DailyCache): Promise { + const dir = getCacheDir() + if (!existsSync(dir)) await mkdir(dir, { recursive: true }) + const finalPath = getCachePath() + const tempPath = `${finalPath}.${randomBytes(8).toString('hex')}.tmp` + const payload = JSON.stringify(cache) + const handle = await open(tempPath, 'w', 0o600) + try { + await handle.writeFile(payload, { encoding: 'utf-8' }) + await handle.sync() + } finally { + await handle.close() + } + try { + await rename(tempPath, finalPath) + } catch (err) { + try { await unlink(tempPath) } catch { /* ignore */ } + throw err + } +} + +export function addNewDays(cache: DailyCache, incoming: DailyEntry[], newestDate: string): DailyCache { + const seen = new Set(cache.days.map(d => d.date)) + const merged = [...cache.days] + for (const day of incoming) { + if (seen.has(day.date)) continue + seen.add(day.date) + merged.push(day) + } + merged.sort((a, b) => a.date.localeCompare(b.date)) + const nextLast = cache.lastComputedDate && cache.lastComputedDate > newestDate + ? cache.lastComputedDate + : newestDate + return { version: DAILY_CACHE_VERSION, lastComputedDate: nextLast, days: merged } +} + +export function getDaysInRange(cache: DailyCache, start: string, end: string): DailyEntry[] { + return cache.days.filter(d => d.date >= start && d.date <= end) +} + +let lockChain: Promise = Promise.resolve() + +export function withDailyCacheLock(fn: () => Promise): Promise { + const next = lockChain.then(() => fn()) + lockChain = next.catch(() => undefined) + return next +} diff --git a/src/day-aggregator.ts b/src/day-aggregator.ts new file mode 100644 index 0000000..5030f8d --- /dev/null +++ b/src/day-aggregator.ts @@ -0,0 +1,142 @@ +import type { DailyEntry } from './daily-cache.js' +import type { PeriodData } from './menubar-json.js' +import { CATEGORY_LABELS, type ProjectSummary, type TaskCategory } from './types.js' + +function emptyEntry(date: string): DailyEntry { + return { + date, + cost: 0, + calls: 0, + sessions: 0, + inputTokens: 0, + outputTokens: 0, + cacheReadTokens: 0, + cacheWriteTokens: 0, + editTurns: 0, + oneShotTurns: 0, + models: {}, + categories: {}, + providers: {}, + } +} + +function dateKey(iso: string): string { + return iso.slice(0, 10) +} + +export function aggregateProjectsIntoDays(projects: ProjectSummary[]): DailyEntry[] { + const byDate = new Map() + const ensure = (date: string): DailyEntry => { + let d = byDate.get(date) + if (!d) { d = emptyEntry(date); byDate.set(date, d) } + return d + } + + for (const project of projects) { + for (const session of project.sessions) { + const sessionDate = dateKey(session.firstTimestamp) + ensure(sessionDate).sessions += 1 + + for (const turn of session.turns) { + if (turn.assistantCalls.length === 0) continue + const turnDate = dateKey(turn.assistantCalls[0]!.timestamp) + const turnDay = ensure(turnDate) + + const editTurns = turn.hasEdits ? 1 : 0 + const oneShotTurns = turn.hasEdits && turn.retries === 0 ? 1 : 0 + const turnCost = turn.assistantCalls.reduce((s, c) => s + c.costUSD, 0) + + turnDay.editTurns += editTurns + turnDay.oneShotTurns += oneShotTurns + + const cat = turnDay.categories[turn.category] ?? { turns: 0, cost: 0, editTurns: 0, oneShotTurns: 0 } + cat.turns += 1 + cat.cost += turnCost + cat.editTurns += editTurns + cat.oneShotTurns += oneShotTurns + turnDay.categories[turn.category] = cat + + for (const call of turn.assistantCalls) { + const callDate = dateKey(call.timestamp) + const callDay = ensure(callDate) + + callDay.cost += call.costUSD + callDay.calls += 1 + callDay.inputTokens += call.usage.inputTokens + callDay.outputTokens += call.usage.outputTokens + callDay.cacheReadTokens += call.usage.cacheReadInputTokens + callDay.cacheWriteTokens += call.usage.cacheCreationInputTokens + + const model = callDay.models[call.model] ?? { + calls: 0, cost: 0, + inputTokens: 0, outputTokens: 0, + cacheReadTokens: 0, cacheWriteTokens: 0, + } + model.calls += 1 + model.cost += call.costUSD + model.inputTokens += call.usage.inputTokens + model.outputTokens += call.usage.outputTokens + model.cacheReadTokens += call.usage.cacheReadInputTokens + model.cacheWriteTokens += call.usage.cacheCreationInputTokens + callDay.models[call.model] = model + + const provider = callDay.providers[call.provider] ?? { calls: 0, cost: 0 } + provider.calls += 1 + provider.cost += call.costUSD + callDay.providers[call.provider] = provider + } + } + } + } + + return [...byDate.values()].sort((a, b) => a.date.localeCompare(b.date)) +} + +export function buildPeriodDataFromDays(days: DailyEntry[], label: string): PeriodData { + let cost = 0, calls = 0, sessions = 0 + let inputTokens = 0, outputTokens = 0, cacheReadTokens = 0, cacheWriteTokens = 0 + const catTotals: Record = {} + const modelTotals: Record = {} + + for (const d of days) { + cost += d.cost + calls += d.calls + sessions += d.sessions + inputTokens += d.inputTokens + outputTokens += d.outputTokens + cacheReadTokens += d.cacheReadTokens + cacheWriteTokens += d.cacheWriteTokens + + for (const [name, m] of Object.entries(d.models)) { + const acc = modelTotals[name] ?? { calls: 0, cost: 0 } + acc.calls += m.calls + acc.cost += m.cost + modelTotals[name] = acc + } + for (const [cat, c] of Object.entries(d.categories)) { + const acc = catTotals[cat] ?? { turns: 0, cost: 0, editTurns: 0, oneShotTurns: 0 } + acc.turns += c.turns + acc.cost += c.cost + acc.editTurns += c.editTurns + acc.oneShotTurns += c.oneShotTurns + catTotals[cat] = acc + } + } + + return { + label, + cost, + calls, + sessions, + inputTokens, + outputTokens, + cacheReadTokens, + cacheWriteTokens, + categories: Object.entries(catTotals) + .sort(([, a], [, b]) => b.cost - a.cost) + .map(([cat, d]) => ({ name: CATEGORY_LABELS[cat as TaskCategory] ?? cat, ...d })), + models: Object.entries(modelTotals) + .sort(([, a], [, b]) => b.cost - a.cost) + .map(([name, d]) => ({ name, ...d })), + } +} diff --git a/src/export.ts b/src/export.ts index c1940aa..d07f08d 100644 --- a/src/export.ts +++ b/src/export.ts @@ -1,8 +1,8 @@ -import { writeFile } from 'fs/promises' -import { resolve } from 'path' +import { writeFile, mkdir, readdir, stat, rm } from 'fs/promises' +import { dirname, join, resolve } from 'path' import { CATEGORY_LABELS, type ProjectSummary, type TaskCategory } from './types.js' -import { getCostColumnHeader, convertCost } from './currency.js' +import { getCurrency, convertCost } from './currency.js' function escCsv(s: string): string { const sanitized = /^[=+\-@]/.test(s) ? `'${s}` : s @@ -12,15 +12,47 @@ function escCsv(s: string): string { return sanitized } -function buildDailyRows(projects: ProjectSummary[]): Array> { - const daily: Record = {} +type Row = Record +function rowsToCsv(rows: Row[]): string { + if (rows.length === 0) return '' + const headers = Object.keys(rows[0]) + const lines = [headers.map(escCsv).join(',')] + for (const row of rows) { + lines.push(headers.map(h => escCsv(String(row[h] ?? ''))).join(',')) + } + return lines.join('\n') + '\n' +} + +function round2(n: number): number { + return Math.round(n * 100) / 100 +} + +function pct(n: number, total: number): number { + return total > 0 ? round2((n / total) * 100) : 0 +} + +type DailyAgg = { + cost: number + calls: number + input: number + output: number + cacheRead: number + cacheWrite: number + sessions: Set +} + +function buildDailyRows(projects: ProjectSummary[], period: string): Row[] { + const daily: Record = {} for (const project of projects) { for (const session of project.sessions) { for (const turn of session.turns) { if (!turn.timestamp) continue const day = turn.timestamp.slice(0, 10) - if (!daily[day]) daily[day] = { cost: 0, calls: 0, input: 0, output: 0, cacheRead: 0, cacheWrite: 0 } + if (!daily[day]) { + daily[day] = { cost: 0, calls: 0, input: 0, output: 0, cacheRead: 0, cacheWrite: 0, sessions: new Set() } + } + daily[day].sessions.add(session.sessionId) for (const call of turn.assistantCalls) { daily[day].cost += call.costUSD daily[day].calls++ @@ -32,11 +64,13 @@ function buildDailyRows(projects: ProjectSummary[]): Array ({ + Period: period, Date: date, - [getCostColumnHeader()]: convertCost(d.cost), + [`Cost (${code})`]: round2(convertCost(d.cost)), 'API Calls': d.calls, + Sessions: d.sessions.size, 'Input Tokens': d.input, 'Output Tokens': d.output, 'Cache Read Tokens': d.cacheRead, @@ -44,7 +78,7 @@ function buildDailyRows(projects: ProjectSummary[]): Array> { +function buildActivityRows(projects: ProjectSummary[], period: string): Row[] { const catTotals: Record = {} for (const project of projects) { for (const session of project.sessions) { @@ -55,40 +89,53 @@ function buildActivityRows(projects: ProjectSummary[]): Array s + d.cost, 0) + const { code } = getCurrency() return Object.entries(catTotals) .sort(([, a], [, b]) => b.cost - a.cost) .map(([cat, d]) => ({ + Period: period, Activity: CATEGORY_LABELS[cat as TaskCategory] ?? cat, - [getCostColumnHeader()]: convertCost(d.cost), + [`Cost (${code})`]: round2(convertCost(d.cost)), + 'Share (%)': pct(d.cost, totalCost), Turns: d.turns, })) } -function buildModelRows(projects: ProjectSummary[]): Array> { - const modelTotals: Record = {} +function buildModelRows(projects: ProjectSummary[], period: string): Row[] { + const modelTotals: Record = {} for (const project of projects) { for (const session of project.sessions) { for (const [model, d] of Object.entries(session.modelBreakdown)) { - if (!modelTotals[model]) modelTotals[model] = { calls: 0, cost: 0, input: 0, output: 0 } + if (!modelTotals[model]) modelTotals[model] = { calls: 0, cost: 0, input: 0, output: 0, cacheRead: 0, cacheWrite: 0 } modelTotals[model].calls += d.calls modelTotals[model].cost += d.costUSD modelTotals[model].input += d.tokens.inputTokens modelTotals[model].output += d.tokens.outputTokens + modelTotals[model].cacheRead += d.tokens.cacheReadInputTokens ?? 0 + modelTotals[model].cacheWrite += d.tokens.cacheCreationInputTokens ?? 0 } } } + const totalCost = Object.values(modelTotals).reduce((s, d) => s + d.cost, 0) + const { code } = getCurrency() return Object.entries(modelTotals) + .filter(([name]) => name !== '') .sort(([, a], [, b]) => b.cost - a.cost) .map(([model, d]) => ({ + Period: period, Model: model, - [getCostColumnHeader()]: convertCost(d.cost), + [`Cost (${code})`]: round2(convertCost(d.cost)), + 'Share (%)': pct(d.cost, totalCost), 'API Calls': d.calls, 'Input Tokens': d.input, 'Output Tokens': d.output, + 'Cache Read Tokens': d.cacheRead, + 'Cache Write Tokens': d.cacheWrite, })) } -function buildToolRows(projects: ProjectSummary[]): Array> { +function buildToolRows(projects: ProjectSummary[]): Row[] { const toolTotals: Record = {} for (const project of projects) { for (const session of project.sessions) { @@ -97,12 +144,17 @@ function buildToolRows(projects: ProjectSummary[]): Array s + n, 0) return Object.entries(toolTotals) .sort(([, a], [, b]) => b - a) - .map(([tool, calls]) => ({ Tool: tool, Calls: calls })) + .map(([tool, calls]) => ({ + Tool: tool, + Calls: calls, + 'Share (%)': pct(calls, total), + })) } -function buildBashRows(projects: ProjectSummary[]): Array> { +function buildBashRows(projects: ProjectSummary[]): Row[] { const bashTotals: Record = {} for (const project of projects) { for (const session of project.sessions) { @@ -111,28 +163,47 @@ function buildBashRows(projects: ProjectSummary[]): Array s + n, 0) return Object.entries(bashTotals) .sort(([, a], [, b]) => b - a) - .map(([cmd, calls]) => ({ Command: cmd, Calls: calls })) + .map(([cmd, calls]) => ({ + Command: cmd, + Calls: calls, + 'Share (%)': pct(calls, total), + })) } -function buildProjectRows(projects: ProjectSummary[]): Array> { - return projects.map(p => ({ - Project: p.projectPath, - [getCostColumnHeader()]: convertCost(p.totalCostUSD), - 'API Calls': p.totalApiCalls, - Sessions: p.sessions.length, - })) +function buildProjectRows(projects: ProjectSummary[]): Row[] { + const { code } = getCurrency() + const total = projects.reduce((s, p) => s + p.totalCostUSD, 0) + return projects + .slice() + .sort((a, b) => b.totalCostUSD - a.totalCostUSD) + .map(p => ({ + Project: p.projectPath, + [`Cost (${code})`]: round2(convertCost(p.totalCostUSD)), + 'Share (%)': pct(p.totalCostUSD, total), + 'API Calls': p.totalApiCalls, + Sessions: p.sessions.length, + })) } -function rowsToCsv(rows: Array>): string { - if (rows.length === 0) return '' - const headers = Object.keys(rows[0]) - const lines = [headers.map(escCsv).join(',')] - for (const row of rows) { - lines.push(headers.map(h => escCsv(String(row[h] ?? ''))).join(',')) +function buildSessionRows(projects: ProjectSummary[]): Row[] { + const { code } = getCurrency() + const rows: Row[] = [] + for (const p of projects) { + for (const s of p.sessions) { + rows.push({ + Project: p.projectPath, + 'Session ID': s.sessionId, + 'Started At': s.firstTimestamp ?? '', + [`Cost (${code})`]: round2(convertCost(s.totalCostUSD)), + 'API Calls': s.apiCalls, + Turns: s.turns.length, + }) + } } - return lines.join('\n') + return rows.sort((a, b) => (b[`Cost (${code})`] as number) - (a[`Cost (${code})`] as number)) } export type PeriodExport = { @@ -140,77 +211,140 @@ export type PeriodExport = { projects: ProjectSummary[] } -function buildSummaryRow(period: PeriodExport): Record { - const cost = period.projects.reduce((s, p) => s + p.totalCostUSD, 0) - const calls = period.projects.reduce((s, p) => s + p.totalApiCalls, 0) - const sessions = period.projects.reduce((s, p) => s + p.sessions.length, 0) - return { Period: period.label, [getCostColumnHeader()]: convertCost(cost), 'API Calls': calls, Sessions: sessions } +function buildSummaryRows(periods: PeriodExport[]): Row[] { + const { code } = getCurrency() + return periods.map(p => { + const cost = p.projects.reduce((s, proj) => s + proj.totalCostUSD, 0) + const calls = p.projects.reduce((s, proj) => s + proj.totalApiCalls, 0) + const sessions = p.projects.reduce((s, proj) => s + proj.sessions.length, 0) + const projectCount = p.projects.filter(proj => proj.totalCostUSD > 0).length + return { + Period: p.label, + [`Cost (${code})`]: round2(convertCost(cost)), + 'API Calls': calls, + Sessions: sessions, + Projects: projectCount, + } + }) } +function buildReadme(periods: PeriodExport[]): string { + const { code } = getCurrency() + const generated = new Date().toISOString() + const lines = [ + 'CodeBurn Usage Export', + '====================', + '', + `Generated: ${generated}`, + `Currency: ${code}`, + `Periods: ${periods.map(p => p.label).join(', ')}`, + '', + 'Files', + '-----', + ' summary.csv One row per period. Headline totals.', + ' daily.csv Day-by-day breakdown, Period column distinguishes the window.', + ' activity.csv Time spent per task category (Coding, Debugging, Exploration, etc.).', + ' models.csv Spend per model with token totals and cache usage.', + ' projects.csv Spend per project folder (30-day window).', + ' sessions.csv One row per session (30-day window) with session IDs and costs.', + ' tools.csv Tool invocations and share (30-day window).', + ' shell-commands.csv Shell commands executed via Bash tool (30-day window).', + '', + 'Notes', + '-----', + ' Every cost column is already converted to the active currency. Tokens are raw integer', + ' counts from provider telemetry. Share (%) is relative to the period/table total.', + '', + ] + return lines.join('\n') +} + +/// Sentinel file dropped into every folder we create so we can safely overwrite an older +/// codeburn export without ever deleting a user's unrelated files by accident. +const EXPORT_MARKER_FILE = '.codeburn-export' + +async function isCodeburnExportFolder(path: string): Promise { + const markerStat = await stat(join(path, EXPORT_MARKER_FILE)).catch(() => null) + return markerStat?.isFile() ?? false +} + +async function clearCodeburnExportFolder(path: string): Promise { + const entries = await readdir(path) + for (const entry of entries) { + await rm(join(path, entry), { recursive: true, force: true }) + } +} + +/// Writes a folder of one-table-per-file CSVs. The outputPath is treated as a directory. If it +/// ends in `.csv` the extension is stripped to form the folder name. Refuses to delete a +/// pre-existing file or a non-codeburn folder, so a typo like `-o ~/.ssh/id_ed25519` can't +/// wipe a sensitive file (prior versions did `rm(path, { force: true })` unconditionally). export async function exportCsv(periods: PeriodExport[], outputPath: string): Promise { - const allProjects = periods.find(p => p.label === '30 Days')?.projects - ?? periods[periods.length - 1].projects + const thirtyDays = periods.find(p => p.label === '30 Days') + const thirtyDayProjects = thirtyDays?.projects ?? periods[periods.length - 1].projects - const parts: string[] = [] - - parts.push('# Summary') - parts.push(rowsToCsv(periods.map(buildSummaryRow))) - parts.push('') - - for (const period of periods) { - parts.push(`# Daily - ${period.label}`) - parts.push(rowsToCsv(buildDailyRows(period.projects))) - parts.push('') - - parts.push(`# Activity - ${period.label}`) - parts.push(rowsToCsv(buildActivityRows(period.projects))) - parts.push('') - - parts.push(`# Models - ${period.label}`) - parts.push(rowsToCsv(buildModelRows(period.projects))) - parts.push('') + let folder = resolve(outputPath) + if (folder.toLowerCase().endsWith('.csv')) { + folder = folder.slice(0, -4) } - parts.push('# Tools - All') - parts.push(rowsToCsv(buildToolRows(allProjects))) - parts.push('') + const existingStat = await stat(folder).catch(() => null) + if (existingStat?.isFile()) { + throw new Error(`Refusing to overwrite existing file at ${folder}. Pass a directory path instead.`) + } + if (existingStat?.isDirectory()) { + if (!(await isCodeburnExportFolder(folder))) { + throw new Error( + `Refusing to reuse non-empty directory ${folder}: no ${EXPORT_MARKER_FILE} marker. ` + + `Delete it manually or pick a different -o path.` + ) + } + await clearCodeburnExportFolder(folder) + } + await mkdir(folder, { recursive: true }) + await writeFile(join(folder, EXPORT_MARKER_FILE), '', 'utf-8') - parts.push('# Shell Commands - All') - parts.push(rowsToCsv(buildBashRows(allProjects))) - parts.push('') + const dailyRows = periods.flatMap(p => buildDailyRows(p.projects, p.label)) + const activityRows = periods.flatMap(p => buildActivityRows(p.projects, p.label)) + const modelRows = periods.flatMap(p => buildModelRows(p.projects, p.label)) - parts.push('# Projects - All') - parts.push(rowsToCsv(buildProjectRows(allProjects))) - parts.push('') + await writeFile(join(folder, 'README.txt'), buildReadme(periods), 'utf-8') + await writeFile(join(folder, 'summary.csv'), rowsToCsv(buildSummaryRows(periods)), 'utf-8') + await writeFile(join(folder, 'daily.csv'), rowsToCsv(dailyRows), 'utf-8') + await writeFile(join(folder, 'activity.csv'), rowsToCsv(activityRows), 'utf-8') + await writeFile(join(folder, 'models.csv'), rowsToCsv(modelRows), 'utf-8') + await writeFile(join(folder, 'projects.csv'), rowsToCsv(buildProjectRows(thirtyDayProjects)), 'utf-8') + await writeFile(join(folder, 'sessions.csv'), rowsToCsv(buildSessionRows(thirtyDayProjects)), 'utf-8') + await writeFile(join(folder, 'tools.csv'), rowsToCsv(buildToolRows(thirtyDayProjects)), 'utf-8') + await writeFile(join(folder, 'shell-commands.csv'), rowsToCsv(buildBashRows(thirtyDayProjects)), 'utf-8') - const fullPath = resolve(outputPath) - await writeFile(fullPath, parts.join('\n'), 'utf-8') - return fullPath + return folder } export async function exportJson(periods: PeriodExport[], outputPath: string): Promise { - const allProjects = periods.find(p => p.label === '30 Days')?.projects - ?? periods[periods.length - 1].projects - - const periodData: Record = {} - for (const period of periods) { - periodData[period.label] = { - summary: buildSummaryRow(period), - daily: buildDailyRows(period.projects), - activity: buildActivityRows(period.projects), - models: buildModelRows(period.projects), - } - } + const thirtyDays = periods.find(p => p.label === '30 Days') + const thirtyDayProjects = thirtyDays?.projects ?? periods[periods.length - 1].projects + const { code, rate, symbol } = getCurrency() const data = { + schema: 'codeburn.export.v2', generated: new Date().toISOString(), - periods: periodData, - tools: buildToolRows(allProjects), - shellCommands: buildBashRows(allProjects), - projects: buildProjectRows(allProjects), + currency: { code, rate, symbol }, + summary: buildSummaryRows(periods), + periods: periods.map(p => ({ + label: p.label, + daily: buildDailyRows(p.projects, p.label), + activity: buildActivityRows(p.projects, p.label), + models: buildModelRows(p.projects, p.label), + })), + projects: buildProjectRows(thirtyDayProjects), + sessions: buildSessionRows(thirtyDayProjects), + tools: buildToolRows(thirtyDayProjects), + shellCommands: buildBashRows(thirtyDayProjects), } - const fullPath = resolve(outputPath) - await writeFile(fullPath, JSON.stringify(data, null, 2), 'utf-8') - return fullPath + const target = resolve(outputPath.toLowerCase().endsWith('.json') ? outputPath : `${outputPath}.json`) + await mkdir(dirname(target), { recursive: true }) + await writeFile(target, JSON.stringify(data, null, 2), 'utf-8') + return target } diff --git a/src/menubar-installer.ts b/src/menubar-installer.ts new file mode 100644 index 0000000..53265c5 --- /dev/null +++ b/src/menubar-installer.ts @@ -0,0 +1,173 @@ +import { spawn } from 'node:child_process' +import { createWriteStream } from 'node:fs' +import { mkdir, mkdtemp, rename, rm, stat } from 'node:fs/promises' +import { homedir, platform, tmpdir } from 'node:os' +import { join } from 'node:path' +import { pipeline } from 'node:stream/promises' +import { Readable } from 'node:stream' + +/// Public GitHub repo that hosts signed macOS release builds. `/releases/latest` returns the +/// newest tagged release; we filter its assets list for our zipped .app bundle. +const RELEASE_API = 'https://api.github.com/repos/AgentSeal/codeburn/releases/latest' +const APP_BUNDLE_NAME = 'CodeBurnMenubar.app' +const ASSET_PATTERN = /^CodeBurnMenubar-.*\.zip$/ +const APP_PROCESS_NAME = 'CodeBurnMenubar' +const SUPPORTED_OS = 'darwin' +const MIN_MACOS_MAJOR = 14 + +export type InstallResult = { installedPath: string; launched: boolean } + +type ReleaseAsset = { name: string; browser_download_url: string } +type ReleaseResponse = { tag_name: string; assets: ReleaseAsset[] } + +function userApplicationsDir(): string { + return join(homedir(), 'Applications') +} + +async function exists(path: string): Promise { + try { + await stat(path) + return true + } catch { + return false + } +} + +async function ensureSupportedPlatform(): Promise { + if (platform() !== SUPPORTED_OS) { + throw new Error(`The menubar app is macOS only (detected: ${platform()}).`) + } + const major = Number((process.env.CODEBURN_FORCE_MACOS_MAJOR ?? '') + || (await sysProductVersion()).split('.')[0]) + if (!Number.isFinite(major) || major < MIN_MACOS_MAJOR) { + throw new Error(`macOS ${MIN_MACOS_MAJOR}+ required (detected ${major}).`) + } +} + +async function sysProductVersion(): Promise { + return new Promise((resolve, reject) => { + const proc = spawn('/usr/bin/sw_vers', ['-productVersion']) + let out = '' + proc.stdout.on('data', (chunk: Buffer) => { out += chunk.toString() }) + proc.on('error', reject) + proc.on('close', (code) => { + if (code !== 0) reject(new Error(`sw_vers exited with ${code}`)) + else resolve(out.trim()) + }) + }) +} + +async function fetchLatestReleaseAsset(): Promise { + const response = await fetch(RELEASE_API, { + headers: { + // Identify the installer so GitHub's abuse heuristics treat us as a known client. + 'User-Agent': 'codeburn-menubar-installer', + Accept: 'application/vnd.github+json', + }, + }) + if (!response.ok) { + throw new Error(`GitHub release lookup failed: HTTP ${response.status}`) + } + const body = await response.json() as ReleaseResponse + const asset = body.assets.find(a => ASSET_PATTERN.test(a.name)) + if (!asset) { + throw new Error( + `No ${APP_BUNDLE_NAME} zip found in release ${body.tag_name}. ` + + `Check https://github.com/AgentSeal/codeburn/releases.` + ) + } + return asset +} + +async function downloadToFile(url: string, destPath: string): Promise { + const response = await fetch(url, { + headers: { 'User-Agent': 'codeburn-menubar-installer' }, + redirect: 'follow', + }) + if (!response.ok || response.body === null) { + throw new Error(`Download failed: HTTP ${response.status}`) + } + // fetch's ReadableStream needs to be wrapped for Node streams. + const nodeStream = Readable.fromWeb(response.body as never) + await pipeline(nodeStream, createWriteStream(destPath)) +} + +async function runCommand(command: string, args: string[]): Promise { + return new Promise((resolve, reject) => { + const proc = spawn(command, args, { stdio: 'inherit' }) + proc.on('error', reject) + proc.on('close', (code) => { + if (code === 0) resolve() + else reject(new Error(`${command} exited with status ${code}`)) + }) + }) +} + +async function isAppRunning(): Promise { + return new Promise((resolve) => { + const proc = spawn('/usr/bin/pgrep', ['-f', APP_PROCESS_NAME]) + proc.on('close', (code) => resolve(code === 0)) + proc.on('error', () => resolve(false)) + }) +} + +async function killRunningApp(): Promise { + await new Promise((resolve) => { + const proc = spawn('/usr/bin/pkill', ['-f', APP_PROCESS_NAME]) + proc.on('close', () => resolve()) + proc.on('error', () => resolve()) + }) +} + +export async function installMenubarApp(options: { force?: boolean } = {}): Promise { + await ensureSupportedPlatform() + + const appsDir = userApplicationsDir() + const targetPath = join(appsDir, APP_BUNDLE_NAME) + const alreadyInstalled = await exists(targetPath) + + if (alreadyInstalled && !options.force) { + if (!(await isAppRunning())) { + await runCommand('/usr/bin/open', [targetPath]) + } + return { installedPath: targetPath, launched: true } + } + + console.log('Looking up the latest CodeBurn Menubar release...') + const asset = await fetchLatestReleaseAsset() + + const stagingDir = await mkdtemp(join(tmpdir(), 'codeburn-menubar-')) + try { + const archivePath = join(stagingDir, asset.name) + console.log(`Downloading ${asset.name}...`) + await downloadToFile(asset.browser_download_url, archivePath) + + console.log('Unpacking...') + await runCommand('/usr/bin/unzip', ['-q', archivePath, '-d', stagingDir]) + + const unpackedApp = join(stagingDir, APP_BUNDLE_NAME) + if (!(await exists(unpackedApp))) { + throw new Error(`Archive did not contain ${APP_BUNDLE_NAME}.`) + } + + // Clear Gatekeeper's quarantine xattr. Without this, the first launch shows the + // "cannot verify developer" prompt even for a signed + notarized app when the bundle + // was delivered via curl/fetch instead of the Mac App Store. + await runCommand('/usr/bin/xattr', ['-dr', 'com.apple.quarantine', unpackedApp]).catch(() => {}) + + await mkdir(appsDir, { recursive: true }) + if (alreadyInstalled) { + // Kill the running copy before replacing its bundle so `mv` can proceed cleanly and the + // user ends up on the new version. + await killRunningApp() + await rm(targetPath, { recursive: true, force: true }) + } + await rename(unpackedApp, targetPath) + + console.log('Launching CodeBurn Menubar...') + await runCommand('/usr/bin/open', [targetPath]) + return { installedPath: targetPath, launched: true } + } finally { + await rm(stagingDir, { recursive: true, force: true }) + } +} diff --git a/src/menubar-json.ts b/src/menubar-json.ts new file mode 100644 index 0000000..bab4e40 --- /dev/null +++ b/src/menubar-json.ts @@ -0,0 +1,182 @@ +/// Rollup of one time window (today / 7 days / 30 days / month / all) used as the canonical +/// input to the menubar payload. Built inside the CLI and also consumed by the day-aggregator +/// when hydrating per-day cache entries. +export type PeriodData = { + label: string + cost: number + calls: number + sessions: number + inputTokens: number + outputTokens: number + cacheReadTokens: number + cacheWriteTokens: number + categories: Array<{ name: string; cost: number; turns: number; editTurns: number; oneShotTurns: number }> + models: Array<{ name: string; cost: number; calls: number }> +} + +export type ProviderCost = { + name: string + cost: number +} +import type { OptimizeResult } from './optimize.js' + +const TOP_ACTIVITIES_LIMIT = 20 +const TOP_MODELS_LIMIT = 20 +const TOP_FINDINGS_LIMIT = 10 +const HISTORY_DAYS_LIMIT = 365 +const SYNTHETIC_MODEL_NAME = '' + +export type DailyModelBreakdown = { + name: string + cost: number + calls: number + inputTokens: number + outputTokens: number +} + +export type DailyHistoryEntry = { + date: string + cost: number + calls: number + inputTokens: number + outputTokens: number + cacheReadTokens: number + cacheWriteTokens: number + topModels: DailyModelBreakdown[] +} + +export type MenubarPayload = { + generated: string + current: { + label: string + cost: number + calls: number + sessions: number + oneShotRate: number | null + inputTokens: number + outputTokens: number + cacheHitPercent: number + topActivities: Array<{ + name: string + cost: number + turns: number + oneShotRate: number | null + }> + topModels: Array<{ + name: string + cost: number + calls: number + }> + providers: Record + } + optimize: { + findingCount: number + savingsUSD: number + topFindings: Array<{ + title: string + impact: 'high' | 'medium' | 'low' + savingsUSD: number + }> + } + history: { + daily: DailyHistoryEntry[] + } +} + +function oneShotRateFor(editTurns: number, oneShotTurns: number): number | null { + if (editTurns === 0) return null + return oneShotTurns / editTurns +} + +function aggregateOneShotRate(categories: PeriodData['categories']): number | null { + let edits = 0 + let oneShots = 0 + for (const cat of categories) { + edits += cat.editTurns + oneShots += cat.oneShotTurns + } + if (edits === 0) return null + return oneShots / edits +} + +function cacheHitPercent(inputTokens: number, cacheReadTokens: number): number { + const denom = inputTokens + cacheReadTokens + if (denom === 0) return 0 + return (cacheReadTokens / denom) * 100 +} + +function buildTopActivities(categories: PeriodData['categories']): MenubarPayload['current']['topActivities'] { + return categories.slice(0, TOP_ACTIVITIES_LIMIT).map(cat => ({ + name: cat.name, + cost: cat.cost, + turns: cat.turns, + oneShotRate: oneShotRateFor(cat.editTurns, cat.oneShotTurns), + })) +} + +function buildTopModels(models: PeriodData['models']): MenubarPayload['current']['topModels'] { + return models + .filter(m => m.name !== SYNTHETIC_MODEL_NAME) + .slice(0, TOP_MODELS_LIMIT) + .map(m => ({ name: m.name, cost: m.cost, calls: m.calls })) +} + +function buildOptimize(optimize: OptimizeResult | null): MenubarPayload['optimize'] { + if (!optimize || optimize.findings.length === 0) { + return { findingCount: 0, savingsUSD: 0, topFindings: [] } + } + const { findings, costRate } = optimize + const totalSavingsUSD = findings.reduce((s, f) => s + f.tokensSaved * costRate, 0) + const topFindings = findings.slice(0, TOP_FINDINGS_LIMIT).map(f => ({ + title: f.title, + impact: f.impact, + savingsUSD: f.tokensSaved * costRate, + })) + return { + findingCount: findings.length, + savingsUSD: totalSavingsUSD, + topFindings, + } +} + +function buildProviders(providers: ProviderCost[]): Record { + const map: Record = {} + for (const p of providers) { + if (p.cost < 0) continue + map[p.name.toLowerCase()] = p.cost + } + return map +} + +function buildHistory(daily: DailyHistoryEntry[] | undefined): MenubarPayload['history'] { + if (!daily || daily.length === 0) return { daily: [] } + const sorted = [...daily].sort((a, b) => a.date.localeCompare(b.date)) + const trimmed = sorted.slice(-HISTORY_DAYS_LIMIT) + return { daily: trimmed } +} + +export function buildMenubarPayload( + current: PeriodData, + providers: ProviderCost[], + optimize: OptimizeResult | null, + dailyHistory?: DailyHistoryEntry[], +): MenubarPayload { + return { + generated: new Date().toISOString(), + current: { + label: current.label, + cost: current.cost, + calls: current.calls, + sessions: current.sessions, + oneShotRate: aggregateOneShotRate(current.categories), + inputTokens: current.inputTokens, + outputTokens: current.outputTokens, + cacheHitPercent: cacheHitPercent(current.inputTokens, current.cacheReadTokens), + topActivities: buildTopActivities(current.categories), + topModels: buildTopModels(current.models), + providers: buildProviders(providers), + }, + optimize: buildOptimize(optimize), + history: buildHistory(dailyHistory), + } +} diff --git a/src/menubar.ts b/src/menubar.ts deleted file mode 100644 index be2bdb8..0000000 --- a/src/menubar.ts +++ /dev/null @@ -1,334 +0,0 @@ -import { execFileSync, execSync } from 'child_process' -import { existsSync } from 'fs' -import { chmod, mkdir, unlink, writeFile } from 'fs/promises' -import { homedir, platform } from 'os' -import { join } from 'path' -import { formatCost, formatTokens } from './format.js' -import { getCurrency } from './currency.js' - -const PLUGIN_REFRESH = '5m' -const SWIFTBAR_PREFERENCES_DOMAIN = 'com.ameba.SwiftBar' -const SWIFTBAR_PLUGIN_DIRECTORY_KEY = 'PluginDirectory' - -const MENUBAR_LABEL_MAX_LENGTH = 14 -const MENUBAR_LABEL_ALLOWLIST = /[^A-Za-z0-9 ._/-]/g - -// SwiftBar/xbar parse `|` as the metadata separator and interpret ANSI escapes -// on some paths. Replace anything outside a conservative allowlist with `?` -// and truncate before padEnd. -function sanitizeMenubarLabel(name: string): string { - return name.replace(MENUBAR_LABEL_ALLOWLIST, '?').slice(0, MENUBAR_LABEL_MAX_LENGTH) -} - -function getSwiftBarPluginDir(): string { - return join(homedir(), 'Library', 'Application Support', 'SwiftBar', 'plugins') -} - -function getXbarPluginDir(): string { - return join(homedir(), 'Library', 'Application Support', 'xbar', 'plugins') -} - -export function parsePluginDirectoryPreference(value: string): string | undefined { - const pluginDir = value.trim() - if (!pluginDir) return undefined - if (pluginDir === '~') return homedir() - if (pluginDir.startsWith('~/')) return join(homedir(), pluginDir.slice(2)) - return pluginDir -} - -function getConfiguredSwiftBarPluginDir(): string | undefined { - if (platform() !== 'darwin') return undefined - - try { - return parsePluginDirectoryPreference(execFileSync('defaults', [ - 'read', - SWIFTBAR_PREFERENCES_DOMAIN, - SWIFTBAR_PLUGIN_DIRECTORY_KEY, - ], { encoding: 'utf-8' })) - } catch { - return undefined - } -} - -function getSwiftBarPluginDirs(): string[] { - const dirs = [getConfiguredSwiftBarPluginDir(), getSwiftBarPluginDir()] - return dirs.filter((dir, index): dir is string => dir !== undefined && dirs.indexOf(dir) === index) -} - -export function chooseMenubarPluginDir( - swiftBarPluginDirs: string[], - xbarPluginDir: string, - pathExists: (path: string) => boolean, -): { pluginDir: string; appName: string } { - const preferredSwiftBarDir = swiftBarPluginDirs[0] ?? getSwiftBarPluginDir() - - for (const pluginDir of swiftBarPluginDirs) { - if (pathExists(pluginDir)) return { pluginDir, appName: 'SwiftBar' } - } - - if (pathExists(xbarPluginDir)) return { pluginDir: xbarPluginDir, appName: 'xbar' } - - return { pluginDir: preferredSwiftBarDir, appName: 'SwiftBar' } -} - -function getCodeburnBin(): string { - try { - return execSync('which codeburn', { encoding: 'utf-8' }).trim() - } catch { - return 'npx --yes codeburn' - } -} - -function generatePlugin(bin: string): string { - const home = homedir() - // Resolve the directory of the node binary used at install time so the - // plugin uses the same Node version codeburn was installed with — even - // when SwiftBar/xbar launch with a minimal PATH that finds an older - // system Node first. Fixes #63. - const nodeBinDir = join(process.execPath, '..') - return `#!/bin/bash -# CodeBurn -# v0.1.0 -# AgentSeal -# agentseal -# See where your AI coding tokens burn. Tracks cost, activity, and model usage across Claude Code, Cursor, and Codex by task type, tool, MCP server, and project. -# file://${home}/codeburn/assets/logo.png -# https://github.com/agentseal/codeburn -# node - -export HOME="${home}" -export PATH="${nodeBinDir}:$HOME/.local/bin:$HOME/.npm-global/bin:/opt/homebrew/bin:/usr/local/bin:$PATH" - -${bin} status --format menubar 2>/dev/null || echo "-- | sfimage=flame.fill" -` -} - -function miniBar(value: number, max: number, width: number = 10): string { - if (max === 0) return '·'.repeat(width) - const filled = Math.round((value / max) * width) - return '█'.repeat(Math.min(filled, width)) + '·'.repeat(Math.max(width - filled, 0)) -} - -export type PeriodData = { - label: string - cost: number - calls: number - inputTokens: number - outputTokens: number - cacheReadTokens: number - cacheWriteTokens: number - categories: Array<{ name: string; cost: number; turns: number; editTurns: number; oneShotTurns: number }> - models: Array<{ name: string; cost: number; calls: number }> -} - -export type ProviderCost = { - name: string - cost: number -} - -export function renderMenubarFormat( - today: PeriodData, - week: PeriodData, - thirtyDays: PeriodData, - month: PeriodData, - todayProviders?: ProviderCost[], -): string { - const lines: string[] = [] - - lines.push(`${formatCost(today.cost)} | sfimage=flame.fill color=#FF8C42`) - lines.push('---') - - lines.push(`CodeBurn | size=15 color=#FF8C42`) - lines.push(`AI Coding Cost Tracker | size=11`) - if (todayProviders && todayProviders.length > 1) { - for (const p of todayProviders) { - lines.push(` ${p.name.padEnd(10)} ${formatCost(p.cost).padStart(10)} | font=Menlo size=11`) - } - } - lines.push('---') - - lines.push(`Today ${formatCost(today.cost)} ${today.calls.toLocaleString()} calls | size=14`) - lines.push('---') - - const maxCat = Math.max(...today.categories.map(c => c.cost), 0.01) - lines.push(`Activity - Today | size=12 color=#FF8C42`) - for (const cat of today.categories.slice(0, 8)) { - const bar = miniBar(cat.cost, maxCat) - const name = sanitizeMenubarLabel(cat.name).padEnd(14) - lines.push(`${bar} ${name} ${formatCost(cat.cost).padStart(8)} ${String(cat.turns).padStart(4)} turns | font=Menlo size=11`) - } - lines.push('---') - - const maxModel = Math.max(...today.models.filter(m => m.name !== '').map(m => m.cost), 0.01) - lines.push(`Models - Today | size=12 color=#FF8C42`) - for (const model of today.models.slice(0, 5)) { - if (model.name === '') continue - const bar = miniBar(model.cost, maxModel) - const name = sanitizeMenubarLabel(model.name).padEnd(14) - lines.push(`${bar} ${name} ${formatCost(model.cost).padStart(8)} ${String(model.calls).padStart(5)} calls | font=Menlo size=11`) - } - - const cacheHit = today.inputTokens + today.cacheReadTokens > 0 - ? ((today.cacheReadTokens / (today.inputTokens + today.cacheReadTokens)) * 100).toFixed(0) - : '0' - lines.push(`Tokens: ${formatTokens(today.inputTokens)} in · ${formatTokens(today.outputTokens)} out · ${cacheHit}% cache hit | font=Menlo size=10`) - lines.push('---') - - lines.push(`7 Days ${formatCost(week.cost)} ${week.calls.toLocaleString()} calls | size=14`) - const weekMaxCat = Math.max(...week.categories.map(c => c.cost), 0.01) - const weekMaxModel = Math.max(...week.models.filter(m => m.name !== '').map(m => m.cost), 0.01) - lines.push(`--Activity | size=12 color=#FF8C42`) - for (const cat of week.categories.slice(0, 8)) { - const bar = miniBar(cat.cost, weekMaxCat) - const name = sanitizeMenubarLabel(cat.name).padEnd(14) - lines.push(`--${bar} ${name} ${formatCost(cat.cost).padStart(8)} ${String(cat.turns).padStart(4)} turns | font=Menlo size=11`) - } - lines.push(`-----`) - lines.push(`--Models | size=12 color=#FF8C42`) - for (const model of week.models.slice(0, 5)) { - if (model.name === '') continue - const bar = miniBar(model.cost, weekMaxModel) - const name = sanitizeMenubarLabel(model.name).padEnd(14) - lines.push(`--${bar} ${name} ${formatCost(model.cost).padStart(8)} ${String(model.calls).padStart(5)} calls | font=Menlo size=11`) - } - - lines.push(`30 Days ${formatCost(thirtyDays.cost)} ${thirtyDays.calls.toLocaleString()} calls | size=14`) - const tdMaxCat = Math.max(...thirtyDays.categories.map(c => c.cost), 0.01) - const tdMaxModel = Math.max(...thirtyDays.models.filter(m => m.name !== '').map(m => m.cost), 0.01) - lines.push(`--Activity | size=12 color=#FF8C42`) - for (const cat of thirtyDays.categories.slice(0, 8)) { - const bar = miniBar(cat.cost, tdMaxCat) - const name = sanitizeMenubarLabel(cat.name).padEnd(14) - lines.push(`--${bar} ${name} ${formatCost(cat.cost).padStart(8)} ${String(cat.turns).padStart(4)} turns | font=Menlo size=11`) - } - lines.push(`-----`) - lines.push(`--Models | size=12 color=#FF8C42`) - for (const model of thirtyDays.models.slice(0, 5)) { - if (model.name === '') continue - const bar = miniBar(model.cost, tdMaxModel) - const name = sanitizeMenubarLabel(model.name).padEnd(14) - lines.push(`--${bar} ${name} ${formatCost(model.cost).padStart(8)} ${String(model.calls).padStart(5)} calls | font=Menlo size=11`) - } - - lines.push(`Month ${formatCost(month.cost)} ${month.calls.toLocaleString()} calls | size=14`) - const monthMaxCat = Math.max(...month.categories.map(c => c.cost), 0.01) - const monthMaxModel = Math.max(...month.models.filter(m => m.name !== '').map(m => m.cost), 0.01) - lines.push(`--Activity | size=12 color=#FF8C42`) - for (const cat of month.categories.slice(0, 8)) { - const bar = miniBar(cat.cost, monthMaxCat) - const name = sanitizeMenubarLabel(cat.name).padEnd(14) - lines.push(`--${bar} ${name} ${formatCost(cat.cost).padStart(8)} ${String(cat.turns).padStart(4)} turns | font=Menlo size=11`) - } - lines.push(`-----`) - lines.push(`--Models | size=12 color=#FF8C42`) - for (const model of month.models.slice(0, 5)) { - if (model.name === '') continue - const bar = miniBar(model.cost, monthMaxModel) - const name = sanitizeMenubarLabel(model.name).padEnd(14) - lines.push(`--${bar} ${name} ${formatCost(model.cost).padStart(8)} ${String(model.calls).padStart(5)} calls | font=Menlo size=11`) - } - - lines.push('---') - const home = process.env.HOME ?? '~' - const bin = getCodeburnBin() - // Invoke the resolved `codeburn` binary directly. SwiftBar/xbar deliver - // each `paramN=` value as its own argv entry, so there's no shell - // quoting involved — and we don't ship the user to a `~/codeburn` - // checkout that only exists when running from a dev clone (#32). - lines.push(`Open Full Report | terminal=true shell=${bin} param1=report`) - lines.push(`Export CSV to Desktop | terminal=false shell=${bin} param1=export param2=-o param3=${home}/Desktop/codeburn-report.csv`) - - // Currency submenu -- common currencies as clickable items. - // Clicking one runs 'codeburn currency XXX' and refreshes the plugin. - const activeCurrency = getCurrency().code - const currencies = [ - { code: 'USD', name: 'US Dollar' }, - { code: 'GBP', name: 'British Pound' }, - { code: 'EUR', name: 'Euro' }, - { code: 'AUD', name: 'Australian Dollar' }, - { code: 'CAD', name: 'Canadian Dollar' }, - { code: 'NZD', name: 'New Zealand Dollar' }, - { code: 'JPY', name: 'Japanese Yen' }, - { code: 'CHF', name: 'Swiss Franc' }, - { code: 'INR', name: 'Indian Rupee' }, - { code: 'BRL', name: 'Brazilian Real' }, - { code: 'SEK', name: 'Swedish Krona' }, - { code: 'SGD', name: 'Singapore Dollar' }, - { code: 'HKD', name: 'Hong Kong Dollar' }, - { code: 'KRW', name: 'South Korean Won' }, - { code: 'MXN', name: 'Mexican Peso' }, - { code: 'ZAR', name: 'South African Rand' }, - { code: 'DKK', name: 'Danish Krone' }, - ] - lines.push(`Currency: ${activeCurrency} | size=14`) - for (const { code, name } of currencies) { - const check = code === activeCurrency ? ' *' : '' - // The real CLI subcommand is `codeburn currency [code]` (with `--reset` - // for USD), not `codeburn config currency` — the latter doesn't exist - // and silently fails when SwiftBar runs it. Fixes #27. - if (code === 'USD') { - lines.push(`--${name} (${code})${check} | terminal=false refresh=true shell=${bin} param1=currency param2=--reset`) - } else { - lines.push(`--${name} (${code})${check} | terminal=false refresh=true shell=${bin} param1=currency param2=${code}`) - } - } - - lines.push(`Refresh | refresh=true`) - - return lines.join('\n') -} - -export async function installMenubar(): Promise { - if (platform() !== 'darwin') { - return 'Menu bar integration is only available on macOS. Use `codeburn watch` or `codeburn status` instead.' - } - - const bin = getCodeburnBin() - const pluginContent = generatePlugin(bin) - - const { pluginDir, appName } = chooseMenubarPluginDir(getSwiftBarPluginDirs(), getXbarPluginDir(), existsSync) - - if (!existsSync(pluginDir)) { - await mkdir(pluginDir, { recursive: true }) - } - - const pluginPath = join(pluginDir, `codeburn.${PLUGIN_REFRESH}.sh`) - await writeFile(pluginPath, pluginContent, 'utf-8') - await chmod(pluginPath, 0o755) - - const swiftbarInstalled = existsSync('/Applications/SwiftBar.app') || existsSync(join(homedir(), 'Applications', 'SwiftBar.app')) - const xbarInstalled = existsSync('/Applications/xbar.app') || existsSync(join(homedir(), 'Applications', 'xbar.app')) - - const lines: string[] = [] - lines.push(`\n Plugin installed to: ${pluginPath}`) - - if (swiftbarInstalled || xbarInstalled) { - lines.push(` ${appName} detected - plugin should appear in your menu bar shortly.`) - lines.push(` If not, open ${appName} and refresh plugins.\n`) - } else { - lines.push(`\n To see CodeBurn in your menu bar, install SwiftBar:`) - lines.push(` brew install --cask swiftbar`) - lines.push(`\n Then launch SwiftBar - the plugin will load automatically.\n`) - } - - return lines.join('\n') -} - -export async function uninstallMenubar(): Promise { - const paths = [ - ...getSwiftBarPluginDirs().map(dir => join(dir, `codeburn.${PLUGIN_REFRESH}.sh`)), - join(getXbarPluginDir(), `codeburn.${PLUGIN_REFRESH}.sh`), - ] - - let removed = false - for (const p of paths) { - if (existsSync(p)) { - await unlink(p) - removed = true - } - } - - return removed - ? '\n Menu bar plugin removed.\n' - : '\n No menu bar plugin found.\n' -} diff --git a/src/parser.ts b/src/parser.ts index 5ba0da9..4adcf3b 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1,4 +1,4 @@ -import { readdir } from 'fs/promises' +import { readdir, stat } from 'fs/promises' import { basename, join } from 'path' import { readSessionFile } from './fs-utils.js' import { calculateCost, getShortModelName } from './models.js' @@ -266,6 +266,15 @@ async function parseSessionFile( seenMsgIds: Set, dateRange?: DateRange, ): Promise { + // Skip files whose mtime is older than the range start. A session file + // can only contain entries up to its last-modified time; if that predates + // the requested range, nothing in this file can match. + if (dateRange) { + try { + const s = await stat(filePath) + if (s.mtimeMs < dateRange.start.getTime()) return null + } catch { /* fall through to normal read; missing stat shouldn't break parsing */ } + } const content = await readSessionFile(filePath) if (content === null) return null const lines = content.split('\n').filter(l => l.trim()) @@ -388,6 +397,12 @@ async function parseProviderSources( const sessionMap = new Map() for (const source of sources) { + if (dateRange) { + try { + const s = await stat(source.path) + if (s.mtimeMs < dateRange.start.getTime()) continue + } catch { /* fall through; treat unknown stat as "may contain data" */ } + } const parser = provider.createSessionParser( { path: source.path, project: source.project, provider: providerName }, seenKeys, diff --git a/tests/daily-cache.test.ts b/tests/daily-cache.test.ts new file mode 100644 index 0000000..b1741e3 --- /dev/null +++ b/tests/daily-cache.test.ts @@ -0,0 +1,189 @@ +import { afterEach, beforeEach, describe, expect, it } from 'vitest' +import { readFile, rm } from 'fs/promises' +import { existsSync } from 'fs' +import { tmpdir } from 'os' +import { join } from 'path' + +import { + addNewDays, + DAILY_CACHE_VERSION, + type DailyCache, + type DailyEntry, + getDaysInRange, + loadDailyCache, + saveDailyCache, + withDailyCacheLock, +} from '../src/daily-cache.js' + +function emptyDay(date: string, cost = 0, calls = 0): DailyEntry { + return { + date, + cost, + calls, + sessions: 0, + inputTokens: 0, + outputTokens: 0, + cacheReadTokens: 0, + cacheWriteTokens: 0, + editTurns: 0, + oneShotTurns: 0, + models: {}, + categories: {}, + providers: {}, + } +} + +const TMP_CACHE_ROOT = join(tmpdir(), `codeburn-cache-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`) + +beforeEach(() => { + process.env['CODEBURN_CACHE_DIR'] = TMP_CACHE_ROOT +}) + +afterEach(async () => { + delete process.env['CODEBURN_CACHE_DIR'] + if (existsSync(TMP_CACHE_ROOT)) { + await rm(TMP_CACHE_ROOT, { recursive: true, force: true }) + } +}) + +describe('loadDailyCache', () => { + it('returns an empty cache when the file does not exist', async () => { + const cache = await loadDailyCache() + expect(cache.version).toBe(DAILY_CACHE_VERSION) + expect(cache.lastComputedDate).toBeNull() + expect(cache.days).toEqual([]) + }) + + it('returns an empty cache when the file contains invalid JSON', async () => { + const { writeFile, mkdir } = await import('fs/promises') + await mkdir(TMP_CACHE_ROOT, { recursive: true }) + await writeFile(join(TMP_CACHE_ROOT, 'daily-cache.json'), 'not valid json{{', 'utf-8') + const cache = await loadDailyCache() + expect(cache.days).toEqual([]) + }) + + it('returns an empty cache when the version does not match', async () => { + const saved: DailyCache = { + version: DAILY_CACHE_VERSION - 999, + lastComputedDate: '2026-04-10', + days: [emptyDay('2026-04-10', 10)], + } + const { writeFile, mkdir } = await import('fs/promises') + await mkdir(TMP_CACHE_ROOT, { recursive: true }) + await writeFile(join(TMP_CACHE_ROOT, 'daily-cache.json'), JSON.stringify(saved), 'utf-8') + const cache = await loadDailyCache() + expect(cache.days).toEqual([]) + expect(cache.lastComputedDate).toBeNull() + }) + + it('round-trips a valid cache through save and load', async () => { + const saved: DailyCache = { + version: DAILY_CACHE_VERSION, + lastComputedDate: '2026-04-10', + days: [emptyDay('2026-04-09', 12.5, 40), emptyDay('2026-04-10', 7.25, 28)], + } + await saveDailyCache(saved) + const loaded = await loadDailyCache() + expect(loaded).toEqual(saved) + }) +}) + +describe('saveDailyCache', () => { + it('writes atomically so no temp file is left after a successful save', async () => { + const saved: DailyCache = { + version: DAILY_CACHE_VERSION, + lastComputedDate: '2026-04-10', + days: [emptyDay('2026-04-10', 5)], + } + await saveDailyCache(saved) + const { readdir } = await import('fs/promises') + const files = await readdir(TMP_CACHE_ROOT) + const tempLeftovers = files.filter(f => f.endsWith('.tmp')) + expect(tempLeftovers).toEqual([]) + const finalFile = await readFile(join(TMP_CACHE_ROOT, 'daily-cache.json'), 'utf-8') + expect(JSON.parse(finalFile)).toEqual(saved) + }) +}) + +describe('addNewDays', () => { + it('returns a new cache with the added days sorted ascending by date', () => { + const base: DailyCache = { + version: DAILY_CACHE_VERSION, + lastComputedDate: '2026-04-08', + days: [emptyDay('2026-04-07', 3), emptyDay('2026-04-08', 5)], + } + const updated = addNewDays(base, [emptyDay('2026-04-10', 9), emptyDay('2026-04-09', 7)], '2026-04-10') + expect(updated.days.map(d => d.date)).toEqual(['2026-04-07', '2026-04-08', '2026-04-09', '2026-04-10']) + expect(updated.lastComputedDate).toBe('2026-04-10') + }) + + it('skips days already present in the cache (first write wins)', () => { + const base: DailyCache = { + version: DAILY_CACHE_VERSION, + lastComputedDate: '2026-04-08', + days: [emptyDay('2026-04-08', 5)], + } + const updated = addNewDays(base, [emptyDay('2026-04-08', 99)], '2026-04-08') + const aprilEight = updated.days.find(d => d.date === '2026-04-08')! + expect(aprilEight.cost).toBe(5) + }) + + it('does not regress lastComputedDate if incoming newestDate is older', () => { + const base: DailyCache = { + version: DAILY_CACHE_VERSION, + lastComputedDate: '2026-04-10', + days: [emptyDay('2026-04-10', 5)], + } + const updated = addNewDays(base, [emptyDay('2026-04-05', 3)], '2026-04-05') + expect(updated.lastComputedDate).toBe('2026-04-10') + }) +}) + +describe('getDaysInRange', () => { + const cache: DailyCache = { + version: DAILY_CACHE_VERSION, + lastComputedDate: '2026-04-10', + days: [ + emptyDay('2026-04-05', 1), + emptyDay('2026-04-06', 2), + emptyDay('2026-04-07', 3), + emptyDay('2026-04-08', 4), + emptyDay('2026-04-09', 5), + emptyDay('2026-04-10', 6), + ], + } + + it('returns inclusive start and end range', () => { + const days = getDaysInRange(cache, '2026-04-07', '2026-04-09') + expect(days.map(d => d.date)).toEqual(['2026-04-07', '2026-04-08', '2026-04-09']) + }) + + it('returns empty when range is entirely outside cache', () => { + expect(getDaysInRange(cache, '2026-03-01', '2026-03-10')).toEqual([]) + expect(getDaysInRange(cache, '2026-05-01', '2026-05-10')).toEqual([]) + }) + + it('clips to available cache days when range extends beyond', () => { + const days = getDaysInRange(cache, '2026-04-09', '2026-04-20') + expect(days.map(d => d.date)).toEqual(['2026-04-09', '2026-04-10']) + }) +}) + +describe('withDailyCacheLock', () => { + it('serializes concurrent operations', async () => { + const sequence: string[] = [] + const op = async (tag: string): Promise => { + await withDailyCacheLock(async () => { + sequence.push(`start-${tag}`) + await new Promise(r => setTimeout(r, 20)) + sequence.push(`end-${tag}`) + }) + } + await Promise.all([op('a'), op('b'), op('c')]) + for (let i = 0; i < sequence.length; i += 2) { + expect(sequence[i]?.startsWith('start-')).toBe(true) + expect(sequence[i + 1]?.startsWith('end-')).toBe(true) + expect(sequence[i]!.slice(6)).toBe(sequence[i + 1]!.slice(4)) + } + }) +}) diff --git a/tests/day-aggregator.test.ts b/tests/day-aggregator.test.ts new file mode 100644 index 0000000..fb90840 --- /dev/null +++ b/tests/day-aggregator.test.ts @@ -0,0 +1,258 @@ +import { describe, expect, it } from 'vitest' + +import { aggregateProjectsIntoDays, buildPeriodDataFromDays } from '../src/day-aggregator.js' +import type { ProjectSummary } from '../src/types.js' + +function makeProject(overrides: Partial & { sessions: ProjectSummary['sessions'] }): ProjectSummary { + return { + project: 'p', + projectPath: '/p', + totalCostUSD: overrides.sessions.reduce((s, sess) => s + sess.totalCostUSD, 0), + totalApiCalls: overrides.sessions.reduce((s, sess) => s + sess.apiCalls, 0), + ...overrides, + } +} + +function makeCall(timestamp: string, costUSD: number, model = 'Opus 4.7', provider = 'claude') { + return { + provider, + model, + usage: { + inputTokens: 100, + outputTokens: 200, + cacheCreationInputTokens: 0, + cacheReadInputTokens: 50, + cachedInputTokens: 0, + reasoningTokens: 0, + webSearchRequests: 0, + }, + costUSD, + tools: [], + mcpTools: [], + hasAgentSpawn: false, + hasPlanMode: false, + speed: 'standard' as const, + timestamp, + bashCommands: [], + deduplicationKey: `dk-${timestamp}-${costUSD}`, + } +} + +describe('aggregateProjectsIntoDays', () => { + it('buckets api calls by calendar date derived from timestamp', () => { + const projects: ProjectSummary[] = [ + makeProject({ + sessions: [{ + sessionId: 's1', + project: 'p', + firstTimestamp: '2026-04-09T10:00:00Z', + lastTimestamp: '2026-04-10T08:00:00Z', + totalCostUSD: 10, + totalInputTokens: 0, + totalOutputTokens: 0, + totalCacheReadTokens: 0, + totalCacheWriteTokens: 0, + apiCalls: 2, + turns: [ + { + userMessage: 'hi', + timestamp: '2026-04-09T10:00:00Z', + sessionId: 's1', + category: 'coding', + retries: 0, + hasEdits: true, + assistantCalls: [ + makeCall('2026-04-09T10:00:00Z', 4), + makeCall('2026-04-10T08:00:00Z', 6), + ], + }, + ], + modelBreakdown: {}, + toolBreakdown: {}, + mcpBreakdown: {}, + bashBreakdown: {}, + categoryBreakdown: {} as never, + }], + }), + ] + + const days = aggregateProjectsIntoDays(projects) + expect(days.map(d => d.date)).toEqual(['2026-04-09', '2026-04-10']) + expect(days[0]!.cost).toBe(4) + expect(days[0]!.calls).toBe(1) + expect(days[1]!.cost).toBe(6) + expect(days[1]!.calls).toBe(1) + }) + + it('attributes category turns + editTurns + oneShotTurns to the first call date of the turn', () => { + const projects: ProjectSummary[] = [ + makeProject({ + sessions: [{ + sessionId: 's1', + project: 'p', + firstTimestamp: '2026-04-09T10:00:00Z', + lastTimestamp: '2026-04-09T10:05:00Z', + totalCostUSD: 3, + totalInputTokens: 0, + totalOutputTokens: 0, + totalCacheReadTokens: 0, + totalCacheWriteTokens: 0, + apiCalls: 1, + turns: [ + { + userMessage: 'hi', + timestamp: '2026-04-09T10:00:00Z', + sessionId: 's1', + category: 'coding', + retries: 0, + hasEdits: true, + assistantCalls: [makeCall('2026-04-09T10:00:00Z', 3)], + }, + ], + modelBreakdown: {}, + toolBreakdown: {}, + mcpBreakdown: {}, + bashBreakdown: {}, + categoryBreakdown: {} as never, + }], + }), + ] + const days = aggregateProjectsIntoDays(projects) + const day = days[0]! + expect(day.editTurns).toBe(1) + expect(day.oneShotTurns).toBe(1) + expect(day.categories['coding']).toEqual({ + turns: 1, + cost: 3, + editTurns: 1, + oneShotTurns: 1, + }) + }) + + it('counts a session under its firstTimestamp date', () => { + const projects: ProjectSummary[] = [ + makeProject({ + sessions: [{ + sessionId: 's1', + project: 'p', + firstTimestamp: '2026-04-09T23:59:00Z', + lastTimestamp: '2026-04-10T00:10:00Z', + totalCostUSD: 1, + totalInputTokens: 0, totalOutputTokens: 0, totalCacheReadTokens: 0, totalCacheWriteTokens: 0, + apiCalls: 0, + turns: [], + modelBreakdown: {}, toolBreakdown: {}, mcpBreakdown: {}, bashBreakdown: {}, + categoryBreakdown: {} as never, + }], + }), + ] + const days = aggregateProjectsIntoDays(projects) + expect(days[0]!.date).toBe('2026-04-09') + expect(days[0]!.sessions).toBe(1) + }) + + it('aggregates per-model and per-provider totals inside each day', () => { + const projects: ProjectSummary[] = [ + makeProject({ + sessions: [{ + sessionId: 's1', + project: 'p', + firstTimestamp: '2026-04-10T10:00:00Z', + lastTimestamp: '2026-04-10T10:00:00Z', + totalCostUSD: 10, + totalInputTokens: 0, totalOutputTokens: 0, totalCacheReadTokens: 0, totalCacheWriteTokens: 0, + apiCalls: 2, + turns: [ + { + userMessage: 'x', timestamp: '2026-04-10T10:00:00Z', sessionId: 's1', + category: 'coding', retries: 0, hasEdits: false, + assistantCalls: [ + makeCall('2026-04-10T10:00:00Z', 7, 'Opus 4.7', 'claude'), + makeCall('2026-04-10T10:00:00Z', 3, 'gpt-5', 'codex'), + ], + }, + ], + modelBreakdown: {}, toolBreakdown: {}, mcpBreakdown: {}, bashBreakdown: {}, + categoryBreakdown: {} as never, + }], + }), + ] + const days = aggregateProjectsIntoDays(projects) + const day = days[0]! + expect(day.models['Opus 4.7']).toEqual({ + calls: 1, cost: 7, + inputTokens: 100, outputTokens: 200, + cacheReadTokens: 50, cacheWriteTokens: 0, + }) + expect(day.models['gpt-5']).toEqual({ + calls: 1, cost: 3, + inputTokens: 100, outputTokens: 200, + cacheReadTokens: 50, cacheWriteTokens: 0, + }) + expect(day.providers['claude']).toEqual({ calls: 1, cost: 7 }) + expect(day.providers['codex']).toEqual({ calls: 1, cost: 3 }) + }) +}) + +describe('buildPeriodDataFromDays', () => { + function makeDay(date: string, cost: number) { + return { + date, + cost, + calls: 10, + sessions: 2, + inputTokens: 100, + outputTokens: 200, + cacheReadTokens: 300, + cacheWriteTokens: 0, + editTurns: 3, + oneShotTurns: 2, + models: { + 'Opus 4.7': { calls: 8, cost: cost * 0.8, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 }, + 'Haiku 4.5': { calls: 2, cost: cost * 0.2, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 }, + }, + categories: { 'coding': { turns: 2, cost: cost * 0.5, editTurns: 2, oneShotTurns: 1 } }, + providers: { 'claude': { calls: 10, cost } }, + } + } + + it('sums cost, calls, sessions, tokens across days', () => { + const days = [makeDay('2026-04-09', 10), makeDay('2026-04-10', 20)] + const pd = buildPeriodDataFromDays(days, '7 Days') + expect(pd.label).toBe('7 Days') + expect(pd.cost).toBe(30) + expect(pd.calls).toBe(20) + expect(pd.sessions).toBe(4) + expect(pd.inputTokens).toBe(200) + expect(pd.outputTokens).toBe(400) + expect(pd.cacheReadTokens).toBe(600) + }) + + it('merges per-model totals across days and sorts by cost desc', () => { + const days = [makeDay('2026-04-09', 10), makeDay('2026-04-10', 20)] + const pd = buildPeriodDataFromDays(days, 'Today') + expect(pd.models[0]!.name).toBe('Opus 4.7') + expect(pd.models[0]!.cost).toBeCloseTo(24) + expect(pd.models[1]!.name).toBe('Haiku 4.5') + expect(pd.models[1]!.cost).toBeCloseTo(6) + }) + + it('merges per-category totals and keeps editTurns + oneShotTurns per category', () => { + const days = [makeDay('2026-04-09', 10), makeDay('2026-04-10', 20)] + const pd = buildPeriodDataFromDays(days, 'Today') + const coding = pd.categories.find(c => c.name === 'Coding')! + expect(coding.turns).toBe(4) + expect(coding.editTurns).toBe(4) + expect(coding.oneShotTurns).toBe(2) + expect(coding.cost).toBeCloseTo(15) + }) + + it('returns empty period totals when no days supplied', () => { + const pd = buildPeriodDataFromDays([], 'Today') + expect(pd.cost).toBe(0) + expect(pd.calls).toBe(0) + expect(pd.sessions).toBe(0) + expect(pd.categories).toEqual([]) + expect(pd.models).toEqual([]) + }) +}) diff --git a/tests/export.test.ts b/tests/export.test.ts index 1f196bf..b9b6a99 100644 --- a/tests/export.test.ts +++ b/tests/export.test.ts @@ -120,8 +120,15 @@ describe('exportCsv', () => { ] const outputPath = join(tmpDir, 'report.csv') - await exportCsv(periods, outputPath) - const content = await readFile(outputPath, 'utf-8') + const folder = await exportCsv(periods, outputPath) + // exportCsv now writes a folder of clean one-table-per-file CSVs, so the formula-prefix + // guard is scattered across files. Concatenate them for the assertion surface. + const [projects, models, shell] = await Promise.all([ + readFile(join(folder, 'projects.csv'), 'utf-8'), + readFile(join(folder, 'models.csv'), 'utf-8'), + readFile(join(folder, 'shell-commands.csv'), 'utf-8'), + ]) + const content = projects + models + shell expect(content).toContain("\"'=cmd,calc\"") expect(content).toContain("'+danger-model") diff --git a/tests/menubar-json.test.ts b/tests/menubar-json.test.ts new file mode 100644 index 0000000..f7493d0 --- /dev/null +++ b/tests/menubar-json.test.ts @@ -0,0 +1,234 @@ +import { describe, expect, it } from 'vitest' + +import { buildMenubarPayload, type PeriodData, type ProviderCost } from '../src/menubar-json.js' +import type { OptimizeResult } from '../src/optimize.js' + +function emptyPeriod(label: string): PeriodData { + return { + label, + cost: 0, + calls: 0, + sessions: 0, + inputTokens: 0, + outputTokens: 0, + cacheReadTokens: 0, + cacheWriteTokens: 0, + categories: [], + models: [], + } +} + +describe('buildMenubarPayload', () => { + it('emits the full schema with current-period metrics and iso timestamp', () => { + const period: PeriodData = { + label: '7 Days', + cost: 1248.01, + calls: 11231, + sessions: 97, + inputTokens: 19100, + outputTokens: 675600, + cacheReadTokens: 0, + cacheWriteTokens: 0, + categories: [], + models: [], + } + const payload = buildMenubarPayload(period, [], null) + + expect(payload.generated).toMatch(/^\d{4}-\d{2}-\d{2}T/) + expect(payload.current.label).toBe('7 Days') + expect(payload.current.cost).toBe(1248.01) + expect(payload.current.calls).toBe(11231) + expect(payload.current.sessions).toBe(97) + expect(payload.current.inputTokens).toBe(19100) + expect(payload.current.outputTokens).toBe(675600) + }) + + it('computes per-category oneShotRate from editTurns and skips categories without edits', () => { + const period: PeriodData = { + label: 'Today', + cost: 0, calls: 0, sessions: 0, + inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, + categories: [ + { name: 'Coding', cost: 15.83, turns: 7, editTurns: 7, oneShotTurns: 6 }, + { name: 'Conversation', cost: 16.69, turns: 47, editTurns: 0, oneShotTurns: 0 }, + ], + models: [], + } + const payload = buildMenubarPayload(period, [], null) + + const coding = payload.current.topActivities.find(a => a.name === 'Coding')! + expect(coding.oneShotRate).toBeCloseTo(6 / 7) + + const conv = payload.current.topActivities.find(a => a.name === 'Conversation')! + expect(conv.oneShotRate).toBeNull() + }) + + it('computes aggregate oneShotRate across categories with edits', () => { + const period: PeriodData = { + label: 'Today', + cost: 0, calls: 0, sessions: 0, + inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, + categories: [ + { name: 'Coding', cost: 1, turns: 7, editTurns: 10, oneShotTurns: 8 }, + { name: 'Debugging', cost: 1, turns: 5, editTurns: 10, oneShotTurns: 6 }, + { name: 'Conversation', cost: 1, turns: 40, editTurns: 0, oneShotTurns: 0 }, + ], + models: [], + } + const payload = buildMenubarPayload(period, [], null) + expect(payload.current.oneShotRate).toBeCloseTo((8 + 6) / (10 + 10)) + }) + + it('returns null aggregate oneShotRate when no categories have editTurns', () => { + const period: PeriodData = { + label: 'Today', + cost: 0, calls: 0, sessions: 0, + inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, + categories: [{ name: 'Conversation', cost: 1, turns: 5, editTurns: 0, oneShotTurns: 0 }], + models: [], + } + const payload = buildMenubarPayload(period, [], null) + expect(payload.current.oneShotRate).toBeNull() + }) + + it('filters out the synthetic model and caps topModels at 20 so multi-model users see all their models', () => { + const models = Array.from({ length: 30 }, (_, i) => ({ + name: `Model${i}`, cost: 30 - i, calls: 100, + })) + const period: PeriodData = { + label: 'Today', + cost: 0, calls: 0, sessions: 0, + inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, + categories: [], + models: [{ name: '', cost: 99, calls: 0 }, ...models], + } + const payload = buildMenubarPayload(period, [], null) + expect(payload.current.topModels.find(m => m.name === '')).toBeUndefined() + expect(payload.current.topModels).toHaveLength(20) + expect(payload.current.topModels[0].name).toBe('Model0') + }) + + it('caps topActivities at 20 so all task categories can surface', () => { + const period: PeriodData = { + label: 'Today', + cost: 0, calls: 0, sessions: 0, + inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, + categories: Array.from({ length: 25 }, (_, i) => ({ + name: `Cat${i}`, cost: 1, turns: 1, editTurns: 1, oneShotTurns: 1, + })), + models: [], + } + const payload = buildMenubarPayload(period, [], null) + expect(payload.current.topActivities).toHaveLength(20) + }) + + it('computes cacheHitPercent from cache reads over input plus cache reads', () => { + const period: PeriodData = { + label: 'Today', + cost: 0, calls: 0, sessions: 0, + inputTokens: 100, + outputTokens: 200, + cacheReadTokens: 900, + cacheWriteTokens: 0, + categories: [], + models: [], + } + const payload = buildMenubarPayload(period, [], null) + expect(payload.current.cacheHitPercent).toBeCloseTo(90) + }) + + it('returns zero cacheHitPercent when there is no input or cache traffic', () => { + const payload = buildMenubarPayload(emptyPeriod('Today'), [], null) + expect(payload.current.cacheHitPercent).toBe(0) + }) + + it('handles null optimize as empty findings block', () => { + const payload = buildMenubarPayload(emptyPeriod('Today'), [], null) + expect(payload.optimize).toEqual({ findingCount: 0, savingsUSD: 0, topFindings: [] }) + }) + + it('converts tokensSaved to savingsUSD via costRate and caps topFindings at 10', () => { + const findings = Array.from({ length: 15 }, (_, i) => ({ + title: `F${i}`, explanation: '', impact: 'low' as const, tokensSaved: 1000, + fix: { type: 'paste' as const, label: '', text: '' }, + })) + const optimize: OptimizeResult = { + findings, + costRate: 0.00002, + healthScore: 60, + healthGrade: 'C', + } + const payload = buildMenubarPayload(emptyPeriod('Today'), [], optimize) + + expect(payload.optimize.findingCount).toBe(15) + expect(payload.optimize.topFindings).toHaveLength(10) + expect(payload.optimize.topFindings[0].title).toBe('F0') + expect(payload.optimize.topFindings[0].savingsUSD).toBeCloseTo(1000 * 0.00002) + expect(payload.optimize.savingsUSD).toBeCloseTo(15 * 1000 * 0.00002) + }) + + it('maps providers into a lowercased dict inside the current-period block', () => { + const providers: ProviderCost[] = [ + { name: 'Claude Code', cost: 76.45 }, + { name: 'Cursor', cost: 2.18 }, + { name: 'Codex', cost: 1.5 }, + ] + const payload = buildMenubarPayload(emptyPeriod('Today'), providers, null) + expect(payload.current.providers).toEqual({ 'claude code': 76.45, cursor: 2.18, codex: 1.5 }) + }) + + it('keeps zero-cost providers in the dict so installed-but-unused providers still render as tabs', () => { + const providers: ProviderCost[] = [ + { name: 'Claude', cost: 76.45 }, + { name: 'Codex', cost: 0 }, + { name: 'Cursor', cost: 2.18 }, + ] + const payload = buildMenubarPayload(emptyPeriod('Today'), providers, null) + expect(payload.current.providers).toEqual({ claude: 76.45, codex: 0, cursor: 2.18 }) + }) + + it('includes up to 365 daily history entries sorted ascending by date', () => { + const history = Array.from({ length: 400 }, (_, i) => { + const d = new Date(2025, 0, 1) + d.setDate(d.getDate() + i) + return { + date: d.toISOString().slice(0, 10), + cost: i, + calls: i * 10, + inputTokens: 0, + outputTokens: 0, + cacheReadTokens: 0, + cacheWriteTokens: 0, + topModels: [], + } + }) + const payload = buildMenubarPayload(emptyPeriod('Today'), [], null, history) + expect(payload.history.daily).toHaveLength(365) + expect(payload.history.daily[0]!.date < payload.history.daily[364]!.date).toBe(true) + expect(payload.history.daily[364]!.date).toBe(history[399]!.date) + }) + + it('preserves token fields in dailyHistory entries', () => { + const history = [ + { date: '2026-04-15', cost: 10, calls: 50, inputTokens: 100, outputTokens: 200, cacheReadTokens: 5000, cacheWriteTokens: 800, topModels: [{ name: 'Opus 4.7', cost: 8, calls: 40, inputTokens: 80, outputTokens: 160 }] }, + { date: '2026-04-16', cost: 20, calls: 75, inputTokens: 150, outputTokens: 350, cacheReadTokens: 8000, cacheWriteTokens: 1200, topModels: [] }, + ] + const payload = buildMenubarPayload(emptyPeriod('Today'), [], null, history) + expect(payload.history.daily[0]).toEqual(history[0]) + expect(payload.history.daily[1]).toEqual(history[1]) + }) + + it('returns empty history when none supplied', () => { + const payload = buildMenubarPayload(emptyPeriod('Today'), [], null) + expect(payload.history.daily).toEqual([]) + }) + + it('drops providers with negative cost defensively', () => { + const providers: ProviderCost[] = [ + { name: 'Claude', cost: 76.45 }, + { name: 'Broken', cost: -1 }, + ] + const payload = buildMenubarPayload(emptyPeriod('Today'), providers, null) + expect(payload.current.providers).toEqual({ claude: 76.45 }) + }) +}) diff --git a/tests/menubar.test.ts b/tests/menubar.test.ts deleted file mode 100644 index 93936b8..0000000 --- a/tests/menubar.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { describe, expect, it } from 'vitest' -import { join } from 'path' -import { homedir } from 'os' - -import { chooseMenubarPluginDir, parsePluginDirectoryPreference } from '../src/menubar.js' - -describe('parsePluginDirectoryPreference', () => { - it('trims defaults output and preserves spaces in paths', () => { - expect(parsePluginDirectoryPreference('/Users/test/Documents/Tech stuff/swiftbar_plugins\n')).toBe('/Users/test/Documents/Tech stuff/swiftbar_plugins') - }) - - it('expands tilde paths', () => { - expect(parsePluginDirectoryPreference('~/swiftbar_plugins')).toBe(join(homedir(), 'swiftbar_plugins')) - }) - - it('ignores blank preference values', () => { - expect(parsePluginDirectoryPreference(' \n')).toBeUndefined() - }) -}) - -describe('chooseMenubarPluginDir', () => { - const configuredSwiftBarDir = '/Users/test/Documents/Tech stuff/swiftbar_plugins' - const defaultSwiftBarDir = '/Users/test/Library/Application Support/SwiftBar/plugins' - const xbarDir = '/Users/test/Library/Application Support/xbar/plugins' - - it('uses SwiftBar configured plugin directory before the default directory', () => { - const existing = new Set([configuredSwiftBarDir, defaultSwiftBarDir]) - const result = chooseMenubarPluginDir( - [configuredSwiftBarDir, defaultSwiftBarDir], - xbarDir, - path => existing.has(path), - ) - - expect(result).toEqual({ pluginDir: configuredSwiftBarDir, appName: 'SwiftBar' }) - }) - - it('falls back to xbar when no SwiftBar plugin directory exists', () => { - const existing = new Set([xbarDir]) - const result = chooseMenubarPluginDir( - [defaultSwiftBarDir], - xbarDir, - path => existing.has(path), - ) - - expect(result).toEqual({ pluginDir: xbarDir, appName: 'xbar' }) - }) - - it('creates the preferred SwiftBar directory when no plugin directory exists', () => { - const result = chooseMenubarPluginDir( - [configuredSwiftBarDir, defaultSwiftBarDir], - xbarDir, - () => false, - ) - - expect(result).toEqual({ pluginDir: configuredSwiftBarDir, appName: 'SwiftBar' }) - }) -}) diff --git a/tests/security/menubar-injection.test.ts b/tests/security/menubar-injection.test.ts deleted file mode 100644 index d8de96d..0000000 --- a/tests/security/menubar-injection.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { describe, it, expect } from 'vitest' - -import { renderMenubarFormat, type PeriodData } from '../../src/menubar.js' - -const ESC = '\u001b' - -function period(name: string): PeriodData { - return { - label: 'x', - cost: 0.01, - calls: 1, - inputTokens: 1, - outputTokens: 1, - cacheReadTokens: 0, - cacheWriteTokens: 0, - categories: [{ name, cost: 0.01, turns: 1, editTurns: 0, oneShotTurns: 1 }], - models: [{ name, cost: 0.01, calls: 1 }], - } -} - -function linesWithToken(output: string, token: string): string[] { - return output.split('\n').filter(l => l.includes(token)) -} - -describe('MEDIUM-2 menubar directive separator injection', () => { - it('strips pipe separators from model names', () => { - const p = period('foo | href=https://attacker.example/pwn') - const out = renderMenubarFormat(p, p, p, p) - for (const line of linesWithToken(out, 'foo')) { - expect(line.split('|').length).toBeLessThanOrEqual(2) - } - }) - - it('strips ANSI escapes from model names', () => { - const p = period(`foo${ESC}[31mMODEL${ESC}[0m`) - const out = renderMenubarFormat(p, p, p, p) - expect(out).not.toContain(ESC) - }) - - it('strips pipe separators from category names', () => { - const p = period('cat | color=red') - const out = renderMenubarFormat(p, p, p, p) - for (const line of linesWithToken(out, 'cat')) { - expect(line.split('|').length).toBeLessThanOrEqual(2) - } - }) -})