40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import type {
|
|
ExtensionAPI,
|
|
ExtensionContext,
|
|
} from "@earendil-works/pi-coding-agent";
|
|
import { registerWorkflowRecovery } from "./index.ts";
|
|
import type { ContextTransitionRuntime } from "./context-transition.ts";
|
|
|
|
|
|
test("session startup invokes persisted Workflow recovery", async () => {
|
|
let sessionStart:
|
|
| ((event: { reason: string }, ctx: ExtensionContext) => Promise<void>)
|
|
| undefined;
|
|
const pi = {
|
|
on(event: string, handler: typeof sessionStart) {
|
|
if (event === "session_start") sessionStart = handler;
|
|
},
|
|
} as unknown as ExtensionAPI;
|
|
let recoveries = 0;
|
|
registerWorkflowRecovery(pi, {
|
|
store: {} as never,
|
|
engineForContext: async () =>
|
|
({
|
|
async recover() {
|
|
recoveries++;
|
|
return [];
|
|
},
|
|
}) as never,
|
|
} as ContextTransitionRuntime);
|
|
assert.ok(sessionStart);
|
|
await sessionStart(
|
|
{ reason: "startup" },
|
|
{
|
|
ui: { notify: () => {} },
|
|
} as unknown as ExtensionContext,
|
|
);
|
|
assert.equal(recoveries, 1);
|
|
});
|