/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/core/src/v1/config/agent.ts
89 строк
3 KB
Dax
refactor(core): move v1 schemas into core (#30473)
03 июн 2026, 05:42
Не верифицирован
03 июн 2026, 05:42
8345255
Код
Авторство
О чём код?
export * as ConfigAgentV1 from "./agent" import { Schema, SchemaGetter } from "effect" import { PositiveInt } from "../../schema" import { ConfigPermissionV1 } from "./permission" const Color = Schema.Union([ Schema.String.check(Schema.isPattern(/^#[0-9a-fA-F]{6}$/)), Schema.Literals(["primary", "secondary", "accent", "success", "warning", "error", "info"]), ]) const AgentSchema = Schema.StructWithRest( Schema.Struct({ model: Schema.optional(Schema.String), variant: Schema.optional(Schema.String).annotate({ description: "Default model variant for this agent (applies only when using the agent's configured model).", }), temperature: Schema.optional(Schema.Finite), top_p: Schema.optional(Schema.Finite), prompt: Schema.optional(Schema.String), tools: Schema.optional(Schema.Record(Schema.String, Schema.Boolean)).annotate({ description: "@deprecated Use 'permission' field instead", }), disable: Schema.optional(Schema.Boolean), description: Schema.optional(Schema.String).annotate({ description: "Description of when to use the agent" }), mode: Schema.optional(Schema.Literals(["subagent", "primary", "all"])), hidden: Schema.optional(Schema.Boolean).annotate({ description: "Hide this subagent from the @ autocomplete menu (default: false, only applies to mode: subagent)", }), options: Schema.optional(Schema.Record(Schema.String, Schema.Any)), color: Schema.optional(Color).annotate({ description: "Hex color code (e.g., #FF5733) or theme color (e.g., primary)", }), steps: Schema.optional(PositiveInt).annotate({ description: "Maximum number of agentic iterations before forcing text-only response", }), maxSteps: Schema.optional(PositiveInt).annotate({ description: "@deprecated Use 'steps' field instead." }), permission: Schema.optional(ConfigPermissionV1.Info), }), [Schema.Record(Schema.String, Schema.Any)], ) const KNOWN_KEYS = new Set([ "name", "model", "variant", "prompt", "description", "temperature", "top_p", "mode", "hidden", "color", "steps", "maxSteps", "options", "permission", "disable", "tools", ]) const normalize = (agent: Schema.Schema.Type<typeof AgentSchema>): Schema.Schema.Type<typeof AgentSchema> => { const options: Record<string, unknown> = { ...agent.options } for (const [key, value] of Object.entries(agent)) { if (!KNOWN_KEYS.has(key)) options[key] = value } const permission: ConfigPermissionV1.Info = {} for (const [tool, enabled] of Object.entries(agent.tools ?? {})) { const action = enabled ? "allow" : "deny" if (tool === "write" || tool === "edit" || tool === "patch") { permission.edit = action continue } permission[tool] = action } globalThis.Object.assign(permission, agent.permission) const steps = agent.steps ?? agent.maxSteps return { ...agent, options, permission, ...(steps !== undefined ? { steps } : {}) } } export const Info = AgentSchema.pipe( Schema.decodeTo(AgentSchema, { decode: SchemaGetter.transform(normalize), encode: SchemaGetter.passthrough({ strict: false }), }), ).annotate({ identifier: "AgentConfig" }) export type Info = Schema.Schema.Type<typeof Info>