UNPKG

aiwg

Version:

Cognitive architecture for AI-augmented software development with structured memory, ensemble validation, and closed-loop correction. FAIR-aligned artifacts, 84% cost reduction via human-in-the-loop, standards adopted by 100+ organizations.

148 lines (122 loc) 3.47 kB
/** * Hook System Types * * Type definitions for the hook execution system. Hooks allow users to * intercept and modify CLI behavior at specific lifecycle points. * * @implements @.aiwg/requirements/use-cases/UC-004-extension-system.md * @architecture @src/extensions/types.ts * @tests @test/unit/cli/hooks/types.test.ts * @issue #58 */ /** * Hook lifecycle events * * Matches the HookEvent type from the unified extension schema. */ export type HookEvent = | 'pre-command' // Before any command executes | 'post-command' // After any command completes | 'on-error' // When a command fails | 'on-deploy'; // When frameworks are deployed /** * Hook execution context * * Provides hooks with information about the current execution context. */ export interface HookContext { /** The lifecycle event that triggered this hook */ event: HookEvent; /** The command being executed (e.g., 'use', 'new', 'help') */ command: string; /** Command arguments */ args: string[]; /** Current working directory */ cwd: string; /** Framework root path */ frameworkRoot: string; /** Error object (only present for on-error events) */ error?: Error; /** Additional context data passed from previous hooks or command */ data?: Record<string, unknown>; } /** * Hook execution result * * Indicates what action the hook wants to take. */ export interface HookResult { /** * Action to take after hook execution * * - continue: Allow execution to proceed * - block: Stop execution (requires canBlock: true in metadata) * - modify: Modify execution context (requires canModify: true in metadata) */ action: 'continue' | 'block' | 'modify'; /** Message to display (optional) */ message?: string; /** Modified data to pass to next hook or command (for modify action) */ data?: Record<string, unknown>; /** Error that occurred during hook execution (optional) */ error?: Error; } /** * Hook filter criteria * * Determines which commands this hook applies to. */ export interface HookFilter { /** Only run for these commands (if undefined, runs for all) */ commands?: string[]; /** Exclude these commands */ exclude?: string[]; } /** * Hook handler interface * * Defines a hook that can be registered with the hook system. */ export interface HookHandler { /** Unique hook identifier */ id: string; /** Lifecycle event this hook responds to */ event: HookEvent; /** * Execution priority (lower = earlier execution) * * @default 100 */ priority: number; /** Optional filter to limit which commands trigger this hook */ filter?: HookFilter; /** * Execute the hook * * @param ctx - Hook execution context * @returns Hook result indicating next action */ execute(ctx: HookContext): Promise<HookResult>; } /** * Hook execution result summary * * Aggregates results from all executed hooks. */ export interface HookExecutionResult { /** Whether execution was blocked by any hook */ blocked: boolean; /** ID of the hook that blocked execution (if any) */ blockingHook?: string; /** Message from blocking hook */ message?: string; /** List of hook IDs that were executed */ executed: string[]; /** Errors that occurred during hook execution */ errors: Array<{ hook: string; error: Error; }>; /** Accumulated modifications from all hooks */ modifications: Record<string, unknown>; }