Skip to content

chore(sync): merge upstream main through 7ac952c630, plus Home, task graphs, dictation, ghost text and ten Android PRs - #10

Merged
eyeveil merged 671 commits into
mainfrom
sync/upstream-main-20261014
Oct 14, 2026
Merged

eyeveil merged 671 commits into
mainfrom
sync/upstream-main-20261014

Conversation

@eyeveil

@eyeveil eyeveil commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Upstream sync

Merges pingdotgg/t3code main through 7ac952c630 (556 commits). Fork features preserved: account fallback, provider login RPCs, mirrored custom models, Android APK release profile, desktop download routing, migration numbering (V2 starts at 56 here; FIRST_V2_MIGRATION_ID 56).

Notable upstream features landing: delegated tasks in their own worktrees, guided PR reviews and review guides, per-project provider toggles, renaming built-in models, OpenTelemetry export settings, T3 Code as default macOS browser with passkeys, JetBrains over SSH, in-thread message search, Muse Code native provider, GitCafe, SQLite reader worker and non-blocking checkpoints, Enriched mobile markdown (replaces nitro-markdown; fork patch dropped).

Upstream PRs carried ahead of upstream (each its own merge commit)

Follow-ups outside conflict hunks

Fork modules now import PtyAdapter and HostProcess from @t3tools/shared, the Pi extension reads runtime instructions from provider-core, randomUUIDv4 is called as a method, upstream's new Migrations.test.ts uses fork ids, tests for the removed legacy providers settings map are dropped, and Sqlite.test.ts tolerates the sampled ANALYZE estimate (the extra migration row moved it from 100 to 98).

Verification (local, macOS)

Supersedes #9 if that branch is no longer needed.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

