diff --git a/packages/gateway-protocol/package.json b/packages/gateway-protocol/package.json index 679ac1709446..5a997f7d2fba 100644 --- a/packages/gateway-protocol/package.json +++ b/packages/gateway-protocol/package.json @@ -78,7 +78,8 @@ "prepack": "pnpm run build && node --import tsx ../../scripts/protocol-gen.ts --out ./protocol.schema.json" }, "dependencies": { - "typebox": "1.3.6" + "typebox": "1.3.6", + "zod": "4.4.3" }, "engines": { "node": ">=22.19.0" diff --git a/packages/gateway-protocol/src/install-policy-warning-error-details.ts b/packages/gateway-protocol/src/install-policy-warning-error-details.ts index 1b53746e573e..7241a11d2eb8 100644 --- a/packages/gateway-protocol/src/install-policy-warning-error-details.ts +++ b/packages/gateway-protocol/src/install-policy-warning-error-details.ts @@ -1,3 +1,5 @@ +import { z } from "zod"; + /** Structured install-policy warning details carried in Gateway error payloads. */ export const INSTALL_POLICY_WARNING_ACKNOWLEDGEMENT_REQUIRED = "install_policy_warning_acknowledgement_required" as const; @@ -19,3 +21,28 @@ export type InstallPolicyWarningErrorDetails = { reason: string; findings?: InstallPolicyWarningErrorFinding[]; }; + +const installPolicyWarningFindingSchema = z.object({ + ruleId: z.string().trim().min(1), + severity: z.enum(["info", "warn", "critical"]), + message: z.string().trim().min(1), + file: z.string().trim().min(1).optional(), + line: z.number().int().positive().optional(), + evidence: z.string().trim().min(1).optional(), +}); + +const installPolicyWarningErrorDetailsSchema = z.object({ + installPolicyCode: z.literal(INSTALL_POLICY_WARNING_ACKNOWLEDGEMENT_REQUIRED), + targetName: z.string().trim().min(1), + targetType: z.enum(["skill", "plugin"]), + requestMode: z.enum(["install", "update"]), + reason: z.string().trim().min(1), + findings: z.array(installPolicyWarningFindingSchema).optional(), +}); + +export function readInstallPolicyWarningErrorDetails( + value: unknown, +): InstallPolicyWarningErrorDetails | undefined { + const parsed = installPolicyWarningErrorDetailsSchema.safeParse(value); + return parsed.success ? parsed.data : undefined; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc69e89ec2b9..985f8a3a0b04 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2231,6 +2231,9 @@ importers: typebox: specifier: 1.3.6 version: 1.3.6 + zod: + specifier: 4.4.3 + version: 4.4.3 packages/llm-core: dependencies: diff --git a/src/gateway/install-policy-warning-error-details.ts b/src/gateway/install-policy-warning-error-details.ts index 537613fa7521..90b50e6efdf0 100644 --- a/src/gateway/install-policy-warning-error-details.ts +++ b/src/gateway/install-policy-warning-error-details.ts @@ -1,30 +1 @@ -import { z } from "zod"; -import { - INSTALL_POLICY_WARNING_ACKNOWLEDGEMENT_REQUIRED, - type InstallPolicyWarningErrorDetails, -} from "../../packages/gateway-protocol/src/install-policy-warning-error-details.js"; - -const installPolicyWarningFindingSchema = z.object({ - ruleId: z.string().trim().min(1), - severity: z.enum(["info", "warn", "critical"]), - message: z.string().trim().min(1), - file: z.string().trim().min(1).optional(), - line: z.number().int().positive().optional(), - evidence: z.string().trim().min(1).optional(), -}); - -const installPolicyWarningErrorDetailsSchema = z.object({ - installPolicyCode: z.literal(INSTALL_POLICY_WARNING_ACKNOWLEDGEMENT_REQUIRED), - targetName: z.string().trim().min(1), - targetType: z.enum(["skill", "plugin"]), - requestMode: z.enum(["install", "update"]), - reason: z.string().trim().min(1), - findings: z.array(installPolicyWarningFindingSchema).optional(), -}); - -export function readInstallPolicyWarningErrorDetails( - value: unknown, -): InstallPolicyWarningErrorDetails | undefined { - const parsed = installPolicyWarningErrorDetailsSchema.safeParse(value); - return parsed.success ? parsed.data : undefined; -} +export { readInstallPolicyWarningErrorDetails } from "../../packages/gateway-protocol/src/install-policy-warning-error-details.js";