Skip to content

chore: sync with upstream (2026-11-08) - #94

Merged
riccardovandra merged 678 commits into
mainfrom
sync/upstream-2026-11-08
Nov 8, 2026
Merged

riccardovandra merged 678 commits into
mainfrom
sync/upstream-2026-11-08

Conversation

@riccardovandra

Copy link
Copy Markdown
Owner

What's new from upstream

New features

Providers

Threads and sessions

Voice

Secrets and policy

Pull requests and source control

Web, desktop and mobile

Bug fixes

Providers and agents

Threads and orchestration

Web and desktop

Mobile

Server, remote and auth

Source control

216 smaller fixes are not listed individually; see the commit list for the full set.

Other notable changes

Performance: server startup and recovery

Performance: memory and storage

Performance: pull requests

Performance: streaming and clients

Performance: providers and processes

Refactors

Build and dependencies

Reverts

Docs

Merge details

Commits merged: 677 upstream commits (origin/main..upstream/main, up to dff0b1159b), 667 of them from upstream PRs. Merge commit on sync/upstream-2026-11-08.

Conflicts (25 files) and how each was resolved

Server

  • apps/server/src/bin.ts: upstream moved the CLI fast paths into binMain.ts behind a new service launcher. Took upstream's bin.ts and moved the fork's skills-cli fast path into binMain.ts.
  • apps/server/src/mcp/McpHttpServer.ts: upstream's layerMcpTransport now takes the tool registrations and adds layerInProcessMcpServer. Kept the fork's Docs, AI PM, MCP servers, skill trash and skill library toolkits and the /mcp/upstream/:serverId route; they are now passed into layerMcpTransport(...) with upstream's tools, and the upstream route is merged beside it.
  • apps/server/src/ws.ts: upstream added a settings-client argument to layerWsRpc; applied it to the fork's chain that merges the fork RPC layers. Upstream also renamed the request URL variable, so the MCP OAuth origin now reads url.value.origin.
  • apps/server/src/serverSettings.ts: kept the fork's MCP secret redaction inside upstream's new redactServerSettingsForClient(settings, client) signature, and the fork's patch-builder form of updateAndPersistSettings inside upstream's echoed-secret-reference restore.
  • apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts: took upstream's archived-thread retry for thread/fork, with the fork's effectful threadRuntimeParams (user MCP servers) in the shared fork request.
  • apps/server/src/provider/agentContextBudget.json: re-measured. New values: Claude append 7064, Codex context 8790, MCP tool list 51163 bytes.
  • Tests (serverSettings.test.ts, ProviderSessionManager.test.ts, runtimeLayer.test.ts, mcp/toolkits/project/handlers.test.ts): kept both sides' tests and imports; fork redaction tests pass { secretReferences: true }.

Packages

  • packages/contracts/src/settings.ts: kept the fork's MCP server and disabled-skills settings beside upstream's speech settings, and both scope rules (fork: project MCP servers need provider scope; upstream: removing a secret provider needs settings scope).
  • packages/provider-core/src/server/orchestrationInstructions.ts: combined the secret line. Upstream's wording ("A login, token, PIN or pairing code only the user can give... Not for access you have") plus the fork's secretRef, delivery: "file" and /secret NAME button guidance. Kept the fork's thread-link fallback.
  • packages/provider-opencode/src/server/v2/adapter.ts: upstream replaced Crypto with Digest; ported the fork's upstream-hub and user MCP prefix helpers to Digest.sha256.
  • packages/shared/src/toolOutput.ts: kept the fork's docOpenFromToolItem and upstream's previewRecordingIdFromToolItem, and both imports.

Web

  • ChatView.tsx: upstream wrapped the composer in a new container and re-indented it; took upstream's layout and re-added the fork's skillsProjectId prop.
  • Sidebar.tsx: kept the fork's folder-aware project-scope rows (checkbox plus favicon) over upstream's ProjectScopeRowIcon, which the fork removed. Applied upstream's legacySidebarEnabled condition to the new-thread hint while keeping the fork's single-project-scope check.
  • shortcuts/chatRouteCommands.ts: took upstream's legacySidebarEnabled-only condition; kept settings for the fork's scoped new-thread lookup.
  • chat/ChatComposer.tsx, composer-logic.ts: kept the fork's /secret command and upstream's new /clear command.
  • settings/settingsSearch.ts: kept the fork's "Usage limit failover" entry; dropped "Cursor account usage" because upstream removed it (fix(cursor): use the SDK account for usage data pingdotgg/t3code#32448).
  • reopenClosedView.ts and its test: kept both imports; kept the fork's AI PM restore test and took upstream's rewritten file-tab tests.
  • routeTree.gen.ts: regenerated with the TanStack router generator so the fork's /ai-pm, settings/tools, settings/mcp-servers routes and upstream's new routes are all present.

