import assert from "node:assert/strict"; import test from "node:test"; import type { ExtensionContext, SessionEntry } from "@earendil-works/pi-coding-agent"; import { onLiveBranch } from "../src/liveness.ts"; const STALE = "This extension ctx is stale after session replacement or reload."; const entry = (id: string): SessionEntry => ({ type: "custom", id, parentId: null, timestamp: "2026-09-12T00:00:00.000Z", customType: "unrelated", data: {}, }) as SessionEntry; const context = (branch: SessionEntry[] | (() => never)): ExtensionContext => ({ get sessionManager() { return typeof branch === "function" ? { getBranch: branch, } : { getBranch: () => branch }; }, }) as unknown as ExtensionContext; test("a boundary still on the branch is live", () => { assert.equal(onLiveBranch(context([entry("a"), entry("b")]), "a"), true); }); test("a boundary that left the branch is not live", () => { assert.equal(onLiveBranch(context([entry("a")]), "b"), false); }); test("a replaced session is not a live branch and does not throw", () => { const replaced = context(() => { throw new Error(STALE); }); assert.equal(onLiveBranch(replaced, "a"), false); assert.equal(onLiveBranch(replaced, null), false); });