saphid and others added 30 commits October 12, 2026 00:38
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
Co-authored-by: GPT-6.1 Sol <noreply@openai.com>
…ingdotgg#18419)

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
Co-authored-by: GPT-6.1 Sol <noreply@openai.com>
…nym (pingdotgg#18279)

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

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

Signed-off-by: Tiger Kaovilai <passawit.kaovilai@gmail.com>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-authored-by: maria <maria@kuuro.net>
…their mock CLI cannot run (pingdotgg#18184)

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Return exit 125 when the Linux cgroup wrapper target is missing, including when /bin/sh is Bash. Preserve arguments and child exit codes.
…efault (pingdotgg#18461)

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

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
eyeveil and others added 21 commits October 14, 2026 19:01
…t iOS race fixes and Android keyboard parity

Conflicts:
- T3KeyboardCommandsModule.kt: took PR's table-driven chords and unhandled-key
  listener; kept fork/main cycleHost as Ctrl+Shift+H in CTRL_SHIFT_COMMANDS.
- T3ComposerEditor.native.tsx: kept onComposerContentSizeChange and PR's onComposerSubmit.
- T3ComposerEditor.types.ts: kept onContentHeightChange; PR's enterBehavior doc.
- docs/user/keybindings.md: kept Find in a diff section; heading renamed to iPad and Android.
… lockfile

PR pingdotgg#17890 imported SettingsControlRow, which upstream removed in pingdotgg#18511.
Use ListRowLayout with the pill menu as its accessory. pnpm install refreshed
patch hashes for expo-widgets, expo-modules-core and expo-notifications.
pingdotgg#19424 foldable sidebar header, pingdotgg#19292 back-navigation freeze, pingdotgg#19240 huge diff
OOM, pingdotgg#19238 work-log tap freeze, pingdotgg#17890 subscription usage widgets, pingdotgg#19431
review diff long-line scroll, pingdotgg#18634 landscape tablets, pingdotgg#18839 PR viewer back
stack, pingdotgg#17195 terminal dirty rows, pingdotgg#15030 iOS race fixes and Android keyboard
parity. Verified on integrate/android: typecheck clean, 375 mobile tests and
47 shared tests pass, lint:mobile clean.
…ngdotgg#17618

PR pingdotgg#17618 adds a 202nd WebSocket RPC. With the fork's larger RPC group,
inferring Ws.layer lazily from deep in the CLI import chain (binCli -> cli ->
server.ts) exceeds the checker's depth and silently widens its requirements
to `any`, failing typecheck in binCli, cli tests and server.ts. ws.ts itself
infers fine at shallow depth.

- Annotate runServer with its explicit error and service types so importers
  no longer re-infer the whole server layer graph.
- Hoist Ws.layer into a module-level const ahead of the route graph.

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

Adds a follow-up in apps/server/src/server.ts: runServer's error and service
types are written out and Ws.layer is bound to a module-level value, because
the fork's RPC group grew past the point where the checker inferred it as any.
Verified on integrate/17618: typecheck clean, 302 tests pass.
The fork's WebSocket RPC group is at TypeScript's instantiation-depth limit;
adding the dictation RPCs made Ws.layer collapse to any. WsRpcGroup is now
WsCoreRpcGroup merged with WsDictationRpcGroup, and ws.ts builds the dictation
handlers in a separate layer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	apps/web/src/components/chat/ChatComposer.tsx
… agent work

Merges pr-17930 ("feat: task graphs for parallel agent work across
worktrees and machines") into the fork.

Conflict decisions:
- Migrations: PR's 062_TaskGraphs renamed to 063_TaskGraphs.ts and
  registered as fork id 64 after ThreadFailureLookupIndex (63); updated
  055_OrchestrationV2.test.ts and reconcileV2PreviewMigration.test.ts lists.
- apps/web/package.json: kept fork's @XTerm deps and added @xyflow/react;
  pnpm-lock.yaml regenerated with pnpm install.
- ChatView.tsx: kept fork's memoized queuedRunsControl and wrapped it with
  the PR's TaskGraphCards.
- contracts/git.ts: kept fork's GitFilePath filePaths, added PR's baseBranch.
- contracts/settings.ts: added PR's taskGraph settings, kept fork's
  continueThreadsAfterServerUpdate comment/default.

Follow-up fixes:
- TaskGraphService: fork's Crypto.randomUUIDv4 is a function; call it.
- useTaskGraphLabels: pass graph.projectId to the fork's 3-arg
  applyProviderInstanceSettings.
… agent that manages threads across your machines

Conflict decisions:
- MCP toolkits (orchestrator/project/thread/home): port PR handlers onto
  upstream's McpToolAccess declarations (reads/writesThreads/startsThreads/
  actsAsCaller) and toolkitRegistration; Home routing kept inside them.
- t3_thread_launch: upstream startsThreads + worktree base check, plus PR's
  Home watch-before-launch, remote launch and Home-folder refusal.
- Thread links: keep upstream t3-thread://v1/<threadId> format; add an
  optional ?environmentId= query for Home's cross-environment links
  (formatThreadLink third arg, parseThreadLinkEnvironmentId); web/mobile
  open the named environment.
- OrchestratorMcpService: PR's exported providerCapabilities/readThreadPage/
  listItemFromShell keep upstream hidden-model filter, runtimeModes,
  shell-based snooze and multi-task acknowledgement.
- ws.ts/RpcAuthorization/rpc contracts: upstream handler style (no
  observeRpc wrappers) plus Home/fleet RPCs; fork provider login scopes kept.
- Web: Sidebar uses PR's status table with upstream Goal label; command
  palette, draft headline and header hide Home's folder on top of upstream.
- effect/unstable/* imports moved to effect/*; ProviderRegistry path,
  randomUUIDv4() and readFullAccessCaller replacement adapted.
…rop dictation RPC group split

Main's explicit runServer types (b5a2e32) keep Ws.layer concrete, so the
separate dictation RPC group is no longer needed and is reverted to match upstream.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TaskGraphs migration lands as fork id 64 (file 063_TaskGraphs.ts). Keeps the
fork's @XTerm dependencies beside the PR's @xyflow/react, the memoized
queuedRunsControl in ChatView, GitFilePath in contracts/git, and
continueThreadsAfterServerUpdate in settings. Call sites updated for the
fork's randomUUIDv4() and three-argument applyProviderInstanceSettings.
Verified on integrate/17930: typecheck clean, 95 tests pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	apps/web/src/components/chat/ChatComposer.tsx
#	packages/contracts/src/clientRpcPermissions.ts
# Conflicts:
#	docs/README.md
sherpa-onnx dictation for the web and desktop composer. Keeps the fork's
preview-automation RPC imports beside the dictation RPCs, and the pingdotgg#17618
placeholderHint beside the dictation disabled state in ChatComposer.
DictationError added to RunServerError. Verified on integrate/19273:
typecheck clean, 349 tests pass.
Home is a desktop-only, opt-in full-access thread (Settings > Home) that lists,
launches, steers, organizes, watches and answers threads across every machine
the desktop is connected to, through the HomeFleetHost relay. Fork decisions:
Home's MCP handlers go through upstream's McpToolAccess checks; t3_thread_launch
keeps upstream's permission and worktree checks plus Home's cross-machine
launch; thread links keep upstream's t3-thread://v1/<threadId> form with an
optional ?environmentId= suffix for other machines (the PR used a path
segment). Verified on integrate/15975: typecheck clean, 662 tests pass.
PRAGMA optimize = 0x10012 runs ANALYZE under a temporary analysis_limit,
so sqlite_stat1's rows-per-key value is an estimate that depends on file
layout. Adding migration 64 (task graphs) shifted it from 100 to 98.
A full ANALYZE still yields '1000 100'; production code is correct.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PRAGMA optimize runs a sampled ANALYZE, and the extra task-graphs migration
row moved the rows-per-key estimate from 100 to 98. Assert the exact total and
a 90-110 band instead.
@greptile-apps

greptile-apps Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[High impact] Large upstream merge with build, workflow, and dependency changes.

Cancellation on another machine can still leave an agent running, so this PR needs another fix before merging.

Findings

  1. P1 Cancelled agents still start ▶
Fix with agent prompt
### Issue 1
apps/server/src/taskGraph/TaskGraphService.ts:893-896
`advance` saves nodes as running, releases the lock, then launches them without checking their current state. If the user cancels before a launch creates its run, `stopNodes` has no active run to interrupt. The pending launch then starts an agent for a node already marked cancelled, allowing more file changes and paid account use.

Coordinate launch and cancellation so cancellation also stops pending launches.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

The follow-up adds cancellation checks around task launches and replays unfinished launches after restart.

  • Home can work across the environments connected to a desktop server.

Reviews (2) · Last reviewed commit: "fix(server): stop task graph nodes cance..." · Reviewed by Greptile

Comment on lines +879 to +882
yield* Effect.forEach(toLaunch, ({ graph, node }) => launchNode(graph, node), {
concurrency: "unbounded",
discard: true,
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Cancelled agents still start

advance saves nodes as running, releases the lock, then launches them without checking their current state. If the user cancels before a launch creates its run, stopNodes has no active run to interrupt. The pending launch then starts an agent for a node already marked cancelled, allowing more file changes and paid account use.

Coordinate launch and cancellation so cancellation also stops pending launches.

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/server/src/taskGraph/TaskGraphService.ts
Line: 879-882

Comment:
**Cancelled agents still start**

`advance` saves nodes as running, releases the lock, then launches them without checking their current state. If the user cancels before a launch creates its run, `stopNodes` has no active run to interrupt. The pending launch then starts an agent for a node already marked cancelled, allowing more file changes and paid account use.

Coordinate launch and cancellation so cancellation also stops pending launches.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Comment thread apps/server/src/taskGraph/TaskGraphService.ts Outdated
…t-off launches

- launchNode re-checks the node under the lock before launching, and again
  after; a cancel that landed while launching interrupts the new thread under
  its own command id (task-graph-launch-stop) so cancel's receipt does not
  swallow it.
- Startup recovery replays the launch for a running node whose thread exists
  but has no run, instead of finishing (failing) it; launch command ids make
  the replay idempotent.

Addresses Greptile findings on fork PR #10 (upstream pingdotgg#17930).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@eyeveil

eyeveil commented Oct 14, 2026

Copy link
Copy Markdown
Collaborator Author

@greptileai review — e507e60 addresses both findings (cancel during launch now stops the launched thread; restart replays a cut-off launch with its original command ids). Please re-review the new head.

The library's android/build.gradle pins its own buildscript classpath
(AGP 8.7.2 + Kotlin plugin). In the app build, Gradle resolved that second
AGP for the subproject, and the fork-release APK job failed configuring
:react-native-enriched-markdown with "Could not find" for AGP 8.7.2's
Maven Central dependencies. The app already provides AGP 9.2.1 and Kotlin
on the root classpath, so only declare the pinned classpath when the
library is built standalone (project == rootProject), as most RN libraries do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Oct 14, 2026
@eyeveil
eyeveil merged commit 3ed7568 into main Oct 14, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 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.