Skip to content

fix(server): full-access OpenCode threads no longer ask for approvals - #9282

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
shivamhwp:t3code/check-opencode-full-access-approvals
Sep 3, 2026
Merged

fix(server): full-access OpenCode threads no longer ask for approvals#9282
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
shivamhwp:t3code/check-opencode-full-access-approvals

Conversation

@shivamhwp

@shivamhwp shivamhwp commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

A user reported that OpenCode threads set to full access still pop approval dialogs. I reproduced it live against OpenCode 1.18.26 with a ChatGPT subscription. Ordinary tool calls are fine, but two paths in OpenCode ignore the session-level allow we send:

  • Doom loop. When the model repeats the same tool call three times, OpenCode evaluates the ask against the agent ruleset only, so our wildcard allow is never consulted. This showed up in the UI as an "unknown" approval.
  • Subagents. Child sessions spawned by the task tool keep only deny and external-directory rules from the parent, so a subagent reading *.env or hitting any agent default prompts. Since fix(opencode): handle child approvals, stops, and model catalogs #8480 routes child asks to the thread, this also shows a dialog.

Both are upstream OpenCode behavior, and full access means the user already said yes. The adapter now answers any permission ask that arrives while the session is in full access, and swallows the matching replied event so nothing reaches the UI. If the reply call fails, it falls back to showing the approval as before. Other modes are untouched.

The reply is "once", not "always". OpenCode stores "always" grants per directory, so on a shared external server an "always" from a full-access thread would widen what a supervised thread on the same directory is allowed to do.

Product note. Auto-answering the doom-loop ask means a full-access thread can repeat the same tool call without a guard. That matches what the docs promise for full access ("runs unattended") and what Codex and Claude do today, so it is intentional.

Tests cover the doom-loop ask on the parent session, a child-session ask, the failed-reply fallback, and a failed reply whose terminal event landed while the reply was in flight. The final ordering change (no yield between the terminal check and the publish) is a scheduler-interleaving race that the mock cannot reproduce deterministically, so it has no dedicated test.

Work done by Claude Fable 5.1 via Claude Code.

🤖 Generated with Claude Code


Note

Medium Risk
Changes permission handling and event emission for full-access OpenCode sessions; incorrect suppression or fallback could hide needed approvals or leave stuck dialogs, though other runtime modes are unchanged and tests cover key races.

Overview
Full-access OpenCode threads no longer surface approval dialogs for permission asks that upstream ignores the session ruleset on—doom-loop detection and subagent sessions. The adapter calls permission.reply with once (not always, to avoid widening grants for other threads on a shared directory), tracks auto-replied IDs, and suppresses matching request.opened / request.resolved UI events. If the SDK reply fails, behavior falls back to showing the approval dialog; failed in-flight replies after a terminal event must not reopen the request.

Implementation adds autoReplyFullAccess, autoRepliedRequestIds, and emitUnsafe so request.opened is not published after a terminal permission.replied lands between an async check and enqueue. Tests extend the mock with a configurable permission-reply hook and cover auto-approve (parent doom-loop + child session), reply failure fallback, and terminal/reply ordering. Docs note why full-access auto-answers these asks and why replies use once.

Reviewed by Cursor Bugbot for commit 4d250db. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix full-access OpenCode threads to auto-approve permissions without dialogs

  • Full-access sessions now automatically reply once to permission asks (doom-loop and subagent) instead of surfacing an approval dialog, using a one-time grant rather than a persistent directory-scoped grant
  • A synchronous enqueue helper (emitUnsafe) prevents an async gap between the terminal-event check and publishing request.opened, eliminating a race where a terminal reply arrives during event construction
  • Failed auto-replies remove the auto-reply marker but keep a resolved marker so the request falls through to the dialog without reopening from recovered duplicate asks; terminal events for successful auto-replies are swallowed (no request.resolved)
  • Behavioral Change: emitTerminalOpenCodeRequest now suppresses terminal events for request IDs in the auto-reply set; reviewers should verify that no request.resolved or request.opened is emitted for successfully auto-replied asks in OpenCodeAdapter.ts
  • Documents full-access adapter behavior in providers.md

Macroscope summarized 4d250db.

OpenCode ignores the session ruleset for doom-loop checks and drops the
parent's wildcard allow when it spawns subagent sessions, so full-access
threads still surfaced approval dialogs for those asks. Auto-reply
"always" to any permission ask while the session is in full access and
swallow the matching replied event, falling back to the dialog if the
reply call fails.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 2, 2026
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
@macroscopeapp

macroscopeapp Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — The server now automatically grants and suppresses OpenCode permission requests in full-access sessions, including requests that bypass upstream rules and the doom-loop safeguard. This is a localized, tested change, but it materially alters production authorization behavior and its side effects warrant human review.

You can add or adjust custom eligibility rules. Learn more.

A retry or recovery fiber could re-enter the pending-request path, or the
matching permission.replied could land, while the auto-reply SDK call was
still in flight. That raced to emit a duplicate request.opened or a stray
request.resolved. Record the resolved and auto-replied ids synchronously
before awaiting, and roll them back if the reply fails.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). and removed size:S 10-29 changed lines (additions + deletions). labels Sep 2, 2026
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
shivamhwp and others added 3 commits September 2, 2026 23:25
… resolved

If the auto-reply SDK call fails locally but OpenCode still resolved the
permission, the terminal permission.replied lands and is swallowed while the
reply is in flight, consuming the terminal slot. The failure path then rolled
back and opened a dialog that could never resolve. Guard the fallback: if the
terminal event already landed, keep the request resolved and do not reopen it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Guard against a regression where the fallback retries the reply instead of
surfacing the dialog.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ace0116. Configure here.

Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
shivamhwp and others added 2 commits September 3, 2026 04:57
…its terminal check

On a retry or recovery fiber, the event pump can deliver the terminal
permission.replied between the emittedTerminalRequestIds check and the
request.opened offer, so request.resolved lands first and the fallback
dialog can never close. Build the event first, then check and offer in one
synchronous step. The failed auto-reply also keeps the id in
resolvedRequestIds: pendingPermissions already gates re-asks while the
dialog is open.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…o-reply path

OpenCode stores "always" grants per directory, not per session. On a shared
external server an "always" from a full-access thread would silently widen
what a supervised thread on the same directory is allowed to do, so reply
"once" instead. Every ask in full access is auto-answered anyway.

Also extract the full-access branch into autoReplyFullAccess so the id
bookkeeping has a name and a boundary, add an emitUnsafe sibling next to
emit for the one publish that must not yield after its terminal check,
collapse the two identical auto-approve tests into one parameterized case,
and note the upstream ruleset quirk in the provider internals doc.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@shivamhwp

Copy link
Copy Markdown
Collaborator Author

Addressed the review in 605dcff.

  1. Reply is now "once". Confirmed against upstream Permission.reply: it returns before touching the per-directory approved list on "once" and appends to it on "always".
  2. Full-access branch extracted into autoReplyFullAccess returning replied | fallback | already-terminal. Added emitUnsafe next to emit with the one-line reason. Comments trimmed to the why.
  3. Tests 1 and 2 collapsed into one it.effect.each case. Sentinel is commented. The blind yieldNow pair in test 4 is replaced with a single microtask drain. PR body now says the final ordering change has no dedicated test.
  4. One line added to docs/internals/providers.md on the upstream ruleset quirk.

PR body rewritten: bot summary blocks removed, doom-loop product decision stated explicitly.

shivamhwp and others added 2 commits September 3, 2026 13:26
…back

autoReplyFullAccess returned a tri-state whose "already-terminal" branch
duplicated the emittedTerminalRequestIds check the caller performs right
before publishing. Only the publish-site check is load-bearing, since it
must sit next to the enqueue with no yield in between, so the helper now
returns whether the reply landed and the caller keeps the one guard.

