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,