UNPKG

@gguf/claw

Version:

Multi-channel AI gateway with extensible messaging integrations

98 lines (92 loc) 3.37 kB
import { BlockStreamingCoalesceSchema, DmConfigSchema, DmPolicySchema, GroupPolicySchema, MarkdownConfigSchema, ToolPolicySchema, requireOpenAllowFrom, } from "openclaw/plugin-sdk"; import { z } from "zod"; const IrcGroupSchema = z .object({ requireMention: z.boolean().optional(), tools: ToolPolicySchema, toolsBySender: z.record(z.string(), ToolPolicySchema).optional(), skills: z.array(z.string()).optional(), enabled: z.boolean().optional(), allowFrom: z.array(z.union([z.string(), z.number()])).optional(), systemPrompt: z.string().optional(), }) .strict(); const IrcNickServSchema = z .object({ enabled: z.boolean().optional(), service: z.string().optional(), password: z.string().optional(), passwordFile: z.string().optional(), register: z.boolean().optional(), registerEmail: z.string().optional(), }) .strict() .superRefine((value, ctx) => { if (value.register && !value.registerEmail?.trim()) { ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["registerEmail"], message: "channels.irc.nickserv.register=true requires channels.irc.nickserv.registerEmail", }); } }); export const IrcAccountSchemaBase = z .object({ name: z.string().optional(), enabled: z.boolean().optional(), host: z.string().optional(), port: z.number().int().min(1).max(65535).optional(), tls: z.boolean().optional(), nick: z.string().optional(), username: z.string().optional(), realname: z.string().optional(), password: z.string().optional(), passwordFile: z.string().optional(), nickserv: IrcNickServSchema.optional(), dmPolicy: DmPolicySchema.optional().default("pairing"), allowFrom: z.array(z.union([z.string(), z.number()])).optional(), groupPolicy: GroupPolicySchema.optional().default("allowlist"), groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), groups: z.record(z.string(), IrcGroupSchema.optional()).optional(), channels: z.array(z.string()).optional(), mentionPatterns: z.array(z.string()).optional(), markdown: MarkdownConfigSchema, historyLimit: z.number().int().min(0).optional(), dmHistoryLimit: z.number().int().min(0).optional(), dms: z.record(z.string(), DmConfigSchema.optional()).optional(), textChunkLimit: z.number().int().positive().optional(), chunkMode: z.enum(["length", "newline"]).optional(), blockStreaming: z.boolean().optional(), blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), responsePrefix: z.string().optional(), mediaMaxMb: z.number().positive().optional(), }) .strict(); export const IrcAccountSchema = IrcAccountSchemaBase.superRefine((value, ctx) => { requireOpenAllowFrom({ policy: value.dmPolicy, allowFrom: value.allowFrom, ctx, path: ["allowFrom"], message: 'channels.irc.dmPolicy="open" requires channels.irc.allowFrom to include "*"', }); }); export const IrcConfigSchema = IrcAccountSchemaBase.extend({ accounts: z.record(z.string(), IrcAccountSchema.optional()).optional(), }).superRefine((value, ctx) => { requireOpenAllowFrom({ policy: value.dmPolicy, allowFrom: value.allowFrom, ctx, path: ["allowFrom"], message: 'channels.irc.dmPolicy="open" requires channels.irc.allowFrom to include "*"', }); });