# CHANGELOG.md · lucenx/codexbar-plasma

[View on GitCafe](https://git.cafe/lucenx/codexbar-plasma/blob/main/CHANGELOG.md)

Repository: [lucenx/codexbar-plasma](https://git.cafe/lucenx/codexbar-plasma)

Visibility: public

Requested revision: refs/heads/main

Commit: ccd67937717f30ac89b3bdf39f6753838ca03b9c

Blob: d6a032030ac95fa6918a74276240607217e99cc4

Size: 80594 bytes

[Immutable source](https://git.cafe/lucenx/codexbar-plasma/blob/ccd67937717f30ac89b3bdf39f6753838ca03b9c/CHANGELOG.md?format=markdown)

```
# Changelog

Notable changes to the standalone Plasma widget are recorded here, following
[Keep a Changelog](https://keepachangelog.com/en/2.0.0/).
The upstream `codexbar` CLI has its own release history.

This file starts with version 0.2.35, summarized from its
[published notes](https://github.com/Lucenx9/codexbar-plasma/releases/tag/v0.2.35).
For earlier versions, see [GitHub Releases](https://github.com/Lucenx9/codexbar-plasma/releases).

## Unreleased

### Added

- Install or reuse and immediately select the private official CLI directly
  from the missing-CLI popup, with preparation progress, retryable failures,
  and a Settings action for existing external installations.

### Security

- Keep AI Insights usage snapshots out of process arguments. Pass them through
  private one-use files, removed before wallet access or AI requests.
- Omit filesystem paths from shared support reports, including custom home
  directories and absolute, relative or tilde-qualified paths in Diagnostics errors.

### Fixed

- Monetary amounts that round to zero no longer retain a negative sign.
- Preserve proportional cost-history bars for very large finite cost and token
  amounts instead of displaying every overflowing percentage as a full bar.
- Align Diagnostics support report preview button with the `DisclosureButton`
  primitive property contract.
- Verify an existing managed CLI before reusing it during preparation. Report
  unusable copies without selecting them or repeating a failed usage refresh.
- Give the Overview and Usage & Spend provider identity tiles the same subtle
  border as the provider header tile.
- Keep provider titles literal in the AI Insights Back button, including markup
  and ampersands.
- Correct translated provider-default labels, settings references, and grammar.
  Use consistent localized names for AI Insights, tokens, providers, and the CLI
  across the five shipped catalogs.

## 0.2.50 - 2026-10-18

### Added

- Add Future AGI and Munito provider names, icons, colors and links. Offer secure
  Munito API-key setup with CLI 0.77.0 or later; Future AGI setup remains blocked
  on an official Linux secret-key writer.

### Changed

- Keep AI Insights concise in Overview and open its full summary and highlights
  in a dedicated analysis view inside the popup. Returning restores the original
  view and scroll position; navigation never starts generation or a cost scan.

### Fixed

- State in settings that CodexBar saves provider changes immediately, and tell
  users to update external CLI installations through their original method.
- Reveal truncated quota-window titles, reset descriptions, and provider-chart
  titles and units on hover, keeping CLI text literal in their tooltips.
- Show Claude percentage-only quotas without repeated "limited detail" labels
  or a panel icon badge. Explain unavailable details once in the panel tooltip
  and accessible description. Name missing resets while preserving supplied
  resets and forecasts.
- Keep the selected Usage & Spend chart day attached to its date across
  refreshes. Clear the selection when that day disappears or the history range
  or metric changes.
- Keep Sessions cards in place across 30-second rescans with an unchanged
  session count, preserving hover and keyboard focus on the copy action.
  Session ages now follow the latest scan, and a
  `working` session is highlighted like other live states.
- Name each quota window in Overview: every provider row now shows labelled
  primary and secondary meters, such as Session and Weekly, with their resets,
  instead of one unlabelled percentage that could hide an exhausted weekly
  window. Keyboard focus also reveals a truncated row's full text.
- Explain account discovery results without named accounts instead of showing
  nothing after **Accounts…**: the popup says the provider's default account is
  used, or that CodexBar cannot switch accounts for that provider, in which case
  its **Accounts…** entry is disabled.
- Clarify that local Codex cost estimates do not follow the account selected
  in the widget; account selection changes the displayed quotas.
- Refresh selected Codex accounts through the supported account enumeration,
  avoiding the CLI's "codex does not support token accounts" error after an
  account click. Missing or failed selections never borrow another account's quotas.
- Keep quota warning and limit-reset notifications attached to each named usage
  window's CLI ID, so reordering windows with the same label cannot invent a
  quota crossing or report a reset for the wrong window.
- Show why a provider fetch failed in **Inspect redacted settings**: the
  redacted fetch error and each attempt's outcome now appear instead of only
  an attempt count.
- Stop a hung provider diagnostic in provider settings at the same 50-second
  shell bound as the Diagnostics page, so it no longer outlives the dialog.
- Keep escaped and unterminated quoted account, organization, workspace and
  project identifiers fully redacted in support reports.
- Treat a CLI process reply without an exit status as a failure in provider
  settings, provider rosters, Diagnostics and notification actions, so a
  missing status can no longer confirm a saved key or a clean diagnostic.
- Keep a provider write error visible when an in-flight provider list finishes
  after it, and clear an earlier AI Insights verdict when the API key prompt
  is cancelled.
- Keep empty cost records from displacing real days in the model cost history,
  and reject impossible calendar dates such as February 30 as a cost scan day
  instead of rolling them into the next month.
- Never split an emoji or other paired character when truncating notification
  titles and bodies, AI Insights summaries, cost labels, support reports, or
  other display text.
- Simplify terminal quick installation to `curl ... | bash` with a small
  bootstrap that downloads the full installer before execution, preserves
  interactive prompts, and supports other calling shells and headless setup.
  Bound the initial download and provide an unattended command that propagates
  download failures.
- Show a Close tooltip on dismissible notes for pointer hover and keyboard
  focus, matching every other icon-only ToolButton in the applet.
- Align popup Usage dashboard summaries in equal columns with the same label
  spacing as Cost summaries, and reveal truncated summary labels and values on hover.
  Match the identified Codex subtotal heading to other sections and emphasize
  its loaded total.
- Reject usage, cost, account and provider-list JSON from failed CLI processes
  without discarding the CLI's supported structured errors or healthy partial
  results. Failed refreshes preserve existing data under their retention rules,
  including cost argument errors and returning from an unsupported history range.
- Make terminal quick-install instructions easier to follow, clarify the
  required private CLI selection, and report setup progress, the installed
  widget version, and all missing command-line dependencies together before
  running platform and user checks.
- Report malformed private CLI setup replies as a CLI setup failure while
  preserving the successfully installed widget.
- Align provider icons across Popup settings lists, follow the theme's text
  color, and give stacked restore actions consistent spacing.
- Keep popup tabs at a stable width when selected. Use consistent small
  header metadata, section headings and provider-row padding, and align
  provider actions more closely with the content.
- Preserve every typed digit in Settings number fields with the KDE desktop
  style. Keep seconds, days, hours and percent-used units in their labels.
- Point provider source-override guidance to Diagnostics.
- Name provider option controls, override fields and diagnostic output for
  screen readers, including each field's Set and Save actions.
- Retire Settings provider-list requests immediately when the CLI path changes,
  and clear the previous CLI's list even while Panel providers is collapsed.
- Show the predictive-notification explanation on keyboard focus as well as hover.
- Preserve keyboard focus in provider rows while a toggle is pending and after
  the list refreshes, without moving focus away from another control.
- Clear outdated provider diagnostics after a successful configuration change,
  including API key setup, and ignore older diagnostic replies. Failed changes
  and cancelled prompts keep the last diagnostic result available.
- Keep known provider setup controls visible while reloading the same CLI,
  preserve a provider's enablement while its API key prompt is open, and report
  missing write replies as command failures.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.49...v0.2.50)

## 0.2.49 - 2026-10-15

### Added

- Optional manual identified Codex token subtotals in Usage & Spend, with
  separate local and local + SSH actions, an independent UTC day window,
  source-availability and excluded-request notices, and no inferred prices.
  Requires official CLI 0.75.0 or later and GNU `timeout`, bounds the command's
  process group independently of the frontend deadline, and remains off by default.

### Fixed

- Complete Claude Platform fallback metadata from CodexBar 0.76.0, including
  its name, shared Claude icon and color, alias, and Console links. Linux cookie
  setup remains unavailable in the official CLI.
- Preserve an announced pace warning across incomplete readings with the same
  reset timestamp, preventing duplicate warnings when complete data returns.
- Restore CLI-reported reset countdowns, expected usage and run-out forecasts
  for Claude percentage-only readings in popup and panel views, including
  structured forecasts in privacy mode. Missing details
  stay omitted; estimated/unknown data and automatic quota safeguards keep their
  existing behavior.
- Recognize Claude CLI's `percentOnly` usage confidence as limited detail
  instead of unknown. Preserve it through privacy mode, retained usage and
  quota caches, with translated panel/popup text and a distinct panel badge.
  Existing protections for incomplete quota data remain in place.
- Accept the bounded third-party notice file shipped in official CLI 0.76.0
  archives, so managed updates can install the release without weakening the
  archive allowlist, checksum checks, or staged version probe.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.48...v0.2.49)

## 0.2.48 - 2026-10-15

### Added

- Add fallback names, provider icons, colors, and links for Parallel,
  fal, and FLORA from CodexBar 0.75.0. Offer secure single API-key setup for
  Command Code and fal with CLI 0.75.0 or later; keep incomplete FLORA and
  unsupported Parallel key setup hidden.
- Show official CLI plan renewal and expiration dates separately from quota
  resets. Date-only values keep their calendar day without a time; privacy mode
  and retained quotas hide subscription dates. Missing or invalid dates stay omitted.
- Complete fallback names, provider artwork, colors, documentation and dashboard
  links for the nine providers added in CodexBar 0.74.0. Offer supported single
  API-key setup for Tavily, Linkup, Aerostack, Sail Research, and Sofya; keep
  incomplete or macOS-only setup actions hidden for the other four.

### Fixed

- Use the official CLI's usable Codex reset-credit inventory instead of its
  potentially stale legacy aggregate. A current zero hides expired credits;
  older payloads retain their existing fallback.
- Bound and redact provider settings JSON parsing errors through the shared
  reply protocol, preserving list, write, and diagnostic compatibility.
- Preserve the last notified quota threshold across estimated or unknown-confidence
  usage, so unchanged measured usage does not repeat a quota warning.
- Qualify CLI-estimated usage percentages in the panel and popup, preserving
  confidence through privacy mode, failed refreshes, and new quota caches.
  Treat explicitly empty confidence as unknown.
  Estimated and unknown-confidence rows no longer drive quota alerts, warning
  colors, reset/pace forecasts, conditional visibility, or automatic provider
  ranking; AI Insights omits them from account-quota facts.
- Keep the last successful provider settings diagnostic and show an error when
  its CLI process fails, times out, or returns an invalid response. Preserve
  useful diagnostic reports of failed provider fetches when the command succeeds.
- Keep the Diagnostics command path and Use PATH button inside narrow settings
  pages with larger text, so the form's explanations and fields are not clipped.
- Reject enabled-provider lists from failed CLI processes in Popup and Panel
  settings, and show the CLI error or exit code instead of selectable providers.
- Reveal truncated AI Insights metadata on hover and provider identities in
  settings on keyboard focus. Align the AI Insights enable hint with its label.
- Keep popup refreshes, update checks, and settings requests independent across
  widget instances and reopened pages. Matching local counters could make
  Plasma reuse another request's process and return its older result.
- Reject AI Insights success replies from failed helper processes in the popup
  and settings, including model lists and wallet-operation confirmations.
- Preserve the last successful session list when a failed CLI scan writes valid
  JSON, and reject widget updater success reports from failed processes.
- Keep provider detail sections visible and restorable when live usage arrives
  through Qt's native list representation.
- Draw the peak reference line for provider detail bar charts, matching local
  cost charts.
- Keep the default-account and reload button icons consistently sized beside
  the account loading indicator.
- Keep cost refreshes and legacy range labels usable when the CLI reports
  object or array period metadata. Healthy provider costs continue to update.
- Preserve cost refreshes when All history contains object or array date fields.
  Malformed dates no longer interrupt healthy providers or expand the range.
- Ignore dates after the reported scan day when sizing All history, so future
  cost records cannot add empty days or lower the daily cost and token averages.
- Keep hidden popup row and detail-section choices when long provider IDs
  require JSON escaping. A valid saved list could previously exceed the read
  limit and make every saved choice disappear.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.47...v0.2.48)

## 0.2.47 - 2026-10-11

### Added

- **Providers → Settings and diagnostics** can save a provider's source mode
  with official CLI 0.73.0 or later. Automatic clears its saved override;
  unsupported modes show the CLI error, and General's global override keeps
  precedence for widget requests. Source saves wait for provider-list reloads
  and pending descriptor operations for the same provider; that provider's
  descriptor edits and actions wait for its source save, and a provider-list
  reload requested during a source save runs once the save finishes.
- Bundle a fallback name, an original icon, the dashboard and documentation
  links, and the brand color for Langdock, which official CodexBar 0.73.0 adds
  to the registry. It needs a macOS-only browser-profile web source on Linux,
  so it has no API-key setup action.
- **General → Updates** has a **Check for widget updates now** button that
  works even with automatic checks off, and an **Install update** button once a
  newer release is known, so an outdated widget can be updated by hand. The
  button disappears immediately after a successful installation, or after a
  restart once the widget runs that release or a newer one installed another
  way. Failed attempts keep the button available for retry. The last status and
  check time stay visible with automatic checks off.

### Changed

- Popup settings use small secondary text for helper notes. Icon actions in
  Panel, Popup and Providers settings and popup refresh, copy, share, hide and
  tab scrolling show their labels on keyboard focus as well as hover. Truncated
  provider detail section titles, row labels and values reveal their complete
  displayed text on hover.
- Polish popup visuals: provider detail section titles use the same heading
  style as sibling sections, detail meters use the compact meter height, usage
  rows keep whole-pixel spacing, Spend history menus use the plain-text menu
  items, the cost chart shows a focus ring when reached with Tab, and the cost
  "Show details" toggle uses the same disclosure arrow as the other popup
  sections.
- Follow the KDE text guidelines for ellipses: labels that open a dialog or
  report progress use the "…" character instead of three periods, the provider
  search field reads "Search providers", and the empty popup heading drops its
  trailing period. Existing translations keep matching.
- Popup placeholder titles drop their trailing period too: "CodexBar CLI not
  found", "No overview data available", "No local token or cost history", and
  "No local agent sessions found". The General settings CLI status sentence
  keeps its period.

### Fixed

- Give the provider header icon surface visual definition with a subtle
  theme-aware border, matching the identity tile styling in
  `OverviewProviderRow.qml`.
- Keep the Panel settings preview's scenario selector aligned with the rendered
  scenario after a keyboard or mouse choice followed by an external change.
- Compact token counts use the regional decimal mark, like the costs beside
  them: an Italian, German, French, Spanish, or Brazilian Portuguese locale
  shows "1,5K tokens" next to "$1.234,50" instead of "1.5K tokens".
- Keep a custom usage refresh interval of 1000 seconds or more. The settings
  field shows it with a locale group separator, such as "1,200 seconds", and
  leaving the field read only the leading "1", so the widget refreshed every
  second.
- Spell out and pluralize usage refresh intervals in General settings, such as
  "1 minute", "5 minutes", and "120 seconds", matching the "Check every" hours
  field instead of the abbreviated "5 min" and "120 s".
- Quiet days in the Usage & Spend activity heatmap no longer look emptier than
  the padded no-data cells: every slot shares the faint no-data base and a
  recorded day tints it, in light and dark themes.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.46...v0.2.47)

## 0.2.46 - 2026-10-08

### Added

- Collect and copy an offline Diagnostics support report with installed widget,
  Plasma/Frameworks/Qt and CLI versions, selected/system CLI paths and management,
  enabled provider IDs, the latest Diagnostics error, and module/tool checks.
  Preview the report before sharing; home usernames and credentials are redacted.

### Changed

- Collapse popup account lists longer than three choices behind an Accounts
  disclosure, keeping quotas visible and closing the list after selection.
  Account action tooltips also appear on keyboard focus.

- Use a prebuilt minimal Plasma CI toolchain, skip runtime jobs for verified
  editorial-only changes while retaining fast checks and packaging, and build
  release archives without downloading the desktop image.
- Report CI static checks before the Plasma environment is ready, and run
  the full check and graphical smoke suites weekly and on manual requests.
- Check for GitHub Actions updates with Dependabot every Monday at 09:00
  (`Europe/Rome`) instead of monthly, keeping updates grouped in one PR.
- Show provider incidents in the popup as a compact pill tinted with the
  severity color instead of a full-width banner.
- Show cost-trust and Spend information notes as quiet footnotes with a small
  icon instead of colored banners; errors with recovery actions are unchanged.

### Fixed

- Show reset clocks, cost dates, and "Updated" times as formatted text again
  instead of the literal "[object Object]".
- Restore the previous widget package after a failed upgrade or invalid installed
  metadata, preserving the bundled helper needed to retry.
- Keep actionable CLI installation guidance visible across popup tabs when the
  executable is missing, including the Managed CLI setup route.
- Respect the widget update-check interval after restarting Plasma instead of
  forcing another check when the last successful check is still recent.

- Probe the selected CLI offline before offering its first managed installation,
  so a working external copy receives the promised confirmation without a prior
  release check. Changing the command dismisses stale confirmation details.
  Failed or unrecognized probes keep the first install disabled with an offline
  retry action.
- Retry failed CLI release checks after one hour even when a recent successful
  check belongs to the previous command, including malformed replies and timeouts.
- Avoid premature account-label truncation in provider headers by rounding
  its maximum width up to a whole pixel, consistently with the plan label.
- Stop AI Insights helpers and their wallet/dialog children when a request is
  cancelled, enforce HTTP deadlines even for trickled responses, and reject
  excessively nested JSON and malformed Ollama addresses with bounded errors.
  Report an unavailable wallet when its settings status check times out.

- Reveal truncated and icon-only popup tab names on keyboard focus, identify
  the Overview subset out of the full provider roster, and keep long legacy
  usage-dashboard values inside the popup with full-text hover tooltips.

- Keep dated cost-history rows inside the selected period when duplicate dates,
  malformed records or an incomplete scan disable calendar gap filling.
- Keep account lists, incident notices, and error messages scrollable in the
  popup so many accounts, long messages, or larger fonts cannot hide quotas
  and recovery actions outside the window.
- Start provider details at the top after switching provider or account,
  while keeping the scroll position during a refresh of the same account.
- Keep monthly credit amounts visible when popup pace text is disabled.
- Show the installed widget version in Diagnostics instead of "Unknown", and
  give its command-path field an accessible label and keyboard label target.
- Treat only valid 127/8 IPv4 addresses as local in the AI Insights Ollama
  privacy hint, so malformed numeric hosts are no longer described as keeping
  usage statistics on this device.
- Reject non-finite managed CLI state timestamps so corrupted `NaN` or infinity
  values cannot bypass the daily automatic-update throttle.
- Preserve unknown CLI status indicators such as `constructor` as literal status
  text instead of resolving inherited object properties while localizing known
  incident labels.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.45...v0.2.46)

## 0.2.45 - 2026-10-07

### Added

- Bundle fallback names, original icons, dashboards, documentation links, and
  brand colors for the Muse, LithosAI, and WorkBuddy providers that official
  CodexBar 0.71.0 and 0.72.0 add to the registry. All three are cookie-only
  with a macOS-only web source on Linux, so they keep Documentation and
  Dashboard links without an API-key setup action.

### Changed

- Join the Overview header, an Overview row's account and freshness note, and
  the AI Insights source line with the same "·" separator the Sessions and
  Usage & Spend headers already use, instead of a hyphen.
- Hide the latest-day summary under a provider's cost chart while a day is
  selected: the chart readout and the "Details for" heading already name that
  day and its amount.

### Fixed

- Write reset clock times, cost quota weeks, and "Updated" times in the
  regional format: translated day and month names, the locale's 12- or
  24-hour clock, and each translation's word order, instead of English names
  such as "Wed 14:30" or "Oct 7, 14:30" in every language.
- Point the managed CLI guidance in General to the Managed CLI section below
  instead of telling the reader to open General, the page they are already on.
  Diagnostics still names General.
- Keep one standard popup height across every content section (Overview,
  provider tabs, Usage & Spend, Sessions) instead of resizing the dialog to
  each section's content. Short sections now leave scroll slack rather than
  shrinking the window; the loading, empty-setup, and missing-CLI states
  stay compact.
- Keep the minus sign of a negative change at the start of an AI Insights
  summary or highlight instead of removing it like a list bullet, which
  turned a drop such as "-45%" into an increase.
- Reveal truncated provider update timestamp in a tooltip on hover in the
  provider header, matching title, account, and plan labels.
- Reveal truncated Overview tab title in a tooltip on hover, matching provider
  tabs and other global tabs.
- Translate the advanced provider override to its CLI name for usage and cost
  requests. With CLI 0.67.0, an override such as `abacus` or
  `alibabatokenplan` previously returned Codex usage instead.
- Report an unidentified CLI installation as such in the CLI update check
  instead of "cannot be compared automatically".
- Keep the first successful account record when CLI account discovery returns
  duplicates, so an earlier failed record no longer hides valid quotas.
- Hide the empty Codex "Extra usage: Credits 0.00" section that CLI 0.67.0
  reports for accounts without a monthly credit cap. Purchased credits still
  appear in the Credits row, and capped accounts keep their allowance meter.
- Stop offering an ineffective API key setup action in provider settings for
  ten more providers whose released CLI rejects API-key configuration
  (Alibaba Token Plan, Bedrock, Command Code, DeepSeek, Grok, Manus, Mimo,
  Perplexity, StepFun, and Windsurf); they retain Documentation and Dashboard
  links, while settings show “Use provider login/source”.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.44...v0.2.45)

## 0.2.44 - 2026-10-02

### Changed

- Restore hidden usage bars directly from the provider's popup tab, even when
  every bar is hidden. Popup settings still list saved rows that are not in the
  current provider result.

### Fixed

- Remove replaced managed CLI releases after one hour instead of seven days,
  keeping only the current and previous copies, so near-daily upstream updates
  no longer accumulate hundreds of megabytes on disk.
- Bound Diagnostics resolved command label, error message, and output scroll
  view to 24 grid units, matching the form width of other settings fields.
- Validate upstream CLI update release URLs with safeReleaseUrl and suppress
  the notification action button when the release URL is missing or untrusted.
- Reveal full provider plan text in the popup header without artificial
  middle-elision truncation when space is available.
- Stop offering an ineffective API key setup action in provider settings for
  Mistral and Abacus AI, whose released CLI rejects API-key configuration; they
  retain Documentation and Dashboard links, while settings show “Use provider
  login/source”.
- Disabling AI Insights in settings retires pending connection tests and wallet
  operations. Changing the model clears the previous connection-test result.
- Stop offering popup row hide actions when the saved hidden-row list is full;
  restoring a row makes the action available again.
- Show the generic icon for providers without bundled artwork instead of a
  blank space, and reveal truncated provider names and IDs on hover in settings.
- Align provider cost history heading and daily average text along their text
  baseline.
- Reveal full provider account text in the popup header without artificial
  middle-elision truncation when space is available.
- Action-less notifications whose text mentions `--action=` no longer wait on
  the clickable-notification deadline; only notifications with a real action
  use the longer timeout.
- Automatic cost scans run about once an hour again; the hourly timer could
  land just short of the cooldown and skip an hour, so scans came every two.
- An ongoing provider incident is no longer announced again after its status
  page could not be reached for one refresh.
- Hidden extra quota windows stay hidden when quotas are restored from the
  cache after a restart; the cache now keeps their CLI window IDs.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.43...v0.2.44)

## 0.2.43 - 2026-09-27

### Added

- Hide titled provider detail sections in the popup. Restore individual sections
  from the popup's collapsed **Hidden detail sections** list or all sections for
  a provider from Popup settings, without saving CLI titles in preferences.

- **Usage & Spend** offers **Month to date** and **All history** ranges beside
  7, 30, and 90 days, using the calendar periods of CLI 0.67.0 or later. An
  older CLI shows which release they need, and the day ranges keep working.

- Hide individual usage rows from a provider tab in the popup with the button
  that appears beside their percentage on hover or keyboard focus, and restore
  them from **Popup → Hidden usage rows**. The hidden button does not shift the
  percentage, which stays aligned with the end of its meter. The panel,
  Overview, and notifications keep every row.
- Cost history rows, model rows, and a selected day in the provider cost
  details state how many incomplete requests the CLI excluded from their
  amounts.
- Bundle the fallback name, icon, documentation link, dashboard link, and
  brand color for the `Aixy`, `Raycast`, and `xKiro` providers that official
  CodexBar 0.67.0 adds to the registry. Aixy and xKiro offer the widget's
  API-key setup; Raycast needs a macOS-only web source. Aixy rows are titled
  "Budget" and "Secondary budget", and xKiro's row "Daily free tokens".

### Changed

- Usage rows of providers the widget has no translated title for use the
  CLI's own lane title, such as `Memory`, instead of a generic `Session`,
  `Weekly`, or `Opus`.

- Cost lines in Usage & Spend and provider cost sections separate the amount
  and token count with `·`.

- The Sessions tab rescans every 30 seconds while it is visible, or at the
  refresh interval when that is shorter, so a session no longer stays marked
  active minutes after it went idle, and ended sessions leave the list sooner.
- Session cards mark the active state with the theme's positive color instead
  of the provider color, and dim idle sessions. They keep one copy action,
  beside the title, and drop the copy action for the details line.
- Session details use `·` as the separator and show the host only when
  sessions come from more than one host.
- Provider popup polish: reset credits join the Credits group as a labeled row
  instead of a separate section, unselected provider tabs dim their icon while
  keeping the provider hue, the connection-error state centers a muted status
  glyph below its banner, account buttons show a tooltip only when their label
  is cut short, and the accounts header no longer shifts while loading.
- The shared usage card aligns the token and cost captions on one line, uses
  the same muted caption style for its Providers and Top models headings, and
  drops the outline from each row so the rows no longer read as nested cards.

### Fixed

- Reveal cut-short provider header titles, accounts, and plans in a tooltip on
  hover, matching tab and account delegate behavior.
- Expand the panel status dot hover target so hovering over the status
  indicator reliably shows its incident tooltip.
- Global popup tabs reveal their title in a tooltip when their text label is
  truncated on narrow layouts, matching provider tab behavior.
- Hardened panel settings preview against invalid credit balances, clamped
  preview container geometry against negative values, and ensured empty
  provider icon fallbacks resolve to `"view-statistics"` rather than invalid
  asset paths.
- Name the Plasma widget's author in its metadata and license notice while
  retaining CodexBar's upstream copyright notice for reused icons. The bundled
  Poe icon now has its separate CC BY 4.0 attribution in the package.
- **Diagnostics → Versions** no longer keeps showing the **System CLI (PATH)**
  row after the command path changes, before the selected command is checked
  again. The CLI version shows **Checking...** during its first check.
- Applying settings no longer undoes usage rows or detail sections hidden or
  restored in the popup while the settings window was open. Plasma writes every
  value of the current page, and the General and Popup pages now follow the
  popup's changes while keeping their own pending restores.
- Keep quota warning and reset state when a refresh temporarily omits a usage
  window, avoiding duplicate warnings and missed reset notices when it returns.
- Preserve an unapplied history-window choice in General when the popup changes
  its calendar period; days and calendar mode now stay pending together.
- Keep the last provider list and show the command failure when the CLI returns
  JSON with a nonzero exit status.
- A provider's cost history rows, **Peak** line, latest-day summary, and
  **Details for** title use the system locale's short date, like its chart,
  instead of the CLI's `YYYY-MM-DD` keys.
- With CLI 0.67.0, cost ranges keep their translated title, such as
  "Ultimi 30 giorni", instead of the CLI's English "Last 30 days".
- Align provider detail row key labels with the primary value's top line when a
  secondary value (subtitle) is present, so the key label no longer floats between
  the primary and secondary lines.
- The provider **Cost history** peak line names the day its seven rows
  highlight, instead of an older day of the range that the rows do not show.
- **Test connection** in the AI Insights settings updates the API key status,
  so a key that the first wallet lookup missed, for example while the wallet
  was locked, shows as stored and can be replaced or removed.
- Exclude `o1-preview` and `o1-mini` snapshots from OpenAI model discovery:
  they lack `json_schema` structured outputs, so selecting them always failed.
- Give the Popup settings category its own sidebar icon instead of reusing the
  Providers icon, so the two pages are distinguishable at a glance.
- Bound the implicit width of the CLI release, managed CLI, and version status
  text in General and Diagnostics to the same 24-grid-unit measure as the other
  settings hints, so long status lines cannot force the form into narrow mode
  or push content past the viewport.
- The activity heatmap's weekday rows start on the locale's first day of the
  week and no longer rotate as days pass; empty cells close the newest week.
- Chart axis, readout, and heatmap dates use the locale's short date format
  instead of the CLI's `YYYY-MM-DD` keys.
- OMP sessions are labelled `OMP` instead of the generic Pi provider name.
- Restore the **Docs** menu entry for the `ClinePass` and `LongCat` providers
  in the popup and Providers settings. Both guides exist in the official docs
  tree, but the fallback table had no rows for them.

### Security

- Keep credential-redaction lookahead when filtering loader diagnostics, so a
  key crossing the inspection boundary cannot leave an unredacted prefix.
  Credential-like paths still allow nonfatal loader warnings to be filtered.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.42...v0.2.43)

## 0.2.42 - 2026-09-25

### Added

- Bundle the fallback name, icon, documentation link, and dashboard link for
  the `Atlas Cloud`, `DevPass`, `Vercel AI Gateway`, and `llmman` providers
  that official CodexBar 0.66.0 adds to the registry, plus brand colors for
  all but Vercel AI Gateway, whose white mark would vanish on a light theme.
  All four offer the widget's API-key setup. DevPass rows are titled
  "Plan credits" and "Premium weekly", and llmman's daemon memory row is
  titled "Memory" instead of "Session".

### Fixed

- Center content vertically in popup tab buttons.

- Codex no longer treats a reset-credits record with a missing, zero, or
  invalid count as extra popup data, so an error-only Codex card is still
  recognized and no empty extra section is reserved.
- Harden the TODO gate helper: it refuses Decisions redirects instead of
  following them with the API key, rejects oversized responses, and bounds
  its git probes with a timeout.
- Report staged checksum and VERSION files that are not decodable text as
  unverified instead of a generic error, matching other refused downloads.
- Keep the stored AI Insights model when opening settings. Opening and saving
  the page no longer clears the model, so AI Insights stops asking for
  reconfiguration when nothing was changed. The stored model is also offered
  as the initial picker entry, so the menu is not empty on open before a
  connection test lists the service.
- Report OpenRouter failures that arrive inside a successful reply, such as a
  rate limit or exhausted credits, with their real reason instead of an
  unexpected-format error, so a rate limit also pauses further requests for
  the response's `Retry-After`.
- Leave OpenAI models that AI Insights cannot use out of the model list: the
  Responses-only `-pro` and deep-research models; GPT-4, GPT-4 Turbo, and
  GPT-3.5; `chatgpt-4o-latest`; and GPT-4o snapshots before `2024-08-06`,
  which lack structured outputs. **Test connection** no longer reports them
  as usable.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.41...v0.2.42)

## 0.2.41 - 2026-09-24

### Added

- Move between popup tabs with Home and End, and wrap the Left and Right arrows
  around from the last tab to the first and back, following the common tab
  keyboard pattern.
- Describe popup quotas to screen readers. Overview rows now announce their
  quota and reset beside the detail line, and provider tabs announce the quota
  their underline draws, stale usage, and a refresh error that was previously
  shown only by dimming the tab.
- Show the full provider name when hovering a labelled popup tab whose name is
  cut short, and the full title and detail line when hovering an Overview row
  whose text is cut short.
- Add optional AI Insights (beta), off by default: a short Overview card that explains
  quota risk, forecast exhaustion, and week-over-week spending or token changes
  using a local Ollama model, OpenRouter, or OpenAI. It writes in the widget's
  interface language, sends only aggregated statistics, keeps API keys in the
  system wallet, and generates only on request unless an interval is chosen.
- Draw a progress meter under provider detail rows that report a used/total
  pair, such as Bifrost budgets. Rows without one keep their text unchanged.
- Add a square CodexBar icon for the KDE Store listing, with a 512-pixel PNG
  and an editable SVG source.
- Install or update the latest widget release from one terminal command without
  cloning or building the repository. Setup verifies the release package,
  offers a private official CLI when needed, and asks before restarting Plasma.
  Non-interactive setup is supported; private CLI selection remains in settings.

- Share the selected Usage & Spend history as a local PNG or plain-text summary,
  with a separate preview, native image clipboard and save picker, bounded
  provider/model rankings, separate currencies, partial-data notices, and a
  small repository attribution. Exports exclude account and project details.

- Show **Quota weeks** in a provider's expanded cost details: the local cost
  and tokens of the current weekly quota window and up to three earlier ones,
  with exact boundaries; a current week with no full day yet is omitted until it
  has one. Totals that count a whole day around a mid-day reset
  are marked as estimated, unknown days are never counted as zero, and weeks
  older than the scanned history are omitted. This mirrors the macOS 0.62.0
  recent-windows list and needs no new CLI contract.
- Bundle the fallback name, icon, brand color, and documentation link for the
  `Bifrost`, `Charm Hyper`, and `GitKraken AI` providers that official CodexBar
  0.65.0 adds to the registry, plus dashboard links for Charm Hyper and
  GitKraken AI and the `gk` alias. GitKraken AI also offers the widget's
  API-key setup. Charm Hyper's default source and Bifrost's gateway URL
  have no supported Linux setup path yet.
- Bundle the fallback name, icon, documentation link, and dashboard link for
  the `Helmcode`, `v0`, and `TypeSafe` providers that official CodexBar 0.64.0
  adds to the registry. Brand colors and status links are omitted because
  upstream defines none; the widget uses the theme highlight and hides missing
  links by design. `v0` also offers the widget's API-key setup, which the
  0.64.1 CLI accepts for it; Helmcode and TypeSafe are cookie-only and have no
  supported Linux setup path yet.
- Bundle the fallback name, icon, and documentation link for the `Pi`
  provider that official CodexBar 0.63.0 adds to the registry. Brand color and
  dashboard, login, and status links are omitted pending verifiable upstream
  sources; the widget uses the theme highlight and hides missing links by
  design.

### Changed

- Panel quota capsules no longer borrow a warning look. When a provider's brand
  hue sits within 20 degrees of the theme's warning or critical color, such as
  Z.ai's red or Claude's orange in Breeze, its capsules use a muted version of
  the brand color while the icon keeps the brand color. The muted color keeps
  the capsule's contrast and replaces the brand only when the result stays
  farther from the warning colors than the brand was. Any quota above zero
  now fills at least a round dot, as popup meters already did, so 4% remaining
  no longer looks like an empty capsule.
- Refine the popup's visual hierarchy. Content sits on the native Plasma dialog
  background without a nested inner frame or a separator under the tab strip.
  A selected tab now has a clearly visible surface, and a provider tab's
  underline is only its quota meter, so a partly filled bar no longer reads as
  a selection. Overview, session, and spend rows share borderless surfaces and
  identity tiles. The provider header separates account and plan.
- Keep a provider's quotas ahead of its cost history in the detail view. The
  cost section drops the day count the axis and summary already state, uses a
  flat metric selector and details toggle, and sets its estimate note in the
  same small type as the other cost footnotes. A current incident appears once,
  as the severity banner below the header, instead of also as a header badge.
- The Usage & Spend activity heatmap names each weekday row in the system
  locale and widens its cells up to a 2:1 tile, so long ranges use the width
  without stretching short ranges into bars. Rows stay unlabelled when the
  history is not calendar aligned.
- Bring the six settings pages to the popup's visual language. Explanatory
  text uses one quieter small style and sits under the text of the check box
  it explains; the CLI release notification option is indented under its
  parent like the widget update options. Panel and Providers use the popup's
  flat details toggle, and opening Panel's quota, order and visibility options
  no longer shifts the form sideways. The selected provider appears on one
  borderless surface with its identity tile, and long setting names wrap.
  Popup groups provider order and Overview providers under **Providers**,
  Diagnostics places redacted diagnostics in the same form under **Provider
  diagnostics**, and Notifications explains an unavailable incident option
  directly below it. Settings, defaults and saved values are unchanged.
- The popup smoke runner captures every settings page, including Providers
  with a long synthetic roster, narrow pages with larger text, and error
  states. `--theme light|dark` applies a Breeze color scheme and `--language`
  runs any scenario in a shipped translation.
- Keep the `Crof` fallback metadata after official CodexBar 0.64.1 retired the
  provider, so an older installed CLI that still reports it keeps showing a
  named provider instead of the unknown-provider fallback.
- `make check` runs its checks concurrently and exposes each one as its own
  target, such as `make check-shellcheck`, so contributors can iterate on a
  single check instead of the whole suite. `make check JOBS=2` bounds the
  concurrency on a constrained machine.
- The check suite also lints GitHub workflows with `actionlint` and the Python
  scripts and tests with `pyflakes`. Both are optional locally and report
  themselves as skipped when absent; CI installs them.

### Fixed

- Label a full-form IPv6 loopback Ollama endpoint such as
  `http://[0:0:0:0:0:0:0:1]:11434` as on this computer. The settings page only
  recognized `[::1]`, so equivalent spellings of the loopback address showed
  the remote-address warning even though the helper accepts them as local.
- Saving an aggregate usage snapshot as a PNG now reliably writes the chosen
  file instead of failing after the file picker closes.
- Keep a provider's healthy cost data when its cost record carries a falsy
  `error` flag such as `false`, `0`, or an empty message. Only a real error
  now marks the provider failed and drops its totals from the snapshot.
- Fall back to the provider title or roster display name when a provider record
  supplies a whitespace-only display name, instead of accepting an empty string
  and overriding configured provider names.
- Report a fresh setup as current when another setup run installed the
  release first. The post-lock recheck compared against the synthetic
  `0.0.0` version instead of the installed widget, so the second run
  reinstalled redundantly.
- Show the date of a reset a week or more away when reset times are shown as
  clock time. A weekly limit that just reset no longer reads as resetting later
  today, and a monthly limit no longer reads as this week's weekday.
- Report a clear setup error when neither `HOME` nor an absolute
  `XDG_DATA_HOME` locates the user data directory, instead of stopping on an
  `unbound variable` shell error.
- Keep the AI Insights settings privacy note local for loopback Ollama
  addresses with a path, such as `http://localhost:11434/v1`, instead of
  warning that statistics are sent to that address.
- Show a provider's **Today** cost as unavailable when the cost snapshot was
  scanned on an earlier day, such as before midnight or before a failed refresh,
  instead of presenting that day's spend as today's.
- Count down the popup's "Runs out in" pace forecast like the panel run-out
  text. It kept the duration received with the last usage refresh, so with no
  periodic refresh or a long interval it still promised hours of quota after
  the forecast time had passed, while the reset time beside it counted down.
- Escape markup in notification bodies. Plasma renders a notification body as
  rich text, so a provider status message or quota label containing HTML could
  show as a clickable link to any address, or as bold text or an image, and a
  literal `<` or `&` could disappear. Notification text is now shown as typed.
- Make the quick-install command's prompts reach the terminal. The documented
  one-liner piped the installer into Bash, so it never offered the private CLI
  or a Plasma restart. The updated command runs the downloaded installer with
  `bash -c`; unattended runs stay non-interactive.
- Serialize widget upgrades so two widget instances, setup, or `make update`
  can no longer run overlapping `kpackagetool6` upgrades, which could delete the
  installed widget. An instance that finds the release already installed by
  another one reports the widget as current instead of reinstalling it.
- Report a managed CLI download that timed out, lost its connection, or ended
  early as an unreachable release server instead of a generic or verification
  failure. A CLI release check interrupted mid-response keeps showing the
  installed version.
- Align top-right header action buttons to the top across Overview, Usage & Spend,
  and Sessions views, matching ProviderHeader alignment and avoiding vertical
  button jumps when switching popup tabs or when header subtitles expand.
- Align provider header identity icon tile to the top of the row, matching the
  refresh button and title heading alignment when account, plan, or update
  metadata expands the middle column.
- Keep a fully measured share export free of an incomplete-data warning when
  its model ranking has more rows than the six shown, while still flagging
  missing model costs and source scans that reached their safety bound.
- Mask unknown provider identifiers in shared images and statistics when
  personal information is hidden, and mark quota-week amounts as partial while
  the CLI is still establishing local history coverage.
- Keep absolute paths embedded in model labels out of shared images and text.
- Mark quota-week cost and token totals as partial when a measured day excludes
  incomplete requests, and show both boundaries of the current week.
- Mark Quota weeks totals as partial when the cost history is older than the
  current day and has not scanned the trailing dates of a quota week.
- Mark a quota week as partial when its last day comes from a cost scan taken
  before midnight. After a midnight reset, the week that just closed no longer
  shows an exact total that is missing the end of its last day.
- Bound **Diagnostics** commands shell-side with GNU `timeout --foreground
  --kill-after`, so a hung `codexbar diagnose` or provider list is killed
  instead of surviving as an orphan after the page times out or the dialog
  closes. The shell bound (50s plus a 5s kill grace) stays inside the
  existing 60s page timeout, and systems without GNU `timeout` run the raw
  command unchanged. A command reaped by the bound reports the same timeout
  message as the page timeout instead of an exit-code line or the shell's
  own signal notice.
- Omit the AI Insights spend or token comparison when its weekly totals
  overflow, instead of sending `null` amounts in the request snapshot. Finite
  daily values can still sum past the largest double, which serialized as
  `null` and broke the documented finite-amount contract.
- Report an AI Insights **Test connection** stopped by its time bound as a
  timeout instead of an unexpected-format error. A listing killed by the
  shell bound arrives with an empty reply and exit code 124 or 137, which the
  model-list path now reads like the insight-generation path does.
- Redact `password`, `secret`, `private_key`, and `client_secret` values in
  CLI messages and diagnostics. Previously only authorization, bearer,
  cookie, API-key, and token shapes were masked, so a CLI error such as
  `login failed: password=hunter2` reached the UI verbatim.
- Re-enable the AI Insights settings **Clear** button when a new insight is
  saved after a clear while the page stays open. The button stayed disabled
  until the settings dialog was reopened.
- Clear the AI Insights model list when the Ollama address is edited. A
  finished **Test connection** left the previous server's models selectable,
  so the untested address could present a model it never listed as working.
- Hide a quota reset label when its numeric reset date is unusable instead of
  printing the raw value. An out-of-range or infinite `resetsAt` reached the
  quota row as digits such as `8640000000000001` or `Infinity`; it now keeps
  the empty reset like other invalid reset metadata.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.40...v0.2.41)

## 0.2.40 - 2026-09-20

### Added

- Bundle names, icons, brand colors, and dashboard, status, and documentation
  links for the five providers official CodexBar 0.61.0 added to the registry:
  Nous Portal, Muse Code, CodeRabbit, Replicate, and Hugging Face. They
  previously fell back to the CLI name, a generic icon, and the theme
  highlight color.
- Install an optional widget-managed CodexBar CLI, update it manually or with
  opt-in daily automatic updates, and restore the previous version. Official
  Linux downloads are checksum-verified and activated atomically. External and
  package-manager installations remain independent; Diagnostics identifies the
  managed copy. A failed attempt names its reason, so a refused download reads
  differently from an unreachable release server or an unsupported system.
- Confirm before installing a managed copy while a working external CLI is
  selected, so the resulting second copy is explicit. Diagnostics also reports
  the PATH-resolved system CLI version next to the selected command.
- Check official CodexBar CLI releases manually or with optional daily checks
  and notifications. Package-managed installations keep their original updater;
  Diagnostics reports installed versions and recognized package ownership offline.
- Publish a Ko-fi donation link through the repository **Sponsor** button and a
  README **Support** section.
- Tell an unreachable CodexBar CLI apart from a provider that is not set up.
  When the shell reports the configured command as not found or not executable,
  the empty popup now says so, names the configured value, and points at
  **Diagnostics** for an absolute path, instead of offering a retry that cannot
  start or claiming that no provider is enabled.
- Report the widget version in **Diagnostics**, plus the CLI version and the
  absolute command the shell resolved after **Check versions**. The configured
  value can be a bare name, so the resolved path is what identifies which
  executable Plasma actually runs.

- Open the update's GitHub release page when clicking the widget-update
  notification. The page address is derived from the release tag announced by
  the updater and stays non-clickable when the installed `notify-send` is too
  old to support notification actions.
- Mark cost totals as partial when the CLI excluded requests that lacked final
  usage, naming how many were left out of the displayed cost and tokens. The
  notice appears for a provider and for the aggregate **Usage & Spend** total,
  and closing it keeps the same warning closed even when the count changes.
- Draw a faint peak reference line across bar charts at the highest plotted
  value, grounding the vertical scale of the columns before any point is
  inspected.

### Changed

- Restyle the **Usage & Spend** provider breakdown rows as subtle cards with a
  bordered, tinted provider identity tile matching the overview and provider
  header tiles.

### Fixed

- Align provider header account label typography with secondary plan and timestamp
  metadata by using small font size.
- Keep **Automatically update the managed CLI daily** switchable while it is on.
  Selecting a command outside the managed copy previously disabled the checkbox
  with the setting still enabled, leaving no way to turn it off and letting the
  widget keep starting an update helper that could never act.
- Standardize helper text font sizing across **General**, **Notifications**,
  and **Diagnostics** settings pages to use `Kirigami.Theme.smallFont`, matching
  the secondary label typography used in **Panel** settings.
- Normalize carriage returns and Windows line endings when reading the resolved
  executable path from the environment probe, so a CLI reporting CRLF output does
  not fail path validation in **Diagnostics**.
- Mark the CLI version and resolved path as not found immediately when running
  **Check versions** with an empty command path in **Diagnostics**.
- Open descriptor action URLs only when the returned HTTPS address fits in
  2048 characters, matching the existing descriptor text bounds. Longer
  addresses now report an unsupported URL instead of opening externally.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.39...v0.2.40)

## 0.2.39 - 2026-09-17

### Fixed

- Keep the **Average/day** line visible when every day in the cost history
  window was measured as zero, matching the zeros the history rows below it
  already print. A window with no measured day still shows no average.
- Align popup usage dashboard section heading typographic hierarchy with other
  popup card section titles by using a level-4 primary heading.
- Keep oversized popup tabs aligned at their start when focus or selection is
  reported again, instead of alternating between the tab's start and end.
- Preserve measured zero costs and token counts in recent history rows instead
  of omitting them when the other amount is positive.
- Select the genuinely highest-usage provider automatically even when usage
  differs by a fraction of a percentage point; service incidents only break ties.
- Choose empty-usage messages from validated account identities: malformed
  identity fields no longer imply available account limits, and supported legacy
  identity fields receive the same message as nested identities.
- Show a real countdown for providers whose CLI reports a numeric reset date:
  the stored reset now keeps a parsable date, so the popup no longer prints the
  raw timestamp digits and the panel "resets within" rule matches again.
- Open the displayed provider's detail tab when clicking or keyboard-activating
  its standalone panel icon, instead of reopening a previously selected tab.
  The widget icon still toggles the popup when no provider is selected.
- Keep the panel visibility rule editor's condition combo and threshold spinner
  in sync with external settings changes, such as the restore-defaults action,
  after an interactive pick or typed value in the widget settings.
- Show hover tooltips on the clear-override and reload buttons in provider
  account selection.
- Keep the panel quota-lane combo in sync with external settings changes, such
  as the restore-defaults action, after a manual pick in the widget settings.
- Match stored panel provider selections canonically when toggling, so raw CLI
  spellings and mixed-case IDs resolve to the same provider instead of leaving
  a stale entry that cannot be removed.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.38...v0.2.39)

