{"version":3,"file":"session-manager-compaction.test.d.ts","sourceRoot":"","sources":["../../src/core/session-manager-compaction.test.ts"],"names":[],"mappings":"","sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { SessionManager } from \"./session-manager.js\";\n\ndescribe(\"SessionManager compaction invariants\", () => {\n\tit(\"keeps a retained assistant tool-call segment paired with its tool result after compaction\", () => {\n\t\tconst session = SessionManager.inMemory(\"/tmp/project\");\n\n\t\tsession.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"Old request\" }],\n\t\t\ttimestamp: 1,\n\t\t});\n\t\tconst keptAssistantId = session.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tprovider: \"test-provider\",\n\t\t\tmodel: \"test-model\",\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\tid: \"tool-1\",\n\t\t\t\t\tname: \"read\",\n\t\t\t\t\targuments: { path: \"README.md\" },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstopReason: \"tool_use\",\n\t\t\tusage: {\n\t\t\t\tinput: 10,\n\t\t\t\toutput: 5,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotalTokens: 15,\n\t\t\t\tcost: { total: 0 },\n\t\t\t},\n\t\t\ttimestamp: 2,\n\t\t} as any);\n\t\tsession.appendMessage({\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: \"tool-1\",\n\t\t\ttoolName: \"read\",\n\t\t\tcontent: [{ type: \"text\", text: \"README contents\" }],\n\t\t\tisError: false,\n\t\t\ttimestamp: 3,\n\t\t} as any);\n\t\tsession.appendCompaction(\"Compacted history\", keptAssistantId, 200);\n\n\t\tconst context = session.buildSessionContext();\n\n\t\texpect(context.messages.map((message) => message.role)).toEqual([\"compactionSummary\", \"assistant\", \"toolResult\"]);\n\n\t\tconst keptAssistant = context.messages[1];\n\t\tconst keptToolResult = context.messages[2];\n\t\texpect(keptAssistant?.role).toBe(\"assistant\");\n\t\texpect(keptToolResult?.role).toBe(\"toolResult\");\n\t\tif (keptAssistant?.role === \"assistant\") {\n\t\t\texpect(keptAssistant.content[0]).toMatchObject({\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: \"tool-1\",\n\t\t\t\tname: \"read\",\n\t\t\t});\n\t\t}\n\t\tif (keptToolResult?.role === \"toolResult\") {\n\t\t\texpect(keptToolResult.toolCallId).toBe(\"tool-1\");\n\t\t}\n\t});\n});\n"]}