feat(web): pull request surfaces — filters & qualifiers, all-server listing, update branch, reactions, in-place editing, smarter diffs - #6039
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ApprovabilityVerdict: Needs human review Diff is too large for automated approval analysis. A human reviewer should evaluate this PR. You can customize Macroscope's approvability policy. Learn more. |
… summary An approval review is a verdict rather than a finding, so its comment no longer offers the fix-in-a-thread hand-off.
GitHub omits hunks for files it will not inline, so the viewer's hunk-sum counts read -0 +0. The host's own additions/deletions now ride the diff slice, and the code tab draws every file's counts itself.
Dismissing prior approval to re-evaluate 4095917
Dismissing prior approval to re-evaluate c4e4edc
Dismissing prior approval to re-evaluate 9b66581
Attribution is the avatar alone with the name on hover, the dot separators go, review states read as words (Changes requested), and a dismissed review no longer offers the fix hand-off.
…il0000/t3code into t3code/feat/pr-edit-description-comments
- Keep collapsed summary sections anchored while scrolling - Clarify actions targeting the current thread - Surface actionable, redacted GitHub rate-limit details
Pressing Update branch, which asks for a merge commit, printed the hint written for a rebase: "a rebase stops at the first commit that does not apply cleanly; updating with a merge commit may still work". The reader had already chosen the merge commit, so the one sentence under the failure told them to do what they had just done. gh reports only that it exited, so this hint is all there is to read. Each way of updating now has its own: the merge commit points at write access on the branch — a fork also needs its author to allow maintainer edits — and at a conflict with the base, and the rebase keeps the sentence about the commit it stopped on. The Merge button also read "Merging..." while the branch update ran, because one flag stood for every action in flight. It now names which action is running, so only the button that was pressed speaks; everything else is still disabled for as long as any of them runs.
## What's Changed * fix(web): align update toast release notes link by @t3-code[bot] in pingdotgg/t3code#6322 * fix(web): render tooltips above dropdowns by @extoci in pingdotgg/t3code#6241 * fix(web): open modified PR clicks in browser by @t3-code[bot] in pingdotgg/t3code#6278 * Fix mobile command popover glass rendering by @juliusmarminge in pingdotgg/t3code#6370 * test(mobile): seed snoozed showcase threads by @PixPMusic in pingdotgg/t3code#5155 * fix(web): preserve appearance mode when changing themes by @extoci in pingdotgg/t3code#6343 * feat(connect): deregister account environments from any client by @StiensWout in pingdotgg/t3code#4844 * feat(web): pull request surfaces — filters & qualifiers, all-server listing, update branch, reactions, in-place editing, smarter diffs by @Bil0000 in pingdotgg/t3code#6039 **Full Changelog**: pingdotgg/t3code@v0.0.34-nightly.20260812.1077...v0.0.34-nightly.20260812.1079 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.34-nightly.20260812.1079
- PullRequestDetailPanel takes main's #6039 rework wholesale (reactions, update-branch, auto-merge, in-place editing); the thread-details action hooks stay in usePullRequestActions with label maps extended for the new action variants - CommandPalette #6330 provider subtitles adapted to the v2 shell (session -> runtime for provider instance and display name) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… PR panel The round-5 ChatView reconciliation kept the round-3-era PullRequestDetailPanel call, so the panel mounted without chromeVariant="collapse" — the #6039 scroll-condensing chrome never engaged and the description scrolled under a full-height chrome. Restore main's call exactly: collapse chrome, composerDraftTarget for same-thread hand-offs, the isThreadOwnPullRequest context check, and tab statuses keyed by the active surface id via updatePullRequestTabStatus instead of a key rebuilt from the status payload. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ions, in-place editing Ported from t3code b28f9bf0a (#6039). Two conflicts, both branding only: the unsupported-server copy and a filter test fixture keep Ronin naming. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Upstream 65b005f..9513e62, dominated by pingdotgg#6039 (pull request surfaces). 248 files, +21,639/-2,271. Seven conflicts; two were substantive. apps/server/src/git/GitManager.ts: pingdotgg#6039 edited the exact annotateLogs block that 0012043 rewrote yesterday. Both sides are wanted, so the per-branch dedupe gate stays and upstream's provider/providerOperation/providerCommand/ errorDetail annotations moved inside it. The dedupe KEY deliberately stays errorTag/causeTag: errorDetail carries raw command output that can vary run to run for one standing condition, and keying on it would restore the log storm the fix removed. Upstream's isSourceControlProviderError is a cleaner reader than the fork's tagOf(error.cause) and is now used for the annotations. apps/web/src/components/chat/ComposerPrimaryActions.tsx: the fork had hoisted the send button into a `sendButton` const; upstream restyled the same button inline for the stage-artwork backdrop. The fork's definition sits OUTSIDE the conflict region, so resolving as presented compiles and silently drops the restyle. Upstream's className branch and StageBackdropButtonArt span were applied into the fork's definition instead, keeping the fork's two deliberate deviations: `disabled` checks isSendBlocked (not isEnvironmentUnavailable) so a disconnected environment still queues, and the first aria-label branch reads "Queue message to send on reconnect". SidebarChrome.tsx took upstream's compact icon-row footer wholesale with the fork's two full-width panels (SidebarLocalModels, SidebarResourceQueue) re-inserted above the menu. The rest were unions: culori + diff in apps/web/package.json, @clerk/expo + the FORK-ONLY @effect/platform-node entry in pnpm-workspace.yaml, ComposerPrimaryActions.test.ts keeping both sides' helpers. pnpm-lock.yaml was seeded from upstream and regenerated. Audit over all 31 both-sides-changed files: fork-added lines that did not survive were 2, both intentional replacements above; the invariant-4 sweep for fork-deleted lines coming back returned zero. All six fork README invariants re-verified against the merged tree, including that pingdotgg#6039's three new PR RPC methods all carry write scopes in RpcAuthorization. Note for the next reconcile: BSD sed aborts on ChatComposer.tsx ("Assertion failed: (advance > 0), process.c:462") and truncates its input, so a sed-based audit reports that file's fork lines as missing en masse. The memory entry flags this file for wrapped grep; the failure is wider than grep. Read it in Python. pnpm verify green: EXIT=0, 14 projects, 879 test files, 8,625 tests, 0 failures. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017UxbQTnLQvk48Jvsrf9T6V
The rebased provider port grew reactions, update-branch and in-place editing. Arcanum declares the honest values: no update methods, no edit, and reactions false — the write endpoint is unverified, and that one flag is what offers the picker. The reactions the comments payload already carries are decoded read-only (grouped onto the contract's eight contents, unknown codes dropped the way GitLab's awards are), so pills render without ever being pressable. setReaction is the same never-called refusal the other non-reacting hosts answer with, and the arc CLI folds the new rate-limited exit kind into its command error as GitLab does.
- PullRequestDetailPanel takes main's #6039 rework wholesale (reactions, update-branch, auto-merge, in-place editing); the thread-details action hooks stay in usePullRequestActions with label maps extended for the new action variants - CommandPalette #6330 provider subtitles adapted to the v2 shell (session -> runtime for provider instance and display name) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… PR panel The round-5 ChatView reconciliation kept the round-3-era PullRequestDetailPanel call, so the panel mounted without chromeVariant="collapse" — the #6039 scroll-condensing chrome never engaged and the description scrolled under a full-height chrome. Restore main's call exactly: collapse chrome, composerDraftTarget for same-thread hand-offs, the isThreadOwnPullRequest context check, and tab statuses keyed by the active surface id via updatePullRequestTabStatus instead of a key rebuilt from the status payload. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- PullRequestDetailPanel takes main's #6039 rework wholesale (reactions, update-branch, auto-merge, in-place editing); the thread-details action hooks stay in usePullRequestActions with label maps extended for the new action variants - CommandPalette #6330 provider subtitles adapted to the v2 shell (session -> runtime for provider instance and display name) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… PR panel The round-5 ChatView reconciliation kept the round-3-era PullRequestDetailPanel call, so the panel mounted without chromeVariant="collapse" — the #6039 scroll-condensing chrome never engaged and the description scrolled under a full-height chrome. Restore main's call exactly: collapse chrome, composerDraftTarget for same-thread hand-offs, the isThreadOwnPullRequest context check, and tab statuses keyed by the active surface id via updatePullRequestTabStatus instead of a key rebuilt from the status payload. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
> [!NOTE] > `#123`, `GH-123` and `owner/repo#123` in a pull request body are now links, the way they are on > GitHub. What each number turns out to be decides where it opens: a pull request in a project on > this machine opens as a tab beside the one being read, an issue opens in a browser, and a number > the host has nothing under is underlined in red and still opens. GitHub's autolinked references are its own extension rather than GFM, so remark left them as they were: every `pingdotgg#6039` an agent or a reviewer wrote in a description, a comment or a review stayed plain text, and following one meant retyping it into a browser. Reading them is the easy half. Knowing what one *is* takes asking the host, and a body can name a dozen — so they are asked about together, in one GraphQL document, aliased by repository and by number. `issueOrPullRequest` answers which of the two each number turned out to be, which is what decides where it opens; a cache keeps a panel of many bodies from spawning a process per body for numbers a neighbour just resolved. The link is addressed at `/issues/{n}` before any of that comes back, because the host redirects that to `/pull/{n}` for a pull request — so it is already right in a browser, and resolving only ever improves it. A reference clicked before its answer arrives follows it as written. Everything else follows from one rule: **only an answer marks a link as broken.** A request that failed on the way — rate limited, logged out, offline — leaves every reference exactly as it was, and a null is read as nothing-there only where the host filed `NOT_FOUND` against it, since `FORBIDDEN` is SAML or an IP allowlist standing between the reader and something they can very likely open themselves. A host having a bad minute must not repaint a body full of good references as mistakes. Inert unless a surface passes the repository to read numbers against, so `#2` in a conversation — where it is far more likely to be a step than an issue — stays the plain text it reads as. ## Before / after The description of #126, which cites the stale-stack guard from `#95` and the window it was built for (`#94`). | Before | After | | --- | --- | | <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/before.png" alt="Reference numbers rendered as plain grey text" width="460"> | <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/after.png" alt="The same numbers rendered as links" width="460"> | `#95` resolves to a pull request and opens as a tab here; `#94` resolves to an issue and opens in a browser, since there is no issue surface to open it in. A reference the host has nothing under keeps its link colour and takes the mark an unknown word takes. No pull request in this repository happens to cite a number the repository lacks, so the state below was forced on a resolved reference to photograph it: <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/missing.png" alt="A reference underlined with a red wavy line" width="460"> ## Reading the commits Three layers, each of which stands alone: the plugin that reads references and renders nothing differently on its own, the request that answers them and is called by nobody, then the wiring that turns both on. ## Verification - `vp test run` for the touched suites: `sourceControl` (147), `GitManager`, and the web `markdown-github-references`, `chat` and `pullRequest` suites (469). - Targeted `tsgo --noEmit` for `apps/web`, `apps/server` and `packages/contracts`, at each of the three commits rather than only at the tip. - The matching rules are GitHub's own, each checked against its renderer before being written down: `foo#123` and `#123abc` are not references, `(#123)`, `#123.`, `#123-abc` and `/#123` are, `#0` is not, and code spans and link labels are left alone. - Read live against this repository in `test-t3-app`: references linkified in a real description, `#95` re-addressed itself to `/pull/95` and opened here, `#94` stayed addressed for the browser. That pass is also what found two faults nothing else did — a memoized renderer holding the first render's answers, and a mark cancelled by `.chat-markdown a { text-decoration: none }`. --- Written by an agent (T3 Code, claude-opus-5).
> [!NOTE] > `#123`, `GH-123` and `owner/repo#123` in a pull request body are now links, the way they are on > GitHub. What each number turns out to be decides where it opens: a pull request in a project on > this machine opens as a tab beside the one being read, an issue opens in a browser, and a number > the host has nothing under is underlined in red and still opens. GitHub's autolinked references are its own extension rather than GFM, so remark left them as they were: every `pingdotgg#6039` an agent or a reviewer wrote in a description, a comment or a review stayed plain text, and following one meant retyping it into a browser. Reading them is the easy half. Knowing what one *is* takes asking the host, and a body can name a dozen — so they are asked about together, in one GraphQL document, aliased by repository and by number. `issueOrPullRequest` answers which of the two each number turned out to be, which is what decides where it opens; a cache keeps a panel of many bodies from spawning a process per body for numbers a neighbour just resolved. The link is addressed at `/issues/{n}` before any of that comes back, because the host redirects that to `/pull/{n}` for a pull request — so it is already right in a browser, and resolving only ever improves it. A reference clicked before its answer arrives follows it as written. Everything else follows from one rule: **only an answer marks a link as broken.** A request that failed on the way — rate limited, logged out, offline — leaves every reference exactly as it was, and a null is read as nothing-there only where the host filed `NOT_FOUND` against it, since `FORBIDDEN` is SAML or an IP allowlist standing between the reader and something they can very likely open themselves. A host having a bad minute must not repaint a body full of good references as mistakes. Inert unless a surface passes the repository to read numbers against, so `#2` in a conversation — where it is far more likely to be a step than an issue — stays the plain text it reads as. The description of #126, which cites the stale-stack guard from `#95` and the window it was built for (`#94`). | Before | After | | --- | --- | | <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/before.png" alt="Reference numbers rendered as plain grey text" width="460"> | <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/after.png" alt="The same numbers rendered as links" width="460"> | `#95` resolves to a pull request and opens as a tab here; `#94` resolves to an issue and opens in a browser, since there is no issue surface to open it in. A reference the host has nothing under keeps its link colour and takes the mark an unknown word takes. No pull request in this repository happens to cite a number the repository lacks, so the state below was forced on a resolved reference to photograph it: <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/missing.png" alt="A reference underlined with a red wavy line" width="460"> Three layers, each of which stands alone: the plugin that reads references and renders nothing differently on its own, the request that answers them and is called by nobody, then the wiring that turns both on. - `vp test run` for the touched suites: `sourceControl` (147), `GitManager`, and the web `markdown-github-references`, `chat` and `pullRequest` suites (469). - Targeted `tsgo --noEmit` for `apps/web`, `apps/server` and `packages/contracts`, at each of the three commits rather than only at the tip. - The matching rules are GitHub's own, each checked against its renderer before being written down: `foo#123` and `#123abc` are not references, `(#123)`, `#123.`, `#123-abc` and `/#123` are, `#0` is not, and code spans and link labels are left alone. - Read live against this repository in `test-t3-app`: references linkified in a real description, `#95` re-addressed itself to `/pull/95` and opened here, `#94` stayed addressed for the browser. That pass is also what found two faults nothing else did — a memoized renderer holding the first render's answers, and a mark cancelled by `.chat-markdown a { text-decoration: none }`. --- Written by an agent (T3 Code, claude-opus-5).
- PullRequestDetailPanel takes main's #6039 rework wholesale (reactions, update-branch, auto-merge, in-place editing); the thread-details action hooks stay in usePullRequestActions with label maps extended for the new action variants - CommandPalette #6330 provider subtitles adapted to the v2 shell (session -> runtime for provider instance and display name) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… PR panel The round-5 ChatView reconciliation kept the round-3-era PullRequestDetailPanel call, so the panel mounted without chromeVariant="collapse" — the #6039 scroll-condensing chrome never engaged and the description scrolled under a full-height chrome. Restore main's call exactly: collapse chrome, composerDraftTarget for same-thread hand-offs, the isThreadOwnPullRequest context check, and tab statuses keyed by the active surface id via updatePullRequestTabStatus instead of a key rebuilt from the status payload. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: pick worktree or current checkout per project (pingdotgg#5766) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): sidebar rows show the branch again, not a truncated plan step (pingdotgg#5776) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(server): vp run migrate-dev-db seeds worktree dev dbs with real data (pingdotgg#5773) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): keep unsent drafts one click away in the sidebar (pingdotgg#5777) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): project icons can be chosen manually (pingdotgg#5775) * fix(server): one greedy agent process no longer takes down the whole server (pingdotgg#5788) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * ci: label-gated hosted-web preview deploys (pingdotgg#5465) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add cross-platform mobile usage dashboard (pingdotgg#5743) * fix(web): preserve desktop route during Clerk auth (pingdotgg#5770) * fix(web): match create theme and import theme buttons to the standard outline style (pingdotgg#5860) * fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538) * fix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782) Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): thread title button no longer eats the drag area (pingdotgg#5857) * fix(web): unify usage page chrome (pingdotgg#5823) * fix(shell): add ~/.local/bin to the Windows CLI resolver so native-installed providers are found (pingdotgg#5074) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841) * fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): sandbox user-provided SVGs (pingdotgg#5916) * fix(web): match usage titlebar text styling (pingdotgg#5897) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * Move project settings to contextual project routes (pingdotgg#5923) * Preserve back navigation when opening settings (pingdotgg#5930) Co-authored-by: codex <codex@users.noreply.github.com> * Automate production mobile EAS releases (pingdotgg#5609) * Add settings and usage breadcrumbs (pingdotgg#5929) * fix(web): correct model picker trigger padding (pingdotgg#5935) * fix(web): show worktree icon in sidebar v2 (pingdotgg#5909) * fix(web): enable restore defaults after theme mix changes (pingdotgg#5928) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> * fix(web): trait menu closes after you pick a level (pingdotgg#5879) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): align project name with headline (pingdotgg#5864) * fix(web): update pills use readable theme foregrounds (pingdotgg#5938) * fix(web): use themed confirmation dialogs (pingdotgg#5624) * fix(web): use import/export-appropriate icons for theme buttons (pingdotgg#5964) * fix(mobile): detect PowerShell cmdlet errors in work log rows (pingdotgg#5726) * fix(mobile): stop Android user bubbles with code blocks from overlapping (pingdotgg#5659) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(mobile): parse EAS fingerprint JSON (pingdotgg#5991) Co-authored-by: codex <codex@users.noreply.github.com> * chore(release): prepare v0.0.33 * feat: multi-provider pull requests page with in-app reviews (pingdotgg#4849) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> Co-authored-by: codex <codex@users.noreply.github.com> * perf(desktop): probe the Windows shell environment concurrently (pingdotgg#5878) Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com> * feat(web): add duplicate action to the T3 Code default theme (pingdotgg#6013) * fix(web): improve built-in theme contrast (pingdotgg#6000) * fix(ci): extend release publish timeout (pingdotgg#6034) * Allow Android tablets to rotate (pingdotgg#5613) * fix(web): account for Windows window controls in PR page header (pingdotgg#6049) * feat: add three-hour snooze option (pingdotgg#5914) * fix(mobile): keep chat composer above the Android gesture bar (pingdotgg#5988) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): OpenCode model parsing drops models with a slash in the JSON body (pingdotgg#5072) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(web): persist sidebar shelf collapse state (pingdotgg#5136) Co-authored-by: Illia Panasenko <hello@ipanasenko.me> * perf(web): skip base64 for oversized image candidates (pingdotgg#5220) * fix(server): skip Linux libc detection on Windows/macOS (pingdotgg#5354) * fix(server): advertise 256-color TERM on Windows terminals (pingdotgg#5693) * fix(server): handle unborn HEAD in VCS status (pingdotgg#5944) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(pull-requests): route self-hosted GitLab remotes (pingdotgg#6061) * feat: add ability to create a new thread in the current project with shift+click and show shortcut in tooltip (pingdotgg#5994) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * feat(web): add Copy Thread ID to the sidebar and chat header thread context menu (pingdotgg#5574) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(mobile): stabilize thread composer and interactions (pingdotgg#5986) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Thuong Tin <thuongtin@gmail.com> Co-authored-by: Kapish14 <kapishnarang01@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add hourly past-24-hour usage view (pingdotgg#6170) * fix(mobile): guard App Store release versions (pingdotgg#6177) Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): restore typography font sizes to defaults (pingdotgg#6172) * feat(web): make environment artwork theme aware (pingdotgg#6183) Co-authored-by: codex <codex@users.noreply.github.com> * fix(shared): normalize a bare Windows drive root the same as C:\ / C:/ (pingdotgg#6189) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(shared): detect Azure DevOps SSH remotes (ssh.dev.azure.com) (pingdotgg#6187) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(web): add back buttons for the pull requests and usage pages in the sidebar footer (pingdotgg#6031) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(web): render dropdowns above toasts (pingdotgg#6165) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): thread error banner dismiss survives reconnect and rerenders (pingdotgg#6123) * fix(web): use a clearer pull action icon (pingdotgg#6194) * feat(web): use OKLCH for theme palettes (pingdotgg#6036) * fix(web): use upload icon for disabled push action (pingdotgg#6207) * feat(web): add Open VSX theme search (pingdotgg#5654) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): clean up composer resize animation (pingdotgg#6209) * feat(web): compact sidebar footer actions (pingdotgg#6210) * fix(web): keep sidebar wordmark visible at minimum width (pingdotgg#6246) * feat(mobile): add thread title regeneration (pingdotgg#6253) * chore: add dara to vouched (pingdotgg#6259) * fix(web): align the composer model picker (pingdotgg#6252) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> * fix(mobile): keep ordered lists inside user bubbles (pingdotgg#6154) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * feat(web): a better right panel empty state (pingdotgg#6258) * fix(web): align mobile onboarding header (pingdotgg#6293) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> * fix(connect): preserve CLI OAuth parameters through browser sign-in (pingdotgg#6285) * fix(web): prevent changed files header overlap (pingdotgg#6314) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> * fix(web): theme Clerk surfaces (pingdotgg#6300) * feat(web): reset sidebar width on double click (pingdotgg#6320) * fix(web): align update toast release notes link (pingdotgg#6322) Co-authored-by: t3-code[bot] <219304759+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com> * fix(web): render tooltips above dropdowns (pingdotgg#6241) * fix(web): open modified PR clicks in browser (pingdotgg#6278) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> * Fix mobile command popover glass rendering (pingdotgg#6370) * test(mobile): seed snoozed showcase threads (pingdotgg#5155) * fix(web): preserve appearance mode when changing themes (pingdotgg#6343) * feat(connect): deregister account environments from any client (pingdotgg#4844) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * feat(web): pull request surfaces — filters & qualifiers, all-server listing, update branch, reactions, in-place editing, smarter diffs (pingdotgg#6039) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): cmd+click sidebar PR numbers open in the browser (pingdotgg#6378) * feat(web): project favicon and workspace icons in command subtitles (pingdotgg#6330) Co-authored-by: Cursor <cursoragent@cursor.com> * web/settings: fix source control scan on relay environments (pingdotgg#6230) * fix(web): make reset zoom hover visible (pingdotgg#6385) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> * fix(web): keep the typed prompt when a draft changes repo (pingdotgg#6393) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep diff file lists scrollable past expanded files (pingdotgg#6423) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): align Codex collaboration prompts (pingdotgg#6432) * fix(web): keep turn minimap stable as composer grows (pingdotgg#6414) * fix(web): keep pull request panel within viewport (pingdotgg#6451) * Add bil0000 to VOUCHED contributors list (pingdotgg#6462) * fix: ignore pull request actions in latency tracker (pingdotgg#6476) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * Remove rebase requirement before opening PR (pingdotgg#6479) * fix(mobile): extend blockquotes across wrapped lines (pingdotgg#6482) * fix(mobile): prevent invalid HTML entities from crashing markdown (pingdotgg#6495) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> * fix(web): avoid Clerk close button overlap (pingdotgg#6442) Co-authored-by: t3-code[bot] <236186684+t3-code[bot]@users.noreply.github.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> * fix(web): show unlinked icon when viewport aspect ratio is unlocked (pingdotgg#6509) * fix(web): scope pull request errors to their environment (pingdotgg#6490) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(mobile): show a real settings cog in the Android sidebar header (pingdotgg#6520) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(web): restore default stage artwork colors (pingdotgg#6535) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> * fix(web): align sidebar wordmark label (pingdotgg#6086) * fix(web): align the snoozed thread wake icon (pingdotgg#6215) * feat: allow disabling auto-settle on merge (pingdotgg#5880) * Nest mobile task settings in bottom sheets (pingdotgg#6224) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore(mobile): bump app version to 1.0.4 Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): simplify the desktop-managed server update banner copy (pingdotgg#6549) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show background policy tooltips sooner (pingdotgg#6506) * feat(desktop): add favicons to the Browser panel (pingdotgg#5644) * fix(preview): only show browser-ready local servers (pingdotgg#6021) * perf(build): stop unpacking node_modules wholesale from the Windows asar (pingdotgg#5877) Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com> Co-authored-by: t3-code[bot] <t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com> * fix: avoid stale Live Activities when publishing is disabled (pingdotgg#6325) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): add breathing room between the git progress overlay and the app bar (pingdotgg#6587) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep thread rename open during IME composition (pingdotgg#6281) * refactor(mobile): name the iOS nav bar height fallback (pingdotgg#6589) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(mobile): preserve keyboard suggestions while typing (pingdotgg#6323) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): prevent OTA update restart crashes (pingdotgg#6324) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align every titlebar control cluster on one shared inset (pingdotgg#6592) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): steer active turns by default (pingdotgg#6543) * fix(web): clarify desktop update status (pingdotgg#6504) * fix(server): terminal subprocess polling no longer floods the PID space (pingdotgg#6377) * fix(web): add copying terminal selection with ctrl+c in the web app (pingdotgg#5638) * perf(desktop): speed up Windows update installation (pingdotgg#6169) * fix(web): style sidebar action tooltips (pingdotgg#6371) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> * refactor(web): simplify global styling (pingdotgg#6381) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(server): handle files named HEAD in git status (pingdotgg#6397) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> * feat(packaging): maintain AUR packages in-repo (pingdotgg#4128) * fix(web): bound OKLCH gamut mapping (pingdotgg#6485) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> * feat(web): open remote environments in your local editor over SSH (pingdotgg#6572) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): refresh workspace layouts and tool activity * revert: refresh workspace layouts and tool activity (pingdotgg#6657) * Sync upstream with public-safe fixtures Squash the reviewed upstream sync into a public-safe history while preserving its final tree. * feat(web): older chat timestamps show the date, not just the time (pingdotgg#6654) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align pull request action menu rows (pingdotgg#6534) Co-authored-by: Nickolas Kyryliuk <nickolaskyryliuk@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): restore selected themes in dark mode (pingdotgg#6665) * fix(web): improve Codex usage graph contrast (pingdotgg#6669) * docs: route feature requests to Discussions - Disable feature-request issue templates - Direct contributors to Ideas discussions for proposals * fix(desktop): app zoom no longer zooms the preview browser (pingdotgg#6649) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(server): keep provider notification consumers alive past startSession (pingdotgg#6538) Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com> * fix(server): treat removed Bitbucket permissions endpoint as unknown, not blocking (pingdotgg#6525) * fix(ssh): let cold remote servers finish starting (pingdotgg#6168) * fix(web): preserve Claude insight line breaks (pingdotgg#4344) * feat(web): accept file drops across the chat workspace (pingdotgg#6636) * fix(web): widen ordered-list marker gutter for 3+ digit item numbers (pingdotgg#6527) * fix(server): bound thread activity hydration (pingdotgg#6153) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(web): restore the Archive action in the default sidebar thread menu (pingdotgg#6526) * fix(web): open diff files from nested projects (pingdotgg#6174) * fix(mobile): use tryOpenExternalUrl for markdown links in ThreadFeed (pingdotgg#5872) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): open the file a bare filename reference names (pingdotgg#6297) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(server): stop the provider title mirror from overwriting real thread titles (pingdotgg#5941) * fix(shared): match source-control providers by DNS label (pingdotgg#6175) * feat(desktop): Chrome-style hold-to-quit (pingdotgg#5508) * fix(gitlab): submit review comments on context lines (pingdotgg#6348) * fix(marketing): keep Grok mark clear of mobile hero copy (pingdotgg#4542) * fix(mobile): recover the QR pairing scanner when camera access is denied (pingdotgg#6487) * fix(web): keep a long path from running under the folder picker button (pingdotgg#4823) Co-authored-by: Sy-D <8460326+Sy-D@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(terminal): right-click paste works in the terminal (pingdotgg#5240) * fix(mobile): explain iOS-only settings on Android (pingdotgg#4981) * fix(web): stop counting a workflow coordinator as a working agent (pingdotgg#6672) * fix(web): keep floating preview anchored after panel closes (pingdotgg#6547) * fix(web): unstick /connect after in-modal sign-in by redirecting to the authorize endpoint (pingdotgg#5133) * fix(web): keep send reachable while a turn is running on mobile (pingdotgg#4781) Co-authored-by: AMohamedAakhil <hello@takaitech.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): reject unsupported composer image types at attach time (pingdotgg#6574) * Make ClaudeTextGeneration tests hermetic on Windows (pingdotgg#4508) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): show command output in work log (pingdotgg#4083) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): reserve sibling column width when resizing the right panel (pingdotgg#6279) * fix(web): replace whitespace in new ref names with dashes (pingdotgg#6270) * fix(client-runtime): branch list no longer resets while paging through refs (pingdotgg#5858) * fix(web): support Shift+Insert terminal paste (pingdotgg#5982) * fix(web): keep the composer glass aligned with the context strip at any interface font size (pingdotgg#5703) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(codex): keep background memory out of chats (pingdotgg#5468) * fix(server): treat a missing Codex rollout as a recoverable resume error (pingdotgg#6671) * fix(web): hide provider Update toast action while an update is running (pingdotgg#6544) Co-authored-by: Cursor <cursoragent@cursor.com> * fix(desktop): agent shells inherit a UTF-8 locale on macOS (pingdotgg#6236) * fix(server): ignore Claude command lifecycle messages (pingdotgg#6606) * docs: mention Bitbucket user read scope needed by auth probe (pingdotgg#6291) Co-authored-by: Gerwin Bisschop <gerwin@regeljelease.nl> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): return valid preview action results (pingdotgg#5966) Co-authored-by: duncan-vc <247855047+duncan-vc@users.noreply.github.com> * fix(claude): make "Always allow for session" stick, and only for the session (pingdotgg#5041) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ssh): surface a failed remote t3 install instead of a silent 0-byte server.log (pingdotgg#5132) * perf(server): persist the wire projection for streaming tool.updated data (pingdotgg#6675) Co-authored-by: mInrOz <14320143+mInrOz@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): stop wrapping partial code block selections in markdown fences (pingdotgg#5069) * fix(web): hide T3 Connect toggle in web app settings (pingdotgg#5068) * fix(web): show provider account accent badge in sidebar rows and hover card (pingdotgg#5980) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): wait for concurrent SQLite writers instead of failing with SQLITE_BUSY (pingdotgg#5134) * fix(web): reject oversized prompts before provider turn start (pingdotgg#6602) * feat(web): collapse the question prompt from its header (pingdotgg#6773) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(shared): degrade an unknown system time zone to UTC in usage windows (pingdotgg#6670) * fix(claude): discover repo-local .agents/skills in skill discovery (pingdotgg#5488) * fix(server): let slow provider CLIs raise their discovery probe budget (pingdotgg#6223) Co-authored-by: Julius Marminge <jmarminge@gmail.com> * fix(web): retain terminal PR badges after checkout switch (pingdotgg#4755) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): show selected model in context window tooltip (pingdotgg#4772) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): scale command details with code font (pingdotgg#6510) * fix(web): preserve XML-like tags in user messages (pingdotgg#4133) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(desktop): route mouse thumb buttons to the in-app browser (pingdotgg#4459) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix(web): keep the final segment of directory paths with a trailing separator (pingdotgg#5460) Co-authored-by: jorvarea <jorvarea@users.noreply.github.com> * Keep block code plain when copying from rendered markdown (pingdotgg#4468) * fix(web): add web app manifest so installed app keeps its scope (pingdotgg#4306) * Skip user hooks during Claude capability probes (pingdotgg#4466) * fix(mobile): use Android monospace font family (pingdotgg#4609) * fix(desktop): timestamps follow the OS locale instead of en-US (pingdotgg#6190) * fix(web): keep multi-select questions open after the first click (pingdotgg#6646) * fix(web): stop clipping the changed-files expand hover on Windows (pingdotgg#6545) Co-authored-by: Cursor <cursoragent@cursor.com> * fix(server): allow long-running git pushes (pingdotgg#6499) * fix(desktop): keep probing backend readiness while the process is alive (pingdotgg#5526) * fix(server): allow install scripts in npm-global provider updates (pingdotgg#5646) * fix: detect SSH remotes with non-git user prefixes (e.g. gitlab@) (pingdotgg#3649) * fix(web): describe what Ultracode does in the Reasoning picker (pingdotgg#6092) * fix(server): settle pending user-input requests when a Claude session stops (pingdotgg#5127) Co-authored-by: Capxul Agent <agent@capxul.dev> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(server): stop replaying a command receipt for a different aggregate (pingdotgg#5246) * fix(server): settle snoozed threads immediately (pingdotgg#5379) * fix(mobile): prevent crash on sign out in settings (pingdotgg#4899) * fix(mobile): local-checkout threads record their branch so PR badges show (pingdotgg#4986) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): contain long approval commands (pingdotgg#6503) * feat(web): make right panel maximize bindable (pingdotgg#5091) * fix(server): respect inherited OPENCODE_CONFIG_CONTENT (pingdotgg#4242) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(marketing): detect Mac chip on homepage download button (pingdotgg#4197) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * Keep the server alive when a response write hits a dead socket (pingdotgg#4470) * Limit physical key fallback to non-Latin layout output (pingdotgg#4469) * fix: restore CLAUDE.md symlink target (pingdotgg#3929) * fix(clients): default clone destination to folder plus repo name (pingdotgg#5989) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): keep timestamp date and time in the same locale (pingdotgg#7081) Co-authored-by: codex <codex@users.noreply.github.com> * feat(desktop): add signal macOS DMG installer background (pingdotgg#6201) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * feat(web): send PR line requests to agent (pingdotgg#6597) * fix(web): restore dark theme palette (pingdotgg#6663) Co-authored-by: maria <maria@kuuro.net> * refactor(web): simplify advanced theme controls (pingdotgg#7107) * fix(web): keep highlighted command menu items clear of the scroll fade (pingdotgg#7132) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * test: remove redundant and stale tests (pingdotgg#6267) * fix: repair typecheck errors left by the upstream/main merge Fixes surfaced by a full repo-wide typecheck after merging upstream/main and origin/main into sync-upstream-continue: - apps/web/src/components/SidebarV2.tsx: add missing isRunning field - apps/web/src/components/settings/BetaSettingsPanel.tsx: replace removed useSidebarV2Enabled hook with useClientSettings selector - apps/web/src/components/settings/SettingsFontPreviews.tsx: drop obsolete onCopy callback (GhosttyTerminalSurface now handles copy natively) - apps/mobile/src/lib/threadActivity.ts: remove duplicate MOBILE_TERMINAL_UPDATE_STATUSES/isTerminalBypassUpdate/isAgentInternalActivity block left by a silent (non-conflict-marked) merge duplication - apps/mobile/src/features/threads/ThreadComposer.tsx: remove duplicate handleEfficiencyMenuAction, same cause - apps/mobile/src/features/threads/ThreadDetailScreen.tsx: stop passing activeThreadBusy to ThreadComposer, which no longer accepts it - apps/mobile/src/features/home/HomeScreen.tsx: remove dead shouldShowConnectionStatus/WorkspaceConnectionStatus/connectionStatus references (connection state now surfaces via the header title slot) - apps/mobile/src/features/home/HomeRouteScreen.tsx: fix settings-sheet navigation params, drop the now-removed onOpenEnvironments prop - apps/mobile/src/features/settings/SettingsUsageRouteScreen.tsx: use the fork's UsageQuerySummary/UsageQueryTokenTotals types instead of upstream's UsageSummary/UsageTokenTotals, matching what the usage RPC actually returns - packages/contracts/src/ipc.ts: drop DesktopBridge.confirm, superseded by LocalApi.dialogs.confirm; every desktop-side implementation had already dropped it independently - apps/desktop/src/window/DesktopApplicationMenu.test.ts: drop the now-invalid confirm mock to match - apps/desktop/src/preview/Manager.ts: remove a duplicate FrameCaptureConsumer/FrameCaptureSession/PictureInPictureSession block - apps/server/src/environment/RemoteOpenTargets.ts: fix service tag to the fork's @awtprod/command-center/... convention - apps/server/src/persistence/Layers/ProjectionThreads.ts: restore the upsertProjectionThreadRow query, which a conflict resolution had mangled into an invalid mix of INSERT and SELECT clauses - apps/mobile/package.json, patches/@legendapp__list@3.3.3.patch: fix @legendapp/list version pin and repair a patch file left with unresolved nested conflict markers from a rename/rename conflict Full repo-wide `vp run -r typecheck` now passes clean across all 16 workspace packages. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: repair pre-existing SQL and test bugs surfaced by running the full suite - apps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts: three activity-listing queries selected correlated_message_id in their outer SELECT but never in the inner bounded subquery (two cases) or not at all (listPinnedThreadActivityRowsByThread), causing "no such column" SQL errors and schema decode failures. Pre-existing in HEAD before this merge, just never exercised until the full test suite ran clean of conflict markers. - packages/contracts/src/settings.test.ts: removed a test asserting that decoding drops the sidebarV2Enabled/sidebarV2ConfiguredByUser keys — contradicted the adjacent "ClientSettings sidebar v2" tests and the real schema, which keeps both fields alive alongside legacySidebarEnabled for BetaSettingsPanel.tsx. - packages/contracts/src/settings.ts: fixed the legacySidebarEnabled comment to describe the fields as coexisting, not superseding. - apps/web/src/browserFaviconStore.test.ts, browserHistoryStore.test.ts: switched their `~/state/session` mocks to importOriginal() + override, so the real environmentSession export (now used transitively via state/server.ts) stays available instead of being dropped entirely. Full repo-wide `vp run -r test` passes (aside from two known-flaky poll-based tests that pass in isolation but time out under full concurrent load, unrelated to this merge). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(server): update stale npm-global test expectation for --allow-scripts Upstream added the --allow-scripts=<package> flag to npm-global provider update commands; this test's expectation was the only one in the file that hadn't been updated to match (the other three assertions in the same file already expect the flag). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * test(server): skip a deadlocking git-push timeout test pending investigation "allows pushes to run longer than the default command timeout" hangs until the test timeout regardless of how long that timeout is (confirmed at both 120s and 180s), merged verbatim from upstream commit 86fb47a and untouched by any conflict resolution in this sync. Needs its own look at how pushCurrentBranch's command-timeout override interacts with TestClock; skipping for now so it doesn't block the suite. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: keep usage dashboard current (#25) Co-authored-by: atryan <atryan@users.noreply.github.com> * fix(web): keep usage totals current by default (#26) Co-authored-by: atryan <atryan@users.noreply.github.com> * feat(desktop): run local threads without leaving a remote primary (#27) * fix(web): switch new threads between connected computers * feat(desktop): keep Windows available with a remote primary * docs: explain local execution with a remote primary --------- Co-authored-by: atryan <atryan@users.noreply.github.com> * fix(web): open usage on the past 24 hours (#28) * fix(web): open usage on the past 24 hours * fix(server): resolve native Codex npm runtimes --------- Co-authored-by: atryan <atryan@users.noreply.github.com> * fix(desktop): stop remote-primary mode from launching a local backend (#30) Co-authored-by: atryan <atryan@users.noreply.github.com> * fix(web): keep visible usage dashboards current (#31) Co-authored-by: atryan <atryan@users.noreply.github.com> * Fix/codex isolation missing auth (#32) * fix(web): open usage on the past 24 hours * fix(server): resolve native Codex npm runtimes * fix(desktop): stop remote-primary mode from launching a local backend * fix(server): bypass identity wrapper for isolated Codex * fix(server): accept enforced Codex read denials * fix(server): stop isolation probe from scanning host processes * fix(server): fail closed when Codex isolation finds no credentials `prepareCommandCenterCodexHome` only copied `auth.json` into the isolated home when the source home had one, and never checked the result. A source home without credentials produced a working session that failed on its first model call with an opaque provider 401 naming neither the missing file nor the home Command Center actually read. Require credentials in the isolated home before returning the layout, and name the resolved source path in the error. Seed `auth.json` in the fixtures that relied on the previous fail-open behavior; they cover home layout and profile injection, not auth. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(server): surface Codex sandbox permission requests Codex 0.147 asks to widen its sandbox with `item/permissions/requestApproval`. No handler was registered, so the request fell through to `handleUnknownServerRequest` and was answered with a JSON-RPC "method not found". Codex reports that as `user rejected MCP tool call`, so the turn failed with an approval the user was never shown and could not answer. Register the handler and map the method through to a real approval prompt. The request carries an arbitrary path list (each read/write/deny) plus a network toggle, so the decision is classified on the requested permissions rather than on the tool that triggered them — a read-only tool can still ask for write. `autoApproveReadOnlyPermissions` (off by default) grants an escalation without prompting only when every entry is a read: any write, sandbox denial, legacy write list, or network enable still prompts. Auto-grants are scoped to the turn, never the session. The approval channel carries only accept/decline, so the granted profile is the requested one echoed back on accept and an empty profile on refusal, mirroring how ClaudeAdapter replays SDK permission suggestions. Requests are surfaced with the `file-change` kind: ingestion derives the kind from the canonical request type alone, and a kind that varied per request would disagree between the opened and resolved activities. A request with no kind renders no prompt in web or mobile while the server still opens a pending row, which parks the thread unanswerable. The persisted activity keeps only `detail`, so the requested paths are folded into it — otherwise the prompt cannot be reviewed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: atryan <atryan@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * style(web): wrap an over-long condition in useLiveRefresh (#34) `vp check` fails on sync-upstream because this line exceeds the print width, which blocks CI for every PR targeting the branch. Formatter-only change: the condition is re-wrapped, with no behaviour difference. Co-authored-by: atryan <atryan@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(dev): stop a stray system `vp` from silently killing dev servers (#33) dev-runner spawns `vp` by bare name with `extendEnv: false`, so resolution depended entirely on the PATH it inherited. When node_modules/.bin was absent from that PATH, an unrelated /usr/bin/vp (atfs/ShapeTools) won the lookup and failed in the worst possible way: it printed `basename: unrecognized option '--filter=...'`, started no dev server, and exited 0. The launcher reported success while the stack was already gone. Pin the repo's node_modules/.bin ahead of the inherited PATH so `vp` always means this repo's toolchain, whatever environment we were launched from. Co-authored-by: atryan <atryan@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): drop stale ComposerPrimaryActions.test.ts duplicate The upstream sync left both .ts and .tsx test files for the same component; they collide on case-insensitive filesystems (Windows/macOS CI) and release-smoke's path-collision check fails the build. The .tsx version is upstream's current file and is a strict superset of the stale fork-only .ts copy. --------- Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Robert Soriano <sorianorobertc@gmail.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Matt Urenovich <murenovich@gmail.com> Co-authored-by: Tyler <tyler@southboundsoftware.com> Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com> Co-authored-by: nathangerday <44236114+nathangerday@users.noreply.github.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Ellie Gummere <hello@unknownhost.name> Co-authored-by: Tristan Knight <admin@snappeh.com> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> Co-authored-by: Carter Smith <51297686+carterwsmith@users.noreply.github.com> Co-authored-by: Chris Deeming <chris@xenforo.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Mina Yacoub <56601613+myacoub91@users.noreply.github.com> Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com> Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Bilal Bakr <62337003+Bil0000@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: Jono Kemball <Noojuno@users.noreply.github.com> Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: Illia Panasenko <hello@ipanasenko.me> Co-authored-by: Taras <Taras.Fomin@gmail.com> Co-authored-by: bkntr <888122+bkntr@users.noreply.github.com> Co-authored-by: yassiEmp <158713173+yassiEmp@users.noreply.github.com> Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: Thuong Tin <thuongtin@gmail.com> Co-authored-by: Kapish14 <kapishnarang01@gmail.com> Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com> Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com> Co-authored-by: t3-code[bot] <219304759+t3-code[bot]@users.noreply.github.com> Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Dominic Roy <dominic@goauthentik.io> Co-authored-by: Dominic Roy <dominic@sdko.org> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: t3-code[bot] <236186684+t3-code[bot]@users.noreply.github.com> Co-authored-by: Adamulek123 <adam.bogucki@piekna.edu.pl> Co-authored-by: Paul van Dyk <paul@vandyk.fr> Co-authored-by: Taylor Bombay <taylor@warheadent.com> Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com> Co-authored-by: David Hu <davidhu314@gmail.com> Co-authored-by: t3-code[bot] <t3-code[bot]@users.noreply.github.com> Co-authored-by: Michael Charles Aubrey <aubrey@michaelcharl.es> Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com> Co-authored-by: atryan <atryan@users.noreply.github.com> Co-authored-by: Nickolas Kyryliuk <nickolaskyryliuk@gmail.com> Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com> Co-authored-by: Guilherme Barros <gbarros1095@gmail.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: David Balderston <dbalders@gmail.com> Co-authored-by: mohamedmastouri-hue <mohamed.mastouri@ensi-uma.tn> Co-authored-by: Ulises Britos <45952970+repparw@users.noreply.github.com> Co-authored-by: Nicolas Layne <49288482+NicL9923@users.noreply.github.com> Co-authored-by: JJ <93147993+hey-jj@users.noreply.github.com> Co-authored-by: Simon Doba <simon.doba@hotmail.de> Co-authored-by: Sy-D <8460326+Sy-D@users.noreply.github.com> Co-authored-by: Daniel Vernon <danpvernon@gmail.com> Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com> Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com> Co-authored-by: Torben Wetter <github@torben.id> Co-authored-by: BootesVoid <78485654+AMohamedAakhil@users.noreply.github.com> Co-authored-by: AMohamedAakhil <hello@takaitech.com> Co-authored-by: mohammed shazeb <mohammedshazeb10@gmail.com> Co-authored-by: Mihnea Peteu <mihneanob@gmail.com> Co-authored-by: LikoKiko Tech <145937091+LikoKiko@users.noreply.github.com> Co-authored-by: Vividh Mahajan <82711162+Lasdw6@users.noreply.github.com> Co-authored-by: Jorge Pineda <jorgepineda0310@gmail.com> Co-authored-by: abhwshek <67309069+a20hek@users.noreply.github.com> Co-authored-by: aoright <102943475+aoright@users.noreply.github.com> Co-authored-by: Williawar <28518115+Williawar@users.noreply.github.com> Co-authored-by: Mark Griffin <mrmg@deflexion.net> Co-authored-by: Linus Boehm <linus.boehm@finto.de> Co-authored-by: Naveed Iqbal <naveediqbal949@gmail.com> Co-authored-by: Gerwin <9853101+thamrx@users.noreply.github.com> Co-authored-by: Gerwin Bisschop <gerwin@regeljelease.nl> Co-authored-by: duncan-vc <duncan@ommsocial.co.za> Co-authored-by: duncan-vc <247855047+duncan-vc@users.noreply.github.com> Co-authored-by: Joaquin Navarro <alfian1991@gmail.com> Co-authored-by: Martin Bergo <martin.n.bergo@gmail.com> Co-authored-by: mInrOz <14320143+mInrOz@users.noreply.github.com> Co-authored-by: Tai Nguyen <87302343+JoeJoeflyn@users.noreply.github.com> Co-authored-by: Vitaly Iegorov <vitalyiegorov@gmail.com> Co-authored-by: Ostap <33957189+ostapondo@users.noreply.github.com> Co-authored-by: Jaroslav Brtis <6890442+Jardo-51@users.noreply.github.com> Co-authored-by: Roshan Mhatre <officialroshanm@gmail.com> Co-authored-by: Carlos Jimenez <cjimenez@r21digital.com> Co-authored-by: Julius Marminge <jmarminge@gmail.com> Co-authored-by: sebbonit <36650750+sebbonit@users.noreply.github.com> Co-authored-by: nqrwhal <81386789+nqrwhal@users.noreply.github.com> Co-authored-by: CursedApple <36764254+Serendeep@users.noreply.github.com> Co-authored-by: John Surles <outsightszs@Outlook.com> Co-authored-by: Akos Balogh <hello.akosb@gmail.com> Co-authored-by: jorvarea <47249803+jorvarea@users.noreply.github.com> Co-authored-by: jorvarea <jorvarea@users.noreply.github.com> Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com> Co-authored-by: Alex Brodsky <122503996+Albro3459@users.noreply.github.com> Co-authored-by: Harshith Goka <harshith9399@gmail.com> Co-authored-by: Paul <paul@brzz.dev> Co-authored-by: RaitP1 <150583432+RaitP1@users.noreply.github.com> Co-authored-by: Dev Talan <chaudhary.dev.talan@gmail.com> Co-authored-by: Luis Gustavo Couto Wacker <luis.wacker@pagar.me> Co-authored-by: JackatDJL <71508487+JackatDJL@users.noreply.github.com> Co-authored-by: delltrak <78751023+delltrak@users.noreply.github.com> Co-authored-by: Aaron Abu Usama <50079365+AaronAbuUsama@users.noreply.github.com> Co-authored-by: Capxul Agent <agent@capxul.dev> Co-authored-by: Kevin Bravo <79945749+0bkevin@users.noreply.github.com> Co-authored-by: shubhu <93861282+shubhu121@users.noreply.github.com> Co-authored-by: Zeus-Deus <100132710+Zeus-Deus@users.noreply.github.com> Co-authored-by: El-Hussein Abdelraouf <hussein@raoufs.me> Co-authored-by: Jono <jono@foodnotblogs.com> Co-authored-by: Mahdi Ben Messaoud <mahdibenmassoud98@gmail.com> Co-authored-by: Ngo Quoc Viet <123613986+NgoQuocViet2001@users.noreply.github.com> Co-authored-by: Inaya Yousfi <zied.essaber@gmail.com> Co-authored-by: Eddy Naboulet <93473191+eddy-naboulet@users.noreply.github.com>
- PullRequestDetailPanel takes main's #6039 rework wholesale (reactions, update-branch, auto-merge, in-place editing); the thread-details action hooks stay in usePullRequestActions with label maps extended for the new action variants - CommandPalette #6330 provider subtitles adapted to the v2 shell (session -> runtime for provider instance and display name) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… PR panel The round-5 ChatView reconciliation kept the round-3-era PullRequestDetailPanel call, so the panel mounted without chromeVariant="collapse" — the #6039 scroll-condensing chrome never engaged and the description scrolled under a full-height chrome. Restore main's call exactly: collapse chrome, composerDraftTarget for same-thread hand-offs, the isThreadOwnPullRequest context check, and tab statuses keyed by the active surface id via updatePullRequestTabStatus instead of a key rebuilt from the status payload. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
> [!NOTE] > `#123`, `GH-123` and `owner/repo#123` in a pull request body are now links, the way they are on > GitHub. What each number turns out to be decides where it opens: a pull request in a project on > this machine opens as a tab beside the one being read, an issue opens in a browser, and a number > the host has nothing under is underlined in red and still opens. GitHub's autolinked references are its own extension rather than GFM, so remark left them as they were: every `pingdotgg#6039` an agent or a reviewer wrote in a description, a comment or a review stayed plain text, and following one meant retyping it into a browser. Reading them is the easy half. Knowing what one *is* takes asking the host, and a body can name a dozen — so they are asked about together, in one GraphQL document, aliased by repository and by number. `issueOrPullRequest` answers which of the two each number turned out to be, which is what decides where it opens; a cache keeps a panel of many bodies from spawning a process per body for numbers a neighbour just resolved. The link is addressed at `/issues/{n}` before any of that comes back, because the host redirects that to `/pull/{n}` for a pull request — so it is already right in a browser, and resolving only ever improves it. A reference clicked before its answer arrives follows it as written. Everything else follows from one rule: **only an answer marks a link as broken.** A request that failed on the way — rate limited, logged out, offline — leaves every reference exactly as it was, and a null is read as nothing-there only where the host filed `NOT_FOUND` against it, since `FORBIDDEN` is SAML or an IP allowlist standing between the reader and something they can very likely open themselves. A host having a bad minute must not repaint a body full of good references as mistakes. Inert unless a surface passes the repository to read numbers against, so `#2` in a conversation — where it is far more likely to be a step than an issue — stays the plain text it reads as. The description of #126, which cites the stale-stack guard from `#95` and the window it was built for (`#94`). | Before | After | | --- | --- | | <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/before.png" alt="Reference numbers rendered as plain grey text" width="460"> | <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/after.png" alt="The same numbers rendered as links" width="460"> | `#95` resolves to a pull request and opens as a tab here; `#94` resolves to an issue and opens in a browser, since there is no issue surface to open it in. A reference the host has nothing under keeps its link colour and takes the mark an unknown word takes. No pull request in this repository happens to cite a number the repository lacks, so the state below was forced on a resolved reference to photograph it: <img src="https://raw.githubusercontent.com/yngatech/t3code/assets/github-reference-links/missing.png" alt="A reference underlined with a red wavy line" width="460"> Three layers, each of which stands alone: the plugin that reads references and renders nothing differently on its own, the request that answers them and is called by nobody, then the wiring that turns both on. - `vp test run` for the touched suites: `sourceControl` (147), `GitManager`, and the web `markdown-github-references`, `chat` and `pullRequest` suites (469). - Targeted `tsgo --noEmit` for `apps/web`, `apps/server` and `packages/contracts`, at each of the three commits rather than only at the tip. - The matching rules are GitHub's own, each checked against its renderer before being written down: `foo#123` and `#123abc` are not references, `(#123)`, `#123.`, `#123-abc` and `/#123` are, `#0` is not, and code spans and link labels are left alone. - Read live against this repository in `test-t3-app`: references linkified in a real description, `#95` re-addressed itself to `/pull/95` and opened here, `#94` stayed addressed for the browser. That pass is also what found two faults nothing else did — a memoized renderer holding the first render's answers, and a mark cancelled by `.chat-markdown a { text-decoration: none }`. --- Written by an agent (T3 Code, claude-opus-5).
Follow-ups to the pull request surfaces, from Discord/X feedback.
In short: the list now covers every connected server and can be filtered like GitHub, the detail page can update a stale branch and let you rewrite a pull request's own words, diffs read in a sensible order, and the right panel behaves.
Filter and search the list
label:x,-label:x,author:me,draft:true,review:approved,status:failure. Any unknownkey:value(size:XXL) is treated as a label, so each repository's own labels just work.One list, every server
The page used to show a single environment. It now merges all connected servers that support pull requests.
Parts adapted from #6108 — thanks @StiensWout.
Update a stale branch
Diffs in reading order
The Code tab was alphabetical. Now each slice is ordered source → tests → generated (lockfiles, snapshots,
dist/).Source files follow an import graph parsed from the patch itself: dependencies before the code that uses them. Tests sit right after the file they test.
Edit without leaving T3 Code
Rewrite a pull request's title, its description, and your own comments, in place.
Everything else
Verification
tsgo --noEmitclean across contracts, client-runtime, server, web.Note
Add filters, reactions, inline editing, multi-server listing, and update-branch to pull request surfaces
label:,author:me,review:,is:draftqualifiers typed into the search box, applied server-side where supported and client-side as fallback.PullRequestReactionBarrenders emoji pills with optimistic toggle and rollback; reactions are fetched and displayed on PR descriptions, timeline comments, and review thread comments across GitHub, GitLab, and Bitbucket (Bitbucket/Azure explicitly unsupported).canEditPullRequestChangeRequest,canEditPullRequestComment);PullRequestMarkdownEditorprovides a write/preview toggle with Escape-to-cancel.update-branch(merge/rebase) andenable-auto-merge/disable-auto-mergeactions with aPullRequestBaseFreshnessWarningpopover showing how far behind the branch is and offering update buttons.orderDiffFilessorts changed files by import graph topology with source/test/generated tiers; omitted file stats from GitHub are used as fallbacks for per-file addition/deletion counts when hunks are withheld.PullRequestChecksPopovershows check status in list rows and the detail panel; rollup state (passing/failing/pending) deduplicates re-run checks by recency.Macroscope summarized 35d5d2f.