mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 21:53:28 +08:00
On Windows (native cmd/PowerShell), process.env.HOME is undefined. Seven CLI entry points and two library files pass process.env.HOME directly as homeDir without a cross-platform fallback, causing all path resolutions to silently fail (resolving to "undefined/.claude/..."). Node.js os.homedir() correctly handles all platforms (HOME on Unix, USERPROFILE on Windows, OS-level fallback). The project already uses this pattern in scripts/lib/state-store/index.js and has a getHomeDir() utility in scripts/lib/utils.js, but it was not applied consistently. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Lidang-Jiang <lidangjiang@gmail.com>
99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const os = require('os');
|
|
const { repairInstalledStates } = require('./lib/install-lifecycle');
|
|
const { SUPPORTED_INSTALL_TARGETS } = require('./lib/install-manifests');
|
|
|
|
function showHelp(exitCode = 0) {
|
|
console.log(`
|
|
Usage: node scripts/repair.js [--target <${SUPPORTED_INSTALL_TARGETS.join('|')}>] [--dry-run] [--json]
|
|
|
|
Rebuild ECC-managed files recorded in install-state for the current context.
|
|
`);
|
|
process.exit(exitCode);
|
|
}
|
|
|
|
function parseArgs(argv) {
|
|
const args = argv.slice(2);
|
|
const parsed = {
|
|
targets: [],
|
|
dryRun: false,
|
|
json: false,
|
|
help: false,
|
|
};
|
|
|
|
for (let index = 0; index < args.length; index += 1) {
|
|
const arg = args[index];
|
|
|
|
if (arg === '--target') {
|
|
parsed.targets.push(args[index + 1] || null);
|
|
index += 1;
|
|
} else if (arg === '--dry-run') {
|
|
parsed.dryRun = true;
|
|
} else if (arg === '--json') {
|
|
parsed.json = true;
|
|
} else if (arg === '--help' || arg === '-h') {
|
|
parsed.help = true;
|
|
} else {
|
|
throw new Error(`Unknown argument: ${arg}`);
|
|
}
|
|
}
|
|
|
|
return parsed;
|
|
}
|
|
|
|
function printHuman(result) {
|
|
if (result.results.length === 0) {
|
|
console.log('No ECC install-state files found for the current home/project context.');
|
|
return;
|
|
}
|
|
|
|
console.log('Repair summary:\n');
|
|
for (const entry of result.results) {
|
|
console.log(`- ${entry.adapter.id}`);
|
|
console.log(` Status: ${entry.status.toUpperCase()}`);
|
|
console.log(` Install-state: ${entry.installStatePath}`);
|
|
|
|
if (entry.error) {
|
|
console.log(` Error: ${entry.error}`);
|
|
continue;
|
|
}
|
|
|
|
const paths = result.dryRun ? entry.plannedRepairs : entry.repairedPaths;
|
|
console.log(` ${result.dryRun ? 'Planned repairs' : 'Repaired paths'}: ${paths.length}`);
|
|
}
|
|
|
|
console.log(`\nSummary: checked=${result.summary.checkedCount}, ${result.dryRun ? 'planned' : 'repaired'}=${result.dryRun ? result.summary.plannedRepairCount : result.summary.repairedCount}, errors=${result.summary.errorCount}`);
|
|
}
|
|
|
|
function main() {
|
|
try {
|
|
const options = parseArgs(process.argv);
|
|
if (options.help) {
|
|
showHelp(0);
|
|
}
|
|
|
|
const result = repairInstalledStates({
|
|
repoRoot: require('path').join(__dirname, '..'),
|
|
homeDir: process.env.HOME || os.homedir(),
|
|
projectRoot: process.cwd(),
|
|
targets: options.targets,
|
|
dryRun: options.dryRun,
|
|
});
|
|
const hasErrors = result.summary.errorCount > 0;
|
|
|
|
if (options.json) {
|
|
console.log(JSON.stringify(result, null, 2));
|
|
} else {
|
|
printHuman(result);
|
|
}
|
|
|
|
process.exitCode = hasErrors ? 1 : 0;
|
|
} catch (error) {
|
|
console.error(`Error: ${error.message}`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|