Multi-agent audit + aggressive cleanup across server/web/coder/booterm, delivered behind a DEFER discipline so none of the in-flight files were touched. Removes dead code/deps/columns, dedups server + coder helpers, and splits the oversized modules (tools.ts, opencode-server.ts, sentinel-summaries, turn.ts, TerminalPane.tsx) behind stable contracts. Adds 78 parity/unit tests (server 587, coder 323); fixes two latent bugs (ChatPane queue keys, FileViewerOverlay blank-line parity). Intended tag: v2.7.12-audit-cleanup.
45 lines
1.6 KiB
TypeScript
45 lines
1.6 KiB
TypeScript
// Short "Xs/m/h/d/mo/y" relative time without "ago" suffix (ProjectSidebar).
|
|
export function relTime(iso: string): string {
|
|
const now = Date.now();
|
|
const t = Date.parse(iso);
|
|
if (Number.isNaN(t)) return '';
|
|
const sec = Math.max(0, Math.floor((now - t) / 1000));
|
|
if (sec < 60) return `${sec}s`;
|
|
const min = Math.floor(sec / 60);
|
|
if (min < 60) return `${min}m`;
|
|
const hr = Math.floor(min / 60);
|
|
if (hr < 24) return `${hr}h`;
|
|
const day = Math.floor(hr / 24);
|
|
if (day < 30) return `${day}d`;
|
|
const mo = Math.floor(day / 30);
|
|
if (mo < 12) return `${mo}mo`;
|
|
return `${Math.floor(mo / 12)}y`;
|
|
}
|
|
|
|
// "just now / Xm ago / Xh ago / Xd ago" with locale-date fallback for >7d
|
|
// (SessionLandingPage).
|
|
export function formatRelative(iso: string): string {
|
|
const then = new Date(iso).getTime();
|
|
if (Number.isNaN(then)) return '';
|
|
const s = Math.max(0, Math.round((Date.now() - then) / 1000));
|
|
if (s < 60) return 'just now';
|
|
const m = Math.round(s / 60);
|
|
if (m < 60) return `${m}m ago`;
|
|
const h = Math.round(m / 60);
|
|
if (h < 24) return `${h}h ago`;
|
|
const d = Math.round(h / 24);
|
|
if (d < 7) return `${d}d ago`;
|
|
return new Date(iso).toLocaleDateString();
|
|
}
|
|
|
|
// "just now / Xm ago / Xh ago / Xd ago" with no full-date fallback (AgentPicker).
|
|
export function formatAgo(iso: string): string {
|
|
const then = new Date(iso).getTime();
|
|
if (Number.isNaN(then)) return '—';
|
|
const diff = Date.now() - then;
|
|
if (diff < 60_000) return 'just now';
|
|
if (diff < 3_600_000) return `${Math.round(diff / 60_000)}m ago`;
|
|
if (diff < 86_400_000) return `${Math.round(diff / 3_600_000)}h ago`;
|
|
return `${Math.round(diff / 86_400_000)}d ago`;
|
|
}
|