Mobile

Changes needed beyond the conflict markers

  • Effect crypto split. Upstream's Effect bump removed effect/Crypto. Ported six fork server modules: random IDs and bytes now use SecureRandom (McpServerOAuth, McpServerRegistry, DocCommentsService, SkillTrash), hashes use Digest (DocCommentDelivery, SkillLibrary). Fork tests now provide NodeCrypto.layer next to NodeServices.layer.
  • Mobile settings. Upstream removed SettingsEnvironmentFilterHeader and SETTINGS_PAGE_OPTIONS. The fork's MCP servers settings screen now uses useSettingsEnvironmentMenu() and settingsPage("MCP servers").
  • Tests adapted to upstream changes. The new upstream ws publish test serves WsRpcGroup.omit(...FORK_RPC_METHODS) (exported from ws.ts), as the fork's other ws tests do. The fork's Claude user-tools test stub gained the four new query-session methods and uses random: instead of crypto:. The fork docs-tool tests use layerInProcessMcpServer.
  • Lint fixes needed for the pre-commit hook. These were already failing on the fork's main: shortened four over-long comments (SkillLibrary.ts, SkillTrash.ts, DocCommentDelivery.ts), removed nine per-test timeouts in SkillLibrary.test.ts (the project timeout is already 120 s), and added two processEnvInEffect exemptions in ChatCommandRunner.test.ts.

