Centralize session scope, chat projections and typed task bridges. Keep historical interaction replies authoritative and publish terminal state to subscribers. Validate Server contracts before replacing generated artifacts.
21 lines
1.1 KiB
TypeScript
21 lines
1.1 KiB
TypeScript
import { expect, it } from "bun:test";
|
|
import { mkdtemp, rm } from "node:fs/promises";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { SessionUiStateStore } from "../../src/sessions/uiStateStore.js";
|
|
|
|
it("restores plan history independently of chat messages after reconnecting", async () => {
|
|
const directory = await mkdtemp(join(tmpdir(), "tjwater-plan-state-"));
|
|
try {
|
|
const store = new SessionUiStateStore(directory);
|
|
await store.initialize();
|
|
const executionPlans = [{ revision: 1, nodes: [{ id: "sampling", status: "waiting" }] }];
|
|
await store.write({ sessionId: "session-1", actorKey: "actor-test", projectKey: "project-test" }, { sessionId: "session-1", messages: [], executionPlans });
|
|
const reloaded = await new SessionUiStateStore(directory).read({ sessionId: "session-1", actorKey: "actor-test", projectKey: "project-test" });
|
|
expect(reloaded?.executionPlans).toEqual(executionPlans);
|
|
expect(await store.read({ sessionId: "other-session", actorKey: "actor-test", projectKey: "project-test" })).toBeNull();
|
|
} finally {
|
|
await rm(directory, { recursive: true, force: true });
|
|
}
|
|
});
|