@weavelogic/knowledge-graph-agent 0.10.1 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/_virtual/index10.js +2 -2
  2. package/dist/_virtual/index11.js +2 -2
  3. package/dist/_virtual/index8.js +2 -2
  4. package/dist/_virtual/index9.js +2 -2
  5. package/dist/agents/base-agent.js +3 -3
  6. package/dist/agents/base-agent.js.map +1 -1
  7. package/dist/cli/commands/cultivate.js +8 -3
  8. package/dist/cli/commands/cultivate.js.map +1 -1
  9. package/dist/cultivation/deep-analyzer.d.ts +8 -1
  10. package/dist/cultivation/deep-analyzer.d.ts.map +1 -1
  11. package/dist/cultivation/deep-analyzer.js +36 -8
  12. package/dist/cultivation/deep-analyzer.js.map +1 -1
  13. package/dist/generators/claude-md.js +1 -1
  14. package/dist/generators/claude-md.js.map +1 -1
  15. package/dist/generators/doc-cultivator.js +3 -6
  16. package/dist/generators/doc-cultivator.js.map +1 -1
  17. package/dist/generators/doc-generator-agents.js +18 -9
  18. package/dist/generators/doc-generator-agents.js.map +1 -1
  19. package/dist/integrations/claude-flow.js +4 -4
  20. package/dist/integrations/claude-flow.js.map +1 -1
  21. package/dist/mcp/clients/mcp-client-adapter.d.ts +1 -1
  22. package/dist/mcp/clients/mcp-client-adapter.d.ts.map +1 -1
  23. package/dist/mcp/clients/mcp-client-adapter.js +1 -1
  24. package/dist/mcp/clients/mcp-client-adapter.js.map +1 -1
  25. package/dist/node_modules/@typescript-eslint/project-service/dist/index.js +1 -1
  26. package/dist/node_modules/@typescript-eslint/types/dist/index.js +1 -1
  27. package/dist/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/dist/commonjs/index.js +1 -1
  28. package/dist/node_modules/@typescript-eslint/visitor-keys/dist/index.js +1 -1
  29. package/dist/node_modules/fdir/dist/index.js +1 -1
  30. package/dist/node_modules/tinyglobby/dist/index.js +1 -1
  31. package/dist/node_modules/ts-api-utils/lib/index.js +1 -1
  32. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
- var lib = {};
1
+ var dist = {};
2
2
  export {
3
- lib as __exports
3
+ dist as __exports
4
4
  };
5
5
  //# sourceMappingURL=index10.js.map
@@ -1,5 +1,5 @@
1
- var dist = {};
1
+ var lib = {};
2
2
  export {
3
- dist as __exports
3
+ lib as __exports
4
4
  };
5
5
  //# sourceMappingURL=index11.js.map
@@ -1,5 +1,5 @@
1
- var commonjs = {};
1
+ var dist = {};
2
2
  export {
3
- commonjs as __exports
3
+ dist as __exports
4
4
  };
5
5
  //# sourceMappingURL=index8.js.map
@@ -1,5 +1,5 @@
1
- var dist = {};
1
+ var commonjs = {};
2
2
  export {
3
- dist as __exports
3
+ commonjs as __exports
4
4
  };
5
5
  //# sourceMappingURL=index9.js.map
