import type { ToolRegistryContract, ToolResult } from '../../types/tool/index.js'; import type { ToolCallView, ToolResultView } from '../../types/tool/presentation.js'; import type { Logger } from '../../utils/logger.js'; /** * Asks a tool how it should be shown, and falls back when it has no * opinion. * * The fallback is not a placeholder — it is the exact behaviour one host * had already converged on, moved to where every host can reach it. What * changes is that a tool the host never heard of can now override it. */ export interface ToolPresenter { presentCall(toolName: string, input: unknown): ToolCallView; presentResult(toolName: string, input: unknown, result: ToolResult): ToolResultView; } /** * The label a tool with no opinion gets. * * The pick order is load-bearing and was arrived at by use. `description` * is LAST so it only speaks for a tool none of the others describe — those * tools were falling through to a truncated `JSON.stringify`, which is how * a delegation tool came to show a blob of its own arguments while * requiring the model to write a label nothing then read. */ export declare function genericLabel(input: unknown): string; /** * `registry` is the `ToolRegistryContract` a turn already holds, so a * presenter never needs its own copy of what is registered — and a tool * added at runtime by a plugin is presentable the moment it is registered. */ export declare function createToolPresenter(registry: ToolRegistryContract, logger?: Logger): ToolPresenter; //# sourceMappingURL=presentation.d.ts.map