Skip to content

fix(desktop): claim the t3code:// scheme default on Linux at startup - #5054

Merged
juliusmarminge merged 4 commits into
mainfrom
fix/linux-default-scheme-handler
Aug 2, 2026
Merged

fix(desktop): claim the t3code:// scheme default on Linux at startup#5054
juliusmarminge merged 4 commits into
mainfrom
fix/linux-default-scheme-handler

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Jul 30, 2026

Copy link
Copy Markdown
Member

Summary

Follow-up to #5015. Linux users still get the "Choose an application to open 't3code'" prompt on every OAuth callback (and Firefox flows keep failing), even though the scheme registration from #5015 shipped — the app now appears in the chooser but is never recorded as the default handler for x-scheme-handler/t3code.

Why the OS keeps prompting

Linux ships as an AppImage, so the integrated .desktop entry's filename is decided by whatever integration tool the user runs (AppImageLauncher names it appimagekit_<hash>-….desktop). Electron's app.setAsDefaultProtocolClient resolves the desktop id from setDesktopName (t3code.desktop), which can never match those files — so there is no reliable built-in way to claim the default.

The fix

On packaged Linux startup, the new DesktopLinuxUrlHandler service:

  1. Writes a dedicated t3code-url-handler.desktop into $XDG_DATA_HOME/applications (default ~/.local/share/applications) with Exec="$APPIMAGE" %U, MimeType=x-scheme-handler/t3code;, and NoDisplay=true. Pointing at $APPIMAGE matters: process.execPath lives in the transient /tmp/.mount_* squashfs (it is used only as a fallback outside an AppImage). Exec values use freedesktop quoting (% doubled, " ` $ \ escaped).
  2. Claims the scheme default via xdg-mime default t3code-url-handler.desktop x-scheme-handler/t3code — the same association the file manager's "set as default app" checkbox records in mimeapps.list.

Registration is best-effort: any failure (missing xdg-utils, read-only home) logs a warning and never blocks startup; the OS chooser remains as fallback. Re-running on every launch keeps the Exec path current when the AppImage moves, and lets whichever channel (stable/nightly) launched last own the scheme — matching macOS semantics.

Supporting changes: DesktopConfig reads XDG_DATA_HOME, and DesktopEnvironment exposes linuxApplicationsDir + appImagePath (already parsed from $APPIMAGE).

User impact

After updating and launching the app once, browser OAuth redirects open T3 Code directly — no chooser dialog in Chrome/Chromium, and Firefox shows its standard one-time confirmation with T3 Code preselected instead of failing.

Test plan

  • New DesktopLinuxUrlHandler.test.ts: desktop-entry rendering incl. Exec quoting, AppImage vs. executable fallback, xdg-mime invocation, platform/packaged gating, and that write/xdg-mime failures never fail startup
  • Full desktop suite passes (411 tests), typecheck clean

🤖 Generated with Claude Code


Note

Low Risk
Linux-only, packaged-only startup side effect with failures logged and startup never blocked; writes one user desktop file and runs xdg-mime.

Overview
Packaged Linux builds now register t3code:// as the default URL handler at startup so OAuth callbacks do not keep opening the system “choose an application” dialog.

A new DesktopLinuxUrlHandler service writes a hidden t3code-url-handler.desktop under $XDG_DATA_HOME/applications (from XDG_DATA_HOME, default ~/.local/share/applications) with MimeType=x-scheme-handler/t3code;, Exec pointing at $APPIMAGE when set (not the transient AppImage mount path), then runs xdg-mime default to claim the scheme. Registration is best-effort (warnings only) and is skipped on non-Linux or unpackaged runs. DesktopApp startup invokes linuxUrlHandler.register after whenReady.

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

Note

Claim the t3code:// URL scheme default on Linux at app startup

  • Adds DesktopLinuxUrlHandler.ts, a new service that writes a freedesktop .desktop entry file and invokes xdg-mime default to register the app as the default handler for the t3code:// scheme.
  • Reads XDG_DATA_HOME from the environment (falling back to ~/.local/share) to determine where to write the .desktop file, exposed via DesktopEnvironment.
  • Registration runs only on Linux packaged (AppImage) builds; non-Linux and unpackaged builds are no-ops.
  • Failures during registration are captured in a structured DesktopLinuxUrlHandlerRegistrationError and logged without crashing startup.

Macroscope summarized 76e80dd.

The AppImage's integrated .desktop entry now advertises
MimeType=x-scheme-handler/t3code, so the app shows up in the browser's
"Choose an application" dialog — but nothing records it as the default
handler, so every OAuth callback prompts the user again (and the entry's
filename is decided by the integration tool, e.g. AppImageLauncher's
appimagekit_<hash>-….desktop, so Electron's setAsDefaultProtocolClient
cannot claim it via setDesktopName).

Write a dedicated t3code-url-handler.desktop into
$XDG_DATA_HOME/applications pointing at the current $APPIMAGE and set it
as the scheme default via xdg-mime — the same association the file
manager's "set as default" checkbox records. Registration is best-effort
and never blocks startup.

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

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6fdbad26-1085-4cba-a3cd-0bfcdda20f6f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jul 30, 2026

@macroscopeapp macroscopeapp 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.

Reviewed the new DesktopLinuxUrlHandler service against the Effect service conventions. The service/tag/make/layer shape, namespace imports, dependency acquisition (yield* Foo.Foo), and Effect.catch on a fully-handled channel all look right. Two error-modeling issues below.

Posted via Macroscope — Effect Service Conventions

Comment thread apps/desktop/src/app/DesktopLinuxUrlHandler.ts
Comment thread apps/desktop/src/app/DesktopLinuxUrlHandler.ts Outdated
…on errors

Add desktopEntryPath and exitCode fields to
DesktopLinuxUrlHandlerRegistrationError so failures log the resolved
entry path and the xdg-mime exit status instead of burying them in a
synthetic Error cause; cause is now optional for the domain failure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Comment thread apps/desktop/src/app/DesktopLinuxUrlHandler.ts Outdated
Implementations unescape a desktop entry's Exec value twice: the general
string-value rules first, then the Exec quoting rules. Writing therefore
has to apply Exec quoting first and general string escaping on top, so a
literal backslash in the AppImage path lands as four backslashes in the
file, a double quote as \\" and a dollar sign as \\$. The previous
single-layer escaping produced a malformed command for paths containing
those characters.

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

macroscopeapp Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new Linux-specific feature that writes .desktop files and executes xdg-mime commands at startup to claim URL scheme defaults. While well-scoped and defensive (failures don't block startup), new features with filesystem/process interactions warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge enabled auto-merge (squash) August 2, 2026 21:51
@juliusmarminge
juliusmarminge merged commit 69dfb7f into main Aug 2, 2026
17 checks passed
@juliusmarminge
juliusmarminge deleted the fix/linux-default-scheme-handler branch August 2, 2026 21:53
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 3, 2026
PauloDaniel1993 added a commit to PauloDaniel1993/t3code that referenced this pull request Aug 4, 2026
Brings in 17 upstream commits (base e60821f). Headline changes:

- Upgrade Effect to beta.103 (pingdotgg#5331), which removes the
  `Schema.UnknownFromJsonString` export and drops the positional actual
  argument from `SchemaIssue.InvalidValue`.
- Replace the hand-rolled gzip path with `HttpMiddleware.compression()`,
  deleting apps/server/src/httpCompression/ entirely (pingdotgg#5331).
- Extract desktop base/state dir resolution into DesktopStatePaths.ts, and
  add Linux secret storage, URL-scheme claiming, and early-startup modules
  (pingdotgg#2916, pingdotgg#5054).
- Mobile provider icons for Grok, Cursor, and OpenCode (pingdotgg#4586).
- Web polish: chat code blocks, tooltip z-index, spacing, loading screen,
  terminal cursor blink, terminal close-shortcut guard.

Manual resolution and why:

- apps/desktop/src/app/DesktopEnvironment.ts — semantic. Upstream deleted
  the `configuredBaseDir` local that the fork's branding override sat on
  top of, moving that logic into resolveDesktopBaseDir/resolveDesktopStateDir.
  Took upstream's extraction wholesale and re-applied the fork's
  displayNameOverride intent on it. The fork additionally gains upstream's
  trimming of a blank T3_HOME, which the old inline version did not do.

- apps/mobile/src/components/ProviderIcon.tsx — the fork had replaced raw
  `props.provider === ...` checks with a resolveProviderIconKind seam;
  upstream's three new icons used the raw form. Routed them through the
  seam instead of mixing both styles, extended ProviderIconKind, and added
  test coverage so the new kinds cannot silently fall back to the OpenAI
  icon.

- apps/server/src/textGeneration/CodexTextGeneration.ts — mechanical. Took
  upstream's one-line Schema change, kept the fork's rewrite of the rest.

Merge-caused fixes beyond the conflicts:

- Swept 15 fork-only call sites from `Schema.UnknownFromJsonString` to
  `Schema.fromJsonString(Schema.Unknown)`. These produced no conflict
  markers; the export simply no longer exists in beta.103. Upstream's own
  OrchestrationEventStore.ts survives only because it defines a local
  alias of the same name.

Verified: pnpm install, pnpm typecheck (15/15 projects clean), pnpm test.
Five failures remain in packages/shared (relayClient, logging); those four
files are byte-identical to both upstream/main and the pre-merge backup,
and assert POSIX-only behavior (linux-x64 fixture paths, forward-slash
path comparisons, ENAMETOOLONG). They cannot pass on Windows and are
unrelated to this merge.

Backup of the pre-merge tip: backup/dev-before-merge-20260804
cursor Bot pushed a commit to aaditagrawal/t3code that referenced this pull request Aug 6, 2026
cursor Bot pushed a commit to aaditagrawal/t3code that referenced this pull request Aug 6, 2026
cursor Bot pushed a commit to aaditagrawal/t3code that referenced this pull request Aug 6, 2026
cursor Bot pushed a commit to aaditagrawal/t3code that referenced this pull request Aug 6, 2026
cursor Bot pushed a commit to aaditagrawal/t3code that referenced this pull request Aug 6, 2026
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 7, 2026
## What's Changed
* fix(mobile): reduce thread feed scroll jank by @gabrielelpidio in pingdotgg/t3code#4874
* fix(web): restore sidebar v2 thread actions and terminal icon by @Noojuno in pingdotgg/t3code#4712
* fix(web): settle button now works on hover, not just right-click by @t3dotgg in pingdotgg/t3code#4905
* fix(clients): disable add project while disconnected by @StiensWout in pingdotgg/t3code#4834
* fix(composer): hide default Codex service tier by @maxktz in pingdotgg/t3code#4784
* docs: link iOS and Android app store downloads by @t3dotgg in pingdotgg/t3code#4902
* fix(web): align remote server update action by @StiensWout in pingdotgg/t3code#4731
* fix(connect): suggest a serve command that matches how you ran connect by @t3dotgg in pingdotgg/t3code#4897
* fix(mobile): stop shared content errors in Personal Team builds by @t3dotgg in pingdotgg/t3code#4943
* perf(mobile): sends respond instantly, thread opens stop freezing by @t3dotgg in pingdotgg/t3code#4882
* fix(web): show Codex fast mode as a bolt by @t3dotgg in pingdotgg/t3code#4947
* docs: seed worktrees with a copy of real userdata instead of banning it by @t3dotgg in pingdotgg/t3code#4949
* fix(mobile): support dragged images in the composer by @t3dotgg in pingdotgg/t3code#4953
* fix(mobile): stop long iOS threads from jumping while scrolling up by @t3dotgg in pingdotgg/t3code#4867
* fix(web): keep worktree default when switching a draft's machine by @t3dotgg in pingdotgg/t3code#4964
* perf(mobile): reconnect environments immediately on resume by @t3dotgg in pingdotgg/t3code#4878
* feat(web): pasting a huge screenshot now compresses it instead of erroring by @t3dotgg in pingdotgg/t3code#4967
* feat(web): regenerate thread titles from sidebar by @t3dotgg in pingdotgg/t3code#4810
* fix(web): show server update progress through reconnect by @t3dotgg in pingdotgg/t3code#4903
* feat(search): find threads by conversation content by @t3dotgg in pingdotgg/t3code#4959
* fix: marketing site Vercel builds no longer die after ~100 deploys by @t3dotgg in pingdotgg/t3code#4975
* docs: split user and maintainer docs, fix 100+ stale claims by @t3dotgg in pingdotgg/t3code#4807
* fix(web): server updates no longer look like warnings by @t3dotgg in pingdotgg/t3code#4992
* fix(connect): reboots no longer strand the relay link, 403s now say why by @t3dotgg in pingdotgg/t3code#4988
* Add project file picker (⌘P) and project content search (⇧⌘F) by @jakeleventhal in pingdotgg/t3code#4855
* Check for mobile app updates on launch by @juliusmarminge in pingdotgg/t3code#4958
* fix(mobile): support pre-Liquid-Glass iOS bottom toolbar by @gabrielelpidio in pingdotgg/t3code#4984
* fix(server): restore PR detection without HOME by @StiensWout in pingdotgg/t3code#4985
* fix(web): fill fast mode icon by @maria-rcks in pingdotgg/t3code#5004
* fix: cache project favicons across web and mobile by @gabrielelpidio in pingdotgg/t3code#4767
* perf(ci): cut stale runs and redundant setup by @t3dotgg in pingdotgg/t3code#4802
* style(web): make scroll-to-end pill translucent by @maria-rcks in pingdotgg/t3code#5036
* fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux by @juliusmarminge in pingdotgg/t3code#5015
* perf(server): cache default branch name and origin existence across status refreshes by @UtkarshUsername in pingdotgg/t3code#5008
* feat(shared): support shorthand (major-only) versions in the semver helpers by @arhxam in pingdotgg/t3code#5027
* fix(mobile): remove unnecessary photo library permission by @skjiisa in pingdotgg/t3code#4929
* fix(shared): lenient JSON parser deletes commas inside string values by @arhxam in pingdotgg/t3code#5025
* fix(mobile): default bare IP pairing to HTTP by @Lucenx9 in pingdotgg/t3code#4990
* fix(mobile): restore iOS Threads branding by @PixPMusic in pingdotgg/t3code#4862
* chore: add mobile issue template area by @MaxAnderson95 in pingdotgg/t3code#4895
* fix(desktop): link release notes from the update downloaded toast by @Sy-D in pingdotgg/t3code#4771
* fix(mobile): accept Android clipboard images in composer by @adityavardhansharma in pingdotgg/t3code#4836
* fix(mobile): show the correct build channel in Android's Threads page header by @PixPMusic in pingdotgg/t3code#4861
* fix(contracts): decode growing config unions forward-compatibly by @juliusmarminge in pingdotgg/t3code#5055
* fix(mobile): server model, worktree, and origin preferences now apply to new tasks by @t3dotgg in pingdotgg/t3code#5064
* fix(ci): repair the mobile showcase screenshots workflow by @juliusmarminge in pingdotgg/t3code#5057
* fix(ci): capture iPad App Store screenshots in landscape by @PixPMusic in pingdotgg/t3code#5065
* fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout by @mwolson in pingdotgg/t3code#5066
* feat(cli): `npx t3 pair` - generate QR code from a running server by @t3dotgg in pingdotgg/t3code#4955
* fix(server): self-update no longer rolls itself back on restart by @t3dotgg in pingdotgg/t3code#5095
* fix(ci): rotate iPad showcase captures without Simulator UI scripting by @juliusmarminge in pingdotgg/t3code#5094
* feat(web): render terminals with libghostty-vt by @StiensWout in pingdotgg/t3code#4860
* refactor: move the canonical libghostty-vt vendor to the repository root by @StiensWout in pingdotgg/t3code#5102
* feat(mobile): add thread snoozing by @gabrielelpidio in pingdotgg/t3code#5053
* feat(mobile): make settled threads collapsible by @PixPMusic in pingdotgg/t3code#5056
* follow-up normalization after #4700. by @shivamhwp in pingdotgg/t3code#4498
* feat(web): search threads from the sidebar by @shivamhwp in pingdotgg/t3code#4769
* feat(web): add settings sidebar search by @shivamhwp in pingdotgg/t3code#4682
* fix: threads with open PRs no longer auto-settle by @t3dotgg in pingdotgg/t3code#5151
* fix(server): bound thread catch-up replay and stop full-DB snapshot hydration by @t3dotgg in pingdotgg/t3code#5147
* fix(server): follow branch drift in dedicated worktrees so PRs link to their thread by @t3dotgg in pingdotgg/t3code#5159
* fix(server): make remote updates rollback-safe by @t3dotgg in pingdotgg/t3code#5181
* fix(web): stop settle controls overlapping the status label by @ipanasenko in pingdotgg/t3code#4574
* fix: normalize app icon glyph sizing by @t3-code[bot] in pingdotgg/t3code#5202
* fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug by @arhxam in pingdotgg/t3code#5076
* fix(server): stop npx service updates from silently leaving the old server running by @t3dotgg in pingdotgg/t3code#5217
* feat: fold legacy models into separate menus by @t3dotgg in pingdotgg/t3code#5190
* fix(desktop): claim the t3code:// scheme default on Linux at startup by @juliusmarminge in pingdotgg/t3code#5054
* fix(web): polish interface spacing by @maria-rcks in pingdotgg/t3code#5252
* fix(desktop): Niri/Hyprland - Linux secret storage backend by @mwolson in pingdotgg/t3code#2916
* fix(web): match loading screen to dark theme by @t3-code[bot] in pingdotgg/t3code#5303
* fix(web): blink the terminal cursor again by @StiensWout in pingdotgg/t3code#5314
* fix(terminal): protect held Ctrl/Cmd+W close shortcut by @StiensWout in pingdotgg/t3code#5322
* fix(server): strip replayable terminal queries from history by @StiensWout in pingdotgg/t3code#5319
* fix(contracts): decode ServerProviders forward-compatibly by @Brechard in pingdotgg/t3code#5327
* fix(web): simplify chat code blocks by @t3-code[bot] in pingdotgg/t3code#5301
* fix(web): align multiline error alert controls by @t3-code[bot] in pingdotgg/t3code#5304
* Upgrade Effect to beta.103 by @juliusmarminge in pingdotgg/t3code#5331
* fix(web): increase tooltip z-index to overlay popovers and menus by @naMqe-h in pingdotgg/t3code#5326
* fix(server): use a Cursor todo's title when its content is blank by @arhxam in pingdotgg/t3code#5073
* fix(ssh): isolate managed tunnel processes by @nateEc in pingdotgg/t3code#4347
* fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals by @arhxam in pingdotgg/t3code#5075
* fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode by @Wraient in pingdotgg/t3code#4586
* fix(web): stop the chat timeline reading through the provider status banner by @Bil0000 in pingdotgg/t3code#5353
* fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes by @t3dotgg in pingdotgg/t3code#5148
* fix(server): generate durable thread titles by @t3dotgg in pingdotgg/t3code#5357
* fix(web): better right panel (new diffs styling) by @maria-rcks in pingdotgg/t3code#5260
* fix(server): keep regenerated titles on topic by @t3dotgg in pingdotgg/t3code#5365
* refactor(server): make title prompts plaintext by @t3dotgg in pingdotgg/t3code#5368
* feat(web): configurable fonts and sizes under Settings → Appearance by @StiensWout in pingdotgg/t3code#5103
* feat(sidebar-v2): bring back thread pinning by @t3dotgg in pingdotgg/t3code#5312
* feat(web): make pairing QR codes actually scannable, with endpoint choice by @t3dotgg in pingdotgg/t3code#5360
* fix(desktop,web): improve in-app browser shortcuts and URL behavior by @t3dotgg in pingdotgg/t3code#4703
* fix(web): prevent legacy model picker layout shift by @FllipEis in pingdotgg/t3code#5349
* fix(server): allow remote updates with database migrations by @t3dotgg in pingdotgg/t3code#5374
* fix(mcp): unblock Kimi models in OpenCode with preview tools by @hwanseoc in pingdotgg/t3code#5128
* fix(web): clear main branch lint warnings by @t3dotgg in pingdotgg/t3code#5384
* fix(mobile): preserve grouped project workspaces by @shivamhwp in pingdotgg/t3code#4642
* fix(mobile): prevent Android thread search crash by @shivamhwp in pingdotgg/t3code#5386
* fix(web): truncate long project switcher names by @FllipEis in pingdotgg/t3code#5348
* fix(mobile): avoid double dividers between thread sections by @shivamhwp in pingdotgg/t3code#5391
* fix(web): keep the composer command menu anchored to the composer by @StiensWout in pingdotgg/t3code#5336
* fix(web): restore terminal link hover styles by @StiensWout in pingdotgg/t3code#5382
* fix(ci): isolate releases from shared API rate limits by @t3dotgg in pingdotgg/t3code#5394
* fix(web): keep model picker shortcuts in sync by @t3dotgg in pingdotgg/t3code#5400
* fix(web): keep terminal font settings reliable by @StiensWout in pingdotgg/t3code#5397
* Enrich terminal font previews by @juliusmarminge in pingdotgg/t3code#5428
* fix(web): preserve terminal font size when splitting by @t3-code[bot] in pingdotgg/t3code#5444
* Prevent terminal loading flash by @juliusmarminge in pingdotgg/t3code#5432
* fix: reconnect faster after remote server updates by @t3dotgg in pingdotgg/t3code#5404
* feat: native subagent & workflow observability by @t3dotgg in pingdotgg/t3code#5219
* perf(server): stop shipping full MCP tool results in thread payloads by @t3dotgg in pingdotgg/t3code#5482
* fix(web): closed plan sidebar stays closed when returning to a thread by @t3dotgg in pingdotgg/t3code#5484
* fix: respect time format for sidebar snooze by @huxcrux in pingdotgg/t3code#4438
* fix: smooth remote server updates by @t3dotgg in pingdotgg/t3code#5470
* fix(server): drop superseded tool updates from snapshots by @t3dotgg in pingdotgg/t3code#5483
* fix(web): clarify auto permission fallback by @t3-code[bot] in pingdotgg/t3code#5431
* fix(acp): keep unknown approvals actionable by @t3-code[bot] in pingdotgg/t3code#5430
* fix(mobile): stop thread messages reading through pending cards by @carlosricojr in pingdotgg/t3code#5450
* fix(web): align composer inline chips with prompt text by @StiensWout in pingdotgg/t3code#5495
* fix(web): clear woke state on explicit thread actions by @StiensWout in pingdotgg/t3code#5486
* fix(server): skip origin fetch when creating worktrees in repos without an origin remote by @t3dotgg in pingdotgg/t3code#5556
* fix(web): update tooltip no longer dismisses when scrolling release notes by @t3dotgg in pingdotgg/t3code#5547
* fix(server): stop showing commit/push/PR notices as errors in the work log by @t3dotgg in pingdotgg/t3code#5559
* fix(web): show remote environment for non-Git projects by @t3dotgg in pingdotgg/t3code#5555
* fix(server): stopping a Claude thread no longer shows an ede_diagnostic error by @t3dotgg in pingdotgg/t3code#5557
* fix(web): show one toast when snoozing threads in bulk by @t3dotgg in pingdotgg/t3code#5560
* fix(server): let stopped threads settle immediately by @t3dotgg in pingdotgg/t3code#5553
* feat: paginate thread loading with user-anchored turn windows by @t3dotgg in pingdotgg/t3code#5493
* fix: prevent reconnect loops during server stalls by @gfsaaser24 in pingdotgg/t3code#5561
* fix(server): settle stopped Claude subagents by @t3dotgg in pingdotgg/t3code#5568
* fix: scrolling up during a running thread no longer snaps back to the bottom by @t3dotgg in pingdotgg/t3code#5566
* fix(server): one disconnecting client no longer blocks every reconnect by @t3dotgg in pingdotgg/t3code#5572
* test(server): catch client transfer regressions in CI by @t3dotgg in pingdotgg/t3code#5350
* fix(web): stop the "requests are slow" warning from firing on every provider update by @t3dotgg in pingdotgg/t3code#5570
* fix(web): keep agent panel rows stable by @t3dotgg in pingdotgg/t3code#5569
* docs: ship production T3 Connect public config in .env.example by @t3dotgg in pingdotgg/t3code#5573
* fix(web): plans stop hijacking the UI, fold into chat instead by @t3dotgg in pingdotgg/t3code#5558
* feat(web): remove Build/Plan toggle from the composer by @t3dotgg in pingdotgg/t3code#5551
* feat(web): per-device provider settings by @t3dotgg in pingdotgg/t3code#4479
* fix(mobile): invisible T3 Connect devices can now be seen and removed by @t3dotgg in pingdotgg/t3code#5563
* fix: add missing space before 'GitHub releases page' link on download page by @Mateleo in pingdotgg/t3code#4511
* fix(web): stop the sidebar "Working" label from pulsing by @t3dotgg in pingdotgg/t3code#5580
* feat(web): add modular theme library by @StiensWout in pingdotgg/t3code#5226
* fix(web): reading a thread clears Done; Woke is dismissible by @t3dotgg in pingdotgg/t3code#5579
* perf(dev): faster cold-start for dev web serving by @t3dotgg in pingdotgg/t3code#5584
* fix(dev): agents get --share right on the first try by @t3dotgg in pingdotgg/t3code#5586
* fix(mobile): improve keyboard avoiding by @jmeistrich in pingdotgg/t3code#5451
* fix(web): live background-work banner no longer hides behind the update notice by @t3dotgg in pingdotgg/t3code#5595
* fix(web): stabilize chat timeline positioning by @jmeistrich in pingdotgg/t3code#5449
* feat(server): record runtime mode per turn and on mode changes by @t3dotgg in pingdotgg/t3code#5593
* feat(web): thread actions from the chat header title by @t3dotgg in pingdotgg/t3code#5592
* fix(mobile): avoid iOS terminal reset on clear by @justynleung in pingdotgg/t3code#5440
* fix(mobile): pad scroll views above Android nav bar by @StoneCotton in pingdotgg/t3code#5415
* fix(mobile): keep Android chat text from showing through the composer by @PollyGlot in pingdotgg/t3code#5582
* fix(mobile): repair Clerk auth navigation headers by @gabrielelpidio in pingdotgg/t3code#5140
* Bump mobile app version to 1.0.2 by @juliusmarminge in pingdotgg/t3code#5588
* feat(web): click the pin icon to unpin a thread by @UtkarshUsername in pingdotgg/t3code#5578
* fix(web): show the correctly matching shortcut in new thread button's tooltip by @UtkarshUsername in pingdotgg/t3code#5594

## New Contributors
* @gabrielelpidio made their first contribution in pingdotgg/t3code#4874
* @arhxam made their first contribution in pingdotgg/t3code#5027
* @skjiisa made their first contribution in pingdotgg/t3code#4929
* @Lucenx9 made their first contribution in pingdotgg/t3code#4990
* @MaxAnderson95 made their first contribution in pingdotgg/t3code#4895
* @t3-code[bot] made their first contribution in pingdotgg/t3code#5202
* @Brechard made their first contribution in pingdotgg/t3code#5327
* @naMqe-h made their first contribution in pingdotgg/t3code#5326
* @Bil0000 made their first contribution in pingdotgg/t3code#5353
* @gfsaaser24 made their first contribution in pingdotgg/t3code#5561
* @Mateleo made their first contribution in pingdotgg/t3code#4511
* @jmeistrich made their first contribution in pingdotgg/t3code#5451
* @justynleung made their first contribution in pingdotgg/t3code#5440
* @StoneCotton made their first contribution in pingdotgg/t3code#5415
* @PollyGlot made their first contribution in pingdotgg/t3code#5582

**Full Changelog**: pingdotgg/t3code@v0.0.31...v0.0.32

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 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