repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/usage/index.ts
Rawimport type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import { closeDebug, dbg, span } from "./src/debug.ts";
// Shared so repeated invocations evaluate ./implementation.js once.
// Pi's jiti loader (module cache disabled) can otherwise hand one caller a
// partially initialized module whose imports are still undefined.
let implementationModule:
| Promise<typeof import("./implementation.js")>
| undefined;
const loadImplementation = (): Promise<
typeof import("./implementation.js")
> => {
implementationModule ??= import("./implementation.js");
return implementationModule;
};
export default function usageExtension(pi: ExtensionAPI): void {
pi.on("session_start", () => {
dbg?.("session.start");
});
pi.on("session_shutdown", () => {
dbg?.("session.shutdown");
closeDebug();
});
pi.registerCommand("usage", {
description: "Show usage statistics dashboard",
handler: async (args, ctx) => {
const finish = span?.("command.handle");
try {
await (await loadImplementation()).showUsage(args, ctx);
finish?.();
} catch (error) {
finish?.("error");
throw error;
}
},
});
}