feat: native subagent & workflow observability - #5219

Merged
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability
Aug 6, 2026
Merged

feat: native subagent & workflow observability#5219
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

image

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 in client-runtime derives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).

Server

  • Contracts: additive TaskAgentLinkage on all task payloads (role, model, workflow name/phases, run handles, output file, owning agentId), new task.updated event, typed usage, tool attribution (agentId/parentToolUseId)
  • ClaudeAdapter: carries previously-dropped fields, handles task_updated, resolves parent_tool_use_id on tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensive workflow_progress parse, Workflow run handles
  • Codex: registers multi-agent-v2 children from thread/started/subAgentActivity (root-thread guard from live probe), intercepts child notifications, synthesizes the same task.* lifecycle (idle = resumable, cumulative usage, real names from agentPath)
  • Stop-everything: interrupt stops every live Claude task (Query.stopTask) and interrupts every live Codex child turn before the parent turn
  • Sidebar liveness: ThreadBackgroundLivenessService (in-memory, no persistence) exposes backgroundLiveness: working | monitoring on the thread shell — fleets read Working, watch loops read Monitoring
  • orchestration.getWorkflowScript RPC with TOCTOU-safe containment (open-then-verify inode, realpath under ~/.claude/projects, .js-only, size cap)

Web

  • Agents right-panel surface (the only roster): live workflows as bordered sections with a phase rail (per-phase segments with member status dots) and collapsible phase sections (live open, done collapsed); flat agent rows (no unfold); settled runs collapse to one line under "Earlier"; {} script opens a read-only script view
  • Spawn CTA row in chat: one anchored row per workflow run / direct-spawn batch, exempt from turn folds and overflow, membership pinned at first row (parallel-batch fix), coordinator status authoritative for workflows
  • Quiet timeline: agent-attributed tool rows re-homed to the panel, timelineBypass rows fold into the CTA, background shells stay ordinary work-log rows
  • All in-flight states present as Working (monitoring-pill rule); idle presents as settled

Mobile: same quiet-timeline fold; task.completed kept as terminal signal.

Verification

  • client-runtime: 30 fold tests (identity/activations, usage merges, bounds, cascade, nested agents); web: 1772 incl. quiet-timeline fixtures built from real persisted threads; server: adapter/ingestion/liveness/script-containment suites incl. a symlink-escape test and a stop-everything test
  • Live-tested over multiple rounds: Claude direct spawns + workflows (incl. 10-parallel), Codex collab fleets (10 agents), rerun workflows, monitoring threads — each round's findings fixed against exported wire/DB data

Remaining gaps

  • Codex fixtures should be generated from the captured wire logs (three schema-vs-wire divergences were found live)
  • Settled Codex rows show "assistant message" filler instead of a result summary
  • Script viewer is plain <pre> (no Shiki)
  • Mobile has only the timeline fold, no Agents sheet yet
  • Deferred by design: approval deep-links, transcript drill-in, forwardSubagentText/agentProgressSummaries off

