0878535cb8
主要变更: - Capability Evolver 技能大幅升级 - 新增 LLM 审查、叙事记忆、反思机制模块 - 改进 Agent 间通信协议和技能搜索 - 整合 Git 备份到 evolver-run.sh - Agent 配置与日志更新 - dev-assist/haonan/main 认证和会话配置 - 5 个 agent 的 AGENTS.md 文档更新 - haonan 的 MEMORY.md 和 SOUL.md 更新 - 新增功能目录 - hooks/self-improvement 自我改进钩子 - memory/evolution 进化记忆状态 - workspace/.learnings/ 学习记录 - 清理 - 删除 scripts/git-auto-sync.sh(已整合到 evolver) - 删除旧的 _meta.json 配置 - 忽略临时工作空间目录
81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
// GEP Artifact Cleanup - Evolver Core Module
|
|
// Removes old gep_prompt_*.json/txt files from evolution dir.
|
|
// Keeps at least 10 most recent files regardless of age.
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const { getEvolutionDir } = require('../gep/paths');
|
|
|
|
var MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
var MIN_KEEP = 10;
|
|
|
|
function safeBatchDelete(batch) {
|
|
var deleted = 0;
|
|
for (var i = 0; i < batch.length; i++) {
|
|
try { fs.unlinkSync(batch[i]); deleted++; } catch (_) {}
|
|
}
|
|
return deleted;
|
|
}
|
|
|
|
function run() {
|
|
var evoDir = getEvolutionDir();
|
|
if (!fs.existsSync(evoDir)) return;
|
|
|
|
var files = fs.readdirSync(evoDir)
|
|
.filter(function(f) { return /^gep_prompt_.*\.(json|txt)$/.test(f); })
|
|
.map(function(f) {
|
|
var full = path.join(evoDir, f);
|
|
var stat = fs.statSync(full);
|
|
return { name: f, path: full, mtime: stat.mtimeMs };
|
|
})
|
|
.sort(function(a, b) { return b.mtime - a.mtime; }); // newest first
|
|
|
|
var now = Date.now();
|
|
var deleted = 0;
|
|
|
|
// Phase 1: Age-based cleanup (keep at least MIN_KEEP)
|
|
var filesToDelete = [];
|
|
for (var i = MIN_KEEP; i < files.length; i++) {
|
|
if (now - files[i].mtime > MAX_AGE_MS) {
|
|
filesToDelete.push(files[i].path);
|
|
}
|
|
}
|
|
|
|
if (filesToDelete.length > 0) {
|
|
deleted += safeBatchDelete(filesToDelete);
|
|
}
|
|
|
|
// Phase 2: Size-based safety cap (keep max 10 files total)
|
|
try {
|
|
var remainingFiles = fs.readdirSync(evoDir)
|
|
.filter(function(f) { return /^gep_prompt_.*\.(json|txt)$/.test(f); })
|
|
.map(function(f) {
|
|
var full = path.join(evoDir, f);
|
|
var stat = fs.statSync(full);
|
|
return { name: f, path: full, mtime: stat.mtimeMs };
|
|
})
|
|
.sort(function(a, b) { return b.mtime - a.mtime; }); // newest first
|
|
|
|
var MAX_FILES = 10;
|
|
if (remainingFiles.length > MAX_FILES) {
|
|
var toDelete = remainingFiles.slice(MAX_FILES).map(function(f) { return f.path; });
|
|
deleted += safeBatchDelete(toDelete);
|
|
}
|
|
} catch (e) {
|
|
console.warn('[Cleanup] Phase 2 failed:', e.message);
|
|
}
|
|
|
|
if (deleted > 0) {
|
|
console.log('[Cleanup] Deleted ' + deleted + ' old GEP artifacts.');
|
|
}
|
|
return deleted;
|
|
}
|
|
|
|
if (require.main === module) {
|
|
console.log('[Cleanup] Scanning for old artifacts...');
|
|
var count = run();
|
|
console.log('[Cleanup] ' + (count > 0 ? 'Deleted ' + count + ' files.' : 'No files to delete.'));
|
|
}
|
|
|
|
module.exports = { run };
|