diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index fa8803912..4e42fb0d2 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -11,7 +11,7 @@ import { tool, jsonSchema, } from "ai" -import { clone, mergeDeep, pipe } from "remeda" +import { mergeDeep, pipe } from "remeda" import { ProviderTransform } from "@/provider/transform" import { Config } from "@/config/config" import { Instance } from "@/project/instance" @@ -80,15 +80,11 @@ export namespace LLM { ) const header = system[0] - const original = clone(system) await Plugin.trigger( "experimental.chat.system.transform", { sessionID: input.sessionID, model: input.model }, { system }, ) - if (system.length === 0) { - system.push(...original) - } // rejoin to maintain 2-part structure for caching if header unchanged if (system.length > 2 && system[0] === header) { const rest = system.slice(1) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 6ca93979e..f9229de88 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -22,7 +22,6 @@ import PROMPT_PLAN from "../session/prompt/plan.txt" import BUILD_SWITCH from "../session/prompt/build-switch.txt" import MAX_STEPS from "../session/prompt/max-steps.txt" import { defer } from "../util/defer" -import { clone } from "remeda" import { ToolRegistry } from "../tool/registry" import { MCP } from "../mcp" import { LSP } from "../lsp" @@ -627,11 +626,9 @@ export namespace SessionPrompt { }) } - const sessionMessages = clone(msgs) - // Ephemerally wrap queued user messages with a reminder to stay on track if (step > 1 && lastFinished) { - for (const msg of sessionMessages) { + for (const msg of msgs) { if (msg.info.role !== "user" || msg.info.id <= lastFinished.id) continue for (const part of msg.parts) { if (part.type !== "text" || part.ignored || part.synthetic) continue @@ -648,7 +645,7 @@ export namespace SessionPrompt { } } - await Plugin.trigger("experimental.chat.messages.transform", {}, { messages: sessionMessages }) + await Plugin.trigger("experimental.chat.messages.transform", {}, { messages: msgs }) // Build system prompt, adding structured output instruction if needed const system = [...(await SystemPrompt.environment(model)), ...(await InstructionPrompt.system())] @@ -664,7 +661,7 @@ export namespace SessionPrompt { sessionID, system, messages: [ - ...MessageV2.toModelMessages(sessionMessages, model), + ...MessageV2.toModelMessages(msgs, model), ...(isLastStep ? [ {