mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-07 01:08:58 +00:00
Co-authored-by: Leka74 <leke.dobruna@gmail.com> Co-authored-by: Leka74 <791494+Leka74@users.noreply.github.com>
93 lines
2.6 KiB
TypeScript
93 lines
2.6 KiB
TypeScript
import { Hono } from "hono"
|
|
import { describeRoute, validator, resolver } from "hono-openapi"
|
|
import z from "zod"
|
|
import { Config } from "../../config/config"
|
|
import { Provider } from "../../provider/provider"
|
|
import { mapValues } from "remeda"
|
|
import { errors } from "../error"
|
|
import { Log } from "../../util/log"
|
|
import { lazy } from "../../util/lazy"
|
|
|
|
const log = Log.create({ service: "server" })
|
|
|
|
export const ConfigRoutes = lazy(() =>
|
|
new Hono()
|
|
.get(
|
|
"/",
|
|
describeRoute({
|
|
summary: "Get configuration",
|
|
description: "Retrieve the current OpenCode configuration settings and preferences.",
|
|
operationId: "config.get",
|
|
responses: {
|
|
200: {
|
|
description: "Get config info",
|
|
content: {
|
|
"application/json": {
|
|
schema: resolver(Config.Info),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
async (c) => {
|
|
return c.json(await Config.get())
|
|
},
|
|
)
|
|
.patch(
|
|
"/",
|
|
describeRoute({
|
|
summary: "Update configuration",
|
|
description: "Update OpenCode configuration settings and preferences.",
|
|
operationId: "config.update",
|
|
responses: {
|
|
200: {
|
|
description: "Successfully updated config",
|
|
content: {
|
|
"application/json": {
|
|
schema: resolver(Config.Info),
|
|
},
|
|
},
|
|
},
|
|
...errors(400),
|
|
},
|
|
}),
|
|
validator("json", Config.Info),
|
|
async (c) => {
|
|
const config = c.req.valid("json")
|
|
await Config.update(config)
|
|
return c.json(config)
|
|
},
|
|
)
|
|
.get(
|
|
"/providers",
|
|
describeRoute({
|
|
summary: "List config providers",
|
|
description: "Get a list of all configured AI providers and their default models.",
|
|
operationId: "config.providers",
|
|
responses: {
|
|
200: {
|
|
description: "List of providers",
|
|
content: {
|
|
"application/json": {
|
|
schema: resolver(
|
|
z.object({
|
|
providers: Provider.Info.array(),
|
|
default: z.record(z.string(), z.string()),
|
|
}),
|
|
),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
async (c) => {
|
|
using _ = log.time("providers")
|
|
const providers = await Provider.list().then((x) => mapValues(x, (item) => item))
|
|
return c.json({
|
|
providers: Object.values(providers),
|
|
default: mapValues(providers, (item) => Provider.sort(Object.values(item.models))[0].id),
|
|
})
|
|
},
|
|
),
|
|
)
|