From 6239897389ae89f6e567473d58e5c095c42560fe Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Sat, 17 Jan 2026 00:24:40 -0500 Subject: [PATCH 01/10] fix: throw errors on prune tool failures instead of returning strings - Tools now throw errors for validation failures, resulting in status: 'error' - Cooldown only triggers when prune tool completes successfully - Logger now captures tool status and error fields for debugging --- lib/logger.ts | 6 ++++++ lib/state/tool-cache.ts | 4 +++- lib/strategies/tools.ts | 30 ++++++++++++++++++++++-------- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/logger.ts b/lib/logger.ts index c86a53dc..972a1fb1 100644 --- a/lib/logger.ts +++ b/lib/logger.ts @@ -168,12 +168,18 @@ export class Logger { callID: part.callID, } + if (part.state?.status) { + toolPart.status = part.state.status + } if (part.state?.input) { toolPart.input = part.state.input } if (part.state?.output) { toolPart.output = part.state.output } + if (part.state?.error) { + toolPart.error = part.state.error + } return toolPart } diff --git a/lib/state/tool-cache.ts b/lib/state/tool-cache.ts index f9d3d3cb..057bcf10 100644 --- a/lib/state/tool-cache.ts +++ b/lib/state/tool-cache.ts @@ -42,7 +42,9 @@ export async function syncToolCache( turnProtectionTurns > 0 && state.currentTurn - turnCounter < turnProtectionTurns - state.lastToolPrune = part.tool === "discard" || part.tool === "extract" + state.lastToolPrune = + (part.tool === "discard" || part.tool === "extract") && + part.state.status === "completed" const allProtectedTools = config.tools.settings.protectedTools diff --git a/lib/strategies/tools.ts b/lib/strategies/tools.ts index e3d8e033..44f6742f 100644 --- a/lib/strategies/tools.ts +++ b/lib/strategies/tools.ts @@ -39,7 +39,9 @@ async function executePruneOperation( if (!ids || ids.length === 0) { logger.debug(`${toolName} tool called but ids is empty or undefined`) - return `No IDs provided. Check the list for available IDs to ${toolName.toLowerCase()}.` + throw new Error( + `No IDs provided. Check the list for available IDs to ${toolName.toLowerCase()}.`, + ) } const numericToolIds: number[] = ids @@ -48,7 +50,7 @@ async function executePruneOperation( if (numericToolIds.length === 0) { logger.debug(`No numeric tool IDs provided for ${toolName}: ` + JSON.stringify(ids)) - return "No numeric IDs provided. Format: ids: [id1, id2, ...]" + throw new Error("No numeric IDs provided. Format: ids: [id1, id2, ...]") } // Fetch messages to calculate tokens and find current agent @@ -65,7 +67,9 @@ async function executePruneOperation( // Validate that all numeric IDs are within bounds if (numericToolIds.some((id) => id < 0 || id >= toolIdList.length)) { logger.debug("Invalid tool IDs provided: " + numericToolIds.join(", ")) - return "Invalid IDs provided. Only use numeric IDs from the list." + throw new Error( + "Invalid IDs provided. Only use numeric IDs from the list.", + ) } // Validate that all IDs exist in cache and aren't protected @@ -78,7 +82,9 @@ async function executePruneOperation( "Rejecting prune request - ID not in cache (turn-protected or hallucinated)", { index, id }, ) - return "Invalid IDs provided. Only use numeric IDs from the list." + throw new Error( + "Invalid IDs provided. Only use numeric IDs from the list.", + ) } const allProtectedTools = config.tools.settings.protectedTools if (allProtectedTools.includes(metadata.tool)) { @@ -87,7 +93,9 @@ async function executePruneOperation( id, tool: metadata.tool, }) - return "Invalid IDs provided. Only use numeric IDs from the list." + throw new Error( + "Invalid IDs provided. Only use numeric IDs from the list.", + ) } const filePath = getFilePathFromParameters(metadata.parameters) @@ -98,7 +106,9 @@ async function executePruneOperation( tool: metadata.tool, filePath, }) - return "Invalid IDs provided. Only use numeric IDs from the list." + throw new Error( + "Invalid IDs provided. Only use numeric IDs from the list.", + ) } } @@ -158,7 +168,9 @@ export function createDiscardTool(ctx: PruneToolContext): ReturnType Date: Sun, 18 Jan 2026 17:17:19 -0500 Subject: [PATCH 02/10] docs: add cache hit rate statistics to README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cb46a24f..79c14b66 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,6 @@ Add to your OpenCode config: Using `@latest` ensures you always get the newest version automatically when OpenCode starts. -> **Note:** If you use OAuth plugins (e.g., for Google or other services), place this plugin last in your `plugin` array to avoid interfering with their authentication flows. - Restart OpenCode. The plugin will automatically start optimizing your sessions. ## How Pruning Works @@ -49,6 +47,8 @@ LLM providers like Anthropic and OpenAI cache prompts based on exact prefix matc **Trade-off:** You lose some cache read benefits but gain larger token savings from reduced context size and performance improvements through reduced context poisoning. In most cases, the token savings outweigh the cache miss cost—especially in long sessions where context bloat becomes significant. +> **Note:** In testing, cache hit rates were approximately 65% with DCP enabled vs 85% without. + **Best use case:** Providers that count usage in requests, such as Github Copilot and Google Antigravity have no negative price impact. ## Configuration From 981071189f8ee7be572a8919d34609e77b82900e Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Mon, 19 Jan 2026 02:56:41 -0500 Subject: [PATCH 03/10] feat: add /dcp-stats and /dcp-context commands - Add /dcp-stats command showing session and all-time pruning statistics - Add /dcp-context command with visual token breakdown by category - Extract command handler to createCommandExecuteHandler in hooks.ts - Consolidate countTokens wrapper in strategies/utils.ts - Switch tokenizer from gpt-tokenizer to @anthropic-ai/tokenizer - Add loadAllSessionStats for aggregating stats across sessions --- index.ts | 20 +++- lib/commands/context.ts | 246 +++++++++++++++++++++++++++++++++++++++ lib/commands/stats.ts | 67 +++++++++++ lib/hooks.ts | 38 ++++++ lib/state/persistence.ts | 45 +++++++ lib/strategies/utils.ts | 19 ++- package-lock.json | 39 +++++-- package.json | 2 +- 8 files changed, 455 insertions(+), 21 deletions(-) create mode 100644 lib/commands/context.ts create mode 100644 lib/commands/stats.ts diff --git a/index.ts b/index.ts index 0802afb6..b0478505 100644 --- a/index.ts +++ b/index.ts @@ -3,7 +3,11 @@ import { getConfig } from "./lib/config" import { Logger } from "./lib/logger" import { createSessionState } from "./lib/state" import { createDiscardTool, createExtractTool } from "./lib/strategies" -import { createChatMessageTransformHandler, createSystemPromptHandler } from "./lib/hooks" +import { + createChatMessageTransformHandler, + createCommandExecuteHandler, + createSystemPromptHandler, +} from "./lib/hooks" const plugin: Plugin = (async (ctx) => { const config = getConfig(ctx) @@ -64,8 +68,17 @@ const plugin: Plugin = (async (ctx) => { }), }, config: async (opencodeConfig) => { - // Add enabled tools to primary_tools by mutating the opencode config - // This works because config is cached and passed by reference + opencodeConfig.command ??= {} + opencodeConfig.command["dcp-stats"] = { + template: "", + description: "Show DCP pruning statistics", + } + opencodeConfig.command["dcp-context"] = { + template: "", + description: "Show token usage breakdown for current session", + } + logger.info("Registered /dcp-stats and /dcp-context commands") + const toolsToAdd: string[] = [] if (config.tools.discard.enabled) toolsToAdd.push("discard") if (config.tools.extract.enabled) toolsToAdd.push("extract") @@ -81,6 +94,7 @@ const plugin: Plugin = (async (ctx) => { ) } }, + "command.execute.before": createCommandExecuteHandler(ctx.client, state, logger), } }) satisfies Plugin diff --git a/lib/commands/context.ts b/lib/commands/context.ts new file mode 100644 index 00000000..fe40213a --- /dev/null +++ b/lib/commands/context.ts @@ -0,0 +1,246 @@ +/** + * DCP Context command handler. + * Shows a visual breakdown of token usage in the current session. + */ + +import type { Logger } from "../logger" +import type { SessionState, WithParts } from "../state" +import { sendIgnoredMessage } from "../ui/notification" +import { formatTokenCount } from "../ui/utils" +import { isMessageCompacted } from "../shared-utils" +import { isIgnoredUserMessage } from "../messages/utils" +import { countTokens, getCurrentParams } from "../strategies/utils" +import type { AssistantMessage, TextPart, ToolPart } from "@opencode-ai/sdk/v2" + +export interface ContextCommandContext { + client: any + state: SessionState + logger: Logger + sessionId: string + messages: WithParts[] +} + +interface TokenBreakdown { + system: number + user: number + assistant: number + reasoning: number + tools: number + pruned: number + total: number +} + +function analyzeTokens(state: SessionState, messages: WithParts[]): TokenBreakdown { + const breakdown: TokenBreakdown = { + system: 0, + user: 0, + assistant: 0, + reasoning: 0, + tools: 0, + pruned: state.stats.totalPruneTokens, + total: 0, + } + + let firstAssistant: AssistantMessage | undefined + for (const msg of messages) { + if (msg.info.role === "assistant") { + const assistantInfo = msg.info as AssistantMessage + if (assistantInfo.tokens?.input > 0 || assistantInfo.tokens?.cache?.read > 0) { + firstAssistant = assistantInfo + break + } + } + } + + let firstUserTokens = 0 + for (const msg of messages) { + if (msg.info.role === "user" && !isIgnoredUserMessage(msg)) { + for (const part of msg.parts) { + if (part.type === "text") { + const textPart = part as TextPart + firstUserTokens += countTokens(textPart.text || "") + } + } + break + } + } + + // Calculate system tokens: first response's total input minus first user message + if (firstAssistant) { + const firstInput = + (firstAssistant.tokens?.input || 0) + (firstAssistant.tokens?.cache?.read || 0) + breakdown.system = Math.max(0, firstInput - firstUserTokens) + } + + let lastAssistant: AssistantMessage | undefined + for (let i = messages.length - 1; i >= 0; i--) { + const msg = messages[i] + if (msg.info.role === "assistant") { + const assistantInfo = msg.info as AssistantMessage + if (assistantInfo.tokens?.output > 0) { + lastAssistant = assistantInfo + break + } + } + } + + // Get total from API + // Total = input + output + reasoning + cache.read + cache.write + const apiInput = lastAssistant?.tokens?.input || 0 + const apiOutput = lastAssistant?.tokens?.output || 0 + const apiReasoning = lastAssistant?.tokens?.reasoning || 0 + const apiCacheRead = lastAssistant?.tokens?.cache?.read || 0 + const apiCacheWrite = lastAssistant?.tokens?.cache?.write || 0 + const apiTotal = apiInput + apiOutput + apiReasoning + apiCacheRead + apiCacheWrite + + for (const msg of messages) { + if (isMessageCompacted(state, msg)) { + continue + } + + if (msg.info.role === "user" && isIgnoredUserMessage(msg)) { + continue + } + + const info = msg.info + const role = info.role + + for (const part of msg.parts) { + switch (part.type) { + case "text": { + const textPart = part as TextPart + const tokens = countTokens(textPart.text || "") + if (role === "user") { + breakdown.user += tokens + } else { + breakdown.assistant += tokens + } + break + } + case "tool": { + const toolPart = part as ToolPart + + if (toolPart.state?.input) { + const inputStr = + typeof toolPart.state.input === "string" + ? toolPart.state.input + : JSON.stringify(toolPart.state.input) + breakdown.tools += countTokens(inputStr) + } + + if (toolPart.state?.status === "completed" && toolPart.state?.output) { + const outputStr = + typeof toolPart.state.output === "string" + ? toolPart.state.output + : JSON.stringify(toolPart.state.output) + breakdown.tools += countTokens(outputStr) + } + break + } + } + } + } + + breakdown.tools = Math.max(0, breakdown.tools - breakdown.pruned) + + // Calculate reasoning as the difference between API total and our counted parts + // This handles both interleaved thinking and non-interleaved models correctly + const countedParts = breakdown.system + breakdown.user + breakdown.assistant + breakdown.tools + breakdown.reasoning = Math.max(0, apiTotal - countedParts) + + breakdown.total = apiTotal + + return breakdown +} + +function createBar(value: number, maxValue: number, width: number, char: string = "█"): string { + if (maxValue === 0) return "" + const filled = Math.round((value / maxValue) * width) + const bar = char.repeat(Math.max(0, filled)) + return bar +} + +function formatContextMessage(breakdown: TokenBreakdown): string { + const lines: string[] = [] + const barWidth = 30 + + // Find max for scaling (include pruned for bar scaling) + const values = [ + breakdown.system, + breakdown.user, + breakdown.assistant, + breakdown.reasoning, + breakdown.tools, + breakdown.pruned, + ] + const maxValue = Math.max(...values) + + // Category definitions - shading decreases top to bottom + const categories = [ + { label: "System", value: breakdown.system, char: "█" }, + { label: "User", value: breakdown.user, char: "▓" }, + { label: "Assistant", value: breakdown.assistant, char: "▒" }, + { label: "Reasoning", value: breakdown.reasoning, char: "░" }, + { label: "Tools", value: breakdown.tools, char: "▓" }, + { label: "Pruned", value: breakdown.pruned, char: "⣿", isSaved: true }, + ] as const + + lines.push("╭───────────────────────────────────────────────────────────╮") + lines.push("│ DCP Context Analysis │") + lines.push("╰───────────────────────────────────────────────────────────╯") + lines.push("") + lines.push("Session Context Breakdown:") + lines.push("─".repeat(60)) + lines.push("") + + // Create bars with aligned labels and values + for (const cat of categories) { + const bar = createBar(cat.value, maxValue, barWidth, cat.char) + + let labelWithPct: string + let valueStr: string + if ("isSaved" in cat && cat.isSaved) { + labelWithPct = cat.label.padEnd(16) + valueStr = `${formatTokenCount(cat.value).replace(" tokens", "").padStart(6)} saved` + } else { + const percentage = + breakdown.total > 0 ? ((cat.value / breakdown.total) * 100).toFixed(1) : "0.0" + labelWithPct = `${cat.label.padEnd(9)} ${percentage.padStart(5)}%` + valueStr = formatTokenCount(cat.value).padStart(13) + } + + lines.push(`${labelWithPct}│${bar.padEnd(barWidth)}│${valueStr}`) + } + + lines.push("") + lines.push("─".repeat(60)) + lines.push("") + + lines.push("Summary:") + + if (breakdown.pruned > 0) { + const withoutPruning = breakdown.total + breakdown.pruned + const savingsPercent = ((breakdown.pruned / withoutPruning) * 100).toFixed(1) + lines.push( + ` Current context: ~${formatTokenCount(breakdown.total)} (${savingsPercent}% saved)`, + ) + lines.push(` Without DCP: ~${formatTokenCount(withoutPruning)}`) + } else { + lines.push(` Current context: ~${formatTokenCount(breakdown.total)}`) + } + + lines.push("") + + return lines.join("\n") +} + +export async function handleContextCommand(ctx: ContextCommandContext): Promise { + const { client, state, logger, sessionId, messages } = ctx + + const breakdown = analyzeTokens(state, messages) + + const message = formatContextMessage(breakdown) + + const params = getCurrentParams(state, messages, logger) + await sendIgnoredMessage(client, sessionId, message, params, logger) +} diff --git a/lib/commands/stats.ts b/lib/commands/stats.ts new file mode 100644 index 00000000..24635947 --- /dev/null +++ b/lib/commands/stats.ts @@ -0,0 +1,67 @@ +/** + * DCP Stats command handler. + * Shows pruning statistics for the current session and all-time totals. + */ + +import type { Logger } from "../logger" +import type { SessionState, WithParts } from "../state" +import { sendIgnoredMessage } from "../ui/notification" +import { formatTokenCount } from "../ui/utils" +import { loadAllSessionStats, type AggregatedStats } from "../state/persistence" +import { getCurrentParams } from "../strategies/utils" + +export interface StatsCommandContext { + client: any + state: SessionState + logger: Logger + sessionId: string + messages: WithParts[] +} + +function formatStatsMessage( + sessionTokens: number, + sessionTools: number, + allTime: AggregatedStats, +): string { + const lines: string[] = [] + + lines.push("╭───────────────────────────────────────────────────────────╮") + lines.push("│ DCP Statistics │") + lines.push("╰───────────────────────────────────────────────────────────╯") + lines.push("") + lines.push("Session:") + lines.push("─".repeat(60)) + lines.push(` Tokens pruned: ~${formatTokenCount(sessionTokens)}`) + lines.push(` Tools pruned: ${sessionTools}`) + lines.push("") + lines.push("All-time:") + lines.push("─".repeat(60)) + lines.push(` Tokens saved: ~${formatTokenCount(allTime.totalTokens)}`) + lines.push(` Tools pruned: ${allTime.totalTools}`) + lines.push(` Sessions: ${allTime.sessionCount}`) + + return lines.join("\n") +} + +export async function handleStatsCommand(ctx: StatsCommandContext): Promise { + const { client, state, logger, sessionId, messages } = ctx + + // Session stats from in-memory state + const sessionTokens = state.stats.totalPruneTokens + const sessionTools = state.prune.toolIds.length + + // All-time stats from storage files + const allTime = await loadAllSessionStats(logger) + + const message = formatStatsMessage(sessionTokens, sessionTools, allTime) + + const params = getCurrentParams(state, messages, logger) + await sendIgnoredMessage(client, sessionId, message, params, logger) + + logger.info("Stats command executed", { + sessionTokens, + sessionTools, + allTimeTokens: allTime.totalTokens, + allTimeTools: allTime.totalTools, + }) +} diff --git a/lib/hooks.ts b/lib/hooks.ts index fc5e479e..ba029bf1 100644 --- a/lib/hooks.ts +++ b/lib/hooks.ts @@ -6,6 +6,8 @@ import { deduplicate, supersedeWrites, purgeErrors } from "./strategies" import { prune, insertPruneToolContext } from "./messages" import { checkSession } from "./state" import { loadPrompt } from "./prompts" +import { handleStatsCommand } from "./commands/stats" +import { handleContextCommand } from "./commands/context" const INTERNAL_AGENT_SIGNATURES = [ "You are a title generator", @@ -76,3 +78,39 @@ export function createChatMessageTransformHandler( } } } + +export function createCommandExecuteHandler(client: any, state: SessionState, logger: Logger) { + return async ( + input: { command: string; sessionID: string; arguments: string }, + _output: { parts: any[] }, + ) => { + if (input.command === "dcp-stats") { + const messagesResponse = await client.session.messages({ + path: { id: input.sessionID }, + }) + const messages = (messagesResponse.data || messagesResponse) as WithParts[] + await handleStatsCommand({ + client, + state, + logger, + sessionId: input.sessionID, + messages, + }) + throw new Error("__DCP_STATS_HANDLED__") + } + if (input.command === "dcp-context") { + const messagesResponse = await client.session.messages({ + path: { id: input.sessionID }, + }) + const messages = (messagesResponse.data || messagesResponse) as WithParts[] + await handleContextCommand({ + client, + state, + logger, + sessionId: input.sessionID, + messages, + }) + throw new Error("__DCP_CONTEXT_HANDLED__") + } + } +} diff --git a/lib/state/persistence.ts b/lib/state/persistence.ts index ccd48594..172ff75f 100644 --- a/lib/state/persistence.ts +++ b/lib/state/persistence.ts @@ -99,3 +99,48 @@ export async function loadSessionState( return null } } + +export interface AggregatedStats { + totalTokens: number + totalTools: number + sessionCount: number +} + +export async function loadAllSessionStats(logger: Logger): Promise { + const result: AggregatedStats = { + totalTokens: 0, + totalTools: 0, + sessionCount: 0, + } + + try { + if (!existsSync(STORAGE_DIR)) { + return result + } + + const files = await fs.readdir(STORAGE_DIR) + const jsonFiles = files.filter((f) => f.endsWith(".json")) + + for (const file of jsonFiles) { + try { + const filePath = join(STORAGE_DIR, file) + const content = await fs.readFile(filePath, "utf-8") + const state = JSON.parse(content) as PersistedSessionState + + if (state?.stats?.totalPruneTokens && state?.prune?.toolIds) { + result.totalTokens += state.stats.totalPruneTokens + result.totalTools += state.prune.toolIds.length + result.sessionCount++ + } + } catch { + // Skip invalid files + } + } + + logger.debug("Loaded all-time stats", result) + } catch (error: any) { + logger.warn("Failed to load all-time stats", { error: error?.message }) + } + + return result +} diff --git a/lib/strategies/utils.ts b/lib/strategies/utils.ts index fa7d5fe9..43bfdf7a 100644 --- a/lib/strategies/utils.ts +++ b/lib/strategies/utils.ts @@ -1,7 +1,7 @@ import { SessionState, WithParts } from "../state" import { UserMessage } from "@opencode-ai/sdk/v2" import { Logger } from "../logger" -import { encode } from "gpt-tokenizer" +import { countTokens as anthropicCountTokens } from "@anthropic-ai/tokenizer" import { getLastUserMessage, isMessageCompacted } from "../shared-utils" export function getCurrentParams( @@ -33,20 +33,19 @@ export function getCurrentParams( return { providerId, modelId, agent, variant } } -/** - * Estimates token counts for a batch of texts using gpt-tokenizer. - */ -function estimateTokensBatch(texts: string[]): number[] { +export function countTokens(text: string): number { + if (!text) return 0 try { - return texts.map((text) => encode(text).length) + return anthropicCountTokens(text) } catch { - return texts.map((text) => Math.round(text.length / 4)) + return Math.round(text.length / 4) } } -/** - * Calculates approximate tokens saved by pruning the given tool call IDs. - */ +function estimateTokensBatch(texts: string[]): number[] { + return texts.map(countTokens) +} + export const calculateTokensSaved = ( state: SessionState, messages: WithParts[], diff --git a/package-lock.json b/package-lock.json index 0b7035a2..77d47059 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "1.2.3", "license": "MIT", "dependencies": { + "@anthropic-ai/tokenizer": "^0.0.4", "@opencode-ai/sdk": "^1.1.3", - "gpt-tokenizer": "^3.4.0", "jsonc-parser": "^3.3.1", "zod": "^4.1.13" }, @@ -25,6 +25,31 @@ "@opencode-ai/plugin": ">=0.13.7" } }, + "node_modules/@anthropic-ai/tokenizer": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@anthropic-ai/tokenizer/-/tokenizer-0.0.4.tgz", + "integrity": "sha512-EHRKbxlxlc8W4KCBEseByJ7YwyYCmgu9OyN59H9+IYIGPoKv8tXyQXinkeGDI+cI8Tiuz9wk2jZb/kK7AyvL7g==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "tiktoken": "^1.0.10" + } + }, + "node_modules/@anthropic-ai/tokenizer/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@anthropic-ai/tokenizer/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", @@ -579,12 +604,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/gpt-tokenizer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/gpt-tokenizer/-/gpt-tokenizer-3.4.0.tgz", - "integrity": "sha512-wxFLnhIXTDjYebd9A9pGl3e31ZpSypbpIJSOswbgop5jLte/AsZVDvjlbEuVFlsqZixVKqbcoNmRlFDf6pz/UQ==", - "license": "MIT" - }, "node_modules/jsonc-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", @@ -617,6 +636,12 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/tiktoken": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/tiktoken/-/tiktoken-1.0.22.tgz", + "integrity": "sha512-PKvy1rVF1RibfF3JlXBSP0Jrcw2uq3yXdgcEXtKTYn3QJ/cBRBHDnrJ5jHky+MENZ6DIPwNUGWpkVx+7joCpNA==", + "license": "MIT" + }, "node_modules/tsx": { "version": "4.21.0", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", diff --git a/package.json b/package.json index 13c9c724..052f0db7 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,8 @@ "@opencode-ai/plugin": ">=0.13.7" }, "dependencies": { + "@anthropic-ai/tokenizer": "^0.0.4", "@opencode-ai/sdk": "^1.1.3", - "gpt-tokenizer": "^3.4.0", "jsonc-parser": "^3.3.1", "zod": "^4.1.13" }, From aa10b8ed0ed971dbcb972618d306fb26aace98ac Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Mon, 19 Jan 2026 03:20:02 -0500 Subject: [PATCH 04/10] cleanup --- README.md | 2 +- dcp-demo4.png | Bin 0 -> 98322 bytes dcp-demo5.png | Bin 0 -> 97200 bytes lib/commands/context.ts | 3 --- 4 files changed, 1 insertion(+), 4 deletions(-) create mode 100644 dcp-demo4.png create mode 100644 dcp-demo5.png diff --git a/README.md b/README.md index 79c14b66..4261867e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Automatically reduces token usage in OpenCode by removing obsolete tool outputs from conversation history. -![DCP in action](dcp-demo3.png) +![DCP in action](dcp-demo5.png) ## Installation diff --git a/dcp-demo4.png b/dcp-demo4.png new file mode 100644 index 0000000000000000000000000000000000000000..c2baf5f697c1702139e2fa2079b99b3e9fb0f926 GIT binary patch literal 98322 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%0DjZw%bYd#*tz%c7@8pMwH|5)){fJuaS4 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%0AOj$YA?>1xcU?kk|~OZ?T< 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 literal 0 HcmV?d00001 diff --git a/dcp-demo5.png b/dcp-demo5.png new file mode 100644 index 0000000000000000000000000000000000000000..a86e035348d34ff2265ed6050e57d93f1cb4d84e GIT binary patch literal 97200 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 F{0G`s{xkpp literal 0 HcmV?d00001 diff --git a/lib/commands/context.ts b/lib/commands/context.ts index fe40213a..a7fba872 100644 --- a/lib/commands/context.ts +++ b/lib/commands/context.ts @@ -164,7 +164,6 @@ function formatContextMessage(breakdown: TokenBreakdown): string { const lines: string[] = [] const barWidth = 30 - // Find max for scaling (include pruned for bar scaling) const values = [ breakdown.system, breakdown.user, @@ -175,7 +174,6 @@ function formatContextMessage(breakdown: TokenBreakdown): string { ] const maxValue = Math.max(...values) - // Category definitions - shading decreases top to bottom const categories = [ { label: "System", value: breakdown.system, char: "█" }, { label: "User", value: breakdown.user, char: "▓" }, @@ -193,7 +191,6 @@ function formatContextMessage(breakdown: TokenBreakdown): string { lines.push("─".repeat(60)) lines.push("") - // Create bars with aligned labels and values for (const cat of categories) { const bar = createBar(cat.value, maxValue, barWidth, cat.char) From 7ebe524659e62f62aa58a79fc22974ca24f5e856 Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Mon, 19 Jan 2026 12:15:49 -0500 Subject: [PATCH 05/10] docs: clarify context_info tool injection mechanism - Explain that context_info is an environment-only tool - Add explicit instruction that model must not call it - Correct message role from user to assistant --- lib/prompts/system/both.ts | 6 ++++-- lib/prompts/system/discard.ts | 6 ++++-- lib/prompts/system/extract.ts | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/prompts/system/both.ts b/lib/prompts/system/both.ts index e101e383..2ab48ad1 100644 --- a/lib/prompts/system/both.ts +++ b/lib/prompts/system/both.ts @@ -2,7 +2,9 @@ export const SYSTEM_PROMPT_BOTH = ` ENVIRONMENT -You are operating in a context-constrained environment and thus must proactively manage your context window using the \`discard\` and \`extract\` tools. A list is injected by the environment as a user message, and always contains up to date information. Use this information when deciding what to prune. +You are operating in a context-constrained environment and thus must proactively manage your context window using the \`discard\` and \`extract\` tools. The environment calls the \`context_info\` tool to provide an up-to-date list after each assistant turn. Use this information when deciding what to prune. + +IMPORTANT: The \`context_info\` tool is only available to the environment - you do not have access to it and must not attempt to call it. TWO TOOLS FOR CONTEXT MANAGEMENT - \`discard\`: Remove tool outputs that are no longer needed (completed tasks, noise, outdated info). No preservation of content. @@ -42,7 +44,7 @@ There may be tools in session context that do not appear in the -After each assistant turn, the environment may inject a user message containing a list and optional nudge instruction. This injected message is NOT from the user and is invisible to them. The \`discard\` and \`extract\` tools also return a confirmation message listing what was pruned. +After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. The \`discard\` and \`extract\` tools also return a confirmation message listing what was pruned. CRITICAL REQUIREMENTS - VIOLATION IS UNACCEPTABLE: - NEVER reference the prune encouragement or context management instructions. Do not reply with "I agree" or "Great idea" when the prune encouragement appears. diff --git a/lib/prompts/system/discard.ts b/lib/prompts/system/discard.ts index b164114c..6822513a 100644 --- a/lib/prompts/system/discard.ts +++ b/lib/prompts/system/discard.ts @@ -2,7 +2,9 @@ export const SYSTEM_PROMPT_DISCARD = ` ENVIRONMENT -You are operating in a context-constrained environment and thus must proactively manage your context window using the \`discard\` tool. A list is injected by the environment as a user message, and always contains up to date information. Use this information when deciding what to discard. +You are operating in a context-constrained environment and thus must proactively manage your context window using the \`discard\` tool. The environment calls the \`context_info\` tool to provide an up-to-date list after each assistant turn. Use this information when deciding what to discard. + +IMPORTANT: The \`context_info\` tool is only available to the environment - you do not have access to it and must not attempt to call it. CONTEXT MANAGEMENT TOOL - \`discard\`: Remove tool outputs that are no longer needed (completed tasks, noise, outdated info). No preservation of content. @@ -33,7 +35,7 @@ There may be tools in session context that do not appear in the -After each assistant turn, the environment may inject a user message containing a list and optional nudge instruction. This injected message is NOT from the user and is invisible to them. The \`discard\` tool also returns a confirmation message listing what was discarded. +After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. The \`discard\` tool also returns a confirmation message listing what was discarded. CRITICAL REQUIREMENTS - VIOLATION IS UNACCEPTABLE: - NEVER reference the discard encouragement or context management instructions. Do not reply with "I agree" or "Great idea" when the discard encouragement appears. diff --git a/lib/prompts/system/extract.ts b/lib/prompts/system/extract.ts index c73960eb..20bb7ffe 100644 --- a/lib/prompts/system/extract.ts +++ b/lib/prompts/system/extract.ts @@ -2,7 +2,9 @@ export const SYSTEM_PROMPT_EXTRACT = ` ENVIRONMENT -You are operating in a context-constrained environment and thus must proactively manage your context window using the \`extract\` tool. A list is injected by the environment as a user message, and always contains up to date information. Use this information when deciding what to extract. +You are operating in a context-constrained environment and thus must proactively manage your context window using the \`extract\` tool. The environment calls the \`context_info\` tool to provide an up-to-date list after each assistant turn. Use this information when deciding what to extract. + +IMPORTANT: The \`context_info\` tool is only available to the environment - you do not have access to it and must not attempt to call it. CONTEXT MANAGEMENT TOOL - \`extract\`: Extract key findings from tools into distilled knowledge before removing the raw content from context. Use this to preserve important information while reducing context size. @@ -33,7 +35,7 @@ There may be tools in session context that do not appear in the -After each assistant turn, the environment may inject a user message containing a list and optional nudge instruction. This injected message is NOT from the user and is invisible to them. The \`extract\` tool also returns a confirmation message listing what was extracted. +After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. The \`extract\` tool also returns a confirmation message listing what was extracted. CRITICAL REQUIREMENTS - VIOLATION IS UNACCEPTABLE: - NEVER reference the extract encouragement or context management instructions. Do not reply with "I agree" or "Great idea" when the extract encouragement appears. From 11b6843943bde16164420915710947fd6f0b89b4 Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Mon, 19 Jan 2026 12:57:49 -0500 Subject: [PATCH 06/10] fix: remove redundant sentence about tool confirmation messages The bullet point 'NEVER acknowledge discard/extract tool output' already covers this behavior, making the sentence redundant and awkwardly placed. --- lib/prompts/system/both.ts | 2 +- lib/prompts/system/discard.ts | 2 +- lib/prompts/system/extract.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/prompts/system/both.ts b/lib/prompts/system/both.ts index 2ab48ad1..f5551aaa 100644 --- a/lib/prompts/system/both.ts +++ b/lib/prompts/system/both.ts @@ -44,7 +44,7 @@ There may be tools in session context that do not appear in the -After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. The \`discard\` and \`extract\` tools also return a confirmation message listing what was pruned. +After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. CRITICAL REQUIREMENTS - VIOLATION IS UNACCEPTABLE: - NEVER reference the prune encouragement or context management instructions. Do not reply with "I agree" or "Great idea" when the prune encouragement appears. diff --git a/lib/prompts/system/discard.ts b/lib/prompts/system/discard.ts index 6822513a..1bf661fc 100644 --- a/lib/prompts/system/discard.ts +++ b/lib/prompts/system/discard.ts @@ -35,7 +35,7 @@ There may be tools in session context that do not appear in the -After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. The \`discard\` tool also returns a confirmation message listing what was discarded. +After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. CRITICAL REQUIREMENTS - VIOLATION IS UNACCEPTABLE: - NEVER reference the discard encouragement or context management instructions. Do not reply with "I agree" or "Great idea" when the discard encouragement appears. diff --git a/lib/prompts/system/extract.ts b/lib/prompts/system/extract.ts index 20bb7ffe..859f36dd 100644 --- a/lib/prompts/system/extract.ts +++ b/lib/prompts/system/extract.ts @@ -35,7 +35,7 @@ There may be tools in session context that do not appear in the -After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. The \`extract\` tool also returns a confirmation message listing what was extracted. +After each assistant turn, the environment calls the \`context_info\` tool to inject an assistant message containing a list and optional nudge instruction. This tool is only available to the environment - you do not have access to it. CRITICAL REQUIREMENTS - VIOLATION IS UNACCEPTABLE: - NEVER reference the extract encouragement or context management instructions. Do not reply with "I agree" or "Great idea" when the extract encouragement appears. From 095b74853490b27540d636abcff54913ce55fe85 Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Mon, 19 Jan 2026 15:49:20 -0500 Subject: [PATCH 07/10] feat: add commands config for enabling/disabling slash commands - Add commands section to config with context and stats sub-configs - Each command has an enabled boolean (default: true) - Commands check config before executing and log when disabled - Update README with commands documentation - Fix spacing in dcp-context UI output --- README.md | 16 +++++++++ index.ts | 2 +- lib/commands/context.ts | 4 +-- lib/config.ts | 77 +++++++++++++++++++++++++++++++++++++++++ lib/hooks.ts | 13 ++++++- 5 files changed, 108 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4261867e..36ba46d0 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,15 @@ DCP uses its own config file: "debug": false, // Notification display: "off", "minimal", or "detailed" "pruneNotification": "detailed", + // Enable or disable slash commands + "commands": { + "context": { + "enabled": true, + }, + "stats": { + "enabled": true, + }, + }, // Protect from pruning for message turns "turnProtection": { "enabled": false, @@ -126,6 +135,13 @@ DCP uses its own config file: +### Commands + +DCP provides two slash commands for visibility into context usage: + +- `/dcp-context` — Shows a breakdown of your current session's token usage by category (system, user, assistant, tools, etc.) and how much has been saved through pruning. +- `/dcp-stats` — Shows cumulative pruning statistics across all sessions. + ### Turn Protection When enabled, turn protection prevents tool outputs from being pruned for a configurable number of message turns. This gives the AI time to reference recent tool outputs before they become prunable. Applies to both `discard` and `extract` tools, as well as automatic strategies. diff --git a/index.ts b/index.ts index b0478505..46ec69b9 100644 --- a/index.ts +++ b/index.ts @@ -94,7 +94,7 @@ const plugin: Plugin = (async (ctx) => { ) } }, - "command.execute.before": createCommandExecuteHandler(ctx.client, state, logger), + "command.execute.before": createCommandExecuteHandler(ctx.client, state, logger, config), } }) satisfies Plugin diff --git a/lib/commands/context.ts b/lib/commands/context.ts index a7fba872..a61be14e 100644 --- a/lib/commands/context.ts +++ b/lib/commands/context.ts @@ -197,12 +197,12 @@ function formatContextMessage(breakdown: TokenBreakdown): string { let labelWithPct: string let valueStr: string if ("isSaved" in cat && cat.isSaved) { - labelWithPct = cat.label.padEnd(16) + labelWithPct = cat.label.padEnd(17) valueStr = `${formatTokenCount(cat.value).replace(" tokens", "").padStart(6)} saved` } else { const percentage = breakdown.total > 0 ? ((cat.value / breakdown.total) * 100).toFixed(1) : "0.0" - labelWithPct = `${cat.label.padEnd(9)} ${percentage.padStart(5)}%` + labelWithPct = `${cat.label.padEnd(9)} ${percentage.padStart(5)}% ` valueStr = formatTokenCount(cat.value).padStart(13) } diff --git a/lib/config.ts b/lib/config.ts index d1bbba50..f96710ab 100644 --- a/lib/config.ts +++ b/lib/config.ts @@ -45,10 +45,20 @@ export interface TurnProtection { turns: number } +export interface CommandConfig { + enabled: boolean +} + +export interface Commands { + context: CommandConfig + stats: CommandConfig +} + export interface PluginConfig { enabled: boolean debug: boolean pruneNotification: "off" | "minimal" | "detailed" + commands: Commands turnProtection: TurnProtection protectedFilePatterns: string[] tools: Tools @@ -84,6 +94,11 @@ export const VALID_CONFIG_KEYS = new Set([ "turnProtection.enabled", "turnProtection.turns", "protectedFilePatterns", + "commands", + "commands.context", + "commands.context.enabled", + "commands.stats", + "commands.stats.enabled", "tools", "tools.settings", "tools.settings.nudgeEnabled", @@ -196,6 +211,28 @@ function validateConfigTypes(config: Record): ValidationError[] { } } + // Commands validators + const commands = config.commands + if (commands) { + if ( + commands.context?.enabled !== undefined && + typeof commands.context.enabled !== "boolean" + ) { + errors.push({ + key: "commands.context.enabled", + expected: "boolean", + actual: typeof commands.context.enabled, + }) + } + if (commands.stats?.enabled !== undefined && typeof commands.stats.enabled !== "boolean") { + errors.push({ + key: "commands.stats.enabled", + expected: "boolean", + actual: typeof commands.stats.enabled, + }) + } + } + // Tools validators const tools = config.tools if (tools) { @@ -388,6 +425,14 @@ const defaultConfig: PluginConfig = { enabled: true, debug: false, pruneNotification: "detailed", + commands: { + context: { + enabled: true, + }, + stats: { + enabled: true, + }, + }, turnProtection: { enabled: false, turns: 4, @@ -498,6 +543,15 @@ function createDefaultConfig(): void { "debug": false, // Notification display: "off", "minimal", or "detailed" "pruneNotification": "detailed", + // Enable or disable slash commands + "commands": { + "context": { + "enabled": true + }, + "stats": { + "enabled": true + } + }, // Protect from pruning for message turns "turnProtection": { "enabled": false, @@ -637,9 +691,29 @@ function mergeTools( } } +function mergeCommands( + base: PluginConfig["commands"], + override?: Partial, +): PluginConfig["commands"] { + if (!override) return base + + return { + context: { + enabled: override.context?.enabled ?? base.context.enabled, + }, + stats: { + enabled: override.stats?.enabled ?? base.stats.enabled, + }, + } +} + function deepCloneConfig(config: PluginConfig): PluginConfig { return { ...config, + commands: { + context: { ...config.commands.context }, + stats: { ...config.commands.stats }, + }, turnProtection: { ...config.turnProtection }, protectedFilePatterns: [...config.protectedFilePatterns], tools: { @@ -693,6 +767,7 @@ export function getConfig(ctx: PluginInput): PluginConfig { enabled: result.data.enabled ?? config.enabled, debug: result.data.debug ?? config.debug, pruneNotification: result.data.pruneNotification ?? config.pruneNotification, + commands: mergeCommands(config.commands, result.data.commands as any), turnProtection: { enabled: result.data.turnProtection?.enabled ?? config.turnProtection.enabled, turns: result.data.turnProtection?.turns ?? config.turnProtection.turns, @@ -735,6 +810,7 @@ export function getConfig(ctx: PluginInput): PluginConfig { enabled: result.data.enabled ?? config.enabled, debug: result.data.debug ?? config.debug, pruneNotification: result.data.pruneNotification ?? config.pruneNotification, + commands: mergeCommands(config.commands, result.data.commands as any), turnProtection: { enabled: result.data.turnProtection?.enabled ?? config.turnProtection.enabled, turns: result.data.turnProtection?.turns ?? config.turnProtection.turns, @@ -774,6 +850,7 @@ export function getConfig(ctx: PluginInput): PluginConfig { enabled: result.data.enabled ?? config.enabled, debug: result.data.debug ?? config.debug, pruneNotification: result.data.pruneNotification ?? config.pruneNotification, + commands: mergeCommands(config.commands, result.data.commands as any), turnProtection: { enabled: result.data.turnProtection?.enabled ?? config.turnProtection.enabled, turns: result.data.turnProtection?.turns ?? config.turnProtection.turns, diff --git a/lib/hooks.ts b/lib/hooks.ts index ba029bf1..d42a515e 100644 --- a/lib/hooks.ts +++ b/lib/hooks.ts @@ -79,12 +79,20 @@ export function createChatMessageTransformHandler( } } -export function createCommandExecuteHandler(client: any, state: SessionState, logger: Logger) { +export function createCommandExecuteHandler( + client: any, + state: SessionState, + logger: Logger, + config: PluginConfig, +) { return async ( input: { command: string; sessionID: string; arguments: string }, _output: { parts: any[] }, ) => { if (input.command === "dcp-stats") { + if (!config.commands.stats.enabled) { + return + } const messagesResponse = await client.session.messages({ path: { id: input.sessionID }, }) @@ -99,6 +107,9 @@ export function createCommandExecuteHandler(client: any, state: SessionState, lo throw new Error("__DCP_STATS_HANDLED__") } if (input.command === "dcp-context") { + if (!config.commands.context.enabled) { + return + } const messagesResponse = await client.session.messages({ path: { id: input.sessionID }, }) From 9d2309a46036c39502b6b8cc474a2fb0890efc62 Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Mon, 19 Jan 2026 15:51:50 -0500 Subject: [PATCH 08/10] chore: add commands section to JSON schema --- dcp.schema.json | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/dcp.schema.json b/dcp.schema.json index 39823f20..94a98f9a 100644 --- a/dcp.schema.json +++ b/dcp.schema.json @@ -26,6 +26,37 @@ "default": "detailed", "description": "Level of notification shown when pruning occurs" }, + "commands": { + "type": "object", + "description": "Enable or disable slash commands", + "additionalProperties": false, + "properties": { + "context": { + "type": "object", + "description": "Configuration for /dcp-context command", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "description": "Enable the /dcp-context command" + } + } + }, + "stats": { + "type": "object", + "description": "Configuration for /dcp-stats command", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "description": "Enable the /dcp-stats command" + } + } + } + } + }, "turnProtection": { "type": "object", "description": "Protect recent tool outputs from being pruned", From 0fb9680e519c384721992c55fdb950d873fde8ec Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Mon, 19 Jan 2026 19:02:54 -0500 Subject: [PATCH 09/10] refactor: simplify context command UI - Use braille character for Tools row in breakdown chart - Remove complex DCP savings visualization - Keep simple summary with current/without-DCP token counts --- lib/commands/context.ts | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/lib/commands/context.ts b/lib/commands/context.ts index a61be14e..0c3a2fbe 100644 --- a/lib/commands/context.ts +++ b/lib/commands/context.ts @@ -170,7 +170,6 @@ function formatContextMessage(breakdown: TokenBreakdown): string { breakdown.assistant, breakdown.reasoning, breakdown.tools, - breakdown.pruned, ] const maxValue = Math.max(...values) @@ -179,8 +178,7 @@ function formatContextMessage(breakdown: TokenBreakdown): string { { label: "User", value: breakdown.user, char: "▓" }, { label: "Assistant", value: breakdown.assistant, char: "▒" }, { label: "Reasoning", value: breakdown.reasoning, char: "░" }, - { label: "Tools", value: breakdown.tools, char: "▓" }, - { label: "Pruned", value: breakdown.pruned, char: "⣿", isSaved: true }, + { label: "Tools", value: breakdown.tools, char: "⣿" }, ] as const lines.push("╭───────────────────────────────────────────────────────────╮") @@ -193,19 +191,10 @@ function formatContextMessage(breakdown: TokenBreakdown): string { for (const cat of categories) { const bar = createBar(cat.value, maxValue, barWidth, cat.char) - - let labelWithPct: string - let valueStr: string - if ("isSaved" in cat && cat.isSaved) { - labelWithPct = cat.label.padEnd(17) - valueStr = `${formatTokenCount(cat.value).replace(" tokens", "").padStart(6)} saved` - } else { - const percentage = - breakdown.total > 0 ? ((cat.value / breakdown.total) * 100).toFixed(1) : "0.0" - labelWithPct = `${cat.label.padEnd(9)} ${percentage.padStart(5)}% ` - valueStr = formatTokenCount(cat.value).padStart(13) - } - + const percentage = + breakdown.total > 0 ? ((cat.value / breakdown.total) * 100).toFixed(1) : "0.0" + const labelWithPct = `${cat.label.padEnd(9)} ${percentage.padStart(5)}% ` + const valueStr = formatTokenCount(cat.value).padStart(13) lines.push(`${labelWithPct}│${bar.padEnd(barWidth)}│${valueStr}`) } From 8ea93cc13f5c3eb79fde22b75425b17e3331a8e9 Mon Sep 17 00:00:00 2001 From: Daniel Smolsky Date: Tue, 20 Jan 2026 00:14:40 -0500 Subject: [PATCH 10/10] refactor: unify commands into single /dcp with subcommands - Replace /dcp-stats and /dcp-context with /dcp stats and /dcp context - Simplify commands config from { enabled: true } to just boolean - Add help screen shown when /dcp is run without arguments - Make argument parsing future-proof for commands with multiple args --- README.md | 18 ++++------ dcp.schema.json | 32 ++---------------- index.ts | 15 ++++----- lib/commands/help.ts | 47 ++++++++++++++++++++++++++ lib/config.ts | 78 ++++++++------------------------------------ lib/hooks.ts | 56 ++++++++++++++++++------------- 6 files changed, 110 insertions(+), 136 deletions(-) create mode 100644 lib/commands/help.ts diff --git a/README.md b/README.md index 36ba46d0..c4b09bc0 100644 --- a/README.md +++ b/README.md @@ -71,15 +71,8 @@ DCP uses its own config file: "debug": false, // Notification display: "off", "minimal", or "detailed" "pruneNotification": "detailed", - // Enable or disable slash commands - "commands": { - "context": { - "enabled": true, - }, - "stats": { - "enabled": true, - }, - }, + // Enable or disable slash commands (/dcp) + "commands": true, // Protect from pruning for message turns "turnProtection": { "enabled": false, @@ -137,10 +130,11 @@ DCP uses its own config file: ### Commands -DCP provides two slash commands for visibility into context usage: +DCP provides a `/dcp` slash command: -- `/dcp-context` — Shows a breakdown of your current session's token usage by category (system, user, assistant, tools, etc.) and how much has been saved through pruning. -- `/dcp-stats` — Shows cumulative pruning statistics across all sessions. +- `/dcp` — Shows available DCP commands +- `/dcp context` — Shows a breakdown of your current session's token usage by category (system, user, assistant, tools, etc.) and how much has been saved through pruning. +- `/dcp stats` — Shows cumulative pruning statistics across all sessions. ### Turn Protection diff --git a/dcp.schema.json b/dcp.schema.json index 94a98f9a..6e0b01a7 100644 --- a/dcp.schema.json +++ b/dcp.schema.json @@ -27,35 +27,9 @@ "description": "Level of notification shown when pruning occurs" }, "commands": { - "type": "object", - "description": "Enable or disable slash commands", - "additionalProperties": false, - "properties": { - "context": { - "type": "object", - "description": "Configuration for /dcp-context command", - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean", - "default": true, - "description": "Enable the /dcp-context command" - } - } - }, - "stats": { - "type": "object", - "description": "Configuration for /dcp-stats command", - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean", - "default": true, - "description": "Enable the /dcp-stats command" - } - } - } - } + "type": "boolean", + "default": true, + "description": "Enable DCP slash commands (/dcp)" }, "turnProtection": { "type": "object", diff --git a/index.ts b/index.ts index 46ec69b9..6b39ed54 100644 --- a/index.ts +++ b/index.ts @@ -68,16 +68,13 @@ const plugin: Plugin = (async (ctx) => { }), }, config: async (opencodeConfig) => { - opencodeConfig.command ??= {} - opencodeConfig.command["dcp-stats"] = { - template: "", - description: "Show DCP pruning statistics", - } - opencodeConfig.command["dcp-context"] = { - template: "", - description: "Show token usage breakdown for current session", + if (config.commands) { + opencodeConfig.command ??= {} + opencodeConfig.command["dcp"] = { + template: "", + description: "Show available DCP commands", + } } - logger.info("Registered /dcp-stats and /dcp-context commands") const toolsToAdd: string[] = [] if (config.tools.discard.enabled) toolsToAdd.push("discard") diff --git a/lib/commands/help.ts b/lib/commands/help.ts new file mode 100644 index 00000000..56d4316c --- /dev/null +++ b/lib/commands/help.ts @@ -0,0 +1,47 @@ +/** + * DCP Help command handler. + * Shows available DCP commands and their descriptions. + */ + +import type { Logger } from "../logger" +import type { SessionState, WithParts } from "../state" +import { sendIgnoredMessage } from "../ui/notification" +import { getCurrentParams } from "../strategies/utils" + +export interface HelpCommandContext { + client: any + state: SessionState + logger: Logger + sessionId: string + messages: WithParts[] +} + +function formatHelpMessage(): string { + const lines: string[] = [] + + lines.push("╭───────────────────────────────────────────────────────────╮") + lines.push("│ DCP Commands │") + lines.push("╰───────────────────────────────────────────────────────────╯") + lines.push("") + lines.push("Available commands:") + lines.push(" context - Show token usage breakdown for current session") + lines.push(" stats - Show DCP pruning statistics") + lines.push("") + lines.push("Examples:") + lines.push(" /dcp context") + lines.push(" /dcp stats") + lines.push("") + + return lines.join("\n") +} + +export async function handleHelpCommand(ctx: HelpCommandContext): Promise { + const { client, state, logger, sessionId, messages } = ctx + + const message = formatHelpMessage() + + const params = getCurrentParams(state, messages, logger) + await sendIgnoredMessage(client, sessionId, message, params, logger) + + logger.info("Help command executed") +} diff --git a/lib/config.ts b/lib/config.ts index f96710ab..1547dad5 100644 --- a/lib/config.ts +++ b/lib/config.ts @@ -45,20 +45,11 @@ export interface TurnProtection { turns: number } -export interface CommandConfig { - enabled: boolean -} - -export interface Commands { - context: CommandConfig - stats: CommandConfig -} - export interface PluginConfig { enabled: boolean debug: boolean pruneNotification: "off" | "minimal" | "detailed" - commands: Commands + commands: boolean turnProtection: TurnProtection protectedFilePatterns: string[] tools: Tools @@ -95,10 +86,6 @@ export const VALID_CONFIG_KEYS = new Set([ "turnProtection.turns", "protectedFilePatterns", "commands", - "commands.context", - "commands.context.enabled", - "commands.stats", - "commands.stats.enabled", "tools", "tools.settings", "tools.settings.nudgeEnabled", @@ -211,26 +198,14 @@ function validateConfigTypes(config: Record): ValidationError[] { } } - // Commands validators + // Commands validator const commands = config.commands - if (commands) { - if ( - commands.context?.enabled !== undefined && - typeof commands.context.enabled !== "boolean" - ) { - errors.push({ - key: "commands.context.enabled", - expected: "boolean", - actual: typeof commands.context.enabled, - }) - } - if (commands.stats?.enabled !== undefined && typeof commands.stats.enabled !== "boolean") { - errors.push({ - key: "commands.stats.enabled", - expected: "boolean", - actual: typeof commands.stats.enabled, - }) - } + if (commands !== undefined && typeof commands !== "boolean") { + errors.push({ + key: "commands", + expected: "boolean", + actual: typeof commands, + }) } // Tools validators @@ -425,14 +400,7 @@ const defaultConfig: PluginConfig = { enabled: true, debug: false, pruneNotification: "detailed", - commands: { - context: { - enabled: true, - }, - stats: { - enabled: true, - }, - }, + commands: true, turnProtection: { enabled: false, turns: 4, @@ -543,15 +511,8 @@ function createDefaultConfig(): void { "debug": false, // Notification display: "off", "minimal", or "detailed" "pruneNotification": "detailed", - // Enable or disable slash commands - "commands": { - "context": { - "enabled": true - }, - "stats": { - "enabled": true - } - }, + // Enable or disable slash commands (/dcp) + "commands": true, // Protect from pruning for message turns "turnProtection": { "enabled": false, @@ -695,25 +656,14 @@ function mergeCommands( base: PluginConfig["commands"], override?: Partial, ): PluginConfig["commands"] { - if (!override) return base - - return { - context: { - enabled: override.context?.enabled ?? base.context.enabled, - }, - stats: { - enabled: override.stats?.enabled ?? base.stats.enabled, - }, - } + if (override === undefined) return base + return override as boolean } function deepCloneConfig(config: PluginConfig): PluginConfig { return { ...config, - commands: { - context: { ...config.commands.context }, - stats: { ...config.commands.stats }, - }, + commands: config.commands, turnProtection: { ...config.turnProtection }, protectedFilePatterns: [...config.protectedFilePatterns], tools: { diff --git a/lib/hooks.ts b/lib/hooks.ts index d42a515e..0533e373 100644 --- a/lib/hooks.ts +++ b/lib/hooks.ts @@ -8,6 +8,7 @@ import { checkSession } from "./state" import { loadPrompt } from "./prompts" import { handleStatsCommand } from "./commands/stats" import { handleContextCommand } from "./commands/context" +import { handleHelpCommand } from "./commands/help" const INTERNAL_AGENT_SIGNATURES = [ "You are a title generator", @@ -89,39 +90,50 @@ export function createCommandExecuteHandler( input: { command: string; sessionID: string; arguments: string }, _output: { parts: any[] }, ) => { - if (input.command === "dcp-stats") { - if (!config.commands.stats.enabled) { - return - } - const messagesResponse = await client.session.messages({ - path: { id: input.sessionID }, - }) - const messages = (messagesResponse.data || messagesResponse) as WithParts[] - await handleStatsCommand({ - client, - state, - logger, - sessionId: input.sessionID, - messages, - }) - throw new Error("__DCP_STATS_HANDLED__") + if (!config.commands) { + return } - if (input.command === "dcp-context") { - if (!config.commands.context.enabled) { - return - } + + if (input.command === "dcp") { + const args = (input.arguments || "").trim().split(/\s+/).filter(Boolean) + const subcommand = args[0]?.toLowerCase() || "" + const _subArgs = args.slice(1) + const messagesResponse = await client.session.messages({ path: { id: input.sessionID }, }) const messages = (messagesResponse.data || messagesResponse) as WithParts[] - await handleContextCommand({ + + if (subcommand === "context") { + await handleContextCommand({ + client, + state, + logger, + sessionId: input.sessionID, + messages, + }) + throw new Error("__DCP_CONTEXT_HANDLED__") + } + + if (subcommand === "stats") { + await handleStatsCommand({ + client, + state, + logger, + sessionId: input.sessionID, + messages, + }) + throw new Error("__DCP_STATS_HANDLED__") + } + + await handleHelpCommand({ client, state, logger, sessionId: input.sessionID, messages, }) - throw new Error("__DCP_CONTEXT_HANDLED__") + throw new Error("__DCP_HELP_HANDLED__") } } }