From fd596210f12d1a5fe32c54fc18af1c5b6cf3eb36 Mon Sep 17 00:00:00 2001 From: JATMN Date: Sat, 24 Oct 2026 18:59:07 -0700 Subject: [PATCH] perf(types): keep default-heap Node 24 typecheck under the heap limit (#2414) * fix(types): narrow SDK response schema consumers * perf(types): bound mixed Zod schema comparisons --- src/cli/structuredIO.ts | 7 ++++--- src/utils/zodDependencies.test.ts | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/cli/structuredIO.ts b/src/cli/structuredIO.ts index a59776008..3f0b7c293 100644 --- a/src/cli/structuredIO.ts +++ b/src/cli/structuredIO.ts @@ -134,7 +134,8 @@ function buildRequiresActionDetails( type PendingRequest = { resolve: (result: T) => void reject: (error: unknown) => void - schema?: z.Schema + // Response consumers only parse; avoid comparing Zod's fluent builder types. + schema?: Pick request: SDKControlRequest } @@ -496,7 +497,7 @@ export class StructuredIO { private async sendRequest( request: SDKControlRequest['request'], - schema: z.Schema, + schema: Pick, signal?: AbortSignal, requestId: string = randomUUID(), ): Promise { @@ -798,7 +799,7 @@ export class StructuredIO { message, }, z.object({ - mcp_response: z.any() as z.Schema, + mcp_response: z.any() as z.core.$ZodType, }), ) return response.mcp_response diff --git a/src/utils/zodDependencies.test.ts b/src/utils/zodDependencies.test.ts index fd05ca7f9..fecdae6e4 100644 --- a/src/utils/zodDependencies.test.ts +++ b/src/utils/zodDependencies.test.ts @@ -1,6 +1,7 @@ import { describe, expect, test } from 'bun:test' import { zodOutputFormat } from '@anthropic-ai/sdk/helpers/zod' import { SandboxRuntimeConfigSchema } from '@anthropic-ai/sandbox-runtime' +import type { AnySchema } from '@modelcontextprotocol/sdk/server/zod-compat.js' import { parseWithCompat, toJsonSchemaCompat } from '@modelcontextprotocol/sdk/server/zod-json-schema-compat.js' import { z as legacy } from 'zod/v3' import { z } from 'zod/v4' @@ -14,7 +15,12 @@ describe('dependency schema compatibility', () => { }) test('the protocol converter and parser support both packaged schema generations', () => { - for (const schema of [z.strictObject({ value: z.string() }), legacy.object({ value: legacy.string() }).strict()]) { + // Avoid finding a common type by comparing both versions' fluent builders. + const schemas: AnySchema[] = [ + z.strictObject({ value: z.string() }), + legacy.object({ value: legacy.string() }).strict(), + ] + for (const schema of schemas) { expect(toJsonSchemaCompat(schema).type).toBe('object') expect(parseWithCompat(schema, { value: 'ok' })).toEqual({ value: 'ok' }) expect(() => parseWithCompat(schema, { value: 1 })).toThrow()