feat: native subagent & workflow observability - #5219
Conversation
…imeline) Surface Claude Code subagents/workflows and Codex collab agents in the UI using only native provider emissions. Zero migrations, zero new tables: widened task.* activity payloads ride the existing event-sourced activity path, and a client-side fold in client-runtime derives v2-shaped subagent state (field names match #4779 so the orchestration-v2 merge is mechanical). Server: - contracts: TaskAgentLinkage on all task payloads, new task.updated event, typed RuntimeTaskUsage, tool attribution (agentId/parentToolUseId) - ClaudeAdapter: carry subagent_type/workflow_name/tool_use_id/outputFile, handle task_updated (was dropped), attribute subagent tool events via parent_tool_use_id, defensive workflow_progress parse, Workflow run handles - CodexSessionRuntime/Adapter: register multi-agent-v2 children from thread/started + subAgentActivity, intercept child notifications, and synthesize task.* lifecycle (idle=resumable, cumulative usage) [WIP: routing is probe-gated per spec] - ingestion: task.updated + agent-owned tool.progress persisted; wire-slim regression test proving agent fields survive to the client Web: - Agents right-panel surface (workflow phase groups, direct spawns, static status dots, DOM-write elapsed timers, expandable activity ring) - composer live strip + inline workflow run card (8-row urgency cap) - quiet timeline: one lifecycle row per agent (collapse by taskId), agent- attributed tool rows re-homed to the panel, timelineBypass rows suppressed Mobile: same quiet-timeline fold; task.completed kept as terminal signal. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
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 1 blocking correctness issue found. Diff is too large for automated approval analysis. A human reviewer should evaluate this PR. You can customize Macroscope's approvability policy. Learn more. |
…w card Per live-test feedback the roster rendered three times at once (panel, card, strip). New rule: the Agents panel is the only roster. The chat gets one anchored CTA row per spawn batch (workflow run, or a turn's direct spawns): 'Kicked off N subagents · <workflow> — <phase> · N active · Σ tok — Open Agents'. Live status derives from the shared panel model at render time; the row freezes to past tense on settle. Strip and card components deleted. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live-test round 2 fixes: - Shells/monitors/plan tasks no longer masquerade as subagents: taskType rides on every task payload (adapter linkage + ingestion allowlist) and the fold excludes non-agent task types from the roster. 'Run 12s stall' background shells stay in the ordinary work log. - The spawn CTA no longer says completed while a workflow is mid-flight: for workflow batches the coordinator's own terminal state is authoritative (dynamic spawns can make the known-member list momentarily all-settled). - Agents panel rows are flat status lines: the per-agent unfold (recent tool-call feed) is gone. The only expansion is run-granularity: settled workflow runs collapse to one summary line under 'Earlier', click to list members. Live workflows and direct spawns sort first in bordered sections with settled/total counts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rerun workflows looked invisible: the launching turn settles in seconds
('Worked for 8.9s') and turn-folding collapsed all its work entries —
including the spawn CTA — while the fleet runs on in the background. CTA
rows are now exempt from turn folds and pinned outside the '+N tool calls'
overflow toggle, so a live run is always visible at its spawn point. Each
rerun gets its own CTA row (grouping keys on the coordinator id, which is
unique per run).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live-test finding: statuses drifted (waiting/stalled agents alarming or reading wrong) while fleets ran. Adopts the monitoring-pill rule from the PR-monitoring design: one steady in-flight presentation. - Panel and CTA: pending/running/waiting all render as Working (sky, no amber); detail stays in the activity sub-line; footer shows one working count. Only settled states differentiate (completed/failed/stopped). - Fold: when a workflow coordinator settles, members that never received their own terminal row cascade to the coordinator's outcome (completed, or interrupted on failure) instead of reading as working forever. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live-test: the CTA only appeared after the workflow finished. Two causes, reproduced against the exact persisted thread data: - workEntryIndicatesToolNeutralStatus swallowed spawn rows mid-run (they derive from task.progress, tone 'thinking' = neutral) — visible only once a terminal row flipped them to success. CTA rows are now exempt. - collapse-by-group let the newest progress tick's id/createdAt/turnId win, drifting the row to the bottom of the timeline mid-run. The group anchor (spawn point) is now pinned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live-test: a thread running a 9-agent workflow and a thread babysitting a PR both showed no sidebar status once their turns settled. The pill only reflected turn/session state. - Server: in-memory per-thread background liveness registry fed by the task lifecycle ingestion already processes (no persistence, no migration); exposed additively on the thread shell as backgroundLiveness: working | monitoring | null. - Vocabulary (per Theo): two states only. Agent/workflow fleets present as plain Working; Monitoring is reserved for watch loops (monitor tasks and turn-outliving background shells — PR babysitting, log tails) when they are the only live work. - Web: pill resolver and SidebarV2 status honor backgroundLiveness with the same recede treatment as Working (inbox-zero); Monitoring gets a steady label, no shimmer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Effect service conventions review: one clear violation (new shared mutable state held in a module global and consumed by two Effect services) plus one file-layout nit. Everything else in the changed Effect code (namespace imports from effect/* subpaths, per-session Map state inside Effect.gen, contract schemas) looks conformant.
Posted via Macroscope — Effect Service Conventions
Live-test: plain Task-tool subagents vanished from the Agents panel and CTA. The SDK reports them as taskType 'local_agent', which the agent-type allowlist didn't anticipate — real agents were silently classified as background work. Classification is now a denylist (shell/local_bash/ monitor/plan are background; anything else, including future agent-flavored type names, is an agent). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
First live Codex probe (5 collab agents on gpt-5.6-sol) surfaced three gaps, fixed against the persisted wire data: - Children registered only via subAgentActivity (no thread/started with a spawn source), so no task.started ever formed and rows carried bare thread-id titles. subAgentActivity 'started' now synthesizes the task.started with agentPath-leaf naming. - Codex child rows are ALL timelineBypass, so the quiet-timeline filter suppressed every row before the CTA could form — a Codex fleet had no chat presence at all. Bypassed agent lifecycle rows now feed the CTA collapse (still max one row per batch); non-agent bypassed rows stay suppressed. - Idle now counts as not-live in the sidebar registry: an all-idle (resting, resumable) fleet no longer pins the thread at Working. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live-test round 2 on Codex direct spawns: - Idle (resting, resumable) agents wore a sky dot and sat in the live section, reading as stuck in-progress after the work finished. Idle now renders muted and sorts with settled. - Progress rows carried the bare child thread id as title, clobbering the real name (math_one → UUID) from task.started. The runtime now stamps the registered child's identity (nickname/role/agentPath) on every synthetic collabAgent event, the adapter only emits title when it has a real name, and subAgentActivity registration derives a nickname from the agentPath leaf. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live probe on 10 parallel collab agents: the wire emits subAgentActivity
{agentPath: '/root', kind: interacted} about the ROOT thread during collab
runs. Registration adopted the root as a child, so every subsequent root
notification — including the final assistant message and turn/completed —
was intercepted into the agent panel instead of the chat. The parent
looked hung ('Working 5m') after all subagents finished, with its report
riding an 'assistant message' row on the root's panel entry.
Registration now refuses the session's root thread (by id and by /root
path), and interception has a belt-and-braces root check.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… row Claude background subagents settle between turns, so their completion rows arrive under later synthetic turn ids (or none). Batch keying by each row's own turn splintered ten parallel spawns into a stream of 'Kicked off N subagents' rows (live thread 7ac7ef05: completions spread across 8 different turn ids). Membership is now decided once at the first row seen per taskId — task.started rows (which carry the true spawn turn) seed the batch and collapse into its CTA instead of being skipped. Repro test derives exactly one CTA with all 10 agents from the persisted thread export. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nscript
Two live-test findings with parallel Claude subagents, one root cause:
even with forwardSubagentText off, the SDK forwards subagent-owned
messages tagged parent_tool_use_id, and the adapter emitted them as
parent conversation.
- Subagent assistant snapshots became interleaved leak messages ('sleep
ran successfully…') AND spawned a synthetic turn per completion — which
is also why the Working timer kept resetting to 0: each synthetic turn
restarted the elapsed clock. Subagent-owned assistant messages now only
advance the resume cursor.
- Subagent-owned text/thinking stream blocks wrote into the parent
transcript; they are now dropped (tool_use blocks still flow, with
agentId attribution, for the quiet-timeline re-homing).
Subagent results still reach the UI through the task.* lifecycle
(task_notification summaries) — the panel loses nothing.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ffect beta.103 67 upstream commits (through 6b73b3d): paginated thread loading with user-anchored turn windows (pingdotgg#5493), contract-backed fonts (pingdotgg#5103), subagent/workflow observability agents panel (pingdotgg#5219), sidebar-v2 thread pinning (pingdotgg#5312, migrations 036/037), scannable pairing QR (pingdotgg#5360), MCP tool-result trimming (pingdotgg#5482), renderer OOM containment (pingdotgg#5148), tunnel survives updates/stops, terminal polish batch, forward-compat ServerProviders decode (pingdotgg#5327), Effect beta.103, many fixes. Forma preserved: composer surface/footer, ComposerMetaBar, diff panel skin, RightPanelTabs Forma strip/icons with BOTH componentPreview and agents surfaces, sidebar tone map, forma:// CORS origins, ~/.forma, fork migrations 935-941 after upstream 036/037, fork contract fields alongside fonts/threadPinning. Fonts unification starts (terminal now settings-driven); fix-forward follows. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Native subagent observability (#5219), wired per its spec's v2 merge plan: - getWorkflowScript RPC re-homed onto the v2 WS surface (contracts, rpc group, ws handler, auth scope, client atom). - AgentsPanel fed by the spec's mapper swap: projectedSubagentsToRuntime maps orchestration-v2 subagent entities into the panel model; deriveAgentPanelModel's v2Projection leg is now live and the v1 fold never runs. Agents surface wired into ChatView + RightPanelTabs. Other ports and reconciliations: - Shell reconnect-loop fix (#5561) ported into the v2 shell sync (same-session resubscribes resume from the in-memory cursor), with the cursor-resume regression test adapted to v2 fixtures. - Mobile end-follow latch (#5566) ported onto the v2 ThreadFeed. - Claude ede_diagnostic interrupt classification (#5557) ported into ClaudeAdapterV2 (aborted_tools/aborted_streaming => interrupted; CLI telemetry never becomes the failure banner). #5559 needs no v2 port (unknown system subtypes are already ignored). - Plan sidebar removed from the v2 ChatView/ChatComposer per main's plans-fold-into-chat rework (#5558); rightPanelStore stays at main's surface set. - SettingsPanels rebuilt as main's refactored version plus the branch's composer-context setting; sidebar snooze respects the time format (#4438 follow-through). - v1-only leftovers deleted: zombie v1 adapters/ingestion/tests the v2 rewrite removes, the v1-bound transfer-budget CI harness (#5350, needs a v2 rebuild), and main's v1 client pagination machinery (#5493 client side; the 037 keyset migration is kept — server-side v2 windowing is a follow-up). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
## What's Changed * fix(mobile): reduce thread feed scroll jank by @gabrielelpidio in pingdotgg/t3code#4874 * fix(web): restore sidebar v2 thread actions and terminal icon by @Noojuno in pingdotgg/t3code#4712 * fix(web): settle button now works on hover, not just right-click by @t3dotgg in pingdotgg/t3code#4905 * fix(clients): disable add project while disconnected by @StiensWout in pingdotgg/t3code#4834 * fix(composer): hide default Codex service tier by @maxktz in pingdotgg/t3code#4784 * docs: link iOS and Android app store downloads by @t3dotgg in pingdotgg/t3code#4902 * fix(web): align remote server update action by @StiensWout in pingdotgg/t3code#4731 * fix(connect): suggest a serve command that matches how you ran connect by @t3dotgg in pingdotgg/t3code#4897 * fix(mobile): stop shared content errors in Personal Team builds by @t3dotgg in pingdotgg/t3code#4943 * perf(mobile): sends respond instantly, thread opens stop freezing by @t3dotgg in pingdotgg/t3code#4882 * fix(web): show Codex fast mode as a bolt by @t3dotgg in pingdotgg/t3code#4947 * docs: seed worktrees with a copy of real userdata instead of banning it by @t3dotgg in pingdotgg/t3code#4949 * fix(mobile): support dragged images in the composer by @t3dotgg in pingdotgg/t3code#4953 * fix(mobile): stop long iOS threads from jumping while scrolling up by @t3dotgg in pingdotgg/t3code#4867 * fix(web): keep worktree default when switching a draft's machine by @t3dotgg in pingdotgg/t3code#4964 * perf(mobile): reconnect environments immediately on resume by @t3dotgg in pingdotgg/t3code#4878 * feat(web): pasting a huge screenshot now compresses it instead of erroring by @t3dotgg in pingdotgg/t3code#4967 * feat(web): regenerate thread titles from sidebar by @t3dotgg in pingdotgg/t3code#4810 * fix(web): show server update progress through reconnect by @t3dotgg in pingdotgg/t3code#4903 * feat(search): find threads by conversation content by @t3dotgg in pingdotgg/t3code#4959 * fix: marketing site Vercel builds no longer die after ~100 deploys by @t3dotgg in pingdotgg/t3code#4975 * docs: split user and maintainer docs, fix 100+ stale claims by @t3dotgg in pingdotgg/t3code#4807 * fix(web): server updates no longer look like warnings by @t3dotgg in pingdotgg/t3code#4992 * fix(connect): reboots no longer strand the relay link, 403s now say why by @t3dotgg in pingdotgg/t3code#4988 * Add project file picker (⌘P) and project content search (⇧⌘F) by @jakeleventhal in pingdotgg/t3code#4855 * Check for mobile app updates on launch by @juliusmarminge in pingdotgg/t3code#4958 * fix(mobile): support pre-Liquid-Glass iOS bottom toolbar by @gabrielelpidio in pingdotgg/t3code#4984 * fix(server): restore PR detection without HOME by @StiensWout in pingdotgg/t3code#4985 * fix(web): fill fast mode icon by @maria-rcks in pingdotgg/t3code#5004 * fix: cache project favicons across web and mobile by @gabrielelpidio in pingdotgg/t3code#4767 * perf(ci): cut stale runs and redundant setup by @t3dotgg in pingdotgg/t3code#4802 * style(web): make scroll-to-end pill translucent by @maria-rcks in pingdotgg/t3code#5036 * fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux by @juliusmarminge in pingdotgg/t3code#5015 * perf(server): cache default branch name and origin existence across status refreshes by @UtkarshUsername in pingdotgg/t3code#5008 * feat(shared): support shorthand (major-only) versions in the semver helpers by @arhxam in pingdotgg/t3code#5027 * fix(mobile): remove unnecessary photo library permission by @skjiisa in pingdotgg/t3code#4929 * fix(shared): lenient JSON parser deletes commas inside string values by @arhxam in pingdotgg/t3code#5025 * fix(mobile): default bare IP pairing to HTTP by @Lucenx9 in pingdotgg/t3code#4990 * fix(mobile): restore iOS Threads branding by @PixPMusic in pingdotgg/t3code#4862 * chore: add mobile issue template area by @MaxAnderson95 in pingdotgg/t3code#4895 * fix(desktop): link release notes from the update downloaded toast by @Sy-D in pingdotgg/t3code#4771 * fix(mobile): accept Android clipboard images in composer by @adityavardhansharma in pingdotgg/t3code#4836 * fix(mobile): show the correct build channel in Android's Threads page header by @PixPMusic in pingdotgg/t3code#4861 * fix(contracts): decode growing config unions forward-compatibly by @juliusmarminge in pingdotgg/t3code#5055 * fix(mobile): server model, worktree, and origin preferences now apply to new tasks by @t3dotgg in pingdotgg/t3code#5064 * fix(ci): repair the mobile showcase screenshots workflow by @juliusmarminge in pingdotgg/t3code#5057 * fix(ci): capture iPad App Store screenshots in landscape by @PixPMusic in pingdotgg/t3code#5065 * fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout by @mwolson in pingdotgg/t3code#5066 * feat(cli): `npx t3 pair` - generate QR code from a running server by @t3dotgg in pingdotgg/t3code#4955 * fix(server): self-update no longer rolls itself back on restart by @t3dotgg in pingdotgg/t3code#5095 * fix(ci): rotate iPad showcase captures without Simulator UI scripting by @juliusmarminge in pingdotgg/t3code#5094 * feat(web): render terminals with libghostty-vt by @StiensWout in pingdotgg/t3code#4860 * refactor: move the canonical libghostty-vt vendor to the repository root by @StiensWout in pingdotgg/t3code#5102 * feat(mobile): add thread snoozing by @gabrielelpidio in pingdotgg/t3code#5053 * feat(mobile): make settled threads collapsible by @PixPMusic in pingdotgg/t3code#5056 * follow-up normalization after #4700. by @shivamhwp in pingdotgg/t3code#4498 * feat(web): search threads from the sidebar by @shivamhwp in pingdotgg/t3code#4769 * feat(web): add settings sidebar search by @shivamhwp in pingdotgg/t3code#4682 * fix: threads with open PRs no longer auto-settle by @t3dotgg in pingdotgg/t3code#5151 * fix(server): bound thread catch-up replay and stop full-DB snapshot hydration by @t3dotgg in pingdotgg/t3code#5147 * fix(server): follow branch drift in dedicated worktrees so PRs link to their thread by @t3dotgg in pingdotgg/t3code#5159 * fix(server): make remote updates rollback-safe by @t3dotgg in pingdotgg/t3code#5181 * fix(web): stop settle controls overlapping the status label by @ipanasenko in pingdotgg/t3code#4574 * fix: normalize app icon glyph sizing by @t3-code[bot] in pingdotgg/t3code#5202 * fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug by @arhxam in pingdotgg/t3code#5076 * fix(server): stop npx service updates from silently leaving the old server running by @t3dotgg in pingdotgg/t3code#5217 * feat: fold legacy models into separate menus by @t3dotgg in pingdotgg/t3code#5190 * fix(desktop): claim the t3code:// scheme default on Linux at startup by @juliusmarminge in pingdotgg/t3code#5054 * fix(web): polish interface spacing by @maria-rcks in pingdotgg/t3code#5252 * fix(desktop): Niri/Hyprland - Linux secret storage backend by @mwolson in pingdotgg/t3code#2916 * fix(web): match loading screen to dark theme by @t3-code[bot] in pingdotgg/t3code#5303 * fix(web): blink the terminal cursor again by @StiensWout in pingdotgg/t3code#5314 * fix(terminal): protect held Ctrl/Cmd+W close shortcut by @StiensWout in pingdotgg/t3code#5322 * fix(server): strip replayable terminal queries from history by @StiensWout in pingdotgg/t3code#5319 * fix(contracts): decode ServerProviders forward-compatibly by @Brechard in pingdotgg/t3code#5327 * fix(web): simplify chat code blocks by @t3-code[bot] in pingdotgg/t3code#5301 * fix(web): align multiline error alert controls by @t3-code[bot] in pingdotgg/t3code#5304 * Upgrade Effect to beta.103 by @juliusmarminge in pingdotgg/t3code#5331 * fix(web): increase tooltip z-index to overlay popovers and menus by @naMqe-h in pingdotgg/t3code#5326 * fix(server): use a Cursor todo's title when its content is blank by @arhxam in pingdotgg/t3code#5073 * fix(ssh): isolate managed tunnel processes by @nateEc in pingdotgg/t3code#4347 * fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals by @arhxam in pingdotgg/t3code#5075 * fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode by @Wraient in pingdotgg/t3code#4586 * fix(web): stop the chat timeline reading through the provider status banner by @Bil0000 in pingdotgg/t3code#5353 * fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes by @t3dotgg in pingdotgg/t3code#5148 * fix(server): generate durable thread titles by @t3dotgg in pingdotgg/t3code#5357 * fix(web): better right panel (new diffs styling) by @maria-rcks in pingdotgg/t3code#5260 * fix(server): keep regenerated titles on topic by @t3dotgg in pingdotgg/t3code#5365 * refactor(server): make title prompts plaintext by @t3dotgg in pingdotgg/t3code#5368 * feat(web): configurable fonts and sizes under Settings → Appearance by @StiensWout in pingdotgg/t3code#5103 * feat(sidebar-v2): bring back thread pinning by @t3dotgg in pingdotgg/t3code#5312 * feat(web): make pairing QR codes actually scannable, with endpoint choice by @t3dotgg in pingdotgg/t3code#5360 * fix(desktop,web): improve in-app browser shortcuts and URL behavior by @t3dotgg in pingdotgg/t3code#4703 * fix(web): prevent legacy model picker layout shift by @FllipEis in pingdotgg/t3code#5349 * fix(server): allow remote updates with database migrations by @t3dotgg in pingdotgg/t3code#5374 * fix(mcp): unblock Kimi models in OpenCode with preview tools by @hwanseoc in pingdotgg/t3code#5128 * fix(web): clear main branch lint warnings by @t3dotgg in pingdotgg/t3code#5384 * fix(mobile): preserve grouped project workspaces by @shivamhwp in pingdotgg/t3code#4642 * fix(mobile): prevent Android thread search crash by @shivamhwp in pingdotgg/t3code#5386 * fix(web): truncate long project switcher names by @FllipEis in pingdotgg/t3code#5348 * fix(mobile): avoid double dividers between thread sections by @shivamhwp in pingdotgg/t3code#5391 * fix(web): keep the composer command menu anchored to the composer by @StiensWout in pingdotgg/t3code#5336 * fix(web): restore terminal link hover styles by @StiensWout in pingdotgg/t3code#5382 * fix(ci): isolate releases from shared API rate limits by @t3dotgg in pingdotgg/t3code#5394 * fix(web): keep model picker shortcuts in sync by @t3dotgg in pingdotgg/t3code#5400 * fix(web): keep terminal font settings reliable by @StiensWout in pingdotgg/t3code#5397 * Enrich terminal font previews by @juliusmarminge in pingdotgg/t3code#5428 * fix(web): preserve terminal font size when splitting by @t3-code[bot] in pingdotgg/t3code#5444 * Prevent terminal loading flash by @juliusmarminge in pingdotgg/t3code#5432 * fix: reconnect faster after remote server updates by @t3dotgg in pingdotgg/t3code#5404 * feat: native subagent & workflow observability by @t3dotgg in pingdotgg/t3code#5219 * perf(server): stop shipping full MCP tool results in thread payloads by @t3dotgg in pingdotgg/t3code#5482 * fix(web): closed plan sidebar stays closed when returning to a thread by @t3dotgg in pingdotgg/t3code#5484 * fix: respect time format for sidebar snooze by @huxcrux in pingdotgg/t3code#4438 * fix: smooth remote server updates by @t3dotgg in pingdotgg/t3code#5470 * fix(server): drop superseded tool updates from snapshots by @t3dotgg in pingdotgg/t3code#5483 * fix(web): clarify auto permission fallback by @t3-code[bot] in pingdotgg/t3code#5431 * fix(acp): keep unknown approvals actionable by @t3-code[bot] in pingdotgg/t3code#5430 * fix(mobile): stop thread messages reading through pending cards by @carlosricojr in pingdotgg/t3code#5450 * fix(web): align composer inline chips with prompt text by @StiensWout in pingdotgg/t3code#5495 * fix(web): clear woke state on explicit thread actions by @StiensWout in pingdotgg/t3code#5486 * fix(server): skip origin fetch when creating worktrees in repos without an origin remote by @t3dotgg in pingdotgg/t3code#5556 * fix(web): update tooltip no longer dismisses when scrolling release notes by @t3dotgg in pingdotgg/t3code#5547 * fix(server): stop showing commit/push/PR notices as errors in the work log by @t3dotgg in pingdotgg/t3code#5559 * fix(web): show remote environment for non-Git projects by @t3dotgg in pingdotgg/t3code#5555 * fix(server): stopping a Claude thread no longer shows an ede_diagnostic error by @t3dotgg in pingdotgg/t3code#5557 * fix(web): show one toast when snoozing threads in bulk by @t3dotgg in pingdotgg/t3code#5560 * fix(server): let stopped threads settle immediately by @t3dotgg in pingdotgg/t3code#5553 * feat: paginate thread loading with user-anchored turn windows by @t3dotgg in pingdotgg/t3code#5493 * fix: prevent reconnect loops during server stalls by @gfsaaser24 in pingdotgg/t3code#5561 * fix(server): settle stopped Claude subagents by @t3dotgg in pingdotgg/t3code#5568 * fix: scrolling up during a running thread no longer snaps back to the bottom by @t3dotgg in pingdotgg/t3code#5566 * fix(server): one disconnecting client no longer blocks every reconnect by @t3dotgg in pingdotgg/t3code#5572 * test(server): catch client transfer regressions in CI by @t3dotgg in pingdotgg/t3code#5350 * fix(web): stop the "requests are slow" warning from firing on every provider update by @t3dotgg in pingdotgg/t3code#5570 * fix(web): keep agent panel rows stable by @t3dotgg in pingdotgg/t3code#5569 * docs: ship production T3 Connect public config in .env.example by @t3dotgg in pingdotgg/t3code#5573 * fix(web): plans stop hijacking the UI, fold into chat instead by @t3dotgg in pingdotgg/t3code#5558 * feat(web): remove Build/Plan toggle from the composer by @t3dotgg in pingdotgg/t3code#5551 * feat(web): per-device provider settings by @t3dotgg in pingdotgg/t3code#4479 * fix(mobile): invisible T3 Connect devices can now be seen and removed by @t3dotgg in pingdotgg/t3code#5563 * fix: add missing space before 'GitHub releases page' link on download page by @Mateleo in pingdotgg/t3code#4511 * fix(web): stop the sidebar "Working" label from pulsing by @t3dotgg in pingdotgg/t3code#5580 * feat(web): add modular theme library by @StiensWout in pingdotgg/t3code#5226 * fix(web): reading a thread clears Done; Woke is dismissible by @t3dotgg in pingdotgg/t3code#5579 * perf(dev): faster cold-start for dev web serving by @t3dotgg in pingdotgg/t3code#5584 * fix(dev): agents get --share right on the first try by @t3dotgg in pingdotgg/t3code#5586 * fix(mobile): improve keyboard avoiding by @jmeistrich in pingdotgg/t3code#5451 * fix(web): live background-work banner no longer hides behind the update notice by @t3dotgg in pingdotgg/t3code#5595 * fix(web): stabilize chat timeline positioning by @jmeistrich in pingdotgg/t3code#5449 * feat(server): record runtime mode per turn and on mode changes by @t3dotgg in pingdotgg/t3code#5593 * feat(web): thread actions from the chat header title by @t3dotgg in pingdotgg/t3code#5592 * fix(mobile): avoid iOS terminal reset on clear by @justynleung in pingdotgg/t3code#5440 * fix(mobile): pad scroll views above Android nav bar by @StoneCotton in pingdotgg/t3code#5415 * fix(mobile): keep Android chat text from showing through the composer by @PollyGlot in pingdotgg/t3code#5582 * fix(mobile): repair Clerk auth navigation headers by @gabrielelpidio in pingdotgg/t3code#5140 * Bump mobile app version to 1.0.2 by @juliusmarminge in pingdotgg/t3code#5588 * feat(web): click the pin icon to unpin a thread by @UtkarshUsername in pingdotgg/t3code#5578 * fix(web): show the correctly matching shortcut in new thread button's tooltip by @UtkarshUsername in pingdotgg/t3code#5594 ## New Contributors * @gabrielelpidio made their first contribution in pingdotgg/t3code#4874 * @arhxam made their first contribution in pingdotgg/t3code#5027 * @skjiisa made their first contribution in pingdotgg/t3code#4929 * @Lucenx9 made their first contribution in pingdotgg/t3code#4990 * @MaxAnderson95 made their first contribution in pingdotgg/t3code#4895 * @t3-code[bot] made their first contribution in pingdotgg/t3code#5202 * @Brechard made their first contribution in pingdotgg/t3code#5327 * @naMqe-h made their first contribution in pingdotgg/t3code#5326 * @Bil0000 made their first contribution in pingdotgg/t3code#5353 * @gfsaaser24 made their first contribution in pingdotgg/t3code#5561 * @Mateleo made their first contribution in pingdotgg/t3code#4511 * @jmeistrich made their first contribution in pingdotgg/t3code#5451 * @justynleung made their first contribution in pingdotgg/t3code#5440 * @StoneCotton made their first contribution in pingdotgg/t3code#5415 * @PollyGlot made their first contribution in pingdotgg/t3code#5582 **Full Changelog**: pingdotgg/t3code@v0.0.31...v0.0.32 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.32
These seven files were the only content that existed solely on t3x/loop-supervisor. That branch was cut from a 2026-07-28 merge-base and has since fallen far enough behind that merging it would delete infra/t3x-update-relay and docs/t3x/agents — so it is being deleted rather than landed, and the research would have gone with it. What is worth keeping is not the proposal but the evidence under it: SUBAGENTS.md reproduces Claude Code's subagent wire protocol event-for-event against real captures, and RESEARCH.md / OPTIONS.md record a 4-design, 12-judgement panel with the codebase reads that killed three of the four. DESIGN.md now opens with a status banner saying the feature was never built, and naming the two upstream changes (pingdotgg#5219, pingdotgg#3638) that have since moved under it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* feat(web): add collapse-all toggle to diff panel (pingdotgg#4475) * feat(web): show fast mode as a bolt instead of a "Normal" label (pingdotgg#4488) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(dev): keep worktree dev state isolated on T3 Code dev servers (pingdotgg#4555) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(dev): Make t3 code dev instances shareable over Tailscale (pingdotgg#4556) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(dev): skip browser-blocked ports (pingdotgg#4608) * fix: cut websocket throughput in half by pruning activity payloads (pingdotgg#4622) * perf(mobile): defer work-log detail serialization (pingdotgg#4607) * test: account for lazy thread feed details (pingdotgg#4628) * feat(relay): limit managed tunnels per user (pingdotgg#4530) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add managed tunnel limits migration (pingdotgg#4635) * Add background preview capture and picture-in-picture support (pingdotgg#4397) Co-authored-by: codex <codex@users.noreply.github.com> * feat(web): prompt stash — cmd+S saves the composer to a per-provider queue (pingdotgg#4453) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Upgrade Effect and Alchemy betas (pingdotgg#4643) Prepare Relay production infrastructure for the PlanetScale PS_20 HA topology, upgrade Effect and Alchemy to compatible betas, reconcile migration state, and preserve patched MCP session termination behavior.\n\nCo-authored-by: codex <codex@users.noreply.github.com> * feat: allow new thread creation through project breadcrumbs (pingdotgg#4638) * fix(web): scope PR state to the thread branch (pingdotgg#4460) Co-authored-by: codex <codex@users.noreply.github.com> * Drop redundant Relay user indexes (pingdotgg#4648) Co-authored-by: codex <codex@users.noreply.github.com> * feat(connect): release the Cloudflare tunnel when the environment shuts down (pingdotgg#4531) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Relay Worker RuntimeContext wiring (pingdotgg#4653) Co-authored-by: codex <codex@users.noreply.github.com> * Fix live sidebar resize limits and defer Alchemy runtime context (pingdotgg#4655) * fix(web): constrain branch toolbar context (pingdotgg#4657) * Keep MCP credentials alive across provider turns (pingdotgg#4659) * fix: close actions dropdown when editing (pingdotgg#4660) * fix(preview): stabilize PiP viewport identity (pingdotgg#4661) Co-authored-by: codex <codex@users.noreply.github.com> * Add glass styling for thread tooltips and simplify preview tab handling (pingdotgg#4665) * Use tarball archiving for hosted web deploys (pingdotgg#4669) * fix(server): bound editor discovery during config loading (pingdotgg#4291) * Prevent draft thread detail polling before shell registration (pingdotgg#4670) Co-authored-by: codex <codex@users.noreply.github.com> * feat: add configurable source control writing settings (pingdotgg#4204) Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * feat(diff-panel): show total line additions and deletions (pingdotgg#4674) * Clear provider update actions while updating (pingdotgg#4676) * Fix sidebar highlighting for draft threads (pingdotgg#4679) * Use glass surfaces for web toasts (pingdotgg#4681) * Show origin ref in branch trigger label (pingdotgg#4680) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): match react version to react-native 0.85.3 vendored renderer (19.2.3) (pingdotgg#4675) * chore(release): prepare v0.0.29 * Add OTA update checks to mobile settings (pingdotgg#4686) * fix(mobile): threads load snapped to bottom on iOS (pingdotgg#4689) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: default sidebar v2 on for nightly and dev builds (pingdotgg#4491) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): 33 web UI fixes (pingdotgg#4700) * Make mobile Thread List v2 the default (pingdotgg#4717) * Fix mobile showcase workflow without Clerk (pingdotgg#4718) * Fix relay credential lookup for unlinked environments (pingdotgg#4692) Co-authored-by: codex <codex@users.noreply.github.com> * Settle merged PR threads immediately (pingdotgg#4704) * feat(web): add maria's sidebar header artwork toggle (pingdotgg#4652) * feat(web): add appearance settings category (pingdotgg#4715) * fix(desktop): allow updater-controlled relaunch (pingdotgg#4721) * fix(web): prevent diff panel scroll jumping (pingdotgg#4724) * Link inline code file paths in chat markdown (pingdotgg#4726) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Android showcase capture and rebuild v2 queued rows (pingdotgg#4730) Co-authored-by: Claude <noreply@anthropic.com> * perf(server): negotiate permessage-deflate on the websocket (pingdotgg#4705) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: overhaul agent guidance (pingdotgg#4782) * Prevent sidebar row labels from truncating (pingdotgg#4789) * perf(server): gzip large thread snapshots (pingdotgg#4788) * fix(web): stashed prompts now survive switching providers (pingdotgg#4787) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Git ref refresh resource storms (pingdotgg#4727) Co-authored-by: codex <codex@users.noreply.github.com> * perf(server): trim stale context-window rows and drop dead replay RPC (pingdotgg#4791) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): defer command palette filesystem navigation (pingdotgg#2109) Co-authored-by: codex <codex@users.noreply.github.com> * fix(release): skip scripts during Vercel installs (pingdotgg#4796) * refactor(client): share filesystem browse navigation (pingdotgg#4797) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): defer filesystem navigation (pingdotgg#4799) Co-authored-by: codex <codex@users.noreply.github.com> * refactor(server): use native HTTP compression streams (pingdotgg#4798) Co-authored-by: codex <codex@users.noreply.github.com> * Remove Connect waitlist and add GA announcement tooling (pingdotgg#4691) * Fix Connect sign-in settings label (pingdotgg#4806) * chore(release): prepare v0.0.30 * fix(desktop): restore T3 Connect sign-in (pingdotgg#4809) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Simplify files panel header (pingdotgg#4828) * build(desktop): reduce installed app size by ~300MB (pingdotgg#4824) * Update model version from claude-opus-4-8 to claude-opus-5 (pingdotgg#4832) * Preserve the thread shell while detail loads (pingdotgg#4830) * Reduce idle work and disk churn with native resource diagnostics (pingdotgg#2679) Co-authored-by: codex <codex@users.noreply.github.com> * fix(server): detect repositories after initialization (pingdotgg#4848) * perf(server): merge separate staged/unstaged numstat calls into single diff HEAD --numstat (pingdotgg#4843) * fix(git): disable external diff for review diff previews (pingdotgg#4854) * Fix editable file focus and live syntax highlighting (pingdotgg#3979) * fix(web): remember the rendered-markdown choice across threads (pingdotgg#4853) Co-authored-by: Simon Doba <simon.doba@orbit.de> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * chore(release): prepare v0.0.31 * fix(mobile): reduce thread feed scroll jank (pingdotgg#4874) * fix(web): restore sidebar v2 thread actions and terminal icon (pingdotgg#4712) * fix(web): settle button now works on hover, not just right-click (pingdotgg#4905) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(clients): disable add project while disconnected (pingdotgg#4834) * fix(composer): hide default Codex service tier (pingdotgg#4784) * docs: link iOS and Android app store downloads (pingdotgg#4902) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align remote server update action (pingdotgg#4731) * fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943) * perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show Codex fast mode as a bolt (pingdotgg#4947) * docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): support dragged images in the composer (pingdotgg#4953) * fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(mobile): reconnect environments immediately on resume (pingdotgg#4878) * feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): regenerate thread titles from sidebar (pingdotgg#4810) * fix(web): show server update progress through reconnect (pingdotgg#4903) * feat(search): find threads by conversation content (pingdotgg#4959) * fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): server updates no longer look like warnings (pingdotgg#4992) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * Check for mobile app updates on launch (pingdotgg#4958) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984) * fix(server): restore PR detection without HOME (pingdotgg#4985) * fix(web): fill fast mode icon (pingdotgg#5004) * fix: cache project favicons across web and mobile (pingdotgg#4767) * perf(ci): cut stale runs and redundant setup (pingdotgg#4802) * chore(mobile): bump app version to 1.0.1 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * style(web): make scroll-to-end pill translucent (pingdotgg#5036) * fix(ci): drop sparse-checkout from EAS workflows actions/checkout implements sparse-checkout with --filter=blob:none, so the runner repo is a partial clone missing the .repos/ blobs. eas-cli archives the project via `git clone --depth 1 file://<workspace>`, which upload-pack cannot serve from a partial clone and exits 128 (pingdotgg#4802 broke both EAS build workflows this way). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008) * feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): remove unnecessary photo library permission (pingdotgg#4929) * fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990) * fix(mobile): restore iOS Threads branding (pingdotgg#4862) * chore: add mobile issue template area (pingdotgg#4895) * fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(mobile): accept Android clipboard images in composer (pingdotgg#4836) * fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861) * fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057) * fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065) * fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066) * feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): render terminals with libghostty-vt (pingdotgg#4860) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(mobile): add thread snoozing (pingdotgg#5053) * feat(mobile): make settled threads collapsible (pingdotgg#5056) * follow-up normalization after pingdotgg#4700. (pingdotgg#4498) Co-authored-by: T3 Code Test <t3code-test@example.com> * feat(web): search threads from the sidebar (pingdotgg#4769) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): add settings sidebar search (pingdotgg#4682) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: threads with open PRs no longer auto-settle (pingdotgg#5151) * fix(server): bound thread catch-up replay and stop full-DB snapshot hydration (pingdotgg#5147) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): follow branch drift in dedicated worktrees so PRs link to their thread (pingdotgg#5159) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): make remote updates rollback-safe (pingdotgg#5181) * fix(web): stop settle controls overlapping the status label (pingdotgg#4574) * fix: normalize app icon glyph sizing (pingdotgg#5202) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug (pingdotgg#5076) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(server): stop npx service updates from silently leaving the old server running (pingdotgg#5217) Co-authored-by: Claude <noreply@anthropic.com> * feat: fold legacy models into separate menus (pingdotgg#5190) * fix(desktop): claim the t3code:// scheme default on Linux at startup (pingdotgg#5054) * fix(web): polish interface spacing (pingdotgg#5252) * fix(desktop): Niri/Hyprland - Linux secret storage backend (pingdotgg#2916) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): match loading screen to dark theme (pingdotgg#5303) * fix(web): blink the terminal cursor again (pingdotgg#5314) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(terminal): protect held Ctrl/Cmd+W close shortcut (pingdotgg#5322) * fix(server): strip replayable terminal queries from history (pingdotgg#5319) * fix(contracts): decode ServerProviders forward-compatibly (pingdotgg#5327) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> * fix(web): simplify chat code blocks (pingdotgg#5301) * fix(web): align multiline error alert controls (pingdotgg#5304) * Upgrade Effect to beta.103 (pingdotgg#5331) * fix(web): increase tooltip z-index to overlay popovers and menus (pingdotgg#5326) * fix(server): use a Cursor todo's title when its content is blank (pingdotgg#5073) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(ssh): isolate managed tunnel processes (pingdotgg#4347) * fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals (pingdotgg#5075) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode (pingdotgg#4586) * fix(web): stop the chat timeline reading through the provider status banner (pingdotgg#5353) * fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes (pingdotgg#5148) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): generate durable thread titles (pingdotgg#5357) * fix(web): better right panel (new diffs styling) (pingdotgg#5260) * fix(server): keep regenerated titles on topic (pingdotgg#5365) * refactor(server): make title prompts plaintext (pingdotgg#5368) * feat(web): configurable fonts and sizes under Settings → Appearance (pingdotgg#5103) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * feat(sidebar-v2): thread pinning for sidebar v2 (pingdotgg#5312) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): make pairing QR codes actually scannable, with endpoint choice (pingdotgg#5360) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop,web): improve in-app browser shortcuts and URL behavior (pingdotgg#4703) * fix(web): prevent legacy model picker layout shift (pingdotgg#5349) * fix(server): allow remote updates with database migrations (pingdotgg#5374) * fix(mcp): unblock Kimi models in OpenCode with preview tools (pingdotgg#5128) * fix(web): clear main branch lint warnings (pingdotgg#5384) * fix(mobile): preserve grouped project workspaces (pingdotgg#4642) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(mobile): prevent Android thread search crash (pingdotgg#5386) * fix(web): truncate long project switcher names (pingdotgg#5348) * fix(mobile): avoid double dividers between thread sections (pingdotgg#5391) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(web): keep the composer command menu anchored to the composer (pingdotgg#5336) * fix(web): restore terminal link hover styles (pingdotgg#5382) * fix(ci): isolate releases from shared API rate limits (pingdotgg#5394) * fix(web): keep model picker shortcuts in sync (pingdotgg#5400) * fix(web): keep terminal font settings reliable (pingdotgg#5397) * Enrich terminal font previews (pingdotgg#5428) * fix(web): preserve terminal font size when splitting (pingdotgg#5444) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * Prevent terminal loading flash (pingdotgg#5432) * fix: reconnect faster after remote server updates (pingdotgg#5404) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: native subagent & workflow observability (pingdotgg#5219) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): stop shipping full MCP tool results in thread payloads (pingdotgg#5482) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): closed plan sidebar stays closed when returning to a thread (pingdotgg#5484) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: respect time format for sidebar snooze (pingdotgg#4438) * fix(web): calm one-row server update status and banner The version-skew banner is no longer an amber warning: it reads "Server update available" with the raw versions (unreadable for nightlies) moved to a tooltip. The in-flight rail (Download/Install/ Resume) becomes a single status row, "Downloading…" then "Restarting…", since the wire installing stage is a sub-second launcher handoff and "resuming" meant nothing to most people. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): keep the managed tunnel across remote update restarts Measured on a live update: the server was back in ~9s but stayed unreachable for ~96s, because releasing the tunnel on shutdown forces the replacement tunnel's hostname route through 1-2 minutes of edge propagation. An update handoff always brings a server right back (new version or rollback), so the tunnel is never orphaned; skip the release when the launcher state file records a pending update. The next boot respawns the connector from the stored config against the same tunnel and is reachable as soon as it connects. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(server): use the launcher state writer in release tests Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): release the tunnel when an explicit stop interrupts an update A pending update in the launcher state is not proof a replacement server is coming: `t3 service uninstall` or `systemctl stop` during the pending window also tears the server down, permanently. The launcher now writes a stop marker before signalling its child on an explicit stop and clears it on the next start; the shutdown tunnel release keeps the tunnel only for pending updates without the marker. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): clean up interrupted update trials * fix(server): order explicit service shutdown * fix(web): make update version tooltips accessible * fix(server): separate trial cleanup from handoff retention * fix(server): drop superseded tool updates from snapshots A tool.updated row is the in-flight snapshot of a call; once the call completes, the tool.completed row carries the final state and both clients fold every matching update into it. Shipping the updates buys nothing: 47k such rows exist in one real database, and a single thread carries 3,291 of them. Filter them out of thread snapshots, mirroring the existing context-window dedup. Matching is per turn and only against a LATER completion, so a revert that discards the completing turn cannot leave a call unrepresented, and a later update under the same identity (the next call, still in flight) survives. Live events are untouched. Rows are matched on the same identity the clients collapse by: an explicit data.toolCallId when the adapter emits one, otherwise the itemType/title/detail triple. No tool lifecycle row in the real db carries a toolCallId, so the fallback does the work. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(server): pin interleaved-collapse divergence as intentional with test Bugbot flagged that clients collapse only adjacent lifecycle rows, so dropping a superseded update separated by an interleaved parallel call diverges from full-history rendering. Measured on a real database: 1.5% of dropped rows (553/36,581), all pure in-flight state whose final result the retained completion still shows, and zero dropped rows carry a client-merged payload field their completion lacks (verified across all 49,515 update rows). Documents the tradeoff and adds a test pinning it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(web): clarify auto permission fallback (pingdotgg#5431) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(acp): keep unknown approvals actionable (pingdotgg#5430) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(mobile): stop thread messages reading through pending cards (pingdotgg#5450) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(web): align composer inline chips with prompt text (pingdotgg#5495) * fix(web): clear woke state on explicit thread actions (pingdotgg#5486) * fix(server): skip origin fetch when creating worktrees in repos without an origin remote (pingdotgg#5556) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): update tooltip no longer dismisses when scrolling release notes (pingdotgg#5547) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): stop showing commit/push/PR notices as errors in the work log (pingdotgg#5559) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show remote environment for non-Git projects (pingdotgg#5555) * fix(server): stopping a Claude thread no longer shows an ede_diagnostic error (pingdotgg#5557) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show one toast when snoozing threads in bulk (pingdotgg#5560) * fix(server): let stopped threads settle immediately (pingdotgg#5553) * feat: paginate thread loading with user-anchored turn windows (pingdotgg#5493) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: prevent reconnect loops during server stalls (pingdotgg#5561) Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Theo Browne <me@t3.gg> * fix(server): settle stopped Claude subagents (pingdotgg#5568) * fix: scrolling up during a running thread no longer snaps back to the bottom (pingdotgg#5566) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): one disconnecting client no longer blocks every reconnect (pingdotgg#5572) Co-authored-by: Claude <noreply@anthropic.com> * test(server): catch client transfer regressions in CI (pingdotgg#5350) * fix(web): stop the "requests are slow" warning from firing on every provider update (pingdotgg#5570) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): keep agent panel rows stable (pingdotgg#5569) * docs: ship production T3 Connect public config in .env.example (pingdotgg#5573) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): plans stop hijacking the UI, fold into chat instead (pingdotgg#5558) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): remove Build/Plan toggle from the composer (pingdotgg#5551) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): per-device provider settings (pingdotgg#4479) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511) * fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): add modular theme library (pingdotgg#5226) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: maria-rcks <maria@kuuro.net> Co-authored-by: Julius Marminge <jmarminge@gmail.com> * fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(dev): faster cold-start for dev web serving (pingdotgg#5584) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(dev): Improve instructions for --share (pingdotgg#5586) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): improve keyboard avoiding (pingdotgg#5451) * fix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): stabilize chat timeline positioning (pingdotgg#5449) Co-authored-by: codex <codex@users.noreply.github.com> * feat(server): record runtime mode per turn and on mode changes (pingdotgg#5593) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): thread actions from the chat header title (pingdotgg#5592) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): avoid iOS terminal reset on clear (pingdotgg#5440) * fix(mobile): pad scroll views above Android nav bar (pingdotgg#5415) * fix(mobile): keep Android chat text from showing through the composer (pingdotgg#5582) * fix(mobile): repair Clerk auth navigation headers (pingdotgg#5140) Co-authored-by: codex <codex@users.noreply.github.com> * Bump mobile app version to 1.0.2 (pingdotgg#5588) * feat(web): click the pin icon to unpin a thread (pingdotgg#5578) * fix(web): show the correctly matching shortcut in new thread button's tooltip (pingdotgg#5594) * chore: advance public upstream baseline * chore: advance upstream baseline to v0.0.32 * fix: align react native patch lock hash --------- Co-authored-by: jan <hi@4bs3nt.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Alex Southwell <saphid@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Max Katz <me@maxkatz.me> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: Krzysztof Moch <krzysmoch.programs@gmail.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: wukko <me@wukko.me> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: ohbentos <72638975+ohbentos@users.noreply.github.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: Simon Doba <simon.doba@hotmail.de> Co-authored-by: Simon Doba <simon.doba@orbit.de> Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com> Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com> Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com> Co-authored-by: Elaine Lyons <elaine@lyons.app> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com> Co-authored-by: Mike Olson <mwolson@member.fsf.org> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: T3 Code Test <t3code-test@example.com> Co-authored-by: Illia Panasenko <hello@ipanasenko.me> Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com> Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: naMqe <naMqe07@gmail.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Fllip <39161142+FllipEis@users.noreply.github.com> Co-authored-by: Hwanseo Choi <electricvoxel@gmail.com> Co-authored-by: Hugo Blom <6117705+huxcrux@users.noreply.github.com> Co-authored-by: Carlos Rico-Ospina <carlosricojr@gmail.com> Co-authored-by: Gabe Fletcher <gabe@editmypodcast.agency> Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Mateleo <mateleo78@gmail.com> Co-authored-by: Julius Marminge <jmarminge@gmail.com> Co-authored-by: Jay Meistrich <github@jayz.us> Co-authored-by: Justyn Leung <justynleung2000@gmail.com> Co-authored-by: Tyler Saari <73684839+StoneCotton@users.noreply.github.com> Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com> Co-authored-by: atryan <atryan@users.noreply.github.com>
These seven files were the only content that existed solely on t3x/loop-supervisor. That branch was cut from a 2026-07-28 merge-base and has since fallen far enough behind that merging it would delete infra/t3x-update-relay and docs/t3x/agents — so it is being deleted rather than landed, and the research would have gone with it. What is worth keeping is not the proposal but the evidence under it: SUBAGENTS.md reproduces Claude Code's subagent wire protocol event-for-event against real captures, and RESEARCH.md / OPTIONS.md record a 4-design, 12-judgement panel with the codebase reads that killed three of the four. DESIGN.md now opens with a status banner saying the feature was never built, and naming the two upstream changes (pingdotgg#5219, pingdotgg#3638) that have since moved under it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Upstream's pingdotgg#5219 (native subagent & workflow observability) and pingdotgg#5677 (stop the reaper killing live background subagents) put two shared registries behind the projection snapshot query: ThreadBackgroundLivenessService and ThreadPlanProgressService. The fork's crash-recovery reconciler test builds its own layer rather than reusing orchestration/runtimeLayer.ts, so it did not pick them up and failed typecheck with an unfilled Layer context. Provided rather than provideMerge'd — nothing in this test reads the registries directly, so they need satisfying, not re-exporting. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
These seven files were the only content that existed solely on t3x/loop-supervisor. That branch was cut from a 2026-07-28 merge-base and has since fallen far enough behind that merging it would delete infra/t3x-update-relay and docs/t3x/agents — so it is being deleted rather than landed, and the research would have gone with it. What is worth keeping is not the proposal but the evidence under it: SUBAGENTS.md reproduces Claude Code's subagent wire protocol event-for-event against real captures, and RESEARCH.md / OPTIONS.md record a 4-design, 12-judgement panel with the codebase reads that killed three of the four. DESIGN.md now opens with a status banner saying the feature was never built, and naming the two upstream changes (pingdotgg#5219, pingdotgg#3638) that have since moved under it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Upstream's pingdotgg#5219 (native subagent & workflow observability) and pingdotgg#5677 (stop the reaper killing live background subagents) put two shared registries behind the projection snapshot query: ThreadBackgroundLivenessService and ThreadPlanProgressService. The fork's crash-recovery reconciler test builds its own layer rather than reusing orchestration/runtimeLayer.ts, so it did not pick them up and failed typecheck with an unfilled Layer context. Provided rather than provideMerge'd — nothing in this test reads the registries directly, so they need satisfying, not re-exporting. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Native subagent observability (#5219), wired per its spec's v2 merge plan: - getWorkflowScript RPC re-homed onto the v2 WS surface (contracts, rpc group, ws handler, auth scope, client atom). - AgentsPanel fed by the spec's mapper swap: projectedSubagentsToRuntime maps orchestration-v2 subagent entities into the panel model; deriveAgentPanelModel's v2Projection leg is now live and the v1 fold never runs. Agents surface wired into ChatView + RightPanelTabs. Other ports and reconciliations: - Shell reconnect-loop fix (#5561) ported into the v2 shell sync (same-session resubscribes resume from the in-memory cursor), with the cursor-resume regression test adapted to v2 fixtures. - Mobile end-follow latch (#5566) ported onto the v2 ThreadFeed. - Claude ede_diagnostic interrupt classification (#5557) ported into ClaudeAdapterV2 (aborted_tools/aborted_streaming => interrupted; CLI telemetry never becomes the failure banner). #5559 needs no v2 port (unknown system subtypes are already ignored). - Plan sidebar removed from the v2 ChatView/ChatComposer per main's plans-fold-into-chat rework (#5558); rightPanelStore stays at main's surface set. - SettingsPanels rebuilt as main's refactored version plus the branch's composer-context setting; sidebar snooze respects the time format (#4438 follow-through). - v1-only leftovers deleted: zombie v1 adapters/ingestion/tests the v2 rewrite removes, the v1-bound transfer-budget CI harness (#5350, needs a v2 rebuild), and main's v1 client pagination machinery (#5493 client side; the 037 keyset migration is kept — server-side v2 windowing is a follow-up). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(desktop): allow updater-controlled relaunch (pingdotgg#4721) * fix(web): prevent diff panel scroll jumping (pingdotgg#4724) * Link inline code file paths in chat markdown (pingdotgg#4726) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Android showcase capture and rebuild v2 queued rows (pingdotgg#4730) Co-authored-by: Claude <noreply@anthropic.com> * perf(server): negotiate permessage-deflate on the websocket (pingdotgg#4705) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: overhaul agent guidance (pingdotgg#4782) * Prevent sidebar row labels from truncating (pingdotgg#4789) * perf(server): gzip large thread snapshots (pingdotgg#4788) * fix(web): stashed prompts now survive switching providers (pingdotgg#4787) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Git ref refresh resource storms (pingdotgg#4727) Co-authored-by: codex <codex@users.noreply.github.com> * perf(server): trim stale context-window rows and drop dead replay RPC (pingdotgg#4791) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): defer command palette filesystem navigation (pingdotgg#2109) Co-authored-by: codex <codex@users.noreply.github.com> * fix(release): skip scripts during Vercel installs (pingdotgg#4796) * refactor(client): share filesystem browse navigation (pingdotgg#4797) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): defer filesystem navigation (pingdotgg#4799) Co-authored-by: codex <codex@users.noreply.github.com> * refactor(server): use native HTTP compression streams (pingdotgg#4798) Co-authored-by: codex <codex@users.noreply.github.com> * Remove Connect waitlist and add GA announcement tooling (pingdotgg#4691) * Fix Connect sign-in settings label (pingdotgg#4806) * chore(release): prepare v0.0.30 * fix(desktop): restore T3 Connect sign-in (pingdotgg#4809) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Simplify files panel header (pingdotgg#4828) * build(desktop): reduce installed app size by ~300MB (pingdotgg#4824) * Update model version from claude-opus-4-8 to claude-opus-5 (pingdotgg#4832) * Preserve the thread shell while detail loads (pingdotgg#4830) * Reduce idle work and disk churn with native resource diagnostics (pingdotgg#2679) Co-authored-by: codex <codex@users.noreply.github.com> * fix(server): detect repositories after initialization (pingdotgg#4848) * perf(server): merge separate staged/unstaged numstat calls into single diff HEAD --numstat (pingdotgg#4843) * fix(git): disable external diff for review diff previews (pingdotgg#4854) * Fix editable file focus and live syntax highlighting (pingdotgg#3979) * fix(web): remember the rendered-markdown choice across threads (pingdotgg#4853) Co-authored-by: Simon Doba <simon.doba@orbit.de> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * chore(release): prepare v0.0.31 * fix(mobile): reduce thread feed scroll jank (pingdotgg#4874) * fix(web): restore sidebar v2 thread actions and terminal icon (pingdotgg#4712) * fix(web): settle button now works on hover, not just right-click (pingdotgg#4905) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(clients): disable add project while disconnected (pingdotgg#4834) * fix(composer): hide default Codex service tier (pingdotgg#4784) * docs: link iOS and Android app store downloads (pingdotgg#4902) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align remote server update action (pingdotgg#4731) * fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943) * perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show Codex fast mode as a bolt (pingdotgg#4947) * docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): support dragged images in the composer (pingdotgg#4953) * fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(mobile): reconnect environments immediately on resume (pingdotgg#4878) * feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): regenerate thread titles from sidebar (pingdotgg#4810) * fix(web): show server update progress through reconnect (pingdotgg#4903) * feat(search): find threads by conversation content (pingdotgg#4959) * fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): server updates no longer look like warnings (pingdotgg#4992) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * Check for mobile app updates on launch (pingdotgg#4958) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984) * fix(server): restore PR detection without HOME (pingdotgg#4985) * fix(web): fill fast mode icon (pingdotgg#5004) * fix: cache project favicons across web and mobile (pingdotgg#4767) * perf(ci): cut stale runs and redundant setup (pingdotgg#4802) * chore(mobile): bump app version to 1.0.1 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * style(web): make scroll-to-end pill translucent (pingdotgg#5036) * fix(ci): drop sparse-checkout from EAS workflows actions/checkout implements sparse-checkout with --filter=blob:none, so the runner repo is a partial clone missing the .repos/ blobs. eas-cli archives the project via `git clone --depth 1 file://<workspace>`, which upload-pack cannot serve from a partial clone and exits 128 (pingdotgg#4802 broke both EAS build workflows this way). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008) * feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): remove unnecessary photo library permission (pingdotgg#4929) * fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990) * fix(mobile): restore iOS Threads branding (pingdotgg#4862) * chore: add mobile issue template area (pingdotgg#4895) * fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(mobile): accept Android clipboard images in composer (pingdotgg#4836) * fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861) * fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057) * fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065) * fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066) * feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): render terminals with libghostty-vt (pingdotgg#4860) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(mobile): add thread snoozing (pingdotgg#5053) * feat(mobile): make settled threads collapsible (pingdotgg#5056) * follow-up normalization after pingdotgg#4700. (pingdotgg#4498) Co-authored-by: T3 Code Test <t3code-test@example.com> * feat(web): search threads from the sidebar (pingdotgg#4769) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): add settings sidebar search (pingdotgg#4682) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: threads with open PRs no longer auto-settle (pingdotgg#5151) * fix(server): bound thread catch-up replay and stop full-DB snapshot hydration (pingdotgg#5147) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): follow branch drift in dedicated worktrees so PRs link to their thread (pingdotgg#5159) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): make remote updates rollback-safe (pingdotgg#5181) * fix(web): stop settle controls overlapping the status label (pingdotgg#4574) * fix: normalize app icon glyph sizing (pingdotgg#5202) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug (pingdotgg#5076) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(server): stop npx service updates from silently leaving the old server running (pingdotgg#5217) Co-authored-by: Claude <noreply@anthropic.com> * feat: fold legacy models into separate menus (pingdotgg#5190) * fix(desktop): claim the t3code:// scheme default on Linux at startup (pingdotgg#5054) * fix(web): polish interface spacing (pingdotgg#5252) * fix(desktop): Niri/Hyprland - Linux secret storage backend (pingdotgg#2916) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): match loading screen to dark theme (pingdotgg#5303) * fix(web): blink the terminal cursor again (pingdotgg#5314) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(terminal): protect held Ctrl/Cmd+W close shortcut (pingdotgg#5322) * fix(server): strip replayable terminal queries from history (pingdotgg#5319) * fix(contracts): decode ServerProviders forward-compatibly (pingdotgg#5327) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> * fix(web): simplify chat code blocks (pingdotgg#5301) * fix(web): align multiline error alert controls (pingdotgg#5304) * Upgrade Effect to beta.103 (pingdotgg#5331) * fix(web): increase tooltip z-index to overlay popovers and menus (pingdotgg#5326) * fix(server): use a Cursor todo's title when its content is blank (pingdotgg#5073) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(ssh): isolate managed tunnel processes (pingdotgg#4347) * fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals (pingdotgg#5075) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode (pingdotgg#4586) * fix(web): stop the chat timeline reading through the provider status banner (pingdotgg#5353) * fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes (pingdotgg#5148) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): generate durable thread titles (pingdotgg#5357) * fix(web): better right panel (new diffs styling) (pingdotgg#5260) * fix(server): keep regenerated titles on topic (pingdotgg#5365) * refactor(server): make title prompts plaintext (pingdotgg#5368) * feat(web): configurable fonts and sizes under Settings → Appearance (pingdotgg#5103) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * feat(sidebar-v2): thread pinning for sidebar v2 (pingdotgg#5312) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): make pairing QR codes actually scannable, with endpoint choice (pingdotgg#5360) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop,web): improve in-app browser shortcuts and URL behavior (pingdotgg#4703) * fix(web): prevent legacy model picker layout shift (pingdotgg#5349) * fix(server): allow remote updates with database migrations (pingdotgg#5374) * fix(mcp): unblock Kimi models in OpenCode with preview tools (pingdotgg#5128) * fix(web): clear main branch lint warnings (pingdotgg#5384) * fix(mobile): preserve grouped project workspaces (pingdotgg#4642) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(mobile): prevent Android thread search crash (pingdotgg#5386) * fix(web): truncate long project switcher names (pingdotgg#5348) * fix(mobile): avoid double dividers between thread sections (pingdotgg#5391) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(web): keep the composer command menu anchored to the composer (pingdotgg#5336) * fix(web): restore terminal link hover styles (pingdotgg#5382) * fix(ci): isolate releases from shared API rate limits (pingdotgg#5394) * fix(web): keep model picker shortcuts in sync (pingdotgg#5400) * fix(web): keep terminal font settings reliable (pingdotgg#5397) * Enrich terminal font previews (pingdotgg#5428) * fix(web): preserve terminal font size when splitting (pingdotgg#5444) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * Prevent terminal loading flash (pingdotgg#5432) * fix: reconnect faster after remote server updates (pingdotgg#5404) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: native subagent & workflow observability (pingdotgg#5219) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): stop shipping full MCP tool results in thread payloads (pingdotgg#5482) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): closed plan sidebar stays closed when returning to a thread (pingdotgg#5484) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: respect time format for sidebar snooze (pingdotgg#4438) * fix(web): calm one-row server update status and banner The version-skew banner is no longer an amber warning: it reads "Server update available" with the raw versions (unreadable for nightlies) moved to a tooltip. The in-flight rail (Download/Install/ Resume) becomes a single status row, "Downloading…" then "Restarting…", since the wire installing stage is a sub-second launcher handoff and "resuming" meant nothing to most people. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): keep the managed tunnel across remote update restarts Measured on a live update: the server was back in ~9s but stayed unreachable for ~96s, because releasing the tunnel on shutdown forces the replacement tunnel's hostname route through 1-2 minutes of edge propagation. An update handoff always brings a server right back (new version or rollback), so the tunnel is never orphaned; skip the release when the launcher state file records a pending update. The next boot respawns the connector from the stored config against the same tunnel and is reachable as soon as it connects. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(server): use the launcher state writer in release tests Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): release the tunnel when an explicit stop interrupts an update A pending update in the launcher state is not proof a replacement server is coming: `t3 service uninstall` or `systemctl stop` during the pending window also tears the server down, permanently. The launcher now writes a stop marker before signalling its child on an explicit stop and clears it on the next start; the shutdown tunnel release keeps the tunnel only for pending updates without the marker. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): clean up interrupted update trials * fix(server): order explicit service shutdown * fix(web): make update version tooltips accessible * fix(server): separate trial cleanup from handoff retention * fix(server): drop superseded tool updates from snapshots A tool.updated row is the in-flight snapshot of a call; once the call completes, the tool.completed row carries the final state and both clients fold every matching update into it. Shipping the updates buys nothing: 47k such rows exist in one real database, and a single thread carries 3,291 of them. Filter them out of thread snapshots, mirroring the existing context-window dedup. Matching is per turn and only against a LATER completion, so a revert that discards the completing turn cannot leave a call unrepresented, and a later update under the same identity (the next call, still in flight) survives. Live events are untouched. Rows are matched on the same identity the clients collapse by: an explicit data.toolCallId when the adapter emits one, otherwise the itemType/title/detail triple. No tool lifecycle row in the real db carries a toolCallId, so the fallback does the work. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(server): pin interleaved-collapse divergence as intentional with test Bugbot flagged that clients collapse only adjacent lifecycle rows, so dropping a superseded update separated by an interleaved parallel call diverges from full-history rendering. Measured on a real database: 1.5% of dropped rows (553/36,581), all pure in-flight state whose final result the retained completion still shows, and zero dropped rows carry a client-merged payload field their completion lacks (verified across all 49,515 update rows). Documents the tradeoff and adds a test pinning it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(web): clarify auto permission fallback (pingdotgg#5431) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(acp): keep unknown approvals actionable (pingdotgg#5430) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(mobile): stop thread messages reading through pending cards (pingdotgg#5450) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(web): align composer inline chips with prompt text (pingdotgg#5495) * fix(web): clear woke state on explicit thread actions (pingdotgg#5486) * fix(server): skip origin fetch when creating worktrees in repos without an origin remote (pingdotgg#5556) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): update tooltip no longer dismisses when scrolling release notes (pingdotgg#5547) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): stop showing commit/push/PR notices as errors in the work log (pingdotgg#5559) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show remote environment for non-Git projects (pingdotgg#5555) * fix(server): stopping a Claude thread no longer shows an ede_diagnostic error (pingdotgg#5557) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show one toast when snoozing threads in bulk (pingdotgg#5560) * fix(server): let stopped threads settle immediately (pingdotgg#5553) * feat: paginate thread loading with user-anchored turn windows (pingdotgg#5493) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: prevent reconnect loops during server stalls (pingdotgg#5561) Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Theo Browne <me@t3.gg> * fix(server): settle stopped Claude subagents (pingdotgg#5568) * fix: scrolling up during a running thread no longer snaps back to the bottom (pingdotgg#5566) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): one disconnecting client no longer blocks every reconnect (pingdotgg#5572) Co-authored-by: Claude <noreply@anthropic.com> * test(server): catch client transfer regressions in CI (pingdotgg#5350) * fix(web): stop the "requests are slow" warning from firing on every provider update (pingdotgg#5570) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): keep agent panel rows stable (pingdotgg#5569) * docs: ship production T3 Connect public config in .env.example (pingdotgg#5573) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): plans stop hijacking the UI, fold into chat instead (pingdotgg#5558) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): remove Build/Plan toggle from the composer (pingdotgg#5551) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): per-device provider settings (pingdotgg#4479) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511) * fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): add modular theme library (pingdotgg#5226) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: maria-rcks <maria@kuuro.net> Co-authored-by: Julius Marminge <jmarminge@gmail.com> * fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(dev): faster cold-start for dev web serving (pingdotgg#5584) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(dev): Improve instructions for --share (pingdotgg#5586) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): improve keyboard avoiding (pingdotgg#5451) * fix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): stabilize chat timeline positioning (pingdotgg#5449) Co-authored-by: codex <codex@users.noreply.github.com> * feat(server): record runtime mode per turn and on mode changes (pingdotgg#5593) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): thread actions from the chat header title (pingdotgg#5592) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): avoid iOS terminal reset on clear (pingdotgg#5440) * fix(mobile): pad scroll views above Android nav bar (pingdotgg#5415) * fix(mobile): keep Android chat text from showing through the composer (pingdotgg#5582) * fix(mobile): repair Clerk auth navigation headers (pingdotgg#5140) Co-authored-by: codex <codex@users.noreply.github.com> * Bump mobile app version to 1.0.2 (pingdotgg#5588) * feat(web): click the pin icon to unpin a thread (pingdotgg#5578) * fix(web): show the correctly matching shortcut in new thread button's tooltip (pingdotgg#5594) * chore(release): prepare v0.0.32 * fix(mobile): reconnects no longer shift the thread list (pingdotgg#5372) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): drag pinned threads into your own order (pingdotgg#5581) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore(ci): vouch StiensWout (pingdotgg#5637) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270) * chore: vouch chrisdeeming (pingdotgg#5641) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * feat(web): make sidebar artwork theme-aware (pingdotgg#5636) * fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633) * fix(web): show Stop button while input is pending (pingdotgg#5554) * feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: sidebar v2 is now the default sidebar (pingdotgg#5672) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): delay transient reconnect warnings (pingdotgg#5670) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(web): inherit terminal size in simple typography (pingdotgg#5628) * fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(mobile): one sheet for model and thread settings (pingdotgg#5625) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(usage): usage page reading provider transcripts across environments (pingdotgg#5684) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): usage chart no longer makes Claude look like the bigger spender (pingdotgg#5697) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): persist diff view mode (pingdotgg#5731) * feat(web): show how many subagents are running at a glance (pingdotgg#5745) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): add missing cursor-pointer styling to dropdowns and interactive buttons (pingdotgg#5716) * fix(server): stop Claude resume handshakes from completing turns that never ran (pingdotgg#5710) Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore: vouch gfsaaser24 (pingdotgg#5761) * chore: vouch saphid (pingdotgg#5763) * fix(server): stop Codex threads with queued follow-ups (pingdotgg#5762) * fix(web): usage page loses the cost quality panel, gains a back button (pingdotgg#5756) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(server): agents can now open the images you paste into chat (pingdotgg#5757) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): pinned reorder no longer reshuffles while writes land (pingdotgg#5767) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): overhaul project settings into a real settings page (pingdotgg#5768) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): usage totals no longer jump while devices report in (pingdotgg#5772) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): settle no longer leaves monitors and dev servers running (pingdotgg#5774) 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 repository agent context symlink * fix hosted desktop build after upstream sync * fix credentialed PWA build probe * ci: use fork-supported runners * fix(ci): resolve post-sync deterministic failures * test(ci): align release assertions with upstream * test(web): budget slow image compression case * ci: size aggregate test budget for fork runners * fix(server): restore atomic git ref snapshots --------- Co-authored-by: jan <hi@4bs3nt.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: wukko <me@wukko.me> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: ohbentos <72638975+ohbentos@users.noreply.github.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: Simon Doba <simon.doba@hotmail.de> Co-authored-by: Simon Doba <simon.doba@orbit.de> Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com> Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com> Co-authored-by: Max Katz <me@maxkatz.me> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com> Co-authored-by: Elaine Lyons <elaine@lyons.app> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com> Co-authored-by: Mike Olson <mwolson@member.fsf.org> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: T3 Code Test <t3code-test@example.com> Co-authored-by: Illia Panasenko <hello@ipanasenko.me> Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com> Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: naMqe <naMqe07@gmail.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Fllip <39161142+FllipEis@users.noreply.github.com> Co-authored-by: Hwanseo Choi <electricvoxel@gmail.com> Co-authored-by: Hugo Blom <6117705+huxcrux@users.noreply.github.com> Co-authored-by: Carlos Rico-Ospina <carlosricojr@gmail.com> Co-authored-by: Gabe Fletcher <gabe@editmypodcast.agency> Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Mateleo <mateleo78@gmail.com> Co-authored-by: Julius Marminge <jmarminge@gmail.com> Co-authored-by: Jay Meistrich <github@jayz.us> Co-authored-by: Justyn Leung <justynleung2000@gmail.com> Co-authored-by: Tyler Saari <73684839+StoneCotton@users.noreply.github.com> Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com> Co-authored-by: Chris Deeming <chris@xenforo.com> Co-authored-by: Henry Zhang <113233555+caezium@users.noreply.github.com> Co-authored-by: Leonel Rivas <encriptandost@gmail.com> Co-authored-by: wizzoapp[bot] <254688279+wizzoapp[bot]@users.noreply.github.com>
Native subagent observability (#5219), wired per its spec's v2 merge plan: - getWorkflowScript RPC re-homed onto the v2 WS surface (contracts, rpc group, ws handler, auth scope, client atom). - AgentsPanel fed by the spec's mapper swap: projectedSubagentsToRuntime maps orchestration-v2 subagent entities into the panel model; deriveAgentPanelModel's v2Projection leg is now live and the v1 fold never runs. Agents surface wired into ChatView + RightPanelTabs. Other ports and reconciliations: - Shell reconnect-loop fix (#5561) ported into the v2 shell sync (same-session resubscribes resume from the in-memory cursor), with the cursor-resume regression test adapted to v2 fixtures. - Mobile end-follow latch (#5566) ported onto the v2 ThreadFeed. - Claude ede_diagnostic interrupt classification (#5557) ported into ClaudeAdapterV2 (aborted_tools/aborted_streaming => interrupted; CLI telemetry never becomes the failure banner). #5559 needs no v2 port (unknown system subtypes are already ignored). - Plan sidebar removed from the v2 ChatView/ChatComposer per main's plans-fold-into-chat rework (#5558); rightPanelStore stays at main's surface set. - SettingsPanels rebuilt as main's refactored version plus the branch's composer-context setting; sidebar snooze respects the time format (#4438 follow-through). - v1-only leftovers deleted: zombie v1 adapters/ingestion/tests the v2 rewrite removes, the v1-bound transfer-budget CI harness (#5350, needs a v2 rebuild), and main's v1 client pagination machinery (#5493 client side; the 037 keyset migration is kept — server-side v2 windowing is a follow-up). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Second upstream sync on this branch: pingdotgg/t3code main at 2c7267a ("stop the reaper from silently killing live background subagents", pingdotgg#5677) into the DevGame fork. 19 conflicted paths, resolved under the standing doctrine (upstream structure wins; fork features re-expressed inside it; the fork's deliberate deletions stand). Highlights taken from upstream: background-subagent reaper + settling fixes (pingdotgg#5677/pingdotgg#5568), sidebar v2 promoted to THE sidebar (pingdotgg#5672 -- SidebarV2.tsx renamed Sidebar.tsx, old sidebar now LegacySidebar.tsx behind Settings -> Legacy features), plans fold into chat (pingdotgg#5558, plan sidebar deleted), agents observability panel (pingdotgg#5219), MCP tool-result payload slimming (pingdotgg#5482), thread pagination (pingdotgg#5493), per-device provider settings (pingdotgg#4479), theme library + configurable fonts (pingdotgg#5103), thread pinning (pingdotgg#5312/pingdotgg#5581), reconnect-warning grace (pingdotgg#5670), mobile 1.0.2. Notable resolution rulings: - Right panel collapses to agents-only: upstream retired "plan", the fork had already moved preview/terminal/diff/files to the dock. ChatView's right-panel plumbing reduced accordingly; persistence shim now ALLOWLISTS the surviving kind, tolerates corrupt entries, and prunes records it empties (three tests updated to the pruned contract). - Migration id space: fork ids 36/37 (spaces) stay where deployed DevGame databases recorded them; upstream's three arrivals take 38/39/40 with files renamed to match. Crossover hazard from stock-T3 data dirs is documented at the manifest and tracked with the storage-isolation task. - useThreadSidebarComponent re-pointed at Sidebar/LegacySidebar via useLegacySidebarEnabled (forceV1 gone -- /settings* mounts SettingsSidebarNav, no thread sidebar). The pingdotgg#111 aria-label derivation ported into the renamed Sidebar.tsx. - Locale-fragile upstream snooze tests (pingdotgg#4438 asserts en-US "PM") made locale-agnostic; ThemeSettings copy re-branded to DevGame; upstream's text-secondary-label token applied in the fork's MessageImageGrid. Verification: typecheck exit 0 across every package (incl. server + desktop run separately); suites green -- server 2197, web 2400, scripts 227, contracts 228. Four-lens Opus merge-gate review over the resolution: 31 findings, 29 fixed in this commit, 2 filed as follow-up tasks (pingdotgg#133 right-panel chooser UX -- pre-existing; pingdotgg#134 migration ledger guard). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Native subagent observability (#5219), wired per its spec's v2 merge plan: - getWorkflowScript RPC re-homed onto the v2 WS surface (contracts, rpc group, ws handler, auth scope, client atom). - AgentsPanel fed by the spec's mapper swap: projectedSubagentsToRuntime maps orchestration-v2 subagent entities into the panel model; deriveAgentPanelModel's v2Projection leg is now live and the v1 fold never runs. Agents surface wired into ChatView + RightPanelTabs. Other ports and reconciliations: - Shell reconnect-loop fix (#5561) ported into the v2 shell sync (same-session resubscribes resume from the in-memory cursor), with the cursor-resume regression test adapted to v2 fixtures. - Mobile end-follow latch (#5566) ported onto the v2 ThreadFeed. - Claude ede_diagnostic interrupt classification (#5557) ported into ClaudeAdapterV2 (aborted_tools/aborted_streaming => interrupted; CLI telemetry never becomes the failure banner). #5559 needs no v2 port (unknown system subtypes are already ignored). - Plan sidebar removed from the v2 ChatView/ChatComposer per main's plans-fold-into-chat rework (#5558); rightPanelStore stays at main's surface set. - SettingsPanels rebuilt as main's refactored version plus the branch's composer-context setting; sidebar snooze respects the time format (#4438 follow-through). - v1-only leftovers deleted: zombie v1 adapters/ingestion/tests the v2 rewrite removes, the v1-bound transfer-budget CI harness (#5350, needs a v2 rebuild), and main's v1 client pagination machinery (#5493 client side; the 037 keyset migration is kept — server-side v2 windowing is a follow-up). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(web): settle button now works on hover, not just right-click (pingdotgg#4905) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(clients): disable add project while disconnected (pingdotgg#4834) * fix(composer): hide default Codex service tier (pingdotgg#4784) * docs: link iOS and Android app store downloads (pingdotgg#4902) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align remote server update action (pingdotgg#4731) * fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943) * perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show Codex fast mode as a bolt (pingdotgg#4947) * docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): support dragged images in the composer (pingdotgg#4953) * fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(mobile): reconnect environments immediately on resume (pingdotgg#4878) * feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): regenerate thread titles from sidebar (pingdotgg#4810) * fix(web): show server update progress through reconnect (pingdotgg#4903) * feat(search): find threads by conversation content (pingdotgg#4959) * fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): server updates no longer look like warnings (pingdotgg#4992) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * Check for mobile app updates on launch (pingdotgg#4958) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984) * fix(server): restore PR detection without HOME (pingdotgg#4985) * fix(web): fill fast mode icon (pingdotgg#5004) * fix: cache project favicons across web and mobile (pingdotgg#4767) * perf(ci): cut stale runs and redundant setup (pingdotgg#4802) * chore(mobile): bump app version to 1.0.1 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * style(web): make scroll-to-end pill translucent (pingdotgg#5036) * fix(ci): drop sparse-checkout from EAS workflows actions/checkout implements sparse-checkout with --filter=blob:none, so the runner repo is a partial clone missing the .repos/ blobs. eas-cli archives the project via `git clone --depth 1 file://<workspace>`, which upload-pack cannot serve from a partial clone and exits 128 (pingdotgg#4802 broke both EAS build workflows this way). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008) * feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): remove unnecessary photo library permission (pingdotgg#4929) * fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990) * fix(mobile): restore iOS Threads branding (pingdotgg#4862) * chore: add mobile issue template area (pingdotgg#4895) * fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(mobile): accept Android clipboard images in composer (pingdotgg#4836) * fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861) * fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057) * fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065) * fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066) * feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): render terminals with libghostty-vt (pingdotgg#4860) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(mobile): add thread snoozing (pingdotgg#5053) * feat(mobile): make settled threads collapsible (pingdotgg#5056) * follow-up normalization after pingdotgg#4700. (pingdotgg#4498) Co-authored-by: T3 Code Test <t3code-test@example.com> * feat(web): search threads from the sidebar (pingdotgg#4769) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): add settings sidebar search (pingdotgg#4682) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: threads with open PRs no longer auto-settle (pingdotgg#5151) * fix(server): bound thread catch-up replay and stop full-DB snapshot hydration (pingdotgg#5147) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): follow branch drift in dedicated worktrees so PRs link to their thread (pingdotgg#5159) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): make remote updates rollback-safe (pingdotgg#5181) * fix(web): stop settle controls overlapping the status label (pingdotgg#4574) * fix: normalize app icon glyph sizing (pingdotgg#5202) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug (pingdotgg#5076) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(server): stop npx service updates from silently leaving the old server running (pingdotgg#5217) Co-authored-by: Claude <noreply@anthropic.com> * feat: fold legacy models into separate menus (pingdotgg#5190) * fix(desktop): claim the t3code:// scheme default on Linux at startup (pingdotgg#5054) * fix(web): polish interface spacing (pingdotgg#5252) * fix(desktop): Niri/Hyprland - Linux secret storage backend (pingdotgg#2916) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): match loading screen to dark theme (pingdotgg#5303) * fix(web): blink the terminal cursor again (pingdotgg#5314) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(terminal): protect held Ctrl/Cmd+W close shortcut (pingdotgg#5322) * fix(server): strip replayable terminal queries from history (pingdotgg#5319) * fix(contracts): decode ServerProviders forward-compatibly (pingdotgg#5327) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> * fix(web): simplify chat code blocks (pingdotgg#5301) * fix(web): align multiline error alert controls (pingdotgg#5304) * Upgrade Effect to beta.103 (pingdotgg#5331) * fix(web): increase tooltip z-index to overlay popovers and menus (pingdotgg#5326) * fix(server): use a Cursor todo's title when its content is blank (pingdotgg#5073) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(ssh): isolate managed tunnel processes (pingdotgg#4347) * fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals (pingdotgg#5075) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode (pingdotgg#4586) * fix(web): stop the chat timeline reading through the provider status banner (pingdotgg#5353) * fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes (pingdotgg#5148) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): generate durable thread titles (pingdotgg#5357) * fix(web): better right panel (new diffs styling) (pingdotgg#5260) * fix(server): keep regenerated titles on topic (pingdotgg#5365) * refactor(server): make title prompts plaintext (pingdotgg#5368) * feat(web): configurable fonts and sizes under Settings → Appearance (pingdotgg#5103) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * feat(sidebar-v2): thread pinning for sidebar v2 (pingdotgg#5312) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): make pairing QR codes actually scannable, with endpoint choice (pingdotgg#5360) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop,web): improve in-app browser shortcuts and URL behavior (pingdotgg#4703) * fix(web): prevent legacy model picker layout shift (pingdotgg#5349) * fix(server): allow remote updates with database migrations (pingdotgg#5374) * fix(mcp): unblock Kimi models in OpenCode with preview tools (pingdotgg#5128) * fix(web): clear main branch lint warnings (pingdotgg#5384) * fix(mobile): preserve grouped project workspaces (pingdotgg#4642) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(mobile): prevent Android thread search crash (pingdotgg#5386) * fix(web): truncate long project switcher names (pingdotgg#5348) * fix(mobile): avoid double dividers between thread sections (pingdotgg#5391) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(web): keep the composer command menu anchored to the composer (pingdotgg#5336) * fix(web): restore terminal link hover styles (pingdotgg#5382) * fix(ci): isolate releases from shared API rate limits (pingdotgg#5394) * fix(web): keep model picker shortcuts in sync (pingdotgg#5400) * fix(web): keep terminal font settings reliable (pingdotgg#5397) * Enrich terminal font previews (pingdotgg#5428) * fix(web): preserve terminal font size when splitting (pingdotgg#5444) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * Prevent terminal loading flash (pingdotgg#5432) * fix: reconnect faster after remote server updates (pingdotgg#5404) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: native subagent & workflow observability (pingdotgg#5219) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): stop shipping full MCP tool results in thread payloads (pingdotgg#5482) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): closed plan sidebar stays closed when returning to a thread (pingdotgg#5484) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: respect time format for sidebar snooze (pingdotgg#4438) * fix(web): calm one-row server update status and banner The version-skew banner is no longer an amber warning: it reads "Server update available" with the raw versions (unreadable for nightlies) moved to a tooltip. The in-flight rail (Download/Install/ Resume) becomes a single status row, "Downloading…" then "Restarting…", since the wire installing stage is a sub-second launcher handoff and "resuming" meant nothing to most people. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): keep the managed tunnel across remote update restarts Measured on a live update: the server was back in ~9s but stayed unreachable for ~96s, because releasing the tunnel on shutdown forces the replacement tunnel's hostname route through 1-2 minutes of edge propagation. An update handoff always brings a server right back (new version or rollback), so the tunnel is never orphaned; skip the release when the launcher state file records a pending update. The next boot respawns the connector from the stored config against the same tunnel and is reachable as soon as it connects. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(server): use the launcher state writer in release tests Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): release the tunnel when an explicit stop interrupts an update A pending update in the launcher state is not proof a replacement server is coming: `t3 service uninstall` or `systemctl stop` during the pending window also tears the server down, permanently. The launcher now writes a stop marker before signalling its child on an explicit stop and clears it on the next start; the shutdown tunnel release keeps the tunnel only for pending updates without the marker. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): clean up interrupted update trials * fix(server): order explicit service shutdown * fix(web): make update version tooltips accessible * fix(server): separate trial cleanup from handoff retention * fix(server): drop superseded tool updates from snapshots A tool.updated row is the in-flight snapshot of a call; once the call completes, the tool.completed row carries the final state and both clients fold every matching update into it. Shipping the updates buys nothing: 47k such rows exist in one real database, and a single thread carries 3,291 of them. Filter them out of thread snapshots, mirroring the existing context-window dedup. Matching is per turn and only against a LATER completion, so a revert that discards the completing turn cannot leave a call unrepresented, and a later update under the same identity (the next call, still in flight) survives. Live events are untouched. Rows are matched on the same identity the clients collapse by: an explicit data.toolCallId when the adapter emits one, otherwise the itemType/title/detail triple. No tool lifecycle row in the real db carries a toolCallId, so the fallback does the work. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(server): pin interleaved-collapse divergence as intentional with test Bugbot flagged that clients collapse only adjacent lifecycle rows, so dropping a superseded update separated by an interleaved parallel call diverges from full-history rendering. Measured on a real database: 1.5% of dropped rows (553/36,581), all pure in-flight state whose final result the retained completion still shows, and zero dropped rows carry a client-merged payload field their completion lacks (verified across all 49,515 update rows). Documents the tradeoff and adds a test pinning it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(trading): a covered position is not deaf, and does not need a metronome A PnL line is a directional level in dollars, and a confirmed reduce-only stop is a level the exchange enforces. Coverage counted neither, so the observed mission — short, target armed, stop resting — was judged deaf and woken every three bars to conclude "hold". Coverage now reads pnl_above as the winning side and pnl_below/pnl_giveback as the losing side (direction from the position's sign), and a fully confirmed stop as losing-side coverage. A position covered on both sides gets the slow sanity backstop (10x the tight floor, clamped [15m, 2h]) — a thesis-drift check — instead of the tight floor, which stays for the genuinely deaf case it was built for. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(trading): a waiting plan's unarmed trigger levels come back on the wake A flat mission is allowed to wait, but waiting is a decision with content: "come back if price reaches 1899" is a trigger, and a trigger that lives only in prose wakes nothing. The runtime does not arm it — predicates come from MarketWatch, never from a condition's description — so it reports the gap instead. A flat, waiting wakeup now carries `unarmedEntryConditions`: the entry levels the plan named with no watch within 10 bps of them. The tool descriptions learned the hierarchy to match (prefer condition watches; arm a waiting plan's levels in the turn you publish it), and the toolkit's char budget was paid for out of existing wordiness. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(trading): a stop may be trailed, but only inside the envelope it was approved with `modify_stop` puts the stop anywhere on the losing side of the mark, and an unconfirmed replacement escalates to a forced close — so routine trailing was the one thing the primitive was least suited to. `trading_adjust_stop` is the bounded version: the same replaceProtection path, with the policy in front of it. The rules the server enforces, none negotiable by prompt: risk never grows past the entry's approved stop; a step is at most min(0.5xATR, 25% of the stop distance); the agent's own ATR is cross-checked against the server's; the stop stays outside max(2xhalf-spread, 0.35xATR) and no further than halfway from entry to target; a stop past entry never crosses back; one adjustment per three bars and eight per position. The policy is pure and pinned by its own tests. An accepted move goes out as an ordinary modify_stop intent, so the confirm-before-cancel sequence and its §17.5 escalation are the ones every stop move already takes, and lands as `trading.mission.stop-adjusted` with a durable row the chart's step-line can later be drawn from. The toolkit's description budget moves from 10,000 to 11,200: the twentieth tool pays for itself, since an agent that cannot read the eight refusal codes just retries the same refused move. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(trading): the wake that arrives one ATR before the exchange decides `trading_adjust_stop` gave the harness a bounded way to move the stop; nothing gave it the moment to use it. A protected position's next scheduled event was the stop itself, which is the exchange taking the decision rather than the agent making one. The proximity watch is that moment: a `price_cross` at `stop + 1.0xATR` for a long, mirrored for a short, `armedReason: "stop_proximity"`. It is armed from the two places a confirmed stop comes into existence -- `protectIncrease` at entry and `modifyStop` on every replacement -- so the level always follows the stop actually resting. Re-arming goes through `replacesWatchId`, so a mission never carries more than one and the old level dies in the same transaction the new one is written in. The reactor was already the only place that sees a confirmed stop, and it already holds the gateway the ATR is measured with; reading the strategy's primary timeframe off its stored JSON keeps its layer exactly as wide as it was, which is why `ensureNotDeaf` -- the other candidate, and the one with no market data at all -- is left alone. Arming is best-effort: it runs after the protection it describes is confirmed, and a position with a live stop and no proximity watch is protected, just less forewarned. It never fails the execution that armed it. A level already through the mark arms nothing and cancels any stale one, since a watch that was true before it was written is an immediate wake, not coverage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(web): the schedule a mission is already keeping, made visible Lands two threads of work in one commit because they were written interleaved in the same three files and cannot be honestly separated after the fact: - plan 23's web follow-through: chart condition and fill-marker geometry, position-read freshness (current/delayed/stale) with its banner, the price and review charts rebuilt on the shared geometry, and the thread panel's run rows. - plan 24 phase B (§3): the "Up next" strip — deriveUpNextItems turns the mission's own watches, protection, and in-flight executions into one ordered list of future events, rendered as UpNextPill rows above the composer. No new RPCs and no new server state; every item is derived from the read model the panel already holds. The server change is the projection carrying the fields the strip reads. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(web): a pill you can click, and the rule it was talking about The "Up next" strip names price levels the chart is already drawing, but the two surfaces had no link: finding "wake @ 1899" among four unlabelled rules was left to the eye. Clicking a pill now lights up its level. The join is findLevelAtPrice, in the geometry module where the levels live. It compares with a relative tolerance, because a PnL watch is divided back into a price on both paths and the two results are equal only up to float drift. It does not snap to a merely nearest level: the strip can name a price the chart's domain does not reach, and lighting the closest rule would point at a price nobody clicked. That case flashes nothing. A nonce keys the overlay so a second click on the same pill flashes again, and the highlight clears itself before the next mission poll — a rule that outlived the click would read as chart state rather than as an answer. Pills with no price on a chart stay plain spans. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(web): the whole reassessment queue on the axis, not just its next item The chart drew one future tick — the nearest scheduled reassessment, which is the same appointment the header already counts down. A mission that has republished a few times holds several at once, and the shape of that queue is the reading: three minutes apart and all armed by the staleness floor is a loop idling, one at the funding timestamp is a plan waiting. deriveChartTimeMarkers returns every armed reassessment, soonest first, capped at five with the last slot collapsing into a +N tick at the furthest moment. Only the nearest carries a caption — five captions in one gutter collide — and staleness-floor ticks are drawn muted and sparser than the ones the harness chose, so the backstop never looks like an intention. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(trading): the mission's history, joined once so no client has to The read model was entirely current state: the watches armed now, the position held now, the stop resting now. None of it can say the stop walked up behind a winner in four steps, or that the last five wakes were the staleness floor rearming itself — and those are the readings the chart's past axis and the thread's wake rows exist for. missionTimeline[] on OrchestrationTradingMission: newest-first, capped at 50, joined at read time from the three tables that already keep the facts — trading_harness_runs for wakes, trading_stop_adjustments (migration 050, landed with the adjust-stop tool) for stop steps, momentum_strategy_versions for publishes. No migration, and no history copied into the projection row, for the same reason the execution surfaces are joined rather than stored: the row must stay rebuildable from the domain tables alone. Each source is queried with its own limit before the merge, so a mission that woke two hundred times cannot crowd out its four stop steps. A run that never started is filed under when it was created — the question the axis answers is when the mission was woken, not when a provider got round to it — and a failed run says so in its label, because that is a turn the mission was owed and did not get. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(web): the mission's turns, as a rug along the bottom of its own chart The axis carried the future — a scheduled reassessment standing in the gutter — and nothing of the past. So a chart could show a mission that had woken eleven times in twenty minutes and look identical to one that had woken once, and the question the operator actually has, "has this loop been doing anything", had no answer on the surface built to answer it. `missionTimeline` from the projection becomes a rug of ticks along the bottom edge: wakes coloured by cause, publishes in foreground, stop moves and failed runs in loss-red. A rug rather than full-height rules on purpose — twenty verticals would fence the price line in behind the very thing they annotate, and the shape of the trade is meant to be the only saturated thing on screen. Capped at twenty, dropping the oldest: the projection sends newest-first, so a rug trimmed from the front would stop before the events that just happened. Anything older than the window's first candle is dropped rather than pinned to the left edge, the same rule the fill markers follow. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(web): clarify auto permission fallback (pingdotgg#5431) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(acp): keep unknown approvals actionable (pingdotgg#5430) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(mobile): stop thread messages reading through pending cards (pingdotgg#5450) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(web): align composer inline chips with prompt text (pingdotgg#5495) * fix(web): clear woke state on explicit thread actions (pingdotgg#5486) * fix(server): skip origin fetch when creating worktrees in repos without an origin remote (pingdotgg#5556) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): update tooltip no longer dismisses when scrolling release notes (pingdotgg#5547) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): stop showing commit/push/PR notices as errors in the work log (pingdotgg#5559) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show remote environment for non-Git projects (pingdotgg#5555) * fix(server): stopping a Claude thread no longer shows an ede_diagnostic error (pingdotgg#5557) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show one toast when snoozing threads in bulk (pingdotgg#5560) * fix(server): let stopped threads settle immediately (pingdotgg#5553) * feat: paginate thread loading with user-anchored turn windows (pingdotgg#5493) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: prevent reconnect loops during server stalls (pingdotgg#5561) Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Theo Browne <me@t3.gg> * fix(server): settle stopped Claude subagents (pingdotgg#5568) * fix: scrolling up during a running thread no longer snaps back to the bottom (pingdotgg#5566) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): one disconnecting client no longer blocks every reconnect (pingdotgg#5572) Co-authored-by: Claude <noreply@anthropic.com> * test(server): catch client transfer regressions in CI (pingdotgg#5350) * fix(web): stop the "requests are slow" warning from firing on every provider update (pingdotgg#5570) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): keep agent panel rows stable (pingdotgg#5569) * docs: ship production T3 Connect public config in .env.example (pingdotgg#5573) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): plans stop hijacking the UI, fold into chat instead (pingdotgg#5558) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): remove Build/Plan toggle from the composer (pingdotgg#5551) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): per-device provider settings (pingdotgg#4479) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511) * fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): add modular theme library (pingdotgg#5226) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: maria-rcks <maria@kuuro.net> Co-authored-by: Julius Marminge <jmarminge@gmail.com> * fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(dev): faster cold-start for dev web serving (pingdotgg#5584) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(dev): Improve instructions for --share (pingdotgg#5586) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): improve keyboard avoiding (pingdotgg#5451) * fix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): stabilize chat timeline positioning (pingdotgg#5449) Co-authored-by: codex <codex@users.noreply.github.com> * feat(server): record runtime mode per turn and on mode changes (pingdotgg#5593) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): thread actions from the chat header title (pingdotgg#5592) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): avoid iOS terminal reset on clear (pingdotgg#5440) * fix(mobile): pad scroll views above Android nav bar (pingdotgg#5415) * fix(mobile): keep Android chat text from showing through the composer (pingdotgg#5582) * fix(mobile): repair Clerk auth navigation headers (pingdotgg#5140) Co-authored-by: codex <codex@users.noreply.github.com> * Bump mobile app version to 1.0.2 (pingdotgg#5588) * feat(web): click the pin icon to unpin a thread (pingdotgg#5578) * fix(web): show the correctly matching shortcut in new thread button's tooltip (pingdotgg#5594) * chore(release): prepare v0.0.32 * fix(mobile): reconnects no longer shift the thread list (pingdotgg#5372) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): drag pinned threads into your own order (pingdotgg#5581) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore(ci): vouch StiensWout (pingdotgg#5637) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270) * chore: vouch chrisdeeming (pingdotgg#5641) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * feat(web): make sidebar artwork theme-aware (pingdotgg#5636) * fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633) * fix(web): show Stop button while input is pending (pingdotgg#5554) * feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: sidebar v2 is now the default sidebar (pingdotgg#5672) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): delay transient reconnect warnings (pingdotgg#5670) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(web): inherit terminal size in simple typography (pingdotgg#5628) * fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(mobile): one sheet for model and thread settings (pingdotgg#5625) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(usage): usage page reading provider transcripts across environments (pingdotgg#5684) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): usage chart no longer makes Claude look like the bigger spender (pingdotgg#5697) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): persist diff view mode (pingdotgg#5731) * feat(web): show how many subagents are running at a glance (pingdotgg#5745) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): add missing cursor-pointer styling to dropdowns and interactive buttons (pingdotgg#5716) * fix(server): stop Claude resume handshakes from completing turns that never ran (pingdotgg#5710) Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore: vouch gfsaaser24 (pingdotgg#5761) * chore: vouch saphid (pingdotgg#5763) * fix(server): stop Codex threads with queued follow-ups (pingdotgg#5762) * fix(web): usage page loses the cost quality panel, gains a back button (pingdotgg#5756) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(server): agents can now open the images you paste into chat (pingdotgg#5757) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): pinned reorder no longer reshuffles while writes land (pingdotgg#5767) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): overhaul project settings into a real settings page (pingdotgg#5768) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): usage totals no longer jump while devices report in (pingdotgg#5772) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): settle no longer leaves monitors and dev servers running (pingdotgg#5774) 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> * feat(trading): entry quotes, exits, and the receipts that make a run provable Adds the execution-harness pieces the trading run was missing across contracts, server, and web: contracts: decision, exit, policy, quote, recovery, replay, and setupEvidence modules in packages/trading-contracts, with tests. server: TradingQuoteService, TradingExitService, TradingRunTelemetry, TradingExecutionReceipts, TradingExecutionSequence, TradingReplayFixtures, RetryTransient, TradingSessionProfile; migrations 051-053 for run decisions, entry quotes, and execution sequences. web: TradingAssetPicker and a MissionLivePanel state refactor; drops the now-unused missionLockedProviderMessages path. * chore(deps): bump packageManager to pnpm 11.21.0, regenerate lockfile * docs(upstream): backfill PATCH_LEDGER for plans 21-25; ignore local working dirs * test(server): follow trading_execute's quote-id shape and use a namespaced fs import The coercion test still asserted the pre-quote trading_execute schema, which d1a245a replaced with {missionId, quoteId}; its numeric fields now live on trading_quote_entry, so the nested-number case moves there and execute keeps a pass-through case. Also satisfies namespace-node-imports in the profile test. Both were red before the v0.0.33 sync started, so the sync stays attributable. * docs(upstream): record the v0.0.33 baseline and every seam the sync touched The renumber policy is now exercised rather than proposed: upstream's six new migrations took fork ids 054-059, and the ledger says why the test bounds move with them. Also records the seams that only appear once upstream deletes a file the fork edited (SidebarV2), and the two Effect beta.103 API breaks. --------- Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Max Katz <me@maxkatz.me> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com> Co-authored-by: Elaine Lyons <elaine@lyons.app> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Simon Doba <simon.doba@hotmail.de> Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com> Co-authored-by: Mike Olson <mwolson@member.fsf.org> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: T3 Code Test <t3code-test@example.com> Co-authored-by: Illia Panasenko <hello@ipanasenko.me> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com> Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: naMqe <naMqe07@gmail.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Fllip <39161142+FllipEis@users.noreply.github.com> Co-authored-by: Hwanseo Choi <electricvoxel@gmail.com> Co-authored-by: Hugo Blom <6117705+huxcrux@users.noreply.github.com> Co-authored-by: Carlos Rico-Ospina <carlosricojr@gmail.com> Co-authored-by: Gabe Fletcher <gabe@editmypodcast.agency> Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Mateleo <mateleo78@gmail.com> Co-authored-by: Julius Marminge <jmarminge@gmail.com> Co-authored-by: Jay Meistrich <github@jayz.us> Co-authored-by: Justyn Leung <justynleung2000@gmail.com> Co-authored-by: Tyler Saari <73684839+StoneCotton@users.noreply.github.com> Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com> Co-authored-by: Chris Deeming <chris@xenforo.com> Co-authored-by: Henry Zhang <113233555+caezium@users.noreply.github.com> Co-authored-by: Leonel Rivas <encriptandost@gmail.com> Co-authored-by: Robert Soriano <sorianorobertc@gmail.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: Ellie Gummere <hello@unknownhost.name> Co-authored-by: Tristan Knight <admin@snappeh.com> Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> Co-authored-by: Carter Smith <51297686+carterwsmith@users.noreply.github.com> Co-authored-by: Mina Yacoub <56601613+myacoub91@users.noreply.github.com>
Native subagent observability (#5219), wired per its spec's v2 merge plan: - getWorkflowScript RPC re-homed onto the v2 WS surface (contracts, rpc group, ws handler, auth scope, client atom). - AgentsPanel fed by the spec's mapper swap: projectedSubagentsToRuntime maps orchestration-v2 subagent entities into the panel model; deriveAgentPanelModel's v2Projection leg is now live and the v1 fold never runs. Agents surface wired into ChatView + RightPanelTabs. Other ports and reconciliations: - Shell reconnect-loop fix (#5561) ported into the v2 shell sync (same-session resubscribes resume from the in-memory cursor), with the cursor-resume regression test adapted to v2 fixtures. - Mobile end-follow latch (#5566) ported onto the v2 ThreadFeed. - Claude ede_diagnostic interrupt classification (#5557) ported into ClaudeAdapterV2 (aborted_tools/aborted_streaming => interrupted; CLI telemetry never becomes the failure banner). #5559 needs no v2 port (unknown system subtypes are already ignored). - Plan sidebar removed from the v2 ChatView/ChatComposer per main's plans-fold-into-chat rework (#5558); rightPanelStore stays at main's surface set. - SettingsPanels rebuilt as main's refactored version plus the branch's composer-context setting; sidebar snooze respects the time format (#4438 follow-through). - v1-only leftovers deleted: zombie v1 adapters/ingestion/tests the v2 rewrite removes, the v1-bound transfer-budget CI harness (#5350, needs a v2 rebuild), and main's v1 client pagination machinery (#5493 client side; the 037 keyset migration is kept — server-side v2 windowing is a follow-up). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Native subagent observability (#5219), wired per its spec's v2 merge plan: - getWorkflowScript RPC re-homed onto the v2 WS surface (contracts, rpc group, ws handler, auth scope, client atom). - AgentsPanel fed by the spec's mapper swap: projectedSubagentsToRuntime maps orchestration-v2 subagent entities into the panel model; deriveAgentPanelModel's v2Projection leg is now live and the v1 fold never runs. Agents surface wired into ChatView + RightPanelTabs. Other ports and reconciliations: - Shell reconnect-loop fix (#5561) ported into the v2 shell sync (same-session resubscribes resume from the in-memory cursor), with the cursor-resume regression test adapted to v2 fixtures. - Mobile end-follow latch (#5566) ported onto the v2 ThreadFeed. - Claude ede_diagnostic interrupt classification (#5557) ported into ClaudeAdapterV2 (aborted_tools/aborted_streaming => interrupted; CLI telemetry never becomes the failure banner). #5559 needs no v2 port (unknown system subtypes are already ignored). - Plan sidebar removed from the v2 ChatView/ChatComposer per main's plans-fold-into-chat rework (#5558); rightPanelStore stays at main's surface set. - SettingsPanels rebuilt as main's refactored version plus the branch's composer-context setting; sidebar snooze respects the time format (#4438 follow-through). - v1-only leftovers deleted: zombie v1 adapters/ingestion/tests the v2 rewrite removes, the v1-bound transfer-budget CI harness (#5350, needs a v2 rebuild), and main's v1 client pagination machinery (#5493 client side; the 037 keyset migration is kept — server-side v2 windowing is a follow-up). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(web): add collapse-all toggle to diff panel (pingdotgg#4475) * feat(web): show fast mode as a bolt instead of a "Normal" label (pingdotgg#4488) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(dev): keep worktree dev state isolated on T3 Code dev servers (pingdotgg#4555) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(dev): Make t3 code dev instances shareable over Tailscale (pingdotgg#4556) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(dev): skip browser-blocked ports (pingdotgg#4608) * fix: cut websocket throughput in half by pruning activity payloads (pingdotgg#4622) * perf(mobile): defer work-log detail serialization (pingdotgg#4607) * test: account for lazy thread feed details (pingdotgg#4628) * feat(relay): limit managed tunnels per user (pingdotgg#4530) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add managed tunnel limits migration (pingdotgg#4635) * Add background preview capture and picture-in-picture support (pingdotgg#4397) Co-authored-by: codex <codex@users.noreply.github.com> * feat(web): prompt stash — cmd+S saves the composer to a per-provider queue (pingdotgg#4453) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Upgrade Effect and Alchemy betas (pingdotgg#4643) Prepare Relay production infrastructure for the PlanetScale PS_20 HA topology, upgrade Effect and Alchemy to compatible betas, reconcile migration state, and preserve patched MCP session termination behavior.\n\nCo-authored-by: codex <codex@users.noreply.github.com> * feat: allow new thread creation through project breadcrumbs (pingdotgg#4638) * fix(web): scope PR state to the thread branch (pingdotgg#4460) Co-authored-by: codex <codex@users.noreply.github.com> * Drop redundant Relay user indexes (pingdotgg#4648) Co-authored-by: codex <codex@users.noreply.github.com> * feat(connect): release the Cloudflare tunnel when the environment shuts down (pingdotgg#4531) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Relay Worker RuntimeContext wiring (pingdotgg#4653) Co-authored-by: codex <codex@users.noreply.github.com> * Fix live sidebar resize limits and defer Alchemy runtime context (pingdotgg#4655) * fix(web): constrain branch toolbar context (pingdotgg#4657) * Keep MCP credentials alive across provider turns (pingdotgg#4659) * fix: close actions dropdown when editing (pingdotgg#4660) * fix(preview): stabilize PiP viewport identity (pingdotgg#4661) Co-authored-by: codex <codex@users.noreply.github.com> * Add glass styling for thread tooltips and simplify preview tab handling (pingdotgg#4665) * Use tarball archiving for hosted web deploys (pingdotgg#4669) * fix(server): bound editor discovery during config loading (pingdotgg#4291) * Prevent draft thread detail polling before shell registration (pingdotgg#4670) Co-authored-by: codex <codex@users.noreply.github.com> * feat: add configurable source control writing settings (pingdotgg#4204) Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * feat(diff-panel): show total line additions and deletions (pingdotgg#4674) * Clear provider update actions while updating (pingdotgg#4676) * Fix sidebar highlighting for draft threads (pingdotgg#4679) * Use glass surfaces for web toasts (pingdotgg#4681) * Show origin ref in branch trigger label (pingdotgg#4680) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): match react version to react-native 0.85.3 vendored renderer (19.2.3) (pingdotgg#4675) * chore(release): prepare v0.0.29 * Add OTA update checks to mobile settings (pingdotgg#4686) * fix(mobile): threads load snapped to bottom on iOS (pingdotgg#4689) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: default sidebar v2 on for nightly and dev builds (pingdotgg#4491) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): 33 web UI fixes (pingdotgg#4700) * Make mobile Thread List v2 the default (pingdotgg#4717) * Fix mobile showcase workflow without Clerk (pingdotgg#4718) * Fix relay credential lookup for unlinked environments (pingdotgg#4692) Co-authored-by: codex <codex@users.noreply.github.com> * Settle merged PR threads immediately (pingdotgg#4704) * feat(web): add maria's sidebar header artwork toggle (pingdotgg#4652) * feat(web): add appearance settings category (pingdotgg#4715) * fix(desktop): allow updater-controlled relaunch (pingdotgg#4721) * fix(web): prevent diff panel scroll jumping (pingdotgg#4724) * Link inline code file paths in chat markdown (pingdotgg#4726) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Android showcase capture and rebuild v2 queued rows (pingdotgg#4730) Co-authored-by: Claude <noreply@anthropic.com> * perf(server): negotiate permessage-deflate on the websocket (pingdotgg#4705) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: overhaul agent guidance (pingdotgg#4782) * Prevent sidebar row labels from truncating (pingdotgg#4789) * perf(server): gzip large thread snapshots (pingdotgg#4788) * fix(web): stashed prompts now survive switching providers (pingdotgg#4787) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Git ref refresh resource storms (pingdotgg#4727) Co-authored-by: codex <codex@users.noreply.github.com> * perf(server): trim stale context-window rows and drop dead replay RPC (pingdotgg#4791) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): defer command palette filesystem navigation (pingdotgg#2109) Co-authored-by: codex <codex@users.noreply.github.com> * fix(release): skip scripts during Vercel installs (pingdotgg#4796) * refactor(client): share filesystem browse navigation (pingdotgg#4797) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): defer filesystem navigation (pingdotgg#4799) Co-authored-by: codex <codex@users.noreply.github.com> * refactor(server): use native HTTP compression streams (pingdotgg#4798) Co-authored-by: codex <codex@users.noreply.github.com> * Remove Connect waitlist and add GA announcement tooling (pingdotgg#4691) * Fix Connect sign-in settings label (pingdotgg#4806) * chore(release): prepare v0.0.30 * fix(desktop): restore T3 Connect sign-in (pingdotgg#4809) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Simplify files panel header (pingdotgg#4828) * build(desktop): reduce installed app size by ~300MB (pingdotgg#4824) * Update model version from claude-opus-4-8 to claude-opus-5 (pingdotgg#4832) * Preserve the thread shell while detail loads (pingdotgg#4830) * Reduce idle work and disk churn with native resource diagnostics (pingdotgg#2679) Co-authored-by: codex <codex@users.noreply.github.com> * fix(server): detect repositories after initialization (pingdotgg#4848) * perf(server): merge separate staged/unstaged numstat calls into single diff HEAD --numstat (pingdotgg#4843) * fix(git): disable external diff for review diff previews (pingdotgg#4854) * Fix editable file focus and live syntax highlighting (pingdotgg#3979) * fix(web): remember the rendered-markdown choice across threads (pingdotgg#4853) Co-authored-by: Simon Doba <simon.doba@orbit.de> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * chore(release): prepare v0.0.31 * fix(mobile): reduce thread feed scroll jank (pingdotgg#4874) * fix(web): restore sidebar v2 thread actions and terminal icon (pingdotgg#4712) * fix(web): settle button now works on hover, not just right-click (pingdotgg#4905) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(clients): disable add project while disconnected (pingdotgg#4834) * fix(composer): hide default Codex service tier (pingdotgg#4784) * docs: link iOS and Android app store downloads (pingdotgg#4902) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align remote server update action (pingdotgg#4731) * fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943) * perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show Codex fast mode as a bolt (pingdotgg#4947) * docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): support dragged images in the composer (pingdotgg#4953) * fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(mobile): reconnect environments immediately on resume (pingdotgg#4878) * feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): regenerate thread titles from sidebar (pingdotgg#4810) * fix(web): show server update progress through reconnect (pingdotgg#4903) * feat(search): find threads by conversation content (pingdotgg#4959) * fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): server updates no longer look like warnings (pingdotgg#4992) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * Check for mobile app updates on launch (pingdotgg#4958) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984) * fix(server): restore PR detection without HOME (pingdotgg#4985) * fix(web): fill fast mode icon (pingdotgg#5004) * fix: cache project favicons across web and mobile (pingdotgg#4767) * perf(ci): cut stale runs and redundant setup (pingdotgg#4802) * chore(mobile): bump app version to 1.0.1 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * style(web): make scroll-to-end pill translucent (pingdotgg#5036) * fix(ci): drop sparse-checkout from EAS workflows actions/checkout implements sparse-checkout with --filter=blob:none, so the runner repo is a partial clone missing the .repos/ blobs. eas-cli archives the project via `git clone --depth 1 file://<workspace>`, which upload-pack cannot serve from a partial clone and exits 128 (pingdotgg#4802 broke both EAS build workflows this way). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008) * feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): remove unnecessary photo library permission (pingdotgg#4929) * fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990) * fix(mobile): restore iOS Threads branding (pingdotgg#4862) * chore: add mobile issue template area (pingdotgg#4895) * fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(mobile): accept Android clipboard images in composer (pingdotgg#4836) * fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861) * fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057) * fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065) * fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066) * feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): render terminals with libghostty-vt (pingdotgg#4860) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(mobile): add thread snoozing (pingdotgg#5053) * feat(mobile): make settled threads collapsible (pingdotgg#5056) * follow-up normalization after pingdotgg#4700. (pingdotgg#4498) Co-authored-by: T3 Code Test <t3code-test@example.com> * feat(web): search threads from the sidebar (pingdotgg#4769) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): add settings sidebar search (pingdotgg#4682) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: threads with open PRs no longer auto-settle (pingdotgg#5151) * fix(server): bound thread catch-up replay and stop full-DB snapshot hydration (pingdotgg#5147) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): follow branch drift in dedicated worktrees so PRs link to their thread (pingdotgg#5159) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): make remote updates rollback-safe (pingdotgg#5181) * fix(web): stop settle controls overlapping the status label (pingdotgg#4574) * fix: normalize app icon glyph sizing (pingdotgg#5202) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug (pingdotgg#5076) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(server): stop npx service updates from silently leaving the old server running (pingdotgg#5217) Co-authored-by: Claude <noreply@anthropic.com> * feat: fold legacy models into separate menus (pingdotgg#5190) * fix(desktop): claim the t3code:// scheme default on Linux at startup (pingdotgg#5054) * fix(web): polish interface spacing (pingdotgg#5252) * fix(desktop): Niri/Hyprland - Linux secret storage backend (pingdotgg#2916) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): match loading screen to dark theme (pingdotgg#5303) * fix(web): blink the terminal cursor again (pingdotgg#5314) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(terminal): protect held Ctrl/Cmd+W close shortcut (pingdotgg#5322) * fix(server): strip replayable terminal queries from history (pingdotgg#5319) * fix(contracts): decode ServerProviders forward-compatibly (pingdotgg#5327) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> * fix(web): simplify chat code blocks (pingdotgg#5301) * fix(web): align multiline error alert controls (pingdotgg#5304) * Upgrade Effect to beta.103 (pingdotgg#5331) * fix(web): increase tooltip z-index to overlay popovers and menus (pingdotgg#5326) * fix(server): use a Cursor todo's title when its content is blank (pingdotgg#5073) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(ssh): isolate managed tunnel processes (pingdotgg#4347) * fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals (pingdotgg#5075) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode (pingdotgg#4586) * fix(web): stop the chat timeline reading through the provider status banner (pingdotgg#5353) * fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes (pingdotgg#5148) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): generate durable thread titles (pingdotgg#5357) * fix(web): better right panel (new diffs styling) (pingdotgg#5260) * fix(server): keep regenerated titles on topic (pingdotgg#5365) * refactor(server): make title prompts plaintext (pingdotgg#5368) * feat(web): configurable fonts and sizes under Settings → Appearance (pingdotgg#5103) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * feat(sidebar-v2): thread pinning for sidebar v2 (pingdotgg#5312) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): make pairing QR codes actually scannable, with endpoint choice (pingdotgg#5360) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop,web): improve in-app browser shortcuts and URL behavior (pingdotgg#4703) * fix(web): prevent legacy model picker layout shift (pingdotgg#5349) * fix(server): allow remote updates with database migrations (pingdotgg#5374) * fix(mcp): unblock Kimi models in OpenCode with preview tools (pingdotgg#5128) * fix(web): clear main branch lint warnings (pingdotgg#5384) * fix(mobile): preserve grouped project workspaces (pingdotgg#4642) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(mobile): prevent Android thread search crash (pingdotgg#5386) * fix(web): truncate long project switcher names (pingdotgg#5348) * fix(mobile): avoid double dividers between thread sections (pingdotgg#5391) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(web): keep the composer command menu anchored to the composer (pingdotgg#5336) * fix(web): restore terminal link hover styles (pingdotgg#5382) * fix(ci): isolate releases from shared API rate limits (pingdotgg#5394) * fix(web): keep model picker shortcuts in sync (pingdotgg#5400) * fix(web): keep terminal font settings reliable (pingdotgg#5397) * Enrich terminal font previews (pingdotgg#5428) * fix(web): preserve terminal font size when splitting (pingdotgg#5444) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * Prevent terminal loading flash (pingdotgg#5432) * fix: reconnect faster after remote server updates (pingdotgg#5404) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: native subagent & workflow observability (pingdotgg#5219) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): stop shipping full MCP tool results in thread payloads (pingdotgg#5482) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): closed plan sidebar stays closed when returning to a thread (pingdotgg#5484) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: respect time format for sidebar snooze (pingdotgg#4438) * fix(web): calm one-row server update status and banner The version-skew banner is no longer an amber warning: it reads "Server update available" with the raw versions (unreadable for nightlies) moved to a tooltip. The in-flight rail (Download/Install/ Resume) becomes a single status row, "Downloading…" then "Restarting…", since the wire installing stage is a sub-second launcher handoff and "resuming" meant nothing to most people. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): keep the managed tunnel across remote update restarts Measured on a live update: the server was back in ~9s but stayed unreachable for ~96s, because releasing the tunnel on shutdown forces the replacement tunnel's hostname route through 1-2 minutes of edge propagation. An update handoff always brings a server right back (new version or rollback), so the tunnel is never orphaned; skip the release when the launcher state file records a pending update. The next boot respawns the connector from the stored config against the same tunnel and is reachable as soon as it connects. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(server): use the launcher state writer in release tests Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): release the tunnel when an explicit stop interrupts an update A pending update in the launcher state is not proof a replacement server is coming: `t3 service uninstall` or `systemctl stop` during the pending window also tears the server down, permanently. The launcher now writes a stop marker before signalling its child on an explicit stop and clears it on the next start; the shutdown tunnel release keeps the tunnel only for pending updates without the marker. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): clean up interrupted update trials * fix(server): order explicit service shutdown * fix(web): make update version tooltips accessible * fix(server): separate trial cleanup from handoff retention * fix(server): drop superseded tool updates from snapshots A tool.updated row is the in-flight snapshot of a call; once the call completes, the tool.completed row carries the final state and both clients fold every matching update into it. Shipping the updates buys nothing: 47k such rows exist in one real database, and a single thread carries 3,291 of them. Filter them out of thread snapshots, mirroring the existing context-window dedup. Matching is per turn and only against a LATER completion, so a revert that discards the completing turn cannot leave a call unrepresented, and a later update under the same identity (the next call, still in flight) survives. Live events are untouched. Rows are matched on the same identity the clients collapse by: an explicit data.toolCallId when the adapter emits one, otherwise the itemType/title/detail triple. No tool lifecycle row in the real db carries a toolCallId, so the fallback does the work. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(server): pin interleaved-collapse divergence as intentional with test Bugbot flagged that clients collapse only adjacent lifecycle rows, so dropping a superseded update separated by an interleaved parallel call diverges from full-history rendering. Measured on a real database: 1.5% of dropped rows (553/36,581), all pure in-flight state whose final result the retained completion still shows, and zero dropped rows carry a client-merged payload field their completion lacks (verified across all 49,515 update rows). Documents the tradeoff and adds a test pinning it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(web): clarify auto permission fallback (pingdotgg#5431) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(acp): keep unknown approvals actionable (pingdotgg#5430) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(mobile): stop thread messages reading through pending cards (pingdotgg#5450) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(web): align composer inline chips with prompt text (pingdotgg#5495) * fix(web): clear woke state on explicit thread actions (pingdotgg#5486) * fix(server): skip origin fetch when creating worktrees in repos without an origin remote (pingdotgg#5556) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): update tooltip no longer dismisses when scrolling release notes (pingdotgg#5547) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): stop showing commit/push/PR notices as errors in the work log (pingdotgg#5559) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show remote environment for non-Git projects (pingdotgg#5555) * fix(server): stopping a Claude thread no longer shows an ede_diagnostic error (pingdotgg#5557) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show one toast when snoozing threads in bulk (pingdotgg#5560) * fix(server): let stopped threads settle immediately (pingdotgg#5553) * feat: paginate thread loading with user-anchored turn windows (pingdotgg#5493) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: prevent reconnect loops during server stalls (pingdotgg#5561) Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Theo Browne <me@t3.gg> * fix(server): settle stopped Claude subagents (pingdotgg#5568) * fix: scrolling up during a running thread no longer snaps back to the bottom (pingdotgg#5566) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): one disconnecting client no longer blocks every reconnect (pingdotgg#5572) Co-authored-by: Claude <noreply@anthropic.com> * test(server): catch client transfer regressions in CI (pingdotgg#5350) * fix(web): stop the "requests are slow" warning from firing on every provider update (pingdotgg#5570) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): keep agent panel rows stable (pingdotgg#5569) * docs: ship production T3 Connect public config in .env.example (pingdotgg#5573) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): plans stop hijacking the UI, fold into chat instead (pingdotgg#5558) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): remove Build/Plan toggle from the composer (pingdotgg#5551) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): per-device provider settings (pingdotgg#4479) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511) * fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): add modular theme library (pingdotgg#5226) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: maria-rcks <maria@kuuro.net> Co-authored-by: Julius Marminge <jmarminge@gmail.com> * fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(dev): faster cold-start for dev web serving (pingdotgg#5584) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(dev): Improve instructions for --share (pingdotgg#5586) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): improve keyboard avoiding (pingdotgg#5451) * fix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): stabilize chat timeline positioning (pingdotgg#5449) Co-authored-by: codex <codex@users.noreply.github.com> * feat(server): record runtime mode per turn and on mode changes (pingdotgg#5593) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): thread actions from the chat header title (pingdotgg#5592) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): avoid iOS terminal reset on clear (pingdotgg#5440) * fix(mobile): pad scroll views above Android nav bar (pingdotgg#5415) * fix(mobile): keep Android chat text from showing through the composer (pingdotgg#5582) * fix(mobile): repair Clerk auth navigation headers (pingdotgg#5140) Co-authored-by: codex <codex@users.noreply.github.com> * Bump mobile app version to 1.0.2 (pingdotgg#5588) * feat(web): click the pin icon to unpin a thread (pingdotgg#5578) * fix(web): show the correctly matching shortcut in new thread button's tooltip (pingdotgg#5594) * chore: advance public upstream baseline * chore: advance upstream baseline to v0.0.32 * fix: align react native patch lock hash --------- Co-authored-by: jan <hi@4bs3nt.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Alex Southwell <saphid@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Max Katz <me@maxkatz.me> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: Krzysztof Moch <krzysmoch.programs@gmail.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: wukko <me@wukko.me> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: ohbentos <72638975+ohbentos@users.noreply.github.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: Simon Doba <simon.doba@hotmail.de> Co-authored-by: Simon Doba <simon.doba@orbit.de> Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com> Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com> Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com> Co-authored-by: Elaine Lyons <elaine@lyons.app> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com> Co-authored-by: Mike Olson <mwolson@member.fsf.org> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: T3 Code Test <t3code-test@example.com> Co-authored-by: Illia Panasenko <hello@ipanasenko.me> Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com> Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: naMqe <naMqe07@gmail.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Fllip <39161142+FllipEis@users.noreply.github.com> Co-authored-by: Hwanseo Choi <electricvoxel@gmail.com> Co-authored-by: Hugo Blom <6117705+huxcrux@users.noreply.github.com> Co-authored-by: Carlos Rico-Ospina <carlosricojr@gmail.com> Co-authored-by: Gabe Fletcher <gabe@editmypodcast.agency> Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Mateleo <mateleo78@gmail.com> Co-authored-by: Julius Marminge <jmarminge@gmail.com> Co-authored-by: Jay Meistrich <github@jayz.us> Co-authored-by: Justyn Leung <justynleung2000@gmail.com> Co-authored-by: Tyler Saari <73684839+StoneCotton@users.noreply.github.com> Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com> Co-authored-by: atryan <atryan@users.noreply.github.com>
* feat(web): add collapse-all toggle to diff panel (pingdotgg#4475) * feat(web): show fast mode as a bolt instead of a "Normal" label (pingdotgg#4488) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(dev): keep worktree dev state isolated on T3 Code dev servers (pingdotgg#4555) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(dev): Make t3 code dev instances shareable over Tailscale (pingdotgg#4556) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(dev): skip browser-blocked ports (pingdotgg#4608) * fix: cut websocket throughput in half by pruning activity payloads (pingdotgg#4622) * perf(mobile): defer work-log detail serialization (pingdotgg#4607) * test: account for lazy thread feed details (pingdotgg#4628) * feat(relay): limit managed tunnels per user (pingdotgg#4530) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add managed tunnel limits migration (pingdotgg#4635) * Add background preview capture and picture-in-picture support (pingdotgg#4397) Co-authored-by: codex <codex@users.noreply.github.com> * feat(web): prompt stash — cmd+S saves the composer to a per-provider queue (pingdotgg#4453) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Upgrade Effect and Alchemy betas (pingdotgg#4643) Prepare Relay production infrastructure for the PlanetScale PS_20 HA topology, upgrade Effect and Alchemy to compatible betas, reconcile migration state, and preserve patched MCP session termination behavior.\n\nCo-authored-by: codex <codex@users.noreply.github.com> * feat: allow new thread creation through project breadcrumbs (pingdotgg#4638) * fix(web): scope PR state to the thread branch (pingdotgg#4460) Co-authored-by: codex <codex@users.noreply.github.com> * Drop redundant Relay user indexes (pingdotgg#4648) Co-authored-by: codex <codex@users.noreply.github.com> * feat(connect): release the Cloudflare tunnel when the environment shuts down (pingdotgg#4531) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Relay Worker RuntimeContext wiring (pingdotgg#4653) Co-authored-by: codex <codex@users.noreply.github.com> * Fix live sidebar resize limits and defer Alchemy runtime context (pingdotgg#4655) * fix(web): constrain branch toolbar context (pingdotgg#4657) * Keep MCP credentials alive across provider turns (pingdotgg#4659) * fix: close actions dropdown when editing (pingdotgg#4660) * fix(preview): stabilize PiP viewport identity (pingdotgg#4661) Co-authored-by: codex <codex@users.noreply.github.com> * Add glass styling for thread tooltips and simplify preview tab handling (pingdotgg#4665) * Use tarball archiving for hosted web deploys (pingdotgg#4669) * fix(server): bound editor discovery during config loading (pingdotgg#4291) * Prevent draft thread detail polling before shell registration (pingdotgg#4670) Co-authored-by: codex <codex@users.noreply.github.com> * feat: add configurable source control writing settings (pingdotgg#4204) Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * feat(diff-panel): show total line additions and deletions (pingdotgg#4674) * Clear provider update actions while updating (pingdotgg#4676) * Fix sidebar highlighting for draft threads (pingdotgg#4679) * Use glass surfaces for web toasts (pingdotgg#4681) * Show origin ref in branch trigger label (pingdotgg#4680) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): match react version to react-native 0.85.3 vendored renderer (19.2.3) (pingdotgg#4675) * chore(release): prepare v0.0.29 * Add OTA update checks to mobile settings (pingdotgg#4686) * fix(mobile): threads load snapped to bottom on iOS (pingdotgg#4689) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: default sidebar v2 on for nightly and dev builds (pingdotgg#4491) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): 33 web UI fixes (pingdotgg#4700) * Make mobile Thread List v2 the default (pingdotgg#4717) * Fix mobile showcase workflow without Clerk (pingdotgg#4718) * Fix relay credential lookup for unlinked environments (pingdotgg#4692) Co-authored-by: codex <codex@users.noreply.github.com> * Settle merged PR threads immediately (pingdotgg#4704) * feat(web): add maria's sidebar header artwork toggle (pingdotgg#4652) * feat(web): add appearance settings category (pingdotgg#4715) * fix(desktop): allow updater-controlled relaunch (pingdotgg#4721) * fix(web): prevent diff panel scroll jumping (pingdotgg#4724) * Link inline code file paths in chat markdown (pingdotgg#4726) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Android showcase capture and rebuild v2 queued rows (pingdotgg#4730) Co-authored-by: Claude <noreply@anthropic.com> * perf(server): negotiate permessage-deflate on the websocket (pingdotgg#4705) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: overhaul agent guidance (pingdotgg#4782) * Prevent sidebar row labels from truncating (pingdotgg#4789) * perf(server): gzip large thread snapshots (pingdotgg#4788) * fix(web): stashed prompts now survive switching providers (pingdotgg#4787) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Fix Git ref refresh resource storms (pingdotgg#4727) Co-authored-by: codex <codex@users.noreply.github.com> * perf(server): trim stale context-window rows and drop dead replay RPC (pingdotgg#4791) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): defer command palette filesystem navigation (pingdotgg#2109) Co-authored-by: codex <codex@users.noreply.github.com> * fix(release): skip scripts during Vercel installs (pingdotgg#4796) * refactor(client): share filesystem browse navigation (pingdotgg#4797) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): defer filesystem navigation (pingdotgg#4799) Co-authored-by: codex <codex@users.noreply.github.com> * refactor(server): use native HTTP compression streams (pingdotgg#4798) Co-authored-by: codex <codex@users.noreply.github.com> * Remove Connect waitlist and add GA announcement tooling (pingdotgg#4691) * Fix Connect sign-in settings label (pingdotgg#4806) * chore(release): prepare v0.0.30 * fix(desktop): restore T3 Connect sign-in (pingdotgg#4809) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Simplify files panel header (pingdotgg#4828) * build(desktop): reduce installed app size by ~300MB (pingdotgg#4824) * Update model version from claude-opus-4-8 to claude-opus-5 (pingdotgg#4832) * Preserve the thread shell while detail loads (pingdotgg#4830) * Reduce idle work and disk churn with native resource diagnostics (pingdotgg#2679) Co-authored-by: codex <codex@users.noreply.github.com> * fix(server): detect repositories after initialization (pingdotgg#4848) * perf(server): merge separate staged/unstaged numstat calls into single diff HEAD --numstat (pingdotgg#4843) * fix(git): disable external diff for review diff previews (pingdotgg#4854) * Fix editable file focus and live syntax highlighting (pingdotgg#3979) * fix(web): remember the rendered-markdown choice across threads (pingdotgg#4853) Co-authored-by: Simon Doba <simon.doba@orbit.de> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * chore(release): prepare v0.0.31 * fix(mobile): reduce thread feed scroll jank (pingdotgg#4874) * fix(web): restore sidebar v2 thread actions and terminal icon (pingdotgg#4712) * fix(web): settle button now works on hover, not just right-click (pingdotgg#4905) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(clients): disable add project while disconnected (pingdotgg#4834) * fix(composer): hide default Codex service tier (pingdotgg#4784) * docs: link iOS and Android app store downloads (pingdotgg#4902) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align remote server update action (pingdotgg#4731) * fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943) * perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show Codex fast mode as a bolt (pingdotgg#4947) * docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): support dragged images in the composer (pingdotgg#4953) * fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(mobile): reconnect environments immediately on resume (pingdotgg#4878) * feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): regenerate thread titles from sidebar (pingdotgg#4810) * fix(web): show server update progress through reconnect (pingdotgg#4903) * feat(search): find threads by conversation content (pingdotgg#4959) * fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): server updates no longer look like warnings (pingdotgg#4992) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * Check for mobile app updates on launch (pingdotgg#4958) Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984) * fix(server): restore PR detection without HOME (pingdotgg#4985) * fix(web): fill fast mode icon (pingdotgg#5004) * fix: cache project favicons across web and mobile (pingdotgg#4767) * perf(ci): cut stale runs and redundant setup (pingdotgg#4802) * chore(mobile): bump app version to 1.0.1 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * style(web): make scroll-to-end pill translucent (pingdotgg#5036) * fix(ci): drop sparse-checkout from EAS workflows actions/checkout implements sparse-checkout with --filter=blob:none, so the runner repo is a partial clone missing the .repos/ blobs. eas-cli archives the project via `git clone --depth 1 file://<workspace>`, which upload-pack cannot serve from a partial clone and exits 128 (pingdotgg#4802 broke both EAS build workflows this way). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008) * feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): remove unnecessary photo library permission (pingdotgg#4929) * fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990) * fix(mobile): restore iOS Threads branding (pingdotgg#4862) * chore: add mobile issue template area (pingdotgg#4895) * fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(mobile): accept Android clipboard images in composer (pingdotgg#4836) * fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861) * fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057) * fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065) * fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066) * feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): render terminals with libghostty-vt (pingdotgg#4860) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(mobile): add thread snoozing (pingdotgg#5053) * feat(mobile): make settled threads collapsible (pingdotgg#5056) * follow-up normalization after pingdotgg#4700. (pingdotgg#4498) Co-authored-by: T3 Code Test <t3code-test@example.com> * feat(web): search threads from the sidebar (pingdotgg#4769) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): add settings sidebar search (pingdotgg#4682) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: threads with open PRs no longer auto-settle (pingdotgg#5151) * fix(server): bound thread catch-up replay and stop full-DB snapshot hydration (pingdotgg#5147) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): follow branch drift in dedicated worktrees so PRs link to their thread (pingdotgg#5159) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): make remote updates rollback-safe (pingdotgg#5181) * fix(web): stop settle controls overlapping the status label (pingdotgg#4574) * fix: normalize app icon glyph sizing (pingdotgg#5202) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug (pingdotgg#5076) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(server): stop npx service updates from silently leaving the old server running (pingdotgg#5217) Co-authored-by: Claude <noreply@anthropic.com> * feat: fold legacy models into separate menus (pingdotgg#5190) * fix(desktop): claim the t3code:// scheme default on Linux at startup (pingdotgg#5054) * fix(web): polish interface spacing (pingdotgg#5252) * fix(desktop): Niri/Hyprland - Linux secret storage backend (pingdotgg#2916) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): match loading screen to dark theme (pingdotgg#5303) * fix(web): blink the terminal cursor again (pingdotgg#5314) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(terminal): protect held Ctrl/Cmd+W close shortcut (pingdotgg#5322) * fix(server): strip replayable terminal queries from history (pingdotgg#5319) * fix(contracts): decode ServerProviders forward-compatibly (pingdotgg#5327) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> * fix(web): simplify chat code blocks (pingdotgg#5301) * fix(web): align multiline error alert controls (pingdotgg#5304) * Upgrade Effect to beta.103 (pingdotgg#5331) * fix(web): increase tooltip z-index to overlay popovers and menus (pingdotgg#5326) * fix(server): use a Cursor todo's title when its content is blank (pingdotgg#5073) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(ssh): isolate managed tunnel processes (pingdotgg#4347) * fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals (pingdotgg#5075) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode (pingdotgg#4586) * fix(web): stop the chat timeline reading through the provider status banner (pingdotgg#5353) * fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes (pingdotgg#5148) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): generate durable thread titles (pingdotgg#5357) * fix(web): better right panel (new diffs styling) (pingdotgg#5260) * fix(server): keep regenerated titles on topic (pingdotgg#5365) * refactor(server): make title prompts plaintext (pingdotgg#5368) * feat(web): configurable fonts and sizes under Settings → Appearance (pingdotgg#5103) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * feat(sidebar-v2): thread pinning for sidebar v2 (pingdotgg#5312) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): make pairing QR codes actually scannable, with endpoint choice (pingdotgg#5360) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop,web): improve in-app browser shortcuts and URL behavior (pingdotgg#4703) * fix(web): prevent legacy model picker layout shift (pingdotgg#5349) * fix(server): allow remote updates with database migrations (pingdotgg#5374) * fix(mcp): unblock Kimi models in OpenCode with preview tools (pingdotgg#5128) * fix(web): clear main branch lint warnings (pingdotgg#5384) * fix(mobile): preserve grouped project workspaces (pingdotgg#4642) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(mobile): prevent Android thread search crash (pingdotgg#5386) * fix(web): truncate long project switcher names (pingdotgg#5348) * fix(mobile): avoid double dividers between thread sections (pingdotgg#5391) Co-authored-by: T3 Code Test <t3code-test@example.com> * fix(web): keep the composer command menu anchored to the composer (pingdotgg#5336) * fix(web): restore terminal link hover styles (pingdotgg#5382) * fix(ci): isolate releases from shared API rate limits (pingdotgg#5394) * fix(web): keep model picker shortcuts in sync (pingdotgg#5400) * fix(web): keep terminal font settings reliable (pingdotgg#5397) * Enrich terminal font previews (pingdotgg#5428) * fix(web): preserve terminal font size when splitting (pingdotgg#5444) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * Prevent terminal loading flash (pingdotgg#5432) * fix: reconnect faster after remote server updates (pingdotgg#5404) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: native subagent & workflow observability (pingdotgg#5219) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(server): stop shipping full MCP tool results in thread payloads (pingdotgg#5482) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): closed plan sidebar stays closed when returning to a thread (pingdotgg#5484) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: respect time format for sidebar snooze (pingdotgg#4438) * fix(web): calm one-row server update status and banner The version-skew banner is no longer an amber warning: it reads "Server update available" with the raw versions (unreadable for nightlies) moved to a tooltip. The in-flight rail (Download/Install/ Resume) becomes a single status row, "Downloading…" then "Restarting…", since the wire installing stage is a sub-second launcher handoff and "resuming" meant nothing to most people. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): keep the managed tunnel across remote update restarts Measured on a live update: the server was back in ~9s but stayed unreachable for ~96s, because releasing the tunnel on shutdown forces the replacement tunnel's hostname route through 1-2 minutes of edge propagation. An update handoff always brings a server right back (new version or rollback), so the tunnel is never orphaned; skip the release when the launcher state file records a pending update. The next boot respawns the connector from the stored config against the same tunnel and is reachable as soon as it connects. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(server): use the launcher state writer in release tests Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): release the tunnel when an explicit stop interrupts an update A pending update in the launcher state is not proof a replacement server is coming: `t3 service uninstall` or `systemctl stop` during the pending window also tears the server down, permanently. The launcher now writes a stop marker before signalling its child on an explicit stop and clears it on the next start; the shutdown tunnel release keeps the tunnel only for pending updates without the marker. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(server): clean up interrupted update trials * fix(server): order explicit service shutdown * fix(web): make update version tooltips accessible * fix(server): separate trial cleanup from handoff retention * fix(server): drop superseded tool updates from snapshots A tool.updated row is the in-flight snapshot of a call; once the call completes, the tool.completed row carries the final state and both clients fold every matching update into it. Shipping the updates buys nothing: 47k such rows exist in one real database, and a single thread carries 3,291 of them. Filter them out of thread snapshots, mirroring the existing context-window dedup. Matching is per turn and only against a LATER completion, so a revert that discards the completing turn cannot leave a call unrepresented, and a later update under the same identity (the next call, still in flight) survives. Live events are untouched. Rows are matched on the same identity the clients collapse by: an explicit data.toolCallId when the adapter emits one, otherwise the itemType/title/detail triple. No tool lifecycle row in the real db carries a toolCallId, so the fallback does the work. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(server): pin interleaved-collapse divergence as intentional with test Bugbot flagged that clients collapse only adjacent lifecycle rows, so dropping a superseded update separated by an interleaved parallel call diverges from full-history rendering. Measured on a real database: 1.5% of dropped rows (553/36,581), all pure in-flight state whose final result the retained completion still shows, and zero dropped rows carry a client-merged payload field their completion lacks (verified across all 49,515 update rows). Documents the tradeoff and adds a test pinning it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(web): clarify auto permission fallback (pingdotgg#5431) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(acp): keep unknown approvals actionable (pingdotgg#5430) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> * fix(mobile): stop thread messages reading through pending cards (pingdotgg#5450) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(web): align composer inline chips with prompt text (pingdotgg#5495) * fix(web): clear woke state on explicit thread actions (pingdotgg#5486) * fix(server): skip origin fetch when creating worktrees in repos without an origin remote (pingdotgg#5556) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): update tooltip no longer dismisses when scrolling release notes (pingdotgg#5547) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): stop showing commit/push/PR notices as errors in the work log (pingdotgg#5559) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show remote environment for non-Git projects (pingdotgg#5555) * fix(server): stopping a Claude thread no longer shows an ede_diagnostic error (pingdotgg#5557) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show one toast when snoozing threads in bulk (pingdotgg#5560) * fix(server): let stopped threads settle immediately (pingdotgg#5553) * feat: paginate thread loading with user-anchored turn windows (pingdotgg#5493) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: prevent reconnect loops during server stalls (pingdotgg#5561) Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Theo Browne <me@t3.gg> * fix(server): settle stopped Claude subagents (pingdotgg#5568) * fix: scrolling up during a running thread no longer snaps back to the bottom (pingdotgg#5566) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): one disconnecting client no longer blocks every reconnect (pingdotgg#5572) Co-authored-by: Claude <noreply@anthropic.com> * test(server): catch client transfer regressions in CI (pingdotgg#5350) * fix(web): stop the "requests are slow" warning from firing on every provider update (pingdotgg#5570) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(web): keep agent panel rows stable (pingdotgg#5569) * docs: ship production T3 Connect public config in .env.example (pingdotgg#5573) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): plans stop hijacking the UI, fold into chat instead (pingdotgg#5558) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): remove Build/Plan toggle from the composer (pingdotgg#5551) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): per-device provider settings (pingdotgg#4479) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511) * fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): add modular theme library (pingdotgg#5226) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: maria-rcks <maria@kuuro.net> Co-authored-by: Julius Marminge <jmarminge@gmail.com> * fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * perf(dev): faster cold-start for dev web serving (pingdotgg#5584) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(dev): Improve instructions for --share (pingdotgg#5586) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): improve keyboard avoiding (pingdotgg#5451) * fix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): stabilize chat timeline positioning (pingdotgg#5449) Co-authored-by: codex <codex@users.noreply.github.com> * feat(server): record runtime mode per turn and on mode changes (pingdotgg#5593) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): thread actions from the chat header title (pingdotgg#5592) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): avoid iOS terminal reset on clear (pingdotgg#5440) * fix(mobile): pad scroll views above Android nav bar (pingdotgg#5415) * fix(mobile): keep Android chat text from showing through the composer (pingdotgg#5582) * fix(mobile): repair Clerk auth navigation headers (pingdotgg#5140) Co-authored-by: codex <codex@users.noreply.github.com> * Bump mobile app version to 1.0.2 (pingdotgg#5588) * feat(web): click the pin icon to unpin a thread (pingdotgg#5578) * fix(web): show the correctly matching shortcut in new thread button's tooltip (pingdotgg#5594) * chore: advance public upstream baseline * chore: advance upstream baseline to v0.0.32 * fix: align react native patch lock hash --------- Co-authored-by: jan <hi@4bs3nt.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Alex Southwell <saphid@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Max Katz <me@maxkatz.me> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: Krzysztof Moch <krzysmoch.programs@gmail.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: wukko <me@wukko.me> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: ohbentos <72638975+ohbentos@users.noreply.github.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: Simon Doba <simon.doba@hotmail.de> Co-authored-by: Simon Doba <simon.doba@orbit.de> Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com> Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com> Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com> Co-authored-by: Elaine Lyons <elaine@lyons.app> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com> Co-authored-by: Mike Olson <mwolson@member.fsf.org> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: T3 Code Test <t3code-test@example.com> Co-authored-by: Illia Panasenko <hello@ipanasenko.me> Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com> Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: naMqe <naMqe07@gmail.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Fllip <39161142+FllipEis@users.noreply.github.com> Co-authored-by: Hwanseo Choi <electricvoxel@gmail.com> Co-authored-by: Hugo Blom <6117705+huxcrux@users.noreply.github.com> Co-authored-by: Carlos Rico-Ospina <carlosricojr@gmail.com> Co-authored-by: Gabe Fletcher <gabe@editmypodcast.agency> Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local> Co-authored-by: Mateleo <mateleo78@gmail.com> Co-authored-by: Julius Marminge <jmarminge@gmail.com> Co-authored-by: Jay Meistrich <github@jayz.us> Co-authored-by: Justyn Leung <justynleung2000@gmail.com> Co-authored-by: Tyler Saari <73684839+StoneCotton@users.noreply.github.com> Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com> Co-authored-by: atryan <atryan@users.noreply.github.com>
Problem
When a thread spawns subagents, runs a workflow, or drives Codex collab agents, the UI showed nothing useful: subagent tool calls and narration interleaved anonymously into the parent chat, progress ticks spammed the work log, background shells masqueraded as agents, the sidebar showed no status once the turn settled, and Stop only killed the parent turn while the fleet kept burning tokens.
Spec (final, decisions locked): https://n0hbggyouhn1.postplan.dev
Solution
Surface agents using only native provider emissions on the current orchestrator — no dependency on orchestrator v2 (#2829), zero migrations, zero new tables. Widened
task.*activity payloads ride the existing event-sourced activity path; a client-side fold inclient-runtimederives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).Server
TaskAgentLinkageon all task payloads (role, model, workflow name/phases, run handles, output file, owningagentId), newtask.updatedevent, typed usage, tool attribution (agentId/parentToolUseId)task_updated, resolvesparent_tool_use_idon tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensiveworkflow_progressparse, Workflow run handlesthread/started/subAgentActivity(root-thread guard from live probe), intercepts child notifications, synthesizes the sametask.*lifecycle (idle = resumable, cumulative usage, real names from agentPath)Query.stopTask) and interrupts every live Codex child turn before the parent turnThreadBackgroundLivenessService(in-memory, no persistence) exposesbackgroundLiveness: working | monitoringon the thread shell — fleets read Working, watch loops read Monitoringorchestration.getWorkflowScriptRPC with TOCTOU-safe containment (open-then-verify inode, realpath under~/.claude/projects, .js-only, size cap)Web
{} scriptopens a read-only script viewtimelineBypassrows fold into the CTA, background shells stay ordinary work-log rowsMobile: same quiet-timeline fold;
task.completedkept as terminal signal.Verification
Remaining gaps
<pre>(no Shiki)forwardSubagentText/agentProgressSummariesoff🤖 Generated with Claude Code (Claude Fable 5)
Note
Add native subagent and workflow observability with an Agents panel, background liveness banner, and spawn CTA rows in the chat timeline
ThreadBackgroundLivenessservice; sidebar rows show 'Working' or 'Monitoring' pills accordingly.task.updatedandtool.progressevent emission, stable per-task activity IDs, agent linkage fields (agentKind, agentId, toolUseId, runHandles), workflow member coalescing, and interrupt-all-live-tasks behavior on turn stop.getWorkflowScriptWebSocket RPC backed by a TOCTOU-safe reader that serves.jsfiles under~/.claude/projectsup to 256 KiB with structured error reasons.RIGHT_PANEL_STORAGE_VERSIONbumps from 7 to 8, invalidating persisted right panel state for existing users;task.progressactivity IDs change from event-scoped to stable per-task IDs, which may affect clients that stored or compared those IDs.Macroscope summarized f7673f3.
Dispositions (review round, explicit)
task.completed, Codex terminaltask.updated, nested-agent terminals) but no Agents surface yet. Live fleets are less visible on mobile until they settle. The read-only mobile Agents sheet is the tracked fast-follow.getWorkflowScripttakesthreadIdbut does not yet verify the path against that thread's recordedrunHandles(that registry is Orchestrator v2's read model; this PR is zero-migration by design). Access is bounded to the local paired user's own~/.claude/projects(realpath re-containment,.js-only, TOCTOU-safe open, size cap). Thread-scoped verification is a small follow-up once v2's projection lands.Note
High Risk
Touches provider adapters, runtime ingestion, interrupt/stop paths, and Codex child-notification routing—security-sensitive file read RPC and behavior changes that can hide or mis-route live agent signals if classification drifts.
Overview
Adds end-to-end subagent and workflow observability on the existing activity stream: ingestion stamps
agentKindand linkage ontask.*/ tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claudetask_updatedplus CodexcollabAgent/*into sharedtask.updated/ bypassed terminal updates.Server behavior changes:
ThreadBackgroundLiveness(in-memory) drivesbackgroundLiveness: working | monitoringon thread shells; runtime ingestion records task lifecycle and clears onsession.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex childturn/interruptbefore the parent. Claude drops subagent narration from the parent transcript, attributes tools viaparent_tool_use_id, parsesworkflow_progresswith member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scopedgetWorkflowScriptRPC reads.jsunder~/.claude/projectswith realpath containment and TOCTOU-safe open.Mobile mirrors the web quiet timeline: hide agent-internal background work but keep nested agent terminals and Codex terminal bypass
task.updatedrows; task rows collapse bytaskId.Reviewed by Cursor Bugbot for commit f7673f3. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by CodeRabbit
New Features
Bug Fixes