TODO.md

Linux parity TODO

This is the current list of useful Linux/Plasma work relative to the official CodexBar macOS app. The agent updates it with every new stable upstream release and every change that implements or invalidates an entry. Follow release maintenance. Issues linked below preserve discussion; this file owns parity status.

Review baseline

  • Last release reviewed: CodexBar 0.73.0, commit 1d313fe50a361fc0a12383da0cdc11a75f59daa5, checked 2026-10-07.
  • Coverage: the 0.73.0 release delta against Plasma 6879315. The 0.73.0 review verifies persistent source writes and clearing through config set-source, the 91-provider registry with Langdock still macOS-gated, and the unchanged empty cost/usage envelopes. ClinePass labeled writes still fail on Linux despite the release claim. Descriptors, generic actions, Cursor cost, and display currency remain blocked. This scoped review does not replace the full 0.56.2 contract audit. The 0.72.0 review verifies the Muse, LithosAI, and WorkBuddy registry additions (90 records, same four keys) and their cookie-only macOS-gated Linux reachability, the Claude manual-sessionKey runtime opening before and after, unchanged cost and usage envelopes with the still year-1 --period all day count, and empty-config tolerance; the descriptor, config-action, Cursor cost, and display-currency blockers are unchanged. The 0.69.0 review verifies the unchanged 87-provider registry, the Mistral manual-cookie runtime fix before and after, unchanged setup reachability for the bundled-plugin migrations, the still year-1 --period all day count, and empty-config tolerance; the descriptor, config-action, Cursor cost, and display-currency blockers are unchanged. The 0.67.0 review verifies the Aixy, Raycast, and xKiro registry additions and which of them Linux can reach, Aixy output through a loopback fixture, the new cost --period flag with its reportingPeriod and historyLabel fields, and that UI preference transfer is macOS-only; the descriptor, config-action, Cursor cost, and display-currency blockers are unchanged. The 0.66.0 review verifies the DevPass, Atlas Cloud, Vercel AI Gateway, and llmman registry additions and their API-key setup, llmman usage through a loopback daemon fixture, and that config disable keeps user plugin entries on 0.66.0; the descriptor, config-action, and Cursor cost blockers are unchanged. The 0.65.0 review verifies the Bifrost, Charm Hyper, and GitKraken AI registry additions and which of them Linux can reach. It uses a loopback Bifrost fixture to verify detail-row progress/usageValue and unknown named windows in official Linux output, and confirms that the descriptor, config-action, token-account, and Cursor cost blockers are unchanged; the 0.64.1 review verifies the Helmcode, v0, and TypeSafe registry additions and the Crof retirement, that only v0 accepts the supported set-api-key writer while the other two are cookie-only and unreachable on Linux, and that the descriptor and generic config-action blockers are unchanged; the 0.63.0 review verifies the Pi registry growth with local token history and estimated costs, the still-rejected Cursor cost and provider-settings descriptor probes, and confirms that usage, sessions, and config envelopes are otherwise unchanged; the 0.62.0 review verifies Muse token history in official Linux cost output, the Codex-only --remote and --summary-only cost modes, the usage_updated hook event, and confirms that usage, sessions, and config envelopes are unchanged; the 0.61.0 review records the registry growth to 74 providers; the 0.60.5 review verifies the cost incompleteRequestCount contract in official Linux output; the 0.60.4 review records the earlier release delta and source comparison. Shared payload structs retain optional credit-availability and detail-row fields awaiting authenticated output evidence.
  • Full CLI baseline remains the 0.56.2 audit. Later probes verify only their named cases. Older blockers below retain their last verified version; source inspection is not authenticated output evidence.

Implementable on Linux

  • Offer persistent per-provider source selection through Linux 0.73.0 config set-source --provider <id> --source <mode>. Successful JSON names provider, displayName, enabled, source, and configPath; auto clears the override, unsupported modes fail, and enablement/credentials remain intact. The current General source override is global and passed per request. Done when version-gated controls use the supported command, handle unknown provider/source combinations without inventing support, preserve the global override, and test failure, clearing, cancellation, and stale replies. Generic descriptors remain unavailable; this writer resolves only source persistence. Verified contract.
  • Bundle Langdock fallback name, original icon, links, and brand color from official 0.73.0. The CLI supplies its name in the 91-provider registry and Plasma accepts unknown providers with a generic icon; Langdock's fetch and browser-profile setup remain macOS-only. Done when static metadata is tested and documented without exposing an unsupported API-key action. Verified reachability.

