152 lines
5.2 KiB
TypeScript
152 lines
5.2 KiB
TypeScript
import { z } from "zod";
|
|
import {
|
|
HeartbeatSchema,
|
|
MemorySearchSchema,
|
|
SandboxBrowserSchema,
|
|
SandboxDockerSchema,
|
|
SandboxPruneSchema,
|
|
} from "./zod-schema.agent-runtime.js";
|
|
import {
|
|
BlockStreamingChunkSchema,
|
|
BlockStreamingCoalesceSchema,
|
|
CliBackendSchema,
|
|
HumanDelaySchema,
|
|
} from "./zod-schema.core.js";
|
|
|
|
export const AgentDefaultsSchema = z
|
|
.object({
|
|
model: z
|
|
.object({
|
|
primary: z.string().optional(),
|
|
fallbacks: z.array(z.string()).optional(),
|
|
})
|
|
.optional(),
|
|
imageModel: z
|
|
.object({
|
|
primary: z.string().optional(),
|
|
fallbacks: z.array(z.string()).optional(),
|
|
})
|
|
.optional(),
|
|
models: z
|
|
.record(
|
|
z.string(),
|
|
z.object({
|
|
alias: z.string().optional(),
|
|
/** Provider-specific API parameters (e.g., GLM-4.7 thinking mode). */
|
|
params: z.record(z.string(), z.unknown()).optional(),
|
|
}),
|
|
)
|
|
.optional(),
|
|
workspace: z.string().optional(),
|
|
skipBootstrap: z.boolean().optional(),
|
|
bootstrapMaxChars: z.number().int().positive().optional(),
|
|
userTimezone: z.string().optional(),
|
|
timeFormat: z.union([z.literal("auto"), z.literal("12"), z.literal("24")]).optional(),
|
|
contextTokens: z.number().int().positive().optional(),
|
|
cliBackends: z.record(z.string(), CliBackendSchema).optional(),
|
|
memorySearch: MemorySearchSchema,
|
|
contextPruning: z
|
|
.object({
|
|
mode: z
|
|
.union([z.literal("off"), z.literal("adaptive"), z.literal("aggressive")])
|
|
.optional(),
|
|
keepLastAssistants: z.number().int().nonnegative().optional(),
|
|
softTrimRatio: z.number().min(0).max(1).optional(),
|
|
hardClearRatio: z.number().min(0).max(1).optional(),
|
|
minPrunableToolChars: z.number().int().nonnegative().optional(),
|
|
tools: z
|
|
.object({
|
|
allow: z.array(z.string()).optional(),
|
|
deny: z.array(z.string()).optional(),
|
|
})
|
|
.optional(),
|
|
softTrim: z
|
|
.object({
|
|
maxChars: z.number().int().nonnegative().optional(),
|
|
headChars: z.number().int().nonnegative().optional(),
|
|
tailChars: z.number().int().nonnegative().optional(),
|
|
})
|
|
.optional(),
|
|
hardClear: z
|
|
.object({
|
|
enabled: z.boolean().optional(),
|
|
placeholder: z.string().optional(),
|
|
})
|
|
.optional(),
|
|
})
|
|
.optional(),
|
|
compaction: z
|
|
.object({
|
|
mode: z.union([z.literal("default"), z.literal("safeguard")]).optional(),
|
|
reserveTokensFloor: z.number().int().nonnegative().optional(),
|
|
memoryFlush: z
|
|
.object({
|
|
enabled: z.boolean().optional(),
|
|
softThresholdTokens: z.number().int().nonnegative().optional(),
|
|
prompt: z.string().optional(),
|
|
systemPrompt: z.string().optional(),
|
|
})
|
|
.optional(),
|
|
})
|
|
.optional(),
|
|
thinkingDefault: z
|
|
.union([
|
|
z.literal("off"),
|
|
z.literal("minimal"),
|
|
z.literal("low"),
|
|
z.literal("medium"),
|
|
z.literal("high"),
|
|
z.literal("xhigh"),
|
|
])
|
|
.optional(),
|
|
verboseDefault: z.union([z.literal("off"), z.literal("on"), z.literal("full")]).optional(),
|
|
elevatedDefault: z.union([z.literal("off"), z.literal("on")]).optional(),
|
|
blockStreamingDefault: z.union([z.literal("off"), z.literal("on")]).optional(),
|
|
blockStreamingBreak: z.union([z.literal("text_end"), z.literal("message_end")]).optional(),
|
|
blockStreamingChunk: BlockStreamingChunkSchema.optional(),
|
|
blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(),
|
|
humanDelay: HumanDelaySchema.optional(),
|
|
timeoutSeconds: z.number().int().positive().optional(),
|
|
mediaMaxMb: z.number().positive().optional(),
|
|
typingIntervalSeconds: z.number().int().positive().optional(),
|
|
typingMode: z
|
|
.union([
|
|
z.literal("never"),
|
|
z.literal("instant"),
|
|
z.literal("thinking"),
|
|
z.literal("message"),
|
|
])
|
|
.optional(),
|
|
heartbeat: HeartbeatSchema,
|
|
maxConcurrent: z.number().int().positive().optional(),
|
|
subagents: z
|
|
.object({
|
|
maxConcurrent: z.number().int().positive().optional(),
|
|
archiveAfterMinutes: z.number().int().positive().optional(),
|
|
model: z
|
|
.union([
|
|
z.string(),
|
|
z.object({
|
|
primary: z.string().optional(),
|
|
fallbacks: z.array(z.string()).optional(),
|
|
}),
|
|
])
|
|
.optional(),
|
|
})
|
|
.optional(),
|
|
sandbox: z
|
|
.object({
|
|
mode: z.union([z.literal("off"), z.literal("non-main"), z.literal("all")]).optional(),
|
|
workspaceAccess: z.union([z.literal("none"), z.literal("ro"), z.literal("rw")]).optional(),
|
|
sessionToolsVisibility: z.union([z.literal("spawned"), z.literal("all")]).optional(),
|
|
scope: z.union([z.literal("session"), z.literal("agent"), z.literal("shared")]).optional(),
|
|
perSession: z.boolean().optional(),
|
|
workspaceRoot: z.string().optional(),
|
|
docker: SandboxDockerSchema,
|
|
browser: SandboxBrowserSchema,
|
|
prune: SandboxPruneSchema,
|
|
})
|
|
.optional(),
|
|
})
|
|
.optional();
|