From 86fe4202b6c33beafd086469a03db21115d59c01 Mon Sep 17 00:00:00 2001 From: Jah-yee Date: Wed, 18 Mar 2026 11:33:52 +0800 Subject: [PATCH] fix: handle BigInt serialization on Windows - Add safeStringify utility function to handle BigInt values - Apply to marketplace.ts and agentcash.ts JSON.stringify calls - Fixes 'Do not know how to serialize a BigInt' error on Windows Closes #29 --- src/tools/agentcash.ts | 13 +++++++++++-- src/tools/marketplace.ts | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/tools/agentcash.ts b/src/tools/agentcash.ts index 2df4a01..39bbb90 100644 --- a/src/tools/agentcash.ts +++ b/src/tools/agentcash.ts @@ -4,6 +4,15 @@ import type { Tool, ToolResult } from "./types.js"; const execFileAsync = promisify(execFile); +function safeStringify(data: unknown): string { + return JSON.stringify(data, (key, value) => { + if (typeof value === "bigint") { + return value.toString(); + } + return value; + }); +} + const FETCH_TIMEOUT = 60_000; const BALANCE_TIMEOUT = 15_000; @@ -95,7 +104,7 @@ export const agentcashFetch: Tool = { try { const result = await runAgentCash(args, FETCH_TIMEOUT); - return { success: true, data: JSON.stringify(result, null, 2) }; + return { success: true, data: safeStringify(result) }; } catch (err) { const msg = err instanceof Error ? err.message : String(err); return { success: false, data: msg }; @@ -129,7 +138,7 @@ export const agentcashBalance: Tool = { ); return { success: true, - data: JSON.stringify({ + data: safeStringify({ address: result.address, balanceUSDC: result.balance, network: result.network, diff --git a/src/tools/marketplace.ts b/src/tools/marketplace.ts index 63c49a2..fd43f3f 100644 --- a/src/tools/marketplace.ts +++ b/src/tools/marketplace.ts @@ -1,6 +1,15 @@ import type { Tool } from "./types.js"; import * as cli from "../moltlaunch/cli.js"; +function safeStringify(data: unknown): string { + return JSON.stringify(data, (key, value) => { + if (typeof value === "bigint") { + return value.toString(); + } + return value; + }); +} + function requireString(input: Record, key: string): string { const val = input[key]; if (typeof val !== "string" || !val) throw new Error(`Missing required field: ${key}`); @@ -22,7 +31,7 @@ export const readTask: Tool = { async execute(input) { const taskId = requireString(input, "task_id"); const task = await cli.getTask(taskId); - return { success: true, data: JSON.stringify(task) }; + return { success: true, data: safeStringify(task) }; }, }; @@ -121,7 +130,7 @@ export const listBounties: Tool = { }, async execute() { const bounties = await cli.getBounties(); - return { success: true, data: JSON.stringify(bounties) }; + return { success: true, data: safeStringify(bounties) }; }, };