From 5ffcde9dba64760286d43dbb1c97da7566c44178 Mon Sep 17 00:00:00 2001 From: opencode Date: Thu, 11 Dec 2025 20:09:20 +0000 Subject: release: v1.0.150 --- packages/plugin/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'packages/plugin') diff --git a/packages/plugin/package.json b/packages/plugin/package.json index fc474d55c..42841ec40 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.0.149", + "version": "1.0.150", "type": "module", "scripts": { "typecheck": "tsgo --noEmit", @@ -24,4 +24,4 @@ "typescript": "catalog:", "@typescript/native-preview": "catalog:" } -} +} \ No newline at end of file -- cgit v1.2.3 From fc9dfd054ab6ad35afe0b867bbf789f0e62c31e6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 11 Dec 2025 20:14:20 +0000 Subject: chore: format code --- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'packages/plugin') diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 42841ec40..3256079a5 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -24,4 +24,4 @@ "typescript": "catalog:", "@typescript/native-preview": "catalog:" } -} \ No newline at end of file +} diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 4494c2081..0ff29129e 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -29,4 +29,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} -- cgit v1.2.3 From 2a9269c3471f95a4c39884e03e56d242854b6b5e Mon Sep 17 00:00:00 2001 From: Jorgen Henriksen <56941036+jorgenwh@users.noreply.github.com> Date: Thu, 11 Dec 2025 21:38:45 +0100 Subject: add experimental.chat.messages.transform hook (#5207) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- packages/opencode/src/session/prompt.ts | 40 +++++++++++++++++++-------------- packages/plugin/src/index.ts | 10 +++++++++ 2 files changed, 33 insertions(+), 17 deletions(-) (limited to 'packages/plugin') diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 76c702982..d31153331 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -29,7 +29,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" @@ -520,28 +520,33 @@ export namespace SessionPrompt { }) } - const messages = [ + // Deep copy message history so that modifications made by plugins do not + // affect the original messages + const sessionMessages = clone( + msgs.filter((m) => { + if (m.info.role !== "assistant" || m.info.error === undefined) { + return true + } + if ( + MessageV2.AbortedError.isInstance(m.info.error) && + m.parts.some((part) => part.type !== "step-start" && part.type !== "reasoning") + ) { + return true + } + return false + }), + ) + + await Plugin.trigger("experimental.chat.messages.transform", {}, { messages: sessionMessages }) + + const messages: ModelMessage[] = [ ...system.map( (x): ModelMessage => ({ role: "system", content: x, }), ), - ...MessageV2.toModelMessage( - msgs.filter((m) => { - if (m.info.role !== "assistant" || m.info.error === undefined) { - return true - } - if ( - MessageV2.AbortedError.isInstance(m.info.error) && - m.parts.some((part) => part.type !== "step-start" && part.type !== "reasoning") - ) { - return true - } - - return false - }), - ), + ...MessageV2.toModelMessage(sessionMessages), ...(isLastStep ? [ { @@ -551,6 +556,7 @@ export namespace SessionPrompt { ] : []), ] + const result = await processor.process({ onError(error) { log.error("stream error", { diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index f00e90482..57ca75d60 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -6,6 +6,7 @@ import type { Provider, Permission, UserMessage, + Message, Part, Auth, Config, @@ -175,6 +176,15 @@ export interface Hooks { metadata: any }, ) => Promise + "experimental.chat.messages.transform"?: ( + input: {}, + output: { + messages: { + info: Message + parts: Part[] + }[] + }, + ) => Promise "experimental.text.complete"?: ( input: { sessionID: string; messageID: string; partID: string }, output: { text: string }, -- cgit v1.2.3