clawsouls 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin/clawsouls.js
CHANGED
|
@@ -19,6 +19,7 @@ import { versionBumpCommand } from '../commands/version.js';
|
|
|
19
19
|
import { diffCommand } from '../commands/diff.js';
|
|
20
20
|
import { doctorCommand } from '../commands/doctor.js';
|
|
21
21
|
import { migrateCommand } from '../commands/migrate.js';
|
|
22
|
+
import { checkpointCreateCommand, checkpointListCommand, checkpointShowCommand, checkpointRestoreCommand, checkpointScanCommand } from '../commands/checkpoint.js';
|
|
22
23
|
import { searchCommand } from '../commands/search.js';
|
|
23
24
|
import { infoCommand } from '../commands/info.js';
|
|
24
25
|
import { updateCommand } from '../commands/update.js';
|
|
@@ -201,6 +202,34 @@ program
|
|
|
201
202
|
.command('update')
|
|
202
203
|
.description('Check for updates on installed souls')
|
|
203
204
|
.action(updateCommand);
|
|
205
|
+
// ─── Checkpoint (Soul Rollback) ──────────────────────────
|
|
206
|
+
const cp = program.command('checkpoint').description('Soul checkpoints for rollback & contamination detection');
|
|
207
|
+
cp.command('create')
|
|
208
|
+
.description('Create a checkpoint of current soul state')
|
|
209
|
+
.argument('[dir]', 'Soul package directory')
|
|
210
|
+
.option('-m, --message <msg>', 'Checkpoint description')
|
|
211
|
+
.action((dir, opts) => checkpointCreateCommand(dir, opts));
|
|
212
|
+
cp.command('list')
|
|
213
|
+
.description('List all checkpoints')
|
|
214
|
+
.argument('[dir]', 'Soul package directory')
|
|
215
|
+
.action((dir) => checkpointListCommand(dir));
|
|
216
|
+
cp.command('show <id>')
|
|
217
|
+
.description('Show checkpoint details and compare with current state')
|
|
218
|
+
.argument('[dir]', 'Soul package directory')
|
|
219
|
+
.action((id, dir) => checkpointShowCommand(id, dir));
|
|
220
|
+
cp.command('restore <id>')
|
|
221
|
+
.description('Restore soul files from a checkpoint')
|
|
222
|
+
.argument('[dir]', 'Soul package directory')
|
|
223
|
+
.option('--file <name>', 'Restore specific file only')
|
|
224
|
+
.option('--keep-memory', 'Keep current memory files (restore soul only)')
|
|
225
|
+
.option('--dry-run', 'Preview changes without restoring')
|
|
226
|
+
.action((id, dir, opts) => checkpointRestoreCommand(id, dir, opts));
|
|
227
|
+
cp.command('scan')
|
|
228
|
+
.description('Scan checkpoints for contamination (score drops)')
|
|
229
|
+
.argument('[dir]', 'Soul package directory')
|
|
230
|
+
.option('--from <id>', 'Start checkpoint')
|
|
231
|
+
.option('--to <id>', 'End checkpoint')
|
|
232
|
+
.action((dir, opts) => checkpointScanCommand(dir, opts));
|
|
204
233
|
// ─── Version Check (non-blocking) ────────────────────────
|
|
205
234
|
(async () => {
|
|
206
235
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clawsouls.js","sourceRoot":"","sources":["../../src/bin/clawsouls.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clawsouls.js","sourceRoot":"","sources":["../../src/bin/clawsouls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function checkpointCreateCommand(dir?: string, opts?: {
|
|
2
|
+
message?: string;
|
|
3
|
+
}): Promise<void>;
|
|
4
|
+
export declare function checkpointListCommand(dir?: string): Promise<void>;
|
|
5
|
+
export declare function checkpointShowCommand(id: string, dir?: string): Promise<void>;
|
|
6
|
+
export declare function checkpointRestoreCommand(id: string, dir?: string, opts?: {
|
|
7
|
+
file?: string;
|
|
8
|
+
keepMemory?: boolean;
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
export declare function checkpointScanCommand(dir?: string, opts?: {
|
|
12
|
+
from?: string;
|
|
13
|
+
to?: string;
|
|
14
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* clawsouls checkpoint — Soul checkpoint management for rollback
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* checkpoint create [--message "description"] — Create a checkpoint
|
|
6
|
+
* checkpoint list — List all checkpoints
|
|
7
|
+
* checkpoint show <id> — Show checkpoint details
|
|
8
|
+
* checkpoint restore <id> [--file <name>] [--keep-memory] [--dry-run]
|
|
9
|
+
*/
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, statSync } from 'fs';
|
|
12
|
+
import { join, resolve } from 'path';
|
|
13
|
+
import { scanSoulPackage } from '../lib/scanner.js';
|
|
14
|
+
const CHECKPOINT_DIR = '.soulscan/checkpoints';
|
|
15
|
+
const CHECKPOINT_META = 'checkpoint.json';
|
|
16
|
+
const SOUL_FILES = ['soul.json', 'SOUL.md', 'IDENTITY.md', 'AGENTS.md', 'HEARTBEAT.md', 'STYLE.md', 'USER.md', 'TOOLS.md', 'MEMORY.md'];
|
|
17
|
+
function getCheckpointDir(baseDir) {
|
|
18
|
+
return join(baseDir, CHECKPOINT_DIR);
|
|
19
|
+
}
|
|
20
|
+
function generateId() {
|
|
21
|
+
const now = new Date();
|
|
22
|
+
const pad = (n, len = 2) => String(n).padStart(len, '0');
|
|
23
|
+
return `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}-${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;
|
|
24
|
+
}
|
|
25
|
+
function collectSoulFiles(dir) {
|
|
26
|
+
const files = new Map();
|
|
27
|
+
for (const name of SOUL_FILES) {
|
|
28
|
+
const path = join(dir, name);
|
|
29
|
+
if (existsSync(path)) {
|
|
30
|
+
const content = readFileSync(path, 'utf-8');
|
|
31
|
+
files.set(name, { content, size: Buffer.byteLength(content) });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// memory/ subdirectory
|
|
35
|
+
const memDir = join(dir, 'memory');
|
|
36
|
+
if (existsSync(memDir) && statSync(memDir).isDirectory()) {
|
|
37
|
+
for (const entry of readdirSync(memDir)) {
|
|
38
|
+
if (!entry.endsWith('.md'))
|
|
39
|
+
continue;
|
|
40
|
+
const path = join(memDir, entry);
|
|
41
|
+
if (!statSync(path).isFile())
|
|
42
|
+
continue;
|
|
43
|
+
const content = readFileSync(path, 'utf-8');
|
|
44
|
+
files.set(`memory/${entry}`, { content, size: Buffer.byteLength(content) });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return files;
|
|
48
|
+
}
|
|
49
|
+
// ─── CREATE ──────────────────────────────────────────────
|
|
50
|
+
export async function checkpointCreateCommand(dir, opts) {
|
|
51
|
+
const baseDir = dir ? resolve(dir) : process.cwd();
|
|
52
|
+
if (!existsSync(join(baseDir, 'soul.json'))) {
|
|
53
|
+
console.log(chalk.red('❌ No soul.json found. Run in a soul package directory.'));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
const id = generateId();
|
|
57
|
+
const cpDir = join(getCheckpointDir(baseDir), id);
|
|
58
|
+
mkdirSync(cpDir, { recursive: true });
|
|
59
|
+
mkdirSync(join(cpDir, 'memory'), { recursive: true });
|
|
60
|
+
// Collect and copy files
|
|
61
|
+
const files = collectSoulFiles(baseDir);
|
|
62
|
+
const fileNames = [];
|
|
63
|
+
const memoryFileNames = [];
|
|
64
|
+
for (const [name, file] of files) {
|
|
65
|
+
const destPath = join(cpDir, name);
|
|
66
|
+
if (name.startsWith('memory/')) {
|
|
67
|
+
mkdirSync(join(cpDir, 'memory'), { recursive: true });
|
|
68
|
+
memoryFileNames.push(name);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
fileNames.push(name);
|
|
72
|
+
}
|
|
73
|
+
writeFileSync(destPath, file.content);
|
|
74
|
+
}
|
|
75
|
+
// Run SoulScan on current state
|
|
76
|
+
const scanResult = scanSoulPackage(files);
|
|
77
|
+
// Save metadata
|
|
78
|
+
const meta = {
|
|
79
|
+
id,
|
|
80
|
+
message: opts?.message || `Checkpoint ${id}`,
|
|
81
|
+
createdAt: new Date().toISOString(),
|
|
82
|
+
score: scanResult.score,
|
|
83
|
+
grade: scanResult.grade,
|
|
84
|
+
files: fileNames,
|
|
85
|
+
memoryFiles: memoryFileNames,
|
|
86
|
+
};
|
|
87
|
+
writeFileSync(join(cpDir, CHECKPOINT_META), JSON.stringify(meta, null, 2));
|
|
88
|
+
console.log(chalk.green(`✅ Checkpoint created: ${id}`));
|
|
89
|
+
console.log(chalk.gray(` Score: ${scanResult.score}/100 (${scanResult.grade})`));
|
|
90
|
+
console.log(chalk.gray(` Files: ${fileNames.length} soul + ${memoryFileNames.length} memory`));
|
|
91
|
+
console.log(chalk.gray(` Message: ${meta.message}`));
|
|
92
|
+
// Add to .gitignore if not already
|
|
93
|
+
const gitignorePath = join(baseDir, '.gitignore');
|
|
94
|
+
if (existsSync(gitignorePath)) {
|
|
95
|
+
const content = readFileSync(gitignorePath, 'utf-8');
|
|
96
|
+
if (!content.includes('.soulscan/')) {
|
|
97
|
+
writeFileSync(gitignorePath, content + '\n.soulscan/\n');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// ─── LIST ────────────────────────────────────────────────
|
|
102
|
+
export async function checkpointListCommand(dir) {
|
|
103
|
+
const baseDir = dir ? resolve(dir) : process.cwd();
|
|
104
|
+
const cpBaseDir = getCheckpointDir(baseDir);
|
|
105
|
+
if (!existsSync(cpBaseDir)) {
|
|
106
|
+
console.log(chalk.gray('No checkpoints found. Create one with: clawsouls checkpoint create'));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const entries = readdirSync(cpBaseDir)
|
|
110
|
+
.filter(e => existsSync(join(cpBaseDir, e, CHECKPOINT_META)))
|
|
111
|
+
.sort()
|
|
112
|
+
.reverse();
|
|
113
|
+
if (entries.length === 0) {
|
|
114
|
+
console.log(chalk.gray('No checkpoints found.'));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
console.log(chalk.bold(`\n📋 Checkpoints (${entries.length})\n`));
|
|
118
|
+
for (const entry of entries) {
|
|
119
|
+
const meta = JSON.parse(readFileSync(join(cpBaseDir, entry, CHECKPOINT_META), 'utf-8'));
|
|
120
|
+
const scoreColor = meta.score >= 90 ? chalk.green : meta.score >= 70 ? chalk.yellow : chalk.red;
|
|
121
|
+
const date = new Date(meta.createdAt).toLocaleString();
|
|
122
|
+
console.log(` ${chalk.cyan(meta.id)} ${scoreColor(`${meta.score}/100`)} ${chalk.gray(date)} ${meta.message}`);
|
|
123
|
+
}
|
|
124
|
+
console.log('');
|
|
125
|
+
}
|
|
126
|
+
// ─── SHOW ────────────────────────────────────────────────
|
|
127
|
+
export async function checkpointShowCommand(id, dir) {
|
|
128
|
+
const baseDir = dir ? resolve(dir) : process.cwd();
|
|
129
|
+
const cpDir = join(getCheckpointDir(baseDir), id);
|
|
130
|
+
if (!existsSync(join(cpDir, CHECKPOINT_META))) {
|
|
131
|
+
console.log(chalk.red(`❌ Checkpoint not found: ${id}`));
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
const meta = JSON.parse(readFileSync(join(cpDir, CHECKPOINT_META), 'utf-8'));
|
|
135
|
+
console.log(chalk.bold(`\n📌 Checkpoint: ${meta.id}\n`));
|
|
136
|
+
console.log(` Message: ${meta.message}`);
|
|
137
|
+
console.log(` Created: ${new Date(meta.createdAt).toLocaleString()}`);
|
|
138
|
+
console.log(` Score: ${meta.score}/100 (${meta.grade})`);
|
|
139
|
+
console.log(` Files: ${meta.files.join(', ')}`);
|
|
140
|
+
if (meta.memoryFiles.length > 0) {
|
|
141
|
+
console.log(` Memory: ${meta.memoryFiles.join(', ')}`);
|
|
142
|
+
}
|
|
143
|
+
// Compare with current state
|
|
144
|
+
const currentFiles = collectSoulFiles(baseDir);
|
|
145
|
+
const currentResult = scanSoulPackage(currentFiles);
|
|
146
|
+
const scoreDelta = currentResult.score - meta.score;
|
|
147
|
+
const deltaStr = scoreDelta > 0 ? chalk.green(`+${scoreDelta}`) : scoreDelta < 0 ? chalk.red(`${scoreDelta}`) : chalk.gray('±0');
|
|
148
|
+
console.log(`\n Current score: ${currentResult.score}/100 (delta: ${deltaStr})`);
|
|
149
|
+
// Show file diffs
|
|
150
|
+
let changed = 0;
|
|
151
|
+
for (const name of [...meta.files, ...meta.memoryFiles]) {
|
|
152
|
+
const cpContent = existsSync(join(cpDir, name)) ? readFileSync(join(cpDir, name), 'utf-8') : '';
|
|
153
|
+
const currentContent = currentFiles.get(name)?.content || '';
|
|
154
|
+
if (cpContent !== currentContent) {
|
|
155
|
+
changed++;
|
|
156
|
+
console.log(chalk.yellow(` ≠ ${name} — changed`));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Check for new files
|
|
160
|
+
for (const name of currentFiles.keys()) {
|
|
161
|
+
if (!meta.files.includes(name) && !meta.memoryFiles.includes(name)) {
|
|
162
|
+
changed++;
|
|
163
|
+
console.log(chalk.blue(` + ${name} — new`));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (changed === 0) {
|
|
167
|
+
console.log(chalk.green(' ✅ No changes since checkpoint'));
|
|
168
|
+
}
|
|
169
|
+
console.log('');
|
|
170
|
+
}
|
|
171
|
+
// ─── RESTORE ─────────────────────────────────────────────
|
|
172
|
+
export async function checkpointRestoreCommand(id, dir, opts) {
|
|
173
|
+
const baseDir = dir ? resolve(dir) : process.cwd();
|
|
174
|
+
const cpDir = join(getCheckpointDir(baseDir), id);
|
|
175
|
+
if (!existsSync(join(cpDir, CHECKPOINT_META))) {
|
|
176
|
+
console.log(chalk.red(`❌ Checkpoint not found: ${id}`));
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
const meta = JSON.parse(readFileSync(join(cpDir, CHECKPOINT_META), 'utf-8'));
|
|
180
|
+
const allFiles = [...meta.files, ...(opts?.keepMemory ? [] : meta.memoryFiles)];
|
|
181
|
+
const filesToRestore = opts?.file ? allFiles.filter(f => f === opts.file) : allFiles;
|
|
182
|
+
if (opts?.file && filesToRestore.length === 0) {
|
|
183
|
+
console.log(chalk.red(`❌ File "${opts.file}" not found in checkpoint ${id}`));
|
|
184
|
+
console.log(chalk.gray(` Available: ${allFiles.join(', ')}`));
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
console.log(chalk.bold(`\n🔄 Restore from checkpoint: ${id}\n`));
|
|
188
|
+
for (const name of filesToRestore) {
|
|
189
|
+
const srcPath = join(cpDir, name);
|
|
190
|
+
const destPath = join(baseDir, name);
|
|
191
|
+
if (!existsSync(srcPath)) {
|
|
192
|
+
console.log(chalk.yellow(` ⚠️ ${name} — not in checkpoint, skipping`));
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
const srcContent = readFileSync(srcPath, 'utf-8');
|
|
196
|
+
const destContent = existsSync(destPath) ? readFileSync(destPath, 'utf-8') : null;
|
|
197
|
+
if (destContent === srcContent) {
|
|
198
|
+
console.log(chalk.gray(` ≡ ${name} — unchanged`));
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (opts?.dryRun) {
|
|
202
|
+
console.log(chalk.cyan(` → ${name} — would restore`));
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// Ensure directory exists for memory files
|
|
206
|
+
if (name.startsWith('memory/')) {
|
|
207
|
+
mkdirSync(join(baseDir, 'memory'), { recursive: true });
|
|
208
|
+
}
|
|
209
|
+
writeFileSync(destPath, srcContent);
|
|
210
|
+
console.log(chalk.green(` ✅ ${name} — restored`));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (opts?.keepMemory) {
|
|
214
|
+
console.log(chalk.gray('\n Memory files kept (--keep-memory)'));
|
|
215
|
+
}
|
|
216
|
+
if (opts?.dryRun) {
|
|
217
|
+
console.log(chalk.gray('\n Dry run — no files changed'));
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// Re-scan after restore
|
|
221
|
+
const files = collectSoulFiles(baseDir);
|
|
222
|
+
const result = scanSoulPackage(files);
|
|
223
|
+
console.log(chalk.gray(`\n Post-restore score: ${result.score}/100 (${result.grade})`));
|
|
224
|
+
}
|
|
225
|
+
console.log('');
|
|
226
|
+
}
|
|
227
|
+
// ─── SCAN (contamination detection) ──────────────────────
|
|
228
|
+
export async function checkpointScanCommand(dir, opts) {
|
|
229
|
+
const baseDir = dir ? resolve(dir) : process.cwd();
|
|
230
|
+
const cpBaseDir = getCheckpointDir(baseDir);
|
|
231
|
+
if (!existsSync(cpBaseDir)) {
|
|
232
|
+
console.log(chalk.red('❌ No checkpoints found. Create one first: clawsouls checkpoint create'));
|
|
233
|
+
process.exit(1);
|
|
234
|
+
}
|
|
235
|
+
const entries = readdirSync(cpBaseDir)
|
|
236
|
+
.filter(e => existsSync(join(cpBaseDir, e, CHECKPOINT_META)))
|
|
237
|
+
.sort();
|
|
238
|
+
if (entries.length < 2) {
|
|
239
|
+
console.log(chalk.yellow('⚠️ Need at least 2 checkpoints for contamination scan.'));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
// Determine range
|
|
243
|
+
const fromId = opts?.from || entries[0];
|
|
244
|
+
const toId = opts?.to || entries[entries.length - 1];
|
|
245
|
+
const fromIdx = entries.indexOf(fromId);
|
|
246
|
+
const toIdx = entries.indexOf(toId);
|
|
247
|
+
if (fromIdx === -1 || toIdx === -1) {
|
|
248
|
+
console.log(chalk.red(`❌ Checkpoint not found. Available: ${entries.join(', ')}`));
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
const range = entries.slice(fromIdx, toIdx + 1);
|
|
252
|
+
console.log(chalk.bold(`\n🔬 Contamination Scan: ${fromId} → ${toId} (${range.length} checkpoints)\n`));
|
|
253
|
+
// Load scores
|
|
254
|
+
const scores = [];
|
|
255
|
+
for (const cpId of range) {
|
|
256
|
+
const meta = JSON.parse(readFileSync(join(cpBaseDir, cpId, CHECKPOINT_META), 'utf-8'));
|
|
257
|
+
scores.push({ id: cpId, score: meta.score, errors: 0, warnings: 0 });
|
|
258
|
+
}
|
|
259
|
+
// Also scan current state
|
|
260
|
+
const currentFiles = collectSoulFiles(baseDir);
|
|
261
|
+
const currentResult = scanSoulPackage(currentFiles);
|
|
262
|
+
scores.push({ id: 'current', score: currentResult.score, errors: currentResult.errors.length, warnings: currentResult.warnings.length });
|
|
263
|
+
// Detect score drops
|
|
264
|
+
let contaminated = false;
|
|
265
|
+
let contaminationPoint = null;
|
|
266
|
+
for (let i = 1; i < scores.length; i++) {
|
|
267
|
+
const prev = scores[i - 1];
|
|
268
|
+
const curr = scores[i];
|
|
269
|
+
const delta = curr.score - prev.score;
|
|
270
|
+
const icon = delta >= 0 ? chalk.green('▲') : delta <= -10 ? chalk.red('▼') : chalk.yellow('▼');
|
|
271
|
+
const deltaStr = delta >= 0 ? `+${delta}` : `${delta}`;
|
|
272
|
+
console.log(` ${curr.id} ${curr.score}/100 (${deltaStr}) ${icon}`);
|
|
273
|
+
if (delta <= -15 && !contaminated) {
|
|
274
|
+
contaminated = true;
|
|
275
|
+
contaminationPoint = curr.id;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
console.log('');
|
|
279
|
+
if (contaminated && contaminationPoint) {
|
|
280
|
+
console.log(chalk.red.bold(`⚠️ Contamination detected!`));
|
|
281
|
+
console.log(chalk.red(` Significant score drop at: ${contaminationPoint}`));
|
|
282
|
+
console.log(chalk.gray(` Run: clawsouls checkpoint show ${contaminationPoint}`));
|
|
283
|
+
console.log(chalk.gray(` Restore: clawsouls checkpoint restore <earlier-checkpoint>\n`));
|
|
284
|
+
// Binary search for precise contamination point
|
|
285
|
+
if (range.length > 3) {
|
|
286
|
+
const midIdx = Math.floor(range.length / 2);
|
|
287
|
+
const midMeta = JSON.parse(readFileSync(join(cpBaseDir, range[midIdx], CHECKPOINT_META), 'utf-8'));
|
|
288
|
+
const firstMeta = JSON.parse(readFileSync(join(cpBaseDir, range[0], CHECKPOINT_META), 'utf-8'));
|
|
289
|
+
if (midMeta.score < firstMeta.score - 10) {
|
|
290
|
+
console.log(chalk.gray(` 💡 Contamination likely between ${range[0]} and ${range[midIdx]}`));
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
console.log(chalk.gray(` 💡 Contamination likely between ${range[midIdx]} and ${range[range.length - 1]}`));
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
console.log(chalk.green('✅ No significant contamination detected.'));
|
|
299
|
+
}
|
|
300
|
+
console.log('');
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/commands/checkpoint.ts"],"names":[],"mappings":"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"}
|