Repository navigation
feat: subagent and tool presentation fixes (upstream G3) - #999
Merged
Merged
Conversation
Contributor
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
Pylon adaptation: Pylon's Claude tool-call projection has no input.presentation title, so the resolved title is searchTitle ?? dynamicToolTitle(...) ?? null. (cherry picked from commit 43bd6677392b80cd12742f865c277c9939239543) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…#14994) (cherry picked from commit 4f7760e6a0037b06917adaae1b8a220e3ee6e5cc) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…14999) (cherry picked from commit 151c241cd2cc22c3b10ba8735e44f83fb723a511) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 65731f986ba2175063b0182deb6a143f8f323b74) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pylon adaptations: keep Pylon's live device-state hook, glass blur composer wrapper, provider-handoff ChatComposer prop and model-change disabled copy tests; the mobile settings sheet no longer has providerInstanceId, so it is dropped from memo deps. (cherry picked from commit 63f74e209dc27df1f8733535d6fd4a79d442add8) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pylon adaptations to upstream G3 review findings: - An OpenCode variant that the user never chose and the provider never reported now shows "Default" instead of "Unknown", so existing drafts no longer regress to "Unknown". - A failed child-thread model sync now logs a warning and no longer fails the run's provider event stream, because that model is display-only. - Restore the mobile subagent row accessibility label (name and status). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
rynfar
force-pushed
the
upstream/2026-10-03-g3-subagent-presentation
branch
from
October 3, 2026 22:50
96b335a to
dbef955
Compare
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 upstream group G3: subagent and tool presentation. Claude skill calls show the skill name. Claude subagent threads show the model their agent file picks. Subagent descriptions are formatted as display names. Mobile shows full subagent details. OpenCode reasoning labels are no longer blank.
Sources
43bd667739ClaudeAdapterV2.ts: Pylon's tool-call projection has noinput.presentationtitle. The title is nowsearchTitle ?? dynamicToolTitle(toolName, input) ?? null.computerUseToolTitlewas renamed todynamicToolTitle. No callers of the old name remain.4f7760e6a0ProviderEventIngestornow depends onThreadCommandExecutor. When aprovider_nativesubagent reports a different model, it writesthread.model-selection-updatedto the child thread under the thread lock. The layer wiring changed inruntimeLayer.ts,ProviderReplayHarness.ts, and the test layer inProviderSessionManager.test.ts(wiring only).151c241cd265731f986bSubagentRow.tsxand the sharedresolveSubagentMetadata/subagentDetailPreviewhelpers.63f74e209duseLiveDeviceStatehook, theGlassBlurTargetContextcomposer wrapper withcontextWindow/localOutboxCount, the webliveHandoffProjectionand thesupportsProviderSwitchingViaHandoffprop, and Pylon's model-change disabled-copy tests. Upstream'sreportedModelSelectionwas added next to each of them. Pylon's mobile settings sheet has noproviderInstanceIdprop, so that prop was dropped from the memo deps. Adds the optional fieldOrchestrationV2ProviderThreadNativeMetadata.modelSelection. It is display-only and old clients ignore it.No sources were skipped.
Pylon impact
LegacyRuntimeEventProjectorwithchildThreadId: null. The new subagent model sync therefore never fires for Prime.formatSubagentDisplayTitleonly rewrites Codex/root/...paths, so Prime labels display as before. The Prime and legacy projector tests pass.variantlabel handling only affects OpenCode, the only provider that uses avariantoption. Reported values are display-only and are never sent with a dispatch.ProviderSessionManager.test.ts, which is needed because the ingestor's dependencies changed.Review adaptations (
96b335a7a9)ProviderEventIngestor: The child-thread model sync is display-only. If it fails, it now logsEffect.logWarningand keeps the original stored events, instead of raisingProviderEventPublishError. A new regression test makes thethread.model-selection-updatedwrite fail and checks that the stream continues. The test was confirmed to fail without the fix.Pressablegets back itsaccessibilityLabel(name and status).Rebase onto #1002 / #997 / #998 / #1000 / #1001 (
dbef955759)LegacyAdapterV2SessionManager.test.ts(added by feat(server): orchestrator v2 core fixes (upstream G1) #1002) now providesThreadCommandExecutorto the ingestor layer, the same wayruntimeLayerandProviderReplayHarnessdo. Without it, thet3typecheck failed withmissingEffectContext.threadExecution.test.tsnow expects thewaitingflag that fix: thread state and timeline fixes (upstream G4) #997 added.ProviderSessionManager.test.tsapplied without conflicts.t3, web and mobile. The 13 server suites (includingLegacyAdapterV2SessionManager,ProviderEventIngestorandProviderSessionManager) passed 489 tests. The client suites passed: shared 41, client-runtime 52, web 156, mobile 7. Format and lint on the 39 changed files: clean.Verification
vp run -F@t3tools/contracts,@t3tools/shared,@t3tools/client-runtime,t3,@t3tools/web,@t3tools/mobile. Each one was confirmed to runtsc --noEmit.vp test runonmodel.test.tsandtoolActivity.test.ts, 41 passed.subagentDisplay.test.tsandthreadExecution.test.ts, 50 passed.TraitsPicker.test.tsandMessagesTimeline.logic.test.ts, 155 passed.threadAgentsPresentation.test.ts, 7 passed.ClaudeAdapterV2,OpenCode2AdapterV2,CodexAdapterV2,ProviderEventIngestor(includes the subagent model-sync test and its failure-path test), andProviderSessionManager, all passed.model.test.ts32,threadExecution.test.ts39,TraitsPicker.test.ts15,ProviderEventIngestor.test.ts16, andthreadAgentsPresentation.test.ts7, all passed. Typechecks for shared, client-runtime, t3, web and mobile were re-run and passed.OpenCode2OrchestratorV2.integration,ThreadFork.execution,SteeringCompletion.integration,LegacyAdapterV2Bridge,LegacyRuntimeEventProjector,PrimeAgentDaemonRuntimeEvents, andOrchestratorMcpToolkit.integration, 96 passed.vp fmt --checkandvp linton the 38 changed TS/TSX files: clean. Lint shows only warnings that were already inChatView.tsx.Not verified
SubagentRow/ agents sheet, and the OpenCode traits picker labels.Part of upstream cycle #996.
🤖 Generated with Claude Code