diff --git a/packages/cli/src/utils/errors.test.ts b/packages/cli/src/utils/errors.test.ts index 818c3ac39..2515fe402 100644 --- a/packages/cli/src/utils/errors.test.ts +++ b/packages/cli/src/utils/errors.test.ts @@ -105,9 +105,25 @@ describe('errors', () => { expect(getErrorMessage(undefined)).toBe('undefined'); }); - it('should handle objects', () => { - const obj = { message: 'test' }; - expect(getErrorMessage(obj)).toBe('[object Object]'); + it('should extract message from error-like objects', () => { + const obj = { message: 'test error message' }; + expect(getErrorMessage(obj)).toBe('test error message'); + }); + + it('should stringify plain objects without message property', () => { + const obj = { code: 500, details: 'internal error' }; + expect(getErrorMessage(obj)).toBe( + '{"code":500,"details":"internal error"}', + ); + }); + + it('should handle empty objects', () => { + expect(getErrorMessage({})).toBe('{}'); + }); + + it('should handle objects with non-string message property', () => { + const obj = { message: 123 }; + expect(getErrorMessage(obj)).toBe('{"message":123}'); }); }); diff --git a/packages/cli/src/utils/errors.ts b/packages/cli/src/utils/errors.ts index 5338fa2fd..27966df4f 100644 --- a/packages/cli/src/utils/errors.ts +++ b/packages/cli/src/utils/errors.ts @@ -17,6 +17,27 @@ export function getErrorMessage(error: unknown): string { if (error instanceof Error) { return error.message; } + + // Handle objects with message property (error-like objects) + if ( + error !== null && + typeof error === 'object' && + 'message' in error && + typeof (error as { message: unknown }).message === 'string' + ) { + return (error as { message: string }).message; + } + + // Handle plain objects by stringifying them + if (error !== null && typeof error === 'object') { + try { + return JSON.stringify(error); + } catch { + // If JSON.stringify fails (circular reference, etc.), fall back to String + return String(error); + } + } + return String(error); }