Skip to content

fix(opencode): handle child approvals, stops, and model catalogs - #8480

Merged
t3dotgg merged 24 commits into
mainfrom
t3code/fix-opencode-bindings
Aug 28, 2026
Merged

fix(opencode): handle child approvals, stops, and model catalogs#8480
t3dotgg merged 24 commits into
mainfrom
t3code/fix-opencode-bindings

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Aug 28, 2026

Copy link
Copy Markdown
Member

OpenCode could hide approval and question prompts from child sessions after a resume or reconnect. Turn races could also accept work after a stop, complete the wrong turn, or leave stop callers waiting. Model refresh, server authentication, and missing catalog entries had separate consistency problems.

This change verifies session ancestry, recovers pending child requests, and limits recovery work to the current prompt generation. Asked-event ancestry recovery continues while the native request is live. If a terminal event supersedes that request but ancestry remains unknown, terminal recovery stops after five attempts and removes its retry entry. Each session serializes prompt sends. A stop cancels a pending prompt request before it sends the native abort, and a canceled send exits as interrupted instead of persisting a running turn. Admission recovery keeps a buffered idle when the exact prompt echo arrives before or after the prompt HTTP response. Bounded message and status checks then reconcile that idle and the first idle after an interruption without reconnecting SSE. Both recovery requests read the stopped state first, then verify the current session, admission, turn, prompt generation, and cancellation before they change state. A stale response cannot clear the next prompt's admission. A polled busy status immediately enables output after an interruption. A final cancellation check runs before sendTurn returns. A genuine session error now releases pending stop callers.

OpenCode inventory and text generation share one lazy local server. Local settings passwords override OPENCODE_SERVER_PASSWORD; otherwise the inherited environment password is used by the server and every SDK client. External servers use only their configured password. Every connection passes an authenticated health and minimum-version check before inventory or session work.

OpenCode catalogs refresh when a client subscribes to server config or requests a manual refresh. Periodic OpenCode catalog polling remains off. A failed refresh keeps the last good models, slash commands, and skills. The shared helper closes 30 seconds after its last borrower releases it, so a later refresh rereads native configuration files. T3 Code does not own external OpenCode servers, which can need their own reload or restart.

Web scopes both missing-model option dispatch and trigger-label handling to OpenCode. If an OpenCode model is missing from the catalog, dispatch keeps the thread or draft's exact provider instance, model, and saved option values. The trigger shows the stored model identifier instead of falling back to the first catalog option. The picker shows an Unavailable row, respects hidden models, and remains usable while the provider reports a warning or error. Other providers validate dispatch options against live descriptors and keep their existing first-option trigger fallback. Mobile thread settings include the shared manual model refresh action.

Verification: 334 focused tests pass. This includes 179 server tests across seven files, 80 of which are adapter tests, one selected ProviderService interruption test, three subscribeServerConfig tests, 149 web tests across six files, and two mobile refresh tests. Scoped server, web, and mobile typechecks pass. Targeted lint, formatting, and git diff --check pass.

A loopback fault test reproduced the send-after-stop race on commit 3d0dc050 and verified the repaired code. The baseline accepted the held prompt after stop completed and wrote the sandbox file after turn.aborted. The repaired code canceled the prompt before the proxy forwarded it, made zero model calls, and did not write the file. A separate authenticated OpenCode 1.18.23 control recovered and resolved two child requests, left no pending requests, and completed the parent with five loopback model calls. No live data or real model account was used. No browser or emulator verification was run.

Made by GPT-5.6 Sol with the T3 Code Codex harness.


Note

High Risk
Changes sit in OpenCode session lifecycle, stop/interrupt coordination, and child approval routing—areas where race bugs directly affect correctness and user safety.

Overview
Mobile thread settings now carry an environmentId through the settings session and expose a Refresh models header action (Android and iOS). Refresh runs serverEnvironment.refreshProviders for that environment via a small helper that deduplicates in-flight taps and surfaces discovery failures in an alert.

OpenCode driver wiring constructs a shared OpenCodeServerOwner for text generation and provider checks, and turns off settings-triggered and interval catalog polling for the managed OpenCode snapshot (checkProviderOnSettingsChange: false, refreshOnInterval: false).

OpenCode adapter tests expand heavily: the runtime mock gains session status, permissions, questions, abort signals, and richer event streaming. New cases cover connection timeouts, concurrent session starts, stop/teardown races, steer admission vs idle/status ordering, interrupt and turnless abort behavior, and child-session approval/question routing plus recovery on resume.

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

Note