@@ -525,11 +525,11 @@ class BaseAgent {
525
525
  const namespace = this.config.claudeFlow?.namespace ?? "knowledge-graph";
526
526
  switch (hookType) {
527
527
  case "pre-task":
528
- return `npx claude-flow@alpha hooks pre-task --description "${task.description}"`;
528
+ return `claude-flow hooks pre-task --description "${task.description}"`;
529
529
  case "post-task":
530
- return `npx claude-flow@alpha hooks post-task --task-id "${task.id}"`;
530
+ return `claude-flow hooks post-task --task-id "${task.id}"`;
531
531
  case "post-edit":
532
- return `npx claude-flow@alpha hooks post-edit --memory-key "${namespace}/agent/${this.config.id}/task/${task.id}"`;
532
+ return `claude-flow hooks post-edit --memory-key "${namespace}/agent/${this.config.id}/task/${task.id}"`;
533
533
  default:
534
534
  return "";
535
535
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-agent.js","sources":["../../src/agents/base-agent.ts"],"sourcesContent":["/**\n * Base Agent Implementation\n *\n * Abstract base class for all agents providing common functionality\n * including task execution, input validation, output formatting,\n * error handling, and optional claude-flow integration.\n *\n * @module agents/base-agent\n */\n\nimport { getLogger, retry, type Logger, type RetryOptions } from '../utils/index.js';\nimport {\n AgentType,\n AgentStatus,\n TaskPriority,\n MessageType,\n type AgentConfig,\n type AgentInstance,\n type AgentState,\n type AgentTask,\n type AgentResult,\n type AgentError,\n type AgentMessage,\n type ExecutionMetrics,\n type ResultArtifact,\n createAgentId,\n createTaskId,\n} from './types.js';\nimport {\n TrajectoryTracker,\n type TrajectoryTrackerConfig,\n} from '../learning/services/trajectory-tracker.js';\nimport type { TrajectoryStep } from '../integrations/agentic-flow/adapters/reasoning-bank-adapter.js';\n\n// ============================================================================\n// Base Agent Abstract Class\n// ============================================================================\n\n/**\n * Abstract base class for all agents\n *\n * Provides common functionality that all agents share, including:\n * - Task execution with timeout and retry handling\n * - Input validation\n * - Output formatting\n * - Error handling and logging\n * - Optional claude-flow hooks integration\n *\n * @example\n * ```typescript\n * class ResearchAgent extends BaseAgent {\n * protected async executeTask(task: AgentTask): Promise<AgentResult> {\n * // Implementation specific to researcher agent\n * const results = await this.searchSources(task.input);\n * return this.formatOutput(results);\n * }\n * }\n * ```\n */\nexport abstract class BaseAgent implements AgentInstance {\n /** Agent configuration */\n public readonly config: AgentConfig;\n\n /** Agent runtime state */\n private _state: AgentState;\n\n /** Logger instance */\n protected readonly logger: Logger;\n\n /** Message handlers for different message types */\n private messageHandlers: Map<MessageType, (message: AgentMessage) => Promise<void>> =\n new Map();\n\n /** Trajectory tracker for learning */\n protected trajectoryTracker: TrajectoryTracker | null = null;\n\n /** Current active trajectory ID */\n protected currentTrajectoryId: string | null = null;\n\n /** Whether to auto-track trajectories */\n protected autoTrackTrajectories: boolean = true;\n\n constructor(config: AgentConfig) {\n // Ensure ID is set\n this.config = {\n ...config,\n id: config.id ?? createAgentId(config.type),\n };\n\n // Initialize state\n this._state = {\n id: this.config.id!,\n status: AgentStatus.IDLE,\n taskQueue: [],\n completedTasks: [],\n lastActivity: new Date(),\n errorCount: 0,\n };\n\n // Create logger\n this.logger = getLogger().child(`agent:${this.config.name}`);\n\n // Register default message handlers\n this.registerDefaultMessageHandlers();\n }\n\n // ============================================================================\n // State Management\n // ============================================================================\n\n /**\n * Get current agent state\n */\n get state(): AgentState {\n return { ...this._state };\n }\n\n /**\n * Get current agent status\n */\n getStatus(): AgentStatus {\n return this._state.status;\n }\n\n /**\n * Update agent status\n */\n protected setStatus(status: AgentStatus): void {\n const previousStatus = this._state.status;\n this._state.status = status;\n this._state.lastActivity = new Date();\n\n if (previousStatus !== status) {\n this.logger.debug(`Status changed: ${previousStatus} -> ${status}`);\n }\n }\n\n // ============================================================================\n // Task Execution\n // ============================================================================\n\n /**\n * Execute a task\n *\n * This is the main entry point for task execution. It handles:\n * - Pre-task hooks (if enabled)\n * - Input validation\n * - Retry logic\n * - Timeout handling\n * - Post-task hooks (if enabled)\n * - Error handling and logging\n */\n async execute(task: AgentTask): Promise<AgentResult> {\n const startTime = new Date();\n\n this.logger.info(`Executing task: ${task.id}`, {\n description: task.description,\n priority: task.priority,\n });\n\n // Run pre-task hook if enabled\n if (this.config.claudeFlow?.hooks?.preTask) {\n await this.runClaudeFlowHook('pre-task', task);\n }\n\n // Start trajectory tracking if enabled\n if (this.autoTrackTrajectories && this.trajectoryTracker?.isEnabled()) {\n this.startTrajectory(task.id, {\n description: task.description,\n priority: task.priority,\n input: task.input,\n });\n this.recordStep('task_started', `Starting task: ${task.description}`, 1.0);\n }\n\n try {\n // Validate input\n const validationResult = await this.validateInput(task);\n if (!validationResult.valid) {\n this.recordStep('validation_failed', validationResult.error ?? 'Input validation failed', 0.0);\n await this.completeTrajectory('failure', { validationError: validationResult.error });\n return this.createErrorResult(\n 'VALIDATION_ERROR',\n validationResult.error ?? 'Input validation failed',\n startTime\n );\n }\n\n this.recordStep('validation_passed', 'Input validation successful', 1.0);\n\n // Set status to running\n this.setStatus(AgentStatus.RUNNING);\n this._state.currentTask = task;\n\n // Execute with retry if configured\n let result: AgentResult;\n const retryConfig = this.config.retry;\n\n if (retryConfig && retryConfig.maxRetries > 0) {\n const retryOptions: RetryOptions = {\n maxRetries: retryConfig.maxRetries,\n initialDelay: retryConfig.backoffMs,\n backoffFactor: retryConfig.backoffMultiplier ?? 2,\n isRetryable: (error: unknown) => this.isRetryableError(error),\n };\n\n result = await retry(\n async () => this.executeWithTimeout(task),\n retryOptions\n );\n } else {\n result = await this.executeWithTimeout(task);\n }\n\n // Update state on success\n if (result.success) {\n this._state.completedTasks.push(task.id);\n this.setStatus(AgentStatus.COMPLETED);\n this.recordStep('task_completed', 'Task completed successfully', 1.0, { success: true });\n await this.completeTrajectory('success', {\n durationMs: result.metrics?.durationMs,\n artifactCount: result.artifacts?.length ?? 0,\n });\n } else {\n this._state.errorCount++;\n this.setStatus(AgentStatus.FAILED);\n this.recordStep('task_failed', result.error?.message ?? 'Task failed', 0.0, { error: result.error });\n await this.completeTrajectory('failure', {\n errorCode: result.error?.code,\n errorMessage: result.error?.message,\n });\n }\n\n // Add metrics\n result.metrics = this.calculateMetrics(startTime, new Date());\n\n // Run post-task hook if enabled\n if (this.config.claudeFlow?.hooks?.postTask) {\n await this.runClaudeFlowHook('post-task', task, result);\n }\n\n return result;\n } catch (error) {\n this._state.errorCount++;\n this.setStatus(AgentStatus.FAILED);\n\n const agentError = this.normalizeError(error);\n this.logger.error(`Task execution failed: ${task.id}`, error as Error);\n\n // Record trajectory failure\n this.recordStep('task_exception', agentError.message, 0.0, {\n errorCode: agentError.code,\n stack: agentError.stack,\n });\n await this.completeTrajectory('failure', {\n exception: true,\n errorCode: agentError.code,\n errorMessage: agentError.message,\n });\n\n return this.createErrorResult(agentError.code, agentError.message, startTime, {\n stack: agentError.stack,\n retryable: agentError.retryable,\n });\n } finally {\n this._state.currentTask = undefined;\n this._state.lastActivity = new Date();\n }\n }\n\n /**\n * Execute task with timeout\n */\n private async executeWithTimeout(task: AgentTask): Promise<AgentResult> {\n const timeout = task.timeout ?? this.config.taskTimeout ?? 30000;\n\n return new Promise<AgentResult>((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error(`Task execution timed out after ${timeout}ms`));\n }, timeout);\n\n this.executeTask(task)\n .then((result) => {\n clearTimeout(timer);\n resolve(result);\n })\n .catch((error) => {\n clearTimeout(timer);\n reject(error);\n });\n });\n }\n\n /**\n * Abstract method for actual task execution\n *\n * Subclasses must implement this method with their specific logic.\n */\n protected abstract executeTask(task: AgentTask): Promise<AgentResult>;\n\n // ============================================================================\n // Input Validation\n // ============================================================================\n\n /**\n * Validate task input\n *\n * Override this method to implement custom validation logic.\n */\n async validateInput(task: AgentTask): Promise<{ valid: boolean; error?: string }> {\n // Basic validation\n if (!task.id) {\n return { valid: false, error: 'Task ID is required' };\n }\n\n if (!task.description) {\n return { valid: false, error: 'Task description is required' };\n }\n\n // Check dependencies are resolved\n if (task.dependencies && task.dependencies.length > 0) {\n const unresolvedDeps = task.dependencies.filter(\n (dep) => !this._state.completedTasks.includes(dep)\n );\n\n if (unresolvedDeps.length > 0) {\n return {\n valid: false,\n error: `Unresolved dependencies: ${unresolvedDeps.join(', ')}`,\n };\n }\n }\n\n return { valid: true };\n }\n\n // ============================================================================\n // Output Formatting\n // ============================================================================\n\n /**\n * Format successful output\n */\n formatOutput<T>(data: T, artifacts?: ResultArtifact[]): AgentResult<T> {\n return {\n success: true,\n data,\n artifacts,\n metadata: {\n agentId: this.config.id,\n agentType: this.config.type,\n timestamp: new Date().toISOString(),\n },\n };\n }\n\n /**\n * Create a success result\n */\n protected createSuccessResult<T>(\n data: T,\n startTime: Date,\n artifacts?: ResultArtifact[]\n ): AgentResult<T> {\n return {\n success: true,\n data,\n artifacts,\n metrics: this.calculateMetrics(startTime, new Date()),\n metadata: {\n agentId: this.config.id,\n agentType: this.config.type,\n },\n };\n }\n\n /**\n * Create an error result\n */\n protected createErrorResult(\n code: string,\n message: string,\n startTime: Date,\n details?: Partial<AgentError>\n ): AgentResult {\n return {\n success: false,\n error: {\n code,\n message,\n ...details,\n },\n metrics: this.calculateMetrics(startTime, new Date()),\n metadata: {\n agentId: this.config.id,\n agentType: this.config.type,\n },\n };\n }\n\n /**\n * Calculate execution metrics\n */\n private calculateMetrics(startTime: Date, endTime: Date): ExecutionMetrics {\n return {\n startTime,\n endTime,\n durationMs: endTime.getTime() - startTime.getTime(),\n memoryUsage: process.memoryUsage?.().heapUsed,\n retries: 0, // Updated by retry logic if needed\n };\n }\n\n // ============================================================================\n // Error Handling\n // ============================================================================\n\n /**\n * Normalize error to AgentError format\n */\n private normalizeError(error: unknown): AgentError {\n if (error instanceof Error) {\n return {\n code: error.name || 'UNKNOWN_ERROR',\n message: error.message,\n stack: error.stack,\n retryable: this.isRetryableError(error),\n };\n }\n\n return {\n code: 'UNKNOWN_ERROR',\n message: String(error),\n retryable: false,\n };\n }\n\n /**\n * Check if an error is retryable\n */\n protected isRetryableError(error: unknown): boolean {\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n\n // Network/transient errors\n if (\n message.includes('timeout') ||\n message.includes('network') ||\n message.includes('connection') ||\n message.includes('econnreset') ||\n message.includes('rate limit')\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ============================================================================\n // Lifecycle Methods\n // ============================================================================\n\n /**\n * Pause the agent\n */\n async pause(): Promise<void> {\n if (this._state.status === AgentStatus.RUNNING) {\n this.logger.info('Pausing agent');\n this.setStatus(AgentStatus.PAUSED);\n }\n }\n\n /**\n * Resume the agent\n */\n async resume(): Promise<void> {\n if (this._state.status === AgentStatus.PAUSED) {\n this.logger.info('Resuming agent');\n this.setStatus(AgentStatus.IDLE);\n }\n }\n\n /**\n * Terminate the agent\n */\n async terminate(): Promise<void> {\n this.logger.info('Terminating agent');\n\n // Clean up any resources\n await this.cleanup();\n\n this.setStatus(AgentStatus.TERMINATED);\n }\n\n /**\n * Cleanup resources\n *\n * Override to implement custom cleanup logic.\n */\n protected async cleanup(): Promise<void> {\n // Default: no cleanup needed\n }\n\n // ============================================================================\n // Messaging\n // ============================================================================\n\n /**\n * Send a message to another agent\n */\n async sendMessage(message: AgentMessage): Promise<void> {\n this.logger.debug(`Sending message to ${message.to}`, {\n type: message.type,\n correlationId: message.correlationId,\n });\n\n // In a real implementation, this would use a message bus\n // For now, just log the message\n this.logger.trace('Message payload', { payload: message.payload });\n }\n\n /**\n * Receive and process a message\n */\n async receiveMessage(message: AgentMessage): Promise<void> {\n this.logger.debug(`Received message from ${message.from}`, {\n type: message.type,\n correlationId: message.correlationId,\n });\n\n const handler = this.messageHandlers.get(message.type);\n if (handler) {\n await handler(message);\n } else {\n this.logger.warn(`No handler for message type: ${message.type}`);\n }\n }\n\n /**\n * Register a message handler\n */\n protected registerMessageHandler(\n type: MessageType,\n handler: (message: AgentMessage) => Promise<void>\n ): void {\n this.messageHandlers.set(type, handler);\n }\n\n /**\n * Register default message handlers\n */\n private registerDefaultMessageHandlers(): void {\n // Handle status requests\n this.registerMessageHandler(MessageType.STATUS, async (message) => {\n await this.sendMessage({\n id: `${Date.now()}`,\n type: MessageType.STATUS,\n from: this.config.id!,\n to: message.from,\n timestamp: new Date(),\n correlationId: message.id,\n payload: {\n agentId: this.config.id,\n status: this._state.status,\n currentTask: this._state.currentTask?.id,\n },\n });\n });\n }\n\n // ============================================================================\n // Trajectory Tracking\n // ============================================================================\n\n /**\n * Set the trajectory tracker for this agent\n *\n * @param tracker - The trajectory tracker instance\n */\n setTrajectoryTracker(tracker: TrajectoryTracker): void {\n this.trajectoryTracker = tracker;\n }\n\n /**\n * Enable or disable auto-tracking of trajectories\n *\n * @param enabled - Whether to auto-track\n */\n setAutoTrackTrajectories(enabled: boolean): void {\n this.autoTrackTrajectories = enabled;\n }\n\n /**\n * Start tracking a task trajectory\n *\n * @param taskId - The task ID to track\n * @param metadata - Optional metadata\n * @returns The trajectory ID\n */\n protected startTrajectory(\n taskId: string,\n metadata: Record<string, unknown> = {}\n ): string | null {\n if (!this.trajectoryTracker?.isEnabled()) {\n return null;\n }\n\n this.currentTrajectoryId = this.trajectoryTracker.startTrajectory(taskId, {\n ...metadata,\n agentId: this.config.id,\n agentType: this.config.type,\n agentName: this.config.name,\n });\n\n return this.currentTrajectoryId;\n }\n\n /**\n * Record a step in the current trajectory\n *\n * @param action - The action taken\n * @param observation - The observation/result\n * @param confidence - Optional confidence score (0-1)\n * @param metadata - Optional step metadata\n */\n protected recordStep(\n action: string,\n observation: string,\n confidence?: number,\n metadata?: Record<string, unknown>\n ): void {\n if (!this.trajectoryTracker || !this.currentTrajectoryId) {\n return;\n }\n\n this.trajectoryTracker.recordStep(this.currentTrajectoryId, {\n action,\n observation,\n confidence,\n metadata,\n });\n }\n\n /**\n * Complete the current trajectory\n *\n * @param outcome - The task outcome\n * @param metadata - Optional final metadata\n * @returns The stored trajectory ID, or null\n */\n protected async completeTrajectory(\n outcome: 'success' | 'failure' | 'partial',\n metadata: Record<string, unknown> = {}\n ): Promise<string | null> {\n if (!this.trajectoryTracker || !this.currentTrajectoryId) {\n return null;\n }\n\n const storedId = await this.trajectoryTracker.completeTrajectory(\n this.currentTrajectoryId,\n outcome,\n metadata\n );\n\n this.currentTrajectoryId = null;\n return storedId;\n }\n\n /**\n * Abort the current trajectory\n *\n * @param reason - The reason for aborting\n */\n protected abortTrajectory(reason: string): void {\n if (!this.trajectoryTracker || !this.currentTrajectoryId) {\n return;\n }\n\n this.trajectoryTracker.abortTrajectory(this.currentTrajectoryId, reason);\n this.currentTrajectoryId = null;\n }\n\n /**\n * Check if trajectory tracking is active\n */\n isTrackingTrajectory(): boolean {\n return this.currentTrajectoryId !== null;\n }\n\n /**\n * Get current trajectory progress\n */\n getTrajectoryProgress(): {\n stepCount: number;\n duration: number;\n lastStep?: TrajectoryStep;\n } | null {\n if (!this.trajectoryTracker || !this.currentTrajectoryId) {\n return null;\n }\n\n return this.trajectoryTracker.getProgress(this.currentTrajectoryId);\n }\n\n // ============================================================================\n // Claude-Flow Integration\n // ============================================================================\n\n /**\n * Run a claude-flow hook\n */\n protected async runClaudeFlowHook(\n hookType: 'pre-task' | 'post-task' | 'post-edit',\n task: AgentTask,\n result?: AgentResult\n ): Promise<void> {\n if (!this.config.claudeFlow?.enabled) {\n return;\n }\n\n const namespace = this.config.claudeFlow.namespace ?? 'knowledge-graph';\n\n this.logger.debug(`Running claude-flow hook: ${hookType}`, {\n namespace,\n taskId: task.id,\n });\n\n // Generate the hook command that would be run\n const hookCommand = this.generateHookCommand(hookType, task, result);\n\n this.logger.trace('Claude-flow hook command', { command: hookCommand });\n\n // In production, this would execute via child_process or MCP\n // For now, we just log the intent\n }\n\n /**\n * Generate claude-flow hook command\n */\n private generateHookCommand(\n hookType: 'pre-task' | 'post-task' | 'post-edit',\n task: AgentTask,\n result?: AgentResult\n ): string {\n const namespace = this.config.claudeFlow?.namespace ?? 'knowledge-graph';\n\n switch (hookType) {\n case 'pre-task':\n return `npx claude-flow@alpha hooks pre-task --description \"${task.description}\"`;\n\n case 'post-task':\n return `npx claude-flow@alpha hooks post-task --task-id \"${task.id}\"`;\n\n case 'post-edit':\n return `npx claude-flow@alpha hooks post-edit --memory-key \"${namespace}/agent/${this.config.id}/task/${task.id}\"`;\n\n default:\n return '';\n }\n }\n\n /**\n * Store result in claude-flow memory\n */\n protected async storeInMemory(key: string, value: unknown): Promise<void> {\n if (!this.config.claudeFlow?.enabled) {\n return;\n }\n\n const namespace = this.config.claudeFlow.namespace ?? 'knowledge-graph';\n\n this.logger.debug('Storing in claude-flow memory', { namespace, key });\n\n // This would call the MCP memory_usage tool\n // For now, just log the intent\n this.logger.trace('Memory store', {\n action: 'store',\n namespace,\n key,\n value: JSON.stringify(value).slice(0, 100),\n });\n }\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a task with defaults\n */\nexport function createTask(\n description: string,\n options?: Partial<Omit<AgentTask, 'id' | 'description' | 'createdAt'>>\n): AgentTask {\n return {\n id: createTaskId(),\n description,\n priority: options?.priority ?? TaskPriority.MEDIUM,\n input: options?.input ?? {},\n expectedOutput: options?.expectedOutput,\n dependencies: options?.dependencies,\n timeout: options?.timeout,\n metadata: options?.metadata,\n createdAt: new Date(),\n deadline: options?.deadline,\n };\n}\n\n/**\n * Type guard for checking if an object is an AgentResult\n */\nexport function isAgentResult(obj: unknown): obj is AgentResult {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'success' in obj &&\n typeof (obj as AgentResult).success === 'boolean'\n );\n}\n\n/**\n * Type guard for checking if an object is an AgentError\n */\nexport function isAgentError(obj: unknown): obj is AgentError {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'code' in obj &&\n 'message' in obj &&\n typeof (obj as AgentError).code === 'string' &&\n typeof (obj as AgentError).message === 'string'\n );\n}\n"],"names":[],"mappings":";;;AA2DO,MAAe,UAAmC;AAAA;AAAA,EAEvC;AAAA;AAAA,EAGR;AAAA;AAAA,EAGW;AAAA;AAAA,EAGX,sCACF,IAAA;AAAA;AAAA,EAGI,oBAA8C;AAAA;AAAA,EAG9C,sBAAqC;AAAA;AAAA,EAGrC,wBAAiC;AAAA,EAE3C,YAAY,QAAqB;AAE/B,SAAK,SAAS;AAAA,MACZ,GAAG;AAAA,MACH,IAAI,OAAO,MAAM,cAAc,OAAO,IAAI;AAAA,IAAA;AAI5C,SAAK,SAAS;AAAA,MACZ,IAAI,KAAK,OAAO;AAAA,MAChB,QAAQ,YAAY;AAAA,MACpB,WAAW,CAAA;AAAA,MACX,gBAAgB,CAAA;AAAA,MAChB,kCAAkB,KAAA;AAAA,MAClB,YAAY;AAAA,IAAA;AAId,SAAK,SAAS,YAAY,MAAM,SAAS,KAAK,OAAO,IAAI,EAAE;AAG3D,SAAK,+BAAA;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,QAAoB;AACtB,WAAO,EAAE,GAAG,KAAK,OAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAyB;AACvB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKU,UAAU,QAA2B;AAC7C,UAAM,iBAAiB,KAAK,OAAO;AACnC,SAAK,OAAO,SAAS;AACrB,SAAK,OAAO,eAAe,oBAAI,KAAA;AAE/B,QAAI,mBAAmB,QAAQ;AAC7B,WAAK,OAAO,MAAM,mBAAmB,cAAc,OAAO,MAAM,EAAE;AAAA,IACpE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,QAAQ,MAAuC;AACnD,UAAM,gCAAgB,KAAA;AAEtB,SAAK,OAAO,KAAK,mBAAmB,KAAK,EAAE,IAAI;AAAA,MAC7C,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IAAA,CAChB;AAGD,QAAI,KAAK,OAAO,YAAY,OAAO,SAAS;AAC1C,YAAM,KAAK,kBAAkB,YAAY,IAAI;AAAA,IAC/C;AAGA,QAAI,KAAK,yBAAyB,KAAK,mBAAmB,aAAa;AACrE,WAAK,gBAAgB,KAAK,IAAI;AAAA,QAC5B,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,QACf,OAAO,KAAK;AAAA,MAAA,CACb;AACD,WAAK,WAAW,gBAAgB,kBAAkB,KAAK,WAAW,IAAI,CAAG;AAAA,IAC3E;AAEA,QAAI;AAEF,YAAM,mBAAmB,MAAM,KAAK,cAAc,IAAI;AACtD,UAAI,CAAC,iBAAiB,OAAO;AAC3B,aAAK,WAAW,qBAAqB,iBAAiB,SAAS,2BAA2B,CAAG;AAC7F,cAAM,KAAK,mBAAmB,WAAW,EAAE,iBAAiB,iBAAiB,OAAO;AACpF,eAAO,KAAK;AAAA,UACV;AAAA,UACA,iBAAiB,SAAS;AAAA,UAC1B;AAAA,QAAA;AAAA,MAEJ;AAEA,WAAK,WAAW,qBAAqB,+BAA+B,CAAG;AAGvE,WAAK,UAAU,YAAY,OAAO;AAClC,WAAK,OAAO,cAAc;AAG1B,UAAI;AACJ,YAAM,cAAc,KAAK,OAAO;AAEhC,UAAI,eAAe,YAAY,aAAa,GAAG;AAC7C,cAAM,eAA6B;AAAA,UACjC,YAAY,YAAY;AAAA,UACxB,cAAc,YAAY;AAAA,UAC1B,eAAe,YAAY,qBAAqB;AAAA,UAChD,aAAa,CAAC,UAAmB,KAAK,iBAAiB,KAAK;AAAA,QAAA;AAG9D,iBAAS,MAAM;AAAA,UACb,YAAY,KAAK,mBAAmB,IAAI;AAAA,UACxC;AAAA,QAAA;AAAA,MAEJ,OAAO;AACL,iBAAS,MAAM,KAAK,mBAAmB,IAAI;AAAA,MAC7C;AAGA,UAAI,OAAO,SAAS;AAClB,aAAK,OAAO,eAAe,KAAK,KAAK,EAAE;AACvC,aAAK,UAAU,YAAY,SAAS;AACpC,aAAK,WAAW,kBAAkB,+BAA+B,GAAK,EAAE,SAAS,MAAM;AACvF,cAAM,KAAK,mBAAmB,WAAW;AAAA,UACvC,YAAY,OAAO,SAAS;AAAA,UAC5B,eAAe,OAAO,WAAW,UAAU;AAAA,QAAA,CAC5C;AAAA,MACH,OAAO;AACL,aAAK,OAAO;AACZ,aAAK,UAAU,YAAY,MAAM;AACjC,aAAK,WAAW,eAAe,OAAO,OAAO,WAAW,eAAe,GAAK,EAAE,OAAO,OAAO,MAAA,CAAO;AACnG,cAAM,KAAK,mBAAmB,WAAW;AAAA,UACvC,WAAW,OAAO,OAAO;AAAA,UACzB,cAAc,OAAO,OAAO;AAAA,QAAA,CAC7B;AAAA,MACH;AAGA,aAAO,UAAU,KAAK,iBAAiB,WAAW,oBAAI,MAAM;AAG5D,UAAI,KAAK,OAAO,YAAY,OAAO,UAAU;AAC3C,cAAM,KAAK,kBAAkB,aAAa,MAAM,MAAM;AAAA,MACxD;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,OAAO;AACZ,WAAK,UAAU,YAAY,MAAM;AAEjC,YAAM,aAAa,KAAK,eAAe,KAAK;AAC5C,WAAK,OAAO,MAAM,0BAA0B,KAAK,EAAE,IAAI,KAAc;AAGrE,WAAK,WAAW,kBAAkB,WAAW,SAAS,GAAK;AAAA,QACzD,WAAW,WAAW;AAAA,QACtB,OAAO,WAAW;AAAA,MAAA,CACnB;AACD,YAAM,KAAK,mBAAmB,WAAW;AAAA,QACvC,WAAW;AAAA,QACX,WAAW,WAAW;AAAA,QACtB,cAAc,WAAW;AAAA,MAAA,CAC1B;AAED,aAAO,KAAK,kBAAkB,WAAW,MAAM,WAAW,SAAS,WAAW;AAAA,QAC5E,OAAO,WAAW;AAAA,QAClB,WAAW,WAAW;AAAA,MAAA,CACvB;AAAA,IACH,UAAA;AACE,WAAK,OAAO,cAAc;AAC1B,WAAK,OAAO,eAAe,oBAAI,KAAA;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAmB,MAAuC;AACtE,UAAM,UAAU,KAAK,WAAW,KAAK,OAAO,eAAe;AAE3D,WAAO,IAAI,QAAqB,CAAC,SAAS,WAAW;AACnD,YAAM,QAAQ,WAAW,MAAM;AAC7B,eAAO,IAAI,MAAM,kCAAkC,OAAO,IAAI,CAAC;AAAA,MACjE,GAAG,OAAO;AAEV,WAAK,YAAY,IAAI,EAClB,KAAK,CAAC,WAAW;AAChB,qBAAa,KAAK;AAClB,gBAAQ,MAAM;AAAA,MAChB,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,qBAAa,KAAK;AAClB,eAAO,KAAK;AAAA,MACd,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAM,cAAc,MAA8D;AAEhF,QAAI,CAAC,KAAK,IAAI;AACZ,aAAO,EAAE,OAAO,OAAO,OAAO,sBAAA;AAAA,IAChC;AAEA,QAAI,CAAC,KAAK,aAAa;AACrB,aAAO,EAAE,OAAO,OAAO,OAAO,+BAAA;AAAA,IAChC;AAGA,QAAI,KAAK,gBAAgB,KAAK,aAAa,SAAS,GAAG;AACrD,YAAM,iBAAiB,KAAK,aAAa;AAAA,QACvC,CAAC,QAAQ,CAAC,KAAK,OAAO,eAAe,SAAS,GAAG;AAAA,MAAA;AAGnD,UAAI,eAAe,SAAS,GAAG;AAC7B,eAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAO,4BAA4B,eAAe,KAAK,IAAI,CAAC;AAAA,QAAA;AAAA,MAEhE;AAAA,IACF;AAEA,WAAO,EAAE,OAAO,KAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAgB,MAAS,WAA8C;AACrE,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACR,SAAS,KAAK,OAAO;AAAA,QACrB,WAAW,KAAK,OAAO;AAAA,QACvB,YAAW,oBAAI,KAAA,GAAO,YAAA;AAAA,MAAY;AAAA,IACpC;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKU,oBACR,MACA,WACA,WACgB;AAChB,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,SAAS,KAAK,iBAAiB,WAAW,oBAAI,MAAM;AAAA,MACpD,UAAU;AAAA,QACR,SAAS,KAAK,OAAO;AAAA,QACrB,WAAW,KAAK,OAAO;AAAA,MAAA;AAAA,IACzB;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKU,kBACR,MACA,SACA,WACA,SACa;AACb,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MAAA;AAAA,MAEL,SAAS,KAAK,iBAAiB,WAAW,oBAAI,MAAM;AAAA,MACpD,UAAU;AAAA,QACR,SAAS,KAAK,OAAO;AAAA,QACrB,WAAW,KAAK,OAAO;AAAA,MAAA;AAAA,IACzB;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,WAAiB,SAAiC;AACzE,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,QAAQ,YAAY,UAAU,QAAA;AAAA,MAC1C,aAAa,QAAQ,cAAA,EAAgB;AAAA,MACrC,SAAS;AAAA;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,eAAe,OAA4B;AACjD,QAAI,iBAAiB,OAAO;AAC1B,aAAO;AAAA,QACL,MAAM,MAAM,QAAQ;AAAA,QACpB,SAAS,MAAM;AAAA,QACf,OAAO,MAAM;AAAA,QACb,WAAW,KAAK,iBAAiB,KAAK;AAAA,MAAA;AAAA,IAE1C;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,OAAO,KAAK;AAAA,MACrB,WAAW;AAAA,IAAA;AAAA,EAEf;AAAA;AAAA;AAAA;AAAA,EAKU,iBAAiB,OAAyB;AAClD,QAAI,iBAAiB,OAAO;AAC1B,YAAM,UAAU,MAAM,QAAQ,YAAA;AAG9B,UACE,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,YAAY,KAC7B,QAAQ,SAAS,YAAY,KAC7B,QAAQ,SAAS,YAAY,GAC7B;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QAAuB;AAC3B,QAAI,KAAK,OAAO,WAAW,YAAY,SAAS;AAC9C,WAAK,OAAO,KAAK,eAAe;AAChC,WAAK,UAAU,YAAY,MAAM;AAAA,IACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAwB;AAC5B,QAAI,KAAK,OAAO,WAAW,YAAY,QAAQ;AAC7C,WAAK,OAAO,KAAK,gBAAgB;AACjC,WAAK,UAAU,YAAY,IAAI;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAA2B;AAC/B,SAAK,OAAO,KAAK,mBAAmB;AAGpC,UAAM,KAAK,QAAA;AAEX,SAAK,UAAU,YAAY,UAAU;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,UAAyB;AAAA,EAEzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAAY,SAAsC;AACtD,SAAK,OAAO,MAAM,sBAAsB,QAAQ,EAAE,IAAI;AAAA,MACpD,MAAM,QAAQ;AAAA,MACd,eAAe,QAAQ;AAAA,IAAA,CACxB;AAID,SAAK,OAAO,MAAM,mBAAmB,EAAE,SAAS,QAAQ,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,SAAsC;AACzD,SAAK,OAAO,MAAM,yBAAyB,QAAQ,IAAI,IAAI;AAAA,MACzD,MAAM,QAAQ;AAAA,MACd,eAAe,QAAQ;AAAA,IAAA,CACxB;AAED,UAAM,UAAU,KAAK,gBAAgB,IAAI,QAAQ,IAAI;AACrD,QAAI,SAAS;AACX,YAAM,QAAQ,OAAO;AAAA,IACvB,OAAO;AACL,WAAK,OAAO,KAAK,gCAAgC,QAAQ,IAAI,EAAE;AAAA,IACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,uBACR,MACA,SACM;AACN,SAAK,gBAAgB,IAAI,MAAM,OAAO;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKQ,iCAAuC;AAE7C,SAAK,uBAAuB,YAAY,QAAQ,OAAO,YAAY;AACjE,YAAM,KAAK,YAAY;AAAA,QACrB,IAAI,GAAG,KAAK,IAAA,CAAK;AAAA,QACjB,MAAM,YAAY;AAAA,QAClB,MAAM,KAAK,OAAO;AAAA,QAClB,IAAI,QAAQ;AAAA,QACZ,+BAAe,KAAA;AAAA,QACf,eAAe,QAAQ;AAAA,QACvB,SAAS;AAAA,UACP,SAAS,KAAK,OAAO;AAAA,UACrB,QAAQ,KAAK,OAAO;AAAA,UACpB,aAAa,KAAK,OAAO,aAAa;AAAA,QAAA;AAAA,MACxC,CACD;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,qBAAqB,SAAkC;AACrD,SAAK,oBAAoB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,yBAAyB,SAAwB;AAC/C,SAAK,wBAAwB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASU,gBACR,QACA,WAAoC,IACrB;AACf,QAAI,CAAC,KAAK,mBAAmB,aAAa;AACxC,aAAO;AAAA,IACT;AAEA,SAAK,sBAAsB,KAAK,kBAAkB,gBAAgB,QAAQ;AAAA,MACxE,GAAG;AAAA,MACH,SAAS,KAAK,OAAO;AAAA,MACrB,WAAW,KAAK,OAAO;AAAA,MACvB,WAAW,KAAK,OAAO;AAAA,IAAA,CACxB;AAED,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUU,WACR,QACA,aACA,YACA,UACM;AACN,QAAI,CAAC,KAAK,qBAAqB,CAAC,KAAK,qBAAqB;AACxD;AAAA,IACF;AAEA,SAAK,kBAAkB,WAAW,KAAK,qBAAqB;AAAA,MAC1D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAgB,mBACd,SACA,WAAoC,IACZ;AACxB,QAAI,CAAC,KAAK,qBAAqB,CAAC,KAAK,qBAAqB;AACxD,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,MAAM,KAAK,kBAAkB;AAAA,MAC5C,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IAAA;AAGF,SAAK,sBAAsB;AAC3B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,gBAAgB,QAAsB;AAC9C,QAAI,CAAC,KAAK,qBAAqB,CAAC,KAAK,qBAAqB;AACxD;AAAA,IACF;AAEA,SAAK,kBAAkB,gBAAgB,KAAK,qBAAqB,MAAM;AACvE,SAAK,sBAAsB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAgC;AAC9B,WAAO,KAAK,wBAAwB;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,wBAIS;AACP,QAAI,CAAC,KAAK,qBAAqB,CAAC,KAAK,qBAAqB;AACxD,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,kBAAkB,YAAY,KAAK,mBAAmB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAgB,kBACd,UACA,MACA,QACe;AACf,QAAI,CAAC,KAAK,OAAO,YAAY,SAAS;AACpC;AAAA,IACF;AAEA,UAAM,YAAY,KAAK,OAAO,WAAW,aAAa;AAEtD,SAAK,OAAO,MAAM,6BAA6B,QAAQ,IAAI;AAAA,MACzD;AAAA,MACA,QAAQ,KAAK;AAAA,IAAA,CACd;AAGD,UAAM,cAAc,KAAK,oBAAoB,UAAU,MAAM,MAAM;AAEnE,SAAK,OAAO,MAAM,4BAA4B,EAAE,SAAS,aAAa;AAAA,EAIxE;AAAA;AAAA;AAAA;AAAA,EAKQ,oBACN,UACA,MACA,QACQ;AACR,UAAM,YAAY,KAAK,OAAO,YAAY,aAAa;AAEvD,YAAQ,UAAA;AAAA,MACN,KAAK;AACH,eAAO,uDAAuD,KAAK,WAAW;AAAA,MAEhF,KAAK;AACH,eAAO,oDAAoD,KAAK,EAAE;AAAA,MAEpE,KAAK;AACH,eAAO,uDAAuD,SAAS,UAAU,KAAK,OAAO,EAAE,SAAS,KAAK,EAAE;AAAA,MAEjH;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,cAAc,KAAa,OAA+B;AACxE,QAAI,CAAC,KAAK,OAAO,YAAY,SAAS;AACpC;AAAA,IACF;AAEA,UAAM,YAAY,KAAK,OAAO,WAAW,aAAa;AAEtD,SAAK,OAAO,MAAM,iCAAiC,EAAE,WAAW,KAAK;AAIrE,SAAK,OAAO,MAAM,gBAAgB;AAAA,MAChC,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,OAAO,KAAK,UAAU,KAAK,EAAE,MAAM,GAAG,GAAG;AAAA,IAAA,CAC1C;AAAA,EACH;AACF;AASO,SAAS,WACd,aACA,SACW;AACX,SAAO;AAAA,IACL,IAAI,aAAA;AAAA,IACJ;AAAA,IACA,UAAU,SAAS,YAAY,aAAa;AAAA,IAC5C,OAAO,SAAS,SAAS,CAAA;AAAA,IACzB,gBAAgB,SAAS;AAAA,IACzB,cAAc,SAAS;AAAA,IACvB,SAAS,SAAS;AAAA,IAClB,UAAU,SAAS;AAAA,IACnB,+BAAe,KAAA;AAAA,IACf,UAAU,SAAS;AAAA,EAAA;AAEvB;AAKO,SAAS,cAAc,KAAkC;AAC9D,SACE,OAAO,QAAQ,YACf,QAAQ,QACR,aAAa,OACb,OAAQ,IAAoB,YAAY;AAE5C;AAKO,SAAS,aAAa,KAAiC;AAC5D,SACE,OAAO,QAAQ,YACf,QAAQ,QACR,UAAU,OACV,aAAa,OACb,OAAQ,IAAmB,SAAS,YACpC,OAAQ,IAAmB,YAAY;AAE3C;"}
1
+ {"version":3,"file":"base-agent.js","sources":["../../src/agents/base-agent.ts"],"sourcesContent":["/**\n * Base Agent Implementation\n *\n * Abstract base class for all agents providing common functionality\n * including task execution, input validation, output formatting,\n * error handling, and optional claude-flow integration.\n *\n * @module agents/base-agent\n */\n\nimport { getLogger, retry, type Logger, type RetryOptions } from '../utils/index.js';\nimport {\n AgentType,\n AgentStatus,\n TaskPriority,\n MessageType,\n type AgentConfig,\n type AgentInstance,\n type AgentState,\n type AgentTask,\n type AgentResult,\n type AgentError,\n type AgentMessage,\n type ExecutionMetrics,\n type ResultArtifact,\n createAgentId,\n createTaskId,\n} from './types.js';\nimport {\n TrajectoryTracker,\n type TrajectoryTrackerConfig,\n} from '../learning/services/trajectory-tracker.js';\nimport type { TrajectoryStep } from '../integrations/agentic-flow/adapters/reasoning-bank-adapter.js';\n\n// ============================================================================\n// Base Agent Abstract Class\n// ============================================================================\n\n/**\n * Abstract base class for all agents\n *\n * Provides common functionality that all agents share, including:\n * - Task execution with timeout and retry handling\n * - Input validation\n * - Output formatting\n * - Error handling and logging\n * - Optional claude-flow hooks integration\n *\n * @example\n * ```typescript\n * class ResearchAgent extends BaseAgent {\n * protected async executeTask(task: AgentTask): Promise<AgentResult> {\n * // Implementation specific to researcher agent\n * const results = await this.searchSources(task.input);\n * return this.formatOutput(results);\n * }\n * }\n * ```\n */\nexport abstract class BaseAgent implements AgentInstance {\n /** Agent configuration */\n public readonly config: AgentConfig;\n\n /** Agent runtime state */\n private _state: AgentState;\n\n /** Logger instance */\n protected readonly logger: Logger;\n\n /** Message handlers for different message types */\n private messageHandlers: Map<MessageType, (message: AgentMessage) => Promise<void>> =\n new Map();\n\n /** Trajectory tracker for learning */\n protected trajectoryTracker: TrajectoryTracker | null = null;\n\n /** Current active trajectory ID */\n protected currentTrajectoryId: string | null = null;\n\n /** Whether to auto-track trajectories */\n protected autoTrackTrajectories: boolean = true;\n\n constructor(config: AgentConfig) {\n // Ensure ID is set\n this.config = {\n ...config,\n id: config.id ?? createAgentId(config.type),\n };\n\n // Initialize state\n this._state = {\n id: this.config.id!,\n status: AgentStatus.IDLE,\n taskQueue: [],\n completedTasks: [],\n lastActivity: new Date(),\n errorCount: 0,\n };\n\n // Create logger\n this.logger = getLogger().child(`agent:${this.config.name}`);\n\n // Register default message handlers\n this.registerDefaultMessageHandlers();\n }\n\n // ============================================================================\n // State Management\n // ============================================================================\n\n /**\n * Get current agent state\n */\n get state(): AgentState {\n return { ...this._state };\n }\n\n /**\n * Get current agent status\n */\n getStatus(): AgentStatus {\n return this._state.status;\n }\n\n /**\n * Update agent status\n */\n protected setStatus(status: AgentStatus): void {\n const previousStatus = this._state.status;\n this._state.status = status;\n this._state.lastActivity = new Date();\n\n if (previousStatus !== status) {\n this.logger.debug(`Status changed: ${previousStatus} -> ${status}`);\n }\n }\n\n // ============================================================================\n // Task Execution\n // ============================================================================\n\n /**\n * Execute a task\n *\n * This is the main entry point for task execution. It handles:\n * - Pre-task hooks (if enabled)\n * - Input validation\n * - Retry logic\n * - Timeout handling\n * - Post-task hooks (if enabled)\n * - Error handling and logging\n */\n async execute(task: AgentTask): Promise<AgentResult> {\n const startTime = new Date();\n\n this.logger.info(`Executing task: ${task.id}`, {\n description: task.description,\n priority: task.priority,\n });\n\n // Run pre-task hook if enabled\n if (this.config.claudeFlow?.hooks?.preTask) {\n await this.runClaudeFlowHook('pre-task', task);\n }\n\n // Start trajectory tracking if enabled\n if (this.autoTrackTrajectories && this.trajectoryTracker?.isEnabled()) {\n this.startTrajectory(task.id, {\n description: task.description,\n priority: task.priority,\n input: task.input,\n });\n this.recordStep('task_started', `Starting task: ${task.description}`, 1.0);\n }\n\n try {\n // Validate input\n const validationResult = await this.validateInput(task);\n if (!validationResult.valid) {\n this.recordStep('validation_failed', validationResult.error ?? 'Input validation failed', 0.0);\n await this.completeTrajectory('failure', { validationError: validationResult.error });\n return this.createErrorResult(\n 'VALIDATION_ERROR',\n validationResult.error ?? 'Input validation failed',\n startTime\n );\n }\n\n this.recordStep('validation_passed', 'Input validation successful', 1.0);\n\n // Set status to running\n this.setStatus(AgentStatus.RUNNING);\n this._state.currentTask = task;\n\n // Execute with retry if configured\n let result: AgentResult;\n const retryConfig = this.config.retry;\n\n if (retryConfig && retryConfig.maxRetries > 0) {\n const retryOptions: RetryOptions = {\n maxRetries: retryConfig.maxRetries,\n initialDelay: retryConfig.backoffMs,\n backoffFactor: retryConfig.backoffMultiplier ?? 2,\n isRetryable: (error: unknown) => this.isRetryableError(error),\n };\n\n result = await retry(\n async () => this.executeWithTimeout(task),\n retryOptions\n );\n } else {\n result = await this.executeWithTimeout(task);\n }\n\n // Update state on success\n if (result.success) {\n this._state.completedTasks.push(task.id);\n this.setStatus(AgentStatus.COMPLETED);\n this.recordStep('task_completed', 'Task completed successfully', 1.0, { success: true });\n await this.completeTrajectory('success', {\n durationMs: result.metrics?.durationMs,\n artifactCount: result.artifacts?.length ?? 0,\n });\n } else {\n this._state.errorCount++;\n this.setStatus(AgentStatus.FAILED);\n this.recordStep('task_failed', result.error?.message ?? 'Task failed', 0.0, { error: result.error });\n await this.completeTrajectory('failure', {\n errorCode: result.error?.code,\n errorMessage: result.error?.message,\n });\n }\n\n // Add metrics\n result.metrics = this.calculateMetrics(startTime, new Date());\n\n // Run post-task hook if enabled\n if (this.config.claudeFlow?.hooks?.postTask) {\n await this.runClaudeFlowHook('post-task', task, result);\n }\n\n return result;\n } catch (error) {\n this._state.errorCount++;\n this.setStatus(AgentStatus.FAILED);\n\n const agentError = this.normalizeError(error);\n this.logger.error(`Task execution failed: ${task.id}`, error as Error);\n\n // Record trajectory failure\n this.recordStep('task_exception', agentError.message, 0.0, {\n errorCode: agentError.code,\n stack: agentError.stack,\n });\n await this.completeTrajectory('failure', {\n exception: true,\n errorCode: agentError.code,\n errorMessage: agentError.message,\n });\n\n return this.createErrorResult(agentError.code, agentError.message, startTime, {\n stack: agentError.stack,\n retryable: agentError.retryable,\n });\n } finally {\n this._state.currentTask = undefined;\n this._state.lastActivity = new Date();\n }\n }\n\n /**\n * Execute task with timeout\n */\n private async executeWithTimeout(task: AgentTask): Promise<AgentResult> {\n const timeout = task.timeout ?? this.config.taskTimeout ?? 30000;\n\n return new Promise<AgentResult>((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error(`Task execution timed out after ${timeout}ms`));\n }, timeout);\n\n this.executeTask(task)\n .then((result) => {\n clearTimeout(timer);\n resolve(result);\n })\n .catch((error) => {\n clearTimeout(timer);\n reject(error);\n });\n });\n }\n\n /**\n * Abstract method for actual task execution\n *\n * Subclasses must implement this method with their specific logic.\n */\n protected abstract executeTask(task: AgentTask): Promise<AgentResult>;\n\n // ============================================================================\n // Input Validation\n // ============================================================================\n\n /**\n * Validate task input\n *\n * Override this method to implement custom validation logic.\n */\n async validateInput(task: AgentTask): Promise<{ valid: boolean; error?: string }> {\n // Basic validation\n if (!task.id) {\n return { valid: false, error: 'Task ID is required' };\n }\n\n if (!task.description) {\n return { valid: false, error: 'Task description is required' };\n }\n\n // Check dependencies are resolved\n if (task.dependencies && task.dependencies.length > 0) {\n const unresolvedDeps = task.dependencies.filter(\n (dep) => !this._state.completedTasks.includes(dep)\n );\n\n if (unresolvedDeps.length > 0) {\n return {\n valid: false,\n error: `Unresolved dependencies: ${unresolvedDeps.join(', ')}`,\n };\n }\n }\n\n return { valid: true };\n }\n\n // ============================================================================\n // Output Formatting\n // ============================================================================\n\n /**\n * Format successful output\n */\n formatOutput<T>(data: T, artifacts?: ResultArtifact[]): AgentResult<T> {\n return {\n success: true,\n data,\n artifacts,\n metadata: {\n agentId: this.config.id,\n agentType: this.config.type,\n timestamp: new Date().toISOString(),\n },\n };\n }\n\n /**\n * Create a success result\n */\n protected createSuccessResult<T>(\n data: T,\n startTime: Date,\n artifacts?: ResultArtifact[]\n ): AgentResult<T> {\n return {\n success: true,\n data,\n artifacts,\n metrics: this.calculateMetrics(startTime, new Date()),\n metadata: {\n agentId: this.config.id,\n agentType: this.config.type,\n },\n };\n }\n\n /**\n * Create an error result\n */\n protected createErrorResult(\n code: string,\n message: string,\n startTime: Date,\n details?: Partial<AgentError>\n ): AgentResult {\n return {\n success: false,\n error: {\n code,\n message,\n ...details,\n },\n metrics: this.calculateMetrics(startTime, new Date()),\n metadata: {\n agentId: this.config.id,\n agentType: this.config.type,\n },\n };\n }\n\n /**\n * Calculate execution metrics\n */\n private calculateMetrics(startTime: Date, endTime: Date): ExecutionMetrics {\n return {\n startTime,\n endTime,\n durationMs: endTime.getTime() - startTime.getTime(),\n memoryUsage: process.memoryUsage?.().heapUsed,\n retries: 0, // Updated by retry logic if needed\n };\n }\n\n // ============================================================================\n // Error Handling\n // ============================================================================\n\n /**\n * Normalize error to AgentError format\n */\n private normalizeError(error: unknown): AgentError {\n if (error instanceof Error) {\n return {\n code: error.name || 'UNKNOWN_ERROR',\n message: error.message,\n stack: error.stack,\n retryable: this.isRetryableError(error),\n };\n }\n\n return {\n code: 'UNKNOWN_ERROR',\n message: String(error),\n retryable: false,\n };\n }\n\n /**\n * Check if an error is retryable\n */\n protected isRetryableError(error: unknown): boolean {\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n\n // Network/transient errors\n if (\n message.includes('timeout') ||\n message.includes('network') ||\n message.includes('connection') ||\n message.includes('econnreset') ||\n message.includes('rate limit')\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ============================================================================\n // Lifecycle Methods\n // ============================================================================\n\n /**\n * Pause the agent\n */\n async pause(): Promise<void> {\n if (this._state.status === AgentStatus.RUNNING) {\n this.logger.info('Pausing agent');\n this.setStatus(AgentStatus.PAUSED);\n }\n }\n\n /**\n * Resume the agent\n */\n async resume(): Promise<void> {\n if (this._state.status === AgentStatus.PAUSED) {\n this.logger.info('Resuming agent');\n this.setStatus(AgentStatus.IDLE);\n }\n }\n\n /**\n * Terminate the agent\n */\n async terminate(): Promise<void> {\n this.logger.info('Terminating agent');\n\n // Clean up any resources\n await this.cleanup();\n\n this.setStatus(AgentStatus.TERMINATED);\n }\n\n /**\n * Cleanup resources\n *\n * Override to implement custom cleanup logic.\n */\n protected async cleanup(): Promise<void> {\n // Default: no cleanup needed\n }\n\n // ============================================================================\n // Messaging\n // ============================================================================\n\n /**\n * Send a message to another agent\n */\n async sendMessage(message: AgentMessage): Promise<void> {\n this.logger.debug(`Sending message to ${message.to}`, {\n type: message.type,\n correlationId: message.correlationId,\n });\n\n // In a real implementation, this would use a message bus\n // For now, just log the message\n this.logger.trace('Message payload', { payload: message.payload });\n }\n\n /**\n * Receive and process a message\n */\n async receiveMessage(message: AgentMessage): Promise<void> {\n this.logger.debug(`Received message from ${message.from}`, {\n type: message.type,\n correlationId: message.correlationId,\n });\n\n const handler = this.messageHandlers.get(message.type);\n if (handler) {\n await handler(message);\n } else {\n this.logger.warn(`No handler for message type: ${message.type}`);\n }\n }\n\n /**\n * Register a message handler\n */\n protected registerMessageHandler(\n type: MessageType,\n handler: (message: AgentMessage) => Promise<void>\n ): void {\n this.messageHandlers.set(type, handler);\n }\n\n /**\n * Register default message handlers\n */\n private registerDefaultMessageHandlers(): void {\n // Handle status requests\n this.registerMessageHandler(MessageType.STATUS, async (message) => {\n await this.sendMessage({\n id: `${Date.now()}`,\n type: MessageType.STATUS,\n from: this.config.id!,\n to: message.from,\n timestamp: new Date(),\n correlationId: message.id,\n payload: {\n agentId: this.config.id,\n status: this._state.status,\n currentTask: this._state.currentTask?.id,\n },\n });\n });\n }\n\n // ============================================================================\n // Trajectory Tracking\n // ============================================================================\n\n /**\n * Set the trajectory tracker for this agent\n *\n * @param tracker - The trajectory tracker instance\n */\n setTrajectoryTracker(tracker: TrajectoryTracker): void {\n this.trajectoryTracker = tracker;\n }\n\n /**\n * Enable or disable auto-tracking of trajectories\n *\n * @param enabled - Whether to auto-track\n */\n setAutoTrackTrajectories(enabled: boolean): void {\n this.autoTrackTrajectories = enabled;\n }\n\n /**\n * Start tracking a task trajectory\n *\n * @param taskId - The task ID to track\n * @param metadata - Optional metadata\n * @returns The trajectory ID\n */\n protected startTrajectory(\n taskId: string,\n metadata: Record<string, unknown> = {}\n ): string | null {\n if (!this.trajectoryTracker?.isEnabled()) {\n return null;\n }\n\n this.currentTrajectoryId = this.trajectoryTracker.startTrajectory(taskId, {\n ...metadata,\n agentId: this.config.id,\n agentType: this.config.type,\n agentName: this.config.name,\n });\n\n return this.currentTrajectoryId;\n }\n\n /**\n * Record a step in the current trajectory\n *\n * @param action - The action taken\n * @param observation - The observation/result\n * @param confidence - Optional confidence score (0-1)\n * @param metadata - Optional step metadata\n */\n protected recordStep(\n action: string,\n observation: string,\n confidence?: number,\n metadata?: Record<string, unknown>\n ): void {\n if (!this.trajectoryTracker || !this.currentTrajectoryId) {\n return;\n }\n\n this.trajectoryTracker.recordStep(this.currentTrajectoryId, {\n action,\n observation,\n confidence,\n metadata,\n });\n }\n\n /**\n * Complete the current trajectory\n *\n * @param outcome - The task outcome\n * @param metadata - Optional final metadata\n * @returns The stored trajectory ID, or null\n */\n protected async completeTrajectory(\n outcome: 'success' | 'failure' | 'partial',\n metadata: Record<string, unknown> = {}\n ): Promise<string | null> {\n if (!this.trajectoryTracker || !this.currentTrajectoryId) {\n return null;\n }\n\n const storedId = await this.trajectoryTracker.completeTrajectory(\n this.currentTrajectoryId,\n outcome,\n metadata\n );\n\n this.currentTrajectoryId = null;\n return storedId;\n }\n\n /**\n * Abort the current trajectory\n *\n * @param reason - The reason for aborting\n */\n protected abortTrajectory(reason: string): void {\n if (!this.trajectoryTracker || !this.currentTrajectoryId) {\n return;\n }\n\n this.trajectoryTracker.abortTrajectory(this.currentTrajectoryId, reason);\n this.currentTrajectoryId = null;\n }\n\n /**\n * Check if trajectory tracking is active\n */\n isTrackingTrajectory(): boolean {\n return this.currentTrajectoryId !== null;\n }\n\n /**\n * Get current trajectory progress\n */\n getTrajectoryProgress(): {\n stepCount: number;\n duration: number;\n lastStep?: TrajectoryStep;\n } | null {\n if (!this.trajectoryTracker || !this.currentTrajectoryId) {\n return null;\n }\n\n return this.trajectoryTracker.getProgress(this.currentTrajectoryId);\n }\n\n // ============================================================================\n // Claude-Flow Integration\n // ============================================================================\n\n /**\n * Run a claude-flow hook\n */\n protected async runClaudeFlowHook(\n hookType: 'pre-task' | 'post-task' | 'post-edit',\n task: AgentTask,\n result?: AgentResult\n ): Promise<void> {\n if (!this.config.claudeFlow?.enabled) {\n return;\n }\n\n const namespace = this.config.claudeFlow.namespace ?? 'knowledge-graph';\n\n this.logger.debug(`Running claude-flow hook: ${hookType}`, {\n namespace,\n taskId: task.id,\n });\n\n // Generate the hook command that would be run\n const hookCommand = this.generateHookCommand(hookType, task, result);\n\n this.logger.trace('Claude-flow hook command', { command: hookCommand });\n\n // In production, this would execute via child_process or MCP\n // For now, we just log the intent\n }\n\n /**\n * Generate claude-flow hook command\n */\n private generateHookCommand(\n hookType: 'pre-task' | 'post-task' | 'post-edit',\n task: AgentTask,\n result?: AgentResult\n ): string {\n const namespace = this.config.claudeFlow?.namespace ?? 'knowledge-graph';\n\n switch (hookType) {\n case 'pre-task':\n return `claude-flow hooks pre-task --description \"${task.description}\"`;\n\n case 'post-task':\n return `claude-flow hooks post-task --task-id \"${task.id}\"`;\n\n case 'post-edit':\n return `claude-flow hooks post-edit --memory-key \"${namespace}/agent/${this.config.id}/task/${task.id}\"`;\n\n default:\n return '';\n }\n }\n\n /**\n * Store result in claude-flow memory\n */\n protected async storeInMemory(key: string, value: unknown): Promise<void> {\n if (!this.config.claudeFlow?.enabled) {\n return;\n }\n\n const namespace = this.config.claudeFlow.namespace ?? 'knowledge-graph';\n\n this.logger.debug('Storing in claude-flow memory', { namespace, key });\n\n // This would call the MCP memory_usage tool\n // For now, just log the intent\n this.logger.trace('Memory store', {\n action: 'store',\n namespace,\n key,\n value: JSON.stringify(value).slice(0, 100),\n });\n }\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a task with defaults\n */\nexport function createTask(\n description: string,\n options?: Partial<Omit<AgentTask, 'id' | 'description' | 'createdAt'>>\n): AgentTask {\n return {\n id: createTaskId(),\n description,\n priority: options?.priority ?? TaskPriority.MEDIUM,\n input: options?.input ?? {},\n expectedOutput: options?.expectedOutput,\n dependencies: options?.dependencies,\n timeout: options?.timeout,\n metadata: options?.metadata,\n createdAt: new Date(),\n deadline: options?.deadline,\n };\n}\n\n/**\n * Type guard for checking if an object is an AgentResult\n */\nexport function isAgentResult(obj: unknown): obj is AgentResult {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'success' in obj &&\n typeof (obj as AgentResult).success === 'boolean'\n );\n}\n\n/**\n * Type guard for checking if an object is an AgentError\n */\nexport function isAgentError(obj: unknown): obj is AgentError {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'code' in obj &&\n 'message' in obj &&\n typeof (obj as AgentError).code === 'string' &&\n typeof (obj as AgentError).message === 'string'\n );\n}\n"],"names":[],"mappings":"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"}
@@ -125,7 +125,7 @@ function createCultivateCommand() {
125
125
  const hasClaudeFlow = await checkClaudeFlowAvailable();
126
126
  if (!hasClaudeFlow) {
127
127
  console.log(chalk.yellow(" ⚠️ claude-flow not available"));
128
- console.log(chalk.gray(" Install with: npm install -g claude-flow@alpha"));
128
+ console.log(chalk.gray(" Install with: npm install -g claude-flow"));
129
129
  result.warnings.push("claude-flow not available for deep analysis");
130
130
  } else {
131
131
  if (dryRun) {
@@ -240,9 +240,14 @@ function displaySummary(result, dryRun) {
240
240
  }
241
241
  }
242
242
  async function checkClaudeFlowAvailable() {
243
+ const { execSync } = await import("child_process");
243
244
  try {
244
- const { execSync } = await import("child_process");
245
- execSync("npx claude-flow@alpha --version", { stdio: "pipe", timeout: 5e3 });
245
+ execSync("claude-flow --version", { stdio: "pipe", timeout: 5e3 });
246
+ return true;
247
+ } catch {
248
+ }
249
+ try {
250
+ execSync("npx claude-flow --version", { stdio: "pipe", timeout: 3e4 });
246
251
  return true;
247
252
  } catch {
248
253
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"cultivate.js","sources":["../../../src/cli/commands/cultivate.ts"],"sourcesContent":["/**\n * Cultivate Command - Systematically enhance the knowledge graph\n *\n * This command provides cultivation tasks:\n * - Seed primitives from codebase analysis\n * - Deep analysis with claude-flow integration\n * - Graph enhancement and optimization\n *\n * @module cli/commands/cultivate\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { resolve, join, relative } from 'path';\nimport { existsSync, mkdirSync, readFileSync, readdirSync, statSync } from 'fs';\nimport { SeedGenerator } from '../../cultivation/seed-generator.js';\nimport { ShadowCache, loadShadowCache } from '../../core/cache.js';\nimport type { CultivationOptions, Ecosystem, SeedAnalysis } from '../../cultivation/types.js';\n\n/**\n * Cultivation result\n */\ninterface CultivationResult {\n success: boolean;\n seed: {\n created: number;\n documents: Array<{ title: string; path: string; type: string }>;\n };\n analysis: {\n filesProcessed: number;\n dependenciesFound: number;\n servicesFound: number;\n };\n cache: {\n updated: number;\n hits: number;\n misses: number;\n };\n duration: number;\n warnings: string[];\n errors: string[];\n}\n\n/**\n * Create cultivate command\n */\nexport function createCultivateCommand(): Command {\n return new Command('cultivate')\n .description('Systematically cultivate and enhance the knowledge graph')\n .argument('[path]', 'Directory to cultivate (defaults to current directory)', '.')\n .option('--dry-run', 'Preview changes without executing', false)\n .option('-d, --docs <path>', 'Documentation path', 'docs')\n .option('-v, --verbose', 'Verbose output', false)\n .option('--seed', 'Bootstrap vault with primitives from codebase analysis', false)\n .option('--deep-analysis', 'Use claude-flow agents for deep analysis', false)\n .option('--cache', 'Use shadow cache for incremental updates', true)\n .option('--ecosystem <ecosystems>', 'Filter to specific ecosystems (comma-separated)', undefined)\n .option('--include-dev', 'Include dev dependencies', false)\n .option('--major-only', 'Only process major dependencies', false)\n .option('--refresh-cache', 'Force refresh the shadow cache', false)\n .action(async (targetPath: string, options: {\n dryRun?: boolean;\n docs?: string;\n verbose?: boolean;\n seed?: boolean;\n deepAnalysis?: boolean;\n cache?: boolean;\n ecosystem?: string;\n includeDev?: boolean;\n majorOnly?: boolean;\n refreshCache?: boolean;\n }) => {\n const projectRoot = resolve(targetPath);\n const docsPath = options.docs || 'docs';\n const verbose = options.verbose || false;\n const dryRun = options.dryRun || false;\n\n console.log(chalk.bold.green('\\n🌱 Knowledge Graph Cultivator\\n'));\n console.log(` Project: ${projectRoot}`);\n console.log(` Docs: ${docsPath}`);\n if (dryRun) {\n console.log(` Mode: ${chalk.yellow('Dry Run')}`);\n }\n console.log('');\n\n // Determine tasks\n const tasks = {\n seed: options.seed || false,\n deepAnalysis: options.deepAnalysis || false,\n };\n\n // If no tasks selected, show help\n if (!tasks.seed && !tasks.deepAnalysis) {\n console.log(chalk.yellow('💡 No tasks selected. Use one or more of:'));\n console.log(' --seed Bootstrap vault with primitives from codebase');\n console.log(' --deep-analysis Use claude-flow for deep codebase analysis');\n console.log('');\n console.log(chalk.gray('Options:'));\n console.log(' --dry-run Preview without writing files');\n console.log(' --cache Use shadow cache for incremental updates (default: true)');\n console.log(' --refresh-cache Force refresh the shadow cache');\n console.log(' --ecosystem Filter to ecosystems (nodejs,python,rust,go,php,java)');\n console.log(' --include-dev Include dev dependencies');\n console.log(' --major-only Only process major dependencies');\n console.log('');\n console.log('Run \"kg cultivate --help\" for more options');\n return;\n }\n\n const startTime = Date.now();\n const result: CultivationResult = {\n success: true,\n seed: { created: 0, documents: [] },\n analysis: { filesProcessed: 0, dependenciesFound: 0, servicesFound: 0 },\n cache: { updated: 0, hits: 0, misses: 0 },\n duration: 0,\n warnings: [],\n errors: [],\n };\n\n try {\n // Initialize shadow cache\n let cache: ShadowCache | undefined;\n if (options.cache !== false) {\n console.log(chalk.cyan('📦 Initializing shadow cache...'));\n cache = await loadShadowCache(projectRoot);\n\n if (options.refreshCache) {\n cache.clear();\n console.log(chalk.gray(' Cache cleared (refresh mode)'));\n }\n\n const stats = cache.getStats();\n console.log(chalk.gray(` Entries: ${stats.totalEntries}, Hit rate: ${(stats.hitRate * 100).toFixed(1)}%`));\n console.log('');\n }\n\n // Task 1: Seed primitives\n if (tasks.seed) {\n console.log(chalk.cyan('🌱 Seeding primitives from codebase...\\n'));\n\n // Parse ecosystem filter\n let ecosystems: Ecosystem[] | undefined;\n if (options.ecosystem) {\n ecosystems = options.ecosystem.split(',').map(e => e.trim() as Ecosystem);\n console.log(chalk.gray(` Ecosystems: ${ecosystems.join(', ')}`));\n }\n\n // Create generator\n const generator = await SeedGenerator.create(projectRoot, docsPath);\n\n // Analyze\n console.log(chalk.gray(' Analyzing codebase...'));\n const analysis = await generator.analyze();\n\n result.analysis = {\n filesProcessed: analysis.metadata.filesScanned,\n dependenciesFound: analysis.dependencies.length,\n servicesFound: analysis.services.length,\n };\n\n // Display analysis\n console.log(`\\n ${chalk.bold('Analysis Results:')}`);\n console.log(` Languages: ${analysis.languages.join(', ') || 'none'}`);\n console.log(` Dependencies: ${analysis.dependencies.length}`);\n console.log(` Frameworks: ${analysis.frameworks.length}`);\n console.log(` Services: ${analysis.services.length}`);\n console.log(` Deployments: ${analysis.deployments.length}`);\n\n if (verbose) {\n displayDetailedAnalysis(analysis);\n }\n\n console.log('');\n\n // Generate primitives\n console.log(chalk.gray(' Generating primitive nodes...'));\n const documents = await generator.generatePrimitives(analysis);\n\n if (dryRun) {\n console.log(`\\n ${chalk.yellow('[DRY RUN]')} Would create ${documents.length} primitives:`);\n for (const doc of documents.slice(0, 10)) {\n console.log(` - ${doc.frontmatter.type}: ${doc.title}`);\n }\n if (documents.length > 10) {\n console.log(` ... and ${documents.length - 10} more`);\n }\n result.seed.documents = documents.map(d => ({\n title: d.title,\n path: d.path,\n type: d.frontmatter.type || 'unknown',\n }));\n } else {\n const writeResult = await generator.writePrimitives(documents);\n result.seed.created = writeResult.documentsGenerated.length;\n result.seed.documents = writeResult.documentsGenerated;\n\n console.log(`\\n ${chalk.green('✓')} Created ${writeResult.documentsGenerated.length} primitives`);\n\n if (writeResult.warnings.length > 0) {\n result.warnings.push(...writeResult.warnings);\n if (verbose) {\n console.log(chalk.yellow(` Warnings: ${writeResult.warnings.length}`));\n }\n }\n\n if (writeResult.errors.length > 0) {\n result.errors.push(...writeResult.errors);\n console.log(chalk.red(` Errors: ${writeResult.errors.length}`));\n }\n }\n\n console.log('');\n }\n\n // Task 2: Deep Analysis with claude-flow\n if (tasks.deepAnalysis) {\n console.log(chalk.cyan('🧠 Running deep analysis with claude-flow...\\n'));\n\n // Check if claude-flow is available\n const hasClaudeFlow = await checkClaudeFlowAvailable();\n\n if (!hasClaudeFlow) {\n console.log(chalk.yellow(' ⚠️ claude-flow not available'));\n console.log(chalk.gray(' Install with: npm install -g claude-flow@alpha'));\n result.warnings.push('claude-flow not available for deep analysis');\n } else {\n if (dryRun) {\n console.log(chalk.yellow(' [DRY RUN] Would spawn claude-flow agents:'));\n console.log(' - Researcher: Analyze codebase patterns');\n console.log(' - Analyst: Identify architectural decisions');\n console.log(' - Coder: Detect implementation patterns');\n console.log(' - Tester: Analyze testing coverage');\n } else {\n // Import and run DeepAnalyzer\n try {\n const { DeepAnalyzer } = await import('../../cultivation/deep-analyzer.js');\n const analyzer = new DeepAnalyzer({\n projectRoot,\n docsPath,\n verbose,\n });\n\n const deepResult = await analyzer.analyze();\n\n console.log(` ${chalk.green('✓')} Deep analysis complete`);\n console.log(` Agents spawned: ${deepResult.agentsSpawned}`);\n console.log(` Insights generated: ${deepResult.insightsCount}`);\n console.log(` Documentation created: ${deepResult.documentsCreated}`);\n } catch (error) {\n result.errors.push(`Deep analysis failed: ${error instanceof Error ? error.message : String(error)}`);\n console.log(chalk.red(` ✗ Deep analysis failed: ${error instanceof Error ? error.message : String(error)}`));\n }\n }\n }\n\n console.log('');\n }\n\n // Update cache\n if (cache) {\n const stats = cache.getStats();\n result.cache = {\n updated: stats.totalEntries,\n hits: stats.hitCount,\n misses: stats.missCount,\n };\n\n await cache.save();\n }\n\n result.duration = Date.now() - startTime;\n result.success = result.errors.length === 0;\n\n // Final summary\n displaySummary(result, dryRun);\n\n } catch (error) {\n console.error(chalk.red('\\n❌ Cultivation failed:'), error);\n process.exit(1);\n }\n });\n}\n\n/**\n * Display detailed analysis output\n */\nfunction displayDetailedAnalysis(analysis: SeedAnalysis): void {\n if (analysis.frameworks.length > 0) {\n console.log(`\\n ${chalk.gray('Frameworks:')}`);\n for (const fw of analysis.frameworks) {\n console.log(` - ${fw.name} (${fw.ecosystem}) v${fw.version}`);\n }\n }\n\n if (analysis.services.length > 0) {\n console.log(`\\n ${chalk.gray('Services:')}`);\n for (const svc of analysis.services) {\n console.log(` - ${svc.name}: ${svc.type} (${svc.technology})`);\n }\n }\n\n if (analysis.deployments.length > 0) {\n console.log(`\\n ${chalk.gray('Deployments:')}`);\n for (const dep of analysis.deployments) {\n console.log(` - ${dep}`);\n }\n }\n}\n\n/**\n * Display cultivation summary\n */\nfunction displaySummary(result: CultivationResult, dryRun: boolean): void {\n console.log(chalk.bold.blue('📊 Cultivation Summary\\n'));\n\n if (dryRun) {\n console.log(chalk.yellow('[DRY RUN] No changes were made\\n'));\n }\n\n console.log(' Analysis:');\n console.log(` Files processed: ${result.analysis.filesProcessed}`);\n console.log(` Dependencies: ${result.analysis.dependenciesFound}`);\n console.log(` Services: ${result.analysis.servicesFound}`);\n\n if (result.seed.created > 0 || result.seed.documents.length > 0) {\n console.log('\\n Seed:');\n console.log(` Primitives ${dryRun ? 'would create' : 'created'}: ${dryRun ? result.seed.documents.length : result.seed.created}`);\n }\n\n if (result.cache.updated > 0) {\n console.log('\\n Cache:');\n console.log(` Entries: ${result.cache.updated}`);\n const hitRate = result.cache.hits + result.cache.misses > 0\n ? (result.cache.hits / (result.cache.hits + result.cache.misses) * 100).toFixed(1)\n : 0;\n console.log(` Hit rate: ${hitRate}%`);\n }\n\n console.log(`\\n Duration: ${(result.duration / 1000).toFixed(2)}s`);\n\n if (result.warnings.length > 0) {\n console.log(chalk.yellow(`\\n ⚠️ Warnings: ${result.warnings.length}`));\n for (const warning of result.warnings.slice(0, 5)) {\n console.log(chalk.gray(` - ${warning}`));\n }\n }\n\n if (result.errors.length > 0) {\n console.log(chalk.red(`\\n ❌ Errors: ${result.errors.length}`));\n for (const error of result.errors.slice(0, 5)) {\n console.log(chalk.gray(` - ${error}`));\n }\n }\n\n if (result.success && !dryRun) {\n console.log(chalk.bold.green('\\n✨ Cultivation complete!\\n'));\n } else if (!result.success) {\n console.log(chalk.yellow('\\n⚠️ Cultivation completed with errors\\n'));\n } else {\n console.log(chalk.gray('\\nRun without --dry-run to apply changes\\n'));\n }\n}\n\n/**\n * Check if claude-flow is available\n */\nasync function checkClaudeFlowAvailable(): Promise<boolean> {\n try {\n const { execSync } = await import('child_process');\n execSync('npx claude-flow@alpha --version', { stdio: 'pipe', timeout: 5000 });\n return true;\n } catch {\n return false;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cultivate.js","sources":["../../../src/cli/commands/cultivate.ts"],"sourcesContent":["/**\n * Cultivate Command - Systematically enhance the knowledge graph\n *\n * This command provides cultivation tasks:\n * - Seed primitives from codebase analysis\n * - Deep analysis with claude-flow integration\n * - Graph enhancement and optimization\n *\n * @module cli/commands/cultivate\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { resolve, join, relative } from 'path';\nimport { existsSync, mkdirSync, readFileSync, readdirSync, statSync } from 'fs';\nimport { SeedGenerator } from '../../cultivation/seed-generator.js';\nimport { ShadowCache, loadShadowCache } from '../../core/cache.js';\nimport type { CultivationOptions, Ecosystem, SeedAnalysis } from '../../cultivation/types.js';\n\n/**\n * Cultivation result\n */\ninterface CultivationResult {\n success: boolean;\n seed: {\n created: number;\n documents: Array<{ title: string; path: string; type: string }>;\n };\n analysis: {\n filesProcessed: number;\n dependenciesFound: number;\n servicesFound: number;\n };\n cache: {\n updated: number;\n hits: number;\n misses: number;\n };\n duration: number;\n warnings: string[];\n errors: string[];\n}\n\n/**\n * Create cultivate command\n */\nexport function createCultivateCommand(): Command {\n return new Command('cultivate')\n .description('Systematically cultivate and enhance the knowledge graph')\n .argument('[path]', 'Directory to cultivate (defaults to current directory)', '.')\n .option('--dry-run', 'Preview changes without executing', false)\n .option('-d, --docs <path>', 'Documentation path', 'docs')\n .option('-v, --verbose', 'Verbose output', false)\n .option('--seed', 'Bootstrap vault with primitives from codebase analysis', false)\n .option('--deep-analysis', 'Use claude-flow agents for deep analysis', false)\n .option('--cache', 'Use shadow cache for incremental updates', true)\n .option('--ecosystem <ecosystems>', 'Filter to specific ecosystems (comma-separated)', undefined)\n .option('--include-dev', 'Include dev dependencies', false)\n .option('--major-only', 'Only process major dependencies', false)\n .option('--refresh-cache', 'Force refresh the shadow cache', false)\n .action(async (targetPath: string, options: {\n dryRun?: boolean;\n docs?: string;\n verbose?: boolean;\n seed?: boolean;\n deepAnalysis?: boolean;\n cache?: boolean;\n ecosystem?: string;\n includeDev?: boolean;\n majorOnly?: boolean;\n refreshCache?: boolean;\n }) => {\n const projectRoot = resolve(targetPath);\n const docsPath = options.docs || 'docs';\n const verbose = options.verbose || false;\n const dryRun = options.dryRun || false;\n\n console.log(chalk.bold.green('\\n🌱 Knowledge Graph Cultivator\\n'));\n console.log(` Project: ${projectRoot}`);\n console.log(` Docs: ${docsPath}`);\n if (dryRun) {\n console.log(` Mode: ${chalk.yellow('Dry Run')}`);\n }\n console.log('');\n\n // Determine tasks\n const tasks = {\n seed: options.seed || false,\n deepAnalysis: options.deepAnalysis || false,\n };\n\n // If no tasks selected, show help\n if (!tasks.seed && !tasks.deepAnalysis) {\n console.log(chalk.yellow('💡 No tasks selected. Use one or more of:'));\n console.log(' --seed Bootstrap vault with primitives from codebase');\n console.log(' --deep-analysis Use claude-flow for deep codebase analysis');\n console.log('');\n console.log(chalk.gray('Options:'));\n console.log(' --dry-run Preview without writing files');\n console.log(' --cache Use shadow cache for incremental updates (default: true)');\n console.log(' --refresh-cache Force refresh the shadow cache');\n console.log(' --ecosystem Filter to ecosystems (nodejs,python,rust,go,php,java)');\n console.log(' --include-dev Include dev dependencies');\n console.log(' --major-only Only process major dependencies');\n console.log('');\n console.log('Run \"kg cultivate --help\" for more options');\n return;\n }\n\n const startTime = Date.now();\n const result: CultivationResult = {\n success: true,\n seed: { created: 0, documents: [] },\n analysis: { filesProcessed: 0, dependenciesFound: 0, servicesFound: 0 },\n cache: { updated: 0, hits: 0, misses: 0 },\n duration: 0,\n warnings: [],\n errors: [],\n };\n\n try {\n // Initialize shadow cache\n let cache: ShadowCache | undefined;\n if (options.cache !== false) {\n console.log(chalk.cyan('📦 Initializing shadow cache...'));\n cache = await loadShadowCache(projectRoot);\n\n if (options.refreshCache) {\n cache.clear();\n console.log(chalk.gray(' Cache cleared (refresh mode)'));\n }\n\n const stats = cache.getStats();\n console.log(chalk.gray(` Entries: ${stats.totalEntries}, Hit rate: ${(stats.hitRate * 100).toFixed(1)}%`));\n console.log('');\n }\n\n // Task 1: Seed primitives\n if (tasks.seed) {\n console.log(chalk.cyan('🌱 Seeding primitives from codebase...\\n'));\n\n // Parse ecosystem filter\n let ecosystems: Ecosystem[] | undefined;\n if (options.ecosystem) {\n ecosystems = options.ecosystem.split(',').map(e => e.trim() as Ecosystem);\n console.log(chalk.gray(` Ecosystems: ${ecosystems.join(', ')}`));\n }\n\n // Create generator\n const generator = await SeedGenerator.create(projectRoot, docsPath);\n\n // Analyze\n console.log(chalk.gray(' Analyzing codebase...'));\n const analysis = await generator.analyze();\n\n result.analysis = {\n filesProcessed: analysis.metadata.filesScanned,\n dependenciesFound: analysis.dependencies.length,\n servicesFound: analysis.services.length,\n };\n\n // Display analysis\n console.log(`\\n ${chalk.bold('Analysis Results:')}`);\n console.log(` Languages: ${analysis.languages.join(', ') || 'none'}`);\n console.log(` Dependencies: ${analysis.dependencies.length}`);\n console.log(` Frameworks: ${analysis.frameworks.length}`);\n console.log(` Services: ${analysis.services.length}`);\n console.log(` Deployments: ${analysis.deployments.length}`);\n\n if (verbose) {\n displayDetailedAnalysis(analysis);\n }\n\n console.log('');\n\n // Generate primitives\n console.log(chalk.gray(' Generating primitive nodes...'));\n const documents = await generator.generatePrimitives(analysis);\n\n if (dryRun) {\n console.log(`\\n ${chalk.yellow('[DRY RUN]')} Would create ${documents.length} primitives:`);\n for (const doc of documents.slice(0, 10)) {\n console.log(` - ${doc.frontmatter.type}: ${doc.title}`);\n }\n if (documents.length > 10) {\n console.log(` ... and ${documents.length - 10} more`);\n }\n result.seed.documents = documents.map(d => ({\n title: d.title,\n path: d.path,\n type: d.frontmatter.type || 'unknown',\n }));\n } else {\n const writeResult = await generator.writePrimitives(documents);\n result.seed.created = writeResult.documentsGenerated.length;\n result.seed.documents = writeResult.documentsGenerated;\n\n console.log(`\\n ${chalk.green('✓')} Created ${writeResult.documentsGenerated.length} primitives`);\n\n if (writeResult.warnings.length > 0) {\n result.warnings.push(...writeResult.warnings);\n if (verbose) {\n console.log(chalk.yellow(` Warnings: ${writeResult.warnings.length}`));\n }\n }\n\n if (writeResult.errors.length > 0) {\n result.errors.push(...writeResult.errors);\n console.log(chalk.red(` Errors: ${writeResult.errors.length}`));\n }\n }\n\n console.log('');\n }\n\n // Task 2: Deep Analysis with claude-flow\n if (tasks.deepAnalysis) {\n console.log(chalk.cyan('🧠 Running deep analysis with claude-flow...\\n'));\n\n // Check if claude-flow is available\n const hasClaudeFlow = await checkClaudeFlowAvailable();\n\n if (!hasClaudeFlow) {\n console.log(chalk.yellow(' ⚠️ claude-flow not available'));\n console.log(chalk.gray(' Install with: npm install -g claude-flow'));\n result.warnings.push('claude-flow not available for deep analysis');\n } else {\n if (dryRun) {\n console.log(chalk.yellow(' [DRY RUN] Would spawn claude-flow agents:'));\n console.log(' - Researcher: Analyze codebase patterns');\n console.log(' - Analyst: Identify architectural decisions');\n console.log(' - Coder: Detect implementation patterns');\n console.log(' - Tester: Analyze testing coverage');\n } else {\n // Import and run DeepAnalyzer\n try {\n const { DeepAnalyzer } = await import('../../cultivation/deep-analyzer.js');\n const analyzer = new DeepAnalyzer({\n projectRoot,\n docsPath,\n verbose,\n });\n\n const deepResult = await analyzer.analyze();\n\n console.log(` ${chalk.green('✓')} Deep analysis complete`);\n console.log(` Agents spawned: ${deepResult.agentsSpawned}`);\n console.log(` Insights generated: ${deepResult.insightsCount}`);\n console.log(` Documentation created: ${deepResult.documentsCreated}`);\n } catch (error) {\n result.errors.push(`Deep analysis failed: ${error instanceof Error ? error.message : String(error)}`);\n console.log(chalk.red(` ✗ Deep analysis failed: ${error instanceof Error ? error.message : String(error)}`));\n }\n }\n }\n\n console.log('');\n }\n\n // Update cache\n if (cache) {\n const stats = cache.getStats();\n result.cache = {\n updated: stats.totalEntries,\n hits: stats.hitCount,\n misses: stats.missCount,\n };\n\n await cache.save();\n }\n\n result.duration = Date.now() - startTime;\n result.success = result.errors.length === 0;\n\n // Final summary\n displaySummary(result, dryRun);\n\n } catch (error) {\n console.error(chalk.red('\\n❌ Cultivation failed:'), error);\n process.exit(1);\n }\n });\n}\n\n/**\n * Display detailed analysis output\n */\nfunction displayDetailedAnalysis(analysis: SeedAnalysis): void {\n if (analysis.frameworks.length > 0) {\n console.log(`\\n ${chalk.gray('Frameworks:')}`);\n for (const fw of analysis.frameworks) {\n console.log(` - ${fw.name} (${fw.ecosystem}) v${fw.version}`);\n }\n }\n\n if (analysis.services.length > 0) {\n console.log(`\\n ${chalk.gray('Services:')}`);\n for (const svc of analysis.services) {\n console.log(` - ${svc.name}: ${svc.type} (${svc.technology})`);\n }\n }\n\n if (analysis.deployments.length > 0) {\n console.log(`\\n ${chalk.gray('Deployments:')}`);\n for (const dep of analysis.deployments) {\n console.log(` - ${dep}`);\n }\n }\n}\n\n/**\n * Display cultivation summary\n */\nfunction displaySummary(result: CultivationResult, dryRun: boolean): void {\n console.log(chalk.bold.blue('📊 Cultivation Summary\\n'));\n\n if (dryRun) {\n console.log(chalk.yellow('[DRY RUN] No changes were made\\n'));\n }\n\n console.log(' Analysis:');\n console.log(` Files processed: ${result.analysis.filesProcessed}`);\n console.log(` Dependencies: ${result.analysis.dependenciesFound}`);\n console.log(` Services: ${result.analysis.servicesFound}`);\n\n if (result.seed.created > 0 || result.seed.documents.length > 0) {\n console.log('\\n Seed:');\n console.log(` Primitives ${dryRun ? 'would create' : 'created'}: ${dryRun ? result.seed.documents.length : result.seed.created}`);\n }\n\n if (result.cache.updated > 0) {\n console.log('\\n Cache:');\n console.log(` Entries: ${result.cache.updated}`);\n const hitRate = result.cache.hits + result.cache.misses > 0\n ? (result.cache.hits / (result.cache.hits + result.cache.misses) * 100).toFixed(1)\n : 0;\n console.log(` Hit rate: ${hitRate}%`);\n }\n\n console.log(`\\n Duration: ${(result.duration / 1000).toFixed(2)}s`);\n\n if (result.warnings.length > 0) {\n console.log(chalk.yellow(`\\n ⚠️ Warnings: ${result.warnings.length}`));\n for (const warning of result.warnings.slice(0, 5)) {\n console.log(chalk.gray(` - ${warning}`));\n }\n }\n\n if (result.errors.length > 0) {\n console.log(chalk.red(`\\n ❌ Errors: ${result.errors.length}`));\n for (const error of result.errors.slice(0, 5)) {\n console.log(chalk.gray(` - ${error}`));\n }\n }\n\n if (result.success && !dryRun) {\n console.log(chalk.bold.green('\\n✨ Cultivation complete!\\n'));\n } else if (!result.success) {\n console.log(chalk.yellow('\\n⚠️ Cultivation completed with errors\\n'));\n } else {\n console.log(chalk.gray('\\nRun without --dry-run to apply changes\\n'));\n }\n}\n\n/**\n * Check if claude-flow is available\n * Checks for direct command first (globally installed), then falls back to npx\n */\nasync function checkClaudeFlowAvailable(): Promise<boolean> {\n const { execSync } = await import('child_process');\n\n // First try direct command (globally installed claude-flow)\n try {\n execSync('claude-flow --version', { stdio: 'pipe', timeout: 5000 });\n return true;\n } catch {\n // Direct command not available, try npx\n }\n\n // Fall back to npx\n try {\n execSync('npx claude-flow --version', { stdio: 'pipe', timeout: 30000 });\n return true;\n } catch {\n return false;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -76,11 +76,18 @@ export declare class DeepAnalyzer {
76
76
  private maxAgents;
77
77
  private agentMode;
78
78
  private agentTimeout;
79
+ private claudeFlowCommand;
79
80
  constructor(options: DeepAnalyzerOptions);
80
81
  /**
81
- * Check if claude-flow is available
82
+ * Check if claude-flow is available and determine the best command to use
83
+ * Checks for direct command first (globally installed), then falls back to npx
82
84
  */
83
85
  isAvailable(): Promise<boolean>;
86
+ /**
87
+ * Detect which claude-flow command to use
88
+ * Returns the command configuration or null if not available
89
+ */
90
+ private detectClaudeFlowCommand;
84
91
  /**
85
92
  * Run deep analysis
86
93
  */
@@ -1 +1 @@
1
- {"version":3,"file":"deep-analyzer.d.ts","sourceRoot":"","sources":["../../src/cultivation/deep-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;IACnD,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAYD;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,mBAAmB;IAWxC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAerC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyF5C;;OAEG;YACW,eAAe;IAK7B;;OAEG;YACW,iBAAiB;IAQ/B;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,YAAY;IA0C1B;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;YACW,kBAAkB;IA2ChC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,YAAY;CA4BrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAE7E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAG7B"}
1
+ {"version":3,"file":"deep-analyzer.d.ts","sourceRoot":"","sources":["../../src/cultivation/deep-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;IACnD,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAYD;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAgD;gBAE7D,OAAO,EAAE,mBAAmB;IAWxC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC;;;OAGG;YACW,uBAAuB;IAkCrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyF5C;;OAEG;YACW,eAAe;IAK7B;;OAEG;YACW,iBAAiB;IAQ/B;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,YAAY;IA0C1B;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;YACW,kBAAkB;IAmDhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,YAAY;CA4BrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAE7E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAG7B"}
@@ -20,6 +20,7 @@ class DeepAnalyzer {
20
20
  maxAgents;
21
21
  agentMode;
22
22
  agentTimeout;
23
+ claudeFlowCommand = null;
23
24
  constructor(options) {
24
25
  this.projectRoot = resolve(options.projectRoot);
25
26
  this.docsPath = options.docsPath || "docs";
@@ -30,18 +31,41 @@ class DeepAnalyzer {
30
31
  this.agentTimeout = options.agentTimeout || 6e4;
31
32
  }
32
33
  /**
33
- * Check if claude-flow is available
34
+ * Check if claude-flow is available and determine the best command to use
35
+ * Checks for direct command first (globally installed), then falls back to npx
34
36
  */
35
37
  async isAvailable() {
38
+ const command = await this.detectClaudeFlowCommand();
39
+ return command !== null;
40
+ }
41
+ /**
42
+ * Detect which claude-flow command to use
43
+ * Returns the command configuration or null if not available
44
+ */
45
+ async detectClaudeFlowCommand() {
46
+ if (this.claudeFlowCommand !== null) {
47
+ return this.claudeFlowCommand;
48
+ }
36
49
  try {
37
- execFileSync("npx", ["claude-flow@alpha", "--version"], {
50
+ execFileSync("claude-flow", ["--version"], {
38
51
  stdio: "pipe",
39
52
  timeout: 5e3,
40
53
  windowsHide: true
41
54
  });
42
- return true;
55
+ this.claudeFlowCommand = { cmd: "claude-flow", args: [] };
56
+ return this.claudeFlowCommand;
43
57
  } catch {
44
- return false;
58
+ }
59
+ try {
60
+ execFileSync("npx", ["claude-flow", "--version"], {
61
+ stdio: "pipe",
62
+ timeout: 3e4,
63
+ windowsHide: true
64
+ });
65
+ this.claudeFlowCommand = { cmd: "npx", args: ["claude-flow"] };
66
+ return this.claudeFlowCommand;
67
+ } catch {
68
+ return null;
45
69
  }
46
70
  }
47
71
  /**
@@ -198,7 +222,7 @@ class DeepAnalyzer {
198
222
 
199
223
  **COORDINATION PROTOCOL**:
200
224
  \`\`\`bash
201
- npx claude-flow@alpha hooks pre-task --description "${agent.task}"
225
+ claude-flow hooks pre-task --description "${agent.task}"
202
226
  \`\`\`
203
227
 
204
228
  **YOUR TASKS**:
@@ -216,7 +240,7 @@ npx claude-flow@alpha hooks pre-task --description "${agent.task}"
216
240
 
217
241
  After completing:
218
242
  \`\`\`bash
219
- npx claude-flow@alpha hooks post-task --task-id "${agent.type}-analysis"
243
+ claude-flow hooks post-task --task-id "${agent.type}-analysis"
220
244
  \`\`\`
221
245
  `;
222
246
  }
@@ -228,9 +252,13 @@ npx claude-flow@alpha hooks post-task --task-id "${agent.type}-analysis"
228
252
  throw new Error(`Invalid agent type: ${type}. Valid types: ${[...VALID_AGENT_TYPES].join(", ")}`);
229
253
  }
230
254
  const sanitizedPrompt = prompt.replace(/[`$\\]/g, "");
255
+ const commandConfig = await this.detectClaudeFlowCommand();
256
+ if (!commandConfig) {
257
+ throw new Error("claude-flow is not available");
258
+ }
231
259
  return new Promise((resolve2, reject) => {
232
- const args = ["claude-flow@alpha", "agent", "execute", type, sanitizedPrompt, "--json"];
233
- const proc = spawn("npx", args, {
260
+ const args = [...commandConfig.args, "agent", "run", type, sanitizedPrompt];
261
+ const proc = spawn(commandConfig.cmd, args, {
234
262
  cwd: this.projectRoot,
235
263
  shell: false,
236
264
  // Security: Disable shell to prevent command injection
@@ -1 +1 @@
1
- {"version":3,"file":"deep-analyzer.js","sources":["../../src/cultivation/deep-analyzer.ts"],"sourcesContent":["/**\n * DeepAnalyzer - Claude-Flow Integration for Deep Codebase Analysis\n *\n * Uses claude-flow agents for comprehensive codebase analysis:\n * - Pattern detection and architectural insights\n * - Documentation gap analysis\n * - Standards compliance checking\n *\n * @module cultivation/deep-analyzer\n */\n\nimport { execFileSync, spawn } from 'child_process';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { createLogger } from '../utils/index.js';\n\nconst logger = createLogger('deep-analyzer');\n\n/**\n * Valid agent types for security validation\n */\nconst VALID_AGENT_TYPES = new Set([\n 'researcher',\n 'architect',\n 'analyst',\n 'coder',\n 'tester',\n 'reviewer',\n 'documenter',\n]);\n\n/**\n * Deep analyzer options\n */\nexport interface DeepAnalyzerOptions {\n /** Project root directory */\n projectRoot: string;\n /** Documentation path (relative to project root) */\n docsPath?: string;\n /** Output directory for analysis results */\n outputDir?: string;\n /** Enable verbose logging */\n verbose?: boolean;\n /** Maximum agents to spawn */\n maxAgents?: number;\n /** Agent execution mode */\n agentMode?: 'sequential' | 'parallel' | 'adaptive';\n /** Timeout for each agent (ms) */\n agentTimeout?: number;\n}\n\n/**\n * Analysis result from an agent\n */\nexport interface AgentResult {\n name: string;\n type: string;\n success: boolean;\n insights: string[];\n documents: Array<{ path: string; title: string }>;\n duration: number;\n error?: string;\n}\n\n/**\n * Deep analysis result\n */\nexport interface DeepAnalysisResult {\n success: boolean;\n agentsSpawned: number;\n insightsCount: number;\n documentsCreated: number;\n results: AgentResult[];\n duration: number;\n errors: string[];\n}\n\n/**\n * Agent configuration\n */\ninterface AgentConfig {\n name: string;\n type: 'researcher' | 'analyst' | 'coder' | 'tester' | 'reviewer';\n task: string;\n outputFile: string;\n}\n\n/**\n * DeepAnalyzer - Uses claude-flow for deep codebase analysis\n *\n * @example\n * ```typescript\n * const analyzer = new DeepAnalyzer({\n * projectRoot: '/my/project',\n * docsPath: 'docs',\n * });\n *\n * const result = await analyzer.analyze();\n * console.log(`Generated ${result.insightsCount} insights`);\n * ```\n */\nexport class DeepAnalyzer {\n private projectRoot: string;\n private docsPath: string;\n private outputDir: string;\n private verbose: boolean;\n private maxAgents: number;\n private agentMode: 'sequential' | 'parallel' | 'adaptive';\n private agentTimeout: number;\n\n constructor(options: DeepAnalyzerOptions) {\n this.projectRoot = resolve(options.projectRoot);\n this.docsPath = options.docsPath || 'docs';\n this.outputDir = options.outputDir || join(this.projectRoot, this.docsPath, 'analysis');\n this.verbose = options.verbose || false;\n this.maxAgents = options.maxAgents || 5;\n this.agentMode = options.agentMode || 'adaptive';\n // Default timeout of 60 seconds (configurable via agentTimeout option)\n this.agentTimeout = options.agentTimeout || 60000;\n }\n\n /**\n * Check if claude-flow is available\n */\n async isAvailable(): Promise<boolean> {\n try {\n // SECURITY: execFileSync does not spawn a shell by default, preventing shell injection\n // Using npx with explicit arguments avoids shell metacharacter interpretation\n execFileSync('npx', ['claude-flow@alpha', '--version'], {\n stdio: 'pipe',\n timeout: 5000,\n windowsHide: true,\n });\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Run deep analysis\n */\n async analyze(): Promise<DeepAnalysisResult> {\n const startTime = Date.now();\n\n const result: DeepAnalysisResult = {\n success: false,\n agentsSpawned: 0,\n insightsCount: 0,\n documentsCreated: 0,\n results: [],\n duration: 0,\n errors: [],\n };\n\n // Check availability\n if (!(await this.isAvailable())) {\n result.errors.push('claude-flow is not available');\n result.duration = Date.now() - startTime;\n return result;\n }\n\n // Ensure output directory exists\n if (!existsSync(this.outputDir)) {\n mkdirSync(this.outputDir, { recursive: true });\n }\n\n // Define agents\n const agents: AgentConfig[] = [\n {\n name: 'Pattern Researcher',\n type: 'researcher',\n task: 'Analyze codebase architecture, patterns, and design decisions',\n outputFile: 'architecture-patterns.md',\n },\n {\n name: 'Code Analyst',\n type: 'analyst',\n task: 'Identify code quality issues, complexity hotspots, and improvement opportunities',\n outputFile: 'code-analysis.md',\n },\n {\n name: 'Implementation Reviewer',\n type: 'coder',\n task: 'Review implementation patterns, naming conventions, and code style',\n outputFile: 'implementation-review.md',\n },\n {\n name: 'Test Analyzer',\n type: 'tester',\n task: 'Analyze test coverage, testing patterns, and testing gaps',\n outputFile: 'testing-analysis.md',\n },\n ];\n\n logger.info('Starting deep analysis', { agents: agents.length, mode: this.agentMode });\n\n // Execute agents based on mode\n if (this.agentMode === 'parallel') {\n result.results = await this.executeParallel(agents);\n } else if (this.agentMode === 'sequential') {\n result.results = await this.executeSequential(agents);\n } else {\n // Adaptive: start with 2, scale based on success\n result.results = await this.executeAdaptive(agents);\n }\n\n // Calculate totals\n result.agentsSpawned = result.results.length;\n result.insightsCount = result.results.reduce((sum, r) => sum + r.insights.length, 0);\n result.documentsCreated = result.results.reduce((sum, r) => sum + r.documents.length, 0);\n result.success = result.results.every(r => r.success);\n result.duration = Date.now() - startTime;\n\n // Collect errors\n for (const agentResult of result.results) {\n if (agentResult.error) {\n result.errors.push(`${agentResult.name}: ${agentResult.error}`);\n }\n }\n\n logger.info('Deep analysis complete', {\n success: result.success,\n insights: result.insightsCount,\n documents: result.documentsCreated,\n duration: result.duration,\n });\n\n return result;\n }\n\n /**\n * Execute agents in parallel\n */\n private async executeParallel(agents: AgentConfig[]): Promise<AgentResult[]> {\n const promises = agents.map(agent => this.executeAgent(agent));\n return Promise.all(promises);\n }\n\n /**\n * Execute agents sequentially\n */\n private async executeSequential(agents: AgentConfig[]): Promise<AgentResult[]> {\n const results: AgentResult[] = [];\n for (const agent of agents) {\n results.push(await this.executeAgent(agent));\n }\n return results;\n }\n\n /**\n * Execute agents adaptively (start with 2, scale based on success)\n */\n private async executeAdaptive(agents: AgentConfig[]): Promise<AgentResult[]> {\n const results: AgentResult[] = [];\n\n // First batch: 2 agents\n const firstBatch = agents.slice(0, 2);\n const firstResults = await Promise.all(firstBatch.map(a => this.executeAgent(a)));\n results.push(...firstResults);\n\n // Check success rate\n const successRate = firstResults.filter(r => r.success).length / firstResults.length;\n\n if (successRate >= 0.5 && agents.length > 2) {\n // Continue with remaining agents in parallel\n const remaining = agents.slice(2);\n const remainingResults = await Promise.all(remaining.map(a => this.executeAgent(a)));\n results.push(...remainingResults);\n } else if (agents.length > 2) {\n // Fall back to sequential\n logger.warn('Low success rate, switching to sequential mode');\n for (const agent of agents.slice(2)) {\n results.push(await this.executeAgent(agent));\n }\n }\n\n return results;\n }\n\n /**\n * Execute a single agent\n */\n private async executeAgent(agent: AgentConfig): Promise<AgentResult> {\n const startTime = Date.now();\n const outputPath = join(this.outputDir, agent.outputFile);\n\n const result: AgentResult = {\n name: agent.name,\n type: agent.type,\n success: false,\n insights: [],\n documents: [],\n duration: 0,\n };\n\n try {\n logger.info(`Spawning agent: ${agent.name}`, { type: agent.type });\n\n const prompt = this.buildPrompt(agent);\n\n // Execute claude-flow agent\n const output = await this.runClaudeFlowAgent(agent.type, prompt);\n\n // Parse output for insights\n result.insights = this.extractInsights(output);\n\n // Write output to file\n writeFileSync(outputPath, this.formatOutput(agent, output));\n result.documents.push({ path: outputPath, title: agent.name });\n\n result.success = true;\n\n if (this.verbose) {\n logger.debug(`Agent completed: ${agent.name}`, { insights: result.insights.length });\n }\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n logger.error(`Agent failed: ${agent.name}`, error instanceof Error ? error : new Error(String(error)));\n }\n\n result.duration = Date.now() - startTime;\n return result;\n }\n\n /**\n * Build prompt for agent\n */\n private buildPrompt(agent: AgentConfig): string {\n return `You are a ${agent.name} analyzing the project at ${this.projectRoot}.\n\n**OBJECTIVE**: ${agent.task}\n\n**COORDINATION PROTOCOL**:\n\\`\\`\\`bash\nnpx claude-flow@alpha hooks pre-task --description \"${agent.task}\"\n\\`\\`\\`\n\n**YOUR TASKS**:\n1. Analyze the codebase at ${this.projectRoot}\n2. Identify key patterns and conventions\n3. Document your findings with specific examples\n4. Provide actionable recommendations\n5. Generate comprehensive markdown documentation\n\n**OUTPUT REQUIREMENTS**:\n- Use clear markdown formatting\n- Include code examples from the project\n- Organize findings by category\n- Prioritize actionable insights\n\nAfter completing:\n\\`\\`\\`bash\nnpx claude-flow@alpha hooks post-task --task-id \"${agent.type}-analysis\"\n\\`\\`\\`\n`;\n }\n\n /**\n * Run claude-flow agent\n */\n private async runClaudeFlowAgent(type: string, prompt: string): Promise<string> {\n // Security: Validate agent type against allowlist to prevent command injection\n if (!VALID_AGENT_TYPES.has(type)) {\n throw new Error(`Invalid agent type: ${type}. Valid types: ${[...VALID_AGENT_TYPES].join(', ')}`);\n }\n\n // Security: Sanitize prompt to prevent injection via shell metacharacters\n const sanitizedPrompt = prompt.replace(/[`$\\\\]/g, '');\n\n return new Promise((resolve, reject) => {\n const args = ['claude-flow@alpha', 'agent', 'execute', type, sanitizedPrompt, '--json'];\n\n const proc = spawn('npx', args, {\n cwd: this.projectRoot,\n shell: false, // Security: Disable shell to prevent command injection\n timeout: this.agentTimeout,\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve(stdout);\n } else {\n reject(new Error(stderr || `Agent exited with code ${code}`));\n }\n });\n\n proc.on('error', (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Extract insights from agent output\n */\n private extractInsights(output: string): string[] {\n const insights: string[] = [];\n\n // Look for patterns like \"- Insight:\" or \"## Finding:\"\n const patterns = [\n /[-*]\\s*(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n /##\\s*(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n /(?:key\\s+)?(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n ];\n\n for (const pattern of patterns) {\n const matches = output.matchAll(pattern);\n for (const match of matches) {\n if (match[1]) {\n insights.push(match[1].trim());\n }\n }\n }\n\n // Deduplicate\n return [...new Set(insights)];\n }\n\n /**\n * Format output for documentation\n */\n private formatOutput(agent: AgentConfig, output: string): string {\n const timestamp = new Date().toISOString();\n\n return `---\ntitle: \"${agent.name} Analysis\"\ntype: analysis\ngenerator: deep-analyzer\nagent: ${agent.type}\ncreated: ${timestamp}\n---\n\n# ${agent.name} Analysis\n\n> Generated by DeepAnalyzer using claude-flow\n\n## Overview\n\n${agent.task}\n\n## Analysis\n\n${output}\n\n---\n\n*Generated on ${new Date().toLocaleString()}*\n`;\n }\n}\n\n/**\n * Create a deep analyzer instance\n */\nexport function createDeepAnalyzer(options: DeepAnalyzerOptions): DeepAnalyzer {\n return new DeepAnalyzer(options);\n}\n\n/**\n * Run deep analysis on a project\n */\nexport async function analyzeDeep(\n projectRoot: string,\n docsPath?: string\n): Promise<DeepAnalysisResult> {\n const analyzer = new DeepAnalyzer({ projectRoot, docsPath });\n return analyzer.analyze();\n}\n"],"names":["resolve"],"mappings":"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"}
1
+ {"version":3,"file":"deep-analyzer.js","sources":["../../src/cultivation/deep-analyzer.ts"],"sourcesContent":["/**\n * DeepAnalyzer - Claude-Flow Integration for Deep Codebase Analysis\n *\n * Uses claude-flow agents for comprehensive codebase analysis:\n * - Pattern detection and architectural insights\n * - Documentation gap analysis\n * - Standards compliance checking\n *\n * @module cultivation/deep-analyzer\n */\n\nimport { execFileSync, spawn } from 'child_process';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { createLogger } from '../utils/index.js';\n\nconst logger = createLogger('deep-analyzer');\n\n/**\n * Valid agent types for security validation\n */\nconst VALID_AGENT_TYPES = new Set([\n 'researcher',\n 'architect',\n 'analyst',\n 'coder',\n 'tester',\n 'reviewer',\n 'documenter',\n]);\n\n/**\n * Deep analyzer options\n */\nexport interface DeepAnalyzerOptions {\n /** Project root directory */\n projectRoot: string;\n /** Documentation path (relative to project root) */\n docsPath?: string;\n /** Output directory for analysis results */\n outputDir?: string;\n /** Enable verbose logging */\n verbose?: boolean;\n /** Maximum agents to spawn */\n maxAgents?: number;\n /** Agent execution mode */\n agentMode?: 'sequential' | 'parallel' | 'adaptive';\n /** Timeout for each agent (ms) */\n agentTimeout?: number;\n}\n\n/**\n * Analysis result from an agent\n */\nexport interface AgentResult {\n name: string;\n type: string;\n success: boolean;\n insights: string[];\n documents: Array<{ path: string; title: string }>;\n duration: number;\n error?: string;\n}\n\n/**\n * Deep analysis result\n */\nexport interface DeepAnalysisResult {\n success: boolean;\n agentsSpawned: number;\n insightsCount: number;\n documentsCreated: number;\n results: AgentResult[];\n duration: number;\n errors: string[];\n}\n\n/**\n * Agent configuration\n */\ninterface AgentConfig {\n name: string;\n type: 'researcher' | 'analyst' | 'coder' | 'tester' | 'reviewer';\n task: string;\n outputFile: string;\n}\n\n/**\n * DeepAnalyzer - Uses claude-flow for deep codebase analysis\n *\n * @example\n * ```typescript\n * const analyzer = new DeepAnalyzer({\n * projectRoot: '/my/project',\n * docsPath: 'docs',\n * });\n *\n * const result = await analyzer.analyze();\n * console.log(`Generated ${result.insightsCount} insights`);\n * ```\n */\nexport class DeepAnalyzer {\n private projectRoot: string;\n private docsPath: string;\n private outputDir: string;\n private verbose: boolean;\n private maxAgents: number;\n private agentMode: 'sequential' | 'parallel' | 'adaptive';\n private agentTimeout: number;\n private claudeFlowCommand: { cmd: string; args: string[] } | null = null;\n\n constructor(options: DeepAnalyzerOptions) {\n this.projectRoot = resolve(options.projectRoot);\n this.docsPath = options.docsPath || 'docs';\n this.outputDir = options.outputDir || join(this.projectRoot, this.docsPath, 'analysis');\n this.verbose = options.verbose || false;\n this.maxAgents = options.maxAgents || 5;\n this.agentMode = options.agentMode || 'adaptive';\n // Default timeout of 60 seconds (configurable via agentTimeout option)\n this.agentTimeout = options.agentTimeout || 60000;\n }\n\n /**\n * Check if claude-flow is available and determine the best command to use\n * Checks for direct command first (globally installed), then falls back to npx\n */\n async isAvailable(): Promise<boolean> {\n const command = await this.detectClaudeFlowCommand();\n return command !== null;\n }\n\n /**\n * Detect which claude-flow command to use\n * Returns the command configuration or null if not available\n */\n private async detectClaudeFlowCommand(): Promise<{ cmd: string; args: string[] } | null> {\n // Return cached result if available\n if (this.claudeFlowCommand !== null) {\n return this.claudeFlowCommand;\n }\n\n // First try direct command (globally installed claude-flow)\n try {\n // SECURITY: execFileSync does not spawn a shell by default, preventing shell injection\n execFileSync('claude-flow', ['--version'], {\n stdio: 'pipe',\n timeout: 5000,\n windowsHide: true,\n });\n this.claudeFlowCommand = { cmd: 'claude-flow', args: [] };\n return this.claudeFlowCommand;\n } catch {\n // Direct command not available, try npx\n }\n\n // Fall back to npx\n try {\n execFileSync('npx', ['claude-flow', '--version'], {\n stdio: 'pipe',\n timeout: 30000,\n windowsHide: true,\n });\n this.claudeFlowCommand = { cmd: 'npx', args: ['claude-flow'] };\n return this.claudeFlowCommand;\n } catch {\n return null;\n }\n }\n\n /**\n * Run deep analysis\n */\n async analyze(): Promise<DeepAnalysisResult> {\n const startTime = Date.now();\n\n const result: DeepAnalysisResult = {\n success: false,\n agentsSpawned: 0,\n insightsCount: 0,\n documentsCreated: 0,\n results: [],\n duration: 0,\n errors: [],\n };\n\n // Check availability\n if (!(await this.isAvailable())) {\n result.errors.push('claude-flow is not available');\n result.duration = Date.now() - startTime;\n return result;\n }\n\n // Ensure output directory exists\n if (!existsSync(this.outputDir)) {\n mkdirSync(this.outputDir, { recursive: true });\n }\n\n // Define agents\n const agents: AgentConfig[] = [\n {\n name: 'Pattern Researcher',\n type: 'researcher',\n task: 'Analyze codebase architecture, patterns, and design decisions',\n outputFile: 'architecture-patterns.md',\n },\n {\n name: 'Code Analyst',\n type: 'analyst',\n task: 'Identify code quality issues, complexity hotspots, and improvement opportunities',\n outputFile: 'code-analysis.md',\n },\n {\n name: 'Implementation Reviewer',\n type: 'coder',\n task: 'Review implementation patterns, naming conventions, and code style',\n outputFile: 'implementation-review.md',\n },\n {\n name: 'Test Analyzer',\n type: 'tester',\n task: 'Analyze test coverage, testing patterns, and testing gaps',\n outputFile: 'testing-analysis.md',\n },\n ];\n\n logger.info('Starting deep analysis', { agents: agents.length, mode: this.agentMode });\n\n // Execute agents based on mode\n if (this.agentMode === 'parallel') {\n result.results = await this.executeParallel(agents);\n } else if (this.agentMode === 'sequential') {\n result.results = await this.executeSequential(agents);\n } else {\n // Adaptive: start with 2, scale based on success\n result.results = await this.executeAdaptive(agents);\n }\n\n // Calculate totals\n result.agentsSpawned = result.results.length;\n result.insightsCount = result.results.reduce((sum, r) => sum + r.insights.length, 0);\n result.documentsCreated = result.results.reduce((sum, r) => sum + r.documents.length, 0);\n result.success = result.results.every(r => r.success);\n result.duration = Date.now() - startTime;\n\n // Collect errors\n for (const agentResult of result.results) {\n if (agentResult.error) {\n result.errors.push(`${agentResult.name}: ${agentResult.error}`);\n }\n }\n\n logger.info('Deep analysis complete', {\n success: result.success,\n insights: result.insightsCount,\n documents: result.documentsCreated,\n duration: result.duration,\n });\n\n return result;\n }\n\n /**\n * Execute agents in parallel\n */\n private async executeParallel(agents: AgentConfig[]): Promise<AgentResult[]> {\n const promises = agents.map(agent => this.executeAgent(agent));\n return Promise.all(promises);\n }\n\n /**\n * Execute agents sequentially\n */\n private async executeSequential(agents: AgentConfig[]): Promise<AgentResult[]> {\n const results: AgentResult[] = [];\n for (const agent of agents) {\n results.push(await this.executeAgent(agent));\n }\n return results;\n }\n\n /**\n * Execute agents adaptively (start with 2, scale based on success)\n */\n private async executeAdaptive(agents: AgentConfig[]): Promise<AgentResult[]> {\n const results: AgentResult[] = [];\n\n // First batch: 2 agents\n const firstBatch = agents.slice(0, 2);\n const firstResults = await Promise.all(firstBatch.map(a => this.executeAgent(a)));\n results.push(...firstResults);\n\n // Check success rate\n const successRate = firstResults.filter(r => r.success).length / firstResults.length;\n\n if (successRate >= 0.5 && agents.length > 2) {\n // Continue with remaining agents in parallel\n const remaining = agents.slice(2);\n const remainingResults = await Promise.all(remaining.map(a => this.executeAgent(a)));\n results.push(...remainingResults);\n } else if (agents.length > 2) {\n // Fall back to sequential\n logger.warn('Low success rate, switching to sequential mode');\n for (const agent of agents.slice(2)) {\n results.push(await this.executeAgent(agent));\n }\n }\n\n return results;\n }\n\n /**\n * Execute a single agent\n */\n private async executeAgent(agent: AgentConfig): Promise<AgentResult> {\n const startTime = Date.now();\n const outputPath = join(this.outputDir, agent.outputFile);\n\n const result: AgentResult = {\n name: agent.name,\n type: agent.type,\n success: false,\n insights: [],\n documents: [],\n duration: 0,\n };\n\n try {\n logger.info(`Spawning agent: ${agent.name}`, { type: agent.type });\n\n const prompt = this.buildPrompt(agent);\n\n // Execute claude-flow agent\n const output = await this.runClaudeFlowAgent(agent.type, prompt);\n\n // Parse output for insights\n result.insights = this.extractInsights(output);\n\n // Write output to file\n writeFileSync(outputPath, this.formatOutput(agent, output));\n result.documents.push({ path: outputPath, title: agent.name });\n\n result.success = true;\n\n if (this.verbose) {\n logger.debug(`Agent completed: ${agent.name}`, { insights: result.insights.length });\n }\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n logger.error(`Agent failed: ${agent.name}`, error instanceof Error ? error : new Error(String(error)));\n }\n\n result.duration = Date.now() - startTime;\n return result;\n }\n\n /**\n * Build prompt for agent\n */\n private buildPrompt(agent: AgentConfig): string {\n return `You are a ${agent.name} analyzing the project at ${this.projectRoot}.\n\n**OBJECTIVE**: ${agent.task}\n\n**COORDINATION PROTOCOL**:\n\\`\\`\\`bash\nclaude-flow hooks pre-task --description \"${agent.task}\"\n\\`\\`\\`\n\n**YOUR TASKS**:\n1. Analyze the codebase at ${this.projectRoot}\n2. Identify key patterns and conventions\n3. Document your findings with specific examples\n4. Provide actionable recommendations\n5. Generate comprehensive markdown documentation\n\n**OUTPUT REQUIREMENTS**:\n- Use clear markdown formatting\n- Include code examples from the project\n- Organize findings by category\n- Prioritize actionable insights\n\nAfter completing:\n\\`\\`\\`bash\nclaude-flow hooks post-task --task-id \"${agent.type}-analysis\"\n\\`\\`\\`\n`;\n }\n\n /**\n * Run claude-flow agent\n */\n private async runClaudeFlowAgent(type: string, prompt: string): Promise<string> {\n // Security: Validate agent type against allowlist to prevent command injection\n if (!VALID_AGENT_TYPES.has(type)) {\n throw new Error(`Invalid agent type: ${type}. Valid types: ${[...VALID_AGENT_TYPES].join(', ')}`);\n }\n\n // Security: Sanitize prompt to prevent injection via shell metacharacters\n const sanitizedPrompt = prompt.replace(/[`$\\\\]/g, '');\n\n // Get the detected command configuration\n const commandConfig = await this.detectClaudeFlowCommand();\n if (!commandConfig) {\n throw new Error('claude-flow is not available');\n }\n\n return new Promise((resolve, reject) => {\n // Build args based on detected command\n // claude-flow agent run <type> \"<prompt>\"\n const args = [...commandConfig.args, 'agent', 'run', type, sanitizedPrompt];\n\n const proc = spawn(commandConfig.cmd, args, {\n cwd: this.projectRoot,\n shell: false, // Security: Disable shell to prevent command injection\n timeout: this.agentTimeout,\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve(stdout);\n } else {\n reject(new Error(stderr || `Agent exited with code ${code}`));\n }\n });\n\n proc.on('error', (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Extract insights from agent output\n */\n private extractInsights(output: string): string[] {\n const insights: string[] = [];\n\n // Look for patterns like \"- Insight:\" or \"## Finding:\"\n const patterns = [\n /[-*]\\s*(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n /##\\s*(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n /(?:key\\s+)?(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n ];\n\n for (const pattern of patterns) {\n const matches = output.matchAll(pattern);\n for (const match of matches) {\n if (match[1]) {\n insights.push(match[1].trim());\n }\n }\n }\n\n // Deduplicate\n return [...new Set(insights)];\n }\n\n /**\n * Format output for documentation\n */\n private formatOutput(agent: AgentConfig, output: string): string {\n const timestamp = new Date().toISOString();\n\n return `---\ntitle: \"${agent.name} Analysis\"\ntype: analysis\ngenerator: deep-analyzer\nagent: ${agent.type}\ncreated: ${timestamp}\n---\n\n# ${agent.name} Analysis\n\n> Generated by DeepAnalyzer using claude-flow\n\n## Overview\n\n${agent.task}\n\n## Analysis\n\n${output}\n\n---\n\n*Generated on ${new Date().toLocaleString()}*\n`;\n }\n}\n\n/**\n * Create a deep analyzer instance\n */\nexport function createDeepAnalyzer(options: DeepAnalyzerOptions): DeepAnalyzer {\n return new DeepAnalyzer(options);\n}\n\n/**\n * Run deep analysis on a project\n */\nexport async function analyzeDeep(\n projectRoot: string,\n docsPath?: string\n): Promise<DeepAnalysisResult> {\n const analyzer = new DeepAnalyzer({ projectRoot, docsPath });\n return analyzer.analyze();\n}\n"],"names":["resolve"],"mappings":"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"}
@@ -79,7 +79,7 @@ This project uses claude-flow for AI coordination:
79
79
  ### MCP Configuration
80
80
 
81
81
  \`\`\`bash
82
- claude mcp add claude-flow npx claude-flow@alpha mcp start
82
+ claude mcp add claude-flow npx claude-flow mcp start
83
83
  \`\`\`
84
84
 
85
85
  ### Memory Namespace