plugin-loader-generator
Generate dynamic plugin loading system with discovery, validation, and lifecycle management.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
Plugin Loader Generator
Generate dynamic plugin loading system.
Generated Patterns
import fs from 'fs';
import path from 'path';
interface Plugin {
name: string;
version: string;
init: () => Promise<void>;
destroy?: () => Promise<void>;
}
export class PluginLoader {
private plugins = new Map<string, Plugin>();
private pluginDirs: string[];
constructor(pluginDirs: string[]) {
this.pluginDirs = pluginDirs;
}
async discover(): Promise<string[]> {
const found: string[] = [];
for (const dir of this.pluginDirs) {
if (!fs.existsSync(dir)) continue;
const entries = fs.readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
if (entry.isDirectory()) {
const manifestPath = path.join(dir, entry.name, 'manifest.json');
if (fs.existsSync(manifestPath)) {
found.push(path.join(dir, entry.name));
}
}
}
}
return found;
}
async load(pluginPath: string): Promise<Plugin> {
const manifest = JSON.parse(fs.readFileSync(path.join(pluginPath, 'manifest.json'), 'utf-8'));
const module = await import(path.join(pluginPath, manifest.main));
const plugin: Plugin = { name: manifest.name, version: manifest.version, ...module };
await plugin.init();
this.plugins.set(plugin.name, plugin);
return plugin;
}
async unload(name: string): Promise<void> {
const plugin = this.plugins.get(name);
if (plugin?.destroy) await plugin.destroy();
this.plugins.delete(name);
}
}
Target Processes
- plugin-architecture-implementation
- cli-application-bootstrap
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-03-11
- Mise à jour de l’index
- 2026-03-11
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!