@stackmemoryai/stackmemory
Version:
Project-scoped memory for AI coding tools. Durable context across sessions with MCP integration, frames, smart retrieval, Claude Code skills, and automatic hooks.
63 lines (62 loc) • 2 kB
JavaScript
import { fileURLToPath as __fileURLToPath } from 'url';
import { dirname as __pathDirname } from 'path';
const __filename = __fileURLToPath(import.meta.url);
const __dirname = __pathDirname(__filename);
function formatBytes(bytes) {
if (bytes === 0) return "0 B";
const k = 1024;
const sizes = ["B", "KB", "MB", "GB", "TB"];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`;
}
function formatDuration(ms) {
if (ms < 1e3) return `${ms}ms`;
const seconds = Math.floor(ms / 1e3);
const minutes = Math.floor(seconds / 60);
const hours = Math.floor(minutes / 60);
const days = Math.floor(hours / 24);
if (days > 0) {
return `${days}d ${hours % 24}h`;
}
if (hours > 0) {
return `${hours}h ${minutes % 60}m`;
}
if (minutes > 0) {
return `${minutes}m ${seconds % 60}s`;
}
return `${seconds}s`;
}
function formatRelativeTime(timestamp) {
const now = Date.now();
const diff = now - timestamp;
const minutes = Math.floor(diff / 6e4);
const hours = Math.floor(minutes / 60);
const days = Math.floor(hours / 24);
if (days > 0) return `${days} day${days > 1 ? "s" : ""} ago`;
if (hours > 0) return `${hours} hour${hours > 1 ? "s" : ""} ago`;
if (minutes > 0) return `${minutes} minute${minutes > 1 ? "s" : ""} ago`;
return "just now";
}
function truncate(str, maxLength) {
if (str.length <= maxLength) return str;
return str.substring(0, maxLength - 3) + "...";
}
function formatPercent(value, total) {
if (total === 0) return "0%";
return `${(value / total * 100).toFixed(1)}%`;
}
function createProgressBar(value, max, width = 20) {
const percent = Math.min(value / max, 1);
const filled = Math.floor(percent * width);
const empty = width - filled;
return "\u2588".repeat(filled) + "\u2591".repeat(empty);
}
export {
createProgressBar,
formatBytes,
formatDuration,
formatPercent,
formatRelativeTime,
truncate
};
//# sourceMappingURL=formatting.js.map