import type { Signal } from './turnPolicy.js'; export interface TurnClassifiedPayload { signals: Signal[]; visibleToolsCount: number; appliedPolicies: string[]; rationale: string; } export interface GatingPolicyAppliedPayload { policyId: string; matchedSignals: string[]; forbiddenTools: string[]; requiredTools: string[]; } export interface PromptContractEmittedPayload { toolName: string; contractVersion: string; bakedDescriptionLength: number; } export interface ToolDispatchResolvedPayload { toolName: string; resultKind: 'execute' | 'execute_with_repair' | 'repair' | 'reject' | 'ask_user'; } export interface RepairRecipeFiredPayload { toolName: string; errorCode: string; recipeId: string; mode: 'autoRepair' | 'suggestFollowup' | 'stopAndAsk'; } export type ContractsTelemetryEvent = { kind: 'turn_classified'; timestamp: number; payload: TurnClassifiedPayload; } | { kind: 'gating_policy_applied'; timestamp: number; payload: GatingPolicyAppliedPayload; } | { kind: 'prompt_contract_emitted'; timestamp: number; payload: PromptContractEmittedPayload; } | { kind: 'tool_dispatch_resolved'; timestamp: number; payload: ToolDispatchResolvedPayload; } | { kind: 'repair_recipe_fired'; timestamp: number; payload: RepairRecipeFiredPayload; }; export declare function isContractsTelemetryEvent(value: unknown): value is ContractsTelemetryEvent; export interface ContractsTelemetrySink { emit(event: ContractsTelemetryEvent): void; } export declare function makeBufferedSink(capacity?: number): ContractsTelemetrySink & { events(): ContractsTelemetryEvent[]; }; //# sourceMappingURL=telemetry.d.ts.map