From 73c5f2293295f696cd15a7b042b4c97917be7b0c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 18:32:46 +0000 Subject: [PATCH] test(memory): add test for circular agentContext in renderPromptWithMemoryContext Adds a test case to `test/memory-formatter.test.mjs` to verify that `renderPromptWithMemoryContext` gracefully handles circular references in `agentContext` by falling back to string representation instead of throwing a JSON serialization error. This ensures the edge case at `src/services/memory/formatter.js:125` is covered. Co-authored-by: PR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> --- test/memory-formatter.test.mjs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/memory-formatter.test.mjs b/test/memory-formatter.test.mjs index 8e1d311..f3cbe99 100644 --- a/test/memory-formatter.test.mjs +++ b/test/memory-formatter.test.mjs @@ -193,3 +193,34 @@ test('renderPromptWithMemoryContext handles missing query or service', async () const output = await renderPromptWithMemoryContext(params); assert.equal(output, 'Base prompt'); }); + +test('renderPromptWithMemoryContext handles circular agentContext gracefully', async () => { + const circular = {}; + circular.self = circular; + + let capturedQuery = ''; + const memoryService = { + async getRelevantMemories({ query }) { + capturedQuery = query; + return []; + }, + async updateMemoryUsage() {} + }; + + const params = { + basePrompt: 'Base prompt', + userRequest: 'Hello', + agentContext: circular, + agent_id: 'agent-1', + memoryService, + env: { TORCH_MEMORY_RETRIEVAL_ENABLED: 'true' } + }; + + const output = await renderPromptWithMemoryContext(params); + + // It should not throw. + // The query should contain the string representation of the circular object. + // String(circular) is "[object Object]" + assert.ok(capturedQuery.includes('[object Object]'), 'Query should contain the stringified circular object fallback'); + assert.ok(output.includes('Base prompt'), 'Output should contain the base prompt'); +});