From 3c5d2734e62badbcb499a1d4bdf3ed1db581118a Mon Sep 17 00:00:00 2001 From: Yi LIU Date: Mon, 16 Feb 2026 15:26:57 +0800 Subject: [PATCH] fix: guard error handler against non-object thrown values The `in` operator throws a TypeError when its right-hand operand is not an object. In the tool execution error handler, both `'message' in err` and `'cause' in err` will crash if the caught value is a primitive (null, string, number, undefined). Add `typeof err === 'object'` checks before using the `in` operator to ensure primitive thrown values are safely converted to strings. --- src/main.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main.ts b/src/main.ts index ca951c61c..348896e11 100644 --- a/src/main.ts +++ b/src/main.ts @@ -225,8 +225,11 @@ function registerTool(tool: ToolDefinition): void { return result; } catch (err) { logger(`${tool.name} error:`, err, err?.stack); - let errorText = err && 'message' in err ? err.message : String(err); - if ('cause' in err && err.cause) { + let errorText = + err && typeof err === 'object' && 'message' in err + ? err.message + : String(err); + if (err && typeof err === 'object' && 'cause' in err && err.cause) { errorText += `\nCause: ${err.cause.message}`; } return {