diff --git a/lib/state/tool-cache.ts b/lib/state/tool-cache.ts index 1c500f0..a6140c7 100644 --- a/lib/state/tool-cache.ts +++ b/lib/state/tool-cache.ts @@ -2,7 +2,7 @@ import type { SessionState, ToolStatus, WithParts } from "./index" import type { Logger } from "../logger" import { PluginConfig } from "../config" -const MAX_TOOL_CACHE_SIZE = 500 +const MAX_TOOL_CACHE_SIZE = 1000 /** * Sync tool parameters from OpenCode's session.messages() API. @@ -16,13 +16,24 @@ export async function syncToolCache( try { logger.info("Syncing tool parameters from OpenCode messages") + state.nudgeCounter = 0 + for (const msg of messages) { for (const part of msg.parts) { - if (part.type !== "tool" || !part.callID || state.toolParameters.has(part.callID)) { + if (part.type !== "tool" || !part.callID) { continue } - const alreadyPruned = state.prune.toolIds.includes(part.callID) + if (part.tool === "prune") { + state.nudgeCounter = 0 + } else if (!config.strategies.pruneTool.protectedTools.includes(part.tool)) { + state.nudgeCounter++ + } + state.lastToolPrune = part.tool === "prune" + + if (state.toolParameters.has(part.callID)) { + continue + } state.toolParameters.set( part.callID, @@ -34,16 +45,11 @@ export async function syncToolCache( compacted: part.state.status === "completed" && !!part.state.time.compacted, } ) - - if (!alreadyPruned && !config.strategies.pruneTool.protectedTools.includes(part.tool)) { - state.nudgeCounter++ - } - - state.lastToolPrune = part.tool === "prune" - logger.info("lastToolPrune=" + String(state.lastToolPrune)) } } + // logger.info(`nudgeCounter=${state.nudgeCounter}, lastToolPrune=${state.lastToolPrune}`) + trimToolParametersCache(state) } catch (error) { logger.warn("Failed to sync tool parameters from OpenCode", { diff --git a/package-lock.json b/package-lock.json index a6c3dcd..8223a09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@tarquinen/opencode-dcp", - "version": "0.4.17", + "version": "1.0.0-beta.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@tarquinen/opencode-dcp", - "version": "0.4.17", + "version": "1.0.0-beta.1", "license": "MIT", "dependencies": { "@ai-sdk/openai-compatible": "^1.0.28", diff --git a/package.json b/package.json index ffb7bb1..8ef2493 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@tarquinen/opencode-dcp", - "version": "0.4.17", + "version": "1.0.0-beta.1", "type": "module", "description": "OpenCode plugin that optimizes token usage by pruning obsolete tool outputs from conversation context", "main": "./dist/index.js",