feat: scan automatique des app.json au démarrage (découverte FALC et autres)

This commit is contained in:
Manus Deploy
2026-07-24 13:15:56 +00:00
parent 765ef94fbd
commit b1bcd59289

View File

@@ -434,6 +434,7 @@ function addDynamicApp(appDef) {
} }
function initDynamicApps() { function initDynamicApps() {
// 1. Charger les apps depuis .dashboard-apps.json (legacy)
const dynamicApps = loadDynamicApps(); const dynamicApps = loadDynamicApps();
for (const app of dynamicApps) { for (const app of dynamicApps) {
const existingInConfig = config.apps.findIndex((a) => a.id === app.id); const existingInConfig = config.apps.findIndex((a) => a.id === app.id);
@@ -441,7 +442,32 @@ function initDynamicApps() {
config.apps.push(app); config.apps.push(app);
} }
} }
console.log(`Apps dynamiques chargées: ${dynamicApps.length}`); // 2. Scanner les dossiers app.json (découverte automatique)
try {
const appsBasePath = config.appsBasePath || process.env.APPS_BASE_PATH || '/opt/manus-deploy/apps';
const entries = fs.readdirSync(appsBasePath, { withFileTypes: true });
let scanned = 0;
for (const entry of entries) {
if (!entry.isDirectory()) continue;
const appJsonPath = path.join(appsBasePath, entry.name, 'app.json');
if (!fs.existsSync(appJsonPath)) continue;
try {
const appDef = JSON.parse(fs.readFileSync(appJsonPath, 'utf-8'));
if (!appDef.id) continue;
const existingInConfig = config.apps.findIndex((a) => a.id === appDef.id);
if (existingInConfig < 0) {
config.apps.push(appDef);
scanned++;
}
} catch (e) {
console.error(`Erreur lecture app.json dans ${entry.name}:`, e.message);
}
}
console.log(`Apps découvertes via app.json: ${scanned}`);
} catch (err) {
console.error('Erreur scan app.json:', err.message);
}
console.log(`Total apps chargées: ${config.apps.length}`);
} }
// ============ CREATION D'APPLICATION ============ // ============ CREATION D'APPLICATION ============