UNPKG

agentcrumbs

Version:
53 lines 1.92 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.saveCursor = saveCursor; exports.resolveCursor = resolveCursor; const node_fs_1 = __importDefault(require("node:fs")); const node_path_1 = __importDefault(require("node:path")); const node_os_1 = __importDefault(require("node:os")); const node_crypto_1 = require("node:crypto"); const CURSOR_FILE = node_path_1.default.join(node_os_1.default.homedir(), ".agentcrumbs", ".cursors.json"); const MAX_CURSORS = 50; const CURSOR_TTL = 60 * 60 * 1000; // 1 hour function readCursors() { try { return JSON.parse(node_fs_1.default.readFileSync(CURSOR_FILE, "utf-8")); } catch { return {}; } } function writeCursors(cursors) { const dir = node_path_1.default.dirname(CURSOR_FILE); if (!node_fs_1.default.existsSync(dir)) { node_fs_1.default.mkdirSync(dir, { recursive: true }); } node_fs_1.default.writeFileSync(CURSOR_FILE, JSON.stringify(cursors)); } function generateId(ts, offset) { const hash = (0, node_crypto_1.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); } function saveCursor(ts, offset) { const id = generateId(ts, offset); const cursors = pruneOld(readCursors()); cursors[id] = { ts, offset, createdAt: Date.now() }; writeCursors(cursors); return id; } function resolveCursor(id) { const cursors = readCursors(); return cursors[id]; } //# sourceMappingURL=cursor.js.map