141 lines
4.4 KiB
TypeScript
141 lines
4.4 KiB
TypeScript
import { z } from "zod";
|
|
import { isSafeExecutableValue } from "../infra/exec-safety.js";
|
|
|
|
export const HexColorSchema = z.string().regex(/^#?[0-9a-fA-F]{6}$/, "expected hex color (RRGGBB)");
|
|
|
|
export const ExecutableTokenSchema = z
|
|
.string()
|
|
.refine(isSafeExecutableValue, "expected safe executable name or path");
|
|
|
|
export const GroupPolicySchema = z.enum(["open", "disabled", "allowlist"]);
|
|
|
|
export const DmPolicySchema = z.enum(["pairing", "allowlist", "open", "disabled"]);
|
|
|
|
export const ReplyToModeSchema = z.union([z.literal("off"), z.literal("first"), z.literal("all")]);
|
|
|
|
export const MSTeamsReplyStyleSchema = z.enum(["thread", "top-level"]);
|
|
|
|
export const MarkdownTableModeSchema = z.enum(["off", "bullets", "code"]);
|
|
|
|
export const MarkdownConfigSchema = z
|
|
.object({
|
|
tables: MarkdownTableModeSchema.optional(),
|
|
})
|
|
.strict()
|
|
.optional();
|
|
|
|
export const BlockStreamingCoalesceSchema = z
|
|
.object({
|
|
minChars: z.number().int().positive().optional(),
|
|
maxChars: z.number().int().positive().optional(),
|
|
idleMs: z.number().int().nonnegative().optional(),
|
|
})
|
|
.strict();
|
|
|
|
export const BlockStreamingChunkSchema = z
|
|
.object({
|
|
minChars: z.number().int().positive().optional(),
|
|
maxChars: z.number().int().positive().optional(),
|
|
breakPreference: z
|
|
.union([z.literal("paragraph"), z.literal("newline"), z.literal("sentence")])
|
|
.optional(),
|
|
})
|
|
.strict();
|
|
|
|
export const RetryConfigSchema = z
|
|
.object({
|
|
attempts: z.number().int().min(1).optional(),
|
|
minDelayMs: z.number().int().min(0).optional(),
|
|
maxDelayMs: z.number().int().min(0).optional(),
|
|
jitter: z.number().min(0).max(1).optional(),
|
|
})
|
|
.strict()
|
|
.optional();
|
|
|
|
export const ToolPolicySchema = z
|
|
.object({
|
|
allow: z.array(z.string()).optional(),
|
|
deny: z.array(z.string()).optional(),
|
|
})
|
|
.strict()
|
|
.optional();
|
|
|
|
export const TtsProviderSchema = z.enum(["elevenlabs", "openai"]);
|
|
export const TtsModeSchema = z.enum(["final", "all"]);
|
|
export const TtsConfigSchema = z
|
|
.object({
|
|
enabled: z.boolean().optional(),
|
|
mode: TtsModeSchema.optional(),
|
|
provider: TtsProviderSchema.optional(),
|
|
summaryModel: z.string().optional(),
|
|
modelOverrides: z
|
|
.object({
|
|
enabled: z.boolean().optional(),
|
|
allowText: z.boolean().optional(),
|
|
allowProvider: z.boolean().optional(),
|
|
allowVoice: z.boolean().optional(),
|
|
allowModelId: z.boolean().optional(),
|
|
allowVoiceSettings: z.boolean().optional(),
|
|
allowNormalization: z.boolean().optional(),
|
|
allowSeed: z.boolean().optional(),
|
|
})
|
|
.strict()
|
|
.optional(),
|
|
elevenlabs: z
|
|
.object({
|
|
apiKey: z.string().optional(),
|
|
baseUrl: z.string().optional(),
|
|
voiceId: z.string().optional(),
|
|
modelId: z.string().optional(),
|
|
seed: z.number().int().min(0).max(4294967295).optional(),
|
|
applyTextNormalization: z.enum(["auto", "on", "off"]).optional(),
|
|
languageCode: z.string().optional(),
|
|
voiceSettings: z
|
|
.object({
|
|
stability: z.number().min(0).max(1).optional(),
|
|
similarityBoost: z.number().min(0).max(1).optional(),
|
|
style: z.number().min(0).max(1).optional(),
|
|
useSpeakerBoost: z.boolean().optional(),
|
|
speed: z.number().min(0.5).max(2).optional(),
|
|
})
|
|
.strict()
|
|
.optional(),
|
|
})
|
|
.strict()
|
|
.optional(),
|
|
openai: z
|
|
.object({
|
|
apiKey: z.string().optional(),
|
|
model: z.string().optional(),
|
|
voice: z.string().optional(),
|
|
})
|
|
.strict()
|
|
.optional(),
|
|
prefsPath: z.string().optional(),
|
|
maxTextLength: z.number().int().min(1).optional(),
|
|
timeoutMs: z.number().int().min(1000).max(120000).optional(),
|
|
})
|
|
.strict()
|
|
.optional();
|
|
|
|
export const ValyuConfigSchema = z
|
|
.object({
|
|
apiKey: z.string().optional(),
|
|
baseUrl: z.string().optional(),
|
|
maxResults: z.number().int().positive().optional(),
|
|
searchType: z.union([z.literal("all"), z.literal("web"), z.literal("proprietary")]).optional(),
|
|
deepSearch: z.boolean().optional(),
|
|
})
|
|
.strict()
|
|
.optional();
|
|
|
|
export const NativeCommandsSettingSchema = z.union([z.boolean(), z.literal("auto")]);
|
|
|
|
export const ProviderCommandsSchema = z
|
|
.object({
|
|
native: NativeCommandsSettingSchema.optional(),
|
|
nativeSkills: NativeCommandsSettingSchema.optional(),
|
|
})
|
|
.strict()
|
|
.optional();
|