mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-10-26 10:45:22 +00:00
29 lines
1.4 KiB
TypeScript
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`);
|
|
},
|
|
});
|
|
}
|