Releases: JasonYeYuhe/cli-pulse
CLI Pulse v1.10.3 — Sentry crash reporting
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.dmgbelow, drag to/Applications. Notarized & signed. - Mac App Store / iOS App Store: coming once Apple approves this build.
v1.10.2
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.dmgbelow (notarized + stapled). - Android (sideload): download
CLI-Pulse-v1.10.2.apkbelow. - 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
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.
previousAlertIDsis 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;
EXPLAINconfirms 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
selfto aletbefore 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.dmgbelow (notarized + stapled). - Android (sideload): download
CLI-Pulse-v1.10.1.apkbelow. - 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
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 recompute —
ingest_commitsnow only rebuilds touched session-days, pluspg_advisory_xact_lockto serialize concurrent same-user ingest. - P2-4 + P3-5 Nightly pg_cron cleanup —
cleanup_expired_data_nightly(03:07 UTC, per-useruser_settings.data_retention_daysfor sessions / alerts / snapshots / pairing log) and a newretention_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 nowcoalesce()the JWT role check so a NULLrequest.jwt.claims(direct DB connection) can't silently bypass theservice_rolegate.
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)SubscriptionManagerdecoupled (removedobjectWillChange.sinkanti-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
PhoneSessionManagerbridge. - P3-6 Launch-time config self-check — if
SUPABASE_ANON_KEYis 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.22schema 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
Android release v1.10.3 — synced with iOS version.
CLI Pulse v1.9.5
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 +
stateCSRF 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
macOS — CLI-Pulse-Bar-v1.9.5.dmg (signed + notarized, requires macOS 13 Ventura+)
Android — CLI-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
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 +
stateCSRF 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
Android release v1.9.4 — synced with iOS version.
CLI Pulse Android v1.9.2
Android release v1.9.2 — synced with iOS version.
CLI Pulse v1.9.1
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, Swiftgit_collectordaemon wiring, Apple data layer, and a macOS YieldScoreCard surface. - Per-device HMAC-SHA256
project_hashkeeps 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.secretFileURLnow routes non-macOS platforms (incl. watchOS) through.applicationSupportDirectory.homeDirectoryForCurrentUseris 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
- Download
CLI-Pulse-Bar-v1.9.1.dmg. - Open the DMG, drag
CLI Pulse Bar.appto/Applications. - Launch from Applications. Notarized + stapled — Gatekeeper will not prompt.
Android
- Download
CLI-Pulse-Android-v1.9.1.apk. - Allow installs from unknown sources for your browser/file manager.
- 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.