Skip to content
This repository was archived by the owner on Apr 1, 2026. It is now read-only.

Commit b021b26

Browse files
authored
feat: restore experimental.chat.messages.transform and add experimental.chat.system.transform hooks (anomalyco#5542)
1 parent 9555d34 commit b021b26

3 files changed

Lines changed: 19 additions & 3 deletions

File tree

packages/opencode/src/session/llm.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Provider } from "@/provider/provider"
22
import { Log } from "@/util/log"
33
import { streamText, wrapLanguageModel, type ModelMessage, type StreamTextResult, type Tool, type ToolSet } from "ai"
4-
import { mergeDeep, pipe } from "remeda"
4+
import { clone, mergeDeep, pipe } from "remeda"
55
import { ProviderTransform } from "@/provider/transform"
66
import { Config } from "@/config/config"
77
import { Instance } from "@/project/instance"
@@ -60,6 +60,12 @@ export namespace LLM {
6060
.join("\n"),
6161
)
6262

63+
const original = clone(system)
64+
await Plugin.trigger("experimental.chat.system.transform", {}, { system })
65+
if (system.length === 0) {
66+
system.push(...original)
67+
}
68+
6369
const params = await Plugin.trigger(
6470
"chat.params",
6571
{

packages/opencode/src/session/prompt.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import PROMPT_PLAN from "../session/prompt/plan.txt"
2020
import BUILD_SWITCH from "../session/prompt/build-switch.txt"
2121
import MAX_STEPS from "../session/prompt/max-steps.txt"
2222
import { defer } from "../util/defer"
23-
import { mergeDeep, pipe } from "remeda"
23+
import { clone, mergeDeep, pipe } from "remeda"
2424
import { ToolRegistry } from "../tool/registry"
2525
import { Wildcard } from "../util/wildcard"
2626
import { MCP } from "../mcp"
@@ -480,14 +480,18 @@ export namespace SessionPrompt {
480480
})
481481
}
482482

483+
const sessionMessages = clone(msgs)
484+
485+
await Plugin.trigger("experimental.chat.messages.transform", {}, { messages: sessionMessages })
486+
483487
const result = await processor.process({
484488
user: lastUser,
485489
agent,
486490
abort,
487491
sessionID,
488492
system: [...(await SystemPrompt.environment()), ...(await SystemPrompt.custom())],
489493
messages: [
490-
...MessageV2.toModelMessage(msgs),
494+
...MessageV2.toModelMessage(sessionMessages),
491495
...(isLastStep
492496
? [
493497
{

packages/plugin/src/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,12 @@ export interface Hooks {
185185
}[]
186186
},
187187
) => Promise<void>
188+
"experimental.chat.system.transform"?: (
189+
input: {},
190+
output: {
191+
system: string[]
192+
},
193+
) => Promise<void>
188194
"experimental.text.complete"?: (
189195
input: { sessionID: string; messageID: string; partID: string },
190196
output: { text: string },

0 commit comments

Comments
 (0)