export interface CronSessionKeyParts { agentId: string; jobId: string; runSessionId?: string; } export function parseCronSessionKey(sessionKey: string): CronSessionKeyParts | null { if (!sessionKey.startsWith('agent:')) return null; const parts = sessionKey.split(':'); if (parts.length < 4 || parts[2] !== 'cron') return null; const agentId = parts[1] || 'main'; const jobId = parts[3]; if (!jobId) return null; if (parts.length === 4) { return { agentId, jobId }; } if (parts.length === 6 && parts[4] === 'run' && parts[5]) { return { agentId, jobId, runSessionId: parts[5] }; } return null; } export function isCronSessionKey(sessionKey: string): boolean { return parseCronSessionKey(sessionKey) != null; } export function buildCronSessionHistoryPath(sessionKey: string, limit = 200): string { const params = new URLSearchParams({ sessionKey }); if (Number.isFinite(limit) && limit > 0) { params.set('limit', String(Math.floor(limit))); } return `/api/cron/session-history?${params.toString()}`; }