Judgment calls worth a look

  • Fork bug fixed: t3_project_folders_list (added in feat: group sidebar projects into folders #92) is read-only but was missing from CLAUDE_READ_ONLY_T3_MCP_ALLOWED_TOOLS, so the allowlist test failed. Added it.
  • Fork test fixed: ChatMarkdown.browser.test.tsx expected onRunShellCommand("echo hello"), but the fork's run-code-block feature passes "terminal" as the target. This also failed on the fork's main. Updated the assertion.
  • The orchestration instructions keep the fork's [title](t3-thread://v1/<id>) fallback, which upstream dropped in favour of always using link.

Verification

  • node scripts/fork-brand.ts --check: passes (branding applies cleanly to 202 files).
  • vp run typecheck: passes in apps/server, apps/web, apps/mobile, packages/contracts, packages/shared, packages/provider-core, packages/provider-opencode, packages/client-runtime.
  • Fork test files (86 files across server, web, mobile, client-runtime, providers, shared) plus tests next to conflicted files: everything passes except:
    • ServerEnvironment.test.ts "publishes proven install ownership": a known upstream failure on macOS.
    • OpenCode2OrchestratorV2.integration.test.ts: 6 tests fail with a replay mismatch (event.subscribe sent before session.create). The same 6 fail on the fork's current main (8a16b90e6e), and all pass on pristine upstream, so this predates the merge and comes from the fork's OpenCode MCP changes. Not fixed here.
    • apps/desktop update tests could not run: Electron is not installed in this worktree. This is an environment issue.
  • Pre-commit hook (format, lint, knip) passes on the merge commit.

Not done

  • vp run check:changed and repo-wide checks were not run. Against main, the diff covers the whole 677-commit merge.
  • No dev server or real-client pass was run.

Model and harness: Claude Opus 5.5 (claude-opus-5-5) in Claude Code, run from T3 Code.

🤖 Generated with Claude Code

juliusmarminge and others added 30 commits November 5, 2026 15:01
…e from a secret provider (pingdotgg#31652)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the platform options

Stack.tsx built every route from hand-merged constants with 29 Platform.OS checks,
and sheets patched their own corner radius, Android fit-to-content and swipe guard
from inside the screen. Detents had drifted between routes.

- pageRoute, sheetRoute, modalRoute and immersiveRoute own header appearance,
  detents, the Android card/full-screen fallback, corner radius and fit-to-content.
- The Android navigator hides the native header for every route from the first
  frame; screens always draw their bar in-tree.
- One isPresentedRoute replaces six copies of the presentation check.
- SheetHeader takes typed actions and owns the swipe guard for dismissDisabled.
- The legal document and Environments sheets use SheetHeader/AppBar instead of
  raw header options; Environments' add button was invisible on iOS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Five features built their own native stacks, each with its own header recipe and
liquid-glass check, only to get a bar: Thread settings, Custom snooze, the iOS
sidebar column, the browser, and the thread preview. Agents, Background work and
Queued hand-built a ScreenStack with no close button.

- useSheetStackOptions gives a stack nested in a sheet the sheet route's bar.
- StandaloneStack hosts a native bar outside the route tree (popover, sidebar
  column); sidebar-navigation-shell is gone.
- The thread preview gets a Thread route of its own (ThreadPreviewRoute, next to the
  inspector preview) that draws no native UI.
- The browser route has its own bar, and draws one SheetHeader instead of two bars.
- Agents, Background work and Queued use the route header and SheetHeader, which
  gives them a close button on iOS.
- SheetHeader takes menus, matching AppBar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…th platforms

About 50 feature screens wrote their bar twice (iOS header options or Toolbar
items, plus an Android-only embedded AppBar), branched on Platform.OS and
liquid-glass support for chrome, and guessed the bar height four different ways.

- AppBar loses its `options` escape hatch and gains onClose, confirm, guardBack,
  onBackToList and onCompose; menu items can be destructive. Search sheets,
  form sheets and modals use the same AppBar as pages.
- useBarInset, useBarOverlap, useContentTopInset and useSearchToolbarInset replace
  HeaderHeightContext and insets.top + 44/48/72 math in features.
- ScreenContent keeps the Android split-view edge gap by default.
- The thread bar is one AppBar with one git menu; the three copies disagreed about
  "Merge back".
- Settings filter menus, Usage, Files, ZIP and attachment viewers, PR detail,
  discussion and guide screens, git sheets, search sheets and thread settings
  each declare actions, menus and search once.
- useOpenWorkspaceDetail replaces Android selectDetail vs iOS push branches.
- Fixes: Files error states had no bar; GitConfirm had no bar on iOS; Android
  never showed "Move draft to this line"; thread settings Save/Done differed
  between platforms; "Switching branch" had no back button on Android.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ist header

The workspace shell (tabs, dock, toolbars, root screens) sat in features/workspace,
so its legitimate platform branches looked like feature code. Home's thread list
and the iPad sidebar each built the same brand, search and filter header from raw
native options.

- features/workspace moves to features/layout/workspace, with the Android
  pull request app bar.
- WorkspaceListHeader draws the list header from typed data on both platforms;
  brand-title options, sidebar header items and the split empty detail move into
  the shell. Home and the sidebar share one filter menu definition.
- docs/internals/mobile-layout.md describes route presets, the shell's location
  and the AppBar/inset contract.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r falls back to another account (pingdotgg#31646)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ce (pingdotgg#31670)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… it (pingdotgg#31651)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…1654)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: UtkarshUsername <putkarsh184@gmail.com>
…0623)

Co-authored-by: UtkarshUsername <putkarsh184@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…31059)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…g#31642)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
pingdotgg#28487)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
…#30453)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
…gdotgg#27699)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…dotgg#27682)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Yash-Singh1 and others added 29 commits November 7, 2026 05:41
…#19659)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Honey Paptan <hpaptan@gmail.com>
…ngdotgg#19660)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Remove Cursor CLI credential and macOS Keychain fallbacks for account usage and limits, including their settings and web/mobile prompts. Preserve usage through the Cursor SDK sign-in, CURSOR_API_KEY exchange, and explicit auth tokens for limits.

Verified focused Cursor tests and full CI on the final head. The scope and intended loss of usage for CLI-only environments were explicitly approved by the maintainer.

Model: GPT 6.1 Sol. Harness: Codex through T3 Code.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gdotgg#32401)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…d Escape to the PTY (pingdotgg#32666)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#27941)

Co-authored-by: Orin <orin@orin.ws>
Co-authored-by: maria-rcks <maria@kuuro.net>
…s the thread (pingdotgg#28454)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gg#27541)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…etails card (pingdotgg#27582)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…in folders (pingdotgg#25883)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#32266)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…g#28255)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…tgg#26737)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…ges (pingdotgg#32833)

Agents can pass `path` to an absolute .html file instead of retyping the
page as inline `html`. The server reads the file only for full-access
threads, with the existing disk-read guards, and snapshots it at publish.
ACP render recovery matches path calls by path. The mcp-tool-use eval
grades pages passed by path.

Takes over pingdotgg#32817.

Co-authored-by: Stoli Geyer <stoli@tractorbeam.ai>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#32242)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Resolve 25 conflicts, port fork code to upstream's split Effect crypto
modules and refactored MCP transport, mobile AppBar header and settings
filter, and refresh the agent context budget.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@riccardovandra
riccardovandra merged commit 98453f4 into main Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.