Skip to content

fix(web): scrolling pans expanded images and Mermaid diagrams - #26630

Merged
shivamhwp merged 4 commits into
pingdotgg:mainfrom
shivamhwp:issue-watch/26611
Nov 10, 2026
Merged

shivamhwp merged 4 commits into
pingdotgg:mainfrom
shivamhwp:issue-watch/26611

Conversation

@shivamhwp

@shivamhwp shivamhwp commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Plain scrolling in the expanded image viewer zoomed instead of moving the image, so a zoomed image or Mermaid diagram could not be panned with a trackpad or wheel.

Closes #26611

Change

  • Only pinch and Ctrl+wheel zoom (both arrive as a ctrlKey wheel event).
  • Plain wheel scrolling, vertical, sideways or diagonal, now pans through the viewer's native scroll area.
  • Mouse users zoom with Ctrl+wheel, click, or +/-/0, as before.

Verification

Web dev server in Chromium with real wheel input, same test image, Mermaid diagram and steps on main c6ca605 and this head 56e699e. The top-left box is a capture-only overlay showing the viewer's zoom and scroll position.

After 4 wheel-down ticks: main is back at 100% with scroll y=0; this PR stays at 165% and has moved to y=415.

After 4 wheel-down ticks: main resets zoom, this PR pans

Image, before: watch the zoom. After Ctrl+wheel takes it to 165%, plain scrolling drops it back to 100% and the image never moves.

before-image.mp4

Image, after: zoom stays at 165% while scroll x/y change and the view pans down, right, then up-left. Ctrl+wheel still zooms back to 100%.

after-image.mp4

Mermaid, before and after: same steps on an expanded diagram, same result.

before-mermaid.mp4
after-mermaid.mp4

