@opencode/schema 0.0.0-dev-20855 → 0.0.0-dev-20856

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -197,7 +197,7 @@ declare const Model_base: Schema.Class<Model, Schema.Struct<{
197
197
  readonly family: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Model.Family">>>, Schema.optionalKey<Schema.brand<Schema.String, "Model.Family">>, never, never>;
198
198
  readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
199
199
  readonly compatibility: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
200
- readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("../model.js").ReasoningField, import("../model.js").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("../model.js").ReasoningField, import("../model.js").ReasoningField, never, never>>, never, never>;
200
+ readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("../model-compatibility.js").ReasoningField, import("../model-compatibility.js").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("../model-compatibility.js").ReasoningField, import("../model-compatibility.js").ReasoningField, never, never>>, never, never>;
201
201
  readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
202
202
  readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
203
203
  readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
@@ -206,7 +206,7 @@ declare const Model_base: Schema.Class<Model, Schema.Struct<{
206
206
  readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
207
207
  readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
208
208
  }>>>, Schema.optionalKey<Schema.Struct<{
209
- readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("../model.js").ReasoningField, import("../model.js").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("../model.js").ReasoningField, import("../model.js").ReasoningField, never, never>>, never, never>;
209
+ readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("../model-compatibility.js").ReasoningField, import("../model-compatibility.js").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("../model-compatibility.js").ReasoningField, import("../model-compatibility.js").ReasoningField, never, never>>, never, never>;
210
210
  readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
211
211
  readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
212
212
  readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
@@ -280,6 +280,21 @@ declare const Info_base: Schema.Class<Info, Schema.Struct<{
280
280
  readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
281
281
  readonly env: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.String>>>, Schema.optionalKey<Schema.$Array<Schema.String>>, never, never>;
282
282
  readonly package: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
283
+ readonly compatibility: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
284
+ readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("../model-compatibility.js").ReasoningField, import("../model-compatibility.js").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("../model-compatibility.js").ReasoningField, import("../model-compatibility.js").ReasoningField, never, never>>, never, never>;
285
+ readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
286
+ readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
287
+ readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
288
+ readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
289
+ readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
290
+ }>>>, Schema.optionalKey<Schema.Struct<{
291
+ readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("../model-compatibility.js").ReasoningField, import("../model-compatibility.js").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("../model-compatibility.js").ReasoningField, import("../model-compatibility.js").ReasoningField, never, never>>, never, never>;
292
+ readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
293
+ readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
294
+ readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
295
+ readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
296
+ readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
297
+ }>>, never, never>;
283
298
  }>, {}>;
284
299
  export declare class Info extends Info_base {
285
300
  }
@@ -2,6 +2,7 @@ export * as ConfigProvider from "./provider.js";
2
2
  import { Schema } from "effect";
3
3
  import { Money } from "../money.js";
4
4
  import { Capabilities, Compatibility, Family, ID, VariantID } from "../model.js";
5
+ import { ProviderCompatibility } from "../model-compatibility.js";
5
6
  import { Provider } from "../provider.js";
6
7
  import { optional } from "../schema.js";
7
8
  export const Settings = Schema.StructWithRest(Schema.Struct({
@@ -80,6 +81,8 @@ export class Info extends Schema.Class("Config.Provider")({
80
81
  name: Schema.String.pipe(optional),
81
82
  env: Schema.String.pipe(Schema.Array, optional),
82
83
  package: Schema.String.pipe(optional),
84
+ // Defaults for every model of this provider; model compatibility overrides individual fields.
85
+ compatibility: ProviderCompatibility.pipe(optional),
83
86
  ...Overlays,
84
87
  models: Schema.Record(Schema.String, Model).pipe(optional),
85
88
  }) {
@@ -0,0 +1,30 @@
1
+ import { Schema } from "effect";
2
+ export type ReasoningField = "reasoning" | "reasoning_content" | "reasoning_text" | (string & {});
3
+ export declare const ReasoningField: Schema.Codec<ReasoningField>;
4
+ export declare const MaxTokensField: Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>;
5
+ export type MaxTokensField = typeof MaxTokensField.Type;
6
+ export interface Compatibility extends Schema.Schema.Type<typeof Compatibility> {
7
+ }
8
+ export declare const Compatibility: Schema.Struct<{
9
+ readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<ReasoningField, ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<ReasoningField, ReasoningField, never, never>>, never, never>;
10
+ /** Require every assistant message to include its reasoning field, even when empty. */
11
+ readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
12
+ readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
13
+ readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
14
+ readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
15
+ readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
16
+ /** Supports Anthropic's thinking-prefix mismatch controls. Overrides model-ID detection. */
17
+ readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
18
+ /** Supports per-message effort updates. Overrides model-ID detection. */
19
+ readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
20
+ }>;
21
+ export interface ProviderCompatibility extends Schema.Schema.Type<typeof ProviderCompatibility> {
22
+ }
23
+ export declare const ProviderCompatibility: Schema.Struct<{
24
+ readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<ReasoningField, ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<ReasoningField, ReasoningField, never, never>>, never, never>;
25
+ readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
26
+ readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
27
+ readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
28
+ readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
29
+ readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
30
+ }>;
@@ -0,0 +1,23 @@
1
+ import { Schema, Struct } from "effect";
2
+ import { optional } from "./schema.js";
3
+ export const ReasoningField = Schema.Union([
4
+ Schema.Literals(["reasoning", "reasoning_content", "reasoning_text"]),
5
+ Schema.String,
6
+ ]).annotate({ identifier: "Model.ReasoningField" });
7
+ export const MaxTokensField = Schema.Literals(["max_completion_tokens", "max_tokens"]).annotate({
8
+ identifier: "Model.MaxTokensField",
9
+ });
10
+ export const Compatibility = Schema.Struct({
11
+ reasoningField: ReasoningField.pipe(optional),
12
+ /** Require every assistant message to include its reasoning field, even when empty. */
13
+ requireReasoning: Schema.Boolean.pipe(optional),
14
+ maxTokensField: MaxTokensField.pipe(optional),
15
+ requireFinishReason: Schema.Boolean.pipe(optional),
16
+ requireAssistantAfterTool: Schema.Boolean.pipe(optional),
17
+ supportsPromptCacheKey: Schema.Boolean.pipe(optional),
18
+ /** Supports Anthropic's thinking-prefix mismatch controls. Overrides model-ID detection. */
19
+ supportsThinkingBlockBinding: Schema.Boolean.pipe(optional),
20
+ /** Supports per-message effort updates. Overrides model-ID detection. */
21
+ supportsEffortUpdates: Schema.Boolean.pipe(optional),
22
+ }).annotate({ identifier: "Model.Compatibility" });
23
+ export const ProviderCompatibility = Schema.Struct(Struct.omit(Compatibility.fields, ["supportsThinkingBlockBinding", "supportsEffortUpdates"])).annotate({ identifier: "Provider.Compatibility" });
package/dist/model.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * as Model from "./model.js";
2
2
  import { Schema } from "effect";
3
3
  import { Provider } from "./provider.js";
4
+ import { Compatibility, MaxTokensField, ReasoningField } from "./model-compatibility.js";
4
5
  export declare const ID: Schema.brand<Schema.String, "Model.ID">;
5
6
  export type ID = typeof ID.Type;
6
7
  export declare const Event: {
@@ -98,12 +99,9 @@ export declare const Ref: Schema.Struct<{
98
99
  };
99
100
  export interface Ref extends Schema.Schema.Type<typeof Ref> {
100
101
  }
102
+ export { Compatibility, MaxTokensField, ReasoningField };
101
103
  export declare const Family: Schema.brand<Schema.String, "Model.Family">;
102
104
  export type Family = typeof Family.Type;
103
- export type ReasoningField = "reasoning" | "reasoning_content" | "reasoning_text" | (string & {});
104
- export declare const ReasoningField: Schema.Codec<ReasoningField>;
105
- export declare const MaxTokensField: Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>;
106
- export type MaxTokensField = typeof MaxTokensField.Type;
107
105
  export declare const Settings: Schema.StructWithRest<Schema.Struct<{
108
106
  readonly compaction: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Struct<{
109
107
  readonly type: Schema.Literal<"summary">;
@@ -141,21 +139,6 @@ export declare const Overlays: {
141
139
  headers: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.String>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.String>>, never, never>;
142
140
  body: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Any>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Any>>, never, never>;
143
141
  };
144
- export interface Compatibility extends Schema.Schema.Type<typeof Compatibility> {
145
- }
146
- export declare const Compatibility: Schema.Struct<{
147
- readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<ReasoningField, ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<ReasoningField, ReasoningField, never, never>>, never, never>;
148
- /** Require every assistant message to include its reasoning field, even when empty. */
149
- readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
150
- readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
151
- readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
152
- readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
153
- readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
154
- /** Supports Anthropic's thinking-prefix mismatch controls. Overrides model-ID detection. */
155
- readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
156
- /** Supports per-message effort updates. Overrides model-ID detection. */
157
- readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
158
- }>;
159
142
  export interface Capabilities extends Schema.Schema.Type<typeof Capabilities> {
160
143
  }
161
144
  export declare const Capabilities: Schema.Struct<{
@@ -362,27 +345,21 @@ export declare const Info: Schema.Struct<{
362
345
  readonly name: Schema.String;
363
346
  readonly compatibility: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
364
347
  readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<ReasoningField, ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<ReasoningField, ReasoningField, never, never>>, never, never>;
365
- /** Require every assistant message to include its reasoning field, even when empty. */
366
348
  readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
367
349
  readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
368
350
  readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
369
351
  readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
370
352
  readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
371
- /** Supports Anthropic's thinking-prefix mismatch controls. Overrides model-ID detection. */
372
353
  readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
373
- /** Supports per-message effort updates. Overrides model-ID detection. */
374
354
  readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
375
355
  }>>>, Schema.optionalKey<Schema.Struct<{
376
356
  readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<ReasoningField, ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<ReasoningField, ReasoningField, never, never>>, never, never>;
377
- /** Require every assistant message to include its reasoning field, even when empty. */
378
357
  readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
379
358
  readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
380
359
  readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
381
360
  readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
382
361
  readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
383
- /** Supports Anthropic's thinking-prefix mismatch controls. Overrides model-ID detection. */
384
362
  readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
385
- /** Supports per-message effort updates. Overrides model-ID detection. */
386
363
  readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
387
364
  }>>, never, never>;
388
365
  readonly package: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
package/dist/model.js CHANGED
@@ -2,6 +2,7 @@ export * as Model from "./model.js";
2
2
  import { Schema } from "effect";
3
3
  import { optional, statics } from "./schema.js";
4
4
  import { Provider } from "./provider.js";
5
+ import { Compatibility, MaxTokensField, ReasoningField } from "./model-compatibility.js";
5
6
  import { Money } from "./money.js";
6
7
  import { ephemeral, inventory } from "./event.js";
7
8
  export const ID = Schema.String.pipe(Schema.brand("Model.ID"));
@@ -32,14 +33,8 @@ export const Ref = Schema.Struct({
32
33
  });
33
34
  },
34
35
  })));
36
+ export { Compatibility, MaxTokensField, ReasoningField };
35
37
  export const Family = Schema.String.pipe(Schema.brand("Model.Family"));
36
- export const ReasoningField = Schema.Union([
37
- Schema.Literals(["reasoning", "reasoning_content", "reasoning_text"]),
38
- Schema.String,
39
- ]).annotate({ identifier: "Model.ReasoningField" });
40
- export const MaxTokensField = Schema.Literals(["max_completion_tokens", "max_tokens"]).annotate({
41
- identifier: "Model.MaxTokensField",
42
- });
43
38
  export const Settings = Schema.StructWithRest(Schema.Struct({
44
39
  compaction: Provider.Compaction.pipe(optional),
45
40
  }),
@@ -50,19 +45,6 @@ export const Overlays = {
50
45
  headers: Schema.Record(Schema.String, Schema.String).pipe(optional),
51
46
  body: Schema.Record(Schema.String, Schema.Any).pipe(optional),
52
47
  };
53
- export const Compatibility = Schema.Struct({
54
- reasoningField: ReasoningField.pipe(optional),
55
- /** Require every assistant message to include its reasoning field, even when empty. */
56
- requireReasoning: Schema.Boolean.pipe(optional),
57
- maxTokensField: MaxTokensField.pipe(optional),
58
- requireFinishReason: Schema.Boolean.pipe(optional),
59
- requireAssistantAfterTool: Schema.Boolean.pipe(optional),
60
- supportsPromptCacheKey: Schema.Boolean.pipe(optional),
61
- /** Supports Anthropic's thinking-prefix mismatch controls. Overrides model-ID detection. */
62
- supportsThinkingBlockBinding: Schema.Boolean.pipe(optional),
63
- /** Supports per-message effort updates. Overrides model-ID detection. */
64
- supportsEffortUpdates: Schema.Boolean.pipe(optional),
65
- }).annotate({ identifier: "Model.Compatibility" });
66
48
  export const Capabilities = Schema.Struct({
67
49
  tools: Schema.Boolean,
68
50
  input: Schema.Array(Schema.String),
@@ -241,6 +241,22 @@ export declare const Info: Schema.Struct<{
241
241
  readonly name: Schema.String;
242
242
  readonly activation: Schema.Literals<readonly ["auto", "enabled", "disabled"]>;
243
243
  readonly package: Schema.String;
244
+ /** Inherited by every model of this provider; model compatibility overrides individual fields. */
245
+ readonly compatibility: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
246
+ readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("./model-compatibility.js").ReasoningField, import("./model-compatibility.js").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("./model-compatibility.js").ReasoningField, import("./model-compatibility.js").ReasoningField, never, never>>, never, never>;
247
+ readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
248
+ readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
249
+ readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
250
+ readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
251
+ readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
252
+ }>>>, Schema.optionalKey<Schema.Struct<{
253
+ readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("./model-compatibility.js").ReasoningField, import("./model-compatibility.js").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("./model-compatibility.js").ReasoningField, import("./model-compatibility.js").ReasoningField, never, never>>, never, never>;
254
+ readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
255
+ readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
256
+ readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
257
+ readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
258
+ readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
259
+ }>>, never, never>;
244
260
  }> & {
245
261
  empty: (id: ID) => Info;
246
262
  };
package/dist/provider.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * as Provider from "./provider.js";
2
2
  import { Effect, Schema } from "effect";
3
3
  import { Integration } from "./integration.js";
4
+ import { ProviderCompatibility } from "./model-compatibility.js";
4
5
  import { optional, statics } from "./schema.js";
5
6
  import { ephemeral, inventory } from "./event.js";
6
7
  export const ID = Schema.String.pipe(Schema.brand("Provider.ID"), Schema.annotate({ identifier: "Provider.ID" }), statics((schema) => ({
@@ -52,6 +53,8 @@ export const Info = Schema.Struct({
52
53
  name: Schema.String,
53
54
  activation: Activation,
54
55
  package: Package,
56
+ /** Inherited by every model of this provider; model compatibility overrides individual fields. */
57
+ compatibility: ProviderCompatibility.pipe(optional),
55
58
  ...Overlays,
56
59
  })
57
60
  .annotate({ identifier: "Provider.Info" })
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@opencode/schema",
4
- "version": "0.0.0-dev-20855",
4
+ "version": "0.0.0-dev-20856",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {