declare const require: (name: string) => any const { afterEach, describe, expect, mock, test, afterAll } = require("bun:test") import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs" import { join } from "node:path" import { tmpdir } from "node:os" import { PART_STORAGE } from "../../shared" const testDirs: string[] = [] const TEST_STORAGE_ROOT = join(tmpdir(), `atlas-session-last-agent-${Date.now()}`) const TEST_MESSAGE_STORAGE = join(TEST_STORAGE_ROOT, "message") mock.module("../../shared/opencode-storage-detection", () => ({ isSqliteBackend: () => false, })) mock.module("../../shared/opencode-message-dir", () => ({ getMessageDir: (sessionID: string) => { const directPath = join(TEST_MESSAGE_STORAGE, sessionID) return require("node:fs").existsSync(directPath) ? directPath : null }, })) afterAll(() => { mock.restore() }) afterEach(() => { while (testDirs.length > 0) { const directory = testDirs.pop() if (directory) { rmSync(directory, { recursive: true, force: true }) } } }) function createTempMessageDir(sessionID: string): string { const directory = mkdtempSync(join(tmpdir(), "atlas-session-last-agent-json-")) testDirs.push(directory) const messageDir = join(TEST_MESSAGE_STORAGE, sessionID) mkdirSync(messageDir, { recursive: true }) return messageDir } describe("getLastAgentFromSession JSON backend", () => { test("returns the newest non-compaction agent by message timestamp rather than filename order", async () => { // given const sessionID = "ses_json_last_agent" const messageDir = createTempMessageDir(sessionID) writeFileSync(join(messageDir, "msg_ffff0000_000001.json"), JSON.stringify({ agent: "compaction", time: { created: 200 }, }), "utf-8") writeFileSync(join(messageDir, "msg_00000000_000999.json"), JSON.stringify({ agent: "atlas", time: { created: 100 }, }), "utf-8") writeFileSync(join(messageDir, "msg_11111111_000002.json"), JSON.stringify({ agent: "sisyphus-junior", time: { created: 50 }, }), "utf-8") const { getLastAgentFromSession } = await import("./session-last-agent") // when const result = await getLastAgentFromSession(sessionID) // then expect(result).toBe("atlas") }) test("skips JSON messages whose part storage contains a compaction marker", async () => { // given const sessionID = "ses_json_compaction_marker" const messageDir = createTempMessageDir(sessionID) const compactionMessageID = "msg_test_atlas_compaction_marker" const partDir = join(PART_STORAGE, compactionMessageID) testDirs.push(partDir) writeFileSync(join(messageDir, "msg_0001.json"), JSON.stringify({ id: compactionMessageID, agent: "atlas", time: { created: 200 }, }), "utf-8") mkdirSync(partDir, { recursive: true }) writeFileSync(join(partDir, "prt_0001.json"), JSON.stringify({ type: "compaction", }), "utf-8") writeFileSync(join(messageDir, "msg_0002.json"), JSON.stringify({ id: "msg_0002", agent: "sisyphus-junior", time: { created: 100 }, }), "utf-8") const { getLastAgentFromSession } = await import("./session-last-agent") // when const result = await getLastAgentFromSession(sessionID) // then expect(result).toBe("sisyphus-junior") }) })