/** * PostProcessor — MVA Response Post-Processing * * Extracted from the ExecutionPipeline to uphold SRP. * Transforms raw handler return values into valid MCP ToolResponse * objects according to the MVA priority hierarchy. * * @internal * @module */ import { type ToolResponse } from '../core/response.js'; import { type Presenter } from './Presenter.js'; import { type TelemetrySink } from '../observability/TelemetryEvent.js'; /** * Optional telemetry context for Presenter event emission. * Keeps the fast path (no telemetry) at zero overhead. * @internal */ export interface PostProcessTelemetry { readonly sink: TelemetrySink; readonly tool: string; readonly action: string; } /** * Post-process a handler's return value through the MVA priority hierarchy. * * Priority: * 1. **ToolResponse** → use directly (backward compatibility) * 2. **ResponseBuilder** → call `.build()` (auto-build) * 3. **Raw data + Presenter** → pipe through `Presenter.make(data).build()` * 4. **Raw data without Presenter** → wrap via canonical `success()` helper * * @param result - The handler's return value * @param presenter - The action's Presenter (from `returns` field), if any * @param ctx - Optional request context * @param selectFields - Optional `_select` field names for context window optimization * @param telemetry - Optional telemetry context for Presenter events * @returns A valid MCP ToolResponse * * @internal */ export declare function postProcessResult(result: unknown, presenter: Presenter | undefined, ctx?: unknown, selectFields?: string[], telemetry?: PostProcessTelemetry): ToolResponse; /** * Check if a value is a valid MCP ToolResponse. * * A ToolResponse must have a `content` array — the canonical shape * from `response.ts`. * * @internal */ export declare function isToolResponse(value: unknown): value is ToolResponse; //# sourceMappingURL=PostProcessor.d.ts.map