From 902a604dd7544c83e7a5077748b685f7da8ce07b Mon Sep 17 00:00:00 2001 From: Tribunny <1208119168@qq.com> Date: Fri, 14 Nov 2025 16:49:43 +0800 Subject: [PATCH] The issue of unsupported int64 was resolved using AIGC. --- src/tools/args.ts | 10 ++++++++++ src/tools/mongodb/delete/deleteMany.ts | 2 +- src/tools/mongodb/metadata/dbStats.ts | 2 +- src/tools/mongodb/read/aggregate.ts | 2 +- src/tools/mongodb/read/find.ts | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/tools/args.ts b/src/tools/args.ts index 11b5b8b80..a8daf8fa9 100644 --- a/src/tools/args.ts +++ b/src/tools/args.ts @@ -84,3 +84,13 @@ function toEJSON(value: T): T { export function zEJSON(): z.AnyZodObject { return z.object({}).passthrough().transform(toEJSON) as unknown as z.AnyZodObject; } + +/** + * Serializes data to EJSON format with proper Int64 preservation. + * This function ensures that Int64 values are not truncated to JavaScript numbers. + * @param value The data to serialize + * @returns EJSON string with preserved Int64 precision + */ +export function serializeWithInt64Preservation(value: unknown): string { + return EJSON.stringify(value, undefined, undefined, { relaxed: false }); +} diff --git a/src/tools/mongodb/delete/deleteMany.ts b/src/tools/mongodb/delete/deleteMany.ts index 835cbb4ab..a73850192 100644 --- a/src/tools/mongodb/delete/deleteMany.ts +++ b/src/tools/mongodb/delete/deleteMany.ts @@ -58,7 +58,7 @@ export class DeleteManyTool extends MongoDBToolBase { protected getConfirmationMessage({ database, collection, filter }: ToolArgs): string { const filterDescription = filter && Object.keys(filter).length > 0 - ? "```json\n" + `{ "filter": ${EJSON.stringify(filter)} }\n` + "```\n\n" + ? "```json\n" + `{ "filter": ${EJSON.stringify(filter, undefined, undefined, { relaxed: false })} }\n` + "```\n\n" : "- **All documents** (No filter)\n\n"; return ( `You are about to delete documents from the \`${collection}\` collection in the \`${database}\` database:\n\n` + diff --git a/src/tools/mongodb/metadata/dbStats.ts b/src/tools/mongodb/metadata/dbStats.ts index 830df410f..5b34283eb 100644 --- a/src/tools/mongodb/metadata/dbStats.ts +++ b/src/tools/mongodb/metadata/dbStats.ts @@ -21,7 +21,7 @@ export class DbStatsTool extends MongoDBToolBase { }); return { - content: formatUntrustedData(`Statistics for database ${database}`, EJSON.stringify(result)), + content: formatUntrustedData(`Statistics for database ${database}`, EJSON.stringify(result, undefined, undefined, { relaxed: false })), }; } } diff --git a/src/tools/mongodb/read/aggregate.ts b/src/tools/mongodb/read/aggregate.ts index c7bd439a8..1be44993e 100644 --- a/src/tools/mongodb/read/aggregate.ts +++ b/src/tools/mongodb/read/aggregate.ts @@ -138,7 +138,7 @@ export class AggregateTool extends MongoDBToolBase { cursorResults.cappedBy, ].filter((limit): limit is keyof typeof CURSOR_LIMITS_TO_LLM_TEXT => !!limit), }), - ...(cursorResults.documents.length > 0 ? [EJSON.stringify(cursorResults.documents)] : []) + ...(cursorResults.documents.length > 0 ? [EJSON.stringify(cursorResults.documents, undefined, undefined, { relaxed: false })] : []) ), }; } finally { diff --git a/src/tools/mongodb/read/find.ts b/src/tools/mongodb/read/find.ts index eb006f335..b4a543bc5 100644 --- a/src/tools/mongodb/read/find.ts +++ b/src/tools/mongodb/read/find.ts @@ -98,7 +98,7 @@ export class FindTool extends MongoDBToolBase { documents: cursorResults.documents, appliedLimits: [limitOnFindCursor.cappedBy, cursorResults.cappedBy].filter((limit) => !!limit), }), - ...(cursorResults.documents.length > 0 ? [EJSON.stringify(cursorResults.documents)] : []) + ...(cursorResults.documents.length > 0 ? [EJSON.stringify(cursorResults.documents, undefined, undefined, { relaxed: false })] : []) ), }; } finally {