Rework OpenCodeAdapter child approvals, stops, and unavailable model catalog handling

  • Reworks sendTurn, interrupt, and session startup in OpenCodeAdapter to serialize prompt submissions with a Semaphore, correlate by generated messageID, and coordinate cancellation via Deferred so aborts are acknowledged by either API or event stream
  • Adds routing for child-session permission/question events via isOpenCodeChildRequestEvent, emitPendingOpenCodeRequest, and emitTerminalOpenCodeRequest with de-duplication and parent-session relation retries
  • Introduces OpenCodeServerOwner for shared, lazily-started local OpenCode servers with a 30s idle TTL, concurrent borrower tracking, and process-exit invalidation
  • Adds server version validation against MINIMUM_OPENCODE_VERSION ("1.14.19") via verifyOpenCodeServerVersion with a 5s health-check timeout; local servers inject OPENCODE_SERVER_PASSWORD into the child environment, external servers receive only settings-provided passwords
  • Preserves unavailable OpenCode model selections across catalog refreshes: mergeProviderSnapshot retains prior slashCommands/skills under retention conditions, and the web/mobile pickers render an "Unavailable" badge while keeping saved options for dispatch
  • Risk: runOpenCodeSdk signature changed to require an AbortSignal parameter; all callers in opencodeRuntime.ts are updated. makeOpenCodeTextGeneration no longer accepts an environment argument and delegates server lifecycle to OpenCodeServerOwner — out-of-tree callers of either will break.

Macroscope summarized 66e3e7a.