## 0.2.38 - 2026-09-13

### Added

- Offer **Configure providers** when the popup has no provider data, and
  **Retry** and **Settings** beside usage errors. The messages point to
  Providers or Diagnostics in widget settings. Retry keeps last-known quotas
  visible and cannot repeat while a usage refresh is running.
- Refresh stale **Usage & Spend** history when revisiting the tab and when a
  visible spend view stays open across midnight. The existing hourly cost
  lifecycle still guards in-flight scans and failed-attempt cooldowns, cached
  charts stay visible during refresh, and switching the cost/token metric or
  inspecting a day still starts no scan.
- Contribution guidelines, a security policy with private vulnerability
  reporting, and issue forms for bug reports and feature requests.

### Fixed

- Eliminate duplicate section separators in the popup detail view when plain
  credit balances are absent but other additional sections are displayed.
- Ignore malformed configuration checksum replies so they cannot clear cached
  quotas or trigger unnecessary usage refreshes.
- Reserve initial readout row height in interactive charts so that hovering
  a point for the first time does not cause a vertical layout shift.
- Guard session refresh activity calculations against missing, null, or
  non-string command sources, avoiding uncaught exceptions during refresh
  scheduling.
- Keep partial cost refreshes working when a provider error message is malformed,
  retaining its previous costs while healthy providers update.
- Respect the automatic refresh interval after a failed Sessions scan when
  reopening the popup or revisiting the tab, while allowing immediate manual
  retries and scans after changing the CLI command.
- Preserve valid Codex quotas and named accounts when optional login-method
  metadata is malformed, and use a valid fallback for the plan label.
- Keep disabled Overview providers from occupying the three selection slots,
  while preserving their saved selection when other providers are chosen.
- Provider setup no longer reports a successful save when a CLI error has no
  readable message. Structured error messages cannot interrupt result handling;
  the widget shows a generic failure instead.
- Keep unavailable days in their calendar positions in the Usage & Spend
  activity heatmap, so missing cost or token values do not shift weekday rows
  or shorten the displayed range.
- Show cost refresh errors beside retained provider costs, including when the
  details are collapsed, so older values do not hide a failed update.
- Coalesce cost-setting changes applied together into one scan using the final
  settings, avoiding duplicate scans that immediately replace each other.
- Keep panel run-out countdowns tied to each forecast's receipt time, so
  selecting a cached account cannot restart an old or expired prediction.
- Preserve the original measurement age when selecting a cached account whose
  usage timestamp is missing, invalid, or future-dated, so old quotas cannot
  become fresh again or extend their 24-hour retention limit.
- Keep last-known quotas when a provider error has an empty or malformed message,
  showing a generic error while healthy providers and current status still update.
