Repository navigation
refactor(provider-acp-registry): move the ACP Registry into its own package - #17405
Conversation
…ackage The ACP Registry moves into @t3tools/provider-acp-registry, built on @t3tools/provider-acp: - ./settings: AcpRegistrySettings and the distribution preference, moved out of contracts. - ./client: label, settings form, no default instance, and the registry glyph clients fall back to while an agent's own icon loads. - ./server: the driver, the adapter driver, and the managed-binary directories the terminal manager keeps off agent PATHs. - ./server/AcpRegistrySupport and ./server/AcpRegistryRuntimeCoordinator: the catalog and coordinator services, imported as namespaces. AcpRegistryCatalog.layerFromHost builds both from ProviderHost paths. - ./testing: adapter, probe, and Devin helpers the server's ACP tests use. The package reaches the server only through ProviderHost. Its settings gain withSnapshot, which the catalog uses to check whether an installed agent is still referenced before removing it. The test host's settings can now change during a test (TestProviderHostSettings). Two generic pieces move to shared packages: PtyAdapter to @t3tools/shared and ProviderAuthFlow to provider-core. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ce42275 to
8f8d18f
Compare
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This is a broad ACP Registry package extraction that also changes shared ProviderHost/service wiring, client registration, and authentication/session integration. The implementation is largely moved rather than rewritten, but the cross-package runtime and sensitive auth surface warrant focused human review. You can add or adjust custom eligibility rules. Learn more. |
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. |
Service modules expose their layers as top-level exports reached through the namespace import (`AcpRegistrySupport.layerFromHost`, `AcpRegistryRuntimeCoordinator.layer`), not as static members on the service class. AcpSessionRuntime already exported `layer`, so its duplicate static goes; OpenCodeRuntimeError.is becomes isOpenCodeRuntimeError. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings in upstream through pingdotgg#17405 (43f8a8d). - Adapted: Windows work-account sign-in in the server browser now runs after upstream's presentAsChrome (pingdotgg#16963) on each headless tab. ServerBrowser.test.ts checks that persistent tabs pause Entra sign-in and incognito tabs do not, and is now in personal-fixes. - Adapted: since pingdotgg#17316 the desktop runs tabs Ved opens for a remote environment locally, so the desktop's sign-in path carries them again. BrowserSession.test.ts checks that persistent sessions get the sign-in hook. browser-import.md says which account each tab uses. - BrowserSession.ts: kept the sign-in hook beside upstream's external-protocol prompt (pingdotgg#16961). - Remote open: kept Cody's Tailscale SSH login (user@host) for VS Code and Zed beside upstream's JetBrains Toolbox links (pingdotgg#17271). JetBrains links carry no login, as upstream designed. - DesktopAppIdentity: took upstream's RFC 9110 runtime name (pingdotgg#17264), so Cody's runtime name is "Cody <stage>". The About panel still says "Cody". - OpenCode package split (pingdotgg#17345): the Copilot usage limits, MCP re-add, and final-answer instruction patches moved with their files. The driver calls readOpenCodeUsageLimits from the new package. - personal-fixes.json: points the OpenCode tests at their new package paths and adds runtimeInstructions.test.ts. Drops opencodeUsageReader.test.ts, a path that never existed. - Superseded: none this round.
Upstream pingdotgg#17405 turned the factory into an Effect.
* fix(web): link pull requests to threads in folders that aren't Git repos (pingdotgg#15946) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(web): find messages and plans in the current thread (pingdotgg#10439) Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(web): improve terminal scrollback navigation and snapshots (pingdotgg#17091) * docs(internals): add a checklist for adding a provider (pingdotgg#17229) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(mobile): keep native screens ordered during stack pops (pingdotgg#17231) * fix(server): pairing tokens work on Node versions that cannot bind booleans (pingdotgg#16730) * fix(mobile): HTML pages in a thread no longer trap scrolling on Android (pingdotgg#17211) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): centered scrollers no longer shift when the scrollbar appears (pingdotgg#17077) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * fix(web): distinguish thread search matches from code tints (pingdotgg#17263) * fix(server): Pi extension wakes get an owned continuation turn (pingdotgg#17214) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): Pi discovers optional T3 tools on demand (pingdotgg#17220) * fix(web): stack merge dialog closes as soon as you confirm (pingdotgg#17116) * fix(server): Pi editor dialogs prefill the answer composer (pingdotgg#17206) * fix(desktop): generate valid User-Agent that follows RFC 9110 guidelines (pingdotgg#17264) * fix(server): Pi discovers workspace skills and commands (pingdotgg#17190) * fix(mobile): preserve navigation after native swipe back (pingdotgg#17268) * fix(server): keep newly discovered models out of legacy groups (pingdotgg#14314) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(editors): open remote projects in JetBrains IDEs over SSH (pingdotgg#17271) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(desktop): expect JetBrains IDEs among remote editors (pingdotgg#17291) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): recognize authenticated GitHub Enterprise hosts (pingdotgg#11059) Co-authored-by: Claude Code <noreply@anthropic.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * fix(connect): relay client updates itself and skips incompatible cloudflared (pingdotgg#17275) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(shared): relay client install waits out a brief Windows file lock (pingdotgg#16998) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(shared): release relay install locks on cancellation (pingdotgg#10585) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * chore(shared): bump managed cloudflared to 2026.10.0 (pingdotgg#11184) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(shared): bound cloudflared download with 10-minute timeout (pingdotgg#14139) Co-authored-by: Kevin Rajan <kevin@kvnloo.dev> * refactor(provider-core): add provider-core and provider-testing packages (pingdotgg#17299) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(settings): drop the legacy per-driver providers map (pingdotgg#17300) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(provider-pi): move Pi into its own provider package (pingdotgg#17302) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(models): tell users when a CLI update unlocks a new model (pingdotgg#17307) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): collapsed composer reserves room for wide send actions (pingdotgg#17016) * fix(muse): workflow subagents no longer stall on hidden approvals (pingdotgg#17329) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(provider-core): share attachment prompts, notifications, and event loggers (pingdotgg#17330) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): file previews handle downloads, in-page links, and repo paths, and favicons stop leaking internal hosts (pingdotgg#16950) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): environment-hosted browser tabs behave like a normal browser (pingdotgg#16963) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(desktop): browser tab fixes for fullscreen, shortcuts, links, reload and hidden tabs (pingdotgg#16961) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): desktop opens remote environments' browser tabs locally (pingdotgg#17316) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(desktop): the t3 command warns instead of installing behind another t3 (pingdotgg#17351) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): images, video, HTML and PDF preview in a thread before its first message (pingdotgg#17352) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(provider-muse): move Muse Code into its own provider package (pingdotgg#17331) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): semantic branch naming hint lines up with its setting (pingdotgg#16972) * fix(mobile): restore chat image previews in the v5 stack (pingdotgg#17361) * feat(mobile): fade working threads and match web's status labels (pingdotgg#17368) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): agent browser tools stop bloating history, fall back sensibly, and respect ownership (pingdotgg#16956) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): add room for thread timeline markers (pingdotgg#17372) * fix(web): drop sidebar context before cancelling pointer drag (pingdotgg#17373) * refactor(providers): namespace-import service modules in core, Muse, Pi, and testing (pingdotgg#17375) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(auth): show connection permissions and enforce session lifetime (pingdotgg#17370) Co-authored-by: Bear Huddleston <bear@bearhuddleston.dev> * refactor(provider-opencode): move OpenCode into its own provider package (pingdotgg#17345) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(provider-cursor): move Cursor into its own provider package (pingdotgg#17349) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(provider-acp): move the shared ACP adapter into its own package (pingdotgg#17354) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(provider-grok): move Grok into its own provider package (pingdotgg#17357) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): speed up long thread message sync (pingdotgg#17387) * fix(desktop): cancel backend pipe reads to avoid slow shutdown (pingdotgg#17386) * refactor(providers): adapter factories yield their services (pingdotgg#17381) * fix(web): show a row spinner instead of a banner when expanding a folder (pingdotgg#17378) * fix(server): a timed-out browser drag no longer exits the server (pingdotgg#17360) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): a logged-out Claude CLI no longer reports as authenticated (pingdotgg#15459) * fix(server): Pi loads every selected skill without losing prompt text (pingdotgg#17194) * fix(server): keep the Claude MCP token out of process arguments (pingdotgg#17408) * fix(server): reconcile Pi native session rewinds (pingdotgg#13839) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(provider-pi): cover continuation offers through the driver (pingdotgg#17407) * refactor(provider-acp-registry): move the ACP Registry into its own package (pingdotgg#17405) * fix(server): relay client updates no longer drop the host off T3 Connect (pingdotgg#17366) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com> Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: chise <lqff.yt@gmail.com> Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com> Co-authored-by: jztmanyl <jztmanyl@gmail.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Grzegorz Mandziak <4248465+alimek@users.noreply.github.com> Co-authored-by: Scott Norteman <snorteman@gmail.com> Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com> Co-authored-by: Aaron Queen <bompus@users.noreply.github.com> Co-authored-by: Kevin Rajan <7121943+kvnloo@users.noreply.github.com> Co-authored-by: Kevin Rajan <kevin@kvnloo.dev> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Daniel Alvim <danielalvim@tuta.io> Co-authored-by: Bear Huddleston <bear@bearhuddleston.dev> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>
## What's Changed * fix(server): keep the Claude MCP token out of process arguments by @juliusmarminge in pingdotgg/t3code#17408 * fix(server): reconcile Pi native session rewinds by @StiensWout in pingdotgg/t3code#13839 * test(provider-pi): cover continuation offers through the driver by @juliusmarminge in pingdotgg/t3code#17407 * refactor(provider-acp-registry): move the ACP Registry into its own package by @juliusmarminge in pingdotgg/t3code#17405 * fix(server): relay client updates no longer drop the host off T3 Connect by @t3dotgg in pingdotgg/t3code#17366 * fix(connect): Cloudflare and other VPN addresses no longer show as Tailscale by @shivamhwp in pingdotgg/t3code#17158 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261009.2861...v0.0.46-nightly.20261009.2873 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261009.2873
## What's Changed * fix(server): keep the Claude MCP token out of process arguments by @juliusmarminge in pingdotgg/t3code#17408 * fix(server): reconcile Pi native session rewinds by @StiensWout in pingdotgg/t3code#13839 * test(provider-pi): cover continuation offers through the driver by @juliusmarminge in pingdotgg/t3code#17407 * refactor(provider-acp-registry): move the ACP Registry into its own package by @juliusmarminge in pingdotgg/t3code#17405 * fix(server): relay client updates no longer drop the host off T3 Connect by @t3dotgg in pingdotgg/t3code#17366 * fix(connect): Cloudflare and other VPN addresses no longer show as Tailscale by @shivamhwp in pingdotgg/t3code#17158 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261009.2861...v0.0.46-nightly.20261009.2873 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261009.2873
The ACP Registry was the last ACP flavor I could move without settling the model-manifest question (Antigravity is waiting on that). This moves it into
@t3tools/provider-acp-registry, built on@t3tools/provider-acp.Package
./settings:AcpRegistrySettingsandAcpRegistryDistributionPreference, moved out of contracts../client: label, settings form,hasDefaultInstance: false, and the registry glyph clients show while an agent's own icon loads. Web and mobile both register it../server:AcpRegistryDriver,AcpRegistryAdapterV2Driver, andacpRegistryManagedBinaryDirectories, which the terminal manager uses to keep managed agents off PATH../server/AcpRegistrySupportand./server/AcpRegistryRuntimeCoordinator: the catalog and coordinator services. Each has its own subpath and is imported as a namespace.AcpRegistrySupport.layerFromHostbuilds both fromProviderHostpaths, which replaces the server'sAcpRegistryCatalog.ts. Layers are top-level exports reached through the namespace, not static methods on the service class; a second commit makes the same change forAcpSessionRuntimeandOpenCodeRuntimeError.is../testing: the adapter, probe, and Devin helpers the server's ACP tests use.Boundaries
ProviderHost. Host settings gainwithSnapshot, which the catalog uses to check whether an installed agent is still referenced before it deletes the agent. It's backed byServerSettingsService.withSettingsSnapshot, so the check can't race a settings write.layerTestProviderHostnow also providesTestProviderHostSettings, so tests can change settings mid-test. The catalog's uninstall tests use it in place of the real settings service.PtyAdapterto@t3tools/shared, andProviderAuthFlowto provider-core.lib(no DOM), which matches its Node runtime.@noble/hashesmoves from the server to this package, its only user.Verification
vp lintand knip pass on the changed workspaces.Done by Claude Opus 5.5 in Claude Code.
🤖 Generated with Claude Code