import type { JsonSchema } from "../../core/index.js"; export type ToolSchemaSlot = "inputSchema" | "outputSchema"; export interface ToolSchemaPatch { tool: string; /** `bindingIdentity` at judgment time — a rebound tool never takes a stale schema. */ binding: string; slot: ToolSchemaSlot; schema: JsonSchema; } export interface ToolSchemaPatchResult { written: Array<{ tool: string; slot: ToolSchemaSlot; }>; skipped: Array<{ tool: string; slot: ToolSchemaSlot; reason: "rebound" | "occupied" | "unknown-tool"; }>; } /** * The ONE targeted writer for `.vendo/tools.json` outside `vendoSync`. * * Fills EMPTY slots only. `occupied` is the wall, and it lives HERE rather than * in a prompt: a slot whose source is `declared` or `types` is the host's own * contract, and no model gets to talk its way past that. The file is re-read * (never patched from a stale in-memory copy), matched on name AND binding * identity, re-validated with `toolsFileSchema`, and written only when the * bytes actually change. */ export declare function patchToolSchemas(toolsPath: string, patches: readonly ToolSchemaPatch[]): Promise;