From b021b26e77b4982e27b77a33d51535bfd9d0ff76 Mon Sep 17 00:00:00 2001 From: DS <78942835+Tarquinen@users.noreply.github.com> Date: Sun, 14 Dec 2025 23:51:11 -0500 Subject: [PATCH] feat: restore experimental.chat.messages.transform and add experimental.chat.system.transform hooks (#5542) --- packages/opencode/src/session/llm.ts | 8 +++++++- packages/opencode/src/session/prompt.ts | 8 ++++++-- packages/plugin/src/index.ts | 6 ++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index 97b8aae2b..565d037f4 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -1,7 +1,7 @@ import { Provider } from "@/provider/provider" import { Log } from "@/util/log" import { streamText, wrapLanguageModel, type ModelMessage, type StreamTextResult, type Tool, type ToolSet } from "ai" -import { mergeDeep, pipe } from "remeda" +import { clone, mergeDeep, pipe } from "remeda" import { ProviderTransform } from "@/provider/transform" import { Config } from "@/config/config" import { Instance } from "@/project/instance" @@ -60,6 +60,12 @@ export namespace LLM { .join("\n"), ) + const original = clone(system) + await Plugin.trigger("experimental.chat.system.transform", {}, { system }) + if (system.length === 0) { + system.push(...original) + } + const params = await Plugin.trigger( "chat.params", { diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 9a36c5c62..e71162d0b 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -20,7 +20,7 @@ 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 { mergeDeep, pipe } from "remeda" +import { clone, mergeDeep, pipe } from "remeda" import { ToolRegistry } from "../tool/registry" import { Wildcard } from "../util/wildcard" import { MCP } from "../mcp" @@ -480,6 +480,10 @@ export namespace SessionPrompt { }) } + const sessionMessages = clone(msgs) + + await Plugin.trigger("experimental.chat.messages.transform", {}, { messages: sessionMessages }) + const result = await processor.process({ user: lastUser, agent, @@ -487,7 +491,7 @@ export namespace SessionPrompt { sessionID, system: [...(await SystemPrompt.environment()), ...(await SystemPrompt.custom())], messages: [ - ...MessageV2.toModelMessage(msgs), + ...MessageV2.toModelMessage(sessionMessages), ...(isLastStep ? [ { diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index 57ca75d60..9dd4820b9 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -185,6 +185,12 @@ export interface Hooks { }[] }, ) => Promise + "experimental.chat.system.transform"?: ( + input: {}, + output: { + system: string[] + }, + ) => Promise "experimental.text.complete"?: ( input: { sessionID: string; messageID: string; partID: string }, output: { text: string },