File size: 1,891 Bytes
9df3c32 3ad0250 9df3c32 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const DB_DIR = path.join(__dirname, '../data');
/**
* Persists local NeDB files to Hugging Face Hub via Git LFS
*/
exports.syncToCloud = async () => {
try {
const hfToken = process.env.HF_TOKEN;
const hfRepo = process.env.HF_REPO || 'spaces/zhlajiex/Codeai';
if (!hfToken) {
console.warn('[PERSISTENCE] HF_TOKEN missing. Cloud sync disabled.');
return;
}
console.log('[PERSISTENCE] Initiating Neural Sync to Cloud...');
const rootDir = path.join(__dirname, '../../');
const gitIdent = `-c user.name="Codex AI" -c user.email="ai@codex.bot"`;
const remoteUrl = `https://zhlajiex:${hfToken}@huggingface.co/${hfRepo}`;
try {
execSync(`git add backend/data/*.db`, { cwd: rootDir });
execSync(`git ${gitIdent} commit -m "Neural Archive Sync: [$(date)]"`, { cwd: rootDir });
if (process.env.SPACE_ID || process.env.HF_TOKEN) {
console.log('[PERSISTENCE] HF_SPACE detected. Skipping remote push to prevent restart loop.');
} else {
execSync(`git push "${remoteUrl}" main`, { cwd: rootDir });
}
console.log('[PERSISTENCE] Cloud Sync: SUCCESS ✅');
} catch (gitErr) {
if (gitErr.message.includes('nothing to commit')) {
console.log('[PERSISTENCE] Cloud Sync: ARCHIVE STABLE (No changes)');
} else {
console.error('[PERSISTENCE] Cloud Sync: FAILED ❌', gitErr.message);
}
}
} catch (err) {
console.error('[PERSISTENCE] System Error:', err.message);
}
};
/**
* Restore from cloud on startup if local files are missing
*/
exports.restoreFromCloud = async () => {
// Logic handled by HF Spaces auto-clone,
// but we can add manual pull if needed.
console.log('[PERSISTENCE] Neural Restore: READY');
};
|