Skip to content

Releases: JasonYeYuhe/cli-pulse

CLI Pulse v1.10.3 — Sentry crash reporting

22 Apr 11:24

Choose a tag to compare

What's new in v1.10.3

Crash reporting, privacy-first

CLI Pulse now ships with Sentry crash reporting across macOS, iOS, and Apple Watch. The goal is simple: stop finding out about bugs through App Store 1-star reviews.

What's scrubbed before anything leaves your device:

  • Your provider API keys (OpenAI, Anthropic, Claude, Gemini, etc.)
  • OAuth / Bearer tokens, JWTs, Supabase session tokens
  • /Users/<you>/... paths in stack traces → /Users/[user]/...
  • Any field whose name contains token, secret, password, api_key, supabase, keychain, or similar fragments
  • Your email, IP address, and device username (PII disabled at the SDK level)

No performance tracing is collected — only crashes and explicit errors, nothing else.

See the updated PRIVACY.md for full details.

Platforms in this release

  • macOS (Mac App Store + direct DMG) — v1.10.3 build 36
  • iOS / iPadOS — v1.10.3 build 36
  • watchOS — v1.10.3 build 36
  • Android — held at v1.10.2 for this cycle; next Android release will catch up

Install

  • Direct DMG: download CLI-Pulse-Bar-v1.10.3.dmg below, drag to /Applications. Notarized & signed.
  • Mac App Store / iOS App Store: coming once Apple approves this build.

v1.10.2

22 Apr 09:30

Choose a tag to compare

Hotfix release — Claude weekly reset was computing in the user's local timezone instead of Claude's actual anchor (Asia/Tokyo). For users outside Asia/Tokyo, the reset countdown was off by 9–14 hours. Pinned the canonical weekly-reset calendar to Asia/Tokyo so the reset time is now correct regardless of the user's device timezone.

The bug lived in v1.10.1 and earlier. If you're on Asia/Tokyo, nothing you see changes. If you're anywhere else, your Claude weekly reset in the menu bar will now line up with Claude's real rollover time.

  • macOS (outside App Store): download CLI-Pulse-Bar-v1.10.2.dmg below (notarized + stapled).
  • Android (sideload): download CLI-Pulse-v1.10.2.apk below.
  • macOS / iOS (App Store): v1.10.2 is in Apple Review (replaces the canceled v1.10.1 submission).
  • Android (Google Play): v1.10.2 AAB uploaded to the Closed Testing track.

v1.10.1

22 Apr 07:05

Choose a tag to compare

Post-release follow-ups to v1.10.0 after Codex review:

  • P2 (user-visible): Notification dedupe now survives cold launch. v1.10.0 would re-fire notifications for every unresolved alert in the feed on every app relaunch, especially noisy after v1.10.8 enabled iOS local quota-alert synthesis. previousAlertIDs is now persisted to UserDefaults.
  • P1 (backend): Retention cron now has standalone time indexes on commits.committed_at / sessions.last_active_at / daily_usage_metrics.metric_date / yield_score_daily.day. Previous composite indexes with leading user_id would have degraded to seq scan at 2-3 year scale. Applied live as schema v0.23; EXPLAIN confirms Index Only Scan.
  • P3 (Swift 6 forward-compat): TeamView now reads userId from AuthState @mainactor cache instead of crossing into the APIClient actor boundary synchronously. WatchAppState's 3 Task-in-closure sites now bind self to a let before the Task hop, satisfying strict concurrency.
  • Architecture doc: docs/ARCHITECTURE.md consolidates the god-class decomposition rules (env-injection sites, MenuBarLabel cross-contract pattern, ProviderConfigWindowContent scene-body isolator, access-control preservation on forwarders, actor-crossing avoidance, SECURITY DEFINER + pg_cron backend patterns) from 14 PROJECT_FIX archives into one reference.

Builds: build 34 on macOS/iOS, versionCode 15 on Android.
Replaces the canceled v1.10.0 Apple Review submissions — Apple will review build 34 instead.

Install

  • macOS (outside App Store): download CLI-Pulse-Bar-v1.10.1.dmg below (notarized + stapled).
  • Android (sideload): download CLI-Pulse-v1.10.1.apk below.
  • macOS / iOS (App Store): v1.10.1 is in Apple Review; the App Store listing will update once approved.
  • Android (Google Play): v1.10.1 is in the Closed Testing track.

