Repository navigation
refactor(provider): bring opencode, muse, pi, core and testing in line with Effect conventions - #17542
Conversation
…e with Effect conventions - Inline OpenCodeRuntimeShape into the OpenCodeRuntime service; consumers use OpenCodeRuntime.OpenCodeRuntime["Service"]. - Move OpenCode message-id clock state from module-level lets into a Ref owned by makeOpenCodeAdapterV2. - OpenCode2Client.readEvents and OpenCode 2 text generation yield their services instead of taking them as parameters. - Rename provider-core ServerProviderShape to ManagedServerProvider. - Drop expandHomePathWith; expandHomePath covers every caller. - Rename provider-testing/host to TestProviderHost (layer + TestProviderHostSettings) with a matching service key. - Import effect/http and effect/process modules as subpath namespaces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a broad but largely mechanical refactor to align private provider packages with Effect conventions. The limited production-path changes preserve existing path, HTTP, host, and provider behavior while making state ownership explicit, with no new capability, schema change, product-default change, deployment change, or static-analysis suppression. 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. |
## What's Changed * fix(web): Local environment switch stays reachable after turning it off by @ScottN-PV in pingdotgg/t3code#17359 * fix(web): keep chat banners inside the lane beside the docked details card by @macodev00 in pingdotgg/t3code#17094 * fix(web): settled and snoozed lines line up with the messages above them by @RakshithBhat03 in pingdotgg/t3code#17191 * fix(web): distinguish project filter from new project by @voltcrash in pingdotgg/t3code#12113 * feat(web): assign a thread details panel shortcut by @maria-rcks in pingdotgg/t3code#16694 * fix(web): chat content keeps pace with sidebar resizing by @flamboh in pingdotgg/t3code#17383 * refactor(provider-core): expose model metadata through a ModelCatalog port by @juliusmarminge in pingdotgg/t3code#17417 * refactor(provider-core): follow the Effect service conventions throughout by @juliusmarminge in pingdotgg/t3code#17427 * refactor(provider-core): latest-version lookups go through a ProviderLatestVersions service by @juliusmarminge in pingdotgg/t3code#17434 * refactor(provider-core): MCP provider sessions live in a McpProviderSessions service by @juliusmarminge in pingdotgg/t3code#17446 * refactor(provider): bring opencode, muse, pi, core and testing in line with Effect conventions by @juliusmarminge in pingdotgg/t3code#17542 * refactor(provider-acp): ACP, ACP Registry and Grok follow the Effect service conventions by @juliusmarminge in pingdotgg/t3code#17544 * refactor(provider-cursor): follow the Effect service conventions by @juliusmarminge in pingdotgg/t3code#17545 * fix(marketing): use app wordmark in header by @voltcrash in pingdotgg/t3code#13240 * fix(web): pr merge actions stay visible while the stack refreshes by @maria-rcks in pingdotgg/t3code#17559 ## New Contributors * @voltcrash made their first contribution in pingdotgg/t3code#12113 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261009.2873...v0.0.46-nightly.20261009.2886 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261009.2886
## What's Changed * fix(web): Local environment switch stays reachable after turning it off by @ScottN-PV in pingdotgg/t3code#17359 * fix(web): keep chat banners inside the lane beside the docked details card by @macodev00 in pingdotgg/t3code#17094 * fix(web): settled and snoozed lines line up with the messages above them by @RakshithBhat03 in pingdotgg/t3code#17191 * fix(web): distinguish project filter from new project by @voltcrash in pingdotgg/t3code#12113 * feat(web): assign a thread details panel shortcut by @maria-rcks in pingdotgg/t3code#16694 * fix(web): chat content keeps pace with sidebar resizing by @flamboh in pingdotgg/t3code#17383 * refactor(provider-core): expose model metadata through a ModelCatalog port by @juliusmarminge in pingdotgg/t3code#17417 * refactor(provider-core): follow the Effect service conventions throughout by @juliusmarminge in pingdotgg/t3code#17427 * refactor(provider-core): latest-version lookups go through a ProviderLatestVersions service by @juliusmarminge in pingdotgg/t3code#17434 * refactor(provider-core): MCP provider sessions live in a McpProviderSessions service by @juliusmarminge in pingdotgg/t3code#17446 * refactor(provider): bring opencode, muse, pi, core and testing in line with Effect conventions by @juliusmarminge in pingdotgg/t3code#17542 * refactor(provider-acp): ACP, ACP Registry and Grok follow the Effect service conventions by @juliusmarminge in pingdotgg/t3code#17544 * refactor(provider-cursor): follow the Effect service conventions by @juliusmarminge in pingdotgg/t3code#17545 * fix(marketing): use app wordmark in header by @voltcrash in pingdotgg/t3code#13240 * fix(web): pr merge actions stay visible while the stack refreshes by @maria-rcks in pingdotgg/t3code#17559 ## New Contributors * @voltcrash made their first contribution in pingdotgg/t3code#12113 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261009.2873...v0.0.46-nightly.20261009.2886 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261009.2886
Part of the provider-package audit: every module in provider-opencode, -muse, -pi, -core and -testing should now follow
docs/internals/effect-services.md.Shape interfaces and naming
OpenCodeRuntimeShapeis inlined into the service. Consumers useOpenCodeRuntime.OpenCodeRuntime["Service"].ServerProviderShapewasn't a service at all. It's renamedManagedServerProvider, next tomakeManagedServerProvider.provider-testing/host.tsdefined a service in a camelCase module. It's nowTestProviderHost.ts, exportinglayerandTestProviderHostSettings, and its key matches the module.State and services
lets. It's now aRefowned by the adapter. Ordering only matters within one session, and one adapter owns each session. Uniqueness across adapters comes from the random suffix, as before.OpenCode2Client.readEventsand OpenCode v2 text generation yieldHttpClientandProviderHostinstead of taking them as parameters.expandHomePathWith(value, path)took a service as a parameter and gave the same result asexpandHomePathon Node. It's removed.Imports
effect/http,effect/processandeffect/testingmodules are imported as subpath namespaces in 34 files.Left as is, deliberately
managedProvider'srefreshstill usesorDie. The only typed error is a settings-read failure that no caller can recover from.OpenCodeRuntimeErrorstill buildsdetailfromcause.message(47 constructions, user-visible). That's a separate PR.Model: Claude Opus 5.5 via Claude Code in T3 Code.
🤖 Generated with Claude Code