Files
openclaw/extensions/qqbot/src/config-schema.ts
Frank Yang dbe6663c34 fix(qqbot): align speech schema and setup validation (#58253)
* fix(qqbot): align speech schema and setup validation

* fix(qqbot): preserve use-env setup flow

* fix(qqbot): reject use-env on named accounts

* fix(qqbot): restore default account schema support
2026-03-31 21:11:45 +08:00

69 lines
2.1 KiB
TypeScript

import {
AllowFromListSchema,
buildChannelConfigSchema,
} from "openclaw/plugin-sdk/channel-config-schema";
import { buildSecretInputSchema } from "openclaw/plugin-sdk/secret-input";
import { z } from "zod";
const AudioFormatPolicySchema = z
.object({
sttDirectFormats: z.array(z.string()).optional(),
uploadDirectFormats: z.array(z.string()).optional(),
transcodeEnabled: z.boolean().optional(),
})
.optional();
const QQBotSpeechQueryParamsSchema = z.record(z.string(), z.string()).optional();
const QQBotTtsSchema = z
.object({
enabled: z.boolean().optional(),
provider: z.string().optional(),
baseUrl: z.string().optional(),
apiKey: z.string().optional(),
model: z.string().optional(),
voice: z.string().optional(),
authStyle: z.enum(["bearer", "api-key"]).optional(),
queryParams: QQBotSpeechQueryParamsSchema,
speed: z.number().optional(),
})
.strict()
.optional();
const QQBotSttSchema = z
.object({
enabled: z.boolean().optional(),
provider: z.string().optional(),
baseUrl: z.string().optional(),
apiKey: z.string().optional(),
model: z.string().optional(),
})
.strict()
.optional();
const QQBotAccountSchema = z
.object({
enabled: z.boolean().optional(),
name: z.string().optional(),
appId: z.string().optional(),
clientSecret: buildSecretInputSchema().optional(),
clientSecretFile: z.string().optional(),
allowFrom: AllowFromListSchema,
systemPrompt: z.string().optional(),
markdownSupport: z.boolean().optional(),
voiceDirectUploadFormats: z.array(z.string()).optional(),
audioFormatPolicy: AudioFormatPolicySchema,
urlDirectUpload: z.boolean().optional(),
upgradeUrl: z.string().optional(),
upgradeMode: z.enum(["doc", "hot-reload"]).optional(),
})
.strict();
export const QQBotConfigSchema = QQBotAccountSchema.extend({
tts: QQBotTtsSchema,
stt: QQBotSttSchema,
accounts: z.object({}).catchall(QQBotAccountSchema).optional(),
defaultAccount: z.string().optional(),
});
export const qqbotChannelConfigSchema = buildChannelConfigSchema(QQBotConfigSchema);