Repository navigation
chore(sync): merge upstream main through 7ac952c630, plus Home, task graphs, dictation, ghost text and ten Android PRs - #10
Conversation
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>
…ingdotgg#18190) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gdotgg#18191) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ngdotgg#18183) 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>
Co-authored-by: maria <maria@kuuro.net>
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>
…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.
…nto integrate/17930
…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.
[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
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.SummaryThe follow-up adds cancellation checks around task launches and replays unfinished launches after restart.
Reviews (2) · Last reviewed commit: "fix(server): stop task graph nodes cance..." · Reviewed by Greptile |
| yield* Effect.forEach(toLaunch, ({ graph, node }) => launchNode(graph, node), { | ||
| concurrency: "unbounded", | ||
| discard: true, | ||
| }); |
There was a problem hiding this comment.
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.…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>
|
@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>
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_ID56).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)
t3-thread://v1/<threadId>form with an optional?environmentId=suffix for other machines, instead of the PR's path segment. Home handlers go through upstream'sMcpToolAccesschecks.063_TaskGraphs.ts).DictationErroradded torunServer's explicit error type.apps/server/src/server.tsto spell outrunServer's error/service types and bindWs.layertowsLayer: the fork's RPC group is now large enough that the checker collapsed it toany.ListRowLayout), fix(mobile): Android review diff scrolls to the end of long lines pingdotgg/t3code#19431 review diff scroll, fix(mobile): Android tablets launched in landscape open full screen pingdotgg/t3code#18634 landscape tablets, fix(android): preserve chat back stack in the PR viewer pingdotgg/t3code#18839 PR viewer back stack, perf(mobile): transfer and paint dirty Android terminal rows pingdotgg/t3code#17195 terminal dirty rows, fix(mobile): restore lost iOS race fixes and Android keyboard parity pingdotgg/t3code#15030 iOS race fixes and Android keyboard parity (keeps the fork'scycleHostshortcut).Follow-ups outside conflict hunks
Fork modules now import
PtyAdapterandHostProcessfrom@t3tools/shared, the Pi extension reads runtime instructions from provider-core,randomUUIDv4is called as a method, upstream's newMigrations.test.tsuses fork ids, tests for the removed legacyproviderssettings map are dropped, andSqlite.test.tstolerates the sampled ANALYZE estimate (the extra migration row moved it from 100 to 98).Verification (local, macOS)
pnpm typecheck: clean across 32 packages.pnpm lint:mobileclean (ktlint/swiftlint not installed locally, so the Kotlin change in fix(mobile): restore lost iOS race fixes and Android keyboard parity pingdotgg/t3code#15030 is compiled only by CI).Supersedes #9 if that branch is no longer needed.
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.