diff --git a/src/tools/athena-council/session-guard.test.ts b/src/tools/athena-council/session-guard.test.ts deleted file mode 100644 index a5c0eb2d..00000000 --- a/src/tools/athena-council/session-guard.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { afterEach, describe, expect, test } from "bun:test" -import { - isCouncilRunning, - markCouncilDone, - markCouncilRunning, - _resetForTesting, - _setTimestampForTesting, -} from "./session-guard" - -afterEach(() => { - _resetForTesting() -}) - -describe("session-guard", () => { - //#given no active sessions - //#when isCouncilRunning is checked - //#then returns false - test("returns false for unknown session", () => { - expect(isCouncilRunning("session-1")).toBe(false) - }) - - //#given a session is marked as running - //#when isCouncilRunning is checked - //#then returns true - test("returns true after markCouncilRunning", () => { - markCouncilRunning("session-1") - - expect(isCouncilRunning("session-1")).toBe(true) - }) - - //#given a session was marked running then done - //#when isCouncilRunning is checked - //#then returns false - test("returns false after markCouncilDone", () => { - markCouncilRunning("session-1") - markCouncilDone("session-1") - - expect(isCouncilRunning("session-1")).toBe(false) - }) - - //#given a session was marked running 6 minutes ago (past 5-minute timeout) - //#when isCouncilRunning is checked - //#then stale entry is purged and returns false - test("purges stale entries older than 5 minutes", () => { - const sixMinutesAgo = Date.now() - 6 * 60 * 1000 - _setTimestampForTesting("stale-session", sixMinutesAgo) - - expect(isCouncilRunning("stale-session")).toBe(false) - }) - - //#given a session was marked running 4 minutes ago (within 5-minute timeout) - //#when isCouncilRunning is checked - //#then entry is kept and returns true - test("keeps entries within timeout window", () => { - const fourMinutesAgo = Date.now() - 4 * 60 * 1000 - _setTimestampForTesting("recent-session", fourMinutesAgo) - - expect(isCouncilRunning("recent-session")).toBe(true) - }) - - //#given multiple sessions where one is stale and one is fresh - //#when isCouncilRunning is checked for the fresh one - //#then stale entry is purged but fresh entry remains - test("purges only stale entries while keeping fresh ones", () => { - const sixMinutesAgo = Date.now() - 6 * 60 * 1000 - _setTimestampForTesting("stale-session", sixMinutesAgo) - markCouncilRunning("fresh-session") - - expect(isCouncilRunning("stale-session")).toBe(false) - expect(isCouncilRunning("fresh-session")).toBe(true) - }) -}) diff --git a/src/tools/athena-council/session-guard.ts b/src/tools/athena-council/session-guard.ts deleted file mode 100644 index 94bf5143..00000000 --- a/src/tools/athena-council/session-guard.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** Timeout in ms after which a stale council session lock is automatically released. */ -const COUNCIL_SESSION_TIMEOUT_MS = 5 * 60 * 1000 - -/** Tracks active council executions per session with timestamps for stale entry cleanup. */ -const activeCouncilSessions = new Map() - -function purgeStaleEntries(): void { - const now = Date.now() - for (const [sessionId, startedAt] of activeCouncilSessions) { - if (now - startedAt > COUNCIL_SESSION_TIMEOUT_MS) { - activeCouncilSessions.delete(sessionId) - } - } -} - -export function isCouncilRunning(sessionId: string): boolean { - purgeStaleEntries() - return activeCouncilSessions.has(sessionId) -} - -export function markCouncilRunning(sessionId: string): void { - activeCouncilSessions.set(sessionId, Date.now()) -} - -export function markCouncilDone(sessionId: string): void { - activeCouncilSessions.delete(sessionId) -} - -/** Visible for testing only. */ -export function _resetForTesting(): void { - activeCouncilSessions.clear() -} - -/** Visible for testing only. */ -export function _setTimestampForTesting(sessionId: string, timestamp: number): void { - activeCouncilSessions.set(sessionId, timestamp) -} diff --git a/src/tools/athena-council/types.ts b/src/tools/athena-council/types.ts index 72c2d474..c1d14ef3 100644 --- a/src/tools/athena-council/types.ts +++ b/src/tools/athena-council/types.ts @@ -2,22 +2,3 @@ export interface AthenaCouncilToolArgs { question: string members?: string[] } - -export interface AthenaCouncilLaunchedMember { - task_id: string - name: string - model: string - status: "running" -} - -export interface AthenaCouncilFailedMember { - name: string - model: string - error: string -} - -export interface AthenaCouncilLaunchResult { - launched: number - members: AthenaCouncilLaunchedMember[] - failed: AthenaCouncilFailedMember[] -}