Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/usage/index.ts

Raw
import 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;
			}
		},
	});
}