Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- The usage footer refreshes as soon as a Claude or Codex turn ends, and the poll timer now ticks every minute so a snapshot lands as soon as it is eligible instead of up to fifteen minutes late. Both providers keep a five-minute floor between reads.

### Fixed

- A provider that was not signed in when the app launched no longer stays "not connected" forever; it is retried every 15 minutes, so signing in later recovers on its own.
- Clicking refresh while a background poll was running did nothing. The click is now queued and runs right after.
- An idle terminal no longer forks a `ps` every second to name its foreground process.
- A 429 from Claude's usage endpoint now backs off for 30 minutes instead of retrying on the normal cadence, with the reason in the chip's tooltip.

### Removed

- The usage footer no longer refreshes Claude Code's OAuth token. Those credentials belong to the `claude` CLI, which MonoCode already spawns for every turn and which refreshes them itself; writing to its keychain entry meant a rotation MonoCode could not save left the CLI holding a dead refresh token. The footer now only reads: an expired token shows `expired` until the next Claude turn renews it.

## [0.1.16] - 2026-08-28

### Added
Expand Down
6 changes: 4 additions & 2 deletions src-tauri/src/pty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -513,11 +513,13 @@ fn foreground_label(master_fd: i32, shell_pid: u32) -> Option<String> {
return None;
}
let pid = pgrp;
if pid <= 0 {
// An idle terminal is the common case and it is polled once a second per
// pane, so bail before process_label forks a `ps`.
if pid <= 0 || pid == shell_pid as i32 {
return None;
}
let label = process_label(pid)?;
if pid == shell_pid as i32 || is_shell_name(&label) {
if is_shell_name(&label) {
return None;
}
Some(label)
Expand Down
Loading