Repository navigation
chore: backport upstream server fixes (2026-09-29) - #244
Merged
Merged
Conversation
…th failed repacks (pingdotgg#13812) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit 95030dc)
…gdotgg#13684) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit 8aa5be2)
A failed prepare (missing table during startup, a transient exclusive lock) was cached for the full 10 minute TTL, so every later run of the same query failed without retrying. Failures now expire immediately while successful prepares keep the normal TTL. Ported from pingdotgg#10584 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…otgg#13720) Co-authored-by: Claude <noreply@anthropic.com> (cherry picked from commit c216ba4)
The shell and archived shell snapshots were assembled from rows that were already schema-decoded, then decoded again as a whole. The RPC and HTTP layers encode the result on the way out, so the second decode only cost time on every thread list load. Ported from pingdotgg#13693 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Stopped provider session rows are kept for their resume cursors, so long-lived installs accumulate thousands. Shutdown rewrote every one of them. It now skips rows that are already stopped with no active turn and records the count it actually stopped as `stoppedSessionCount`. Ported from pingdotgg#13688 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 29a3266)
…otgg#13651) (cherry picked from commit 4408bf5)
On Windows every editor lookup probed PATH x PATHEXT candidates with a stat each, which is slow enough on long PATHs that discovery could time out and installed editors vanished from the list. Editor discovery now lists each PATH directory once (relisting it when its mtime changes) and only probes names that are actually present. Ported from pingdotgg#13669 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Settled threads kept every terminal shell alive, holding their worktrees open. TerminalManager gains `closeIdle`, which re-inspects each running terminal and closes only those sitting at an idle prompt (no subprocess and no input or output during the check). The provider command reactor calls it on `thread.settled` when the thread is still settled. Ported the settle half only: the fork has no setup-script completion observation to hang the setup-shell close on, and the upstream async prompt helper detection depends on its process-table inspector. Ported from pingdotgg#13673 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The reaper listed and decoded every provider session row each sweep, then
ignored the stopped ones, which far outnumber live sessions on long-lived
installs. `listBindings({ excludeStopped: true })` now filters them in the
query.
Ported the session-reaper part only; the Connect relay changes do not apply.
Ported from pingdotgg#13774
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Every emitted ACP tool update closed the active assistant segment, so a background command reporting progress or finishing mid-answer split one Cursor or Grok reply (for example a markdown table) into several messages. Only the first time a tool call is shown now counts as a boundary; later progress and repeated completions for a recently shown call do not. Ported only the shownToolCallIds logic; the fork lacks upstream's tool update throttling. Ported from pingdotgg#13386 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-fixes-2026-09-29
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
Backports a batch of upstream server stability and speed fixes from pingdotgg/t3code (
upstream/mainat d2c9281). Each fix is its own commit. Cherry-picks keep the-xtrailer, and hand-ports carryPorted from pingdotgg/t3code#NNNN.Landed
Cherry-picked (conflicts resolved to keep the fork's structure):
--no-auto-gc, so a failing auto-gc can no longer leavetmp_pack_*files on every pollPRAGMA journal_size_limit(32 MB) shrinks the WAL back after large writes. Placed after the fork'sforeign_keysPRAGMAssh://host:port/...remotes use the hostname only, so the SSH port no longer ends up in the provider's HTTPS URLHand-ported:
Cache.makeWithuses an exit-based TTL (in the fork'sapps/server/src/persistence/NodeSqliteClient.ts)runStopAllskips rows that are already stopped with no active turn. The analytics property is nowstoppedSessionCount. The test is adapted because the fork has no recording analytics helperwithPathDirectoryListings: each PATH directory is listed once, relisted when its mtime changes, and only names that exist are probed. The fork has noCommandResolutionCache, so the test drops itTerminalManager.closeIdlere-inspects each running terminal and closes only the ones at an idle prompt (no subprocess, and no input or output during the check).ProviderCommandReactornow handlesthread.settledand calls it while the thread is still settledlistBindings({ excludeStopped: true })filters stopped rows in SQLshownToolCallIdslogic. Only the first time a tool call is shown splits the assistant segment. Later progress and repeated completions for that call no longer split the reply. I confirmed the new test fails without the fixSkipped or partial, and why
ProjectSetupScriptRunnerhas no completion-sentinel observation to attach the close to. The upstream async-prompt helper detection inderiveSubprocessInspectResultdepends on its process-table inspector, which the fork lacks. Without it, a terminal whose prompt theme forks a helper process stays open, which is the safe direction. The upstream settle also stops the session withonlyIfSettled, but that needs a contracts change, so it is not ported.Verification
tsgo --noEmitpasses forapps/serverandpackages/sharedvp test runon the touched suites: Sqlite, NodeSqliteClient, ProviderService, ProviderSessionDirectory, ProviderSessionReaper, projector, projector.settled, ProjectionSnapshotQuery, ProviderCommandReactor, ProjectSetupScriptRunner, terminal Manager, AcpJsonRpcConnection, externalLauncher, opencodeRuntime.cliParsers, shared shell and sourceControl. All pass locally.GitVcsDriverCore.test.ts: the new--no-auto-gctest passes. One test fails locally, "preserves newline characters in worktree paths", because Windows can't create paths containing newlines. It is unrelated to this change.CursorAdapterandGrokAdaptertests fail locally withspawn EFTYPE, because Windows can't spawn the shebang mock agent directly. This is an environment issue, so CI is the real check.parseChangelog.test.tspasses.vp lintandvp fmtare clean on the changed files.vp run check:avicodepasses.🤖 Generated with Claude Code