claude-flow
Version:
Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration
123 lines (108 loc) • 2.8 kB
text/typescript
/**
* Plugin Interface and Base Implementation
*
* Defines the plugin contract for V3 extensibility per ADR-004.
*/
import type {
Plugin as IPlugin,
ExtensionPoint,
PluginMetadata
} from '../../shared/types';
export interface Plugin extends IPlugin {
id: string;
name: string;
version: string;
description?: string;
author?: string;
homepage?: string;
priority?: number;
dependencies?: string[];
configSchema?: Record<string, unknown>;
minCoreVersion?: string;
maxCoreVersion?: string;
initialize(config?: Record<string, unknown>): Promise<void>;
shutdown(): Promise<void>;
getExtensionPoints(): ExtensionPoint[];
}
export { ExtensionPoint };
/**
* Abstract base class for plugins
*/
export abstract class BasePlugin implements Plugin {
public readonly id: string;
public readonly name: string;
public readonly version: string;
public description?: string;
public author?: string;
public homepage?: string;
public priority?: number;
public dependencies?: string[];
public configSchema?: Record<string, unknown>;
public minCoreVersion?: string;
public maxCoreVersion?: string;
protected config?: Record<string, unknown>;
protected extensionPoints: ExtensionPoint[] = [];
constructor(metadata: PluginMetadata) {
this.id = metadata.id;
this.name = metadata.name;
this.version = metadata.version;
this.description = metadata.description;
this.author = metadata.author;
this.homepage = metadata.homepage;
}
/**
* Initialize the plugin with optional configuration
*/
async initialize(config?: Record<string, unknown>): Promise<void> {
this.config = config;
await this.onInitialize();
}
/**
* Shutdown the plugin and release resources
*/
async shutdown(): Promise<void> {
await this.onShutdown();
}
/**
* Get all extension points registered by this plugin
*/
getExtensionPoints(): ExtensionPoint[] {
return this.extensionPoints;
}
/**
* Register an extension point
*/
protected registerExtensionPoint(
name: string,
handler: (context: unknown) => Promise<unknown>,
priority?: number
): void {
this.extensionPoints.push({ name, handler, priority });
}
/**
* Get plugin metadata
*/
getMetadata(): PluginMetadata {
return {
id: this.id,
name: this.name,
version: this.version,
description: this.description,
author: this.author,
homepage: this.homepage
};
}
/**
* Override in subclass for custom initialization
*/
protected async onInitialize(): Promise<void> {
// Default: no-op
}
/**
* Override in subclass for custom shutdown
*/
protected async onShutdown(): Promise<void> {
// Default: no-op
}
}
export { BasePlugin as default };