🤖 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

  • Adds a new Agents right panel surface (AgentsPanel.tsx) showing live status, elapsed timers, and activity text for each subagent or workflow member.
  • Introduces a background liveness banner in the chat view with a pulsing dot and Stop button when background work is detected via the new ThreadBackgroundLiveness service; sidebar rows show 'Working' or 'Monitoring' pills accordingly.
  • Adds spawn CTA rows to the chat timeline that collapse multiple subagent/workflow lifecycle entries into a single row with status, token count, and an affordance to open the Agents panel.
  • Enriches the Claude and Codex adapters with task.updated and tool.progress event 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.
  • Adds a getWorkflowScript WebSocket RPC backed by a TOCTOU-safe reader that serves .js files under ~/.claude/projects up to 256 KiB with structured error reasons.
  • Risk: RIGHT_PANEL_STORAGE_VERSION bumps from 7 to 8, invalidating persisted right panel state for existing users; task.progress activity 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)

  • Spec divergence — accepted. The linked spec predates seven rounds of live testing. The rich inline workflow card, live strip, and expanded activity rows were built, tested live, and deliberately replaced by the single spawn CTA + Agents panel ("too much at once" — live-test decision). The spec link stays for design history; this description is the source of truth for what ships.
  • Mobile — accepted tradeoff for this PR. Mobile gets the quiet timeline and preserved terminal signals (Claude task.completed, Codex terminal task.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.
  • Script RPC scope — accepted with containment.getWorkflowScript takes threadId but does not yet verify the path against that thread's recorded runHandles (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.
  • Event-rate bound. Workflow member fan-out is coalesced by a material-transition filter (emit only when a rendered field changes), and progress activities upsert under stable thread-scoped ids — worst case per coordinator tick is now proportional to changed members, not fleet size.

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 agentKind and linkage on task.* / tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claude task_updated plus Codex collabAgent/* into shared task.updated / bypassed terminal updates.

Server behavior changes:ThreadBackgroundLiveness (in-memory) drives backgroundLiveness: working | monitoring on thread shells; runtime ingestion records task lifecycle and clears on session.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex child turn/interrupt before the parent. Claude drops subagent narration from the parent transcript, attributes tools via parent_tool_use_id, parses workflow_progress with member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scoped getWorkflowScript RPC reads .js under ~/.claude/projects with 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.updated rows; task rows collapse by taskId.

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

    • Added an Agents panel showing live and completed subagent workflows, phases, status, usage, and activity.
    • Added workflow script inspection with loading, truncation, and error states.
    • Added Working and Monitoring thread statuses with live background-task counts and a Stop action.
    • Added support for multi-agent collaboration, including nested tasks, progress, retries, and interruptions.
  • Bug Fixes

    • Reduced duplicate and internal activity in the work log while preserving meaningful task progress.
    • Improved task status, ownership, and usage reporting across providers.

…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>
@coderabbitai

coderabbitaiBot commented Aug 2, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 39.08% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title clearly summarizes the primary change: native subagent and workflow observability.
Description check✅ PassedThe description explains the problem, solution, UI changes, verification, tradeoffs, and remaining gaps, although it does not use every template heading.

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.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 2, 2026
Comment threadapps/web/src/components/AgentsPanel.tsx
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/components/chat/WorkflowRunCard.tsx Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/server/src/provider/Layers/CodexAdapter.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadapps/server/src/provider/Layers/CodexSessionRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
@macroscopeapp

macroscopeappBot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
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>
Comment threadapps/web/src/session-logic.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
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>
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
t3dotggand others added 3 commits August 2, 2026 02:04
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>

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Comment threadapps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts Outdated
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>
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
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>
Comment threadapps/web/src/session-logic.ts
t3dotggand others added 4 commits August 2, 2026 02:53
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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
radroid added a commit to radroid/t3code that referenced this pull request Aug 19, 2026
A fresh two-axis review plus an adversarial re-verification of every [V]
claim found three that did not survive contact with the tree, one of them
a design hole an implementer would have built.
- The [60, 3600] clamp belongs to ScheduleWakeup alone. session_crons also
carries CronCreate entries, which take an arbitrary 5-field expression
with no hour bound, so "the exposure is bounded without a second rule"
was wrong: a recorded `0 9 * * *` stands T3 down for up to 24h. Deference
is now capped at the loop's own deadline, since past it there is nothing
left to defer to. Added by review, and open beside Q1.
- wakeGraceMs ~90s was the wrong half of the jitter model. 90s is the
one-shot *early* jitter; the late jitter is up to 10% of period, max
15 min. Grace is now derived from the recorded entry, so a healthy
jittered wake no longer fires wake_lost.
- D2's evidence is retracted, its conclusion kept. Four closers exist and
handleResultMessage's is unconditional, and pingdotgg#5219 retired the
subagent -> synthetic-turn path nine days before this was written.
Re-anchored on the session reaper, which refuses to reap a thread with
an activeTurnId.
Also: settingsSearch.ts is ~+13, not ~+4 (each search item is a 5-6 line
object literal), so phases 1-4 cost ~16 lines rather than ~7 — the row
counts are unchanged. The 08-18 sync moved the merge-base to cebac35,
and the headline 53 files / +2590/-1042 only holds against it.
One assumption got promoted: the Stop hook does deliver session_crons,
spread unconditionally into both Stop and SubagentStop, [] when empty.
That was PLAN's top-listed falsifier. It also turned up an undocumented
1000-char truncation on the prompt field, now covered by a test case.
Guard #15, the run digest, and loop_status's narrowing are now declared
as divergences rather than decided in silence. build-report.mjs documents
the full build-then-fmt pipeline, which is what actually reproduces the
committed report.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: native subagent & workflow observability - #5219

Merged
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability
Aug 6, 2026
Merged

feat: native subagent & workflow observability#5219
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

image

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 in client-runtime derives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).

Server

  • Contracts: additive TaskAgentLinkage on all task payloads (role, model, workflow name/phases, run handles, output file, owning agentId), new task.updated event, typed usage, tool attribution (agentId/parentToolUseId)
  • ClaudeAdapter: carries previously-dropped fields, handles task_updated, resolves parent_tool_use_id on tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensive workflow_progress parse, Workflow run handles
  • Codex: registers multi-agent-v2 children from thread/started/subAgentActivity (root-thread guard from live probe), intercepts child notifications, synthesizes the same task.* lifecycle (idle = resumable, cumulative usage, real names from agentPath)
  • Stop-everything: interrupt stops every live Claude task (Query.stopTask) and interrupts every live Codex child turn before the parent turn
  • Sidebar liveness: ThreadBackgroundLivenessService (in-memory, no persistence) exposes backgroundLiveness: working | monitoring on the thread shell — fleets read Working, watch loops read Monitoring
  • orchestration.getWorkflowScript RPC with TOCTOU-safe containment (open-then-verify inode, realpath under ~/.claude/projects, .js-only, size cap)

Web

  • Agents right-panel surface (the only roster): live workflows as bordered sections with a phase rail (per-phase segments with member status dots) and collapsible phase sections (live open, done collapsed); flat agent rows (no unfold); settled runs collapse to one line under "Earlier"; {} script opens a read-only script view
  • Spawn CTA row in chat: one anchored row per workflow run / direct-spawn batch, exempt from turn folds and overflow, membership pinned at first row (parallel-batch fix), coordinator status authoritative for workflows
  • Quiet timeline: agent-attributed tool rows re-homed to the panel, timelineBypass rows fold into the CTA, background shells stay ordinary work-log rows
  • All in-flight states present as Working (monitoring-pill rule); idle presents as settled

Mobile: same quiet-timeline fold; task.completed kept as terminal signal.

Verification

  • client-runtime: 30 fold tests (identity/activations, usage merges, bounds, cascade, nested agents); web: 1772 incl. quiet-timeline fixtures built from real persisted threads; server: adapter/ingestion/liveness/script-containment suites incl. a symlink-escape test and a stop-everything test
  • Live-tested over multiple rounds: Claude direct spawns + workflows (incl. 10-parallel), Codex collab fleets (10 agents), rerun workflows, monitoring threads — each round's findings fixed against exported wire/DB data

Remaining gaps

  • Codex fixtures should be generated from the captured wire logs (three schema-vs-wire divergences were found live)
  • Settled Codex rows show "assistant message" filler instead of a result summary
  • Script viewer is plain <pre> (no Shiki)
  • Mobile has only the timeline fold, no Agents sheet yet
  • Deferred by design: approval deep-links, transcript drill-in, forwardSubagentText/agentProgressSummaries off

🤖 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

  • Adds a new Agents right panel surface (AgentsPanel.tsx) showing live status, elapsed timers, and activity text for each subagent or workflow member.
  • Introduces a background liveness banner in the chat view with a pulsing dot and Stop button when background work is detected via the new ThreadBackgroundLiveness service; sidebar rows show 'Working' or 'Monitoring' pills accordingly.
  • Adds spawn CTA rows to the chat timeline that collapse multiple subagent/workflow lifecycle entries into a single row with status, token count, and an affordance to open the Agents panel.
  • Enriches the Claude and Codex adapters with task.updated and tool.progress event 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.
  • Adds a getWorkflowScript WebSocket RPC backed by a TOCTOU-safe reader that serves .js files under ~/.claude/projects up to 256 KiB with structured error reasons.
  • Risk: RIGHT_PANEL_STORAGE_VERSION bumps from 7 to 8, invalidating persisted right panel state for existing users; task.progress activity 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)

  • Spec divergence — accepted. The linked spec predates seven rounds of live testing. The rich inline workflow card, live strip, and expanded activity rows were built, tested live, and deliberately replaced by the single spawn CTA + Agents panel ("too much at once" — live-test decision). The spec link stays for design history; this description is the source of truth for what ships.
  • Mobile — accepted tradeoff for this PR. Mobile gets the quiet timeline and preserved terminal signals (Claude task.completed, Codex terminal task.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.
  • Script RPC scope — accepted with containment.getWorkflowScript takes threadId but does not yet verify the path against that thread's recorded runHandles (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.
  • Event-rate bound. Workflow member fan-out is coalesced by a material-transition filter (emit only when a rendered field changes), and progress activities upsert under stable thread-scoped ids — worst case per coordinator tick is now proportional to changed members, not fleet size.

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 agentKind and linkage on task.* / tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claude task_updated plus Codex collabAgent/* into shared task.updated / bypassed terminal updates.

Server behavior changes:ThreadBackgroundLiveness (in-memory) drives backgroundLiveness: working | monitoring on thread shells; runtime ingestion records task lifecycle and clears on session.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex child turn/interrupt before the parent. Claude drops subagent narration from the parent transcript, attributes tools via parent_tool_use_id, parses workflow_progress with member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scoped getWorkflowScript RPC reads .js under ~/.claude/projects with 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.updated rows; task rows collapse by taskId.

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

    • Added an Agents panel showing live and completed subagent workflows, phases, status, usage, and activity.
    • Added workflow script inspection with loading, truncation, and error states.
    • Added Working and Monitoring thread statuses with live background-task counts and a Stop action.
    • Added support for multi-agent collaboration, including nested tasks, progress, retries, and interruptions.
  • Bug Fixes

    • Reduced duplicate and internal activity in the work log while preserving meaningful task progress.
    • Improved task status, ownership, and usage reporting across providers.

…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>
@coderabbitai

coderabbitaiBot commented Aug 2, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 39.08% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title clearly summarizes the primary change: native subagent and workflow observability.
Description check✅ PassedThe description explains the problem, solution, UI changes, verification, tradeoffs, and remaining gaps, although it does not use every template heading.

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.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 2, 2026
Comment threadapps/web/src/components/AgentsPanel.tsx
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/components/chat/WorkflowRunCard.tsx Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/server/src/provider/Layers/CodexAdapter.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadapps/server/src/provider/Layers/CodexSessionRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
@macroscopeapp

macroscopeappBot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
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>
Comment threadapps/web/src/session-logic.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
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>
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
t3dotggand others added 3 commits August 2, 2026 02:04
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>

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Comment threadapps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts Outdated
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>
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
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>
Comment threadapps/web/src/session-logic.ts
t3dotggand others added 4 commits August 2, 2026 02:53
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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
radroid added a commit to radroid/t3code that referenced this pull request Aug 19, 2026
A fresh two-axis review plus an adversarial re-verification of every [V]
claim found three that did not survive contact with the tree, one of them
a design hole an implementer would have built.
- The [60, 3600] clamp belongs to ScheduleWakeup alone. session_crons also
carries CronCreate entries, which take an arbitrary 5-field expression
with no hour bound, so "the exposure is bounded without a second rule"
was wrong: a recorded `0 9 * * *` stands T3 down for up to 24h. Deference
is now capped at the loop's own deadline, since past it there is nothing
left to defer to. Added by review, and open beside Q1.
- wakeGraceMs ~90s was the wrong half of the jitter model. 90s is the
one-shot *early* jitter; the late jitter is up to 10% of period, max
15 min. Grace is now derived from the recorded entry, so a healthy
jittered wake no longer fires wake_lost.
- D2's evidence is retracted, its conclusion kept. Four closers exist and
handleResultMessage's is unconditional, and pingdotgg#5219 retired the
subagent -> synthetic-turn path nine days before this was written.
Re-anchored on the session reaper, which refuses to reap a thread with
an activeTurnId.
Also: settingsSearch.ts is ~+13, not ~+4 (each search item is a 5-6 line
object literal), so phases 1-4 cost ~16 lines rather than ~7 — the row
counts are unchanged. The 08-18 sync moved the merge-base to cebac35,
and the headline 53 files / +2590/-1042 only holds against it.
One assumption got promoted: the Stop hook does deliver session_crons,
spread unconditionally into both Stop and SubagentStop, [] when empty.
That was PLAN's top-listed falsifier. It also turned up an undocumented
1000-char truncation on the prompt field, now covered by a test case.
Guard #15, the run digest, and loop_status's narrowing are now declared
as divergences rather than decided in silence. build-report.mjs documents
the full build-then-fmt pipeline, which is what actually reproduces the
committed report.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: native subagent & workflow observability - #5219

Merged
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability
Aug 6, 2026
Merged

feat: native subagent & workflow observability#5219
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

image

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 in client-runtime derives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).

Server

  • Contracts: additive TaskAgentLinkage on all task payloads (role, model, workflow name/phases, run handles, output file, owning agentId), new task.updated event, typed usage, tool attribution (agentId/parentToolUseId)
  • ClaudeAdapter: carries previously-dropped fields, handles task_updated, resolves parent_tool_use_id on tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensive workflow_progress parse, Workflow run handles
  • Codex: registers multi-agent-v2 children from thread/started/subAgentActivity (root-thread guard from live probe), intercepts child notifications, synthesizes the same task.* lifecycle (idle = resumable, cumulative usage, real names from agentPath)
  • Stop-everything: interrupt stops every live Claude task (Query.stopTask) and interrupts every live Codex child turn before the parent turn
  • Sidebar liveness: ThreadBackgroundLivenessService (in-memory, no persistence) exposes backgroundLiveness: working | monitoring on the thread shell — fleets read Working, watch loops read Monitoring
  • orchestration.getWorkflowScript RPC with TOCTOU-safe containment (open-then-verify inode, realpath under ~/.claude/projects, .js-only, size cap)

Web

  • Agents right-panel surface (the only roster): live workflows as bordered sections with a phase rail (per-phase segments with member status dots) and collapsible phase sections (live open, done collapsed); flat agent rows (no unfold); settled runs collapse to one line under "Earlier"; {} script opens a read-only script view
  • Spawn CTA row in chat: one anchored row per workflow run / direct-spawn batch, exempt from turn folds and overflow, membership pinned at first row (parallel-batch fix), coordinator status authoritative for workflows
  • Quiet timeline: agent-attributed tool rows re-homed to the panel, timelineBypass rows fold into the CTA, background shells stay ordinary work-log rows
  • All in-flight states present as Working (monitoring-pill rule); idle presents as settled

Mobile: same quiet-timeline fold; task.completed kept as terminal signal.

Verification

  • client-runtime: 30 fold tests (identity/activations, usage merges, bounds, cascade, nested agents); web: 1772 incl. quiet-timeline fixtures built from real persisted threads; server: adapter/ingestion/liveness/script-containment suites incl. a symlink-escape test and a stop-everything test
  • Live-tested over multiple rounds: Claude direct spawns + workflows (incl. 10-parallel), Codex collab fleets (10 agents), rerun workflows, monitoring threads — each round's findings fixed against exported wire/DB data

Remaining gaps

  • Codex fixtures should be generated from the captured wire logs (three schema-vs-wire divergences were found live)
  • Settled Codex rows show "assistant message" filler instead of a result summary
  • Script viewer is plain <pre> (no Shiki)
  • Mobile has only the timeline fold, no Agents sheet yet
  • Deferred by design: approval deep-links, transcript drill-in, forwardSubagentText/agentProgressSummaries off

🤖 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

  • Adds a new Agents right panel surface (AgentsPanel.tsx) showing live status, elapsed timers, and activity text for each subagent or workflow member.
  • Introduces a background liveness banner in the chat view with a pulsing dot and Stop button when background work is detected via the new ThreadBackgroundLiveness service; sidebar rows show 'Working' or 'Monitoring' pills accordingly.
  • Adds spawn CTA rows to the chat timeline that collapse multiple subagent/workflow lifecycle entries into a single row with status, token count, and an affordance to open the Agents panel.
  • Enriches the Claude and Codex adapters with task.updated and tool.progress event 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.
  • Adds a getWorkflowScript WebSocket RPC backed by a TOCTOU-safe reader that serves .js files under ~/.claude/projects up to 256 KiB with structured error reasons.
  • Risk: RIGHT_PANEL_STORAGE_VERSION bumps from 7 to 8, invalidating persisted right panel state for existing users; task.progress activity 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)

  • Spec divergence — accepted. The linked spec predates seven rounds of live testing. The rich inline workflow card, live strip, and expanded activity rows were built, tested live, and deliberately replaced by the single spawn CTA + Agents panel ("too much at once" — live-test decision). The spec link stays for design history; this description is the source of truth for what ships.
  • Mobile — accepted tradeoff for this PR. Mobile gets the quiet timeline and preserved terminal signals (Claude task.completed, Codex terminal task.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.
  • Script RPC scope — accepted with containment.getWorkflowScript takes threadId but does not yet verify the path against that thread's recorded runHandles (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.
  • Event-rate bound. Workflow member fan-out is coalesced by a material-transition filter (emit only when a rendered field changes), and progress activities upsert under stable thread-scoped ids — worst case per coordinator tick is now proportional to changed members, not fleet size.

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 agentKind and linkage on task.* / tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claude task_updated plus Codex collabAgent/* into shared task.updated / bypassed terminal updates.

Server behavior changes:ThreadBackgroundLiveness (in-memory) drives backgroundLiveness: working | monitoring on thread shells; runtime ingestion records task lifecycle and clears on session.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex child turn/interrupt before the parent. Claude drops subagent narration from the parent transcript, attributes tools via parent_tool_use_id, parses workflow_progress with member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scoped getWorkflowScript RPC reads .js under ~/.claude/projects with 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.updated rows; task rows collapse by taskId.

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

    • Added an Agents panel showing live and completed subagent workflows, phases, status, usage, and activity.
    • Added workflow script inspection with loading, truncation, and error states.
    • Added Working and Monitoring thread statuses with live background-task counts and a Stop action.
    • Added support for multi-agent collaboration, including nested tasks, progress, retries, and interruptions.
  • Bug Fixes

    • Reduced duplicate and internal activity in the work log while preserving meaningful task progress.
    • Improved task status, ownership, and usage reporting across providers.

…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>
@coderabbitai

coderabbitaiBot commented Aug 2, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 39.08% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title clearly summarizes the primary change: native subagent and workflow observability.
Description check✅ PassedThe description explains the problem, solution, UI changes, verification, tradeoffs, and remaining gaps, although it does not use every template heading.

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.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 2, 2026
Comment threadapps/web/src/components/AgentsPanel.tsx
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/components/chat/WorkflowRunCard.tsx Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/server/src/provider/Layers/CodexAdapter.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadapps/server/src/provider/Layers/CodexSessionRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
@macroscopeapp

macroscopeappBot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
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>
Comment threadapps/web/src/session-logic.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
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>
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
t3dotggand others added 3 commits August 2, 2026 02:04
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>

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Comment threadapps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts Outdated
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>
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
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>
Comment threadapps/web/src/session-logic.ts
t3dotggand others added 4 commits August 2, 2026 02:53
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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
radroid added a commit to radroid/t3code that referenced this pull request Aug 19, 2026
A fresh two-axis review plus an adversarial re-verification of every [V]
claim found three that did not survive contact with the tree, one of them
a design hole an implementer would have built.
- The [60, 3600] clamp belongs to ScheduleWakeup alone. session_crons also
carries CronCreate entries, which take an arbitrary 5-field expression
with no hour bound, so "the exposure is bounded without a second rule"
was wrong: a recorded `0 9 * * *` stands T3 down for up to 24h. Deference
is now capped at the loop's own deadline, since past it there is nothing
left to defer to. Added by review, and open beside Q1.
- wakeGraceMs ~90s was the wrong half of the jitter model. 90s is the
one-shot *early* jitter; the late jitter is up to 10% of period, max
15 min. Grace is now derived from the recorded entry, so a healthy
jittered wake no longer fires wake_lost.
- D2's evidence is retracted, its conclusion kept. Four closers exist and
handleResultMessage's is unconditional, and pingdotgg#5219 retired the
subagent -> synthetic-turn path nine days before this was written.
Re-anchored on the session reaper, which refuses to reap a thread with
an activeTurnId.
Also: settingsSearch.ts is ~+13, not ~+4 (each search item is a 5-6 line
object literal), so phases 1-4 cost ~16 lines rather than ~7 — the row
counts are unchanged. The 08-18 sync moved the merge-base to cebac35,
and the headline 53 files / +2590/-1042 only holds against it.
One assumption got promoted: the Stop hook does deliver session_crons,
spread unconditionally into both Stop and SubagentStop, [] when empty.
That was PLAN's top-listed falsifier. It also turned up an undocumented
1000-char truncation on the prompt field, now covered by a test case.
Guard #15, the run digest, and loop_status's narrowing are now declared
as divergences rather than decided in silence. build-report.mjs documents
the full build-then-fmt pipeline, which is what actually reproduces the
committed report.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: native subagent & workflow observability - #5219

Merged
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability
Aug 6, 2026
Merged

feat: native subagent & workflow observability#5219
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

image

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 in client-runtime derives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).

Server

  • Contracts: additive TaskAgentLinkage on all task payloads (role, model, workflow name/phases, run handles, output file, owning agentId), new task.updated event, typed usage, tool attribution (agentId/parentToolUseId)
  • ClaudeAdapter: carries previously-dropped fields, handles task_updated, resolves parent_tool_use_id on tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensive workflow_progress parse, Workflow run handles
  • Codex: registers multi-agent-v2 children from thread/started/subAgentActivity (root-thread guard from live probe), intercepts child notifications, synthesizes the same task.* lifecycle (idle = resumable, cumulative usage, real names from agentPath)
  • Stop-everything: interrupt stops every live Claude task (Query.stopTask) and interrupts every live Codex child turn before the parent turn
  • Sidebar liveness: ThreadBackgroundLivenessService (in-memory, no persistence) exposes backgroundLiveness: working | monitoring on the thread shell — fleets read Working, watch loops read Monitoring
  • orchestration.getWorkflowScript RPC with TOCTOU-safe containment (open-then-verify inode, realpath under ~/.claude/projects, .js-only, size cap)

Web

  • Agents right-panel surface (the only roster): live workflows as bordered sections with a phase rail (per-phase segments with member status dots) and collapsible phase sections (live open, done collapsed); flat agent rows (no unfold); settled runs collapse to one line under "Earlier"; {} script opens a read-only script view
  • Spawn CTA row in chat: one anchored row per workflow run / direct-spawn batch, exempt from turn folds and overflow, membership pinned at first row (parallel-batch fix), coordinator status authoritative for workflows
  • Quiet timeline: agent-attributed tool rows re-homed to the panel, timelineBypass rows fold into the CTA, background shells stay ordinary work-log rows
  • All in-flight states present as Working (monitoring-pill rule); idle presents as settled

Mobile: same quiet-timeline fold; task.completed kept as terminal signal.

Verification

  • client-runtime: 30 fold tests (identity/activations, usage merges, bounds, cascade, nested agents); web: 1772 incl. quiet-timeline fixtures built from real persisted threads; server: adapter/ingestion/liveness/script-containment suites incl. a symlink-escape test and a stop-everything test
  • Live-tested over multiple rounds: Claude direct spawns + workflows (incl. 10-parallel), Codex collab fleets (10 agents), rerun workflows, monitoring threads — each round's findings fixed against exported wire/DB data

Remaining gaps

  • Codex fixtures should be generated from the captured wire logs (three schema-vs-wire divergences were found live)
  • Settled Codex rows show "assistant message" filler instead of a result summary
  • Script viewer is plain <pre> (no Shiki)
  • Mobile has only the timeline fold, no Agents sheet yet
  • Deferred by design: approval deep-links, transcript drill-in, forwardSubagentText/agentProgressSummaries off

🤖 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

  • Adds a new Agents right panel surface (AgentsPanel.tsx) showing live status, elapsed timers, and activity text for each subagent or workflow member.
  • Introduces a background liveness banner in the chat view with a pulsing dot and Stop button when background work is detected via the new ThreadBackgroundLiveness service; sidebar rows show 'Working' or 'Monitoring' pills accordingly.
  • Adds spawn CTA rows to the chat timeline that collapse multiple subagent/workflow lifecycle entries into a single row with status, token count, and an affordance to open the Agents panel.
  • Enriches the Claude and Codex adapters with task.updated and tool.progress event 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.
  • Adds a getWorkflowScript WebSocket RPC backed by a TOCTOU-safe reader that serves .js files under ~/.claude/projects up to 256 KiB with structured error reasons.
  • Risk: RIGHT_PANEL_STORAGE_VERSION bumps from 7 to 8, invalidating persisted right panel state for existing users; task.progress activity 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)

  • Spec divergence — accepted. The linked spec predates seven rounds of live testing. The rich inline workflow card, live strip, and expanded activity rows were built, tested live, and deliberately replaced by the single spawn CTA + Agents panel ("too much at once" — live-test decision). The spec link stays for design history; this description is the source of truth for what ships.
  • Mobile — accepted tradeoff for this PR. Mobile gets the quiet timeline and preserved terminal signals (Claude task.completed, Codex terminal task.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.
  • Script RPC scope — accepted with containment.getWorkflowScript takes threadId but does not yet verify the path against that thread's recorded runHandles (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.
  • Event-rate bound. Workflow member fan-out is coalesced by a material-transition filter (emit only when a rendered field changes), and progress activities upsert under stable thread-scoped ids — worst case per coordinator tick is now proportional to changed members, not fleet size.

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 agentKind and linkage on task.* / tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claude task_updated plus Codex collabAgent/* into shared task.updated / bypassed terminal updates.

Server behavior changes:ThreadBackgroundLiveness (in-memory) drives backgroundLiveness: working | monitoring on thread shells; runtime ingestion records task lifecycle and clears on session.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex child turn/interrupt before the parent. Claude drops subagent narration from the parent transcript, attributes tools via parent_tool_use_id, parses workflow_progress with member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scoped getWorkflowScript RPC reads .js under ~/.claude/projects with 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.updated rows; task rows collapse by taskId.

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

    • Added an Agents panel showing live and completed subagent workflows, phases, status, usage, and activity.
    • Added workflow script inspection with loading, truncation, and error states.
    • Added Working and Monitoring thread statuses with live background-task counts and a Stop action.
    • Added support for multi-agent collaboration, including nested tasks, progress, retries, and interruptions.
  • Bug Fixes

    • Reduced duplicate and internal activity in the work log while preserving meaningful task progress.
    • Improved task status, ownership, and usage reporting across providers.

…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>
@coderabbitai

coderabbitaiBot commented Aug 2, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 39.08% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title clearly summarizes the primary change: native subagent and workflow observability.
Description check✅ PassedThe description explains the problem, solution, UI changes, verification, tradeoffs, and remaining gaps, although it does not use every template heading.

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.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 2, 2026
Comment threadapps/web/src/components/AgentsPanel.tsx
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/components/chat/WorkflowRunCard.tsx Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/server/src/provider/Layers/CodexAdapter.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadapps/server/src/provider/Layers/CodexSessionRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
@macroscopeapp

macroscopeappBot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
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>
Comment threadapps/web/src/session-logic.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
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>
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
t3dotggand others added 3 commits August 2, 2026 02:04
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>

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Comment threadapps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts Outdated
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>
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
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>
Comment threadapps/web/src/session-logic.ts
t3dotggand others added 4 commits August 2, 2026 02:53
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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
radroid added a commit to radroid/t3code that referenced this pull request Aug 19, 2026
A fresh two-axis review plus an adversarial re-verification of every [V]
claim found three that did not survive contact with the tree, one of them
a design hole an implementer would have built.
- The [60, 3600] clamp belongs to ScheduleWakeup alone. session_crons also
carries CronCreate entries, which take an arbitrary 5-field expression
with no hour bound, so "the exposure is bounded without a second rule"
was wrong: a recorded `0 9 * * *` stands T3 down for up to 24h. Deference
is now capped at the loop's own deadline, since past it there is nothing
left to defer to. Added by review, and open beside Q1.
- wakeGraceMs ~90s was the wrong half of the jitter model. 90s is the
one-shot *early* jitter; the late jitter is up to 10% of period, max
15 min. Grace is now derived from the recorded entry, so a healthy
jittered wake no longer fires wake_lost.
- D2's evidence is retracted, its conclusion kept. Four closers exist and
handleResultMessage's is unconditional, and pingdotgg#5219 retired the
subagent -> synthetic-turn path nine days before this was written.
Re-anchored on the session reaper, which refuses to reap a thread with
an activeTurnId.
Also: settingsSearch.ts is ~+13, not ~+4 (each search item is a 5-6 line
object literal), so phases 1-4 cost ~16 lines rather than ~7 — the row
counts are unchanged. The 08-18 sync moved the merge-base to cebac35,
and the headline 53 files / +2590/-1042 only holds against it.
One assumption got promoted: the Stop hook does deliver session_crons,
spread unconditionally into both Stop and SubagentStop, [] when empty.
That was PLAN's top-listed falsifier. It also turned up an undocumented
1000-char truncation on the prompt field, now covered by a test case.
Guard #15, the run digest, and loop_status's narrowing are now declared
as divergences rather than decided in silence. build-report.mjs documents
the full build-then-fmt pipeline, which is what actually reproduces the
committed report.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: native subagent & workflow observability - #5219

Merged
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability
Aug 6, 2026
Merged

feat: native subagent & workflow observability#5219
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

image

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 in client-runtime derives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).

Server

  • Contracts: additive TaskAgentLinkage on all task payloads (role, model, workflow name/phases, run handles, output file, owning agentId), new task.updated event, typed usage, tool attribution (agentId/parentToolUseId)
  • ClaudeAdapter: carries previously-dropped fields, handles task_updated, resolves parent_tool_use_id on tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensive workflow_progress parse, Workflow run handles
  • Codex: registers multi-agent-v2 children from thread/started/subAgentActivity (root-thread guard from live probe), intercepts child notifications, synthesizes the same task.* lifecycle (idle = resumable, cumulative usage, real names from agentPath)
  • Stop-everything: interrupt stops every live Claude task (Query.stopTask) and interrupts every live Codex child turn before the parent turn
  • Sidebar liveness: ThreadBackgroundLivenessService (in-memory, no persistence) exposes backgroundLiveness: working | monitoring on the thread shell — fleets read Working, watch loops read Monitoring
  • orchestration.getWorkflowScript RPC with TOCTOU-safe containment (open-then-verify inode, realpath under ~/.claude/projects, .js-only, size cap)

Web

  • Agents right-panel surface (the only roster): live workflows as bordered sections with a phase rail (per-phase segments with member status dots) and collapsible phase sections (live open, done collapsed); flat agent rows (no unfold); settled runs collapse to one line under "Earlier"; {} script opens a read-only script view
  • Spawn CTA row in chat: one anchored row per workflow run / direct-spawn batch, exempt from turn folds and overflow, membership pinned at first row (parallel-batch fix), coordinator status authoritative for workflows
  • Quiet timeline: agent-attributed tool rows re-homed to the panel, timelineBypass rows fold into the CTA, background shells stay ordinary work-log rows
  • All in-flight states present as Working (monitoring-pill rule); idle presents as settled

Mobile: same quiet-timeline fold; task.completed kept as terminal signal.

Verification

  • client-runtime: 30 fold tests (identity/activations, usage merges, bounds, cascade, nested agents); web: 1772 incl. quiet-timeline fixtures built from real persisted threads; server: adapter/ingestion/liveness/script-containment suites incl. a symlink-escape test and a stop-everything test
  • Live-tested over multiple rounds: Claude direct spawns + workflows (incl. 10-parallel), Codex collab fleets (10 agents), rerun workflows, monitoring threads — each round's findings fixed against exported wire/DB data

Remaining gaps

  • Codex fixtures should be generated from the captured wire logs (three schema-vs-wire divergences were found live)
  • Settled Codex rows show "assistant message" filler instead of a result summary
  • Script viewer is plain <pre> (no Shiki)
  • Mobile has only the timeline fold, no Agents sheet yet
  • Deferred by design: approval deep-links, transcript drill-in, forwardSubagentText/agentProgressSummaries off

🤖 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

  • Adds a new Agents right panel surface (AgentsPanel.tsx) showing live status, elapsed timers, and activity text for each subagent or workflow member.
  • Introduces a background liveness banner in the chat view with a pulsing dot and Stop button when background work is detected via the new ThreadBackgroundLiveness service; sidebar rows show 'Working' or 'Monitoring' pills accordingly.
  • Adds spawn CTA rows to the chat timeline that collapse multiple subagent/workflow lifecycle entries into a single row with status, token count, and an affordance to open the Agents panel.
  • Enriches the Claude and Codex adapters with task.updated and tool.progress event 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.
  • Adds a getWorkflowScript WebSocket RPC backed by a TOCTOU-safe reader that serves .js files under ~/.claude/projects up to 256 KiB with structured error reasons.
  • Risk: RIGHT_PANEL_STORAGE_VERSION bumps from 7 to 8, invalidating persisted right panel state for existing users; task.progress activity 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)

  • Spec divergence — accepted. The linked spec predates seven rounds of live testing. The rich inline workflow card, live strip, and expanded activity rows were built, tested live, and deliberately replaced by the single spawn CTA + Agents panel ("too much at once" — live-test decision). The spec link stays for design history; this description is the source of truth for what ships.
  • Mobile — accepted tradeoff for this PR. Mobile gets the quiet timeline and preserved terminal signals (Claude task.completed, Codex terminal task.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.
  • Script RPC scope — accepted with containment.getWorkflowScript takes threadId but does not yet verify the path against that thread's recorded runHandles (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.
  • Event-rate bound. Workflow member fan-out is coalesced by a material-transition filter (emit only when a rendered field changes), and progress activities upsert under stable thread-scoped ids — worst case per coordinator tick is now proportional to changed members, not fleet size.

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 agentKind and linkage on task.* / tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claude task_updated plus Codex collabAgent/* into shared task.updated / bypassed terminal updates.

Server behavior changes:ThreadBackgroundLiveness (in-memory) drives backgroundLiveness: working | monitoring on thread shells; runtime ingestion records task lifecycle and clears on session.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex child turn/interrupt before the parent. Claude drops subagent narration from the parent transcript, attributes tools via parent_tool_use_id, parses workflow_progress with member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scoped getWorkflowScript RPC reads .js under ~/.claude/projects with 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.updated rows; task rows collapse by taskId.

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

    • Added an Agents panel showing live and completed subagent workflows, phases, status, usage, and activity.
    • Added workflow script inspection with loading, truncation, and error states.
    • Added Working and Monitoring thread statuses with live background-task counts and a Stop action.
    • Added support for multi-agent collaboration, including nested tasks, progress, retries, and interruptions.
  • Bug Fixes

    • Reduced duplicate and internal activity in the work log while preserving meaningful task progress.
    • Improved task status, ownership, and usage reporting across providers.

…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>
@coderabbitai

coderabbitaiBot commented Aug 2, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 39.08% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title clearly summarizes the primary change: native subagent and workflow observability.
Description check✅ PassedThe description explains the problem, solution, UI changes, verification, tradeoffs, and remaining gaps, although it does not use every template heading.

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.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 2, 2026
Comment threadapps/web/src/components/AgentsPanel.tsx
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/components/chat/WorkflowRunCard.tsx Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/server/src/provider/Layers/CodexAdapter.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadapps/server/src/provider/Layers/CodexSessionRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
@macroscopeapp

macroscopeappBot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
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>
Comment threadapps/web/src/session-logic.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
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>
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
t3dotggand others added 3 commits August 2, 2026 02:04
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>

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Comment threadapps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts Outdated
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>
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
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>
Comment threadapps/web/src/session-logic.ts
t3dotggand others added 4 commits August 2, 2026 02:53
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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
radroid added a commit to radroid/t3code that referenced this pull request Aug 19, 2026
A fresh two-axis review plus an adversarial re-verification of every [V]
claim found three that did not survive contact with the tree, one of them
a design hole an implementer would have built.
- The [60, 3600] clamp belongs to ScheduleWakeup alone. session_crons also
carries CronCreate entries, which take an arbitrary 5-field expression
with no hour bound, so "the exposure is bounded without a second rule"
was wrong: a recorded `0 9 * * *` stands T3 down for up to 24h. Deference
is now capped at the loop's own deadline, since past it there is nothing
left to defer to. Added by review, and open beside Q1.
- wakeGraceMs ~90s was the wrong half of the jitter model. 90s is the
one-shot *early* jitter; the late jitter is up to 10% of period, max
15 min. Grace is now derived from the recorded entry, so a healthy
jittered wake no longer fires wake_lost.
- D2's evidence is retracted, its conclusion kept. Four closers exist and
handleResultMessage's is unconditional, and pingdotgg#5219 retired the
subagent -> synthetic-turn path nine days before this was written.
Re-anchored on the session reaper, which refuses to reap a thread with
an activeTurnId.
Also: settingsSearch.ts is ~+13, not ~+4 (each search item is a 5-6 line
object literal), so phases 1-4 cost ~16 lines rather than ~7 — the row
counts are unchanged. The 08-18 sync moved the merge-base to cebac35,
and the headline 53 files / +2590/-1042 only holds against it.
One assumption got promoted: the Stop hook does deliver session_crons,
spread unconditionally into both Stop and SubagentStop, [] when empty.
That was PLAN's top-listed falsifier. It also turned up an undocumented
1000-char truncation on the prompt field, now covered by a test case.
Guard #15, the run digest, and loop_status's narrowing are now declared
as divergences rather than decided in silence. build-report.mjs documents
the full build-then-fmt pipeline, which is what actually reproduces the
committed report.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: native subagent & workflow observability - #5219

Merged
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability
Aug 6, 2026
Merged

feat: native subagent & workflow observability#5219
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

image

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 in client-runtime derives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).

Server

  • Contracts: additive TaskAgentLinkage on all task payloads (role, model, workflow name/phases, run handles, output file, owning agentId), new task.updated event, typed usage, tool attribution (agentId/parentToolUseId)
  • ClaudeAdapter: carries previously-dropped fields, handles task_updated, resolves parent_tool_use_id on tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensive workflow_progress parse, Workflow run handles
  • Codex: registers multi-agent-v2 children from thread/started/subAgentActivity (root-thread guard from live probe), intercepts child notifications, synthesizes the same task.* lifecycle (idle = resumable, cumulative usage, real names from agentPath)
  • Stop-everything: interrupt stops every live Claude task (Query.stopTask) and interrupts every live Codex child turn before the parent turn
  • Sidebar liveness: ThreadBackgroundLivenessService (in-memory, no persistence) exposes backgroundLiveness: working | monitoring on the thread shell — fleets read Working, watch loops read Monitoring
  • orchestration.getWorkflowScript RPC with TOCTOU-safe containment (open-then-verify inode, realpath under ~/.claude/projects, .js-only, size cap)

Web

  • Agents right-panel surface (the only roster): live workflows as bordered sections with a phase rail (per-phase segments with member status dots) and collapsible phase sections (live open, done collapsed); flat agent rows (no unfold); settled runs collapse to one line under "Earlier"; {} script opens a read-only script view
  • Spawn CTA row in chat: one anchored row per workflow run / direct-spawn batch, exempt from turn folds and overflow, membership pinned at first row (parallel-batch fix), coordinator status authoritative for workflows
  • Quiet timeline: agent-attributed tool rows re-homed to the panel, timelineBypass rows fold into the CTA, background shells stay ordinary work-log rows
  • All in-flight states present as Working (monitoring-pill rule); idle presents as settled

Mobile: same quiet-timeline fold; task.completed kept as terminal signal.

Verification

  • client-runtime: 30 fold tests (identity/activations, usage merges, bounds, cascade, nested agents); web: 1772 incl. quiet-timeline fixtures built from real persisted threads; server: adapter/ingestion/liveness/script-containment suites incl. a symlink-escape test and a stop-everything test
  • Live-tested over multiple rounds: Claude direct spawns + workflows (incl. 10-parallel), Codex collab fleets (10 agents), rerun workflows, monitoring threads — each round's findings fixed against exported wire/DB data

Remaining gaps

  • Codex fixtures should be generated from the captured wire logs (three schema-vs-wire divergences were found live)
  • Settled Codex rows show "assistant message" filler instead of a result summary
  • Script viewer is plain <pre> (no Shiki)
  • Mobile has only the timeline fold, no Agents sheet yet
  • Deferred by design: approval deep-links, transcript drill-in, forwardSubagentText/agentProgressSummaries off

🤖 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

  • Adds a new Agents right panel surface (AgentsPanel.tsx) showing live status, elapsed timers, and activity text for each subagent or workflow member.
  • Introduces a background liveness banner in the chat view with a pulsing dot and Stop button when background work is detected via the new ThreadBackgroundLiveness service; sidebar rows show 'Working' or 'Monitoring' pills accordingly.
  • Adds spawn CTA rows to the chat timeline that collapse multiple subagent/workflow lifecycle entries into a single row with status, token count, and an affordance to open the Agents panel.
  • Enriches the Claude and Codex adapters with task.updated and tool.progress event 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.
  • Adds a getWorkflowScript WebSocket RPC backed by a TOCTOU-safe reader that serves .js files under ~/.claude/projects up to 256 KiB with structured error reasons.
  • Risk: RIGHT_PANEL_STORAGE_VERSION bumps from 7 to 8, invalidating persisted right panel state for existing users; task.progress activity 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)

  • Spec divergence — accepted. The linked spec predates seven rounds of live testing. The rich inline workflow card, live strip, and expanded activity rows were built, tested live, and deliberately replaced by the single spawn CTA + Agents panel ("too much at once" — live-test decision). The spec link stays for design history; this description is the source of truth for what ships.
  • Mobile — accepted tradeoff for this PR. Mobile gets the quiet timeline and preserved terminal signals (Claude task.completed, Codex terminal task.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.
  • Script RPC scope — accepted with containment.getWorkflowScript takes threadId but does not yet verify the path against that thread's recorded runHandles (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.
  • Event-rate bound. Workflow member fan-out is coalesced by a material-transition filter (emit only when a rendered field changes), and progress activities upsert under stable thread-scoped ids — worst case per coordinator tick is now proportional to changed members, not fleet size.

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 agentKind and linkage on task.* / tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claude task_updated plus Codex collabAgent/* into shared task.updated / bypassed terminal updates.

Server behavior changes:ThreadBackgroundLiveness (in-memory) drives backgroundLiveness: working | monitoring on thread shells; runtime ingestion records task lifecycle and clears on session.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex child turn/interrupt before the parent. Claude drops subagent narration from the parent transcript, attributes tools via parent_tool_use_id, parses workflow_progress with member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scoped getWorkflowScript RPC reads .js under ~/.claude/projects with 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.updated rows; task rows collapse by taskId.

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

    • Added an Agents panel showing live and completed subagent workflows, phases, status, usage, and activity.
    • Added workflow script inspection with loading, truncation, and error states.
    • Added Working and Monitoring thread statuses with live background-task counts and a Stop action.
    • Added support for multi-agent collaboration, including nested tasks, progress, retries, and interruptions.
  • Bug Fixes

    • Reduced duplicate and internal activity in the work log while preserving meaningful task progress.
    • Improved task status, ownership, and usage reporting across providers.

…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>
@coderabbitai

coderabbitaiBot commented Aug 2, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 39.08% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title clearly summarizes the primary change: native subagent and workflow observability.
Description check✅ PassedThe description explains the problem, solution, UI changes, verification, tradeoffs, and remaining gaps, although it does not use every template heading.

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.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 2, 2026
Comment threadapps/web/src/components/AgentsPanel.tsx
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/components/chat/WorkflowRunCard.tsx Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/server/src/provider/Layers/CodexAdapter.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadapps/server/src/provider/Layers/CodexSessionRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
@macroscopeapp

macroscopeappBot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
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>
Comment threadapps/web/src/session-logic.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
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>
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
t3dotggand others added 3 commits August 2, 2026 02:04
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>

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Comment threadapps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts Outdated
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>
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
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>
Comment threadapps/web/src/session-logic.ts
t3dotggand others added 4 commits August 2, 2026 02:53
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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
radroid added a commit to radroid/t3code that referenced this pull request Aug 19, 2026
A fresh two-axis review plus an adversarial re-verification of every [V]
claim found three that did not survive contact with the tree, one of them
a design hole an implementer would have built.
- The [60, 3600] clamp belongs to ScheduleWakeup alone. session_crons also
carries CronCreate entries, which take an arbitrary 5-field expression
with no hour bound, so "the exposure is bounded without a second rule"
was wrong: a recorded `0 9 * * *` stands T3 down for up to 24h. Deference
is now capped at the loop's own deadline, since past it there is nothing
left to defer to. Added by review, and open beside Q1.
- wakeGraceMs ~90s was the wrong half of the jitter model. 90s is the
one-shot *early* jitter; the late jitter is up to 10% of period, max
15 min. Grace is now derived from the recorded entry, so a healthy
jittered wake no longer fires wake_lost.
- D2's evidence is retracted, its conclusion kept. Four closers exist and
handleResultMessage's is unconditional, and pingdotgg#5219 retired the
subagent -> synthetic-turn path nine days before this was written.
Re-anchored on the session reaper, which refuses to reap a thread with
an activeTurnId.
Also: settingsSearch.ts is ~+13, not ~+4 (each search item is a 5-6 line
object literal), so phases 1-4 cost ~16 lines rather than ~7 — the row
counts are unchanged. The 08-18 sync moved the merge-base to cebac35,
and the headline 53 files / +2590/-1042 only holds against it.
One assumption got promoted: the Stop hook does deliver session_crons,
spread unconditionally into both Stop and SubagentStop, [] when empty.
That was PLAN's top-listed falsifier. It also turned up an undocumented
1000-char truncation on the prompt field, now covered by a test case.
Guard #15, the run digest, and loop_status's narrowing are now declared
as divergences rather than decided in silence. build-report.mjs documents
the full build-then-fmt pipeline, which is what actually reproduces the
committed report.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: native subagent & workflow observability - #5219

Merged
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability
Aug 6, 2026
Merged

feat: native subagent & workflow observability#5219
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

image

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 in client-runtime derives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).

Server

  • Contracts: additive TaskAgentLinkage on all task payloads (role, model, workflow name/phases, run handles, output file, owning agentId), new task.updated event, typed usage, tool attribution (agentId/parentToolUseId)
  • ClaudeAdapter: carries previously-dropped fields, handles task_updated, resolves parent_tool_use_id on tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensive workflow_progress parse, Workflow run handles
  • Codex: registers multi-agent-v2 children from thread/started/subAgentActivity (root-thread guard from live probe), intercepts child notifications, synthesizes the same task.* lifecycle (idle = resumable, cumulative usage, real names from agentPath)
  • Stop-everything: interrupt stops every live Claude task (Query.stopTask) and interrupts every live Codex child turn before the parent turn
  • Sidebar liveness: ThreadBackgroundLivenessService (in-memory, no persistence) exposes backgroundLiveness: working | monitoring on the thread shell — fleets read Working, watch loops read Monitoring
  • orchestration.getWorkflowScript RPC with TOCTOU-safe containment (open-then-verify inode, realpath under ~/.claude/projects, .js-only, size cap)

Web

  • Agents right-panel surface (the only roster): live workflows as bordered sections with a phase rail (per-phase segments with member status dots) and collapsible phase sections (live open, done collapsed); flat agent rows (no unfold); settled runs collapse to one line under "Earlier"; {} script opens a read-only script view
  • Spawn CTA row in chat: one anchored row per workflow run / direct-spawn batch, exempt from turn folds and overflow, membership pinned at first row (parallel-batch fix), coordinator status authoritative for workflows
  • Quiet timeline: agent-attributed tool rows re-homed to the panel, timelineBypass rows fold into the CTA, background shells stay ordinary work-log rows
  • All in-flight states present as Working (monitoring-pill rule); idle presents as settled

Mobile: same quiet-timeline fold; task.completed kept as terminal signal.

Verification

  • client-runtime: 30 fold tests (identity/activations, usage merges, bounds, cascade, nested agents); web: 1772 incl. quiet-timeline fixtures built from real persisted threads; server: adapter/ingestion/liveness/script-containment suites incl. a symlink-escape test and a stop-everything test
  • Live-tested over multiple rounds: Claude direct spawns + workflows (incl. 10-parallel), Codex collab fleets (10 agents), rerun workflows, monitoring threads — each round's findings fixed against exported wire/DB data

Remaining gaps

  • Codex fixtures should be generated from the captured wire logs (three schema-vs-wire divergences were found live)
  • Settled Codex rows show "assistant message" filler instead of a result summary
  • Script viewer is plain <pre> (no Shiki)
  • Mobile has only the timeline fold, no Agents sheet yet
  • Deferred by design: approval deep-links, transcript drill-in, forwardSubagentText/agentProgressSummaries off

🤖 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

  • Adds a new Agents right panel surface (AgentsPanel.tsx) showing live status, elapsed timers, and activity text for each subagent or workflow member.
  • Introduces a background liveness banner in the chat view with a pulsing dot and Stop button when background work is detected via the new ThreadBackgroundLiveness service; sidebar rows show 'Working' or 'Monitoring' pills accordingly.
  • Adds spawn CTA rows to the chat timeline that collapse multiple subagent/workflow lifecycle entries into a single row with status, token count, and an affordance to open the Agents panel.
  • Enriches the Claude and Codex adapters with task.updated and tool.progress event 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.
  • Adds a getWorkflowScript WebSocket RPC backed by a TOCTOU-safe reader that serves .js files under ~/.claude/projects up to 256 KiB with structured error reasons.
  • Risk: RIGHT_PANEL_STORAGE_VERSION bumps from 7 to 8, invalidating persisted right panel state for existing users; task.progress activity 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)

  • Spec divergence — accepted. The linked spec predates seven rounds of live testing. The rich inline workflow card, live strip, and expanded activity rows were built, tested live, and deliberately replaced by the single spawn CTA + Agents panel ("too much at once" — live-test decision). The spec link stays for design history; this description is the source of truth for what ships.
  • Mobile — accepted tradeoff for this PR. Mobile gets the quiet timeline and preserved terminal signals (Claude task.completed, Codex terminal task.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.
  • Script RPC scope — accepted with containment.getWorkflowScript takes threadId but does not yet verify the path against that thread's recorded runHandles (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.
  • Event-rate bound. Workflow member fan-out is coalesced by a material-transition filter (emit only when a rendered field changes), and progress activities upsert under stable thread-scoped ids — worst case per coordinator tick is now proportional to changed members, not fleet size.

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 agentKind and linkage on task.* / tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claude task_updated plus Codex collabAgent/* into shared task.updated / bypassed terminal updates.

Server behavior changes:ThreadBackgroundLiveness (in-memory) drives backgroundLiveness: working | monitoring on thread shells; runtime ingestion records task lifecycle and clears on session.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex child turn/interrupt before the parent. Claude drops subagent narration from the parent transcript, attributes tools via parent_tool_use_id, parses workflow_progress with member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scoped getWorkflowScript RPC reads .js under ~/.claude/projects with 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.updated rows; task rows collapse by taskId.

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

    • Added an Agents panel showing live and completed subagent workflows, phases, status, usage, and activity.
    • Added workflow script inspection with loading, truncation, and error states.
    • Added Working and Monitoring thread statuses with live background-task counts and a Stop action.
    • Added support for multi-agent collaboration, including nested tasks, progress, retries, and interruptions.
  • Bug Fixes

    • Reduced duplicate and internal activity in the work log while preserving meaningful task progress.
    • Improved task status, ownership, and usage reporting across providers.

…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>
@coderabbitai

coderabbitaiBot commented Aug 2, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 39.08% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title clearly summarizes the primary change: native subagent and workflow observability.
Description check✅ PassedThe description explains the problem, solution, UI changes, verification, tradeoffs, and remaining gaps, although it does not use every template heading.

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.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 2, 2026
Comment threadapps/web/src/components/AgentsPanel.tsx
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/components/chat/WorkflowRunCard.tsx Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/server/src/provider/Layers/CodexAdapter.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadapps/server/src/provider/Layers/CodexSessionRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
@macroscopeapp

macroscopeappBot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
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>
Comment threadapps/web/src/session-logic.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
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>
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
t3dotggand others added 3 commits August 2, 2026 02:04
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>

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Comment threadapps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts Outdated
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>
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
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>
Comment threadapps/web/src/session-logic.ts
t3dotggand others added 4 commits August 2, 2026 02:53
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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
radroid added a commit to radroid/t3code that referenced this pull request Aug 19, 2026
A fresh two-axis review plus an adversarial re-verification of every [V]
claim found three that did not survive contact with the tree, one of them
a design hole an implementer would have built.
- The [60, 3600] clamp belongs to ScheduleWakeup alone. session_crons also
carries CronCreate entries, which take an arbitrary 5-field expression
with no hour bound, so "the exposure is bounded without a second rule"
was wrong: a recorded `0 9 * * *` stands T3 down for up to 24h. Deference
is now capped at the loop's own deadline, since past it there is nothing
left to defer to. Added by review, and open beside Q1.
- wakeGraceMs ~90s was the wrong half of the jitter model. 90s is the
one-shot *early* jitter; the late jitter is up to 10% of period, max
15 min. Grace is now derived from the recorded entry, so a healthy
jittered wake no longer fires wake_lost.
- D2's evidence is retracted, its conclusion kept. Four closers exist and
handleResultMessage's is unconditional, and pingdotgg#5219 retired the
subagent -> synthetic-turn path nine days before this was written.
Re-anchored on the session reaper, which refuses to reap a thread with
an activeTurnId.
Also: settingsSearch.ts is ~+13, not ~+4 (each search item is a 5-6 line
object literal), so phases 1-4 cost ~16 lines rather than ~7 — the row
counts are unchanged. The 08-18 sync moved the merge-base to cebac35,
and the headline 53 files / +2590/-1042 only holds against it.
One assumption got promoted: the Stop hook does deliver session_crons,
spread unconditionally into both Stop and SubagentStop, [] when empty.
That was PLAN's top-listed falsifier. It also turned up an undocumented
1000-char truncation on the prompt field, now covered by a test case.
Guard #15, the run digest, and loop_status's narrowing are now declared
as divergences rather than decided in silence. build-report.mjs documents
the full build-then-fmt pipeline, which is what actually reproduces the
committed report.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: native subagent & workflow observability - #5219

Merged
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability
Aug 6, 2026
Merged

feat: native subagent & workflow observability#5219
t3dotgg merged 42 commits into
mainfrom
t3code/native-subagent-observability

Conversation

@t3dotgg

@t3dotggt3dotgg commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

image

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 in client-runtime derives orchestration-v2-shaped subagent state (field names match #4779, so the v2 merge is a mapper swap).

Server

  • Contracts: additive TaskAgentLinkage on all task payloads (role, model, workflow name/phases, run handles, output file, owning agentId), new task.updated event, typed usage, tool attribution (agentId/parentToolUseId)
  • ClaudeAdapter: carries previously-dropped fields, handles task_updated, resolves parent_tool_use_id on tool events, keeps subagent narration out of the parent transcript (leak + Working-timer-reset fix), attributes subagent-internal shells to their owning agent, defensive workflow_progress parse, Workflow run handles
  • Codex: registers multi-agent-v2 children from thread/started/subAgentActivity (root-thread guard from live probe), intercepts child notifications, synthesizes the same task.* lifecycle (idle = resumable, cumulative usage, real names from agentPath)
  • Stop-everything: interrupt stops every live Claude task (Query.stopTask) and interrupts every live Codex child turn before the parent turn
  • Sidebar liveness: ThreadBackgroundLivenessService (in-memory, no persistence) exposes backgroundLiveness: working | monitoring on the thread shell — fleets read Working, watch loops read Monitoring
  • orchestration.getWorkflowScript RPC with TOCTOU-safe containment (open-then-verify inode, realpath under ~/.claude/projects, .js-only, size cap)

Web

  • Agents right-panel surface (the only roster): live workflows as bordered sections with a phase rail (per-phase segments with member status dots) and collapsible phase sections (live open, done collapsed); flat agent rows (no unfold); settled runs collapse to one line under "Earlier"; {} script opens a read-only script view
  • Spawn CTA row in chat: one anchored row per workflow run / direct-spawn batch, exempt from turn folds and overflow, membership pinned at first row (parallel-batch fix), coordinator status authoritative for workflows
  • Quiet timeline: agent-attributed tool rows re-homed to the panel, timelineBypass rows fold into the CTA, background shells stay ordinary work-log rows
  • All in-flight states present as Working (monitoring-pill rule); idle presents as settled

Mobile: same quiet-timeline fold; task.completed kept as terminal signal.

Verification

  • client-runtime: 30 fold tests (identity/activations, usage merges, bounds, cascade, nested agents); web: 1772 incl. quiet-timeline fixtures built from real persisted threads; server: adapter/ingestion/liveness/script-containment suites incl. a symlink-escape test and a stop-everything test
  • Live-tested over multiple rounds: Claude direct spawns + workflows (incl. 10-parallel), Codex collab fleets (10 agents), rerun workflows, monitoring threads — each round's findings fixed against exported wire/DB data

Remaining gaps

  • Codex fixtures should be generated from the captured wire logs (three schema-vs-wire divergences were found live)
  • Settled Codex rows show "assistant message" filler instead of a result summary
  • Script viewer is plain <pre> (no Shiki)
  • Mobile has only the timeline fold, no Agents sheet yet
  • Deferred by design: approval deep-links, transcript drill-in, forwardSubagentText/agentProgressSummaries off

🤖 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

  • Adds a new Agents right panel surface (AgentsPanel.tsx) showing live status, elapsed timers, and activity text for each subagent or workflow member.
  • Introduces a background liveness banner in the chat view with a pulsing dot and Stop button when background work is detected via the new ThreadBackgroundLiveness service; sidebar rows show 'Working' or 'Monitoring' pills accordingly.
  • Adds spawn CTA rows to the chat timeline that collapse multiple subagent/workflow lifecycle entries into a single row with status, token count, and an affordance to open the Agents panel.
  • Enriches the Claude and Codex adapters with task.updated and tool.progress event 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.
  • Adds a getWorkflowScript WebSocket RPC backed by a TOCTOU-safe reader that serves .js files under ~/.claude/projects up to 256 KiB with structured error reasons.
  • Risk: RIGHT_PANEL_STORAGE_VERSION bumps from 7 to 8, invalidating persisted right panel state for existing users; task.progress activity 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)

  • Spec divergence — accepted. The linked spec predates seven rounds of live testing. The rich inline workflow card, live strip, and expanded activity rows were built, tested live, and deliberately replaced by the single spawn CTA + Agents panel ("too much at once" — live-test decision). The spec link stays for design history; this description is the source of truth for what ships.
  • Mobile — accepted tradeoff for this PR. Mobile gets the quiet timeline and preserved terminal signals (Claude task.completed, Codex terminal task.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.
  • Script RPC scope — accepted with containment.getWorkflowScript takes threadId but does not yet verify the path against that thread's recorded runHandles (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.
  • Event-rate bound. Workflow member fan-out is coalesced by a material-transition filter (emit only when a rendered field changes), and progress activities upsert under stable thread-scoped ids — worst case per coordinator tick is now proportional to changed members, not fleet size.

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 agentKind and linkage on task.* / tool rows, uses stable thread-scoped progress ids so ticks upsert instead of flooding retention, and maps Claude task_updated plus Codex collabAgent/* into shared task.updated / bypassed terminal updates.

Server behavior changes:ThreadBackgroundLiveness (in-memory) drives backgroundLiveness: working | monitoring on thread shells; runtime ingestion records task lifecycle and clears on session.exited. Stop now stops live Claude tasks (stopTask) and bounded Codex child turn/interrupt before the parent. Claude drops subagent narration from the parent transcript, attributes tools via parent_tool_use_id, parses workflow_progress with member coalescing, and Codex registers v2 children with explicit routing (root self-activity guard, interception before legacy suppressor). New read-scoped getWorkflowScript RPC reads .js under ~/.claude/projects with 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.updated rows; task rows collapse by taskId.

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

    • Added an Agents panel showing live and completed subagent workflows, phases, status, usage, and activity.
    • Added workflow script inspection with loading, truncation, and error states.
    • Added Working and Monitoring thread statuses with live background-task counts and a Stop action.
    • Added support for multi-agent collaboration, including nested tasks, progress, retries, and interruptions.
  • Bug Fixes

    • Reduced duplicate and internal activity in the work log while preserving meaningful task progress.
    • Improved task status, ownership, and usage reporting across providers.

…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>
@coderabbitai

coderabbitaiBot commented Aug 2, 2026

Copy link
Copy Markdown
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 39.08% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title clearly summarizes the primary change: native subagent and workflow observability.
Description check✅ PassedThe description explains the problem, solution, UI changes, verification, tradeoffs, and remaining gaps, although it does not use every template heading.

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.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Aug 2, 2026
Comment threadapps/web/src/components/AgentsPanel.tsx
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/components/chat/WorkflowRunCard.tsx Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/server/src/provider/Layers/CodexAdapter.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment threadapps/server/src/provider/Layers/CodexSessionRuntime.ts Outdated
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
@macroscopeapp

macroscopeappBot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
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>
Comment threadapps/web/src/session-logic.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
Comment threadapps/web/src/session-logic.ts
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts
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>
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts Outdated
Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
t3dotggand others added 3 commits August 2, 2026 02:04
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>

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Comment threadapps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/threadBackgroundLiveness.ts Outdated
Comment threadapps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts Outdated
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>
Comment threadpackages/client-runtime/src/state/subagentRuntime.ts Outdated
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>
Comment threadapps/web/src/session-logic.ts
t3dotggand others added 4 commits August 2, 2026 02:53
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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 15, 2026
* 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>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 17, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
radroid added a commit to radroid/t3code that referenced this pull request Aug 18, 2026
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>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
radroid added a commit to radroid/t3code that referenced this pull request Aug 19, 2026
A fresh two-axis review plus an adversarial re-verification of every [V]
claim found three that did not survive contact with the tree, one of them
a design hole an implementer would have built.
- The [60, 3600] clamp belongs to ScheduleWakeup alone. session_crons also
carries CronCreate entries, which take an arbitrary 5-field expression
with no hour bound, so "the exposure is bounded without a second rule"
was wrong: a recorded `0 9 * * *` stands T3 down for up to 24h. Deference
is now capped at the loop's own deadline, since past it there is nothing
left to defer to. Added by review, and open beside Q1.
- wakeGraceMs ~90s was the wrong half of the jitter model. 90s is the
one-shot *early* jitter; the late jitter is up to 10% of period, max
15 min. Grace is now derived from the recorded entry, so a healthy
jittered wake no longer fires wake_lost.
- D2's evidence is retracted, its conclusion kept. Four closers exist and
handleResultMessage's is unconditional, and pingdotgg#5219 retired the
subagent -> synthetic-turn path nine days before this was written.
Re-anchored on the session reaper, which refuses to reap a thread with
an activeTurnId.
Also: settingsSearch.ts is ~+13, not ~+4 (each search item is a 5-6 line
object literal), so phases 1-4 cost ~16 lines rather than ~7 — the row
counts are unchanged. The 08-18 sync moved the merge-base to cebac35,
and the headline 53 files / +2590/-1042 only holds against it.
One assumption got promoted: the Stop hook does deliver session_crons,
spread unconditionally into both Stop and SubagentStop, [] when empty.
That was PLAN's top-listed falsifier. It also turned up an undocumented
1000-char truncation on the prompt field, now covered by a test case.
Guard #15, the run digest, and loop_status's narrowing are now declared
as divergences rather than decided in silence. build-report.mjs documents
the full build-then-fmt pipeline, which is what actually reproduces the
committed report.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
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>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg