Repository navigation
refactor(provider-core): expose model metadata through a ModelCatalog port - #17417
Conversation
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR introduces and wires a new shared ModelCatalog abstraction across three production provider drivers, affecting model metadata, classification, fallback, and default-selection paths. The manifest values remain unchanged, but the cross-component refactor and changed default plumbing warrant human review. No code changes detected at 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. |
… port Antigravity, Claude, and Codex read the server's ModelManifest service directly, so they could not leave apps/server. The manifest itself (bundle, remote refresh, disk cache, compatibility policies) stays with the server; providers now see only their own catalog entry through @t3tools/provider-core/server/ModelCatalog: - current(driverKind) / bundled(driverKind): the driver's catalog from the manifest in memory or the bundle. Never fetches. - refreshInBackground: the TTL-gated remote refresh drivers start from provider checks. - Pure helpers: classifyCatalogModels, applyCatalogDefault, applyModelCatalog, catalogServerModel, with an optional CatalogMatching so a driver maps its slugs to catalog families. Provider-specific branches leave the generic code: Codex's family matching and update-required models move to codexModelCatalog.ts, and Claude's catalog resolves from its ProviderCatalog entry. The server's ModelManifest module provides the port (layerModelCatalog), and its layerTest provides both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3c9e832 to
3637b65
Compare
## 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
Antigravity, Claude, and Codex read the server's
ModelManifestservice directly, so they can't move into packages. This adds aModelCatalogport in provider-core. Providers see only their own catalog entry through it, and the manifest (bundle, remote refresh, disk cache, compatibility policies) stays with the server.Port (
@t3tools/provider-core/server/ModelCatalog)current(driverKind)andbundled(driverKind)return the driver's catalog from the in-memory manifest or the bundle. They never fetch.refreshInBackgroundstarts the TTL-gated remote refresh that drivers kick off from provider checks.classifyCatalogModels,applyCatalogDefault,applyModelCatalog, andcatalogServerModel. A driver can pass an optionalCatalogMatchingto map its slugs to catalog families.Server
ModelManifest.layerModelCatalogprovides the port from the existing manifest service.layerTestprovides both, so existing tests keep working.resolveProviderCatalognow returns the port'sProviderCatalog, and the manifest-wideapply*andclassify*helpers are removed.codexModelCatalog.ts. Claude's catalog resolves from itsProviderCatalogentry. Antigravity usesapplyModelCatalog.Tests
codexModelCatalog.Done by Claude Opus 5.5 in Claude Code.
🤖 Generated with Claude Code