Also moves the internals note out of "Attachment access", where it was
tacked onto a paragraph about attachment directories, into the OpenCode
section beside the existing per-directory MCP note, and records the
"once" rationale there.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@juliusmarminge
juliusmarminge enabled auto-merge (squash) September 3, 2026 20:37
@juliusmarminge
juliusmarminge merged commit d2b6f3b into pingdotgg:main Sep 3, 2026
25 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 4, 2026
## What's Changed
* fix(web): make right panel tabs easier to scroll by @maria-rcks in pingdotgg/t3code#9461
* fix(web): render transparent previews on white by @UtkarshUsername in pingdotgg/t3code#9463
* fix(mobile): show loading and syncing in the working pill by @juliusmarminge in pingdotgg/t3code#9466
* fix(server): keep a/ and b/ prefixes in rendered git patches by @Mnigos in pingdotgg/t3code#9438
* fix(server): full-access OpenCode threads no longer ask for approvals by @shivamhwp in pingdotgg/t3code#9282
* fix(web): reuse pull request list data while loading by @maria-rcks in pingdotgg/t3code#9467
* feat(web): let users turn off composer collapse on blur and scroll by @juliusmarminge in pingdotgg/t3code#9469

## New Contributors
* @Mnigos made their first contribution in pingdotgg/t3code#9438

**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1272...v0.0.39-nightly.20260903.1273

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1273
sheehanmunim added a commit to munimtechnologies/mtcode that referenced this pull request Sep 4, 2026
…ity ACP, browser import, settings reorg, limits tab)

