Sync upstream t3code (2026-08-25) - #106
Merged
Merged
Conversation
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.
Ports 19 of the 30 upstream commits in
b4be33f07..99960383d.What came in
Server reliability
task_startedno longer overwrites the authoritative model (fix(server): keep the authoritative subagent model when snapshots race task_started pingdotgg/t3code#7583)import.meta.mainis undefined and the CLI silently exited 0 (fix(server): run the CLI on Node versions without import.meta.main pingdotgg/t3code#7141)Attachment pre-upload (pingdotgg#8048)
Images upload while you are still typing, with a per-image queue, progress and retry affordances, a server upload endpoint, and cleanup of orphaned uploads when a dispatch fails.
Web
Intentionally skipped
17dbe8dda,8287f2c3a,a1379db81— Usage-only9eba1252c,2d2efff28,f9a726e62— mobile-onlye31e568bd—apps/marketinga00218741— upstream contributor vouching643daa516,c0047c252— both only editpatches/@legendapp__list@3.3.5.patch. Theirreact.js/react.mjshunks are real web fixes, but pnpm keys patches by exact version and this fork pins@legendapp/listat3.3.3with no patch entry. Adopting them needs a version bump plus a lockfile change, which belongs in a dedicated dependency PR.7c6163c67(Codex app access approval prompts) — blocked on the Effect upgrade. Codex sends the approval choices asrequestedSchema.properties.<field>.enum, and the generatedMcpElicitationPrimitiveSchemaisUnion([EnumSchema, StringSchema, NumberSchema, BooleanSchema]). On this fork's Effect beta.78 that union resolves{ type: "string", enum: [...] }to the plain string member and dropsenumduring decode, so every form elicitation is declined before it reaches the user. DecodingMcpElicitationEnumSchemaalone keepsenum, so the defect is union member selection, not the schema. Upstream runs beta.103, where its five elicitation integration tests pass. It was ported, observed failing, and reverted in full; revisit with the beta.103 migration.Fork decisions preserved
useHandleNewThread.test.tsandresolveNewDraftModelSelectioncoverage are unchanged and passing.apps/mobile,apps/marketing, Usage, the cloud service launcher andtelemetry/AnalyticsServicestay deleted. Droppedapps/server/src/serviceLauncher.tsfrom3fd506433, therecordClientCommandAnalyticscall that came with thews.tshunk ofe9f50c3ef, and the mobile halves of99960383d.t3-entrypoint-test-prefix andt3symlink name inentrypoint.test.ts, thet3-opencode-inventory-prefix andT3_TEST_*env vars inopencodeRuntime.inventory.test.ts, andt3code/bootstrap-refNameinserver.test.ts.e9f50c3efadapted to this fork's composer: upstream'sChatViewhunk rewrites the composer glass wrapper and terminal state this fork replaced, so only the two upload-capability props were taken.Notable local fixes
HostProcessExecutablePathtopackages/shared/src/hostProcess.ts. It arrived upstream with the removedt3 connectsurface, so this fork never had it, and the incoming OpenCode inventory test needs it.entrypoint.test.tsfor macOS, whereos.tmpdir()is itself reached through a symlink. Upstream's version only passes on Linux.Marker
docs/operations/upstream-sync.mdlast-reviewed upstream commit updated to99960383d094b850f0001d3067fa604aa3adf7d6(2026-08-25), with a full review log entry.How to test
pnpm install && pnpm run quality:core— 2502 tests pass, typecheck and lint clean, formatting clean.Attachment pre-upload — Open a thread, paste or drop an image into the composer. It should start uploading immediately and show progress; the send button stays disabled until the upload finishes. Kill the server mid-upload to see the failed state, then use the retry action. Send a message with an attached image and confirm it arrives.
Terminal sidebar grouping — Open the terminal panel, split a terminal horizontally and vertically. The sidebar group headers should read "Side by side" and "Stacked" with a count, and "Single" for an unsplit group. Hover a terminal row: its icon should swap to a close X.
Terminal links — Print a path that exists and one that does not in a terminal. Only the real one should render as a link.
File links in chat — Ask an agent to reference a file. Command-click the link; it should open in the file viewer, not the browser. On Windows,
C:\path\to\file.tsin chat should be clickable.Version skew — Connect a client to a server on an older version and confirm the mismatch banner appears. Connect to a server that is ahead and confirm no banner. Connect a nightly client to a stable server on the same core version and confirm no banner.
Worktree recreation — Delete a thread's worktree directory from disk, then send a turn in that thread. It should recreate the worktree and run instead of failing. Delete the same thread twice and confirm the second delete is a no-op.
Submodules — Create a thread in a repo with submodules and confirm the new worktree has them checked out.
Pull requests — Merge a PR and delete its branch; the merged badge should persist. Reload a PR that changed on the remote and confirm the panel shows the new state rather than a cached one.
CLI on older Node — Run the CLI under Node 22.17. It should print output instead of exiting 0 silently.
🤖 Generated with Claude Code