diff --git a/README.md b/README.md index 4b317d0..52c8db5 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-demo.png) +![DCP in action](dcp-demo3.png) ## Installation diff --git a/dcp-demo2.png b/dcp-demo2.png new file mode 100644 index 0000000..29a0051 Binary files /dev/null and b/dcp-demo2.png differ diff --git a/dcp-demo3.png b/dcp-demo3.png new file mode 100644 index 0000000..7d89a11 Binary files /dev/null and b/dcp-demo3.png differ diff --git a/lib/state/id-mapping.ts b/lib/state/id-mapping.ts index fccac6d..0f73eb4 100644 --- a/lib/state/id-mapping.ts +++ b/lib/state/id-mapping.ts @@ -59,10 +59,6 @@ export function getActualId(sessionId: string, numericId: number): string | unde return mapping?.numericToActual.get(numericId) } -export function clearSessionMapping(sessionId: string): void { - sessionMappings.delete(sessionId) -} - export function clearAllMappings(): void { sessionMappings.clear() } diff --git a/lib/ui/notification.ts b/lib/ui/notification.ts index 68fe6c8..6da8a4a 100644 --- a/lib/ui/notification.ts +++ b/lib/ui/notification.ts @@ -1,5 +1,5 @@ import type { Logger } from "../logger" -import type { SessionStats, GCStats, PruningResult } from "../core/janitor" +import type { SessionStats, GCStats } from "../core/janitor" import type { ToolMetadata } from "../fetch-wrapper/types" import { formatTokenCount } from "../tokenizer" import { extractParameterKey } from "./display-utils" @@ -146,72 +146,6 @@ function buildDetailedMessage(data: NotificationData, workingDirectory?: string) return message.trim() } -export function formatPruningResultForTool( - result: PruningResult, - workingDirectory?: string -): string { - const lines: string[] = [] - lines.push(`Context pruning complete. Pruned ${result.prunedCount} tool outputs.`) - lines.push('') - - if (result.llmPrunedIds.length > 0) { - lines.push(`Semantically pruned (${result.llmPrunedIds.length}):`) - const toolsSummary = buildToolsSummary(result.llmPrunedIds, result.toolMetadata, workingDirectory) - lines.push(...formatToolSummaryLines(toolsSummary)) - } - - return lines.join('\n').trim() -} - -export function buildToolsSummary( - prunedIds: string[], - toolMetadata: Map, - workingDirectory?: string -): Map { - const toolsSummary = new Map() - - for (const prunedId of prunedIds) { - const normalizedId = prunedId.toLowerCase() - const metadata = toolMetadata.get(normalizedId) - if (metadata) { - const toolName = metadata.tool - if (!toolsSummary.has(toolName)) { - toolsSummary.set(toolName, []) - } - - const paramKey = extractParameterKey(metadata) - if (paramKey) { - const displayKey = truncate(shortenPath(paramKey, workingDirectory), 80) - toolsSummary.get(toolName)!.push(displayKey) - } else { - toolsSummary.get(toolName)!.push('(default)') - } - } - } - - return toolsSummary -} - -export function formatToolSummaryLines( - toolsSummary: Map, - indent: string = ' ' -): string[] { - const lines: string[] = [] - - for (const [toolName, params] of toolsSummary.entries()) { - if (params.length === 1) { - lines.push(`${indent}${toolName}: ${params[0]}`) - } else if (params.length > 1) { - lines.push(`${indent}${toolName} (${params.length}):`) - for (const param of params) { - lines.push(`${indent} ${param}`) - } - } - } - - return lines -} - function truncate(str: string, maxLen: number = 60): string { if (str.length <= maxLen) return str return str.slice(0, maxLen - 3) + '...'