- Preserve healthy usage records after a malformed sibling in provider-scoped
  CLI replies, including measured-zero quotas, while keeping all-invalid
  replies as provider errors.
- Keep settings checkboxes stable in right-to-left layouts under KDE/Breeze
  styles, avoiding repeated width binding loops while the pages settle.
- Keep the provider filter tabs usable with KDE styles whose tab buttons expose
  no content item, avoiding repeated QML errors when opening Providers settings.
- Use the pinned KDE CI image’s authenticated package indexes so an outage of
  the archive’s current metadata does not block checks and package builds.
- Preserve ampersands and angle brackets in provider selection and settings
  checkbox labels when KDE styles process keyboard mnemonics.
- Preserve quota, pace, and reset notification baselines when a successful CLI
  reply contains obsolete quotas alongside current service status, avoiding
  repeated warnings and missed reset notices when fresh usage returns.
- Clear completed Sessions snapshots and update metadata when the configured CLI
  command changes, so a failed or timed-out scan cannot display sessions from
  the previous executable.
- Hide pace and run-out forecasts when an otherwise successful quota snapshot
  is older than the 24-hour retention limit, while preserving its last-known
  measurement and current service status.
- Keep failed usage replies from borrowing another account's quota when distinct
  account keys share a display label or the account is identified only by its
  organization. Failures without identity still retain the last known quota,
  and the startup cache still restores its own for a provider whose explicit
  account selection its context already verified.
