repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/decay/index.ts
Rawimport type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import type { DecayRuntime } from "./implementation.js";
import { closeDebug, dbg, span } from "./src/debug.ts";
// Compaction is uncommon, so keep its model, prompt, record, and UI modules out
// of Pi startup. One shared promise also serializes jiti's first module load.
export default function decayExtension(pi: ExtensionAPI): void {
let runtimePromise: Promise<DecayRuntime> | undefined;
const runtime = () =>
(runtimePromise ??= import("./implementation.js").then(
({ createDecayRuntime }) => createDecayRuntime(pi),
));
pi.on("session_start", () => dbg?.("session.start"));
pi.on("session_before_compact", async (event, ctx) => {
const finish = span?.("compaction.prepare");
try {
const result = await (await runtime()).sessionBeforeCompact(event, ctx);
finish?.();
return result;
} catch (error) {
finish?.("error");
throw error;
}
});
pi.on("session_compact", async (event, ctx) => {
if (!event.fromExtension) return;
const finish = span?.("compaction.complete");
try {
const result = await (await runtime()).sessionCompact(event, ctx);
finish?.();
return result;
} catch (error) {
finish?.("error");
throw error;
}
});
pi.on("session_shutdown", () => {
dbg?.("session.shutdown");
closeDebug();
});
}