const fs = require('fs'); const path = require('path'); class ModuleLoader { constructor(modulesDir) { this.modulesDir = path.resolve(modulesDir); this.modules = {}; } discover() { if (!fs.existsSync(this.modulesDir)) return []; const entries = fs.readdirSync(this.modulesDir, { withFileTypes: true }); return entries.filter(e => e.isDirectory()).map(d => d.name); } loadAll(engineContext) { const names = this.discover(); names.forEach(name => { const modPath = path.join(this.modulesDir, name); try { const mod = require(modPath); if (typeof mod.init === 'function') { mod.init(engineContext); } this.modules[name] = mod; } catch (err) { console.error(`Failed to load module ${name}:`, err && err.stack ? err.stack : err); } }); return this.modules; } } module.exports = ModuleLoader;