UNPKG

agentcrumbs

Version:
46 lines 1.43 kB
import fs from "node:fs"; import path from "node:path"; import os from "node:os"; import { createHash } from "node:crypto"; const CURSOR_FILE = path.join(os.homedir(), ".agentcrumbs", ".cursors.json"); const MAX_CURSORS = 50; const CURSOR_TTL = 60 * 60 * 1000; // 1 hour function readCursors() { try { return JSON.parse(fs.readFileSync(CURSOR_FILE, "utf-8")); } catch { return {}; } } function writeCursors(cursors) { const dir = path.dirname(CURSOR_FILE); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } fs.writeFileSync(CURSOR_FILE, JSON.stringify(cursors)); } function generateId(ts, offset) { const hash = createHash("sha256").update(`${ts}:${offset}`).digest("hex"); return hash.slice(0, 8); } function pruneOld(cursors) { const now = Date.now(); const entries = Object.entries(cursors) .filter(([, v]) => now - v.createdAt < CURSOR_TTL) .sort((a, b) => b[1].createdAt - a[1].createdAt) .slice(0, MAX_CURSORS); return Object.fromEntries(entries); } export function saveCursor(ts, offset) { const id = generateId(ts, offset); const cursors = pruneOld(readCursors()); cursors[id] = { ts, offset, createdAt: Date.now() }; writeCursors(cursors); return id; } export function resolveCursor(id) { const cursors = readCursors(); return cursors[id]; } //# sourceMappingURL=cursor.js.map