diff options
| author | DS <[email protected]> | 2025-12-14 23:51:11 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-14 22:51:11 -0600 |
| commit | b021b26e77b4982e27b77a33d51535bfd9d0ff76 (patch) | |
| tree | c784f3ad144e7e1f170a4acb77f5baa210cdf850 /packages | |
| parent | 9555d348de8d6fdc389f8f554dd28d3eb79e504d (diff) | |
| download | opencode-b021b26e77b4982e27b77a33d51535bfd9d0ff76.tar.gz opencode-b021b26e77b4982e27b77a33d51535bfd9d0ff76.zip | |
feat: restore experimental.chat.messages.transform and add experimental.chat.system.transform hooks (#5542)
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/session/llm.ts | 8 | ||||
| -rw-r--r-- | packages/opencode/src/session/prompt.ts | 8 | ||||
| -rw-r--r-- | 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<void> + "experimental.chat.system.transform"?: ( + input: {}, + output: { + system: string[] + }, + ) => Promise<void> "experimental.text.complete"?: ( input: { sessionID: string; messageID: string; partID: string }, output: { text: string }, |
