diff --git a/core/tools/implementations/readFileRange.integration.vitest.ts b/core/tools/implementations/readFileRange.integration.vitest.ts index 945d03e414..72f9a13d0f 100644 --- a/core/tools/implementations/readFileRange.integration.vitest.ts +++ b/core/tools/implementations/readFileRange.integration.vitest.ts @@ -1,6 +1,6 @@ import { expect, test, vi } from "vitest"; import { ToolExtras } from "../.."; -import { readFileRangeImpl } from "./readFileRange"; +import { MAX_CHAR_POSITION, readFileRangeImpl } from "./readFileRange"; // Mock the dependencies vi.mock("../../util/ideUtils", () => ({ @@ -76,7 +76,7 @@ test("readFileRangeImpl handles out-of-bounds ranges gracefully", async () => { "file:///test.txt", { start: { line: 99, character: 0 }, // 100 - 1 - end: { line: 104, character: Number.MAX_SAFE_INTEGER }, // 105 - 1 + end: { line: 104, character: MAX_CHAR_POSITION }, // 105 - 1 }, ); @@ -84,7 +84,7 @@ test("readFileRangeImpl handles out-of-bounds ranges gracefully", async () => { "file:///test.txt", { start: { line: 4, character: 0 }, // 5 - 1 - end: { line: 99, character: Number.MAX_SAFE_INTEGER }, // 100 - 1 + end: { line: 99, character: MAX_CHAR_POSITION }, // 100 - 1 }, ); }); @@ -199,6 +199,6 @@ test("readFileRangeImpl handles normal ranges correctly", async () => { // Verify correct 0-based conversion expect(mockIde.readRangeInFile).toHaveBeenCalledWith("file:///test.txt", { start: { line: 1, character: 0 }, // 2 - 1 - end: { line: 3, character: Number.MAX_SAFE_INTEGER }, // 4 - 1 + end: { line: 3, character: MAX_CHAR_POSITION }, // 4 - 1 }); }); diff --git a/core/tools/implementations/readFileRange.ts b/core/tools/implementations/readFileRange.ts index 7b5f47338e..1facb45732 100644 --- a/core/tools/implementations/readFileRange.ts +++ b/core/tools/implementations/readFileRange.ts @@ -7,6 +7,10 @@ import { getNumberArg, getStringArg } from "../parseArgs"; import { throwIfFileExceedsHalfOfContext } from "./readFileLimit"; import { ContinueError, ContinueErrorReason } from "../../util/errors"; +// Use Int.MAX_VALUE from Java/Kotlin (2^31 - 1) instead of JavaScript's Number.MAX_SAFE_INTEGER +// to ensure compatibility with IntelliJ's Kotlin Position type which uses Int for character field +export const MAX_CHAR_POSITION = 2147483647; + export const readFileRangeImpl: ToolImpl = async (args, extras) => { const filepath = getStringArg(args, "filepath"); const startLine = getNumberArg(args, "startLine"); @@ -52,7 +56,7 @@ export const readFileRangeImpl: ToolImpl = async (args, extras) => { }, end: { line: endLine - 1, // Convert from 1-based to 0-based - character: Number.MAX_SAFE_INTEGER, // Read to end of line + character: MAX_CHAR_POSITION, // Read to end of line }, });