Report context window usage for Paseo Agent

toAgentUsage dropped SessionStats.contextUsage, leaving the context-window
indicator blank on every Paseo Agent session. Mirror the Pi provider's
mapping into contextWindowMaxTokens/contextWindowUsedTokens.
This commit is contained in:
Mohamed Boudra
2026-07-02 08:39:06 +02:00
parent 7a6d2d86d7
commit 4a8a841f72
2 changed files with 27 additions and 3 deletions
@@ -108,6 +108,7 @@ class FakeInProcessPiSession {
totalMessages: 2,
tokens: { input: 3, output: 5, cacheRead: 2, cacheWrite: 0, total: 10 },
cost: 0.01,
contextUsage: { contextWindow: 200000, tokens: 1234, percentage: 0.6 },
};
}
@@ -452,7 +453,14 @@ describe("PaseoAgentSession runtime events", () => {
await expect(resultPromise).resolves.toEqual({
sessionId: "pi-session-1",
finalText: "done",
usage: { inputTokens: 3, cachedInputTokens: 2, outputTokens: 5, totalCostUsd: 0.01 },
usage: {
inputTokens: 3,
cachedInputTokens: 2,
outputTokens: 5,
totalCostUsd: 0.01,
contextWindowMaxTokens: 200000,
contextWindowUsedTokens: 1234,
},
timeline: [
{ type: "reasoning", text: "thinking" },
{
@@ -327,10 +327,26 @@ export function toAgentUsage(stats: SessionStats): AgentUsage | undefined {
const cachedInputTokens = stats.tokens.cacheRead;
const outputTokens = stats.tokens.output;
const totalCostUsd = stats.cost;
if (inputTokens === 0 && cachedInputTokens === 0 && outputTokens === 0 && totalCostUsd === 0) {
const contextWindowMaxTokens = stats.contextUsage?.contextWindow ?? undefined;
const contextWindowUsedTokens = stats.contextUsage?.tokens ?? undefined;
if (
inputTokens === 0 &&
cachedInputTokens === 0 &&
outputTokens === 0 &&
totalCostUsd === 0 &&
contextWindowMaxTokens === undefined &&
contextWindowUsedTokens === undefined
) {
return undefined;
}
return { inputTokens, cachedInputTokens, outputTokens, totalCostUsd };
return {
inputTokens,
cachedInputTokens,
outputTokens,
totalCostUsd,
...(typeof contextWindowMaxTokens === "number" ? { contextWindowMaxTokens } : {}),
...(typeof contextWindowUsedTokens === "number" ? { contextWindowUsedTokens } : {}),
};
}
const PiTextContentSchema = z.object({ type: z.literal("text"), text: z.string() });