From e83b22159d0c6b393acf9b04fdd6798397bb782d Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Wed, 15 Apr 2026 15:50:33 -0500 Subject: [PATCH] tweak: ensure auto continuing compaction is tracked as agent initiated for github copilot (#22567) Co-authored-by: opencode-agent[bot] --- packages/opencode/src/plugin/github-copilot/copilot.ts | 10 +++++++++- packages/opencode/src/session/compaction.ts | 4 ++++ packages/opencode/test/session/compaction.test.ts | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/plugin/github-copilot/copilot.ts b/packages/opencode/src/plugin/github-copilot/copilot.ts index ac685f74da..e12d182e4f 100644 --- a/packages/opencode/src/plugin/github-copilot/copilot.ts +++ b/packages/opencode/src/plugin/github-copilot/copilot.ts @@ -355,7 +355,15 @@ export async function CopilotAuthPlugin(input: PluginInput): Promise { }) .catch(() => undefined) - if (parts?.data.parts?.some((part) => part.type === "compaction")) { + if ( + parts?.data.parts?.some( + (part) => + part.type === "compaction" || + // Auto-compaction resumes via a synthetic user text part. Treat only + // that marked followup as agent-initiated so manual prompts stay user-initiated. + (part.type === "text" && part.synthetic && part.metadata?.compaction_continue === true), + ) + ) { output.headers["x-initiator"] = "agent" return } diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index de0f8d0788..4978ef5478 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -345,6 +345,10 @@ When constructing the summary, try to stick to this template: messageID: continueMsg.id, sessionID: input.sessionID, type: "text", + // Internal marker for auto-compaction followups so provider plugins + // can distinguish them from manual post-compaction user prompts. + // This is not a stable plugin contract and may change or disappear. + metadata: { compaction_continue: true }, synthetic: true, text, time: { diff --git a/packages/opencode/test/session/compaction.test.ts b/packages/opencode/test/session/compaction.test.ts index ddfe859113..251447762d 100644 --- a/packages/opencode/test/session/compaction.test.ts +++ b/packages/opencode/test/session/compaction.test.ts @@ -843,6 +843,7 @@ describe("session.compaction.process", () => { expect(last?.parts[0]).toMatchObject({ type: "text", synthetic: true, + metadata: { compaction_continue: true }, }) if (last?.parts[0]?.type === "text") { expect(last.parts[0].text).toContain("Continue if you have next steps")