The blue rounded outline appears only once Tab focuses the viewer, and looks the same on main and this PR (main's focus ring). Wheel-only use shows no outline on either.

Focus ring after Tab: identical on main and this PR

  • The new browser test in ExpandedImageDialog.browser.test.tsx fails on main (plain wheel is cancelled) and passes here.
  • fleet-job check passed at 56e699e (format, lint, knip, typecheck, tests).
  • Not shown: physical Mac trackpad pinch and momentum scrolling. Earlier packaged macOS app recordings still apply; the viewer code hasn't changed since.

Implemented by Opus 5.5 in Claude Code; earlier review and macOS testing by gpt-6.1-sol in Codex.

Every wheel event in the fullscreen image and Mermaid viewer zoomed, so a
Mac trackpad's two-finger scroll could not pan a zoomed image. Only
ctrlKey wheels (trackpad pinch, Ctrl+wheel) zoom now; plain wheels pan
through the viewport's native overflow scrolling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Oct 28, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs Human Approval

Macroscope's review found this PR requires human approval — Ordinary scrolling now pans expanded images and Mermaid diagrams, while pinch or Ctrl+scroll zooms. A human should confirm this change to the viewer’s default scroll interaction.

No code changes detected at 56e699e. Prior analysis still applies.

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

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 56e699e and bc839b9.

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

No actionable comments were generated in the recent review.

Walkthrough

Ordinary wheel input now pans the image viewer without zooming. Ctrl+wheel zooms the image. The accessible description and browser test reflect these interactions.

Changes: Image viewer wheel interaction

Layer / File(s) Summary
Wheel interaction and regression coverage
apps/web/src/components/chat/ZoomableImage.tsx, apps/web/src/components/chat/ExpandedImageDialog.browser.test.tsx
The wheel handler zooms only for Ctrl+wheel and leaves ordinary wheel input available for panning. The accessible description identifies scrolling and dragging as pan controls. The browser test checks wheel cancellation, zoom, panning, and preservation of the image position under the viewport center during zoom.

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Low

Possibly related issues

  • pingdotgg/t3code#29740: This PR changes ordinary wheel input to pan at a fixed image scale. It does not address the issue’s fit-to-height calculation or maximum zoom behavior.

Possibly related PRs

Suggested reviewers: juliusmarminge, t3dotgg

Merge Risk: Minimal · previous review 56e69

Ordinary scrolling pans while Ctrl+scroll zooms in the reported checks. No concrete issue remains that should block merging.

Pre-merge checks: Passed 2 · Inconclusive 2

Failed Failed checks: 2 inconclusive

Check name Status Explanation Resolution
Out of Scope Changes check Inconclusive The wheel changes in ZoomableImage.tsx and their regression test support [#26611] and stay in scope. The aria text update supports the new input model. Head 56e699e7 adds a separate change not des… Provide evidence that expanded Mermaid diagrams or the file-preview path render SVGs without width and height through ZoomableImage, and explain why the SVG fit change belongs in this PR. Alternatively, move the SVG fit change and its tes…
Description check Inconclusive The description states the problem, the change, and a detailed verification section with recordings, a regression test result, and unverified areas. It is thorough, but it does not link a triaged bug … Add a "Scope and approval" statement that points to the triaged issue #26611 and any maintainer approval comment on the direction and scope. If maintainer approval is not present, explain why this focused fix of an obvious bug qualifies wit…
Passed Passed checks: 2 passed

Check name Status Explanation
Title check Passed The title "fix(web): scrolling pans expanded images and Mermaid diagrams" names the main change. The changeset makes ordinary wheel input pan expanded images and Mermaid diagrams instead of zooming th…
Linked Issues check Passed [#26611] requires that ordinary trackpad or wheel scrolling pan expanded images and Mermaid diagrams, and that pinch zoom still zooms. At head 56e699e7, ZoomableImage.tsx returns early from the vi…
Full details: Title check

Explanation

The title "fix(web): scrolling pans expanded images and Mermaid diagrams" names the main change. The changeset makes ordinary wheel input pan expanded images and Mermaid diagrams instead of zooming them, and reserves zoom for pinch and Ctrl+wheel. The title follows the conventional commit format the template recommends and is specific enough for a teammate scanning history.

Full details: Linked Issues check

Explanation

[#26611] requires that ordinary trackpad or wheel scrolling pan expanded images and Mermaid diagrams, and that pinch zoom still zooms. At head 56e699e7, ZoomableImage.tsx returns early from the viewport wheel listener unless event.ctrlKey is set. Pinch on macOS arrives as a ctrlKey wheel event, so pinch zoom stays active. Plain wheel events are no longer canceled, so the overflow-auto viewport scrolls natively. The Ctrl+wheel zoom factor is 0.01. ExpandedImageDialog.browser.test.tsx checks plain-wheel non-cancellation, fixed scale during vertical, horizontal and diagonal panning, and anchored Ctrl+wheel zoom. The change since the previous reviewed head 572de1e0 adds an SVG fit-size change (mimeType === "image/svg+xml" ? Infinity : 1) and a fit test. It does not alter wheel handling, so the wheel requirement assessment still holds. The source diff does not directly show that the expanded Mermaid view uses ZoomableImage. That link rests on the PR description and the before-Mermaid recording. Physical trackpad pinch and momentum are unverified. That gap is not a coding requirement failure.

Full details: Out of Scope Changes check

Explanation

The wheel changes in ZoomableImage.tsx and their regression test support [#26611] and stay in scope. The aria text update supports the new input model. Head 56e699e7 adds a separate change not described in the PR description: the fit scale for image/svg+xml becomes Infinity before the min() with width and height limits, plus the it.each test fits a markdown SVG without intrinsic size to the viewer. The commit comment says an SVG without width and height reports a tiny default size. The change alters initial fit and can upscale vector images. The PR description says the head 572de1e0 change does not alter the viewer implementation, so it does not cover this change. The issue does not mention SVG fit sizing. The diff does not show that expanded Mermaid diagrams reach this path without intrinsic size. The connection to #26611 is therefore unestablished. The change is not shown to be unrelated, because it sits in the same shared viewer used for expanded Mermaid diagrams.

Resolution

Provide evidence that expanded Mermaid diagrams or the file-preview path render SVGs without width and height through ZoomableImage, and explain why the SVG fit change belongs in this PR. Alternatively, move the SVG fit change and its test to a separate pull request. Update the PR description to cover commit 56e699e7.

Full details: Description check

Explanation

The description states the problem, the change, and a detailed verification section with recordings, a regression test result, and unverified areas. It is thorough, but it does not link a triaged bug issue or maintainer approval in the Scope and approval section. It does cite issue #26611 as closed by the PR, and the linked issue objectives describe the reported behavior. Because the template requires an explicit approval reference or justification for scope, that section is incomplete, which keeps the description from a clean pass.

Resolution

Add a "Scope and approval" statement that points to the triaged issue #26611 and any maintainer approval comment on the direction and scope. If maintainer approval is not present, explain why this focused fix of an obvious bug qualifies without prior approval. Also add the model and harness used for the work, as the template asks, and keep the Problem and Change sections in the template's expected form.

Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 572de1e and 56e699e.

Files selected for processing: 2

  • apps/web/src/components/chat/ExpandedImageDialog.browser.test.tsx
  • apps/web/src/components/chat/ZoomableImage.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

@shivamhwp

Copy link
Copy Markdown
Collaborator Author

[gpt-6.1-sol][Codex] on behalf of shivam.

Before and after evidence for this PR. Generated test data only; macOS 27.0.1, Electron 44.9.3. Baseline 9e09926d97824179d97311d1a810c6b5bb60d2d1, fixed 2d9b7ab5b277953fdb589b467cb2a43e111bb798.

Before, image scrolling changes zoom:

before-image-short.mp4

Before, Mermaid scrolling changes zoom:

before-mermaid-short.mp4

After, scrolling pans the image at a fixed zoom, followed by other zoom and pan controls:

after-image.mp4

After, scrolling pans the Mermaid diagram at a fixed zoom, followed by other zoom and pan controls:

after-mermaid.mp4

Viewer captures use different zoom levels; the videos establish scale preservation during scrolling.

Before
After

maria-rcks commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

thanks @shivamhwp. the native overflow panning and ctrl-wheel guard already provide the smallest correct fix, so i kept your implementation and regression test intact. merged current main (8970a32104e0) into your branch without rewriting history. head: 572de1e066a26bd3f16b8cf8b862f829da36ab73. the diff remains two files, with no unrelated changes.

verification:

  • reproduced the regression on current main: ordinary wheel was canceled; the existing regression failed there and both browser tests passed with the fix.
  • blacksmith vp run check:changed passed format, lint, both knip passes, affected typechecks, browser tests and react compiler checks.
  • real web client, system chrome: uploaded image and mermaid attachment expansion, vertical/horizontal panning, ctrl-wheel zoom, click zoom, keyboard reset and closing. an ordinary 180px wheel changed scrollTop by 180 while width stayed 2240px; main shrank that same image to 1563px. mermaid wheel panned 120px at unchanged width, then ctrl-wheel zoomed.
  • all 31 head checks are green; cafe reports mergeable. the latest bot review has no actionable findings.
  • two independent code reviews approved this head with no findings. uploaded recording playback and seeking passed.

unverified this run: physical trackpad pinch/momentum, packaged electron, native mobile and macos fullscreen spaces. the shared web/electron viewer changes; native mobile is unaffected. maintainer approval of the wheel behavior change remains for review.

matching image data and wheel input, before and after:

main: ordinary wheel changes image scale

fixed: ordinary wheel pans at unchanged image scale

main and fixed wheel interactions, ctrl-wheel zoom and keyboard reset

maria-rcks commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

verified as-is at 572de1e066a26bd3f16b8cf8b862f829da36ab73 on this linux boat vm. no code changes or pushes.

  • reproduced on current github/main (616c426f5f) in ../main, installed with vp i, then stopped its captured dev process before starting the exact pr head. both used real dev servers and isolated state.
  • used repo playwright and /usr/bin/google-chrome, at 1440×1000. created a project pointing to a real git repo through the app. a real codex gpt-6.1-sol turn created the architecture image and mermaid response. preserved that app-created state for matching before/after data. a second real codex turn completed through the pr web client and confirmed the file dimensions. no replay provider, mock, fixture, or demo data.
  • ordinary vertical, horizontal, and diagonal wheel input pans both expanded markdown images and mermaid diagrams at unchanged scale on the pr. main changes scale on vertical and diagonal input.
  • nearby behavior passed: anchored ctrl+wheel zoom (image anchor drift below 0.001), drag panning, click zoom, keyboard plus/minus and 0 reset, arrow-key panning, escape, and the close button. the second provider response appeared in the client.
  • blacksmith ran the existing ExpandedImageDialog.browser.test.tsx: both tests passed. github currently reports 21 successful and 10 skipped checks, none failing or pending.

measured through the running client with the same initial zoom and wheel inputs:

                         main                          pr
image, wheel y=180       width 2520 -> 1758.14          width 2520 -> 2520
                                                       scrollTop 525 -> 705
image, wheel x=120                                      scrollLeft 646 -> 766
image, wheel -40,-40                                    x 766 -> 726; y 705 -> 665
mermaid, wheel y=180     width 1312.5 -> 915.69          width 1312.5 -> 1312.5
                                                       scrollTop 525 -> 705
pr codex turn            completed; client displayed:
                         "width: 1600px, height: 1200px."
                         "provider verification complete."

screenshots follow the identical 180px vertical wheel input. the recording shows main first, then the pr; each shows image followed by mermaid, with vertical/horizontal/diagonal wheel, ctrl+wheel, drag, reset, and click zoom. inspected the captures and watched the full exported recording. uploaded playback and seeking also passed in t3's browser.

main: ordinary image wheel input changes scale

pr: the same image wheel input pans at fixed scale

main: ordinary mermaid wheel input changes scale

pr: the same mermaid wheel input pans at fixed scale

main and pr: real image and mermaid wheel, zoom, drag, and reset interactions

Not verified

physical trackpad pinch and momentum, packaged electron, macos/windows behavior, native ios/android, remote/relay/tunnel connections, and separate file-preview entry points were not exercised on this linux web run. ctrl+wheel covers the zoom event path, not physical pinch hardware. the first codex turn's optional html preview tool timed out; it still completed and its actual image and mermaid rendered in the client. neither provider turn stalled for ten minutes.

maintainer approval of the default wheel interaction remains a review decision. no merge, close, rebase, force-push, or label changes.

@shivamhwp

Copy link
Copy Markdown
Collaborator Author

[gpt-6.1-sol][Codex] on behalf of shivam.

Resolved R1, the missing packaged macOS Electron verification, at 572de1e066a26bd3f16b8cf8b862f829da36ab73.

Built an unsigned macOS arm64 ZIP on shiv with vp run dist:desktop:artifact --platform mac --target zip --arch arm64 --output-dir /tmp/test-pr/t3code-26611/artifacts --keep-stage --verbose. The command exited 0 and validated the app payload. The executed bundle reported app.isPackaged === true, embedded commit 572de1e066a2, a t3code://app/ renderer and its bundled server. No Vite server or development renderer ran. Environment: macOS 27.0.1 arm64, Electron 44.10.0, Chromium 152.0.7977.169. Run r_aczqohwzdkfb2q00.

Both viewers passed ordinary vertical, horizontal and diagonal scrolling at fixed zoom, followed by Ctrl+wheel zoom in and out. Representative measurements from trusted CDP wheel input:

Viewer Ordinary wheel result Width during all three pan gestures Ctrl+wheel zoom-in width
Image Y +180, X +120, then X/Y -40 2483.4375 px unchanged 3524.1719 px
Mermaid Y +180, X +120, then X/Y -40 2175.0156 px unchanged 3086.4844 px

Each clip shows expansion, Ctrl+wheel zoom, all three ordinary pan gestures, and further Ctrl+wheel zoom. I inspected the extracted frames and the successful numeric test output.

Packaged image:

packaged-image.mp4

Packaged Mermaid:

packaged-mermaid.mp4

Frames from the exported image and Mermaid recordings:

Image interactions

Mermaid interactions

The app used isolated HOME, T3 home and Electron profile from its first launch, with generated image and Mermaid data. It did not access live app state or sign in to T3 Connect. To preserve background control, test-only in-memory hooks made window presentation inactive and disabled focus requests; viewer files, layout and input handlers were unchanged. A readout-only overlay showed the measurements. Input was trusted Chromium CDP wheel automation, not physical trackpad input.

Build provenance: SHA-256 of app.asar was a4662a1e8ccd1adf6f8358a771faeb53b092e28165c3b29161ac8a96cd25b597; packaged ZIP was b19a8fbc957679320ab977e3e4cb7b25abaeebe255384b8ae3c0beb5b579abd1. Both final MP4s decoded without errors. The app and owned subprocesses exited; temporary build, toolchain and isolated state were deleted. The existing checkout stayed clean and unchanged. No source change or push was needed.

Unproven: physical trackpad pinch/momentum, physical mouse hardware, signed/notarized distribution, uninstrumented foreground launch, native macOS fullscreen Spaces, and other platforms or connection modes. This run verifies the packaged viewer behavior, not provider execution or event persistence.

@shivamhwp
shivamhwp merged commit 046efd7 into pingdotgg:main Nov 10, 2026
31 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Nov 10, 2026
**v0.1.9-nightly.20261110.4452** · 15 changes from 4 contributors

- **Background command details.** Inspect background commands, their status and captured output, and navigate to their subagents.
- **Requested page changes.** Agents can make changes through page tools when you ask them to.
- **Expanded image navigation.** Pan zoomed images and Mermaid diagrams using a trackpad or mouse wheel.
- **Antigravity usage pricing.** Usage recognizes more Antigravity models and prices their token usage more accurately.

### Plus 8 more bug fixes.

<details>
<summary>Full changelog</summary>

## What's Changed
* fix(web): new threads use the last used project by @Yash-Singh1 in pingdotgg/t3code#33626
* fix(mobile): distinguish local ACP instances by name by @shivamhwp in pingdotgg/t3code#32467
* ci(mobile): dev clients build on Blacksmith, and mobile:install starts that build by @juliusmarminge in pingdotgg/t3code#33617
* fix(mobile): Android sidebar and composer transitions no longer reflow at rest by @juliusmarminge in pingdotgg/t3code#33599
* fix(server): price Antigravity Gemini Flash effort variants by @Ephraim-9 in pingdotgg/t3code#13809
* fix(mobile): Android feed stays at its end after the keyboard or sidebar changes by @juliusmarminge in pingdotgg/t3code#33611
* fix(server): Antigravity install no longer fails on a stale Windows Crashpad pipe by @juliusmarminge in pingdotgg/t3code#26374
* ci(mobile): Android PR preview clients build on Blacksmith by @juliusmarminge in pingdotgg/t3code#33618
* fix(web): scrolling pans expanded images and Mermaid diagrams by @shivamhwp in pingdotgg/t3code#26630
* fix(desktop): agents see visible:true while the desktop shows their tab by @shivamhwp in pingdotgg/t3code#23589
* fix(server): allow requested WebMCP writes by @shivamhwp in pingdotgg/t3code#26570
* fix(antigravity): resolve model names from usage metadata by @Yash-Singh1 in pingdotgg/t3code#33661
* fix(web): show details for background commands by @Yash-Singh1 in pingdotgg/t3code#33647
* fix(ci): store-build checkouts drop credentials without submodule cleanup by @juliusmarminge in pingdotgg/t3code#33664
* fix(web): "Use T3 Code in another app" opens the Grok Bot app by @juliusmarminge in pingdotgg/t3code#33663


**Full Changelog**: pingdotgg/t3code@v0.1.9-nightly.20261110.4449...v0.1.9-nightly.20261110.4452

</details>


Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.9-nightly.20261110.4452
AdEx-Partners-DE added a commit to AdEx-Partners-DE/t3code that referenced this pull request Nov 10, 2026
Integrates 15 upstream commits (nightly 4449 to 4452) with one conflict in a
generated file: background commands show their details (pingdotgg#33647), Antigravity
model names from usage metadata (pingdotgg#33661), Gemini Flash effort pricing (pingdotgg#13809)
and an install that no longer fails on a stale Windows Crashpad pipe (pingdotgg#26374),
WebMCP writes on request (pingdotgg#26570), agents see visible:true while the desktop
shows their tab (pingdotgg#23589), scrolling pans expanded images and Mermaid diagrams
(pingdotgg#26630), "Use T3 Code in another app" opens the Grok Bot app (pingdotgg#33663), new
threads use the last used project, and mobile and CI fixes (pingdotgg#33611, pingdotgg#33599,
pingdotgg#32467, pingdotgg#33664, pingdotgg#33618, pingdotgg#33617). No dependency file changed. No fork feature
was added or dropped.

The conflict is apps/server/src/provider/agentContextBudget.json, the measured
agent context size: upstream lowered its three values by 2, 2 and 16 bytes, and
the fork's mcpToolListJsonBytes was larger (52804 instead of 48233). Resolved as
5547 / 7277 / 52788 (both changes added); AgentContextBudget.test.ts confirms
that the measured sizes equal these values.

check:changed against the pre-merge HEAD (74 files) passes in every step: format,
lint, knip, graphql, the typecheck of 41 packages, 40 test files, node --test and
the react compiler check.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Pipyakas pushed a commit to Pipyakas/t3code that referenced this pull request Nov 11, 2026
…tgg#26630)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
(cherry picked from commit 046efd7)
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Nov 11, 2026
**v0.1.9** · 198 changes from 31 contributors

- **T3 Connect agent sign-in.** Approve agent sign-ins with T3 Connect instead of copying a pairing code.
- **Send during uploads.** Send messages with attachments while they are still uploading.
- **Claude session approvals.** Allow an MCP app for a Claude session instead of approving each action individually.
- **Screen reader announcements.** Hear agent messages and steps during a turn without leaving the composer.
- **GitLab revert.** Revert a merged GitLab merge request from T3 Code.
- **OpenCode goals.** Use OpenCode's native goals and keep their state in sync across clients.
- **Pull request links.** Open pull request links directly to their referenced comment, diff line, checks, or commit.

### Plus 164 more bug fixes and performance improvements.

<details>
<summary>Full changelog</summary>

## What's Changed
* fix(web): checking for updates finds provider updates on every machine by @t3dotgg in pingdotgg/t3code#33538
* fix(web): settings say custom instructions cover pull request descriptions by @maria-rcks in pingdotgg/t3code#33113
* feat(web): send messages while attachments upload by @maria-rcks in pingdotgg/t3code#33092
* fix(mobile): Android PDF preview double-tap zoom and easier link taps by @juliusmarminge in pingdotgg/t3code#33570
* feat: approve agent sign-ins with T3 Connect instead of a code by @juliusmarminge in pingdotgg/t3code#33600
* fix(mobile): the composer and search bars move with their iOS columns by @juliusmarminge in pingdotgg/t3code#33543
* ci(mobile): build Android store releases on Blacksmith by @juliusmarminge in pingdotgg/t3code#33565
* fix(web): thread title menu opens without a half-second wait on desktop by @t3dotgg in pingdotgg/t3code#33598
* fix(web): a new side chat focuses its message input by @darioielardi in pingdotgg/t3code#32929
* perf(opencode): bound usage reads to in-window messages by @Yash-Singh1 in pingdotgg/t3code#33612
* chore(web): upgrade @pierre/diffs to 1.7 and use its built-in find by @juliusmarminge in pingdotgg/t3code#33627
* fix(web): expanding hidden diff context works after a diff refresh by @juliusmarminge in pingdotgg/t3code#33629
* feat: approve agent sign-ins on app.t3.codes with T3 Connect by @juliusmarminge in pingdotgg/t3code#33632
* perf(cursor): improve account usage scanning by @Yash-Singh1 in pingdotgg/t3code#33636
* fix(web): dropdown items over the desktop title bar respond to clicks by @screen-gd in pingdotgg/t3code#32643
* fix: hosted agent approval no longer fails with "Your session cannot approve" by @juliusmarminge in pingdotgg/t3code#33645
* fix(web): new threads use the last used project by @Yash-Singh1 in pingdotgg/t3code#33626
* fix(mobile): distinguish local ACP instances by name by @shivamhwp in pingdotgg/t3code#32467
* ci(mobile): dev clients build on Blacksmith, and mobile:install starts that build by @juliusmarminge in pingdotgg/t3code#33617
* fix(mobile): Android sidebar and composer transitions no longer reflow at rest by @juliusmarminge in pingdotgg/t3code#33599
* fix(server): price Antigravity Gemini Flash effort variants by @Ephraim-9 in pingdotgg/t3code#13809
* fix(mobile): Android feed stays at its end after the keyboard or sidebar changes by @juliusmarminge in pingdotgg/t3code#33611
* fix(server): Antigravity install no longer fails on a stale Windows Crashpad pipe by @juliusmarminge in pingdotgg/t3code#26374
* ci(mobile): Android PR preview clients build on Blacksmith by @juliusmarminge in pingdotgg/t3code#33618
* fix(web): scrolling pans expanded images and Mermaid diagrams by @shivamhwp in pingdotgg/t3code#26630
* fix(desktop): agents see visible:true while the desktop shows their tab by @shivamhwp in pingdotgg/t3code#23589
* fix(server): allow requested WebMCP writes by @shivamhwp in pingdotgg/t3code#26570
* fix(antigravity): resolve model names from usage metadata by @Yash-Singh1 in pingdotgg/t3code#33661
* fix(web): show details for background commands by @Yash-Singh1 in pingdotgg/t3code#33647
* fix(ci): store-build checkouts drop credentials without submodule cleanup by @juliusmarminge in pingdotgg/t3code#33664
* fix(web): "Use T3 Code in another app" opens the Grok Bot app by @juliusmarminge in pingdotgg/t3code#33663
* ci(mobile): keep the Android store AAB as a workflow artifact by @juliusmarminge in pingdotgg/t3code#33674
* fix(mobile): hide compose in the detail rail while starting a task by @juliusmarminge in pingdotgg/t3code#33678
* ci(mobile): version bump commits no longer credit Codex by @juliusmarminge in pingdotgg/t3code#33689
* fix(server): stop PR watch flapping while workflows await approval by @shivamhwp in pingdotgg/t3code#24599
* fix(server): show idle paragraphs before the assistant turn ends by @shivamhwp in pingdotgg/t3code#28221
* fix(mobile): fit usage view selector beside the date range at large text by @PixPMusic in pingdotgg/t3code#33682
* fix(web): center short PR titles in thread details by @Yash-Singh1 in pingdotgg/t3code#33724
* fix(server): Claude threads can allow an MCP app for the session by @t3dotgg in pingdotgg/t3code#33707
* fix(web): reclaim notice says the machine will be offline by @shivamhwp in pingdotgg/t3code#33730
* fix(server): detaching a session no longer strands its pending approval by @juliusmarminge in pingdotgg/t3code#33535
* fix(opencode): long command turns no longer fail when the command request times out by @juliusmarminge in pingdotgg/t3code#27677
* fix(server): a queued message that names no model keeps the model picked ahead of it by @juliusmarminge in pingdotgg/t3code#33591
* fix(ssh): tunnel readiness no longer counts ssh's connection time by @juliusmarminge in pingdotgg/t3code#33554
* fix(server): preview_evaluate accepts top-level await by @juliusmarminge in pingdotgg/t3code#31925
* fix(server): quitting no longer restarts the relay client mid-shutdown by @juliusmarminge in pingdotgg/t3code#33628
* fix(shared): relative Windows file links open the file by @juliusmarminge in pingdotgg/t3code#33643
* fix(server): a steer that restarts a completion wake no longer strands later subagent results by @juliusmarminge in pingdotgg/t3code#33469
* fix(server): provider status checks no longer make mise download missing CLIs by @juliusmarminge in pingdotgg/t3code#33448
* fix(forgejo): find merged pull requests whose head branch was deleted by @juliusmarminge in pingdotgg/t3code#33675
* perf(shared): speed up escaped Markdown in long PR descriptions by @AksharP5 in pingdotgg/t3code#33438
* fix(server): a background agent tab survives a desktop window reload by @juliusmarminge in pingdotgg/t3code#33666
* fix(server): Commit, push & PR no longer pushes the default branch into itself by @juliusmarminge in pingdotgg/t3code#33695
* fix(acp): OMP threads show html_render pages by @juliusmarminge in pingdotgg/t3code#33677
* fix(ssh): Intel Mac hosts no longer try to download a missing t3 archive by @juliusmarminge in pingdotgg/t3code#33325
* fix(server): opening the branch menu no longer wipes PR status by @juliusmarminge in pingdotgg/t3code#33263
* fix(server): failed updates report download diagnostics by @tanav29 in pingdotgg/t3code#33239
* fix(web): remote Lineage rows keep their title when the environment name is long by @f4llenz in pingdotgg/t3code#33181
* fix(web): custom snooze footer stays inside the dialog by @juliusmarminge in pingdotgg/t3code#33759
* fix(desktop): right-clicking a mailto link offers Copy Email Address by @juliusmarminge in pingdotgg/t3code#33262
* fix(acp-registry): commands past the 128th are no longer dropped by @juliusmarminge in pingdotgg/t3code#33768
* fix(server): one finished turn looks up its branch's pull request once by @juliusmarminge in pingdotgg/t3code#33752
* fix(mobile): Android Files sheet scrolls its tree instead of dragging the sheet by @RadekManak in pingdotgg/t3code#33223
* fix(web): prompt suggestions show after a steered turn by @thelogicmatrix in pingdotgg/t3code#33706
* fix(server): usage prices Claude Mythos 5.2 from its Bedrock rate by @juliusmarminge in pingdotgg/t3code#33721
* fix(server): Claude turns whose CLI exits before its first frame fail instead of running forever by @juliusmarminge in pingdotgg/t3code#33008
* fix(web): panel resize handles follow touch drags by @juliusmarminge in pingdotgg/t3code#33066
* fix(server): signed-out Claude instances with their own config dir name it in the sign-in hint by @juliusmarminge in pingdotgg/t3code#32951
* perf(server): opening a long thread reads from its latest segments, not its whole history by @t3dotgg in pingdotgg/t3code#33305
* fix(server): repos without a remote no longer record failed spans on status refresh by @ferhtgoldaraz in pingdotgg/t3code#32905
* fix(mobile): missing files in previews name the checked path instead of asking to reconnect by @juliusmarminge in pingdotgg/t3code#32994
* fix(server): a restart that misses its turn starts as a new turn by @juliusmarminge in pingdotgg/t3code#32899
* fix(desktop): new browser tabs no longer lose waits, clicks and snapshots for good by @juliusmarminge in pingdotgg/t3code#32861
* fix(web): Go to source on a side chat quote keeps you on its parent thread by @juliusmarminge in pingdotgg/t3code#33160
* fix(server): removing a queued completion message keeps its siblings' wakes by @juliusmarminge in pingdotgg/t3code#32815
* fix(server): dev database seed drops active pull request watches by @juliusmarminge in pingdotgg/t3code#32744
* fix(server): capture iOS screenshots on Xcode 26's simctl by @shivamhwp in pingdotgg/t3code#28353
* fix(mobile): medium Android windows keep the rail's room and the sidebar's place by @dongxingong in pingdotgg/t3code#33021
* fix(web): notify when a new request replaces the pending one in a run by @juliusmarminge in pingdotgg/t3code#32719
* fix(server): Codex first-request usage limits keep their reset time by @shivamhwp in pingdotgg/t3code#27791
* fix(web): minimap next turn is disabled at the bottom of a thread by @juliusmarminge in pingdotgg/t3code#33038
* fix(cursor): a steer keeps the prompt it interrupted by @juliusmarminge in pingdotgg/t3code#32583
* test: remove redundant short-string truncation test by @t3-code-bot[bot] in pingdotgg/t3code#33867
* fix(pi): Pi models whose provider ID contains a slash can be selected by @juliusmarminge in pingdotgg/t3code#32585
* perf(server): MCP tool calls no longer read the caller's whole thread by @t3dotgg in pingdotgg/t3code#33295
* fix(ssh): concurrent launches on one remote home share one server by @juliusmarminge in pingdotgg/t3code#32587
* fix(mobile): iOS 18 iPad sidebar and thread feed start below the header by @juliusmarminge in pingdotgg/t3code#32936
* fix(web): Tab reaches the add-project and new-project submit buttons by @juliusmarminge in pingdotgg/t3code#32605
* fix(web): screen readers hear the add-project submit shortcut by @juliusmarminge in pingdotgg/t3code#32576
* fix(server): Antigravity limits read the quota host the account is metered on by @juliusmarminge in pingdotgg/t3code#32425
* fix(web): the thread menu works for an older settled thread the sidebar hasn't loaded by @juliusmarminge in pingdotgg/t3code#32507
* fix(opencode): show questions asked while OpenCode wakes a session on its own by @juliusmarminge in pingdotgg/t3code#32434
* fix(server): blank .gitignore lines no longer make checkpoints drop new files by @juliusmarminge in pingdotgg/t3code#32374
* test(web): minimap next-turn test no longer flakes after a resize by @t3dotgg in pingdotgg/t3code#33964
* feat(opencode): mirror native goals across clients by @Yash-Singh1 in pingdotgg/t3code#33758
* feat(web): bindable shortcut to regenerate a thread's title by @sharanry in pingdotgg/t3code#33987
* fix(server): linked projects keep their repository identity while it refreshes by @juliusmarminge in pingdotgg/t3code#32359
* fix(mobile): tool call commands are highlighted and monospaced like on web by @juliusmarminge in pingdotgg/t3code#33957
* fix: Claude monitor wakes no longer fire a completion alert per line by @juliusmarminge in pingdotgg/t3code#32520
* fix(server): removed thread worktrees keep their project's skills in the picker by @juliusmarminge in pingdotgg/t3code#32471
* fix(web): drag command palette threads into the composer by @Yash-Singh1 in pingdotgg/t3code#33990
* fix(shared): show zero seconds in minute durations by @Yash-Singh1 in pingdotgg/t3code#33994
* fix(web): closing the right panel returns focus to where it was by @juliusmarminge in pingdotgg/t3code#32569
* fix(server): say why threads without a project are unavailable by @juliusmarminge in pingdotgg/t3code#32342
* fix: chat file links open the file agents cite by @juliusmarminge in pingdotgg/t3code#33943
* fix(clients): scroll truncated command output notice with logs by @Yash-Singh1 in pingdotgg/t3code#34011
* fix(web): show app bundle icons and open apps from markdown links by @Yash-Singh1 in pingdotgg/t3code#33950
* feat(opencode): project native todo updates into checklists by @Yash-Singh1 in pingdotgg/t3code#34000
* fix(antigravity): recognize Gemini 4 Carbon and its quota by @DrSeedon in pingdotgg/t3code#33991
* perf(client): reopening a finished command row no longer refetches its output by @juliusmarminge in pingdotgg/t3code#34002
* perf(server): user-only message reads use the user-message index for ordinals by @juliusmarminge in pingdotgg/t3code#33009
* fix(web): keep HTML previews anchored when accordions expand by @Yash-Singh1 in pingdotgg/t3code#34003
* fix(web): preserve search result titles in drag previews by @Yash-Singh1 in pingdotgg/t3code#34017
* fix: file links with line ranges open at their first line by @juliusmarminge in pingdotgg/t3code#34006
* fix(codex): show image generation tool calls by @Yash-Singh1 in pingdotgg/t3code#34020
* fix(pi): a steer Pi has not read yet shows as waiting, not steered by @juliusmarminge in pingdotgg/t3code#33982
* fix(server): provider switches hand off started cancelled runs by @juliusmarminge in pingdotgg/t3code#34016
* fix(web,mobile): replace sparkles icons and ban them with a lint rule by @flamboh in pingdotgg/t3code#25422
* fix(github): a proxy's 403 with Retry-After is no longer reported as a rate limit by @juliusmarminge in pingdotgg/t3code#33676
* fix(web): sending from an empty citation comment clears the composer by @juliusmarminge in pingdotgg/t3code#33440
* fix(server): text generation fallback respects project provider settings by @Muzammil-Bit in pingdotgg/t3code#33741
* feat(usage): show Muse Code limits, and xAI and Antigravity accounts from a CLIProxyAPI hub by @StiensWout in pingdotgg/t3code#33800
* fix(web): preserve previews during attachment preparation by @Yash-Singh1 in pingdotgg/t3code#33949
* fix(desktop): input during window teardown no longer throws in the main process by @juliusmarminge in pingdotgg/t3code#33620
* fix(web): sent messages keep the numbers written on list items by @tsapa44 in pingdotgg/t3code#33820
* fix(server): quitting stops an agent-device daemon left by an earlier server by @juliusmarminge in pingdotgg/t3code#33587
* fix(mobile): attaching larger images no longer crashes with a BigInt error by @juliusmarminge in pingdotgg/t3code#34087
* feat(mobile): pick a voice environment once, then its method by @juliusmarminge in pingdotgg/t3code#34073
* fix(server): a t3 thread send to a finished delegated child notifies its parent by @juliusmarminge in pingdotgg/t3code#33446
* fix(web): question panel header text sits centered in its row by @juliusmarminge in pingdotgg/t3code#34095
* feat(scripts): scenarios prove a fix in the real app with e2e, on web and iOS by @juliusmarminge in pingdotgg/t3code#34007
* feat(claude): Fable resets are offered and redeemed apart from weekly resets by @juliusmarminge in pingdotgg/t3code#34106
* fix(desktop): desktop IPC only answers the main app window by @juliusmarminge in pingdotgg/t3code#34094
* feat(server): voice models reuse copies already on disk by @juliusmarminge in pingdotgg/t3code#34096
* fix(web): scroll project picker to top on first result by @Yash-Singh1 in pingdotgg/t3code#34113
* feat(opencode): track native image job outcomes and previews by @Yash-Singh1 in pingdotgg/t3code#34089
* fix(scripts): scenarios run where localhost resolves to IPv6 first by @juliusmarminge in pingdotgg/t3code#34121
* ci: browser secret helper apt step fetches fewer indexes by @t3dotgg in pingdotgg/t3code#33966
* fix(client-runtime): a search query pasted from github.com lists pull requests again by @juliusmarminge in pingdotgg/t3code#30150
* fix(web): tighter outdated-conversation cards in the PR code panel by @Yash-Singh1 in pingdotgg/t3code#34140
* fix(web): MCP App cards no longer flash white in dark mode while the app loads by @juliusmarminge in pingdotgg/t3code#33352
* fix(peer): link requests use the addresses the app already has for a machine by @t3dotgg in pingdotgg/t3code#34139
* fix(server): Find frees searched thread text after one idle minute by @t3dotgg in pingdotgg/t3code#34132
* fix(web): settings search shortcuts follow the physical key on non-US layouts by @juliusmarminge in pingdotgg/t3code#33395
* fix(server): import Codex chats moved into a project from the scratch folder by @juliusmarminge in pingdotgg/t3code#32880
* fix(desktop): clear stale GPU caches when the Electron version changes by @juliusmarminge in pingdotgg/t3code#33641
* fix(web): PR links jump to the comment, diff line, checks or commits they name by @Yash-Singh1 in pingdotgg/t3code#33989
* fix(cli): installers retry transient GitHub errors by @juliusmarminge in pingdotgg/t3code#32913
* fix(web): opening the terminal with Cmd+J no longer re-renders the whole sidebar by @juliusmarminge in pingdotgg/t3code#33129
* refactor(web): remove icon morphing by @maria-rcks in pingdotgg/t3code#33985
* feat(opencode): track native shell jobs across turns by @Yash-Singh1 in pingdotgg/t3code#34141
* fix(server): restart send stops a Claude turn and runs the message next by @juliusmarminge in pingdotgg/t3code#32902
* fix(shared): login-shell environment probe ignores DEBUG trap output by @juliusmarminge in pingdotgg/t3code#32646
* fix(web): make Q&A option outlines visible across themes by @Yash-Singh1 in pingdotgg/t3code#34178
* fix(web): hide empty replies when renders show the result by @Yash-Singh1 in pingdotgg/t3code#34182
* fix(web): mouse tilt wheel no longer switches threads on Windows and Linux desktop by @juliusmarminge in pingdotgg/t3code#32963
* fix(web): timeline minimap preview no longer steals hover or jumps around by @NoomStuff in pingdotgg/t3code#32151
* fix(server): auto thread sends queue while a turn is stopping by @tanav29 in pingdotgg/t3code#34163
* fix(server): stream the usage-scan cache to disk instead of one string by @juliusmarminge in pingdotgg/t3code#34030
* fix(clients): images the agent opens stay visible in the chat by @fedeinfe in pingdotgg/t3code#30473
* fix(client-runtime): pasted repository page URLs clone the repository into its own folder by @juliusmarminge in pingdotgg/t3code#32681
* fix(web): trackpad flicks over the right panel tabs no longer navigate back by @juliusmarminge in pingdotgg/t3code#33396
* fix: new threads move from draft to Working in one step by @juliusmarminge in pingdotgg/t3code#33783
* fix(gitlab): review comments can cover a range of lines by @TonybynMp4 in pingdotgg/t3code#30535
* test(web): right panel tab swipe test runs as macOS on any CI host by @juliusmarminge in pingdotgg/t3code#34191
* fix(shared): cite assistant messages with IDs over 512 characters by @juliusmarminge in pingdotgg/t3code#28084
* fix(server): updates copy the database while the server still runs when it cannot be cloned by @binjamshid in pingdotgg/t3code#33058
* fix(mobile): file links in question cards open the file viewer by @juliusmarminge in pingdotgg/t3code#29151
* fix(server): cloning into a stranded clone project's empty folder reuses that project by @juliusmarminge in pingdotgg/t3code#33439
* fix(desktop): stable updates no longer show a nightly's release notes by @juliusmarminge in pingdotgg/t3code#32832
* fix(shared): Open in Zed ignores the OpenZFS zed daemon on Linux by @juliusmarminge in pingdotgg/t3code#33479
* fix(mobile): chat code blocks colour diff, kotlin, sql and other languages again by @juliusmarminge in pingdotgg/t3code#33680
* fix(server): fork Claude threads after project root changes by @juliusmarminge in pingdotgg/t3code#22836
* fix(web): snooze times read naturally in context menus by @TonybynMp4 in pingdotgg/t3code#24945
* feat(web): label chips show the label's description on hover by @TonybynMp4 in pingdotgg/t3code#28732
* feat(web): composer strip names the worktree folder by @TonybynMp4 in pingdotgg/t3code#28459
* feat(gitlab): revert a merged merge request by @TonybynMp4 in pingdotgg/t3code#30556
* fix(claude): version errors from a custom endpoint no longer say to run claude update by @binjamshid in pingdotgg/t3code#34176
* fix(web): files marked Viewed stay folded when a pull request's Code tab opens again by @Umais-Adeed in pingdotgg/t3code#34168
* feat(server): watched GitHub pull requests react to host events, not only the 2-minute sweep by @juliusmarminge in pingdotgg/t3code#33548
* fix(server): hide passive Claude Stop-hook summaries by @juliusmarminge in pingdotgg/t3code#22964
* fix(web): dismiss image path tooltips after preview and scroll by @voltcrash in pingdotgg/t3code#30620
* fix(server): PR sync and run-status checks stop reading whole thread histories by @juliusmarminge in pingdotgg/t3code#25728
* fix(server): preview snapshots keep page text beside large accessibility trees by @juliusmarminge in pingdotgg/t3code#33745
* feat(web): screen readers can hear the agent's messages and steps during a turn by @shivamhwp in pingdotgg/t3code#33900
* fix(server): thread search finds phrases inside quotes and their comments by @only21mil in pingdotgg/t3code#22553
* fix(web): local server cards in the browser empty state take pointer clicks by @juliusmarminge in pingdotgg/t3code#34050
* fix(server): worktrees cut from a non-default base no longer show the base's PR by @t3dotgg in pingdotgg/t3code#22861
* fix(desktop): wait for the local server to exit when quitting by @juliusmarminge in pingdotgg/t3code#22996
* fix(server): agent continuations preserve the working timer start by @juliusmarminge in pingdotgg/t3code#22947
* fix(web): disable the git actions menu when nothing in it is usable by @Serendeep in pingdotgg/t3code#31972
* fix(server): preserve active turns when switching provider instances by @juliusmarminge in pingdotgg/t3code#22755
* fix(server): scheduled task updates keep the saved workspace unless the binding changes by @juliusmarminge in pingdotgg/t3code#32494
* fix(web): full-screen HTML pages fit their content and zoom by reflowing by @Zeus-Deus in pingdotgg/t3code#22349
* fix(web): project actions auto-open Preview in web clients by @juliusmarminge in pingdotgg/t3code#34048
* fix(server): a follow-up delegated task waits for a run its child queued on its own thread by @juliusmarminge in pingdotgg/t3code#32504

## New Contributors
* @darioielardi made their first contribution in pingdotgg/t3code#32929
* @tanav29 made their first contribution in pingdotgg/t3code#33239
* @RadekManak made their first contribution in pingdotgg/t3code#33223
* @thelogicmatrix made their first contribution in pingdotgg/t3code#33706
* @ferhtgoldaraz made their first contribution in pingdotgg/t3code#32905
* @dongxingong made their first contribution in pingdotgg/t3code#33021
* @sharanry made their first contribution in pingdotgg/t3code#33987
* @tsapa44 made their first contribution in pingdotgg/t3code#33820
* @NoomStuff made their first contribution in pingdotgg/t3code#32151
* @fedeinfe made their first contribution in pingdotgg/t3code#30473

**Full Changelog**: pingdotgg/t3code@v0.1.8...v0.1.9

</details>


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

Labels

size:XS 0-9 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.

[Bug]: Scrolling with Mac trackpad in fullscreened Image view/Mermaid diagram should move the content instead of zooming

2 participants