v1.10.0

22 Apr 05:22

Choose a tag to compare

CLI Pulse v1.10.0

A substantial release consolidating 15 internal slices shipped over a single development session on 2026-04-22. Covers backend hardening, a major client-side refactor, new retention and observability features, and cross-platform accessibility + localization passes.

Highlights

Backend (Supabase schema v0.19 → v0.22)

  • P2-5 Incremental yield score recomputeingest_commits now only rebuilds touched session-days, plus pg_advisory_xact_lock to serialize concurrent same-user ingest.
  • P2-4 + P3-5 Nightly pg_cron cleanupcleanup_expired_data_nightly (03:07 UTC, per-user user_settings.data_retention_days for sessions / alerts / snapshots / pairing log) and a new retention_cleanup_nightly (03:27 UTC) enforcing a global 18-month GDPR cap on commits / sessions / session_commit_links / daily_usage_metrics / yield_score_daily.
  • Defense-in-depth — both public cleanup_* wrappers now coalesce() the JWT role check so a NULL request.jwt.claims (direct DB connection) can't silently bypass the service_role gate.

AppState god-class decomposition (P2-3)

Four child ObservableObjects extracted from AppState so SwiftUI views only re-render on the state they actually observe:

  • AuthState (isAuthenticated / isPaired / userName / userEmail)
  • AlertState (alerts / suppressedAlertIDs)
  • ProviderState (providers / providerConfigs / providerDetails / costSummary / editingProviderKind)
  • SubscriptionManager decoupled (removed objectWillChange.sink anti-pattern)

Net effect: 11 @Published fields removed from AppState. A new MenuBarLabel view observes all four publishers because menuBarIcon / menuBarLabel span every domain.

New user-visible features

  • P3-4 iOS quota alerts — iOSAlertsTab now shows the 80% / 95% threshold-crossing alerts that previously only surfaced on macOS. Watch picks them up automatically via the iPhone PhoneSessionManager bridge.
  • P3-6 Launch-time config self-check — if SUPABASE_ANON_KEY is missing from a release build, both macOS (menu-bar popover) and iOS (root view) now render a persistent red banner explaining the failure instead of showing a silent, empty dashboard.
  • P2-7 ext Manual-refresh overlap fix — 7 user-triggered refresh sites (3 macOS + 4 iOS) now route through AppState.requestRefresh(), sharing the single-in-flight discipline with timer-driven refreshes instead of stacking overlapping fetches.

Accessibility (P3-3)

First-pass VoiceOver coverage for the high-traffic paths:

  • UsageBar (shared component → covers every provider card)
  • Provider cards on both platforms (compound summary label, nested bars drillable)
  • Menu-bar widget readout ("CLI Pulse, 3" instead of the raw SF Symbol name)
  • Icon-only buttons (refresh / gear / banner dismiss / config-error banner)

Localization (P3-2)

  • Fixed silent drift: 4 subscription.* description keys restored to ja / es / ko (Pro-tier paywall was previously showing empty text on those locales).
  • New L10n.a11y.* namespace for the 5 strings added by the accessibility pass, translated into all 5 locales (en / ja / es / ko / zh-Hans).
  • Full parity achieved: all 5 locales at 304 deduped keys.

Upgrade notes

  • No migration required — the v0.22 schema migration applied live to production on 2026-04-22 and has been smoke-tested (both pg_cron jobs active).
  • Existing installs refresh into the new reactive architecture on next launch.

Full changelog

See docs/PROJECT_FIX_v1.10_*.md files in the repo for per-slice archives with review verdicts (Gemini 3.1 Pro + Codex) and follow-ups.

Platforms shipped

  • macOS: DMG attached below, Mac App Store via ASC.
  • iOS: App Store via ASC.
  • Android: APK attached below, Google Play via AAB.

CLI Pulse Android v1.10.3

23 Apr 00:27

Choose a tag to compare

Android release v1.10.3 — synced with iOS version.

CLI Pulse v1.9.5

20 Apr 16:42

Choose a tag to compare

CLI Pulse v1.9.5

One account, many sign-ins — Supabase identity linking across iOS, macOS, and Android.

What's new

  • Identity linking: link Apple + Google + GitHub to the same account (Settings → Linked Accounts on every platform)
  • PKCE + state CSRF protection on all OAuth flows
  • Android: durable pending-flow storage — OAuth survives process death during the browser round-trip
  • iOS: App Intents + Shortcuts (GetStatus, GetProviderQuota, RefreshWidget)
  • macOS: Keychain AutoFill fix on login text fields
  • Onboarding + provider config editor polish
  • Watch: login / overview / providers refinements

Downloads

macOSCLI-Pulse-Bar-v1.9.5.dmg (signed + notarized, requires macOS 13 Ventura+)

AndroidCLI-Pulse-Android-v1.9.5.apk (requires Android 8.0 API 26+)

iOS / iPadOS / watchOS — available via TestFlight / App Store (build 32, v1.9.5)

SHA-256

macOS DMG: 50a5b8f78aa52239c03bba92333729c707b5c5149cc3fa81db3be3ebc692f43f
Android APK: 475d4dd672c366425d6dac10f689c6921868d30ad4692bd2aeeadb4a1fe4f6e1

CLI Pulse Android v1.9.5

20 Apr 16:40

Choose a tag to compare

CLI Pulse Android v1.9.5

Multi-provider Supabase identity linking — one Apple / Google / GitHub account maps to a single CLI Pulse profile.

What's new

  • Identity linking: link Apple + Google + GitHub sign-ins to the same account (Settings → Linked Accounts)
  • PKCE + state CSRF protection on all OAuth flows
  • Durable pending-flow storage — OAuth survives process death during the browser round-trip

Install

Download `CLI-Pulse-Android-v1.9.5.apk` and install. Requires Android 8.0 (API 26) or later.

Version

  • versionName: 1.9.5
  • versionCode: 13

CLI Pulse Android v1.9.4

20 Apr 01:15

Choose a tag to compare

Android release v1.9.4 — synced with iOS version.

CLI Pulse Android v1.9.2

19 Apr 00:38

Choose a tag to compare

Android release v1.9.2 — synced with iOS version.

CLI Pulse v1.9.1

17 Apr 15:23

Choose a tag to compare

CLI Pulse v1.9.1

Multi-platform AI usage monitoring — track tokens, costs, and sessions across Claude, Codex, Gemini, Copilot, Cursor, OpenRouter, GLM, and 23+ providers.

What's New in v1.9.1

Cost-to-Code Yield Score (preview)

  • New v2.0 yield score plumbing landed across the stack: schema, Python helper git_collector, Swift git_collector daemon wiring, Apple data layer, and a macOS YieldScoreCard surface.
  • Per-device HMAC-SHA256 project_hash keeps project paths private — only hashes leave the device.
  • Settings toggle + privacy disclosure for the new git_collector.
  • Yield score test coverage across helper + Swift.

Sprint 4 carried over from v1.9

  • PDF export for cost reports.
  • Snackbar error system (Apple + Android).
  • Daily cost forecast engine + dashboard card.
  • Slack / generic webhook enrichment.
  • GLM (智谱 AI) provider support.

watchOS / iOS build fix

  • UserSecret.secretFileURL now routes non-macOS platforms (incl. watchOS) through .applicationSupportDirectory. homeDirectoryForCurrentUser is unavailable on watchOS and was breaking the iOS scheme archive.

Downloads

Platform File Size
macOS 13+ (Apple Silicon) CLI-Pulse-Bar-v1.9.1.dmg 3.6 MB — notarized
Android 8+ CLI-Pulse-Android-v1.9.1.apk 3.7 MB
iOS / watchOS App Store

Installation

macOS

  1. Download CLI-Pulse-Bar-v1.9.1.dmg.
  2. Open the DMG, drag CLI Pulse Bar.app to /Applications.
  3. Launch from Applications. Notarized + stapled — Gatekeeper will not prompt.

Android

  1. Download CLI-Pulse-Android-v1.9.1.apk.
  2. Allow installs from unknown sources for your browser/file manager.
  3. Open the APK to install. Signed with the official upload key.

Mac App Store

Prefer auto-updates? CLI Pulse is also on the Mac App Store — same build, App Store delivery.

Known Limitations

  • Yield score is currently a preview. Per-device HMAC means yield attribution works only within sessions/commits collected by the same machine.
  • Android does not yet surface yield score on the dashboard.