- Keep the healthy accounts listed in the account picker when another account
  record in the same `codexbar` reply cannot be read.
- Preserve newer retained usage and its last-known timestamp when startup cache
  restoration is delayed past a failed refresh.
- A tiny negative credit balance that rounds to zero now reads as `0` instead
  of the negative-zero string `-0`.
- Preserve valid provider usage when the CLI supplies a malformed optional
  status URL, falling back to the provider's bundled status page instead of
  discarding its usage snapshot.
- Keep the last known provider incident ID across active status replies that omit
  it, including notification priming, so a replacement incident at the same
  severity is still announced without repeating the original incident.
- Preserve valid provider quotas when the CLI supplies malformed optional
  reset metadata, ignoring the unusable reset value instead of discarding
  the provider snapshot.
- Preserve valid provider quotas when the CLI supplies a malformed optional
  provider display name, ignoring the unusable name instead of discarding
  the provider snapshot.
- Align reset countdown / timestamp text with pace metadata along the text
  baseline in provider usage rows.
- Aggregate per-model cost and token totals by the raw model identity instead
  of the bounded display label, so distinct models that share a truncated or
  whitespace-collapsed label no longer merge into one row.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.37...v0.2.38)

## 0.2.37 - 2026-09-10

### Added

- Choose which providers appear in the panel through **Panel → Panel
  providers**. The selection lists the enabled providers, follows the saved
  provider order, and is limited to the four meters the panel can draw; the
  panel text, meters, and tooltip follow it, while the popup keeps showing every
  enabled provider. Leave the selection automatic to show all enabled
  providers, as before. Clearing every checkbox keeps the widget icon without
  provider text or meters. Disabled providers keep their saved selection without
  blocking new choices; only the first four enabled selections appear.
  Automatic checkboxes recognize provider aliases and mixed-case IDs.
  The preview uses enabled provider names after the selection list loads, with
  synthetic measurements for every provider.

### Changed

- Refresh quotas when the popup opens by default, so a widget that was idle,
  suspended, or running without periodic refresh no longer presents an old
  measurement as current. Only quotas older than the refresh interval are
  fetched, and failed attempts keep their cooldown, so reopening the popup does
  not repeat the command. Existing widgets keep their stored choice; new widgets
  and **General → Restore all defaults** get the new default, and the setting can
  be turned off again in **General**.

### Fixed

- Keep every enabled **Panel → Additional information** item readable when
  several providers fill the panel. The panel used to squeeze the provider
  name, usage text, and credit balance into whatever the meter row left over
  and cut the result short, so "Claude 82% used 125cr" arrived as
  "Claude 82% u..." and a complete value became a fragment reading as a
  different one. The panel now surrenders whole items instead, dropping the
  provider name first because the icon beside it already identifies the
  provider, then the credit balance, and keeping the usage text. The full text
  stays in accessible names, and only a single remaining item is ever elided.
  For a provider the widget has no icon for, the panel draws a generic icon that
  names no provider, so there the name outlives the credit balance instead. The
  panel also offers the text every pixel the row actually leaves, instead of a
  flat allowance that hid content while space was free.
- Report the credit balance in the panel tooltip while panel credits are
  enabled, so a crowded panel that had no room to draw it does not leave a
  pointer user without it. No meter carries the balance, and the tooltip
  previously reported only quotas and incidents.
