/** * @license * Copyright 2025 OSA * SPDX-License-Identifier: Apache-2.0 */ import { SubagentTerminateMode } from './types.js'; export interface PreToolUsePayload { subagentId: string; name: string; toolName: string; args: Record; timestamp: number; } export interface PostToolUsePayload extends PreToolUsePayload { success: boolean; durationMs: number; errorMessage?: string; result?: unknown; } export interface SubagentStartPayload { subagentId: string; name: string; config: Record; timestamp: number; } export interface SubagentStopPayload { subagentId: string; name: string; terminateReason: SubagentTerminateMode; summary: Record; durationMs?: number; timestamp: number; } export interface RoundStartPayload { subagentId: string; name: string; roundNumber: number; inputTokens: number; timestamp: number; } export interface RoundEndPayload { subagentId: string; name: string; roundNumber: number; outputTokens: number; toolsUsed: string[]; durationMs: number; timestamp: number; } export interface SubagentErrorPayload { subagentId: string; name: string; error: Error; context: 'api_call' | 'tool_execution' | 'internal' | 'timeout'; recoverable: boolean; timestamp: number; } export interface MemorySavePayload { subagentId: string; name: string; collection: 'episodes' | 'decisions' | 'code_patterns' | 'problems_solutions'; documentId: string; content: string; metadata: Record; timestamp: number; } export interface MemorySearchPayload { subagentId: string; name: string; collection: 'episodes' | 'decisions' | 'code_patterns' | 'problems_solutions'; query: string; resultCount: number; topSimilarity: number; durationMs: number; timestamp: number; } export interface SkillTriggerPayload { subagentId: string; name: string; skillId: string; skillName: string; confidence: number; triggerType: 'keyword' | 'semantic' | 'manual'; timestamp: number; } export interface SkillStepCompletePayload { subagentId: string; name: string; skillId: string; stepId: string; stepName: string; stepIndex: number; totalSteps: number; success: boolean; durationMs: number; timestamp: number; } export interface SkillCompletePayload { subagentId: string; name: string; skillId: string; skillName: string; success: boolean; stepsCompleted: number; totalSteps: number; durationMs: number; memoriesSaved: number; timestamp: number; } /** * SubagentHooks - Extended hook system for subagent lifecycle * * Categories: * - Tool hooks (2): preToolUse, postToolUse * - Lifecycle hooks (4): onStart, onStop, onRoundStart, onRoundEnd, onError * - Memory hooks (2): onMemorySave, onMemorySearch * - Skill hooks (3): onSkillTrigger, onSkillStepComplete, onSkillComplete * * Total: 12 hooks */ export interface SubagentHooks { preToolUse?(payload: PreToolUsePayload): Promise | void; postToolUse?(payload: PostToolUsePayload): Promise | void; onStart?(payload: SubagentStartPayload): Promise | void; onStop?(payload: SubagentStopPayload): Promise | void; onRoundStart?(payload: RoundStartPayload): Promise | void; onRoundEnd?(payload: RoundEndPayload): Promise | void; onError?(payload: SubagentErrorPayload): Promise | void; onMemorySave?(payload: MemorySavePayload): Promise | void; onMemorySearch?(payload: MemorySearchPayload): Promise | void; onSkillTrigger?(payload: SkillTriggerPayload): Promise | void; onSkillStepComplete?(payload: SkillStepCompletePayload): Promise | void; onSkillComplete?(payload: SkillCompletePayload): Promise | void; } /** * Dispatch a hook to all registered handlers */ export declare function dispatchHook(hooks: SubagentHooks | undefined, hookName: keyof SubagentHooks, payload: any): Promise; /** * Create a combined hooks object from multiple sources */ export declare function combineHooks(...hookSets: (SubagentHooks | undefined)[]): SubagentHooks; /** * Create a logging hook for debugging */ export declare function createLoggingHooks(prefix?: string): SubagentHooks; /** * Create a metrics hook for performance tracking */ export declare function createMetricsHooks(): { hooks: SubagentHooks; getMetrics: () => HookMetrics; }; export interface HookMetrics { roundCount: number; totalDurationMs: number; toolCallCount: number; toolSuccessCount: number; errorCount: number; memorySaveCount: number; memorySearchCount: number; skillTriggerCount: number; skillCompleteCount: number; }