feat: add models.dev schema ref for model autocomplete in opencode.json (#12528)

This commit is contained in:
Tommy D. Rossi
2026-02-07 00:46:31 +01:00
committed by GitHub
parent 95d2d4d3a7
commit 576a681a4f
4 changed files with 28 additions and 8 deletions

View File

@@ -497,6 +497,9 @@
"web-tree-sitter", "web-tree-sitter",
"tree-sitter-bash", "tree-sitter-bash",
], ],
"patchedDependencies": {
"@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch",
},
"overrides": { "overrides": {
"@types/bun": "catalog:", "@types/bun": "catalog:",
"@types/node": "catalog:", "@types/node": "catalog:",

View File

@@ -100,5 +100,7 @@
"@types/bun": "catalog:", "@types/bun": "catalog:",
"@types/node": "catalog:" "@types/node": "catalog:"
}, },
"patchedDependencies": {} "patchedDependencies": {
"@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch"
}
} }

View File

@@ -33,6 +33,8 @@ import { proxied } from "@/util/proxied"
import { iife } from "@/util/iife" import { iife } from "@/util/iife"
export namespace Config { export namespace Config {
const ModelId = z.string().meta({ $ref: "https://models.dev/model-schema.json#/$defs/Model" })
const log = Log.create({ service: "config" }) const log = Log.create({ service: "config" })
// Managed settings directory for enterprise deployments (highest priority, admin-controlled) // Managed settings directory for enterprise deployments (highest priority, admin-controlled)
@@ -653,7 +655,7 @@ export namespace Config {
template: z.string(), template: z.string(),
description: z.string().optional(), description: z.string().optional(),
agent: z.string().optional(), agent: z.string().optional(),
model: z.string().optional(), model: ModelId.optional(),
subtask: z.boolean().optional(), subtask: z.boolean().optional(),
}) })
export type Command = z.infer<typeof Command> export type Command = z.infer<typeof Command>
@@ -669,7 +671,7 @@ export namespace Config {
export const Agent = z export const Agent = z
.object({ .object({
model: z.string().optional(), model: ModelId.optional(),
variant: z variant: z
.string() .string()
.optional() .optional()
@@ -1040,11 +1042,8 @@ export namespace Config {
.array(z.string()) .array(z.string())
.optional() .optional()
.describe("When set, ONLY these providers will be enabled. All other providers will be ignored"), .describe("When set, ONLY these providers will be enabled. All other providers will be ignored"),
model: z.string().describe("Model to use in the format of provider/model, eg anthropic/claude-2").optional(), model: ModelId.describe("Model to use in the format of provider/model, eg anthropic/claude-2").optional(),
small_model: z small_model: ModelId.describe("Small model to use for tasks like title generation in the format of provider/model").optional(),
.string()
.describe("Small model to use for tasks like title generation in the format of provider/model")
.optional(),
default_agent: z default_agent: z
.string() .string()
.optional() .optional()

View File

@@ -0,0 +1,16 @@
diff --git a/dist/vendors/convert.js b/dist/vendors/convert.js
index 0d615eebfd7cd646937ec1b29f8332db73586ec1..7b146f903c07a9377d676753691cba67781879be 100644
--- a/dist/vendors/convert.js
+++ b/dist/vendors/convert.js
@@ -74,7 +74,10 @@ function convertToOpenAPISchema(jsonSchema, context) {
$ref: `#/components/schemas/${id}`
};
} else if (_jsonSchema.$ref) {
- const { $ref, $defs } = _jsonSchema;
+ const { $ref, $defs, ...rest } = _jsonSchema;
+ if ($ref.includes("://")) {
+ return Object.keys(rest).length > 0 ? rest : { type: "string" };
+ }
const ref = $ref.split("/").pop();
context.components.schemas = {
...context.components.schemas,