- Keep Popup and Notifications settings text and controls in place while the
  page opens. The themed scrollbar gutter stays reserved instead of appearing
  and then disappearing as the content settles, and the Popup overview section
  carries the same width bound as its provider-order sibling while the provider
  list arrives.
- Keep the stored value in the editable settings fields for the custom refresh
  interval, the update check interval, and both quota thresholds when the typed
  text holds no number, instead of replacing a configured value with an
  unrelated default. Clearing the custom interval field, or committing its
  "No periodic refresh" text, no longer turns a disabled refresh into five
  minutes.
- Keep accounts that differ only by internal spacing separately selectable and
  pass the unmodified name to `--account`, instead of collapsing one label onto
  the other and requesting the wrong account.
- Never show the previous executable's cost data beside the new quotas after
  the command source changes, even when the cost refresh fails.
- Survive malformed provider status fields and keep the healthy providers of
  the same refresh, settling loading instead of leaving it active.
- Revalidate carried account keys before use, so a blank or overlong stored
  key falls back to the snapshot identity instead of reaching deduplication,
  selection, or the `--account` argument.
- Skip structured account identity fields when choosing the `--account`
  identity, so a malformed value cannot mask a valid fallback from another
  identity field.
- Screen the provider id inside the per-provider guard during usage parsing,
  so a failing identity read drops only its own provider instead of aborting
  the whole refresh.
- Retain failed providers after a partial cost reply only from the same
  command source, so a source change cannot re-tag the previous executable's
  costs with the new source.
- Show the panel incident badge on the affected provider's own meter icon, so
  reordering providers moves the outage marker with that provider instead of
  leaving a dot beside whichever provider comes first. The badge stays visible
  while a refresh runs. The standalone status dot remains only as a fallback
  for incidents no meter can badge (meters hidden, or the incident provider
  has no meters), and the vertical identity icon carries a badge only for its
  own provider's incident; an incident on another provider keeps the
  standalone fallback when meters are hidden.