@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b4443b9a-5395-46c0-8721-ac6d86282288

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

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

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.3 KiB 13.3 KiB −56 B (−0.4%) 15.1 KiB
Codex Thread snapshot wire 6.9 KiB 6.9 KiB +4 B (+0.1%) 7.3 KiB
Codex Live turn WebSocket wire 6.4 KiB 6.4 KiB −60 B (−0.9%) 7.8 KiB
Codex Live turn WebSocket decoded 55.6 KiB 55.5 KiB −88 B (−0.2%) 66.4 KiB
Codex Live turn messages 11 9 −2 (−18.2%) 21
Claude Total thread wire 13.4 KiB 13.3 KiB −20 B (−0.1%) 15.1 KiB
Claude Thread snapshot wire 6.9 KiB 6.9 KiB −9 B (−0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.5 KiB 6.4 KiB −11 B (−0.2%) 7.8 KiB
Claude Live turn WebSocket decoded 56.4 KiB 56.4 KiB −44 B (−0.1%) 66.4 KiB
Claude Live turn messages 11 10 −1 (−9.1%) 21

Baseline: 8f49132 · PR result: 66e3e7a · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 109.4 KiB
  • Claude decoded thread snapshot: 110.1 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
@macroscopeapp

macroscopeapp Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR substantially changes OpenCode server lifecycle, authentication and permission handling, provider refresh behavior, and turn/child-request processing across server, web, and mobile production paths. Its broad stateful runtime impact and security-sensitive connection changes require human review despite the extensive tests and experienced authorship.

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

@t3dotgg
t3dotgg force-pushed the t3code/fix-opencode-bindings branch from c580be8 to 6430dbd Compare August 28, 2026 04:42
@t3dotgg t3dotgg changed the title fix(opencode): stop hidden approvals and false completions fix(opencode): handle child approvals, stops, and model catalogs Aug 28, 2026
Comment thread apps/server/src/provider/Layers/OpenCodeProvider.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
Comment thread apps/server/src/provider/Layers/OpenCodeProvider.ts Outdated
@github-actions github-actions Bot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 28, 2026

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Effect service conventions review: two related findings on the new OpenCodeServerOwner module and how it is handed to its consumers. Everything else in the diff (namespace imports from effect/* subpaths, canonical module placement at apps/server/src/provider/OpenCodeServerOwner.ts, scoped resource ownership, error handling moved from OpenCodeTextGeneration.ts) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment thread apps/server/src/textGeneration/OpenCodeTextGeneration.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeProvider.ts Outdated
Comment thread apps/server/src/provider/OpenCodeServerOwner.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
@github-actions github-actions Bot added size:XXL 1,000+ changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Aug 28, 2026
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/OpenCodeServerOwner.ts
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts Outdated
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
Comment thread apps/server/src/provider/Layers/OpenCodeAdapter.ts
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mwolson added a commit to mwolson/t3code that referenced this pull request Aug 29, 2026
OpenCode 2 talks to the host service, not a T3-managed isolate. Drop the
leftover pingdotgg#8480 process owner and CLI inventory tests, capture the process
spawner in the runtime layer, and stop passing a thread cwd into connect.
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Aug 29, 2026
* fix(grok): improve skills, plans, usage, and turn reliability (pingdotgg#8358)

Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>

* fix(server): recover stale Codex approval callbacks (pingdotgg#5195)

* test(server): remove duplicate missing worktree test (pingdotgg#8252)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(server): replay all un-applied events during projection bootstrap (pingdotgg#7538)

Co-authored-by: Theo Browne <me@t3.gg>

* test: remove low-signal test files (pingdotgg#8397)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* test: prune trivial error and layout tests (pingdotgg#8400)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* Fix Android adaptive launcher icon (pingdotgg#4332)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* feat(web): split provider settings into list and editor (pingdotgg#8380)

* fix(codex): accept Codex 0.150 account plans (pingdotgg#8447)

* fix(tooling): allow ignored-only staged changes (pingdotgg#8468)

* fix(mobile): keep iOS home header stable (pingdotgg#8467)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): stop showing red x summaries for ordinary tool failures (pingdotgg#8395)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): refine Git action toast glass styling (pingdotgg#8399)

* fix(desktop): allow preview automation in agent-created threads (pingdotgg#8483)

* test(web): remove redundant cache key test (pingdotgg#8484)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(release): move nightly schedule to minute 38

Recent scheduled nightlies have been delayed or skipped.

Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.

Authored by GPT-5.6 Sol with the Codex harness.

* fix(web): stabilize the provider settings editor (pingdotgg#8472)

* fix(web): open GitHub pull requests in browser when loading fails (pingdotgg#8507)

* fix(codex): show sub-agent models (pingdotgg#8502)

* feat(analytics): report connected client platforms (pingdotgg#8481)

* feat(server): accept PDF, ZIP, and other file uploads up to 50MB (pingdotgg#8235)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): toggle thread pin from the keyboard

Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.

* fix(web): add back button to project settings (pingdotgg#8168)

* refactor(mobile): compile semantic themes for Uniwind (pingdotgg#7327)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(desktop): Cache Runtime locally on WSL Filesystem, dramatically improving launch times  (pingdotgg#5769)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* fix(mobile): show OpenCode model sources in picker (pingdotgg#8573)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(clients): honor project default models in new threads (pingdotgg#6011)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(mobile): show file actions on Android (pingdotgg#8215)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(connect): explain DPoP connection failures (pingdotgg#8351)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(web): make the sidebar project filter a searchable combobox (pingdotgg#5931)

* fix(server): a draft can retry its first send after a failed bootstrap (pingdotgg#8226)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): stop hidden previews draining battery (pingdotgg#8567)

* fix(desktop): oauth popups open from the browser preview (pingdotgg#8435)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep long task drawers usable on small screens (pingdotgg#8313)

* fix(opencode): handle child approvals, stops, and model catalogs (pingdotgg#8480)

* fix: make thread auto-settling opt-in (pingdotgg#8321)

* fix(web): stop session activity timing test from blocking releases (pingdotgg#8585)

* fix(mobile): show composer menus when starting a task (pingdotgg#8587)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): show the configured stash shortcut (pingdotgg#8437)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* feat(web): add toggleable confirmation before unpinning a thread (pingdotgg#7313)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix: restore automatic thread settling defaults (pingdotgg#8596)

* fix(mobile): restore composer glass and rounded shadows (pingdotgg#8597)

Co-authored-by: Julius Marminge <julius@mac.lan>

* Remove Messages Glass Lab experiment (pingdotgg#8599)

* chore(release): prepare v0.0.36

---------

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: Josh <gitlucky@pipelab.org>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Tradi3 <56069280+krutftw@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Ivan Malison <IvanMalison@gmail.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Illia Panasenko <hello@ipanasenko.me>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Matheson Steplock <ikifar2012@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Anirudh Coontoor <anirudh@gosupernova.live>
Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Muhammad Waleed <114993336+walid-baharwal@users.noreply.github.com>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bcotrim pushed a commit to bcotrim/mognet that referenced this pull request Aug 30, 2026
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
AskPlays pushed a commit to AskPlays/t3code that referenced this pull request Sep 1, 2026
Upstream's reworked OpenCode interrupt path (pingdotgg#8480, merged in b99e491)
ends an aborted turn with only the informational turn.aborted runtime
event, which the orchestration lifecycle never consumes. The projected
session stayed "running" after the agent had actually stopped, so web
and mobile kept the turn looking active forever. Failed prompt
submissions leaked the same stuck state.

The adapter now pairs the abort marker with the terminal completion the
other providers already emit: turn.completed state "interrupted" for
user stops, and state "failed" with the error detail for failed prompt
submissions. Ingestion folds that into the thread session (ready, active
turn cleared), so clients settle the turn immediately.

Model: glm-5.3-flash via opencode
mwolson added a commit to mwolson/t3code that referenced this pull request Sep 1, 2026
OpenCode 2 talks to the host service, not a T3-managed isolate. Drop the
leftover pingdotgg#8480 process owner and CLI inventory tests, capture the process
spawner in the runtime layer, and stop passing a thread cwd into connect.
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
brentkelly added a commit to brentkelly/t3code-orchestrator that referenced this pull request Sep 2, 2026
* feat(analytics): threads and turns now know which client started them (pingdotgg#7774)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop marking mixed tool runs as failed (pingdotgg#7893)

* fix(web): command-click spaced folder links (pingdotgg#6439)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(chat): stop pushing follow-up messages to the top (pingdotgg#7897)

* test(desktop): remove redundant release note assertion (pingdotgg#7873)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): handle wide ordered-list marker edge cases (pingdotgg#7856)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ssh): restore user PATH for remote servers (pingdotgg#7213)

* fix(desktop): keep tailscale spawn defects from breaking advertised endpoints (pingdotgg#7116)

* fix(web): keep Codex service tier labels readable (pingdotgg#4503)

* fix: render workspace images in chat markdown (pingdotgg#6433)

* fix(clients): keep opening responses visible after turns settle (pingdotgg#7723)

* feat(web): add appearance contrast control (pingdotgg#7906)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(server): stop completed Codex threads from staying stuck on working (pingdotgg#7937)

* fix(mobile): preserve markdown image dimensions (pingdotgg#7940)

* fix(web): remove duplicate provider update progress (pingdotgg#7761)

* fix(server): fall back to the remote default branch instead of assuming main (pingdotgg#7078)

* fix(web): give sidebar project menu rows the same side padding as other menus (pingdotgg#7913)

* fix(clients): reconnect after credentials fail during remote server updates (pingdotgg#7953)

* feat(codex): submit thread feedback to OpenAI (pingdotgg#7949)

* fix(server): stop kills lingering Claude work (pingdotgg#5891)

* fix(ci): let Macroscope approve pull requests again (pingdotgg#7970)

* fix(clients): move settled pinned threads into the settled section (pingdotgg#7969)

* perf(ci): speed up release builds and Windows packaging (pingdotgg#7975)

* fix(web): stop tool calls from leaving a blank page in threads (pingdotgg#7971)

* fix(web): stop recovered tool failures from marking work logs red (pingdotgg#7999)

* fix(mobile): isolate markdown image requests (pingdotgg#7942)

* feat(web): redesign skills in `$` menu and in `/` menu (pingdotgg#8009)

* fix(web): restore right panel toggle clicks after closing on desktop (pingdotgg#8016)

* fix(web): keep server update banners flush with the composer (pingdotgg#8000)

* perf(web): reuse work log rows during streaming (pingdotgg#8006)

* fix(web): keep provider badge legible in dark themes (pingdotgg#7968)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): treat configured urls with uppercase schemes as secure (pingdotgg#8005)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(desktop): keep release notes visible while downloading (pingdotgg#6412)

* fix(web): show only providers with usage in usage views (pingdotgg#7563)

* fix(web): prevent expanded tool calls from hiding thread content (pingdotgg#8052)

* test(server): remove no-op live activity tests (pingdotgg#8056)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): clarify terminal sidebar grouping (pingdotgg#7967)

* fix(codex): show app access approval prompts (pingdotgg#8058)

* feat(web): upload image attachments before sending (pingdotgg#8048)

* fix(server): bound OpenCode skill discovery output (pingdotgg#7675)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(mobile): persist thread shelf collapse state (pingdotgg#5152)

* fix(mobile): restore Android tablet thread controls, clean up header (pingdotgg#5385)

* fix(mobile): land the first thread open above the composer on Android (pingdotgg#5585)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(server): check out submodules in a new worktree (pingdotgg#7674)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>

* fix(server): preserve merged PR badges after branch deletion (pingdotgg#6216)

* fix(server): return fresh live pull request reads (pingdotgg#6472)

* fix(web): compare client and server versions as semver, not strings (pingdotgg#7579)

* fix(web): stop follow-ups from leaving giant blank space (pingdotgg#8068)

* fix(marketing): stop automatic Vercel deployments on pull requests (pingdotgg#8070)

* chore: vouch repeat contributors (pingdotgg#8071)

* fix(server): keep the authoritative subagent model when snapshots race task_started (pingdotgg#7583)

* fix(server): honor auto-accept edits for the OpenCode provider (pingdotgg#7100)

* fix(server): run the CLI on Node versions without import.meta.main (pingdotgg#7141)

* fix(server): recover from provider interrupt failures (pingdotgg#7412)

* fix(server): recreate a thread's worktree before starting a turn (pingdotgg#7839)

* fix(server): thread delete no longer fails on already-removed worktrees (pingdotgg#8076)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop update notices showing through the composer (pingdotgg#8083)

* fix(web): detect outdated nightly servers (pingdotgg#8124)

* fix(web): align usage page skeleton layout (pingdotgg#8111)

* fix(web): make terminal links appear clickable only when clickable (pingdotgg#7488)

* fix(web): make Windows file links clickable in chat (pingdotgg#8081)

* fix(web): sort usage models by token count (pingdotgg#8108)

* fix: open agent file links in the file viewer (pingdotgg#8098)

* fix(server): stop routine events from rescanning thread history (pingdotgg#8150)

* fix(deps): stop pnpm installs from changing the lockfile (pingdotgg#8163)

* feat(web): settle and restore threads with a keyboard shortcut (pingdotgg#8089)

* perf(desktop): cut macOS signing calls by 81% (pingdotgg#8093)

* feat: link pull requests to threads (pingdotgg#8160)

* feat(web): safely attach HEIC photos as JPEG images (pingdotgg#8161)

Co-authored-by: mweinbach <maxweinbach5@gmail.com>

* feat(mobile): track device models and OS versions (pingdotgg#8169)

* fix(grok): bound cumulative tool output updates (pingdotgg#7279)

* fix(web): delay thread shortcut hints by 200 ms (pingdotgg#8172)

* fix(server): stop probing Cursor until enabled (pingdotgg#8175)

* docs(release): verify remote updates with database migrations (pingdotgg#8177)

* fix(server): keep provider CLIs available in the macOS service (pingdotgg#8173)

* feat(claude): compact old threads before they burn through usage (pingdotgg#8144)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(client-runtime): retry queries after connection interruption (pingdotgg#8117)

* fix(server): keep previously used providers working after upgrades (pingdotgg#8176)

* feat(desktop): build macOS previews from a PR label (pingdotgg#8182)

* fix(web): thread jump hints no longer stick after a dictation paste (pingdotgg#8189)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep grouped project renames (pingdotgg#7831)

* feat(web): reveal chat file chips in the system file manager (pingdotgg#7140)

Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(server): push no longer writes a feature branch's commits to its base branch (pingdotgg#8228)

* chore(deps): bump @clerk/electron to 0.0.37 (pingdotgg#8240)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(server): fetch legacy model classification from a hosted manifest (pingdotgg#8227)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore(release): prepare v0.0.34

* fix(desktop): let Clerk UI receive stable auth fixes (pingdotgg#8248)

* fix(app): un-settled threads return to the top of the list (pingdotgg#8231)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(ci): cut about a minute from every release (pingdotgg#8250)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(ci): download macOS preview DMGs without signing in (pingdotgg#8243)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(codex): accept Codex 0.150 multi-agent events (pingdotgg#8346)

* chore(release): prepare v0.0.35

* fix(grok): improve skills, plans, usage, and turn reliability (pingdotgg#8358)

Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>

* fix(server): recover stale Codex approval callbacks (pingdotgg#5195)

* test(server): remove duplicate missing worktree test (pingdotgg#8252)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(server): replay all un-applied events during projection bootstrap (pingdotgg#7538)

Co-authored-by: Theo Browne <me@t3.gg>

* test: remove low-signal test files (pingdotgg#8397)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* test: prune trivial error and layout tests (pingdotgg#8400)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* Fix Android adaptive launcher icon (pingdotgg#4332)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* feat(web): split provider settings into list and editor (pingdotgg#8380)

* fix(codex): accept Codex 0.150 account plans (pingdotgg#8447)

* fix(tooling): allow ignored-only staged changes (pingdotgg#8468)

* fix(mobile): keep iOS home header stable (pingdotgg#8467)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): stop showing red x summaries for ordinary tool failures (pingdotgg#8395)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): refine Git action toast glass styling (pingdotgg#8399)

* fix(desktop): allow preview automation in agent-created threads (pingdotgg#8483)

* test(web): remove redundant cache key test (pingdotgg#8484)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(release): move nightly schedule to minute 38

Recent scheduled nightlies have been delayed or skipped.

Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.

Authored by GPT-5.6 Sol with the Codex harness.

* fix(web): stabilize the provider settings editor (pingdotgg#8472)

* fix(web): open GitHub pull requests in browser when loading fails (pingdotgg#8507)

* fix(codex): show sub-agent models (pingdotgg#8502)

* feat(analytics): report connected client platforms (pingdotgg#8481)

* feat(server): accept PDF, ZIP, and other file uploads up to 50MB (pingdotgg#8235)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): toggle thread pin from the keyboard

Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.

* fix(web): add back button to project settings (pingdotgg#8168)

* refactor(mobile): compile semantic themes for Uniwind (pingdotgg#7327)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(desktop): Cache Runtime locally on WSL Filesystem, dramatically improving launch times  (pingdotgg#5769)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* fix(mobile): show OpenCode model sources in picker (pingdotgg#8573)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(clients): honor project default models in new threads (pingdotgg#6011)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(mobile): show file actions on Android (pingdotgg#8215)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(connect): explain DPoP connection failures (pingdotgg#8351)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(web): make the sidebar project filter a searchable combobox (pingdotgg#5931)

* fix(server): a draft can retry its first send after a failed bootstrap (pingdotgg#8226)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): stop hidden previews draining battery (pingdotgg#8567)

* fix(desktop): oauth popups open from the browser preview (pingdotgg#8435)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep long task drawers usable on small screens (pingdotgg#8313)

* fix(opencode): handle child approvals, stops, and model catalogs (pingdotgg#8480)

* fix: make thread auto-settling opt-in (pingdotgg#8321)

* fix(web): stop session activity timing test from blocking releases (pingdotgg#8585)

* fix(mobile): show composer menus when starting a task (pingdotgg#8587)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): show the configured stash shortcut (pingdotgg#8437)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* feat(web): add toggleable confirmation before unpinning a thread (pingdotgg#7313)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix: restore automatic thread settling defaults (pingdotgg#8596)

* fix(mobile): restore composer glass and rounded shadows (pingdotgg#8597)

Co-authored-by: Julius Marminge <julius@mac.lan>

* Remove Messages Glass Lab experiment (pingdotgg#8599)

* chore(release): prepare v0.0.36

* Require human review for pull requests changing product defaults (pingdotgg#8603)

* fix(codex): avoid quadratic app-server input buffering (pingdotgg#8605)

* fix(mobile): stabilize iOS header item transitions (pingdotgg#8607)

Co-authored-by: Julius Marminge <julius@mac.lan>

* chore(mobile): upgrade to Expo SDK 57 (pingdotgg#8609)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(mobile): harden native header toolbar items (pingdotgg#8611)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): stop querying Claude context usage after turns (pingdotgg#8610)

* chore: vouch ryanrhughes (pingdotgg#8613)

* feat(web): attach PDFs, ZIPs, and other files to a turn (pingdotgg#8236)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): pass stashShortcutLabel in the mixed-attachments stash test

PRs pingdotgg#8437 and pingdotgg#8236 crossed: one made stashShortcutLabel a required
ComposerStashMenu prop, the other added a test case without it, so
main fails web typecheck.

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

* feat(web): keybinding settings as settings rows (pingdotgg#8532)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat: let an environment publish themes as a file (pingdotgg#8569)

Co-authored-by: Theo Browne <me@t3.gg>

* fix(web): clean up provider settings list and editor (pingdotgg#8504)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep project picker popup inside the sidebar (pingdotgg#8627)

* fix(mobile): prevent header overflow and back-button artifacts (pingdotgg#8624)

* fix(server): retry automatic thread title generation (pingdotgg#8087)

* fix(client-runtime): refresh edited pull request comments (pingdotgg#8094)

* fix(web): four composer spacing defects (pingdotgg#8090)

* perf(desktop): skip duplicate browser updates (pingdotgg#8018)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): render nested markdown images correctly (pingdotgg#8501)

* fix(web): unify activity logs and composer banners (pingdotgg#8693)

* fix(mobile): reduce dev-client reload and Metro startup cost (pingdotgg#8694)

Co-authored-by: Julius Marminge <julius@mac.lan>

* revert(web): restore previous composer banners (pingdotgg#8733)

* test(web): remove tests for unreachable helpers (pingdotgg#8738)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* feat(mobile): update tool summaries and chat transitions (pingdotgg#8793)

* feat(web): play video attachments in chat (pingdotgg#8688)

* fix(web,mobile): snooze menu no longer offers the same wake time twice (pingdotgg#8741)

* fix(grok): allow model changes in existing threads (pingdotgg#8392)

Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>

* feat(mobile): pick, share, and receive files in threads (pingdotgg#8237)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): reduce title bar scroll fade height (pingdotgg#8799)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(windows): strip quotes from repaired PATH (pingdotgg#8746)

* fix(web): open agent images in expanded preview (pingdotgg#8807)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(git): follow repository instructions in generated source control text (pingdotgg#8804)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): stop overpricing cached Claude tokens (pingdotgg#8806)

* fix(web): keep image preview above sidebar control (pingdotgg#8811)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): keep right panel synced with agent edits (pingdotgg#8803)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web,mobile): render Codex citations and artifact templates (pingdotgg#8584)

* chore: add Windows setup script to t3.json (pingdotgg#8814)

* fix(web): fold interim turn responses (pingdotgg#8828)

* fix(web): use circle alert for failed tool calls (pingdotgg#8840)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(mobile): add offline iPhone voice input (pingdotgg#8614)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): prevent pull request metadata overlap (pingdotgg#8790)

* chore(release): prepare v0.0.37

* Add mobile composer attachment menu with video support (pingdotgg#8843)

* fix(mobile): map native menu icon colors explicitly

* fix(web): restore unified activity logs and composer banners (pingdotgg#8734)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>

* fix(web): address composer banner review follow-ups (pingdotgg#8850)

* fix(web): widen sync banners and simplify the working timer (pingdotgg#8855)

* fix(preview): improve browser recording quality (pingdotgg#8839)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): mark pull request links as external (pingdotgg#8856)

* fix(mobile): replace Callstack glass with Expo glass (pingdotgg#8862)

* fix(server): skip IDE detection in Claude probes (pingdotgg#8634)

* chore(macroscope): review diagnostic overrides (pingdotgg#8917)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* fix(contracts): accept CLI event origins (pingdotgg#8905)

* fix(web): hide invalid slash skill completions (pingdotgg#8904)

* fix(mobile): defer draft navigation until submission completes (pingdotgg#8914)

* chore: disable CodeRabbit review status (pingdotgg#8933)

* Delete app.json (pingdotgg#8934)

* fix(web): show scrollbar for wide markdown tables (pingdotgg#8868)

* fix(mobile): shimmer active tool rows (pingdotgg#8932)

Co-authored-by: Julius Marminge <julius@mac.lan>

* chore(deps): bump Electron to 43.4.1 (pingdotgg#8626)

* fix(chat): smooth worktree setup status (pingdotgg#8922)

* feat(mobile): add video playback with native iOS controls (pingdotgg#8919)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): prevent chat metadata overlap (pingdotgg#8851)

* fix(server): preserve usage cache outside walked roots (pingdotgg#8540)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(mobile): add native image and PDF previews (pingdotgg#8959)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): allow long thread IDs in HTTP routes (pingdotgg#8898)

* fix(shared): preserve Windows shell PATH priority (pingdotgg#8748)

* fix(web): make WSL settings searchable (pingdotgg#8881)

* feat(web): add expand/collapse all control to the files surface (pingdotgg#8889)

* Add auto_review configuration to coderabbit.yaml

* style: format CodeRabbit configuration

* feat(mobile): upload attachments while composing (pingdotgg#8978)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(chat): keep agent activity visible between actions (pingdotgg#8984)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): isolate remote web session cookies (pingdotgg#8085)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(pull-requests): link GitHub references in markdown (pingdotgg#8812)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* perf(server): reduce frequency of full tool call output being loaded into memory from db (pingdotgg#8988)

* feat(web): add pull request list filters (pingdotgg#8809)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(web): search individual settings by detail (pingdotgg#8831)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(client): render viewed images in work logs (pingdotgg#8936)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(client): use package import for markdown image helpers (pingdotgg#9010)

* test: remove static presentation snapshots (pingdotgg#9008)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* perf(server): bound snapshot activity payload memory (pingdotgg#9000)

* perf(server): cut idle CPU use and stop provider event leaks (pingdotgg#8187)

* perf(server): scan only appended transcript bytes for usage summaries (pingdotgg#9024)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* perf(server): cut chatty tool-update frames by 90% (pingdotgg#8368)

* fix(server): settle threads server-side (pingdotgg#8600)

* fix(clients): dedupe skills in composer menus (pingdotgg#8043)

* fix(server): stop OpenCode child sessions (pingdotgg#9005)

* perf(web): defer pull request line stats until visible (pingdotgg#6471)

Co-authored-by: Theo Browne <me@t3.gg>

* perf(server): skip full-message reads while streaming (pingdotgg#9032)

* perf(client-runtime): halve server config bootstrap traffic (pingdotgg#8367)

Reuse one server config subscription for session bootstrap and live updates.

Preserve environment theme opt-in, replay, deletion, slow subscriber recovery, and config stream failure handling.

Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>

* fix(web): align un-settle banner action (pingdotgg#9033)

* fix(web): block type-to-focus behind open dialogs (pingdotgg#8139)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(shortcuts): copy active thread reference (pingdotgg#8994)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(mobile): keep thread scroll bounds current after animations (pingdotgg#9013)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): cache project favicon resolution (pingdotgg#9080)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(claude): add Claude Fable 5.1 model (pingdotgg#9078)

* fix(preview): restore recording and macOS rendering after Electron 43 (pingdotgg#9001)

Co-authored-by: Guillermo Casanova <guillermo.casanova.b@gmail.com>

* feat(desktop): add configurable quit shortcut confirmation (pingdotgg#9076)

* feat(web): open project settings from thread menus (pingdotgg#8925)

* fix(chat): reuse one row for live activity (pingdotgg#9062)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(models): discover Claude models from remote manifest (pingdotgg#9084)

* Revert "fix(chat): reuse one row for live activity" (pingdotgg#9096)

* fix(web): sync sidebar PR state from open panel (pingdotgg#9092)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): changing projects no longer creates a draft (pingdotgg#9097)

* fix(web): keep theme placeholder text dimmer than entered text (pingdotgg#9104)

* fix(web): keep the selected environment when changing projects (pingdotgg#9102)

* docs(plans): t3o-31 upstream sync to v0.0.38

* fix(board): clear the ten pre-existing typecheck errors before the upstream sync (t3o-31 P0)

Two test fakes failed with a bare Error in the Effect failure channel, a
closure-assigned let narrowed to never, and a single-override pill read
overriddenRows[0] under noUncheckedIndexedAccess. None changed behaviour;
they were masked because the recursive typecheck never reached apps/server.

* fix(sync): the three type errors and two test failures the v0.0.38 merge caused

- BoardModelRow reads planModeEnabled from client settings, as the composer does.
- findBranchPullRequest resolves the default branch for upstream's widened PR
  cache key instead of passing null.
- The orphaned-session integration test mocks the supervisor reactor that the
  startup seam yields (new inventory row).
- The projection resume test seeds board projector watermarks into
  boards.projection_state, where t3o-26 reads them, and asserts over the union.
- searchSettings("work") now also matches upstream's worktree/network items.

* refactor(board): native title attributes become BoardHint tooltips

Upstream's new no-native-title-tooltip rule flags every intrinsic-element
title= in the board (61 sites). BoardHint wraps the styled Tooltip primitive
and renders its child as the trigger, so layout is unchanged; a nullish label
renders the child alone.

* docs(seams): record the v0.0.38 sync (t3o-31)

Merge-log row, the decisions taken (plans stay tracked, upstream's settlement
reactor accepted after audit, projector-enumeration policy, launcher protocol
note), an unmarked-edits debt table for the next sync, a marker census, the
three new upstream workflows to disable, and the runbook's per-package
verification notes.

* review(t3o-31): announce the board's status dots, and order the merge log

Round-1 nitpicks: a bare span's aria-label is not announced, so the working,
running and awaiting dots now carry role="img"; the v0.0.38 merge-log row
moves below the two 2026-08-09 rows so the table reads chronologically.

---------

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: abcdmku <63693423+abcdmku@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Naveed Iqbal <naveediqbal949@gmail.com>
Co-authored-by: Ishaan Kothari <ishaanko.mail@gmail.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com>
Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>
Co-authored-by: spiky02plateau <155588579+spiky02plateau@users.noreply.github.com>
Co-authored-by: Carlos Jimenez <cjimenez@r21digital.com>
Co-authored-by: Mark Griffin <mrmg@deflexion.net>
Co-authored-by: MacKinley Smith <smithmackinley@gmail.com>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Mohtasham Murshid <154406804+MohtashamMurshid@users.noreply.github.com>
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: Josh <gitlucky@pipelab.org>
Co-authored-by: Tradi3 <56069280+krutftw@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Ivan Malison <IvanMalison@gmail.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: Illia Panasenko <hello@ipanasenko.me>
Co-authored-by: Matheson Steplock <ikifar2012@users.noreply.github.com>
Co-authored-by: Anirudh Coontoor <anirudh@gosupernova.live>
Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com>
Co-authored-by: Muhammad Waleed <114993336+walid-baharwal@users.noreply.github.com>
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
Co-authored-by: Vitaly Iegorov <vitalyiegorov@gmail.com>
Co-authored-by: Ahmed Besic <ahmed.besic2000@gmail.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: Matthew Feroz <136640686+MatthewFeroz@users.noreply.github.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Will Sheldon <will@autimo.com>
Co-authored-by: mic <85814106+q1@users.noreply.github.com>
Co-authored-by: Guillermo Casanova <guillermo.casanova.b@gmail.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Ports the v2-applicable half of #8480 (the v1 adapter rewrite was not
carried; this branch's OpenCode path is OpenCodeAdapterV2). Permission
and question asks from child sessions — task subagents and their
descendants — were dropped because the adapter only looked up root
thread sessions. Related sessions now map back to the owning root
state (registered from task parts and session.created/updated parent
chains), and an ask that arrives before the relation is known resolves
it inline via session.get with a short forked backoff, then surfaces
the approval on the root turn. Replies already route by native request
id. Interrupts now tolerate the abort racing turn settlement instead
of failing the stop.

Covered by a new opencode_child_approval replay fixture where the
child asks for bash permission before the task part reveals the
relation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:XXL 1,000+ changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant