From 020ee56f25b58103a787d1c96b326e31b495ad06 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 25 Nov 2025 12:10:56 -0600 Subject: [PATCH] fix: dont auto continue if compaction was manual --- packages/opencode/src/server/server.ts | 1 + packages/opencode/src/session/compaction.ts | 5 ++++- packages/opencode/src/session/message-v2.ts | 1 + packages/opencode/src/session/prompt.ts | 2 ++ packages/sdk/js/src/gen/types.gen.ts | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts index 51240ae2e..65c635ee1 100644 --- a/packages/opencode/src/server/server.ts +++ b/packages/opencode/src/server/server.ts @@ -830,6 +830,7 @@ export namespace Server { providerID: body.providerID, modelID: body.modelID, }, + auto: false, }) await SessionPrompt.loop(id) return c.json(true) diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index 1255d39f0..e985372a1 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -95,6 +95,7 @@ export namespace SessionCompaction { } agent: string abort: AbortSignal + auto: boolean }) { const model = await Provider.getModel(input.model.providerID, input.model.modelID) const system = [...SystemPrompt.compaction(model.providerID)] @@ -198,7 +199,7 @@ export namespace SessionCompaction { }), }), ) - if (result === "continue") { + if (result === "continue" && input.auto) { const continueMsg = await Session.updateMessage({ id: Identifier.ascending("message"), role: "user", @@ -234,6 +235,7 @@ export namespace SessionCompaction { providerID: z.string(), modelID: z.string(), }), + auto: z.boolean(), }), async (input) => { const msg = await Session.updateMessage({ @@ -251,6 +253,7 @@ export namespace SessionCompaction { messageID: msg.id, sessionID: msg.sessionID, type: "compaction", + auto: input.auto, }) }, ) diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index 20b612f54..1a9b08d12 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -146,6 +146,7 @@ export namespace MessageV2 { export const CompactionPart = PartBase.extend({ type: z.literal("compaction"), + auto: z.boolean(), }).meta({ ref: "CompactionPart", }) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 741e3cc7e..e6c64f96b 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -408,6 +408,7 @@ export namespace SessionPrompt { modelID: model.modelID, }, sessionID, + auto: task.auto, }) if (result === "stop") break continue @@ -423,6 +424,7 @@ export namespace SessionPrompt { sessionID, agent: lastUser.agent, model: lastUser.model, + auto: true, }) continue } diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts index fdb6dcd64..2de8ca2f1 100644 --- a/packages/sdk/js/src/gen/types.gen.ts +++ b/packages/sdk/js/src/gen/types.gen.ts @@ -371,6 +371,7 @@ export type CompactionPart = { sessionID: string messageID: string type: "compaction" + auto: boolean } export type Part =