Repository navigation
feat: upstream extras (background sync, run code blocks, Codex instructions, polish) - #245
Merged
Merged
Conversation
Ported from pingdotgg#13554 The fork has no per-environment enabled flag, so the keep-alive follows every environment in the connection catalog, the same set the shell atoms enumerate. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Ported from pingdotgg#13060 A Run button appears on finished, single-line sh/bash/zsh/fish/shell/ powershell/pwsh blocks in assistant messages and types the command into the thread terminal through runProjectScript. The command is sent as-is, so on Windows a bash-labelled block runs in the terminal's PowerShell, exactly as if the user had pasted it. The detection lives in runnableCodeBlock.ts with a focused test. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Ported from pingdotgg#13547 Newer Codex models ship their own collaboration mode text in the model catalog, and Codex then drops the client's developer_instructions. The runtime info and the collaborative browser guidance now ride in turn/start additionalContext, which every model receives; the mode prompt stays in developer_instructions for models that still read it. Compaction drops additionalContext messages and Codex only resends an entry when its value changes, so a root thread compaction re-injects the last turn's context via thread/inject_items. Upstream's device tool text, model display names, and RuntimeInstructions module are not ported. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Ported from pingdotgg#13551 The thread sync pill now shows only once a sync lasts past a short delay, and holds for a minimum time once shown. The timing logic is the pure client-runtime delayed-status helper; ChatView wraps its phase in useDelayedStatus keyed by the thread. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Ported from pingdotgg#13516 A tracker in the app shell remembers the last main app URL. Back and Escape on settings, usage, and the changelog navigate there instead of stepping through browser history, which could land on another settings or utility page. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Ported from pingdotgg#13590 The thread exists while the server is still creating its worktree but has no worktree path yet, so the locked toolbar label read as the local checkout. ChatView now resolves worktree mode while a worktree is being prepared and always hands its env mode to the branch toolbar, whose locked label and icon show New worktree for that state. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Ported from pingdotgg#12962 Each running-terminal pulse is pinned to the document timeline when it starts, so the icons in SidebarV2, the sidebar thread rows, and the trailing status share one cycle. The work happens once per animation start, with no timer or frame loop, and the pulse now respects prefers-reduced-motion. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…2026-09-29 # Conflicts: # CHANGELOG.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Seven upstream t3code changes ported onto the fork, one commit each.
Landed
RunningThreadKeepAliveis mounted in__root.tsxon Electron. It mounts the thread state atom only for threads whose session is starting or running, and keeps a stopped thread mounted until its own detail stream is live and shows the stop. The fork has noenabledEnvironmentIds, so the environment set comes from the connection catalog, the same set the shell atoms enumerate. Its identity only changes when an environment is added or removed. Test:apps/web/src/state/threads.test.ts.sh/bash/zsh/fish/shell/powershell/pwshfences in assistant messages. It types the command into the thread terminal throughrunProjectScript, using a ref so the callback stays stable and memoized rows don't re-render. The detection is inchat/runnableCodeBlock.tswith a focused test. It rejects multi-line blocks, trailing backslashes, and control or bidi characters. On Windows the terminal is pwsh, so abashblock runs there exactly as if you had pasted it. This matches upstream: there's no shell translation.turn/start.additionalContext(avi_code_runtime,avi_code_tools), which every model receives. The mode prompt stays indeveloper_instructions, so older models behave as before; upstream also sends both paths on every model. After a root thread compacts, the last context is re-injected withthread/inject_items. Child agent compactions are ignored. Not ported: upstream's device tool text, model display names, andRuntimeInstructions.ts.client-runtime/delayed-statushelper and upstream's test, plus auseDelayedStatushook around theThreadSyncStatusPillphase in ChatView. Logic that depends on the real phase still readsthreadSyncPhase.mainAppLocation.tstracks the last main app URL. Settings, usage, the changelog route, and the settings sidebar Back button all go there.resolveEffectiveEnvModetakespreparingWorktree, andresolveLockedWorkspaceLabeltakes the env mode. ChatView always passes its env mode toBranchToolbar. Logic tests are updated.synchronizeTerminalPulseruns once when each animation starts (no timer, no frame loop). It's wired into SidebarV2, SidebarThreadRow, and ThreadStatusIndicators. The pulse is nowmotion-safe:.Skipped
None.
Verification
vp test runon every touched test file: 10 files, 165 tests pass.tsgo --noEmitfor apps/web, apps/server, and packages/client-runtime: clean.vp lintandvp fmton changed paths: clean. The remaining ChatMarkdownno-unstable-nested-componentswarnings were already there.vp run check:avicodeand theparseChangelogtest pass.### Upstream t3codesection under Unreleased.No contract schema changes and no migrations.
🤖 Generated with Claude Code