- Place the subscription label directly beside the account email in the
  provider header, instead of letting it drift toward the middle of the popup,
  and let the account elide first on narrow popups.
- Stop presenting an "all systems operational" service status as the overview
  account line. Providers whose CLI payload carries no account identity (such
  as Claude on verified CLI 0.56.2) now show no substitute identity; an active
  incident still appears, and the detail line no longer repeats the provider's
  own name or source.
- Recover provider actions when a secret prompt stops responding: the dialog
  closes after a long escape-hatch deadline and the stuck pending state clears,
  instead of leaving the provider disabled until the settings page reopens.
  Late submissions retain the full bounded save window.
- Complete provider fallback slots when a malformed reply fails late, and
  report account normalization failures as errors for the affected provider.
- Keep provider configuration polling connected when another widget instance
  has already cached a response for the same command.
- Keep the provider cost metric picker in sync with the shared cost and token
  history selection after picking an entry.
- Keep the Panel settings preview visible while scrolling through content,
  quota, order, and visibility options.
- Avoid repeating the selected provider's icon with custom panel element
  orders when it is the only visible provider meter.
- Ignore malformed cost breakdown/model rows and keep chart dimensions finite.
- Clear chart selection and hover state when point data disappears, allowing
  keyboard navigation to recover when data returns.
- Normalize provider fallback requests before deduplication and preserve scalar
  zero/false CLI text values.
- Keep theme calculations finite when inputs are unavailable.
- Avoid tab overflow controls during initialization.
- Anchor tab tooltips to their hover areas and improve accessibility labels for
  heatmap cells and decorative controls.
- Animate the panel provider meter hover/press highlight and the Usage & Spend
  heatmap cell hover outline, matching the smooth transitions already used for
  every other interactive surface in the popup. The heatmap outline is a
  separate overlay, so the cell's painted fill never shifts on hover.
- Confirm hover on session cards, which reveal copy actions on hover but
  previously left the card surface unchanged.
- Fade the chart readout in and out with the hovered point instead of blinking
  the label and value on every pointer entry and exit.
- Fade the tab selection indicator with the tab background it sits under,
  instead of blinking the accent bar on every tab change.
- Hold tooltips back for the standard Plasma hover delay instead of flashing
  them the instant the pointer crosses a tab, a panel status dot, or a copy
  button. The heatmap cell readout and the copied confirmation stay immediate.
- Grow the panel capsule fill into a new reading, like every meter in the popup
  already does. The settings preview keeps rendering a static frame.
- Truncate popup section headings and labels that fill the available width, so
  a long translation or a provider-supplied cost title can no longer push the
  row wider than the popup.
- Narrow the panel tooltip to the hovered provider meter, so hovering one
  panel icon reports only that provider's quotas instead of the whole roster.
  The full list remains when hovering elsewhere.
- Lay the Usage & Spend activity heatmap out as a complete block instead of a
  small patch of squares stranded beside an empty half of the tab. Its cells
  now stretch into the width a short range leaves unused, the grid is padded so
  a partial final week no longer cuts a week-wide notch out of it, and ranges
  that fill a single week column hide the heatmap, which repeated the chart
  above it one day per row.
- Reject oversized diagnostics responses with a clear error instead of
  buffering them for display, matching the other CLI surfaces.
- Allow mouse selection in the diagnostics output and bound the diagnostic
  provider field, matching the provider settings inputs.
- Recognize provider aliases and mixed-case IDs in the Overview provider
  checkboxes, matching the runtime selection and the panel provider selection,
  so a stored choice stays checked when the roster spells it differently.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.36...v0.2.37)

## 0.2.36 - 2026-09-09

### Added

- Last-known quota recovery after failed refreshes and Plasma restarts, with
  explicit freshness labels, a 24-hour retention limit, and a redacted persistent
  cache.
- A versioned changelog, included in the widget package and used as the source
  for future GitHub release notes.

### Changed

- Panel settings start with appearance and meters. Additional information holds
  provider name, usage text and format, credits, and the monochrome preset.
  Quota, order, conditions, and automatic selection have their own expandable
  section. Closed summaries reflect enabled information and custom choices.
  Standard and Minimal are side by side.
- Default panel order groups optional text with the selected provider's capsules,
  using one logo. Hidden or unavailable meters retain a separate text identity;
  custom element orders keep their independent positions.
- Panel meters place a small provider icon beside primary and secondary quota
  capsules, with matching geometry in colored Standard and monochrome Minimal.
  Meters now work in vertical panels. Explicit quota choices still show one
  capsule; visibility conditions accept either displayed quota. Tooltip and
  accessibility descriptions report both quotas and resets.
- Linux parity work is maintained in TODO.md, with agent review of each stable
  upstream release and updates in the PR that implements a feature.
- Reorganized installation and troubleshooting instructions, with dedicated
  guides for settings, cost history, and development.
- Contributor delivery uses pull requests with required check and smoke jobs.
  Agents follow CI through completion after pushes and authorized merges.
- Pull request titles follow Conventional Commits and are checked automatically.
- CI cancels superseded PR runs and omits graphical smoke tests for changes
  limited to editorial Markdown. Checks and packaging still run; releases keep
  full graphical coverage.

### Fixed

- Provider details and project costs no longer trigger recursive Qt layout
  warnings when opened or resized. Long values stay within the popup.
- Panel settings keep text and controls in place while the page opens, including
  when the scrollbar disappears or collapsed sections finish sizing.
- Restored cached provider quotas are retained across partial early refreshes
  during startup, preventing premature eviction of unrefreshed providers.
- Primary incident selection, tooltips, and status banners ignore providers with
  unknown or inactive status, preventing stale outages from masking active incidents.
- Successful responses without measured quotas keep valid credits and details
  even when their supplemental timestamp is older than the quota-cache limit.
  They no longer show a last-known banner or turn into cache-expired errors.
- Last-known quota handling: unknown service status no longer keeps showing
  the previous outage, extra-lane quotas survive restarts, expired quotas
  keep no measurement instead of undefined state, the restore banner only
  shows when data is actually stale, per-provider resets keep healthy
  providers' disk cache, empty usage results keep CLI error detail, stale
  supplement sections are hidden until revalidated, measurements older than
  24 hours no longer stamp as fresh, future live timestamps use receipt time,
  overview rows keep account/status
  context beside the last-known note, and long update timestamps ellipsize
  on one line.
- Panel settings no longer query a rebuilding element-order layout's attached
  size hints, avoiding a Qt layout crash when expanding and reordering controls.
- Panel text falls back to a separate label if meters exhaust the width available
  for grouped text.
- The settings preview now renders quota capsules from its synthetic data after
  QML converts provider records for delegates.
- Credit balances that round up to a whole number no longer keep a trailing
  ".0" (99.95 credits read as "100"), and huge magnitudes no longer gain a
  bogus group separator.
- Token, request, and point counts now use singular and plural forms in usage
  and cost summaries, while large counts keep their compact notation.
- Corrected quota and plan labels, login actions, and settings wording across
  the five translations. The Brazilian Portuguese panel style is now translated,
  and French and Spanish pace percentages use consistent spacing.
- Switching the account of the configured provider no longer starts a usage
  command twice in a row, discarding the first run immediately.
- Provider settings descriptors whose schema version is not exactly the
  supported number stay unsupported instead of being accepted through type
  coercion, and malformed quota-threshold inputs keep their documented
  fallbacks instead of collapsing to a 1% warning for every provider.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.35...v0.2.36)

## 0.2.35 - 2026-09-08

### Added

- Dedicated General, Providers, Panel, Popup, Notifications, and Diagnostics
  settings pages, with a live panel preview.
- Optional privacy mode for widget views and new notifications, refresh-on-open
  for stale usage, and controls for popup pace, credits, and provider details.
- Compact Today and period cost summaries, expandable history, and model details
  for the selected day. Missing amounts and partial model coverage stay explicit.

### Changed

- Fresh installations use Standard provider icons and usage meters by default.
  Existing appearance options and saved preferences are preserved.

### Fixed

- The Accounts action could stay disabled after a reply arrived following a CLI
  settings change.
- Malformed cost, chart, and account data could interrupt display updates.
- Cost history could lose days with zero cache tokens.
- The panel loading fallback was missing in some states.

[Full diff](https://github.com/Lucenx9/codexbar-plasma/compare/v0.2.34...v0.2.35)

```
