From 5c38d17c4bb4bc7a0e03a1ee2f3365efe08378a8 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 8 Jan 2026 00:08:22 +0000 Subject: [PATCH] refactor: dedupe embedded prompt append --- src/agents/pi-embedded-runner.test.ts | 8 +++++ src/agents/pi-embedded-runner.ts | 44 ++++++++++++++++++++++++--- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/agents/pi-embedded-runner.test.ts b/src/agents/pi-embedded-runner.test.ts index 194f233fc..3b581ea4a 100644 --- a/src/agents/pi-embedded-runner.test.ts +++ b/src/agents/pi-embedded-runner.test.ts @@ -119,10 +119,18 @@ describe("createSystemPromptAppender", () => { const appender = createSystemPromptAppender("APPEND_SECTION"); const finalPrompt = appender(defaultPrompt); const occurrences = finalPrompt.split(sentinel).length - 1; + const contextHeaders = finalPrompt.split("# Project Context").length - 1; expect(typeof appender).toBe("function"); expect(occurrences).toBe(1); + expect(contextHeaders).toBe(1); expect(finalPrompt).toContain("APPEND_SECTION"); }); + + it("returns the default prompt when append text is empty", () => { + const defaultPrompt = buildSystemPrompt({ cwd: "/tmp" }); + const appender = createSystemPromptAppender(" \n "); + expect(appender(defaultPrompt)).toBe(defaultPrompt); + }); }); describe("applyGoogleTurnOrderingFix", () => { diff --git a/src/agents/pi-embedded-runner.ts b/src/agents/pi-embedded-runner.ts index f3b3bbb39..2b4169521 100644 --- a/src/agents/pi-embedded-runner.ts +++ b/src/agents/pi-embedded-runner.ts @@ -491,6 +491,42 @@ export function buildEmbeddedSandboxInfo( }; } +function buildEmbeddedAppendPrompt(params: { + workspaceDir: string; + defaultThinkLevel?: ThinkLevel; + extraSystemPrompt?: string; + ownerNumbers?: string[]; + reasoningTagHint: boolean; + heartbeatPrompt?: string; + runtimeInfo: { + host: string; + os: string; + arch: string; + node: string; + model: string; + }; + sandboxInfo?: EmbeddedSandboxInfo; + tools: AgentTool[]; + modelAliasLines: string[]; + userTimezone: string; + userTime?: string; +}): string { + return buildAgentSystemPromptAppend({ + workspaceDir: params.workspaceDir, + defaultThinkLevel: params.defaultThinkLevel, + extraSystemPrompt: params.extraSystemPrompt, + ownerNumbers: params.ownerNumbers, + reasoningTagHint: params.reasoningTagHint, + heartbeatPrompt: params.heartbeatPrompt, + runtimeInfo: params.runtimeInfo, + sandboxInfo: params.sandboxInfo, + toolNames: params.tools.map((tool) => tool.name), + modelAliasLines: params.modelAliasLines, + userTimezone: params.userTimezone, + userTime: params.userTime, + }); +} + export function createSystemPromptAppender( appendPrompt: string, ): (defaultPrompt: string) => string { @@ -784,7 +820,7 @@ export async function compactEmbeddedPiSession(params: { params.config?.agent?.userTimezone, ); const userTime = formatUserTime(new Date(), userTimezone); - const appendPrompt = buildAgentSystemPromptAppend({ + const appendPrompt = buildEmbeddedAppendPrompt({ workspaceDir: effectiveWorkspace, defaultThinkLevel: params.thinkLevel, extraSystemPrompt: params.extraSystemPrompt, @@ -795,7 +831,7 @@ export async function compactEmbeddedPiSession(params: { ), runtimeInfo, sandboxInfo, - toolNames: tools.map((tool) => tool.name), + tools, modelAliasLines: buildModelAliasLines(params.config), userTimezone, userTime, @@ -1104,7 +1140,7 @@ export async function runEmbeddedPiAgent(params: { params.config?.agent?.userTimezone, ); const userTime = formatUserTime(new Date(), userTimezone); - const appendPrompt = buildAgentSystemPromptAppend({ + const appendPrompt = buildEmbeddedAppendPrompt({ workspaceDir: effectiveWorkspace, defaultThinkLevel: thinkLevel, extraSystemPrompt: params.extraSystemPrompt, @@ -1115,7 +1151,7 @@ export async function runEmbeddedPiAgent(params: { ), runtimeInfo, sandboxInfo, - toolNames: tools.map((tool) => tool.name), + tools, modelAliasLines: buildModelAliasLines(params.config), userTimezone, userTime,