Blocked on official Linux CLI contracts

These are useful Linux features once the named contract exists. Do not fill these gaps with provider scraping, auth flows, or config parsing in QML.

Provider settings

  • Enable generic settings and token-account editing through official descriptors and writes. Linux 0.73.0 still rejects config providers --descriptors (91 records, same four keys); its provider records have no descriptor. Helmcode and TypeSafe make this concrete: both are cookie-only, both refuse --source api, and their documented cookieSource/cookieHeader config path has no supported writer, so they stay metadata-only on Linux. 0.65.0 adds three more cases. Charm Hyper stores a key, but its default source demands web support on Linux, and it works only with --source api while Plasma's source mode is global. Bifrost needs a gateway base URL (enterpriseHost) with no CLI writer; the CLI reads BIFROST_BASE_URL from the environment instead. The optional GitKraken organization ID has no writer either, and neither has llmman's non-default base URL (LLMMAN_HOST, 0.66.0). 0.67.0 adds Raycast, cookie-only with a macOS-only web source; Aixy's self-hosted base URL (AIXY_BASE_URL); and the opt-in LiteLLM model activity (LITELLM_MODEL_USAGE_ENABLED) and Claude Admin workspace spend (ANTHROPIC_ADMIN_WORKSPACE_SPEND), none of which has a writer. 0.68.0 lifts the runtime gate for Mistral's manual cookie (#4024): with cookieSource/cookieHeader in the config file, Linux usage attempts the fetch instead of refusing as macOS-only (verified 0.67.0 vs 0.68.0); set-api-key still refuses mistral and no writer exists for the cookie fields, so setup stays blocked. 0.72.0 lifts the same gate for Claude's manual sessionKey cookie (#4241): with a synthetic manual cookie, Linux usage attempts claude.ai instead of reporting no available strategy (verified 0.69.0 vs 0.72.0); browser import stays macOS-only and no writer exists for the cookie fields, so setup stays blocked. --label and --workspace-id remain z.ai-only: Linux 0.73.0 rejects set-api-key --provider clinepass --label despite the release claim (#4305), and labeled Kimi, Doubao, and OpenCode Go accounts remain blocked too. Source persistence now has the supported 0.73.0 set-source writer and is tracked above; generic source descriptors and other field writers are absent. 0.61.0 adds an azureOpenAIAPIVersion config extension value with no supported CLI writer, which the frontend must not reach by editing the config file. Keep existing enable/disable, supported single-key setup, and link fallbacks working. The proposal covers source mode, keys/cookies, URLs, workspace/project, region, AWS profile/auth mode, and booleans. Remaining editors include token accounts, auth nuances, organization/team, metric, per-provider thresholds, and Fireworks multi-account slug editing. Done when the named controls have released generic contracts and tested Plasma support. Prior discussion #167.

Provider onboarding

  • Add CLI-described browser-cookie import, local-file setup, OAuth/device flow, CLI-auth setup, and token-account actions. Linux 0.73.0 still has no generic config action command (set-api-key and set-source are field writers; the usage_updated hook event is CLI automation surface, not a setup action). Done when supported actions expose validated prompts/results and handle cancellation, failure, and stale responses in Plasma. Preserve current key/link setup. Prior discussion #168.

Rich usage and credit allowances

  • Consume generic billing/pricing details, richer model/request/token usage, credit allowances, and unknown-usage windows with reset metadata. These gaps were verified at 0.56.2; authenticated cases remain unverified through 0.60.4. Source-observed but unverified at 0.60.4: creditsAvailable/balanceIsWorkspace on credits and openaiDashboard, Copilot seat-entitlement rows with stable IDs, and details rows carrying progress/usageValue (Copilot, Antigravity). 0.65.0 verifies the detail-row numbers and usageKnown: false named windows with reset metadata in official Linux output through Bifrost. Plasma keeps those windows unknown instead of 0% and draws detail-row progress meters. Existing generic details/charts work. Done when each additional section has bounded official fields and tests, with unknown amounts distinct from zero. Plain credit balances need their own allowance before gaining a meter; the Codex monthly-cap denominator is not generic. Prior discussion #169.

History and forecasts

  • Display credit history, plan-utilization history, hourly activity, and session-equivalent forecasts when official history/forecast fields supply units and missing-data semantics. Last verified at 0.56.2. Done when supported histories have bounded normalization and views; retain any remaining types here. Never reconstruct history or session conversion rates from a current snapshot. Prior discussion #170.

Cursor cost

  • Show Cursor cost history through the generic Linux cost path. Linux 0.73.0 still rejects Cursor and lists Antigravity, Claude, Codex, Muse Code, and Pi as supported; the descriptor gate keeps the new cookie-source availability errors unreachable. The 0.68.0 all-history date-range fix (#4028) targets macOS Usage & Spend refreshes, not the Linux cost allowlist. Done when a released Linux command emits supported cost data and Plasma tests cover its amounts, currencies, and trust metadata. Prior discussion #171.

Service-tier totals

  • Show Standard/Fast totals from explicit official tier fields. The scoped 0.56.8 daily-model check established no service-tier contract. The 0.57.0 and 0.60.4 empty cost probes do not establish one either, and 0.62.0 computes quota windows in-process without emitting tier fields. The 0.65.0 Codex Priority pricing fix leaves the cost key set unchanged. Done when official Linux output identifies tiers and bounded amounts with tested legacy fallback. Never infer tier from models, prices, or tokens. Cost evidence; prior discussion #172.

Cost availability

  • Replace the Antigravity-specific unknown-cost fallback with explicit official availability metadata. At 0.56.2, established-empty history used zero despite unavailable costs. The 0.57.0, 0.58.0, and 0.60.4 Antigravity fresh-history probes omit cost totals, and the Claude probes report measured zeros; none verifies that established-empty case. The 0.60.4 OpenCodex unpriced-instead-of-zero change affects values within the unchanged cost schema. Linux 0.60.5 adds verified incompleteRequestCount counts, which explain requests excluded from an amount but do not mark an unavailable total; the widget states those counts on range totals and rows. Linux 0.62.0 nils out invalid model-breakdown and daily totals instead of emitting them, which keeps unknown amounts out of the JSON without supplying an explicit unavailable-versus-zero field. Done when verified Linux fields distinguish unavailable from measured zero, with old-payload compatibility and usable token charts. Prior discussion #173.

Structured localization

  • Localize opaque provider/incident/error/reset text and pace headroom through official identifiers or typed fields. The remaining contract gap is carried from 0.56.2; authenticated output has not been exhaustively rechecked through 0.60.4. Known states and structured pace forecasts already translate. At 0.60.4 the only newly structured row data is numeric (progress/usageValue with optional stable id); labels stay opaque. Done when supported fields use catalogs with placeholder/plural checks and bounded unknown-value fallbacks. Translation guide; prior discussion #174.

Display currency

  • Offer display-currency selection and conversion through an official Linux contract. The 0.56.2 audit records no display-currency setter or descriptor; the scoped 0.57.0, 0.58.0, 0.60.4, 0.67.0, 0.69.0, 0.72.0, and 0.73.0 config probes expose neither, although macOS 0.67.0 adds twelve spend-estimate currencies. Plasma currently displays the CLI-emitted currency. Done when released settings and converted amounts define currency, rate provenance, and unavailable-conversion behavior, with tested Plasma selection/display. Keep conversion and exchange-rate acquisition in the CLI and preserve separate currencies until then. Pinned blocker.

Automatic balance text

  • Show a typed money/points balance when automatic panel text has no quota. macOS 0.57.0 uses provider-specific prose parsing for several cases. A generic official Linux amount, unit/currency, and availability contract is missing. At 0.60.4 the source-observed balanceIsWorkspace/creditsAvailable fields cover Codex workspace balances only; Copilot seat-credit data travels in details rows with stable IDs instead. Both await authenticated Linux output. The 0.65.0 Charm Hyper guide describes a balance-only details row with a bare usageValue and an HC display string, which is not a typed unit. The 0.66.0 Atlas Cloud and Vercel AI Gateway plugins likewise report USD balances only as details row text. Done when the widget can display that record without parsing provider text, overriding a real quota, or treating a balance as an allowance. Source comparison; 0.60.4 evidence.

Verify before accepting implementation work

These are unresolved Linux candidates, not confirmed missing features.

  • Verify the 0.73.0 top-level resetCredits usage record on Linux. Source adds Codex available and optional nextExpiresAt projected from live inventory, while Plasma reads usage.codexResetCredits.availableCount. Empty Pi usage has neither field. Reproduce nonzero, zero, and expired inventory in an isolated official CLI before deciding how to normalize the new shape and preserve legacy fallback. Private codexbar-linux --snapshot fields belong to the separate desktop app and are not evidence for standard usage output. Source and limits.
  • Verify 0.73.0 partial-priced Codex daily/model output and imported incomplete model rows (#4273, #4278, #4279, #4299) against Plasma's cost trust and sharing rules. Empty cost envelopes are unchanged; they cannot establish how priced subtotals and request counts survive mixed unpriced requests. Use synthetic recorded history with known and unknown pricing, then accept a frontend change only for a demonstrated mismatch; keep pricing in the CLI. Review limits.
  • Adopt qmlformat once it can format this tree readably. Measured at 6.11.2 on 2026-09-23. With wrapping disabled, its default, it joins wrapped expressions into lines up to 2570 characters. Any MaxColumnWidth rewraps by splitting inside comparisons and aligning continuations under the open parenthesis, such as incidentProvider and !== null on separate lines; at 120 it still leaves 359 lines over the limit, up to 241 characters. The earlier segfault at 140 or less was unbounded recursion on regular expression literals wider than the limit; those literals are now built from strings, and every file formats at 100 or more, while four test files still crash at 80. QTBUG-131686 closed for 6.11 with // qmlformat off comments only, which disable formatting rather than keep line breaks. Rewrapping also breaks test_feature_parity.sh and test_process_lifecycle.sh, which still match source text literally. Provider metadata expectations now run through public Qt/QML interfaces instead of parsing JavaScript tables, including CLI argument overrides and required brand-color presence. Icon mapping, remaining wiring checks and formatter readability blockers are still open. At that measurement, CI ran 6.11.1 and no container runtime was available to compare its output. Done when a release keeps or improves manual expression line breaks, formats every file readably, and produces the same output on the CI image.
  • Verify the 0.64.x Linux quota-window changes in official Linux output. 0.64.0 claims Linux omits synthetic or unmeasured quota and reports only measured provider-specific windows (#3785); 0.64.1 claims each Antigravity quota pool is listed once with its family label (#3799). Both would change the window array the popup renders, and Plasma currently renders whatever windows arrive. The probe account has no enabled provider returning quota, so neither was observed. 0.73.0 also changes Kimi contradictory-window reconciliation and its Monthly Total pool (#4306), Ollama Free monthly usage (#4308), and JetBrains top-up credit/log quota fallback (#4287, #4288); include these providers in the measured-window comparison. 0.69.0 adds grouped OAuth quotas with weekly-only Starter allowances and explicit window cadence (#4084), still unmeasured. Reproduce with a signed-in Antigravity account and one other quota provider, then classify whether any normalization changes. Cover the 0.73.0 consumer OAuth client change (#4293), the 0.71.0 per-account private-session quotas (#4103), the 0.72.0 2.19.1 OAuth client-credentials recovery (#4229), and the opt-in extra profile homes (#4177) in the same reproduction. Unverified at 0.64.1; 0.69.0 addition; 0.72.0 shapes.
  • Verify Mistral's Included API and Vibe Monthly Plan windows in official Linux usage output. 0.68.0 lifts the macOS-only runtime gate for the manual-cookie path (#4024), so a subscription with cookieSource and cookieHeader set should now return allowance windows on Linux. Reproduce with a Mistral subscription safely, then classify the window shape against Plasma's generic quota rendering. Unverified at 0.69.0.
  • Verify Claude web-source allowance windows in official Linux usage output. 0.72.0 attempts the claude.ai fetch with an explicitly configured manual sessionKey cookie (#4241), so a web subscription should now return session/weekly/quota windows on Linux. Reproduce with a Claude subscription and a synthetic manual cookie safely, then classify the window shape against Plasma's generic quota rendering. Unverified at 0.72.0.
  • Verify the new 0.72.0 credit balance fields in official Linux usage output: Grok purchased Extra Usage Credits, the Claude promotional cloud-session credit separation from prepaid credits, and the Claude saved limit-reset credits in OAuth usage (#4239, #4243, #4194, #4214, #3895, #4232). Empty-history output carries none of them. Reproduce each with a funded account safely, then classify whether the generic balance/details path renders them or a normalization change is needed. Unverified at 0.72.0.
  • Verify whether Cursor's 0.64.1 Grok Bot allowance reaches Linux usage output, and under which key. The release adds a Grok Bot % menu-bar layout token; a corresponding rate window would be a normal extra window for Plasma, while a macOS-only token is a non-goal. Unmeasured without a Cursor account. Unverified at 0.64.1.
  • Verify credits.balanceReadSucceeded, creditsAvailable, and balanceIsWorkspace (also on openaiDashboard with accountID) in official Linux output. 0.60.4 source widens the flag to cap-only/omitted balances and the dashboard hides credits unless the read succeeded, while Plasma still reads remaining without any flag. Reproduce failed reads, confirmed zero, cap-only, hidden-workspace-pool, and workspace-balance data safely, then classify and specify the normalization change. Source evidence.
  • Verify stable details row id values in official Linux output (source-observed for Copilot seat-credit rows at 0.60.4). The numeric progress/usageValue fields are verified at 0.65.0, but the Bifrost rows used there carry no id. Reproduce Copilot rows safely, then decide whether stable IDs can back per-row popup visibility. macOS 0.60.5 reads the copilot-seat-credits row's progress as a switcher used-percent fallback, which does not establish a quota cadence. Source evidence.
  • Verify the Grok reset-credit detail row in official Linux output. 0.61.0 source emits an untitled details section holding one Limit Reset Credits row valued N available from shared Core fetch strategies, gated on the pre-existing requiresOptionalUsageCompleteness fetch-context flag. Plasma's generic details path already keeps an untitled section that carries rows, so confirm with authenticated output whether the row reaches CLI JSON before deciding that no work is required. The companion grokResetCredits property is live-only and never encoded. Source evidence.
  • Compare exhausted automatic text/popup quota selection with the exact 0.56.6 cases. Automatic panel capsules already show primary and secondary. Keep direct lane choices and independent quota pools. Accept a change only after reproducing a useful difference with existing Linux fields. Comparison.
  • Verify account identity and stale-data behavior against the 0.56.3–0.57.0 changes: same-email workspaces, measurement timestamps, and transient multi-account failures. Compare official Linux records with Plasma account selection/cache tests before classifying a gap; retain CLI ownership of credential matching and recovery. Generic failed-refresh retention and redacted quota restoration are implemented; account identity and credential recovery cases still need the named official CLI probes. At 0.60.4 the token-account label helper preserves accountID, but the Claude usage payload still carries no account email (usage.identity holds only providerID), so the frontend cannot show a Claude account email. Release coverage.
  • Evaluate the weekly reserve indicator against a pinned macOS behavior and an official Linux field. Record accept/reject and, if accepted, a concrete display contract. Existing quota lanes and run-out forecasts are implemented. Prior discussion #175.
  • Decide whether reset-imminent notices add value beyond current quota, pace, and completed-reset notices. Accept only quiet, opt-in, transition-based behavior backed by official timing data; otherwise remove the candidate. Prior discussion #176.

Scope and completed behavior

The usage guide describes implemented Plasma behavior, including panel composition with automatic dual-quota capsules and vertical provider meters, settings preview/privacy, grouped panel text and expandable Panel options, local sessions, notifications, and interactive cost/token charts and local aggregate usage sharing as PNG/text, with separate currencies and no subscription-fee inference. Claude 0.57.0 --breakdown is text-only; existing JSON daily/model views already consume its underlying data.

macOS-only features do not enter this backlog. The release review records exclusions. Provider parsing, pricing, authentication, and scanning fixes are CLI-owned; a new upstream implementation is not a missing QML port.