feat: add /context prompt breakdown

This commit is contained in:
Peter Steinberger
2026-01-15 01:06:19 +00:00
parent 632651aee2
commit bcde09ae91
13 changed files with 587 additions and 1 deletions

View File

@@ -250,6 +250,7 @@ export async function runEmbeddedPiAgent(
provider,
model: model.id,
},
systemPromptReport: attempt.systemPromptReport,
error: { kind, message: errorText },
},
};
@@ -404,6 +405,7 @@ export async function runEmbeddedPiAgent(
durationMs: Date.now() - started,
agentMeta,
aborted,
systemPromptReport: attempt.systemPromptReport,
},
didSendViaMessagingTool: attempt.didSendViaMessagingTool,
messagingToolSentTexts: attempt.messagingToolSentTexts,

View File

@@ -37,6 +37,7 @@ import {
loadWorkspaceSkillEntries,
resolveSkillsPromptForRun,
} from "../../skills.js";
import { buildSystemPromptReport } from "../../system-prompt-report.js";
import { filterBootstrapFilesForSession, loadWorkspaceBootstrapFiles } from "../../workspace.js";
import { isAbortError } from "../abort.js";
@@ -62,6 +63,7 @@ import {
resolveExecToolDefaults,
resolveUserTimezone,
} from "../utils.js";
import { resolveSandboxRuntimeStatus } from "../../sandbox/runtime-status.js";
import type { EmbeddedRunAttemptParams, EmbeddedRunAttemptResult } from "./types.js";
@@ -198,6 +200,28 @@ export async function runEmbeddedAttempt(
userTime,
contextFiles,
});
const systemPromptReport = buildSystemPromptReport({
source: "run",
generatedAt: Date.now(),
sessionId: params.sessionId,
sessionKey: params.sessionKey,
provider: params.provider,
model: params.modelId,
workspaceDir: effectiveWorkspace,
bootstrapMaxChars: resolveBootstrapMaxChars(params.config),
sandbox: (() => {
const runtime = resolveSandboxRuntimeStatus({
cfg: params.config,
sessionKey: params.sessionKey ?? params.sessionId,
});
return { mode: runtime.mode, sandboxed: runtime.sandboxed };
})(),
systemPrompt: appendPrompt,
bootstrapFiles,
injectedFiles: contextFiles,
skillsPrompt,
tools,
});
const systemPrompt = createSystemPromptOverride(appendPrompt);
const sessionLock = await acquireSessionWriteLock({
@@ -427,6 +451,7 @@ export async function runEmbeddedAttempt(
timedOut,
promptError,
sessionIdUsed,
systemPromptReport,
messagesSnapshot,
assistantTexts,
toolMetas: toolMetasNormalized,

View File

@@ -8,6 +8,7 @@ import type { ExecElevatedDefaults } from "../../bash-tools.js";
import type { MessagingToolSend } from "../../pi-embedded-messaging.js";
import type { BlockReplyChunking } from "../../pi-embedded-subscribe.js";
import type { SkillSnapshot } from "../../skills.js";
import type { SessionSystemPromptReport } from "../../../config/sessions/types.js";
type AuthStorage = ReturnType<typeof discoverAuthStorage>;
type ModelRegistry = ReturnType<typeof discoverModels>;
@@ -65,6 +66,7 @@ export type EmbeddedRunAttemptResult = {
timedOut: boolean;
promptError: unknown;
sessionIdUsed: string;
systemPromptReport?: SessionSystemPromptReport;
messagesSnapshot: AgentMessage[];
assistantTexts: string[];
toolMetas: Array<{ toolName: string; meta?: string }>;

View File

@@ -1,4 +1,5 @@
import type { MessagingToolSend } from "../pi-embedded-messaging.js";
import type { SessionSystemPromptReport } from "../../config/sessions/types.js";
export type EmbeddedPiAgentMeta = {
sessionId: string;
@@ -17,6 +18,7 @@ export type EmbeddedPiRunMeta = {
durationMs: number;
agentMeta?: EmbeddedPiAgentMeta;
aborted?: boolean;
systemPromptReport?: SessionSystemPromptReport;
error?: {
kind: "context_overflow" | "compaction_failure";
message: string;