/** * Tool Output Compressor — RTK-inspired pre-processing that intercepts * tool results and compresses raw output before it enters the LLM context. * * This is complementary to the conversation-level compaction pipeline: * - Compressor: compresses raw tool output (pre-context) * - Compaction: summarizes + prunes conversation history (post-context) * * Strategies (mirroring RTK's four-pronged approach): * * 1. SMART FILTERING — strip noise from structured outputs * - Code: remove comments, collapse whitespace, skip blank lines * - Git: strip progress meters, hints, verbose enumerations * - Shell: remove ANSI escape codes, carriage returns * * 2. GROUPING — aggregate similar items * - ls: group files by directory * - grep/rg: group matches by file, collapse repeated patterns * - Lint errors: group by rule + file * * 3. TRUNCATION — keep relevant context, cut redundancy * - Read: keep N lines with line-number markers * - Bash: keep first + last N lines of long output * - Test runners: keep only failures + summary * * 4. DEDUPLICATION — collapse repeated lines with counts * - Log output: deduplicate repeated lines * - Docker/build output: collapse progress lines */ import type { ExtensionAPI } from "../sdk/coding-agent/index.js"; import type { ExtensionContext } from "../sdk/coding-agent/core/extensions/types.js"; import { type ToolOutputCompressorPolicy } from "../sdk/coding-agent/core/compaction/policy.js"; import type { Runtime } from "./runtime.js"; export type CompressorConfig = ToolOutputCompressorPolicy; export declare const DEFAULT_COMPRESSOR_CONFIG: CompressorConfig; export interface CompressionStats { originalChars: number; compressedChars: number; savingsPercent: number; toolName: string; } export interface ToolOutputCompressionTelemetry { events: number; originalChars: number; compressedChars: number; byTool: Record; } export declare function getToolOutputCompressionTelemetry(runtime: Runtime): ToolOutputCompressionTelemetry; export declare function resetToolOutputCompressionTelemetry(runtime: Runtime): void; /** Compress a subagent tool result without using the parent Runtime or extension lifecycle. * * Accepts an optional extension context so the runtime compaction policy is honored * (same path as registerToolOutputCompressor). When omitted, falls back to * DEFAULT_COMPRESSOR_CONFIG to stay backward compatible with existing callers/tests. */ export declare function compressSubagentToolResult(toolName: string, input: unknown, result: { content: Array<{ type: string; text?: string; data?: string; mimeType?: string; }>; }, ctx?: Pick): Array<{ type: "text"; text: string; } | { type: "image"; data: string; mimeType: string; }> | undefined; export declare function registerToolOutputCompressor(ext: ExtensionAPI, runtime: Runtime): void; //# sourceMappingURL=tool-output-compressor.d.ts.map