fix(config): accept execApprovals.enabled="auto" in zod schema

This commit is contained in:
Sarah Fortune
2026-05-20 00:07:41 -07:00
parent 0c67dc7f82
commit ea8f4ebb4d
4 changed files with 31 additions and 19 deletions
@@ -310,6 +310,15 @@ describe("discord config schema", () => {
expect(cfg.execApprovals?.approvers).toEqual(["555"]);
});
it.each([true, false, "auto"] as const)("accepts execApprovals.enabled=%s", (enabled) => {
const cfg = expectValidDiscordConfig({ execApprovals: { enabled } });
expect(cfg.execApprovals?.enabled).toBe(enabled);
});
it("rejects execApprovals.enabled with other string values", () => {
expectInvalidDiscordConfig({ execApprovals: { enabled: "on" } });
});
it("rejects numeric IDs that are not valid non-negative safe integers", () => {
const cases = [106232522769186816, -1, 123.45];
for (const id of cases) {
File diff suppressed because one or more lines are too long
+2
View File
@@ -1,5 +1,7 @@
import { z } from "zod";
export const NativeExecApprovalEnableModeSchema = z.union([z.boolean(), z.literal("auto")]);
const ExecApprovalForwardTargetSchema = z
.object({
channel: z.string().min(1),
+4 -3
View File
@@ -8,6 +8,7 @@ import {
} from "../shared/custom-command-config.js";
import { normalizeOptionalString } from "../shared/string-coerce.js";
import { ToolPolicySchema } from "./zod-schema.agent-runtime.js";
import { NativeExecApprovalEnableModeSchema } from "./zod-schema.approvals.js";
import {
ChannelHealthMonitorSchema,
ChannelHeartbeatVisibilitySchema,
@@ -248,7 +249,7 @@ export const TelegramAccountSchemaBase = z
capabilities: TelegramCapabilitiesSchema.optional(),
execApprovals: z
.object({
enabled: z.boolean().optional(),
enabled: NativeExecApprovalEnableModeSchema.optional(),
approvers: TelegramIdListSchema.optional(),
agentFilter: z.array(z.string()).optional(),
sessionFilter: z.array(z.string()).optional(),
@@ -681,7 +682,7 @@ export const DiscordAccountSchema = z
healthMonitor: ChannelHealthMonitorSchema,
execApprovals: z
.object({
enabled: z.boolean().optional(),
enabled: NativeExecApprovalEnableModeSchema.optional(),
approvers: DiscordIdListSchema.optional(),
agentFilter: z.array(z.string()).optional(),
sessionFilter: z.array(z.string()).optional(),
@@ -1023,7 +1024,7 @@ export const SlackAccountSchema = z
capabilities: SlackCapabilitiesSchema.optional(),
execApprovals: z
.object({
enabled: z.boolean().optional(),
enabled: NativeExecApprovalEnableModeSchema.optional(),
approvers: z.array(z.union([z.string(), z.number()])).optional(),
agentFilter: z.array(z.string()).optional(),
sessionFilter: z.array(z.string()).optional(),