Files
my-pi/extensions/context-view.ts
T

29 lines
1.4 KiB
TypeScript

import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import { getCompactionService } from "../pi-compaction/src/service.js";
function formatNumber(value: number): string {
return new Intl.NumberFormat("en-US").format(Math.round(value));
}
export default function contextView(pi: ExtensionAPI): void {
pi.registerCommand("context", {
description: "Show the effective pi-compaction context projection",
handler: async (_args, ctx) => {
const sessionId = ctx.sessionManager.getSessionId();
const metrics = getCompactionService()?.getMetrics(sessionId);
const text = metrics
? [
`Effective: ${formatNumber(metrics.effectiveTokens)} / ${formatNumber(metrics.contextWindow)} (${metrics.percent.toFixed(1)}%, ${metrics.confidence})`,
`Raw: ${formatNumber(metrics.rawTokens)} / ${formatNumber(metrics.contextWindow)}`,
`Reclaimed: ${formatNumber(metrics.reclaimedTokens)}`,
`Segments: ${formatNumber(metrics.segmentCount)}`,
`Semantic jobs: ${formatNumber(metrics.semanticJobs)}`,
`Generation: ${formatNumber(metrics.generation)}`,
].join("\n")
: "No pi-compaction projection is available yet. Send one message to build the first snapshot.";
if (ctx.hasUI) ctx.ui.notify(text, "info");
else process.stderr.write(`${text}\n`);
},
});
}