From c2a1ac7c3b2f349bdf0295922ee11c2a9728640c Mon Sep 17 00:00:00 2001 From: psyche <123316733+githubbzxs@users.noreply.github.com> Date: Mon, 13 Jul 2026 05:35:38 +0800 Subject: [PATCH] Stop Pi metadata tasks from cluttering session history (#1999) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 避免内部 Pi Agent 持久化会话 * test: 聚焦 Pi 会话持久化行为 --- .../server/agent/providers/pi/agent.test.ts | 23 +++++++++++++++++++ .../src/server/agent/providers/pi/agent.ts | 1 + .../src/server/agent/providers/pi/runtime.ts | 7 +++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/server/src/server/agent/providers/pi/agent.test.ts b/packages/server/src/server/agent/providers/pi/agent.test.ts index c8b4aaba8..9ebbe00fe 100644 --- a/packages/server/src/server/agent/providers/pi/agent.test.ts +++ b/packages/server/src/server/agent/providers/pi/agent.test.ts @@ -82,6 +82,29 @@ test("forwards launch-context env to the Pi process launch", async () => { await session.close(); }); +test("starts internal Pi agents without persisting a native session", async () => { + const pi = new FakePi(); + const client = createClient(pi); + const session = await client.createSession(createConfig({ internal: true })); + + expect(pi.recordedLaunches[0]).toMatchObject({ + noSession: true, + argv: expect.arrayContaining(["--no-session"]), + }); + + await session.close(); +}); + +test("keeps normal Pi agent sessions persisted", async () => { + const pi = new FakePi(); + const client = createClient(pi); + const session = await client.createSession(createConfig()); + + expect(pi.recordedLaunches[0]?.argv).not.toContain("--no-session"); + + await session.close(); +}); + class SessionEvents { private readonly events: AgentStreamEvent[] = []; private readonly waiters: Array<{ diff --git a/packages/server/src/server/agent/providers/pi/agent.ts b/packages/server/src/server/agent/providers/pi/agent.ts index c72e5d358..e57126e7f 100644 --- a/packages/server/src/server/agent/providers/pi/agent.ts +++ b/packages/server/src/server/agent/providers/pi/agent.ts @@ -1996,6 +1996,7 @@ export class PiRpcAgentClient implements AgentClient { model: config.model, thinkingOptionId: normalizePiThinkingOption(config.thinkingOptionId) ?? DEFAULT_PI_THINKING_LEVEL, + noSession: config.internal === true, systemPrompt: composeSystemPromptParts( config.systemPrompt, config.daemonAppendSystemPrompt, diff --git a/packages/server/src/server/agent/providers/pi/runtime.ts b/packages/server/src/server/agent/providers/pi/runtime.ts index 2a91c810e..e3d4ca72b 100644 --- a/packages/server/src/server/agent/providers/pi/runtime.ts +++ b/packages/server/src/server/agent/providers/pi/runtime.ts @@ -15,6 +15,7 @@ export interface PiRuntimeLaunch { model?: string; thinkingOptionId?: string; session?: string; + noSession?: boolean; systemPrompt?: string; mcpConfigPath?: string; extensionPaths?: string[]; @@ -26,6 +27,7 @@ export interface PiStartSessionInput { model?: string; thinkingOptionId?: string; session?: string; + noSession?: boolean; systemPrompt?: string; mcpConfigPath?: string; extensionPaths?: string[]; @@ -79,7 +81,9 @@ export function buildPiLaunch(input: { if (input.session.thinkingOptionId) { argv.push("--thinking", input.session.thinkingOptionId); } - if (input.session.session) { + if (input.session.noSession) { + argv.push("--no-session"); + } else if (input.session.session) { argv.push("--session", input.session.session); } const systemPrompt = input.session.systemPrompt?.trim(); @@ -106,6 +110,7 @@ export function buildPiLaunch(input: { model: input.session.model, thinkingOptionId: input.session.thinkingOptionId, session: input.session.session, + noSession: input.session.noSession, systemPrompt, mcpConfigPath: input.session.mcpConfigPath, extensionPaths: input.session.extensionPaths,