Brings the fork up to upstream/main fee2e0f. Highlights: Google Antigravity
via the official ACP agent (pingdotgg#9348) + model manifest refreshes, browser-cookie
import (Chrome/Edge/Brave/Firefox, pingdotgg#7255/pingdotgg#7260/pingdotgg#7261), settings page reorg
(pingdotgg#9354), Codex/Claude subscription Limits tab (pingdotgg#9507, pingdotgg#9534), context
compaction command (pingdotgg#9293), async Codex questions (pingdotgg#9512), full-access
OpenCode threads skip approvals (pingdotgg#9282), project icons default (pingdotgg#9457).

Unification decisions (keep-both unless noted):
- BrowserImport: upstream implementation wins (Linux libsecret, Windows DPAPI
  unwrap, writeCookies); fork's Safari engine ported in (jar definition,
  candidate path, profile listing, running check, count skip, import branch,
  FullDiskAccess wizard step + SafariCookies kept, domain widened only for
  dotted hosts).
- Antigravity: upstream ACP provider/adapter/driver/textgen win; fork branding
  ported (providerDisabledMessage), AntigravitySettings unified (fork fields +
  upstream auth fields; enabled stays default-on).
- contracts/model: Antigravity defaults follow upstream's manifest model.
- ClaudeAdapter compact_boundary: fork's resolve helper kept, renamed to
  upstream's compactedUsage to match downstream.
- Claude capabilities probe: fork's timeout races kept; upstream's raw usage
  fetch added under the same timeout so stalled usage still degrades.
- Codex provider: upstream's withCodexAppServerClient + enriched rate-limits
  probe win (fork title branding already inside buildCodexInitializeParams).
- ProviderCommandReactor: fork goal-continuation + correction-aware first-turn
  kept; upstream compact-command exclusion added.
- OpenCodeAdapter ask path: fork's pendingGate/acceptingRequests gate kept;
  upstream full-access autoReply + terminal guard + emitUnsafe added.
- makeManagedServerProvider: fork probe-timeout protection kept; upstream
  usage-limits reconciliation applied to the checked snapshot.
- Manager.ts preview CDP: fork reuse-if-attached + detach resilience kept;
  upstream wcDebugger hardening applied.
- mobile threadSyncPhase pill dropped (upstream ThreadDetail redesign covers
  loading/sync presentation); outbox deliveryMode + goal handling kept.
- Usage: fork client-version projection kept; upstream pricing()/refreshRates
  adopted on both clients.
- Settings: fork sections (MT Teams+badge, voice, notifications, account
  sign-in) kept; upstream reorg (ids, submenus, behaviour section) adopted.
- README: fork copy kept; Antigravity added to provider lists.
- Cursor skill test macOS /var-vs-/private/var path failure is pre-existing
  upstream breakage, unrelated to this merge.

Fork guard script OK.
henrychu04 added a commit to henrychu04/t3code-coder that referenced this pull request Sep 5, 2026
* fix(web): send cited messages with Cmd+Enter (pingdotgg#9307)

* fix(web): preserve explicit preview navigation URLs (pingdotgg#8902)

* fix(web): prevent loading ssh environments from overriding navigation (pingdotgg#9168)

* fix(mobile): skip unsupported shared settings targets (pingdotgg#9381)

* fix(web): avoid duplicate Antigravity install status (pingdotgg#9419)

* fix(composer): mute fast icon when collapsed (pingdotgg#9451)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): unify skeleton loading animations on one pulse (pingdotgg#9448)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): prioritize authored pull requests (pingdotgg#9453)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): make project icons the default (pingdotgg#9457)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): reuse pr state when settling threads (pingdotgg#9459)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): keep agent images collapsed (pingdotgg#9460)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): banner buttons no longer expand the resting composer (pingdotgg#9452)

* fix(web): stop clipping the traits chevron on long Codex effort labels (pingdotgg#9433)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(web): make right panel tabs easier to scroll (pingdotgg#9461)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): render transparent previews on white (pingdotgg#9463)

* fix(mobile): show loading and syncing in the working pill (pingdotgg#9466)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): keep a/ and b/ prefixes in rendered git patches (pingdotgg#9438)

* fix(server): full-access OpenCode threads no longer ask for approvals (pingdotgg#9282)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): reuse pull request list data while loading (pingdotgg#9467)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(web): let users turn off composer collapse on blur and scroll (pingdotgg#9469)

Co-authored-by: Claude Code <noreply@anthropic.com>

* fix(web): move workflow approval beside checks (pingdotgg#9465)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(desktop): refresh generated annotation styles (pingdotgg#9488)

* fix(web): let the PR reviewer and label search boxes take keystrokes (pingdotgg#9479)

Co-authored-by: Claude Code <noreply@anthropic.com>

* fix(web): dont collapse composer when interacting with bottom row (pingdotgg#9490)

* fix(desktop): restore second-press quit fallback (pingdotgg#9485)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): keep opencode icon hollow in collapsed composer (pingdotgg#9492)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): keep agent browser preview visible (pingdotgg#9484)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(mobile): keep the machine glyph next to the environment label (pingdotgg#9486)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): let back swipe pop from horizontal scroll edges (pingdotgg#9493)

Co-authored-by: Claude Code <noreply@anthropic.com>

* fix(antigravity): discover legacy workspace skills (pingdotgg#9410)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(mobile): resolve Antigravity provider icon and normalize driver matching (pingdotgg#9495)

* fix(antigravity): forward Google sign-in URLs from browser helper (pingdotgg#9425)

* feat(desktop): import browser cookies into a profile (pingdotgg#7255)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(desktop): import from Chrome, Edge, Brave, Vivaldi, Opera, Arc and Firefox (pingdotgg#7260)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(desktop): resolve Chromium cookie keys on Linux (pingdotgg#7261)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(antigravity): allow slow runtime startup during setup (pingdotgg#9510)

* fix(antigravity): keep model choices up to date (pingdotgg#9511)

* fix(antigravity): handle native sign-in URLs on stderr (pingdotgg#9514)

* fix(antigravity): update managed runtime to 1.1.1 (pingdotgg#9509)

* fix(desktop): address the browser import review left over from the stack (pingdotgg#9516)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* feat(antigravity): show subagent calls and results (pingdotgg#9515)

* fix(web): let paste expand a resting composer (pingdotgg#9498)

Co-authored-by: Claude Code <noreply@anthropic.com>

* fix(web): keep the composer open while selecting timeline text (pingdotgg#9499)

Co-authored-by: Claude Code <noreply@anthropic.com>

* fix(web): return focus to the composer after closing a media preview (pingdotgg#9513)

Co-authored-by: Claude Code <noreply@anthropic.com>

* fix(server): keep events during thread subscription startup (pingdotgg#9521)

* chore: forward issue/PR/discussion events to Cursor hygiene (pingdotgg#9518)

Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>

* fix(auth): keep pairing credentials out of access read models (pingdotgg#9523)

* chore: drop comment events from Cursor hygiene forwarder (pingdotgg#9527)

* feat(codex): support async questions (pingdotgg#9512)

* fix(web): keep right panel controls clickable (pingdotgg#9517)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(usage): show Codex and Claude subscription limits on a Limits tab (pingdotgg#9507)

Users on Codex or Claude Code subscriptions could not see how much quota was left or when it resets without leaving T3 Code. A user whose CLIs route through a CLIProxyAPI hub could not see it at all.

Each driver now returns `usageLimits` on its own snapshot (Codex from `account/rateLimits/read`, Claude from the SDK's `get_usage`), adapters normalise turn-driven rate-limit events at the boundary, and a driver-blind ingestion layer folds them onto the owning instance. The Usage page gains a Limits tab (mobile a card) with a bar per window, elapsed marker, pace, and reset countdown. CLIProxyAPI hubs can be added as read-only usage-limit sources; their accounts show badged "via CLIProxyAPI" with emails blurred.

Distilled from pingdotgg#1732 (server model, provider rows) and pingdotgg#9421 (Limits tab, window bars, pace maths). Closes pingdotgg#228.

Co-authored-by: Aditya Mer <101453576+Aditya190803@users.noreply.github.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Claude Code <noreply@anthropic.com>

* feat(web): reorganize settings pages (pingdotgg#9354)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): settle branch threads immediately on pull request merge (pingdotgg#9528)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): back off relay client restarts after rapid exits (pingdotgg#8788)

* fix(codex): accept rate limit errors on thread resume (pingdotgg#8897)

* fix(desktop): preview CDP sessions no longer hard-crash the app (pingdotgg#9068)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix worktree removal timing out on large install trees (pingdotgg#3902)

* fix(web): settle the resting composer layout with a pixel of slack (pingdotgg#9482)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): keep automatic project icons consistent (pingdotgg#9535)

* fix(server): include SQLite conditions in persistence errors

Include SQLite conditions and schema issue tags without copying query data.

Continue @Sy-D's [pingdotgg#4837](pingdotgg#4837). Add the missing Bun error codes and test the real SQL client.

Created with GPT-6 Astra (preview) in Codex.

Co-authored-by: Sy-D <8460326+Sy-D@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(dev): keep shared dev reloads and hot updates working (pingdotgg#9543)

* feat(providers): add context compaction command (pingdotgg#9293)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(mobile): keep store screenshots free of system banners and show dictation (pingdotgg#9548)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): restore composer controls as space becomes available (pingdotgg#9539)

* fix(web): measure collapsed model labels at their visible width (pingdotgg#9540)

* fix(web): close composer menus when their controls hide (pingdotgg#9541)

* fix(web): thread error banner no longer shifts the chat (pingdotgg#9473)

* fix(server): reveal normalized paths in File Explorer (pingdotgg#9551)

* feat(marketing): fresh screenshot and floating marks on the homepage (pingdotgg#9547)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

* feat(usage): redeem Codex reset credits from the Limits tab (pingdotgg#9534)

Follow-up to pingdotgg#9507, carrying over the reset-credit redemption from pingdotgg#9421.

Codex grants a reset credit when it has rate-limited an account unfairly (`"Thanks for using Codex! You've been granted one free rate limit reset."`). Redeeming one clears the current 5h/weekly windows. The Limits tab now shows how many are banked and when the next expires, with a confirmed **Use a reset credit** action.

## How it works

- `ServerProviderUsageLimits.resetCredits` carries the count and soonest expiry; the Codex probe reads it from the same `account/rateLimits/read` it already makes.
- `ProviderInstance.consumeResetCredit` is a new optional hook — account-level, so it sits beside `refreshModels` rather than on the thread-routed adapter. The Codex driver implements it over a short-lived app-server (via `withCodexAppServerClient`, factored out of the status and skills probes which duplicated the setup), then re-probes.
- Single-flight per instance with one idempotency key kept until Codex reports an outcome, so a retry after a timeout does not open a second attempt.
- New `provider.consumeResetCredit` RPC under the operate scope; the outcome (`reset` / `nothingToReset` / `noCredit` / `alreadyRedeemed`) is shown inline.

Only Codex reports credits today. A provider without the hook gets a clear "does not bank reset credits" error; one without credits shows nothing.

## Screenshots

The local Codex row with one banked credit (the same account via the CLIProxyAPI hub above it shows no credit, as expected — the hub does not relay them):

![Limits tab with the Codex row showing "1 reset credit banked · next expires in 16d 22h" and a "Use a reset credit" button](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2897db5e357f12b3/credits-tab.png)

Close-up of the row:

![Codex row: Weekly 25% used bar, then "1 reset credit banked · next expires in 16d 22h" with the "Use a reset credit" button](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0e80f9114cab8f36/credits-row.png)

Clicking it opens the confirmation; nothing is sent until **Use credit**:

![Confirm dialog: "Use a reset credit? This redeems one credit on your account and clears the current rate-limit windows. It cannot be undone." with Cancel and Use credit](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dc728580889ef1fe/credits-confirm.png)

## Verification

- Mapper tests for the credit summary; provider, contract, and Usage page suites pass; typecheck clean.
- Verified against a real Codex Pro account holding one credit: summary and expiry render, the confirm dialog opens. **Not redeemed** — that would spend the credit.

Written by Claude Fable 5 via Claude Code; design and single-flight approach from @StiensWout's pingdotgg#9421.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Redemption spends real account credits over a new RPC; correctness depends on per-account locking and idempotency, though disabled instances and non-Codex providers are rejected explicitly.
> 
> **Overview**
> Adds **end-to-end redemption of banked Codex rate-limit reset credits** from the Limits UI on web and mobile, backed by a new operate-scoped `provider.consumeResetCredit` RPC.
> 
> **Contracts and server:** `ServerProviderUsageLimits` can include `resetCredits` (count + next expiry). Codex probes attach that from `account/rateLimits/read`. Optional `ProviderInstance.consumeResetCredit` is implemented for Codex via a scoped app-server call to `account/rateLimitResetCredit/consume`, then a limits refresh. `CodexResetCreditCoordinator` serializes redemptions per Codex account directory, reuses one idempotency key until Codex returns an outcome, and times out hung requests. `withCodexAppServerClient` is extracted so status, skills, and redemption share the same short-lived app-server setup.
> 
> **Clients:** Limits rows show banked credits and a confirmed **Use a reset credit** action that calls `serverEnvironment.consumeResetCredit` and surfaces outcomes (`reset`, `nothingToReset`, etc.) or errors.
> 
> **Web usage sources (same PR):** Adding/removing CLIProxyAPI hubs and the add dialog target a **selected connected environment** (with picker when several are connected), gated by operate access—not only the primary environment.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 98f32e6. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->


Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Claude Code <noreply@anthropic.com>

* fix(server): find newly opened pull requests after agent turns (pingdotgg#9125)

Refresh missing PR associations after agent turns on the thread's current branch. Preserve background policy, known PR caches, and failed-lookup backoff. Serialize status loads and refreshes to prevent stale responses from hiding a PR. Find branches pushed under their own name while still tracking the default branch.

Original work by Theo Browne with Claude Fable 5.1 in Claude Code. Takeover fixes created with GPT-6 Astra (preview) in Codex.

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

* ci: add on-demand Windows test workflow (pingdotgg#9538)

Co-authored-by: Claude Code <noreply@anthropic.com>

* fix(web): simplify expanded tool details (pingdotgg#9549)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): keep the last message visible when the resting composer expands (pingdotgg#9553)

Scrolling a long thread to the end with the composer at rest landed flush
against the short composer. The expansion that followed then covered the
last rows, because the timeline reserves only the live overlay height and
does not move for footer growth.

The timeline now keeps the expanded composer's height clear while the
composer rests, so expanding it again changes nothing above the composer.
The composer reports its resting flag from a layout effect and publishes a
fresh overlay height whenever that flag changes, so the reservation is
always computed from a height that belongs to the same layout.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* test(web): fix flaky startup and Tailwind tests (pingdotgg#9558)

* fix(web): keep codex restart responses continuous (pingdotgg#9560)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): make settings sidebar sub-section buttons full width (pingdotgg#9562)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): render settings sidebar immediately (pingdotgg#9563)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* chore: vouch august contributors (pingdotgg#9557)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): stabilize right panel transitions (pingdotgg#9554)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix: better shell syntax handling for labels (pingdotgg#9371)

* fix(web): align the sidebar wordmark by baseline (pingdotgg#9578)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(antigravity): keep subagent batches active after launch (pingdotgg#9579)

* fix(mobile): render workspace images in markdown file previews (pingdotgg#8769)

* fix(usage): deduplicate CLI proxy subscription accounts (pingdotgg#9584)

* fix(web): bound disconnected send toasts (pingdotgg#9592)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(desktop): restore panel titlebar interactions (pingdotgg#9591)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(connect): refresh authorization without disconnecting (pingdotgg#9582)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): show context meter in compact composer (pingdotgg#9430)

* fix(pull-requests): refresh data after thread turns (pingdotgg#9496)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): render draft PRs in gray (pingdotgg#9537)

* refactor(web): move usage provider controls to settings (pingdotgg#9599)

* fix: show idle subagent batches without completion marks (pingdotgg#9616)

* fix(web): group image views like other tool calls (pingdotgg#9597)

Co-authored-by: Claude Code <noreply@anthropic.com>

* fix: preserve tool icons on failed calls (pingdotgg#9606)

* fix(connect): diagnose incomplete headless server setup (pingdotgg#9602)

* fix(web): keep command palette above composer menus (pingdotgg#9613)

* fix(web): snooze menu no longer overlaps thread details (pingdotgg#9601)

* fix(web): match composer pull request state icons (pingdotgg#9375)

* fix(server): load OpenCode workspace skills via SDK to avoid 64KB CLI pipe truncation (pingdotgg#9585)

* fix(web): mute sidebar branch name to match worktree icon (pingdotgg#9622)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web,mobile): fold context compaction under settled turn folds (pingdotgg#9623)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(mobile): make chat text selectable on Android (pingdotgg#8779)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(web): toggle a single stashed prompt with Cmd+S (pingdotgg#9644)

Cmd+S opened the stash menu even when the composer was empty and only one prompt was stashed. It now restores that prompt directly, so repeated presses toggle between the draft and stash.

Multiple entries and images that are still saving open the menu. The stash badge still opens the menu.

Validation: 94 focused stash, shortcut, and attachment tests pass. Web typecheck and formatting pass. Targeted lint has no new warnings or errors. Browser checks were skipped at Theo's request.

Original implementation by Theo Browne. No code changes were needed during the takeover audit.

Audited with GPT-6 Astra (preview) in Codex.

* fix(server): prevent duplicate desktop clients after restart

Replace stale local desktop sessions in one transaction. Preserve paired clients and browser sessions, and keep the previous credential valid if replacement fails.

Closes pingdotgg#6283.

Original implementation by seeb1337. Reviewed and verified with GPT-6 Astra (preview) in Codex.

Co-authored-by: seeb1337 <63622047+seeb1337@users.noreply.github.com>
Co-authored-by: Theo Browne <me@t3.gg>

* fix(web): resume Antigravity threads without repeated sign-in (pingdotgg#9647)

Allow Antigravity threads to resume while saved Google sign-in is unchecked after a server restart. Keep confirmed authentication failures and installation errors visible.

Validated with 136 focused tests, web typecheck, targeted lint, and CI. Browser verification was omitted at the maintainer's request.

Created with GPT-6 Astra (preview) in Codex.

* feat(mobile): paste the phone clipboard into the terminal (pingdotgg#9199)

Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* feat(web): show which sidebar threads hold an unsent draft (pingdotgg#9658)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

* fix(server): unblock OpenCode approvals and stop (pingdotgg#9653)

OpenCode could show an Approval badge with no controls, appear stuck on TodoWrite, and keep showing a running turn after Stop.

- Show every permission, including old saved requests. Keep failed replies retryable and close completed requests even when reply events are lost.
- Keep OpenCode output pipes drained and automatic replies out of the event loop. Handle disconnects, reconnects, and confirmed stops without stale requests or running states.
- Show native task progress and command results. Do not treat TodoWrite or approval history as file edits or executed commands.
- Ignore late aborts and task updates after a turn finishes.

Fixes pingdotgg#4795
Fixes pingdotgg#7113
Fixes pingdotgg#5760

Created with GPT-6 Astra (preview) in Codex. Reviewed and merged with Claude Fable 5.1 in Claude Code.

* fix(desktop): quit immediately on a second shortcut press (pingdotgg#9657)

* fix(server): update Claude Agent SDK to 0.3.260 (pingdotgg#9135)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

* perf(server): stop loading message bodies for thread summaries (pingdotgg#9662)

* perf(web): speed up terminal snapshots (pingdotgg#9663)

* Complete upstream sync adaptations and validate Claude authentication

* Fix reviewed Coder sync regressions and add focused coverage

* Include orchestration regression suites in Coder tests

---------

Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Zortos <zortosdev@proton.me>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Igor Makowski <56691628+Mnigos@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Invictine <72551038+Invictine@users.noreply.github.com>
Co-authored-by: WellyngtonF <59291417+WellyngtonF@users.noreply.github.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
Co-authored-by: Aditya Mer <101453576+Aditya190803@users.noreply.github.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Derek Trimm <275381468+derektrimm@users.noreply.github.com>
Co-authored-by: Seth Webster <sethwebster@gmail.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: Matheus Timbó Pereira <matheusfild4@hotmail.com>
Co-authored-by: Sy-D <8460326+Sy-D@users.noreply.github.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com>
Co-authored-by: Guillermo Casanova <75276669+Gigioxx@users.noreply.github.com>
Co-authored-by: Barry <43803274+BarryHenryJr@users.noreply.github.com>
Co-authored-by: seeb1337 <63622047+seeb1337@users.noreply.github.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 7, 2026
## What's Changed
* fix(web): preserve theme when toggling advanced colors by @StiensWout in https://github.com/pingdotgg/t3code/pull/8500
* fix(chat): keep latest command live between messages by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9098
* fix(media): preview host files and stream videos across clients by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9023
* feat(cli): open projects in the running desktop app by @t3dotgg in https://github.com/pingdotgg/t3code/pull/8824
* chore: vouch six repeat contributors by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9131
* chore: delete dead code, unused deps, and duplicate helpers by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9129
* fix(web): mute routine notices and update actions by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9063
* perf(provider): bound persisted session lookups by @nateEc in https://github.com/pingdotgg/t3code/pull/8909
* fix(claude): skills picked from the composer now run by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9128
* fix(web): stop highlighter freezes and worker spin by using the Oniguruma WASM engine by @LetZico in https://github.com/pingdotgg/t3code/pull/8360
* perf: make streaming projection and activity appends incremental by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9152
* fix(server): bound orchestration replay payloads by @rcawston in https://github.com/pingdotgg/t3code/pull/8992
* perf(client-runtime): keep turn and checkpoint refs stable while streaming by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9145
* perf(clients): lease sidebar status by visibility by @StiensWout in https://github.com/pingdotgg/t3code/pull/9052
* fix(desktop): show newest changes in nightly previews by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9138
* fix(settings): sync auto-settle and other shared preferences across environments by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9147
* fix(server): prevent accidental service downgrades by @t3dotgg in https://github.com/pingdotgg/t3code/pull/5302
* fix(server): keep attachments until the command commits by @t3dotgg in https://github.com/pingdotgg/t3code/pull/7941
* fix(claude): preview images read from the workspace by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9119
* fix(web): keep generated muted foreground dimmer than entered text by @flamboh in https://github.com/pingdotgg/t3code/pull/9113
* fix(clients): stop repeating expanded commands by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9120
* fix(grok): health check, model selection, and stop all work against the real CLI by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9154
* perf(web): halve the cold-start bundle by splitting Clerk and cold routes by @StiensWout in https://github.com/pingdotgg/t3code/pull/9058
* feat(desktop): update the desktop app on remote Macs from the Update button by @t3dotgg in https://github.com/pingdotgg/t3code/pull/6554
* test(server): measure shell, second client, and reconnect transfer by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9157
* fix(web): project default model works on the hosted app by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9142
* fix(web): darken neutral control surfaces by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9064
* fix(web): preserve panel state across workspace refreshes by @maria-rcks in https://github.com/pingdotgg/t3code/pull/8968
* feat(files): open markdown, HTML, and PDF files outside the workspace by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9140
* feat(web): render HTML and PDF files in the file viewer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9143
* fix(web): compact project settings actions by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9160
* fix(web): browse folders from file breadcrumbs by @404khai in https://github.com/pingdotgg/t3code/pull/8910
* feat(pull-requests): copy provider checkout commands by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9086
* fix(web): hide build pill in narrow sidebars by @flamboh in https://github.com/pingdotgg/t3code/pull/9159
* feat(web): cite assistant responses with inline citations by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9146
* fix(provider): drop removed custom models from the model picker by @StiensWout in https://github.com/pingdotgg/t3code/pull/9075
* fix(web): align composer notices and stash by @Bil0000 in https://github.com/pingdotgg/t3code/pull/8890
* fix(web): label keybinding condition removal actions by @RakshithBhat03 in https://github.com/pingdotgg/t3code/pull/8664
* fix(contracts): accept legacy pull request checkout results by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/8238
* fix(desktop): hold-to-quit no longer gets stuck by @saphid in https://github.com/pingdotgg/t3code/pull/9141
* chore: remove unused code and brittle tests by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9150
* fix(chat): improve tool group summaries and scrolling by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9106
* feat(web): copy the full error report from the error page by @StiensWout in https://github.com/pingdotgg/t3code/pull/9166
* fix(chat): replace failed tools with thinking by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9165
* fix(chat): align failed task progress test by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9172
* fix(web): open PR toast actions in app by @eimexdev in https://github.com/pingdotgg/t3code/pull/9006
* fix(desktop): check artifact build prerequisites by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/8975
* fix(server): discover project skills for Codex and OpenCode by @UtkarshUsername in https://github.com/pingdotgg/t3code/pull/8778
* fix(pull-requests): expand code tab diffs by default by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9174
* chore: bump vendored GhosttyKit and update terminal integration by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/9155
* fix(web): copying a code block no longer copies triple backticks by @ipanasenko in https://github.com/pingdotgg/t3code/pull/8448
* fix(models): restore sticky new-thread selections by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9164
* fix(web): model info button opens its details on click by @StiensWout in https://github.com/pingdotgg/t3code/pull/9177
* fix(desktop): skip cached monitor compiler check by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9184
* fix(web): avoid stale file writes on close by @yashranaway in https://github.com/pingdotgg/t3code/pull/8630
* fix(server): bound OpenCode version probes by @yashranaway in https://github.com/pingdotgg/t3code/pull/8750
* fix(server): allow large Azure DevOps PR lists by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/8572
* fix(server): allow local-only worktree bases by @yashranaway in https://github.com/pingdotgg/t3code/pull/8751
* fix(web): remove projects with archived threads by @none23 in https://github.com/pingdotgg/t3code/pull/8798
* feat(web): make context window indicator opt-in by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9190
* fix(connect): refresh relay credentials before expiry by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9178
* fix(pull-requests): reuse github api reads by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9176
* fix(server): stop titling linked PR threads from local git history by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9191
* feat(updates): continue active threads across server restarts by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9167
* fix(mobile): prevent message and composer overlap by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9195
* fix(web): preserve composer draft during worktree setup by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9197
* fix(web): prevent two-digit list markers from being clipped by @G-R3 in https://github.com/pingdotgg/t3code/pull/9101
* fix(server): discover project skills for Claude by @anirudhsama in https://github.com/pingdotgg/t3code/pull/9210
* feat(web): redesign provider editor and models list by @StiensWout in https://github.com/pingdotgg/t3code/pull/8508
* fix(web): prevent connection rows from wrapping during removal by @MatthewFeroz in https://github.com/pingdotgg/t3code/pull/8706
* fix(pull-requests): align checkout control with author by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9196
* fix(release): pin patched expo-sharing version by @willsheldon in https://github.com/pingdotgg/t3code/pull/9250
* chore(mobile): update Expo Sharing to 57.0.17 by @StiensWout in https://github.com/pingdotgg/t3code/pull/9248
* fix(web): hide deleted providers with prototype keys by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/8337
* feat(mobile): long-press file references for path and open actions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9258
* fix(desktop): exclude opposite macOS pty prebuilds by @extoci in https://github.com/pingdotgg/t3code/pull/9240
* feat(web): add copy path button to diff headers by @ipanasenko in https://github.com/pingdotgg/t3code/pull/2403
* fix(server): subscribe before provider settings watcher by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/9271
* fix(mobile): show filled filter icon on Android when filters are active by @none23 in https://github.com/pingdotgg/t3code/pull/9217
* fix(chat): show single tool calls without summaries by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9267
* fix(web): warn when shared settings have no target environment by @imabdulazeez in https://github.com/pingdotgg/t3code/pull/9207
* fix(web): confirm closing agent-controlled browsers by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9272
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/7272
* feat(web): add opt-in panel animations by @maria-rcks in https://github.com/pingdotgg/t3code/pull/8830
* feat(projects): automatically pull clean default branches by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9277
* fix(web): show pull request state icons in tabs by @flamboh in https://github.com/pingdotgg/t3code/pull/9112
* feat(providers): add context compaction across harnesses by @maria-rcks in https://github.com/pingdotgg/t3code/pull/8808
* feat(web): add proactive panels by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9280
* fix(cursor): honor auto and full access modes by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in https://github.com/pingdotgg/t3code/pull/9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9297
* chore(ci): only run check-run agents on vouched contributors by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9298
* fix(web): stop remounting markdown on every activity delta by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9306
* fix(pull-requests): keep cached PR chrome on reopen by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9294
* feat(environments): draw each environment as the machine it runs on by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9299
* feat(web): apply and remove labels from the pull request tab by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9313
* fix(sidebar): collapse settled and snoozed shelves by default by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9314
* refactor(media): unify file and media previews across clients by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9253
* fix(chat): keep live tool labels in present tense by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9316
* chore: audit lint directives and move plugin allowlists into config by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9300
* chore(ci): narrow the Effect conventions check-run agent by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9321
* refactor(mobile): style plain views with Uniwind classes instead of the theme bridge by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9322
* fix(dev): share dev servers on the loopback Vite actually binds by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9324
* fix(web): line up the titlebar wordmark label and version pill by @tristanmanchester in https://github.com/pingdotgg/t3code/pull/9255
* fix(web): make the diff layout toggle a persisted setting by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9326
* chore: dedupe lightningcss and tailwind node bindings by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9331
* chore: upgrade vite-plus to 0.3.0 by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9327
* feat(web): add a file tree to the diff panel and pull request code tab by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9330
* feat(web): add PageUp/PageDown chat navigation by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/9315
* fix(web): collapse PR header actions to icons when narrow by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9334
* fix(web): resolve Vite sourcemap and supports warnings by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9343
* feat(web): choose whether links open in the default browser or in T3 Code by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9339
* fix(web): add press feedback to buttons by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9349
* feat(web): add customizable project icons by @saphid in https://github.com/pingdotgg/t3code/pull/9137
* fix(mobile): stop indented code overflowing Android chat bubbles by @Adamulek123 in https://github.com/pingdotgg/t3code/pull/9347
* fix(web): let the pull request list use wide screens by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9351
* feat: display native app and browser icons in work logs by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/9093
* fix(web): collapse oldest pull request comments by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9323
* fix(pull-requests): shared state + not settling? by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9332
* fix(web): stop usage summary requests reporting slow RPCs by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9358
* feat(web): suggest ssh hosts in a dropdown under the host field by @flamboh in https://github.com/pingdotgg/t3code/pull/9171
* feat(web): mod+w closes the active right panel tab before the window by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9363
* test(web): remove static markup-only component tests by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/9364
* fix(environments): draw the machine icon everywhere an environment is named by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9365
* fix(web): settled sidebar rows use the project fallback icon by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9366
* fix(web): match project icon chooser button sizes by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/9368
* fix(mobile): pressed and disabled styles no longer apply unconditionally by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9355
* fix(mobile): size expanded tool groups correctly by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9359
* fix(web): collapse the resting composer by @chrisdeeming in https://github.com/pingdotgg/t3code/pull/7855
* fix(web): keep trailing tool groups out of "Worked for" accordion by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/9384
* feat(marketing): put named-developer quotes on the landing page by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9385
* fix(claude): expand slash commands when a message has attachments by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9122
* fix(web): stop the resting composer layout loop by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9393
* fix(web): render assistant images inline in chat by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9126
* feat(providers): add Google Antigravity via the official ACP agent by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9348
* fix(mobile): show an error instead of an endless preview spinner by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9123
* fix(usage): price new models without waiting a day for the rate table by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9202
* fix(web): unlock the composer when preview capture fails by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9127
* fix(antigravity): refresh the model manifest so older Gemini models fold as legacy by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9397
* perf(ci): reuse dependency checks in release builds by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9399
* fix(web): send cited messages with Cmd+Enter by @extoci in https://github.com/pingdotgg/t3code/pull/9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in https://github.com/pingdotgg/t3code/pull/8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in https://github.com/pingdotgg/t3code/pull/9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in https://github.com/pingdotgg/t3code/pull/9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9448
* fix(web): prioritize authored pull requests by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9453
* fix(web): make project icons the default by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9457
* fix(server): reuse pr state when settling threads by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9459
* fix(web): keep agent images collapsed by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in https://github.com/pingdotgg/t3code/pull/9433
* fix(web): make right panel tabs easier to scroll by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9461
* fix(web): render transparent previews on white by @UtkarshUsername in https://github.com/pingdotgg/t3code/pull/9463
* fix(mobile): show loading and syncing in the working pill by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9466
* fix(server): keep a/ and b/ prefixes in rendered git patches by @Mnigos in https://github.com/pingdotgg/t3code/pull/9438
* fix(server): full-access OpenCode threads no longer ask for approvals by @shivamhwp in https://github.com/pingdotgg/t3code/pull/9282
* fix(web): reuse pull request list data while loading by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9467
* feat(web): let users turn off composer collapse on blur and scroll by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9469
* fix(web): move workflow approval beside checks by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9465
* fix(desktop): refresh generated annotation styles by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9488
* fix(web): let the PR reviewer and label search boxes take keystrokes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9479
* fix(web): dont collapse composer when interacting with bottom row by @extoci in https://github.com/pingdotgg/t3code/pull/9490
* fix(desktop): restore second-press quit fallback by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9485
* fix(web): keep opencode icon hollow in collapsed composer by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9492
* fix(web): keep agent browser preview visible by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9484
* fix(mobile): keep the machine glyph next to the environment label by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9486
* fix(mobile): let back swipe pop from horizontal scroll edges by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9493
* fix(antigravity): discover legacy workspace skills by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/9410
* fix(mobile): resolve Antigravity provider icon and normalize driver matching by @Invictine in https://github.com/pingdotgg/t3code/pull/9495
* fix(antigravity): forward Google sign-in URLs from browser helper by @WellyngtonF in https://github.com/pingdotgg/t3code/pull/9425
* feat(desktop): import browser cookies into a profile by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/7255
* feat(desktop): import from Chrome, Edge, Brave, Vivaldi, Opera, Arc and Firefox by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/7260
* feat(desktop): resolve Chromium cookie keys on Linux by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/7261
* fix(antigravity): allow slow runtime startup during setup by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9510
* fix(antigravity): keep model choices up to date by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9511
* fix(antigravity): handle native sign-in URLs on stderr by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9514
* fix(antigravity): update managed runtime to 1.1.1 by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9509
* fix(desktop): address the browser import review left over from the stack by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9516
* feat(antigravity): show subagent calls and results by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9515
* fix(web): let paste expand a resting composer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9498
* fix(web): keep the composer open while selecting timeline text by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9499
* fix(web): return focus to the composer after closing a media preview by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9513
* fix(server): keep events during thread subscription startup by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9521
* chore: forward issue/PR/discussion events to Cursor hygiene by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9518
* fix(auth): keep pairing credentials out of access read models by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9523
* chore: drop comment events from Cursor hygiene forwarder by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9527
* feat(codex): support async questions by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9512
* fix(web): keep right panel controls clickable by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9517
* feat(usage): show Codex and Claude subscription limits on a Limits tab by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9507
* feat(web): reorganize settings pages by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9354
* fix(server): settle branch threads immediately on pull request merge by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9528
* fix(server): back off relay client restarts after rapid exits by @derektrimm in https://github.com/pingdotgg/t3code/pull/8788
* fix(codex): accept rate limit errors on thread resume by @nateEc in https://github.com/pingdotgg/t3code/pull/8897
* fix(desktop): preview CDP sessions no longer hard-crash the app by @sethwebster in https://github.com/pingdotgg/t3code/pull/9068
* Fix worktree removal timing out on large install trees by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/3902
* fix(web): settle the resting composer layout with a pixel of slack by @matheustimbo in https://github.com/pingdotgg/t3code/pull/9482
* fix(web): keep automatic project icons consistent by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9535
* fix(server): include SQLite conditions in persistence errors by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9536
* fix(dev): keep shared dev reloads and hot updates working by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9543
* feat(providers): add context compaction command by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9293
* fix(mobile): keep store screenshots free of system banners and show dictation by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9548
* fix(web): restore composer controls as space becomes available by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9539
* fix(web): measure collapsed model labels at their visible width by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9540
* fix(web): close composer menus when their controls hide by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9541
* fix(web): thread error banner no longer shifts the chat by @flamboh in https://github.com/pingdotgg/t3code/pull/9473
* fix(server): reveal normalized paths in File Explorer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9551
* feat(marketing): fresh screenshot and floating marks on the homepage by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9547
* feat(usage): redeem Codex reset credits from the Limits tab by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9534
* fix(server): find newly opened pull requests after agent turns by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9125
* ci: add on-demand Windows test workflow by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9538
* fix(web): simplify expanded tool details by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9549
* fix(web): keep the last message visible when the resting composer expands by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9553
* test(web): fix flaky startup and Tailwind tests by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9558
* fix(web): keep codex restart responses continuous by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9560
* fix(web): make settings sidebar sub-section buttons full width by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9562
* fix(web): render settings sidebar immediately by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9563
* chore: vouch august contributors by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9557
* fix(web): stabilize right panel transitions by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9554
* fix: better shell syntax handling for labels by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/9371
* fix(web): align the sidebar wordmark by baseline by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9578
* fix(antigravity): keep subagent batches active after launch by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9579
* fix(mobile): render workspace images in markdown file previews by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/8769
* fix(usage): deduplicate CLI proxy subscription accounts by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9584
* fix(web): bound disconnected send toasts by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9592
* fix(desktop): restore panel titlebar interactions by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9591
* fix(connect): refresh authorization without disconnecting by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9582
* fix(web): show context meter in compact composer by @GuilhermeVieiraDev in https://github.com/pingdotgg/t3code/pull/9430
* fix(pull-requests): refresh data after thread turns by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9496
* fix(web): render draft PRs in gray by @extoci in https://github.com/pingdotgg/t3code/pull/9537
* refactor(web): move usage provider controls to settings by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9599
* fix: show idle subagent batches without completion marks by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9616
* fix(web): group image views like other tool calls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9597
* fix: preserve tool icons on failed calls by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9606
* fix(connect): diagnose incomplete headless server setup by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9602
* fix(web): keep command palette above composer menus by @Gigioxx in https://github.com/pingdotgg/t3code/pull/9613
* fix(web): snooze menu no longer overlaps thread details by @RakshithBhat03 in https://github.com/pingdotgg/t3code/pull/9601
* fix(web): match composer pull request state icons by @flamboh in https://github.com/pingdotgg/t3code/pull/9375
* fix(server): load OpenCode workspace skills via SDK to avoid 64KB CLI pipe truncation by @BarryHenryJr in https://github.com/pingdotgg/t3code/pull/9585
* fix(web): mute sidebar branch name to match worktree icon by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9622
* fix(web,mobile): fold context compaction under settled turn folds by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9623
* feat(mobile): make chat text selectable on Android by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/8779
* fix(web): toggle a single stashed prompt with Cmd+S by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9644
* fix(server): prevent duplicate desktop clients after restart by @seeb1337 in https://github.com/pingdotgg/t3code/pull/6305
* fix(web): resume Antigravity threads without repeated sign-in by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9647
* feat(mobile): paste the phone clipboard into the terminal by @lnieuwenhuis in https://github.com/pingdotgg/t3code/pull/9199
* feat(web): show which sidebar threads hold an unsent draft by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9658
* fix(server): unblock OpenCode approvals and stop by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9653
* fix(desktop): quit immediately on a second shortcut press by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9657
* fix(server): update Claude Agent SDK to 0.3.260 by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9135
* perf(server): stop loading message bodies for thread summaries by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9662
* perf(web): speed up terminal snapshots by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9663
* fix(web): show machine icons in the environment picker by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9668
* perf(mobile): bound diff syntax highlighting work by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9673
* perf(web): keep Markdown mounted during streaming by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9677
* perf(mobile): skip unused legacy list work by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9679
* perf(marketing): serve images at their display size by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9682
* perf(server): cache and stream static web assets by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9669
* perf(server): batch projector cursor writes by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9671
* perf(server): stop retaining unused OpenCode tool history by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9684
* perf(mobile): reuse chat feed rows during streaming by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9688
* perf(server): omit repeated OpenCode progress logs by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9689
* perf(clients): avoid waiting to read cached relay tokens by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9691
* perf(mobile): reuse diff rows during comment edits by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9693
* perf(web): defer composer draft serialization by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9695
* feat(server): measure provider turn token usage by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9132
* perf(marketing): stop continuous homepage motion by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9697
* perf(server): avoid full patches for checkpoint summaries by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9694
* perf(web): defer diff workers until a code view opens by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9692
* perf(marketing): serve website fonts locally by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9701
* perf(server): stop rebuilding terminal history per chunk by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9703
* perf(server): use one query for buffered provider events by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9706
* perf(relay): avoid repeated activity decoding by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9708
* perf(web): stop continuous chat status animations by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9709
* fix(mobile): preserve saved work after storage read failures by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9710
* perf(web): stop replaying terminal buffers on rollover by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9707
* feat(web): preview pull request links by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9631
* perf(client): reduce thread-list update work by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9716
* fix(server): settle inactive threads with open PRs by @Gigioxx in https://github.com/pingdotgg/t3code/pull/9610
* fix(server): bound slow-client event buffers by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9715
* test(server): allow either valid file-search match by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9720
* fix(web): match provider settings layout for disconnected devices by @flamboh in https://github.com/pingdotgg/t3code/pull/9619
* fix(web): keep the slash menu above the composer when vertical space is short by @Mnigos in https://github.com/pingdotgg/t3code/pull/9625
* fix(mobile): remove provider setup by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9721
* perf(web): stop rendering hidden terminals by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9718
* fix(mobile): read file-backed image drafts before enabling them by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9713
* perf(server): replay only the selected thread by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9726
* fix(web): mute composer helper text by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/9654
* feat(web): unpin threads from the sidebar multi-select menu by @gsimone in https://github.com/pingdotgg/t3code/pull/9651
* perf(web): reuse timeline rows while text streams by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9725
* fix(relay): bound stalled push requests by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9734
* perf(server): stop caching unused OpenCode tool parts by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9738
* fix(web): fold single trailing activity by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9739
* fix(web): show project settings for new threads by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9743
* perf(mobile): bound the parsed review cache by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9749
* perf(web): avoid repeated terminal metadata scans by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9747
* perf(server): bound terminal history by bytes by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9748
* feat(web): link pull request authors to profiles by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9627
* fix(web): refine server update notice by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9744
* perf(client): stop thread streams when unused by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9740
* perf(mobile): defer file preview highlighter startup by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9752
* perf(server): skip history reads for metadata commands by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9758
* perf(web): defer image URL requests for thread history by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9760
* fix(models): make GPT-6-Astra current by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9762
* fix(web): stop empty diffs replacing pull requests by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9753
* fix(sidebar): mute background working threads by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9759
* fix(web): reset automatic pull to default by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9763
* fix(web): restore file comment focus in editable preview by @ShpetimA in https://github.com/pingdotgg/t3code/pull/9061
* docs: keep internal guides focused on architecture by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9755
* docs: focus user guides on features and workflows by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9756
* fix(web): stop panel motion during navigation by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9766
* fix(web): open composer selectors below controls by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9767
* perf(server): skip unused Linux process detail reads by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9768
* fix(server): remove retired Codex models after refresh by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9773
* test: stop path and platform tests depending on the host OS by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9564
* test(server): skip posix executable fixtures on a Windows host by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9565
* test: skip symlink fixtures where the host cannot create symlinks by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9566
* test(server): run fake provider CLIs through a Node stub on every host by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9567
* test(desktop): make path fixtures and timeouts host-portable by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9568
* fix(server): tolerate the missing directory fsync on Windows by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9569
* test(server): pin git config for fixtures and compare native realpaths by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9570
* test: skip POSIX mode-bit assertions on a Windows host by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9571
* test(server): keep provider fixture directories host-portable by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9572
* test: resolve the Windows temp directory to its long name by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9573
* test(server): run the Antigravity install harness for the host platform by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9574
* fix(server): canonicalise media paths the same way their callers do by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9575
* test(server): make Windows path and async fixtures deterministic by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9576
* fix(server): refuse symlinked theme files on Windows too by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9580
* test(scripts): keep Windows packaging checks host-portable by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9589
* fix(contracts): include tool.denied in runtime event types by @Lucenx9 in https://github.com/pingdotgg/t3code/pull/9770
* feat(mobile): split the usage page into Usage and Limits tabs by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9775
* fix(web): restore the running tool label shine by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9777
* fix(web): align provider controls with machine tabs by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9769
* docs(web): document panel motion during navigation by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9778
* feat(usage): support custom model prices by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9774
* fix(web): center pull request link previews by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9794
* fix: address usage limits and merge settlement regressions by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9784
* fix(web): give toggle thumbs consistent inset spacing by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9805
* fix(web): use segmented controls for mode switches by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9781
* fix(server): recover opted-in threads after machine restarts by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9803
* fix(web): simplify changed files into a persistent folder tree by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9821
* feat: add custom model names and option descriptors by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9807
* fix(cursor): discover symlinked skills as package boundaries by @EzraBuild in https://github.com/pingdotgg/t3code/pull/9420
* fix(ssh): exec managed servers without npm wrappers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9843
* fix(server): detect nested Git workspaces for checkpoints by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9842
* fix(web): keep worktree origin preference visible by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9846
* fix(web): smooth settings sidebar transitions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9811
* feat(web): highlight visible settings sections by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9812
* fix(web): keep the sidebar project filter across navigation by @Mnigos in https://github.com/pingdotgg/t3code/pull/9416
* fix(server): surface Claude safety model fallback notices instead of dropping them by @darahaas15 in https://github.com/pingdotgg/t3code/pull/8853
* fix(web): reload saved colors when reopening the theme editor by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9847
* feat(desktop): import cookies from Safari by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/7262
* fix(web): respect case in POSIX file links by @Michel-Liao in https://github.com/pingdotgg/t3code/pull/9309
* fix(server): surface a missing workspace folder instead of a spawn error by @kakismash in https://github.com/pingdotgg/t3code/pull/5040
* fix: stop favicon requests for private link hosts on web and mobile by @fe-franco in https://github.com/pingdotgg/t3code/pull/5838
* fix(server): preserve native provider executable paths during updates by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9850
* fix(web): restore composer expansion after tool calls by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9782
* fix(client): explain possible network blocking for T3 Connect by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9783
* fix(desktop): isolate preview keyboard shortcuts from the host by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9840
* fix(prs): reuse GitHub data and defer optional reads by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9835
* perf(shared): skip duplicate PATH entries and per-probe tracing by @jadeva in https://github.com/pingdotgg/t3code/pull/9618
* fix(web): preserve focus and prioritize picker shortcuts by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9795
* fix(skills): support names beginning with digits by @amiralibg in https://github.com/pingdotgg/t3code/pull/9244
* fix(server): advertise truecolor in the integrated terminal by @shubhxho in https://github.com/pingdotgg/t3code/pull/7680
* fix(claude): surface usage-limit pauses in the thread by @vitalyiegorov in https://github.com/pingdotgg/t3code/pull/7165
* fix: restore UX after performance improvements by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9799
* fix(codex): show what a file-change approval will change by @walid-baharwal in https://github.com/pingdotgg/t3code/pull/8669
* fix(ci): add fallback Ubuntu package mirrors by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9864
* fix(web): copy text over plain HTTP by @Michel-Liao in https://github.com/pingdotgg/t3code/pull/8023
* fix(server): dismiss native questions when their turn ends by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9851
* fix(server): quote copied native provider update commands by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9856
* fix(release): install the correct Windows Spectre component by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9859
* fix(web): show retained runtime diagnostics in the work log by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9870
* fix(web): make sidebar project actions reachable by keyboard and screen reader by @akj in https://github.com/pingdotgg/t3code/pull/5521
* fix(preview): bound automation waits and screenshot captures by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/4685
* fix(web): render and filter usage as environments respond by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9860
* feat(web): edit usage prices across selected environments by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9861
* fix(mobile): keep usage tabs below the header when switching by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9876
* fix(connect): refresh HTTP credentials without reconnecting by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9594
* fix(web): keep file autosaves active after effect replay by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9878
* fix(web): prioritize open panel pull request when copying by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9877
* fix(cli): resolve projects with missing workspace directories by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9885
* fix(web): sort equally merge-ready pull requests by diff size by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9887
* fix(chat): show hours for long runs by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9894
* fix(server): only run provider updates through the installer that owns the binary by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9325
* fix(web): discard stale highlights after file edits by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9902
* feat(web): recall sent prompts with the up arrow by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9173
* fix(server): keep mise-owned npm packages manual-only by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9927
* fix(settings): share restart continuation across environments by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9933
* fix(server): capture turn checkpoints after all edits finish by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9841
* fix(web): load file grammar before enabling edits by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9947
* fix(web): deduplicate PR project filter choices by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9948
* test(web): keep provider field readers private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9952
* test(mobile): keep composer selection helper private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9953
* test(client-runtime): keep scoped key implementation private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9955
* fix(web): reveal reselected diff files by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9951
* refactor(web): remove obsolete changed-files preview helpers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9956
* fix(web): give the browser keybinding notice breathing room by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9964
* chore: configure Knip workspace audits by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9958
* refactor(web): prune unused UI and provider code by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9959
* chore(mobile): remove obsolete widget wiring script by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9960
* chore: remove redundant root tooling dependencies by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9961
* ci: reject unused files and dependencies with Knip by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9962
* test(contracts): keep driver default lookup private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9968
* test(server): remove Azure permissions constant snapshot by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9973
* refactor(shared): remove unused viewport formatters by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9970
* refactor(mobile): remove unused provider option summary by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9971
* refactor(client-runtime): remove unused connection phase message by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9972
* refactor(mobile): remove unused layout calculations by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9974
* refactor(client-runtime): remove unused file position predicate by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9976
* refactor(mobile): remove unused font size steppers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9975
* test(server): cover thread lookup through command invariants by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9978
* test(server): remove provider equality wrapper fixture by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9979
* test(server): assert the dispatched welcome thread model by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9980
* refactor(desktop): remove unused keyring remediation text by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9981
* refactor(desktop): remove test-only Electron error predicates by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9982
* refactor(web): remove unused pull request state label by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9984
* perf(web): keep timeline row reuse engaged while text streams by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9909
* fix(web): reset markdown widgets when the previewed file changes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9910
* fix(mobile): keep highlighting review diffs after a long line by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9911
* fix(marketing): align the endorsement carousel with its heading by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9912
* fix(client): keep warm thread resumes live instead of flashing sync by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9913
* test(server): remove authorization prompt snapshots by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9985
* test(server): remove static OAuth page snapshots by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9986
* test(server): remove provider label identity assertion by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9987
* test(server): consolidate agent activity opt-in coverage by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9988
* refactor(shared): remove unused preview URL predicate by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9989
* refactor(shared): remove unused mention path serializer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9990
* refactor(shared): remove retired PATH capture parser by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9991
* refactor(client-runtime): remove unused subagent selectors by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9992
* refactor(web): test the live usage column builder by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9993
* refactor(web): remove unused aspect ratio reconciler by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9994
* refactor(web): remove obsolete cloud listing helpers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9995
* test(web): remove composer control style snapshots by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9996
* test(web): keep the preview profile label helper private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9997
* test(server): cover raw OpenCode deltas through the adapter by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9977
* refactor(web): remove obsolete pull request link opener by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9983
* test(relay): keep the stage slug helper private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9998
* refactor(mobile): keep project selection helper private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9999
* refactor(mobile): keep review default ID helper private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10000
* refactor(mobile): remove unused native style constants by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10001
* refactor(mobile): test terminal palettes through public theme API by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10002
* refactor(mobile): remove unused file tree walkers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10003
* refactor(shared): keep persisted settings helpers private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10004
* test(mobile): remove mocked UUID shape assertions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10006
* refactor(mobile): test final connection status presentation by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10007
* test(web): keep pull request menu items private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10016
* refactor(shared): test favicon selection through public API by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10005
* refactor(server): remove test-only pricing normalizer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10017
* refactor(web): remove unused desktop update visibility helper by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10014
* refactor(web): remove obsolete provider update helpers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10015
* refactor(web): remove unused terminal context preview formatter by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10009
* refactor(web): test environment-scoped draft promotion by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10010
* fix(web): retain wrapped row heights during edits by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10018
* refactor(shared): remove unused Clerk hostname predicate by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10008
* refactor(tailscale): keep package internals private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10011
* ci: reject unused tailscale exports with Knip by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10012
* fix(web): keep chat media at a stable size while it loads by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/9938
* refactor(server): keep manifest age parsing private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10028
* refactor(mobile): remove unused awareness relay URL normalizer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10029
* refactor(server): remove unused startup heartbeat launcher by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10030
* refactor(shared): keep search ranking comparator private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10031
* refactor(server): keep telemetry identity errors private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10032
* refactor(mobile): test composer persistence through the live decoder by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10033
* refactor(web): remove unused sidebar selectors by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10034
* refactor(server): keep Cursor fallback models private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10038
* refactor(web): remove unused xterm link range helpers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10040
* refactor(mobile): remove obsolete review list builder by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10039
* test(server): remove duplicate VCS error constructor checks by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10042
* refactor(mobile): keep appearance calculations private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10043
* refactor(web): remove unused sidebar menu action by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10044
* refactor(web): test live Ghostty link resolution directly by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10041
* test(server): exercise Codex prompts through public assembly by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10045
* refactor(shared): remove unused elapsed-time adapter by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10046
* refactor(web): remove unused preview thread reset helper by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10049
* refactor(desktop): remove test-only error predicates by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10047
* refactor(mobile): keep review reset hashing private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10048
* test(web): remove AppRoot element order snapshot by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10052
* refactor(codex): keep app-server client internals private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10035
* ci: reject unused Codex client exports with Knip by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10036
* refactor(server): simplify native telemetry error internals by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10057
* refactor(mobile): remove write-only terminal font cache by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10058
* refactor(web): remove obsolete HSL theme generator by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10061
* refactor(mobile): remove obsolete native diff token stream by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10062
* test(server): remove title prompt editorial snapshots by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10063
* test(server): remove repeated runtime prompt interpolation cases by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10059
* refactor(web): observe preview tests through the live registry by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10064
* test(server): remove keybinding default assignment snapshot by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10065
* refactor(mobile): remove obsolete whole-file review highlighters by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10067
* test(server): cover CLI runner detection through command suggestions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10066
* refactor(mobile): remove unused cloud relay URL normalizer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10068
* refactor(web): test live keybinding resolvers directly by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10069
* test(server): cover Grok skill parsing through discovery by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10070
* test(web): remove mocked diff view prop snapshot by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10073
* test(web): remove mocked annotation options snapshot by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10074
* refactor(web): keep pending action labels private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10075
* refactor(mobile): remove unused cloud pending-status mapper by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10071
* refactor(web): remove unused model picker hint helpers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10072
* fix(server): resume checkpointing after git init by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/10078
* feat(web): first-run welcome wizard with agent setup and project import by @t3dotgg in https://github.com/pingdotgg/t3code/pull/5362
* fix(server): keep Homebrew mise shims manual-only by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10085
* fix(ssh): report remote package installation failures accurately by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10088
* fix(web): keep bulk thread deletion going after failures by @m-de-graaff in https://github.com/pingdotgg/t3code/pull/4615
* fix(web): scale agent spawn rows with interface font by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10092
* fix(web): prevent sidebar tooltip title clipping by @UtkarshUsername in https://github.com/pingdotgg/t3code/pull/10086
* fix(web): keep the composer expanded until the thread can scroll by @t3dotgg in https://github.com/pingdotgg/t3code/pull/9965
* fix(web): preserve original mention text in the composer by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10100
* refactor(mobile): remove unused pairing redaction wrapper by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10147
* test(web): drop provider banner styling assertions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10148
* refactor(client-runtime): remove unused relay token waiter by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10151
* test(web): drop sidebar artwork styling snapshots by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10152
* refactor(ssh): keep package internals private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10144
* ci: reject unused SSH exports with Knip by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10145
* refactor(acp): keep protocol implementation exports private by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/10165
* fix(shared): validate cloudflared with the version subcommand by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9880
* fix(desktop): separate LAN and Tailscale pairing endpoints by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9882
* fix(server): install pinned runtime when pnpm node lacks npm by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9923
* fix(web): hide sidebar search shortcut on mobile by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9932
* fix(web): align tool disclosure chevrons with expanded state by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9935
* fix(antigravity): distinguish session initialization auth failures by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9919
* fix(cursor): cache successful model discovery between refreshes by @maria-rcks in https://github.com/pingdotgg/t3code/pull/9918
* fix(opencode): revert from the first removed assistant message by @maria-rcks in https://github.com/pingdotgg/t3code/pull/…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants