Modules
Sources/RunicCore: fetch + parse (provider descriptors, Codex RPC, PTY runner, Claude probes, OpenAI web scraping, OpenTelemetry GenAI ledger ingestion, local LLM discovery, status polling).Sources/Runic: state + UI (UsageStore, SettingsStore, StatusItemController, menus, icon rendering).Sources/RunicWidget: WidgetKit extension wired to the shared snapshot.Sources/RunicCLI: bundled CLI forrunicusage/status output.Sources/RunicMacros: SwiftSyntax macros for provider registration.Sources/RunicMacroSupport: shared macro support used by app/core/CLI targets.Sources/RunicClaudeWatchdog: helper process for stable Claude CLI PTY sessions.Sources/RunicClaudeWebProbe: CLI helper to diagnose Claude web fetches.
Entry points
RunicApp: SwiftUI keepalive + Settings scene.AppDelegate: wires status controller, Sparkle updater, notifications.
Data flow
- Background refresh →
UsageFetcher/provider probes/local ledger sources →UsageStore→ menu/icon/widgets. - Settings toggles feed
SettingsStore→UsageStorerefresh cadence + feature flags.
Concurrency & platform
- Swift 6 strict concurrency enabled; prefer Sendable state and explicit MainActor hops.
- macOS 14+ targeting; avoid deprecated APIs when refactoring.
See also: docs/providers.md, docs/refresh-loop.md, docs/ui.md.
Read the source ↗ Checked against Runic 2.13.5 · 9730f91