Initial commit with translated description

This commit is contained in:
2026-03-29 08:34:04 +08:00
commit 80ef0a90d7
24 changed files with 4556 additions and 0 deletions

59
self-repair.js Normal file
View File

@@ -0,0 +1,59 @@
const { execSync } = require('child_process');
const path = require('path');
const fs = require('fs');
// SELF REPAIR MODULE
// Triggered when gitSync fails critically.
// Attempts to restore a clean state.
const WORKSPACE_ROOT = path.resolve(__dirname, '../../');
function log(msg) {
console.log(`[SelfRepair] ${msg}`);
}
function run() {
log('Starting Emergency Git Repair...');
try {
try {
execSync('git rebase --abort', { cwd: WORKSPACE_ROOT, stdio: 'ignore', windowsHide: true });
log('Aborted pending rebase.');
} catch (e) {}
try {
execSync('git merge --abort', { cwd: WORKSPACE_ROOT, stdio: 'ignore', windowsHide: true });
log('Aborted pending merge.');
} catch (e) {}
const status = execSync('git status --porcelain', { cwd: WORKSPACE_ROOT, windowsHide: true }).toString();
log(`Current status:\n${status}`);
// 4. If index.lock exists, remove it (dangerous but necessary for unattended recovery)
const lockFile = path.join(WORKSPACE_ROOT, '.git/index.lock');
if (fs.existsSync(lockFile)) {
// Check file age. If > 10 mins, delete it.
const stats = fs.statSync(lockFile);
const ageMinutes = (Date.now() - stats.mtimeMs) / 1000 / 60;
if (ageMinutes > 10) {
log(`Removing stale index.lock (${ageMinutes.toFixed(1)}m old)...`);
fs.unlinkSync(lockFile);
}
}
// 5. Hard Reset (Last Resort)? NO. That loses work.
// Instead, we just try to fetch and let the next cycle handle it.
execSync('git fetch origin main', { cwd: WORKSPACE_ROOT, windowsHide: true });
log('Fetched origin main.');
} catch (err) {
log(`Repair failed: ${err.message}`);
// Do NOT process.exit here -- this would kill the wrapper daemon.
}
}
if (require.main === module) {
run();
}
module.exports = { run };