()
| 685 | // Creates empty files for optional append-only stores so that |
| 686 | // external grep/read commands never fail with "No such file or directory". |
| 687 | function ensureAssetFiles() { |
| 688 | const dir = getGepAssetsDir(); |
| 689 | ensureDir(dir); |
| 690 | ensureGenesSeeded(); |
| 691 | const files = [ |
| 692 | { path: genesPath(), defaultContent: JSON.stringify(getDefaultGenes(), null, 2) + '\n' }, |
| 693 | { path: capsulesPath(), defaultContent: JSON.stringify(getDefaultCapsules(), null, 2) + '\n' }, |
| 694 | { path: path.join(dir, 'genes.jsonl'), defaultContent: '' }, |
| 695 | { path: eventsPath(), defaultContent: '' }, |
| 696 | { path: candidatesPath(), defaultContent: '' }, |
| 697 | { path: failedCapsulesPath(), defaultContent: JSON.stringify(getDefaultFailedCapsules(), null, 2) + '\n' }, |
| 698 | ]; |
| 699 | for (const f of files) { |
| 700 | if (!fs.existsSync(f.path)) { |
| 701 | try { |
| 702 | fs.writeFileSync(f.path, f.defaultContent, 'utf8'); |
| 703 | } catch (e) { |
| 704 | // Non-fatal: log but continue |
| 705 | console.error(`[AssetStore] Failed to create ${f.path}: ${e.message}`); |
| 706 | } |
| 707 | } |
| 708 | } |
| 709 | } |
| 710 | |
| 711 | module.exports = { |
| 712 | loadGenes, loadCapsules, readAllEvents, getLastEventId, |
no test coverage detected