github janekbaraniewski/openusage v0.7.0

latest releases: v0.26.3, v0.26.2, v0.26.1...
7 months ago

Changelog

Performance

  • Adaptive tick system — TUI animation tick adjusts based on activity (150ms active, 500ms idle, fully paused when unused), eliminating idle CPU usage (#59)
  • Broadcaster snapshot deduplication — skip sending unchanged data frames to the TUI, reducing unnecessary re-renders (#59)
  • Render cache fixes — cache key precision fixed (nanosecond to second), triple slice copy removed, 20+ redundant cache invalidations eliminated (#59)
  • Lipgloss style caching — 42 inline style allocations replaced with cached package variables across render hot paths (#59)
  • Read model cache optimization — remove unnecessary deep clone on every cache read (#59)
  • Bubble Tea renderer reduced from 60 FPS to 30 FPS (#59)

Bug Fixes

  • Daily series 30-day cap — fix hardcoded 30-day filter in daily aggregation queries that caused analytics cost to show 0 for older events (#59)
  • SQL error propagation — add missing rows.Err() checks in 9 telemetry query functions (#59)
  • Network error propagation — check io.ReadAll errors in daemon client instead of silently discarding (#59)
  • Context propagation — thread context through claude_code API calls, cursor API goroutine, daemon ServiceStatus, and dashboardapp ValidateAPIKey (#59)
  • Stale snapshot guards — add existence checks in TUI render loops to prevent rendering empty tiles from stale IDs (#59)
  • Config validation — validate and trace-log when thresholds, intervals, and retention days are silently clamped (#59)
  • Cross-platform path — replace os.Getenv("HOME") with os.UserHomeDir() in claude_code provider (#59)
  • Provider consistency — groq and gemini_api now use shared.FinalizeStatus() (#59)
  • Input validation — reject empty API keys in SaveCredential, validate telemetry hook source names against known providers (#59)
  • Temp file cleanup — deferred removal of orphaned temp files in spool and config writes (#59)
  • Config load failures now log a warning instead of silently falling back to defaults (#59)

Security

  • SQL table name validation — materialized table names validated against strict allowlist before SQL interpolation (#59)
  • File permissions — spool files written with 0600 instead of 0644; credential file permissions enforced on update (#59)

Maintenance

  • Provider dedup — extract shared.FetchJSON helper, remove 108 lines of duplicated HTTP+JSON boilerplate from deepseek, xai, mistral, alibaba_cloud (#59)
  • Update() refactor — extract 6 message handlers from 206-line switch statement (#59)
  • Dead code removal — delete unused Panel/PanelRow types from widget.go (#59)
  • Theme mutex documentation — document locking protocol and Bubble Tea single-goroutine safety invariants (#59)
  • Test coverage — add 54 tests for shared helpers, groq, mistral, xai, gemini_api (all previously at 0%) (#59)
  • Bump golang.org/x/crypto to 0.49.0 (#55), github.com/samber/lo to 1.53.0 (#52)

Full Changelog: v0.6.12...v0.7.0

Don't miss a new openusage release

NewReleases is sending notifications on new releases.