feat: add models.dev-backed model capabilities
This commit is contained in:
@@ -19,5 +19,6 @@ export type {
|
||||
SisyphusConfig,
|
||||
SisyphusTasksConfig,
|
||||
RuntimeFallbackConfig,
|
||||
ModelCapabilitiesConfig,
|
||||
FallbackModels,
|
||||
} from "./schema"
|
||||
|
||||
@@ -147,6 +147,37 @@ describe("disabled_mcps schema", () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe("OhMyOpenCodeConfigSchema - model_capabilities", () => {
|
||||
test("accepts valid model capabilities config", () => {
|
||||
const input = {
|
||||
model_capabilities: {
|
||||
enabled: true,
|
||||
auto_refresh_on_start: true,
|
||||
refresh_timeout_ms: 5000,
|
||||
source_url: "https://models.dev/api.json",
|
||||
},
|
||||
}
|
||||
|
||||
const result = OhMyOpenCodeConfigSchema.safeParse(input)
|
||||
|
||||
expect(result.success).toBe(true)
|
||||
if (result.success) {
|
||||
expect(result.data.model_capabilities).toEqual(input.model_capabilities)
|
||||
}
|
||||
})
|
||||
|
||||
test("rejects invalid model capabilities config", () => {
|
||||
const result = OhMyOpenCodeConfigSchema.safeParse({
|
||||
model_capabilities: {
|
||||
refresh_timeout_ms: -1,
|
||||
source_url: "not-a-url",
|
||||
},
|
||||
})
|
||||
|
||||
expect(result.success).toBe(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe("AgentOverrideConfigSchema", () => {
|
||||
describe("category field", () => {
|
||||
test("accepts category as optional string", () => {
|
||||
|
||||
@@ -13,6 +13,7 @@ export * from "./schema/fallback-models"
|
||||
export * from "./schema/git-env-prefix"
|
||||
export * from "./schema/git-master"
|
||||
export * from "./schema/hooks"
|
||||
export * from "./schema/model-capabilities"
|
||||
export * from "./schema/notification"
|
||||
export * from "./schema/oh-my-opencode-config"
|
||||
export * from "./schema/ralph-loop"
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
import { z } from "zod"
|
||||
|
||||
export const ModelCapabilitiesConfigSchema = z.object({
|
||||
enabled: z.boolean().optional(),
|
||||
auto_refresh_on_start: z.boolean().optional(),
|
||||
refresh_timeout_ms: z.number().int().positive().optional(),
|
||||
source_url: z.string().url().optional(),
|
||||
})
|
||||
|
||||
export type ModelCapabilitiesConfig = z.infer<typeof ModelCapabilitiesConfigSchema>
|
||||
@@ -13,6 +13,7 @@ import { ExperimentalConfigSchema } from "./experimental"
|
||||
import { GitMasterConfigSchema } from "./git-master"
|
||||
import { NotificationConfigSchema } from "./notification"
|
||||
import { OpenClawConfigSchema } from "./openclaw"
|
||||
import { ModelCapabilitiesConfigSchema } from "./model-capabilities"
|
||||
import { RalphLoopConfigSchema } from "./ralph-loop"
|
||||
import { RuntimeFallbackConfigSchema } from "./runtime-fallback"
|
||||
import { SkillsConfigSchema } from "./skills"
|
||||
@@ -56,6 +57,7 @@ export const OhMyOpenCodeConfigSchema = z.object({
|
||||
runtime_fallback: z.union([z.boolean(), RuntimeFallbackConfigSchema]).optional(),
|
||||
background_task: BackgroundTaskConfigSchema.optional(),
|
||||
notification: NotificationConfigSchema.optional(),
|
||||
model_capabilities: ModelCapabilitiesConfigSchema.optional(),
|
||||
openclaw: OpenClawConfigSchema.optional(),
|
||||
babysitting: BabysittingConfigSchema.optional(),
|
||||
git_master: GitMasterConfigSchema.optional(),
|
||||
|
||||
Reference in New Issue
Block a user