import { getMessageDir } from "../../../shared" export { getMessageDir } export function formatDuration(start: Date, end?: Date): string { const duration = (end ?? new Date()).getTime() - start.getTime() const seconds = Math.floor(duration / 1000) const minutes = Math.floor(seconds / 60) const hours = Math.floor(minutes / 60) if (hours > 0) { return `${hours}h ${minutes % 60}m ${seconds % 60}s` } else if (minutes > 0) { return `${minutes}m ${seconds % 60}s` } else { return `${seconds}s` } } export function truncateText(text: string, maxLength: number): string { if (text.length <= maxLength) return text return text.slice(0, maxLength) + "..." } export function delay(ms: number): Promise { return new Promise(resolve => setTimeout(resolve, ms)) } export function formatMessageTime(value: unknown): string { if (typeof value === "string") { const date = new Date(value) return Number.isNaN(date.getTime()) ? value : date.toISOString() } if (typeof value === "object" && value !== null) { if ("created" in value) { const created = (value as { created?: number }).created if (typeof created === "number") { return new Date(created).toISOString() } } } return "Unknown time" } export type ToolContextWithMetadata = { sessionID: string messageID: string agent: string abort: AbortSignal metadata?: (input: { title?: string; metadata?: Record }) => void }