diff --git a/lib/messages/inject.ts b/lib/messages/inject.ts index 132e784..3601863 100644 --- a/lib/messages/inject.ts +++ b/lib/messages/inject.ts @@ -7,7 +7,6 @@ import { extractParameterKey, buildToolIdList, createSyntheticAssistantMessageWithToolPart, - createSyntheticUserMessage, } from "./utils" import { getFilePathFromParameters, isProtectedFilePath } from "../protected-file-patterns" import { getLastUserMessage } from "../shared-utils" @@ -140,25 +139,20 @@ export const insertPruneToolContext = ( const userInfo = lastUserMessage.info as UserMessage const providerID = userInfo.model.providerID + const modelID = userInfo.model.modelID const isGitHubCopilot = providerID === "github-copilot" || providerID === "github-copilot-enterprise" + const isAnthropic = modelID.includes("claude") - logger.info("Injecting prunable-tools list", { - providerID, - isGitHubCopilot, - injectionType: isGitHubCopilot ? "assistant-with-tool-part" : "user-message", - }) - - const variant = state.variant ?? (lastUserMessage.info as UserMessage).variant - if (isGitHubCopilot) { - messages.push( - createSyntheticAssistantMessageWithToolPart( - lastUserMessage, - prunableToolsContent, - variant, - ), - ) - } else { - messages.push(createSyntheticUserMessage(lastUserMessage, prunableToolsContent, variant)) + if (isGitHubCopilot || isAnthropic) { + const lastMessage = messages[messages.length - 1] + if (lastMessage?.info?.role === "user") { + return + } } + + const variant = state.variant ?? userInfo.variant + messages.push( + createSyntheticAssistantMessageWithToolPart(lastUserMessage, prunableToolsContent, variant), + ) } diff --git a/lib/messages/utils.ts b/lib/messages/utils.ts index 9a9a2d8..00a5403 100644 --- a/lib/messages/utils.ts +++ b/lib/messages/utils.ts @@ -7,37 +7,6 @@ const SYNTHETIC_MESSAGE_ID = "msg_01234567890123456789012345" const SYNTHETIC_PART_ID = "prt_01234567890123456789012345" const SYNTHETIC_CALL_ID = "call_01234567890123456789012345" -export const createSyntheticUserMessage = ( - baseMessage: WithParts, - content: string, - variant?: string, -): WithParts => { - const userInfo = baseMessage.info as UserMessage - return { - info: { - id: SYNTHETIC_MESSAGE_ID, - sessionID: userInfo.sessionID, - role: "user", - time: { created: Date.now() }, - agent: userInfo.agent || "code", - model: { - providerID: userInfo.model.providerID, - modelID: userInfo.model.modelID, - }, - ...(variant !== undefined && { variant }), - }, - parts: [ - { - id: SYNTHETIC_PART_ID, - sessionID: userInfo.sessionID, - messageID: SYNTHETIC_MESSAGE_ID, - type: "text", - text: content, - }, - ], - } -} - export const createSyntheticAssistantMessageWithToolPart = ( baseMessage: WithParts, content: string, diff --git a/package.json b/package.json index 2c9e86a..44bf79c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@tarquinen/opencode-dcp", - "version": "1.1.6", + "version": "1.1.7-beta.1", "type": "module", "description": "OpenCode plugin that optimizes token usage by pruning obsolete tool outputs from conversation context", "main": "./dist/index.js",