import type { AgentContext } from '../service.types.js'; export type LifecycleEventType = 'conversation_start' | 'llm_request' | 'llm_response' | 'tool_call_start' | 'tool_call_end' | 'conversation_end' | 'session_start' | 'session_end'; export interface LifecycleEventData { type: LifecycleEventType; sessionKey: string; payload: T; timestamp: number; } export interface LifecycleHandler { name: string; handle(event: LifecycleEventData, context: AgentContext): Promise; } export interface ConversationStartPayload { userMessage: string; model: string; } export interface LLMRequestPayload { requestNumber: number; maxRequests: number; messageCount: number; } export interface LLMResponsePayload { response: string; usage?: { input: number; output: number; total: number; cost?: number; }; toolCalls?: Array<{ name: string; arguments: Record; }>; } export interface ToolCallStartPayload { toolName: string; arguments: Record; attemptNumber: number; maxAttempts: number; } export interface ToolCallEndPayload { toolName: string; success: boolean; result?: unknown; error?: string; durationMs: number; } export interface ConversationEndPayload { totalTurns: number; totalToolCalls: number; endReason: 'completed' | 'error' | 'interrupted' | 'timeout'; } export type InterruptionReason = { type: 'max_requests_per_turn'; limit: number; count: number; } | { type: 'max_tool_failures'; limit: number; errors: Record; } | { type: 'user_abort'; } | { type: 'timeout'; durationMs: number; }; export interface InterruptPayload { reason: InterruptionReason; message: string; }