import type { JsonValue } from "@velum-labs/routekit-contracts"; import type { ModelFusionSideEffects, ToolExecutionRecordV1 } from "./model-fusion.js"; export type ToolSideEffectClass = "none" | "read" | "write" | "external"; export type ToolExecutorMode = "demo_safe" | "policy_bound"; export type ToolPolicyDecision = { decision: "allow"; reason: string; dedupeKey?: string; } | { decision: "deny"; reason: string; errorKind: "tool_denied" | "capability_missing"; }; export type ToolDefinition = { tool_name: string; side_effects: ToolSideEffectClass; description?: string; }; export type ToolExecutorLimits = { timeoutMs?: number; maxOutputBytes?: number; }; export type ToolExecutorBudget = { maxSpendUsd?: number; }; export type ToolExecutorContract = { executor_id: string; mode: ToolExecutorMode; environment_id: string; tool_policy_id: string; allowed_tools: string[]; side_effects: ToolSideEffectClass[]; limits?: ToolExecutorLimits; timeoutMs?: number; budget?: ToolExecutorBudget; audit_sink?: string; }; export type ToolExecutionRequest = { candidate_id?: string; plan_id?: string; tool_name: string; arguments: JsonValue; side_effects: ToolSideEffectClass; }; export type ToolExecutionResult = { record: ToolExecutionRecordV1; output?: JsonValue; deduped: boolean; decision: ToolPolicyDecision; }; export declare function toolArgumentsHash(args: JsonValue): string; export declare function toolCallKey(input: { contract: ToolExecutorContract; request: ToolExecutionRequest; }): string; export declare function modelFusionSideEffects(sideEffects: ToolSideEffectClass): ModelFusionSideEffects; export declare function toolSideEffectClassFromModelFusion(sideEffects: ModelFusionSideEffects): ToolSideEffectClass; export declare function evaluateToolPolicy(contract: ToolExecutorContract, request: ToolExecutionRequest): ToolPolicyDecision;