22 lines
1.0 KiB
JavaScript
22 lines
1.0 KiB
JavaScript
// Refuse damaged history before Pi's --continue can silently skip it.
|
|
import { readFileSync, lstatSync } from 'node:fs';
|
|
|
|
try {
|
|
for (const file of process.argv.slice(2)) {
|
|
if (!lstatSync(file).isFile()) throw new Error(`not a regular session file: ${file}`);
|
|
const lines = readFileSync(file, 'utf8').trim().split('\n');
|
|
const entries = lines.map((line) => JSON.parse(line));
|
|
const header = entries[0];
|
|
if (header?.type !== 'session' || typeof header.id !== 'string' || !header.id ||
|
|
typeof header.version !== 'number' || typeof header.cwd !== 'string' ||
|
|
!Number.isFinite(Date.parse(header.timestamp)) ||
|
|
entries.slice(1).some((entry) => !entry || typeof entry.type !== 'string')) {
|
|
throw new Error(`invalid session structure: ${file}`);
|
|
}
|
|
if (header.cwd !== process.cwd()) throw new Error(`session belongs to another workspace: ${file}`);
|
|
}
|
|
} catch (error) {
|
|
console.error(`dewey: cannot safely resume: ${error.message}; inspect history or explicitly use --fresh`);
|
|
process.exit(1);
|
|
}
|