diff --git a/pr-review/package-lock.json b/pr-review/package-lock.json index f31ae83..9271c98 100644 --- a/pr-review/package-lock.json +++ b/pr-review/package-lock.json @@ -19,8 +19,7 @@ "mollitia": "0.2.0", "octokit": "5.0.3", "parse-diff": "0.11.1", - "zod": "3.25.76", - "zod-to-json-schema": "3.24.6" + "zod": "4.0.5" }, "devDependencies": { "@eslint/js": "9.31.0", @@ -1725,6 +1724,15 @@ "zod": "^3.25.76" } }, + "node_modules/@sap-ai-sdk/prompt-registry/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@sap-cloud-sdk/connectivity": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@sap-cloud-sdk/connectivity/-/connectivity-4.0.2.tgz", @@ -7995,22 +8003,13 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.5.tgz", + "integrity": "sha512-/5UuuRPStvHXu7RS+gmvRf4NXrNxpSllGwDnCBcJZtQsKrviYXm54yDGV2KYNLT5kq0lHGcl7lqWJLgSaG+tgA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.6", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } } } } diff --git a/pr-review/package.json b/pr-review/package.json index 7a7e6a9..fdc1406 100644 --- a/pr-review/package.json +++ b/pr-review/package.json @@ -27,8 +27,7 @@ "mollitia": "0.2.0", "octokit": "5.0.3", "parse-diff": "0.11.1", - "zod": "3.25.76", - "zod-to-json-schema": "3.24.6" + "zod": "4.0.5" }, "devDependencies": { "@eslint/js": "9.31.0", diff --git a/pr-review/src/ai-core-client.ts b/pr-review/src/ai-core-client.ts index c67e903..233b7a6 100644 --- a/pr-review/src/ai-core-client.ts +++ b/pr-review/src/ai-core-client.ts @@ -3,7 +3,6 @@ import { ChatMessage, OrchestrationClient, TokenUsage } from "@sap-ai-sdk/orches import axios from "axios" import { inspect } from "node:util" import { z } from "zod" -import { zodToJsonSchema } from "zod-to-json-schema" import { config } from "./config.js" let modelName = config.model @@ -63,7 +62,7 @@ export async function chatCompletion(messages: ChatMessage[]): Promise { */ export async function chatCompletionWithJsonSchema(zodSchema: T, messages: ChatMessage[]): Promise> { process.env.AICORE_SERVICE_KEY = JSON.stringify(config.aicoreServiceKey) - const jsonSchema = zodToJsonSchema(zodSchema) + const jsonSchema = z.toJSONSchema(zodSchema) let responseJson try { @@ -102,11 +101,11 @@ export async function chatCompletionWithJsonSchema(zodSc core.info(responseJson) responseJson = responseJson.slice(responseJson.indexOf("{"), responseJson.lastIndexOf("}") + 1) try { - return zodSchema.parse(JSON.parse(responseJson)) // eslint-disable-line @typescript-eslint/no-unsafe-return + return zodSchema.parse(JSON.parse(responseJson)) } catch (error) { if (error instanceof Error) core.warning(`Failed to parse JSON. Trying to replace newlines. Error was: ${error.message}`) const json = responseJson.replaceAll(/"(?:[^"\\]|\\.)*"/g, matched => matched.replaceAll("\n", String.raw`\n`)) - return zodSchema.parse(JSON.parse(json)) // eslint-disable-line @typescript-eslint/no-unsafe-return + return zodSchema.parse(JSON.parse(json)) } } diff --git a/pr-review/src/config.ts b/pr-review/src/config.ts index a2c3399..7237af6 100644 --- a/pr-review/src/config.ts +++ b/pr-review/src/config.ts @@ -27,7 +27,7 @@ if (process.env.NODE_ENV === "development") { function parseInput(zodSchema: T, name: string): z.infer { const value: string = core.getInput(name) try { - return zodSchema.parse(value) // eslint-disable-line @typescript-eslint/no-unsafe-return + return zodSchema.parse(value) } catch (error) { if (error instanceof Error) { core.error(`Failed to parse input "${name}": \`${value}\``) @@ -40,7 +40,7 @@ function parseInput(zodSchema: T, name: string): z.infer function parseInputAsJson(zodSchema: T, name: string): z.infer { const json: string = core.getInput(name) try { - return zodSchema.parse(JSON.parse(json)) // eslint-disable-line @typescript-eslint/no-unsafe-return + return zodSchema.parse(JSON.parse(json)) } catch (error) { if (error instanceof Error) { core.error(`Failed to parse input "${name}": \`${json}\``) @@ -56,7 +56,7 @@ function parseInputAsArray(zodSchema: T, name: string): .split(/[\n,]/) .map(v => v.trim()) .filter(Boolean) - .map(v => zodSchema.parse(v) as z.infer) // eslint-disable-line @typescript-eslint/no-unsafe-return + .map(v => zodSchema.parse(v) as z.infer) } function setSecret(value: T): T { diff --git a/pr-review/src/zod-schema.ts b/pr-review/src/zod-schema.ts index a651f9d..0124d9d 100644 --- a/pr-review/src/zod-schema.ts +++ b/pr-review/src/zod-schema.ts @@ -32,9 +32,9 @@ export const ModelName: ZodType = z.string() export type ModelName = z.infer // DeploymentConfig -export const DeploymentConfig: ZodType = z.record(z.any()) +export const DeploymentConfig: ZodType = z.record(z.any(), z.any()) export type DeploymentConfig = z.infer // ModelParameters -export const ModelParameters: ZodType = z.record(z.any()) +export const ModelParameters: ZodType = z.record(z.any(), z.any()) export type ModelParameters = z.infer diff --git a/pr-summary/package-lock.json b/pr-summary/package-lock.json index 9ca2eb5..1edda57 100644 --- a/pr-summary/package-lock.json +++ b/pr-summary/package-lock.json @@ -18,7 +18,7 @@ "mollitia": "0.2.0", "octokit": "5.0.3", "parse-diff": "0.11.1", - "zod": "3.25.76" + "zod": "4.0.5" }, "devDependencies": { "@eslint/js": "9.31.0", @@ -1416,6 +1416,15 @@ "zod": "^3.25.76" } }, + "node_modules/@sap-ai-sdk/prompt-registry/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@sap-cloud-sdk/connectivity": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@sap-cloud-sdk/connectivity/-/connectivity-4.0.2.tgz", @@ -7596,9 +7605,9 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.5.tgz", + "integrity": "sha512-/5UuuRPStvHXu7RS+gmvRf4NXrNxpSllGwDnCBcJZtQsKrviYXm54yDGV2KYNLT5kq0lHGcl7lqWJLgSaG+tgA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/pr-summary/package.json b/pr-summary/package.json index 0075e3c..4976185 100644 --- a/pr-summary/package.json +++ b/pr-summary/package.json @@ -26,7 +26,7 @@ "mollitia": "0.2.0", "octokit": "5.0.3", "parse-diff": "0.11.1", - "zod": "3.25.76" + "zod": "4.0.5" }, "devDependencies": { "@eslint/js": "9.31.0", diff --git a/pr-summary/src/config.ts b/pr-summary/src/config.ts index 225574a..fe595cb 100644 --- a/pr-summary/src/config.ts +++ b/pr-summary/src/config.ts @@ -27,7 +27,7 @@ if (process.env.NODE_ENV === "development") { function parseInput(zodSchema: T, name: string): z.infer { const value: string = core.getInput(name) try { - return zodSchema.parse(value) // eslint-disable-line @typescript-eslint/no-unsafe-return + return zodSchema.parse(value) } catch (error) { if (error instanceof Error) { core.error(`Failed to parse input "${name}": \`${value}\``) @@ -40,7 +40,7 @@ function parseInput(zodSchema: T, name: string): z.infer function parseInputAsJson(zodSchema: T, name: string): z.infer { const json: string = core.getInput(name) try { - return zodSchema.parse(JSON.parse(json)) // eslint-disable-line @typescript-eslint/no-unsafe-return + return zodSchema.parse(JSON.parse(json)) } catch (error) { if (error instanceof Error) { core.error(`Failed to parse input "${name}": \`${json}\``) @@ -56,7 +56,7 @@ function parseInputAsArray(zodSchema: T, name: string): .split(/[\n,]/) .map(v => v.trim()) .filter(Boolean) - .map(v => zodSchema.parse(v) as z.infer) // eslint-disable-line @typescript-eslint/no-unsafe-return + .map(v => zodSchema.parse(v) as z.infer) } function setSecret(value: T): T { diff --git a/pr-summary/src/zod-schema.ts b/pr-summary/src/zod-schema.ts index a651f9d..0124d9d 100644 --- a/pr-summary/src/zod-schema.ts +++ b/pr-summary/src/zod-schema.ts @@ -32,9 +32,9 @@ export const ModelName: ZodType = z.string() export type ModelName = z.infer // DeploymentConfig -export const DeploymentConfig: ZodType = z.record(z.any()) +export const DeploymentConfig: ZodType = z.record(z.any(), z.any()) export type DeploymentConfig = z.infer // ModelParameters -export const ModelParameters: ZodType = z.record(z.any()) +export const ModelParameters: ZodType = z.record(z.any(), z.any()) export type ModelParameters = z.infer