claude-flow
Version:
Enterprise-grade AI agent orchestration with ruv-swarm integration (Alpha Release)
221 lines (194 loc) • 6.07 kB
text/typescript
/**
* Simplified Verification Hooks
*
* A simplified version to avoid TypeScript compiler issues
*/
import { Logger } from '../core/logger.js';
import { agenticHookManager } from '../services/agentic-flow-hooks/index.js';
import type {
AgenticHookContext,
HookHandlerResult,
HookRegistration,
WorkflowHookPayload,
} from '../services/agentic-flow-hooks/types.js';
const logger = new Logger({
level: 'info',
format: 'text',
destination: 'console'
}, { prefix: 'SimpleVerificationHooks' });
// ===== Simple Types =====
export interface SimpleVerificationConfig {
enabled: boolean;
logLevel: 'info' | 'debug' | 'warn' | 'error';
}
export interface SimpleVerificationResult {
success: boolean;
message: string;
details?: any;
}
// ===== Simple Verification Hook Manager =====
export class SimpleVerificationHookManager {
private config: SimpleVerificationConfig;
constructor(config: Partial<SimpleVerificationConfig> = {}) {
this.config = {
enabled: true,
logLevel: 'info',
...config
};
if (this.config.enabled) {
this.registerSimpleHooks();
}
}
private registerSimpleHooks(): void {
// Simple pre-task hook
const preTaskHook: HookRegistration = {
id: 'simple-verification-pre-task',
type: 'workflow-start',
priority: 100,
handler: async (payload: WorkflowHookPayload, context: AgenticHookContext): Promise<HookHandlerResult> => {
logger.info('🔍 Pre-task verification starting...');
try {
const result = await this.runSimpleChecks(payload, context);
if (result.success) {
logger.info('✅ Pre-task verification passed');
return {
continue: true,
metadata: {
verificationPassed: true,
message: result.message
}
};
} else {
logger.warn('⚠️ Pre-task verification failed:', result.message);
return {
continue: true, // Continue with warnings
metadata: {
verificationFailed: true,
message: result.message
}
};
}
} catch (error) {
logger.error('❌ Pre-task verification error:', error);
return {
continue: true,
metadata: {
verificationError: true,
error: (error as Error).message
}
};
}
}
};
// Simple post-task hook
const postTaskHook: HookRegistration = {
id: 'simple-verification-post-task',
type: 'workflow-complete',
priority: 90,
handler: async (payload: WorkflowHookPayload, context: AgenticHookContext): Promise<HookHandlerResult> => {
logger.info('🔍 Post-task verification starting...');
try {
const result = await this.runSimpleValidation(payload, context);
logger.info(`✅ Post-task verification completed: ${result.message}`);
return {
continue: true,
metadata: {
validationComplete: true,
success: result.success,
message: result.message
}
};
} catch (error) {
logger.error('❌ Post-task verification error:', error);
return {
continue: true,
metadata: {
validationError: true,
error: (error as Error).message
}
};
}
}
};
// Register hooks
agenticHookManager.register(preTaskHook);
agenticHookManager.register(postTaskHook);
logger.info('Simple verification hooks registered successfully');
}
private async runSimpleChecks(
payload: WorkflowHookPayload,
context: AgenticHookContext
): Promise<SimpleVerificationResult> {
// Simple environment check
const nodeEnv = process.env.NODE_ENV;
if (!nodeEnv) {
return {
success: false,
message: 'NODE_ENV environment variable not set',
details: { missing: ['NODE_ENV'] }
};
}
// Simple memory check
const memUsage = process.memoryUsage();
const heapUsedMB = memUsage.heapUsed / 1024 / 1024;
if (heapUsedMB > 1000) { // More than 1GB
return {
success: false,
message: `High memory usage detected: ${heapUsedMB.toFixed(2)}MB`,
details: { memoryUsage: heapUsedMB }
};
}
return {
success: true,
message: 'All pre-task checks passed',
details: {
nodeEnv,
memoryUsage: heapUsedMB
}
};
}
private async runSimpleValidation(
payload: WorkflowHookPayload,
context: AgenticHookContext
): Promise<SimpleVerificationResult> {
// Simple validation - check if workflow has state
if (!payload.state || Object.keys(payload.state).length === 0) {
return {
success: false,
message: 'Workflow completed with empty state',
details: { state: payload.state }
};
}
// Check for errors in metadata
if (payload.error) {
return {
success: false,
message: 'Workflow completed with errors',
details: { error: payload.error }
};
}
return {
success: true,
message: 'Post-task validation passed',
details: {
stateKeys: Object.keys(payload.state),
timestamp: Date.now()
}
};
}
public getStatus(): any {
return {
enabled: this.config.enabled,
hooksRegistered: this.config.enabled ? 2 : 0,
config: this.config
};
}
public updateConfig(newConfig: Partial<SimpleVerificationConfig>): void {
this.config = { ...this.config, ...newConfig };
logger.info('Simple verification configuration updated', this.config);
}
}
// Export singleton instance
export const simpleVerificationHookManager = new SimpleVerificationHookManager();
// Initialize
logger.info('Simple verification hooks module initialized');