From 2dc9c95530630d73613452d17b62d5b76cc10cf9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 19 Jan 2026 05:59:29 +0000 Subject: [PATCH] style: oxfmt core files --- .../pi-extensions/compaction-safeguard.ts | 3 +- src/agents/sandbox/config-hash.ts | 4 +- src/agents/sandbox/docker.ts | 5 +- src/cli/program/command-registry.ts | 7 +- src/config/zod-schema.agent-defaults.ts | 10 +- src/config/zod-schema.agent-runtime.ts | 70 ++-- src/config/zod-schema.core.ts | 54 +-- src/config/zod-schema.providers-core.ts | 392 +++++++++--------- src/infra/state-migrations.ts | 4 +- 9 files changed, 275 insertions(+), 274 deletions(-) diff --git a/src/agents/pi-extensions/compaction-safeguard.ts b/src/agents/pi-extensions/compaction-safeguard.ts index b944aacd6..9e4c20fef 100644 --- a/src/agents/pi-extensions/compaction-safeguard.ts +++ b/src/agents/pi-extensions/compaction-safeguard.ts @@ -72,8 +72,7 @@ function collectToolFailures(messages: AgentMessage[]): ToolFailure[] { isError?: unknown; }; if (toolResult.isError !== true) continue; - const toolCallId = - typeof toolResult.toolCallId === "string" ? toolResult.toolCallId : ""; + const toolCallId = typeof toolResult.toolCallId === "string" ? toolResult.toolCallId : ""; if (!toolCallId || seen.has(toolCallId)) continue; seen.add(toolCallId); diff --git a/src/agents/sandbox/config-hash.ts b/src/agents/sandbox/config-hash.ts index cf26712d7..07e5588a9 100644 --- a/src/agents/sandbox/config-hash.ts +++ b/src/agents/sandbox/config-hash.ts @@ -15,7 +15,9 @@ function isPrimitive(value: unknown): value is string | number | boolean | bigin function normalizeForHash(value: unknown): unknown { if (value === undefined) return undefined; if (Array.isArray(value)) { - const normalized = value.map(normalizeForHash).filter((item): item is unknown => item !== undefined); + const normalized = value + .map(normalizeForHash) + .filter((item): item is unknown => item !== undefined); const primitives = normalized.filter(isPrimitive); if (primitives.length === normalized.length) { return [...primitives].sort((a, b) => String(a).localeCompare(String(b))); diff --git a/src/agents/sandbox/docker.ts b/src/agents/sandbox/docker.ts index 5fc1e6a8b..2745b3149 100644 --- a/src/agents/sandbox/docker.ts +++ b/src/agents/sandbox/docker.ts @@ -256,8 +256,7 @@ export async function ensureSandboxContainer(params: { registryEntry = registry.entries.find((entry) => entry.containerName === containerName); currentHash = await readContainerConfigHash(containerName); if (!currentHash) { - currentHash = - registryEntry?.configHash ?? null; + currentHash = registryEntry?.configHash ?? null; } hashMismatch = !currentHash || currentHash !== expectedHash; if (hashMismatch) { @@ -296,7 +295,7 @@ export async function ensureSandboxContainer(params: { createdAtMs: now, lastUsedAtMs: now, image: params.cfg.docker.image, - configHash: hashMismatch && running ? currentHash ?? undefined : expectedHash, + configHash: hashMismatch && running ? (currentHash ?? undefined) : expectedHash, }); return containerName; } diff --git a/src/cli/program/command-registry.ts b/src/cli/program/command-registry.ts index 861411b64..7c538362e 100644 --- a/src/cli/program/command-registry.ts +++ b/src/cli/program/command-registry.ts @@ -6,12 +6,7 @@ import { sessionsCommand } from "../../commands/sessions.js"; import { statusCommand } from "../../commands/status.js"; import { setVerbose } from "../../globals.js"; import { defaultRuntime } from "../../runtime.js"; -import { - getFlagValue, - getPositiveIntFlagValue, - getVerboseFlag, - hasFlag, -} from "../argv.js"; +import { getFlagValue, getPositiveIntFlagValue, getVerboseFlag, hasFlag } from "../argv.js"; import { registerBrowserCli } from "../browser-cli.js"; import { registerConfigCli } from "../config-cli.js"; import { registerMemoryCli, runMemoryStatus } from "../memory-cli.js"; diff --git a/src/config/zod-schema.agent-defaults.ts b/src/config/zod-schema.agent-defaults.ts index b4d89fcc9..aafa9a6f4 100644 --- a/src/config/zod-schema.agent-defaults.ts +++ b/src/config/zod-schema.agent-defaults.ts @@ -139,10 +139,12 @@ export const AgentDefaultsSchema = z model: z .union([ z.string(), - z.object({ - primary: z.string().optional(), - fallbacks: z.array(z.string()).optional(), - }).strict(), + z + .object({ + primary: z.string().optional(), + fallbacks: z.array(z.string()).optional(), + }) + .strict(), ]) .optional(), }) diff --git a/src/config/zod-schema.agent-runtime.ts b/src/config/zod-schema.agent-runtime.ts index fbfc2bf5c..2c81510b8 100644 --- a/src/config/zod-schema.agent-runtime.ts +++ b/src/config/zod-schema.agent-runtime.ts @@ -67,10 +67,12 @@ export const SandboxDockerSchema = z z.union([ z.string(), z.number(), - z.object({ - soft: z.number().int().nonnegative().optional(), - hard: z.number().int().nonnegative().optional(), - }).strict(), + z + .object({ + soft: z.number().int().nonnegative().optional(), + hard: z.number().int().nonnegative().optional(), + }) + .strict(), ]), ) .optional(), @@ -334,35 +336,37 @@ export const AgentModelSchema = z.union([ ]); export const AgentEntrySchema = z .object({ - id: z.string(), - default: z.boolean().optional(), - name: z.string().optional(), - workspace: z.string().optional(), - agentDir: z.string().optional(), - model: AgentModelSchema.optional(), - memorySearch: MemorySearchSchema, - humanDelay: HumanDelaySchema.optional(), - heartbeat: HeartbeatSchema, - identity: IdentitySchema, - groupChat: GroupChatSchema, - subagents: z - .object({ - allowAgents: z.array(z.string()).optional(), - model: z - .union([ - z.string(), - z.object({ - primary: z.string().optional(), - fallbacks: z.array(z.string()).optional(), - }).strict(), - ]) - .optional(), - }) - .strict() - .optional(), - sandbox: AgentSandboxSchema, - tools: AgentToolsSchema, -}) + id: z.string(), + default: z.boolean().optional(), + name: z.string().optional(), + workspace: z.string().optional(), + agentDir: z.string().optional(), + model: AgentModelSchema.optional(), + memorySearch: MemorySearchSchema, + humanDelay: HumanDelaySchema.optional(), + heartbeat: HeartbeatSchema, + identity: IdentitySchema, + groupChat: GroupChatSchema, + subagents: z + .object({ + allowAgents: z.array(z.string()).optional(), + model: z + .union([ + z.string(), + z + .object({ + primary: z.string().optional(), + fallbacks: z.array(z.string()).optional(), + }) + .strict(), + ]) + .optional(), + }) + .strict() + .optional(), + sandbox: AgentSandboxSchema, + tools: AgentToolsSchema, + }) .strict(); export const ToolsSchema = z diff --git a/src/config/zod-schema.core.ts b/src/config/zod-schema.core.ts index 8c71f66d2..8b11825fd 100644 --- a/src/config/zod-schema.core.ts +++ b/src/config/zod-schema.core.ts @@ -24,35 +24,35 @@ export const ModelCompatSchema = z export const ModelDefinitionSchema = z .object({ - id: z.string().min(1), - name: z.string().min(1), - api: ModelApiSchema.optional(), - reasoning: z.boolean(), - input: z.array(z.union([z.literal("text"), z.literal("image")])), - cost: z - .object({ - input: z.number(), - output: z.number(), - cacheRead: z.number(), - cacheWrite: z.number(), - }) - .strict(), - contextWindow: z.number().positive(), - maxTokens: z.number().positive(), - headers: z.record(z.string(), z.string()).optional(), - compat: ModelCompatSchema, -}) + id: z.string().min(1), + name: z.string().min(1), + api: ModelApiSchema.optional(), + reasoning: z.boolean(), + input: z.array(z.union([z.literal("text"), z.literal("image")])), + cost: z + .object({ + input: z.number(), + output: z.number(), + cacheRead: z.number(), + cacheWrite: z.number(), + }) + .strict(), + contextWindow: z.number().positive(), + maxTokens: z.number().positive(), + headers: z.record(z.string(), z.string()).optional(), + compat: ModelCompatSchema, + }) .strict(); export const ModelProviderSchema = z .object({ - baseUrl: z.string().min(1), - apiKey: z.string().optional(), - api: ModelApiSchema.optional(), - headers: z.record(z.string(), z.string()).optional(), - authHeader: z.boolean().optional(), - models: z.array(ModelDefinitionSchema), -}) + baseUrl: z.string().min(1), + apiKey: z.string().optional(), + api: ModelApiSchema.optional(), + headers: z.record(z.string(), z.string()).optional(), + authHeader: z.boolean().optional(), + models: z.array(ModelDefinitionSchema), + }) .strict(); export const ModelsConfigSchema = z @@ -151,7 +151,9 @@ export const CliBackendSchema = z sessionArg: z.string().optional(), sessionArgs: z.array(z.string()).optional(), resumeArgs: z.array(z.string()).optional(), - sessionMode: z.union([z.literal("always"), z.literal("existing"), z.literal("none")]).optional(), + sessionMode: z + .union([z.literal("always"), z.literal("existing"), z.literal("none")]) + .optional(), sessionIdFields: z.array(z.string()).optional(), systemPromptArg: z.string().optional(), systemPromptMode: z.union([z.literal("append"), z.literal("replace")]).optional(), diff --git a/src/config/zod-schema.providers-core.ts b/src/config/zod-schema.providers-core.ts index 5eb06b86a..3adbf200d 100644 --- a/src/config/zod-schema.providers-core.ts +++ b/src/config/zod-schema.providers-core.ts @@ -79,46 +79,46 @@ const validateTelegramCustomCommands = ( export const TelegramAccountSchemaBase = z .object({ - name: z.string().optional(), - capabilities: TelegramCapabilitiesSchema.optional(), - enabled: z.boolean().optional(), - commands: ProviderCommandsSchema, - customCommands: z.array(TelegramCustomCommandSchema).optional(), - configWrites: z.boolean().optional(), - dmPolicy: DmPolicySchema.optional().default("pairing"), - botToken: z.string().optional(), - tokenFile: z.string().optional(), - replyToMode: ReplyToModeSchema.optional(), - groups: z.record(z.string(), TelegramGroupSchema.optional()).optional(), - allowFrom: z.array(z.union([z.string(), z.number()])).optional(), - groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), - groupPolicy: GroupPolicySchema.optional().default("allowlist"), - 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(), - blockStreaming: z.boolean().optional(), - draftChunk: BlockStreamingChunkSchema.optional(), - blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), - streamMode: z.enum(["off", "partial", "block"]).optional().default("partial"), - mediaMaxMb: z.number().positive().optional(), - timeoutSeconds: z.number().int().positive().optional(), - retry: RetryConfigSchema, - proxy: z.string().optional(), - webhookUrl: z.string().optional(), - webhookSecret: z.string().optional(), - webhookPath: z.string().optional(), - actions: z - .object({ - reactions: z.boolean().optional(), - sendMessage: z.boolean().optional(), - deleteMessage: z.boolean().optional(), - }) - .strict() - .optional(), - reactionNotifications: z.enum(["off", "own", "all"]).optional(), - reactionLevel: z.enum(["off", "ack", "minimal", "extensive"]).optional(), -}) + name: z.string().optional(), + capabilities: TelegramCapabilitiesSchema.optional(), + enabled: z.boolean().optional(), + commands: ProviderCommandsSchema, + customCommands: z.array(TelegramCustomCommandSchema).optional(), + configWrites: z.boolean().optional(), + dmPolicy: DmPolicySchema.optional().default("pairing"), + botToken: z.string().optional(), + tokenFile: z.string().optional(), + replyToMode: ReplyToModeSchema.optional(), + groups: z.record(z.string(), TelegramGroupSchema.optional()).optional(), + allowFrom: z.array(z.union([z.string(), z.number()])).optional(), + groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), + groupPolicy: GroupPolicySchema.optional().default("allowlist"), + 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(), + blockStreaming: z.boolean().optional(), + draftChunk: BlockStreamingChunkSchema.optional(), + blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), + streamMode: z.enum(["off", "partial", "block"]).optional().default("partial"), + mediaMaxMb: z.number().positive().optional(), + timeoutSeconds: z.number().int().positive().optional(), + retry: RetryConfigSchema, + proxy: z.string().optional(), + webhookUrl: z.string().optional(), + webhookSecret: z.string().optional(), + webhookPath: z.string().optional(), + actions: z + .object({ + reactions: z.boolean().optional(), + sendMessage: z.boolean().optional(), + deleteMessage: z.boolean().optional(), + }) + .strict() + .optional(), + reactionNotifications: z.enum(["off", "own", "all"]).optional(), + reactionLevel: z.enum(["off", "ack", "minimal", "extensive"]).optional(), + }) .strict(); export const TelegramAccountSchema = TelegramAccountSchemaBase.superRefine((value, ctx) => { @@ -191,50 +191,50 @@ export const DiscordGuildSchema = z export const DiscordAccountSchema = z .object({ - name: z.string().optional(), - capabilities: z.array(z.string()).optional(), - enabled: z.boolean().optional(), - commands: ProviderCommandsSchema, - configWrites: z.boolean().optional(), - token: z.string().optional(), - allowBots: z.boolean().optional(), - groupPolicy: GroupPolicySchema.optional().default("allowlist"), - 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(), - blockStreaming: z.boolean().optional(), - blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), - maxLinesPerMessage: z.number().int().positive().optional(), - mediaMaxMb: z.number().positive().optional(), - retry: RetryConfigSchema, - actions: z - .object({ - reactions: z.boolean().optional(), - stickers: z.boolean().optional(), - emojiUploads: z.boolean().optional(), - stickerUploads: z.boolean().optional(), - polls: z.boolean().optional(), - permissions: z.boolean().optional(), - messages: z.boolean().optional(), - threads: z.boolean().optional(), - pins: z.boolean().optional(), - search: z.boolean().optional(), - memberInfo: z.boolean().optional(), - roleInfo: z.boolean().optional(), - roles: z.boolean().optional(), - channelInfo: z.boolean().optional(), - voiceStatus: z.boolean().optional(), - events: z.boolean().optional(), - moderation: z.boolean().optional(), - channels: z.boolean().optional(), - }) - .strict() - .optional(), - replyToMode: ReplyToModeSchema.optional(), - dm: DiscordDmSchema.optional(), - guilds: z.record(z.string(), DiscordGuildSchema.optional()).optional(), -}) + name: z.string().optional(), + capabilities: z.array(z.string()).optional(), + enabled: z.boolean().optional(), + commands: ProviderCommandsSchema, + configWrites: z.boolean().optional(), + token: z.string().optional(), + allowBots: z.boolean().optional(), + groupPolicy: GroupPolicySchema.optional().default("allowlist"), + 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(), + blockStreaming: z.boolean().optional(), + blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), + maxLinesPerMessage: z.number().int().positive().optional(), + mediaMaxMb: z.number().positive().optional(), + retry: RetryConfigSchema, + actions: z + .object({ + reactions: z.boolean().optional(), + stickers: z.boolean().optional(), + emojiUploads: z.boolean().optional(), + stickerUploads: z.boolean().optional(), + polls: z.boolean().optional(), + permissions: z.boolean().optional(), + messages: z.boolean().optional(), + threads: z.boolean().optional(), + pins: z.boolean().optional(), + search: z.boolean().optional(), + memberInfo: z.boolean().optional(), + roleInfo: z.boolean().optional(), + roles: z.boolean().optional(), + channelInfo: z.boolean().optional(), + voiceStatus: z.boolean().optional(), + events: z.boolean().optional(), + moderation: z.boolean().optional(), + channels: z.boolean().optional(), + }) + .strict() + .optional(), + replyToMode: ReplyToModeSchema.optional(), + dm: DiscordDmSchema.optional(), + guilds: z.record(z.string(), DiscordGuildSchema.optional()).optional(), + }) .strict(); export const DiscordConfigSchema = DiscordAccountSchema.extend({ @@ -282,57 +282,57 @@ export const SlackThreadSchema = z export const SlackAccountSchema = z .object({ - name: z.string().optional(), - mode: z.enum(["socket", "http"]).optional(), - signingSecret: z.string().optional(), - webhookPath: z.string().optional(), - capabilities: z.array(z.string()).optional(), - enabled: z.boolean().optional(), - commands: ProviderCommandsSchema, - configWrites: z.boolean().optional(), - botToken: z.string().optional(), - appToken: z.string().optional(), - userToken: z.string().optional(), - userTokenReadOnly: z.boolean().optional().default(true), - allowBots: z.boolean().optional(), - requireMention: z.boolean().optional(), - groupPolicy: GroupPolicySchema.optional().default("allowlist"), - 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(), - blockStreaming: z.boolean().optional(), - blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), - mediaMaxMb: z.number().positive().optional(), - reactionNotifications: z.enum(["off", "own", "all", "allowlist"]).optional(), - reactionAllowlist: z.array(z.union([z.string(), z.number()])).optional(), - replyToMode: ReplyToModeSchema.optional(), - thread: SlackThreadSchema.optional(), - actions: z - .object({ - reactions: z.boolean().optional(), - messages: z.boolean().optional(), - pins: z.boolean().optional(), - search: z.boolean().optional(), - permissions: z.boolean().optional(), - memberInfo: z.boolean().optional(), - channelInfo: z.boolean().optional(), - emojiList: z.boolean().optional(), - }) - .strict() - .optional(), - slashCommand: z - .object({ - enabled: z.boolean().optional(), - name: z.string().optional(), - sessionPrefix: z.string().optional(), - ephemeral: z.boolean().optional(), - }) - .strict() - .optional(), - dm: SlackDmSchema.optional(), - channels: z.record(z.string(), SlackChannelSchema.optional()).optional(), -}) + name: z.string().optional(), + mode: z.enum(["socket", "http"]).optional(), + signingSecret: z.string().optional(), + webhookPath: z.string().optional(), + capabilities: z.array(z.string()).optional(), + enabled: z.boolean().optional(), + commands: ProviderCommandsSchema, + configWrites: z.boolean().optional(), + botToken: z.string().optional(), + appToken: z.string().optional(), + userToken: z.string().optional(), + userTokenReadOnly: z.boolean().optional().default(true), + allowBots: z.boolean().optional(), + requireMention: z.boolean().optional(), + groupPolicy: GroupPolicySchema.optional().default("allowlist"), + 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(), + blockStreaming: z.boolean().optional(), + blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), + mediaMaxMb: z.number().positive().optional(), + reactionNotifications: z.enum(["off", "own", "all", "allowlist"]).optional(), + reactionAllowlist: z.array(z.union([z.string(), z.number()])).optional(), + replyToMode: ReplyToModeSchema.optional(), + thread: SlackThreadSchema.optional(), + actions: z + .object({ + reactions: z.boolean().optional(), + messages: z.boolean().optional(), + pins: z.boolean().optional(), + search: z.boolean().optional(), + permissions: z.boolean().optional(), + memberInfo: z.boolean().optional(), + channelInfo: z.boolean().optional(), + emojiList: z.boolean().optional(), + }) + .strict() + .optional(), + slashCommand: z + .object({ + enabled: z.boolean().optional(), + name: z.string().optional(), + sessionPrefix: z.string().optional(), + ephemeral: z.boolean().optional(), + }) + .strict() + .optional(), + dm: SlackDmSchema.optional(), + channels: z.record(z.string(), SlackChannelSchema.optional()).optional(), + }) .strict(); export const SlackConfigSchema = SlackAccountSchema.extend({ @@ -369,34 +369,34 @@ export const SlackConfigSchema = SlackAccountSchema.extend({ export const SignalAccountSchemaBase = z .object({ - name: z.string().optional(), - capabilities: z.array(z.string()).optional(), - enabled: z.boolean().optional(), - configWrites: z.boolean().optional(), - account: z.string().optional(), - httpUrl: z.string().optional(), - httpHost: z.string().optional(), - httpPort: z.number().int().positive().optional(), - cliPath: ExecutableTokenSchema.optional(), - autoStart: z.boolean().optional(), - receiveMode: z.union([z.literal("on-start"), z.literal("manual")]).optional(), - ignoreAttachments: z.boolean().optional(), - ignoreStories: z.boolean().optional(), - sendReadReceipts: z.boolean().optional(), - dmPolicy: DmPolicySchema.optional().default("pairing"), - allowFrom: z.array(z.union([z.string(), z.number()])).optional(), - groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), - groupPolicy: GroupPolicySchema.optional().default("allowlist"), - 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(), - blockStreaming: z.boolean().optional(), - blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), - mediaMaxMb: z.number().int().positive().optional(), - reactionNotifications: z.enum(["off", "own", "all", "allowlist"]).optional(), - reactionAllowlist: z.array(z.union([z.string(), z.number()])).optional(), -}) + name: z.string().optional(), + capabilities: z.array(z.string()).optional(), + enabled: z.boolean().optional(), + configWrites: z.boolean().optional(), + account: z.string().optional(), + httpUrl: z.string().optional(), + httpHost: z.string().optional(), + httpPort: z.number().int().positive().optional(), + cliPath: ExecutableTokenSchema.optional(), + autoStart: z.boolean().optional(), + receiveMode: z.union([z.literal("on-start"), z.literal("manual")]).optional(), + ignoreAttachments: z.boolean().optional(), + ignoreStories: z.boolean().optional(), + sendReadReceipts: z.boolean().optional(), + dmPolicy: DmPolicySchema.optional().default("pairing"), + allowFrom: z.array(z.union([z.string(), z.number()])).optional(), + groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), + groupPolicy: GroupPolicySchema.optional().default("allowlist"), + 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(), + blockStreaming: z.boolean().optional(), + blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), + mediaMaxMb: z.number().int().positive().optional(), + reactionNotifications: z.enum(["off", "own", "all", "allowlist"]).optional(), + reactionAllowlist: z.array(z.union([z.string(), z.number()])).optional(), + }) .strict(); export const SignalAccountSchema = SignalAccountSchemaBase.superRefine((value, ctx) => { @@ -423,39 +423,39 @@ export const SignalConfigSchema = SignalAccountSchemaBase.extend({ export const IMessageAccountSchemaBase = z .object({ - name: z.string().optional(), - capabilities: z.array(z.string()).optional(), - enabled: z.boolean().optional(), - configWrites: z.boolean().optional(), - cliPath: ExecutableTokenSchema.optional(), - dbPath: z.string().optional(), - remoteHost: z.string().optional(), - service: z.union([z.literal("imessage"), z.literal("sms"), z.literal("auto")]).optional(), - region: z.string().optional(), - dmPolicy: DmPolicySchema.optional().default("pairing"), - allowFrom: z.array(z.union([z.string(), z.number()])).optional(), - groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), - groupPolicy: GroupPolicySchema.optional().default("allowlist"), - historyLimit: z.number().int().min(0).optional(), - dmHistoryLimit: z.number().int().min(0).optional(), - dms: z.record(z.string(), DmConfigSchema.optional()).optional(), - includeAttachments: z.boolean().optional(), - mediaMaxMb: z.number().int().positive().optional(), - textChunkLimit: z.number().int().positive().optional(), - blockStreaming: z.boolean().optional(), - blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), - groups: z - .record( - z.string(), - z - .object({ - requireMention: z.boolean().optional(), - }) - .strict() - .optional(), - ) - .optional(), -}) + name: z.string().optional(), + capabilities: z.array(z.string()).optional(), + enabled: z.boolean().optional(), + configWrites: z.boolean().optional(), + cliPath: ExecutableTokenSchema.optional(), + dbPath: z.string().optional(), + remoteHost: z.string().optional(), + service: z.union([z.literal("imessage"), z.literal("sms"), z.literal("auto")]).optional(), + region: z.string().optional(), + dmPolicy: DmPolicySchema.optional().default("pairing"), + allowFrom: z.array(z.union([z.string(), z.number()])).optional(), + groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), + groupPolicy: GroupPolicySchema.optional().default("allowlist"), + historyLimit: z.number().int().min(0).optional(), + dmHistoryLimit: z.number().int().min(0).optional(), + dms: z.record(z.string(), DmConfigSchema.optional()).optional(), + includeAttachments: z.boolean().optional(), + mediaMaxMb: z.number().int().positive().optional(), + textChunkLimit: z.number().int().positive().optional(), + blockStreaming: z.boolean().optional(), + blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), + groups: z + .record( + z.string(), + z + .object({ + requireMention: z.boolean().optional(), + }) + .strict() + .optional(), + ) + .optional(), + }) .strict(); export const IMessageAccountSchema = IMessageAccountSchemaBase.superRefine((value, ctx) => { diff --git a/src/infra/state-migrations.ts b/src/infra/state-migrations.ts index 1fff45b5c..4717e714b 100644 --- a/src/infra/state-migrations.ts +++ b/src/infra/state-migrations.ts @@ -429,9 +429,7 @@ async function migrateLegacySessions( await saveSessionStore(detected.sessions.targetStorePath, normalized); changes.push(`Merged sessions store → ${detected.sessions.targetStorePath}`); if (canonicalizedTarget.legacyKeys.length > 0) { - changes.push( - `Canonicalized ${canonicalizedTarget.legacyKeys.length} legacy session key(s)`, - ); + changes.push(`Canonicalized ${canonicalizedTarget.legacyKeys.length} legacy session key(s)`); } }