From 4f0263061d7fe3997d26a06555d67c045633b8a9 Mon Sep 17 00:00:00 2001 From: James Long Date: Tue, 29 Sep 2026 19:08:31 +0000 Subject: [PATCH] refactor(schema): derive partial config capabilities from Model.Capabilities --- packages/client/src/promise/generated/types.ts | 4 +++- packages/schema/src/config/provider.ts | 18 +++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/client/src/promise/generated/types.ts b/packages/client/src/promise/generated/types.ts index ce99934284b..da84380a25b 100644 --- a/packages/client/src/promise/generated/types.ts +++ b/packages/client/src/promise/generated/types.ts @@ -430,6 +430,8 @@ export type McpProtocol = "legacy" | "auto" | "2026-07-28" export type ConfigWorktree = { directory: string } +export type ConfigModelCapabilities = { tools?: boolean; input?: Array; output?: Array } + export type ConfigShellOption = { path: string; name: string; acceptable: boolean } export type SessionMessageLocationSwitched = { @@ -2130,7 +2132,7 @@ export type ConfigEntry = settings?: ConfigModelSettings headers?: { [x: string]: string } body?: { [x: string]: JsonValue } - capabilities?: { tools?: boolean; input?: Array; output?: Array } + capabilities?: ConfigModelCapabilities variants?: Array<{ id: string settings?: ConfigModelSettings diff --git a/packages/schema/src/config/provider.ts b/packages/schema/src/config/provider.ts index 166a4377b5c..d2e34abb2c6 100644 --- a/packages/schema/src/config/provider.ts +++ b/packages/schema/src/config/provider.ts @@ -2,7 +2,7 @@ export * as ConfigProvider from "./provider.js" import { Schema } from "effect" import { Money } from "../money.js" -import { Compatibility, Family, ID, VariantID } from "../model.js" +import { Capabilities, Compatibility, Family, ID, VariantID } from "../model.js" import { Provider } from "../provider.js" import { optional } from "../schema.js" @@ -59,13 +59,6 @@ class Cost extends Schema.Class("Config.Model.Cost")({ cache: Cache.pipe(optional), }) {} -// Partial: unset fields fall back to the existing/base model's capabilities or Model.Capabilities.default(). -class ModelCapabilities extends Schema.Class("Config.Model.Capabilities")({ - tools: Schema.Boolean.pipe(optional), - input: Schema.Array(Schema.String).pipe(optional), - output: Schema.Array(Schema.String).pipe(optional), -}) {} - class Limit extends Schema.Class("Config.Model.Limit")({ context: Schema.Int.pipe(optional), input: Schema.Int.pipe(optional), @@ -79,7 +72,14 @@ class Model extends Schema.Class("Config.Model")({ compatibility: Compatibility.pipe(optional), package: Schema.String.pipe(optional), ...ModelOverlays, - capabilities: ModelCapabilities.pipe(optional), + // Partial: unset fields fall back to the base model's capabilities, then the defaults. + capabilities: Capabilities.mapFields((fields) => ({ + tools: optional(fields.tools), + input: optional(fields.input), + output: optional(fields.output), + })) + .annotate({ identifier: "Config.Model.Capabilities" }) + .pipe(optional), variants: Schema.Struct({ id: VariantID, ...ModelOverlays,