Releases: JasonYeYuhe/cli-pulse
v1.18.1
What's new
- Fixes a transcript rendering issue where bracketed text — such as array indices (
arr[0]), markdown reference links ([42]), and numbered footnotes ([1]) — was missing from rendered conversations on iOS and macOS. - Stability improvements for managed Codex sessions (defensive guards against schema drift in
codex exec --jsonevents). - Internal: build pipeline + version-tooling hardening (see PROJECT_FIX archive on the private branch for details).
Downloads
- macOS (Developer ID):
CLI-Pulse-Bar-v1.18.1.dmg(notarized + stapled). - Mac App Store + iOS App Store: rolling out via Apple review (build 57 of v1.18.1).
- Android: unchanged from v1.18.0 (this hotfix did not touch Android code).
- Helper CLI .pkg: see https://github.com/JasonYeYuhe/cli-pulse-helper-releases (v1.17.2).
CLI Pulse v1.18.0 — Codex exec rewrite + Claude peak indicator
CLI Pulse v1.18.0 — Mac
What's new
Codex managed sessions rewritten on codex exec --json
v1.16.x ran Codex sessions through a persistent ratatui-based PTY. The TUI broke down at small terminal sizes (Chinese characters wrapped one-glyph-per-line on iPhone) and at sensible sizes (full TUI chrome buried the actual chat). Fixed by switching to subprocess-per-turn codex exec --json, which emits clean JSONL events. Multi-turn context is preserved via codex exec resume <thread_id>. Replies arrive whole on item.completed (no token streaming yet) — the iPhone shows • Working… immediately and the full reply 5–15 s later. CJK now renders naturally on a single line.
Anthropic peak / off-peak indicator
The Claude provider card now shows the current peak window (weekdays 08:00–14:00 US Eastern) and a countdown to the next change. Ports steipete/CodexBar's open-source ClaudePeakHours (MIT) into our shared CLIPulseCore. iOS gets the indicator in the next App Store cycle.
Codex transcript formatter recognises new markers
Helper v1.17 emits ›/•/ℹ/✗/⚠ plain-text markers for user / agent / info / error / warning lines. The Mac formatter now matches all five explicitly, so short replies like • OK, • 是 (Chinese single character), • 2 no longer get silently dropped by the prose-shape fallback. Empty-body markers drop cleanly.
Helper-side ANSI sanitizer (v1.16.2 backstop, still in v1.18)
Cursor-move and OSC-title escape sequences are stripped server-side before upload. Used to fix the [0 q [0 q DECSCUSR garbage that leaked through to the iPhone transcript view.
Distribution
- Mac (Developer ID notarized):
CLI-Pulse-Bar-v1.18.0.dmg— drag into Applications. - Mac App Store: same version, queued for next ASC submission cycle (separate signing pipeline).
- iOS / Android: separate release tags.
- Companion CLI Helper: ships separately as a notarised
.pkgfrom cli-pulse-helper-releases. Latest is v1.17.1.
Verified
- 1081/1081 CLIPulseCore tests pass.
- spctl: accepted, source=Notarized Developer ID.
- stapler: validate action worked!
🤖 Generated with Claude Code
CLI Pulse v1.12.0 — runtime language switching + Sessions tab + PDF export
CLI Pulse v1.12.0 — runtime language switching + Sessions tab + PDF export
Localization
- In-app language switcher on macOS — globe icon in the menu-bar footer, immediately left of the refresh button. Tap to switch between English / 简体中文 / 日本語 / System Default. Changes take effect instantly without a restart and cover every surface: tabs, Settings, Onboarding, Remote Approvals, Subscription, Yield Score, exported PDFs, even the rarely-touched Folder Access and Provider Config screens.
- Apple
.stringsparity: 601/601/601 keys across en/ja/zh-Hans, zero diff. - Android
strings.xmlparity: 191/191/191 across en/ja/zh-rCN.
Sessions tab
- Sessions tab now reliably shows fresh Codex / Claude activity in real time, even when you're signed in and paired across multiple devices. Stale "ended" rows from prior helper uploads no longer linger in the list — only what's actually been written to JSONL in the last 5 minutes shows up.
- Cloud-route session merge: paired Mac users now see locally-detected JSONL sessions merged with cross-device cloud sessions in a single coherent list. Earlier draft missed fresh JSONL whose token cache hadn't caught up; now bypasses that race.
- Codex sessions display the actual project name (extracted from the rollout JSONL's
cwd) instead of a generic "Codex" placeholder. - Session row relative timestamp now anchors to
last_active_at, so synthesized rows don't immediately render as "5m ago" because of an internally-backdatedstarted_at. - Filter strips legacy helper-process artifacts (
/Applications/Claude.app/...,node --no-warnings ...) so they never resurface in cloud cache.
PDF export
- macOS Export → Export PDF Report now opens an
NSSavePaneldefaulting to~/Downloads/cli-pulse-report-YYYY-MM-DD.pdf. Cancel = no file. Save = file lands where you can find it; Finder reveals it automatically. No more silent temp-directory dumps. - PDF content is fully localized in the active language, including all section headers, table headers, summary keys, and the footer (now uses
Bundle.mainshort version, no longer hard-codedv1.9).
Provider quotas
- Claude (Designs / Daily Routines): new quota tiers display correctly with their own remaining counts; Sonnet-only tier no longer collides with weekly tier in the breakdown.
Subscription tier resolution (backend)
- Rank-safe
get_user_tier(): a Pro promo grant can lift a free user up but never downgrades an existing Team admin grant. Active paid subscription always wins. Backend-only change — no client UI difference. - New
promo_redemptionstable (service-role only) for future XHS / Twitter campaign grants. No client redemption UI; tier delta picks up on next refresh.
Stability
- iter21 hotfix included: CostForecastEngine no longer crashes on the last day of a month.
- iter21 helper sync: gradle exit code is now checked, so a stale APK can never ship if the macOS helper build silently failed.
- Sentry: auto-uploads dSYMs + Proguard mappings on every build. DSN keys rotated.
Tests
- 628/628 Swift tests pass (added 14 new across
LocaleOverrideStoreTests,SessionFreshnessFilterTests,CodexCandidateDetectionTests,PDFDestinationTests). - Helper Python: 33/33.
- Android:
testDebugUnitTestgreen.
Install
- macOS: download
CLI-Pulse-Bar-v1.12.0.dmgbelow; signed + notarized + stapled. App Store version (Mac App Store) is queued for review separately. - Android: download
CLI-Pulse-Android-v1.12.0.apkbelow for sideload. Play Store closed-testing release is uploaded separately. - iOS: queued for App Store review.
CLI Pulse v1.11.0 — major sign-in & onboarding polish
CLI Pulse v1.11.0 — major sign-in, onboarding & reliability polish
Sign-in & accounts
- Google / GitHub sign-in fix: resolved "OAuth state parameter is invalid" error that blocked sign-in on real devices. Root cause was a client-generated
statequery param colliding with Supabase's PKCE flow's server-side state management —code_verifieralone is the CSRF anchor. - Login screen modes: clearer Email Code vs Password modes — buttons no longer flip labels based on whether the password field is empty.
- Delete Account: now reliably surfaces server errors (token expired, network failures) with a clear alert, instead of silently signing you out while leaving your account intact server-side. macOS uses an inline confirmation flow that doesn't fight the menu-bar popover.
- Sign-out flow: now properly clears Remote Approvals and push-token state, so account-switching on the same device works cleanly without an app relaunch.
- APNs push registration: gated on authenticated state — no more "Failed to register for push notifications: Session expired" message on the login screen.
Onboarding (Mac)
- Top-right close (✕) button on every onboarding step + "Skip for now" on the Sign-In step. No more being trapped on the Welcome screen.
- After delete-account or sign-out: lands on Settings (Sign-In form) instead of an empty Overview, with a bottom Quit button on every signed-out screen.
- Welcome screen offers a clear pick: "Sign in to sync" vs "Use local mode".
Local mode (Mac, new)
- New "Use local mode" option for users who want collector data without an account. Tracks AI tool usage on this Mac only; nothing is uploaded.
- Local Mode guide card on Overview explains what's happening and how to switch to cloud sync later.
Cross-device sync (iPhone)
- Fixed: iPhone Dashboard could show "Waiting for data" forever even when the Mac was actively collecting. Same-account users now see their Mac data automatically — no manual device pairing needed. Dropped the obsolete
pairedgate that was tied to the helper-daemon model.
Provider banner (free plan)
- Fresh free-plan users no longer see "Disabled 23 providers" warnings on first launch. The plan-limit banner now only fires when actively-used providers genuinely exceed the limit (gated on canonical
activeProviderCount, not raw enabled-toggle count).
Remote Approvals hardening
- Concurrent decide on two devices no longer surfaces a raw database error — clean "Request already decided" message instead (
ON CONFLICT (request_id) DO NOTHINGidempotency, applied asmigrate_v0.34). - Closed several push-token registration races during sign-in / sign-out.
Under the hood
- 535+ swift tests across iOS / macOS / shared core; all passing.
- Backend RPCs unchanged in signature; helper / edge function unchanged.
- 14-commit hotfix series (iter8 → iter20) folded into this release.
Thanks for the bug reports!
CLI Pulse Android v1.18.1
Android release v1.18.1 — synced with iOS version.
CLI Pulse Android v1.18.0
CLI Pulse Android v1.18.0
This release brings Android into version parity with the Mac release. The shared backend / sync paths follow the same contract as macOS / iOS.
Distribution
- Play Console (AAB):
app-release.aab— uploaded via the Google Play console (separate flow). - Direct install (APK):
app-release.apk— sideload viaadb install.
Notes
- versionCode 26, versionName 1.18.0.
- No Android-specific UX changes vs. v1.15.0; this version exists primarily to keep the version triplet (Mac / iOS / Android) consistent for cross-device users.
🤖 Generated with Claude Code
CLI Pulse Android v1.15.0
Android release v1.15.0 — synced with iOS version.
CLI Pulse Android v1.13.0
Android release v1.13.0 — synced with iOS version.
CLI Pulse Android v1.11.1
Android release v1.11.1 — synced with iOS version.
CLI Pulse Android v1.11.0
Android v1.11.0 — synced with iOS / macOS v1.11.0 release. See v1.11.0 release for the full changelog.