UNPKG

agentcrumbs

Version:
101 lines 3.83 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sessions = sessions; const node_fs_1 = __importDefault(require("node:fs")); const app_store_js_1 = require("../app-store.js"); const SESSION_FILE = "/tmp/agentcrumbs.session"; async function sessions(args) { const appCtx = (0, app_store_js_1.parseAppFlags)(args); const allCrumbs = (0, app_store_js_1.readAllCrumbs)(appCtx); // Find all sessions from crumbs const sessionMap = new Map(); for (const crumb of allCrumbs) { if (!crumb.sid) continue; const existing = sessionMap.get(crumb.sid); if (!existing) { sessionMap.set(crumb.sid, { name: crumb.type === "session:start" ? crumb.msg : "unknown", app: crumb.app, startedAt: crumb.ts, endedAt: crumb.type === "session:end" ? crumb.ts : undefined, count: 1, }); } else { existing.count++; if (crumb.type === "session:start") existing.name = crumb.msg; if (crumb.type === "session:end") existing.endedAt = crumb.ts; // Update earliest/latest timestamps if (crumb.ts < existing.startedAt) existing.startedAt = crumb.ts; if (!existing.endedAt || crumb.ts > existing.endedAt) { if (crumb.type !== "session:end") { // don't update endedAt for non-end crumbs } else { existing.endedAt = crumb.ts; } } } } // Check for active CLI session let activeSessionId; try { const content = node_fs_1.default.readFileSync(SESSION_FILE, "utf-8").trim(); if (content) { try { const parsed = JSON.parse(content); activeSessionId = parsed.id; } catch { activeSessionId = content; } } } catch { // no active session } if (sessionMap.size === 0) { process.stderr.write("No sessions found.\n"); return; } const showApp = appCtx.allApps; // Print header if (showApp) { process.stdout.write(`${"ID".padEnd(10)} ${"App".padEnd(20)} ${"Name".padEnd(25)} ${"Duration".padEnd(12)} ${"Crumbs".padEnd(8)} Status\n`); process.stdout.write("-".repeat(90) + "\n"); } else { process.stdout.write(`${"ID".padEnd(10)} ${"Name".padEnd(25)} ${"Duration".padEnd(12)} ${"Crumbs".padEnd(8)} Status\n`); process.stdout.write("-".repeat(70) + "\n"); } for (const [id, info] of sessionMap) { const isActive = id === activeSessionId; const duration = info.endedAt ? formatDuration(new Date(info.endedAt).getTime() - new Date(info.startedAt).getTime()) : isActive ? "-" : "?"; const status = isActive ? "active" : info.endedAt ? "stopped" : "?"; if (showApp) { process.stdout.write(`${id.padEnd(10)} ${(info.app ?? "unknown").padEnd(20)} ${info.name.padEnd(25)} ${duration.padEnd(12)} ${String(info.count).padEnd(8)} ${status}\n`); } else { process.stdout.write(`${id.padEnd(10)} ${info.name.padEnd(25)} ${duration.padEnd(12)} ${String(info.count).padEnd(8)} ${status}\n`); } } } function formatDuration(ms) { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; return `${(ms / 60000).toFixed(1)}m`; } //# sourceMappingURL=sessions.js.map