(value: string)
| 125 | const PEER_COUNT_HIGH_THRESHOLD = 2; |
| 126 | |
| 127 | function parseElapsedSeconds(value: string): number | null { |
| 128 | const trimmed = value.trim(); |
| 129 | if (!trimmed) { |
| 130 | return null; |
| 131 | } |
| 132 | |
| 133 | const daySplit = trimmed.split('-'); |
| 134 | const timePart = daySplit.length === 2 ? daySplit[1] : daySplit[0]; |
| 135 | const dayCount = daySplit.length === 2 ? Number(daySplit[0]) : 0; |
| 136 | const parts = timePart.split(':').map(Number); |
| 137 | |
| 138 | if (!Number.isFinite(dayCount) || parts.some((p) => !Number.isFinite(p))) { |
| 139 | return null; |
| 140 | } |
| 141 | |
| 142 | const daySeconds = dayCount * 86400; |
| 143 | switch (parts.length) { |
| 144 | case 1: |
| 145 | return daySeconds + parts[0]; |
| 146 | case 2: |
| 147 | return daySeconds + parts[0] * 60 + parts[1]; |
| 148 | case 3: |
| 149 | return daySeconds + parts[0] * 3600 + parts[1] * 60 + parts[2]; |
| 150 | default: |
| 151 | return null; |
| 152 | } |
| 153 | } |
| 154 | |
| 155 | export function classifyMcpLifecycleAnomalies( |
| 156 | snapshot: Pick< |
no outgoing calls
no test coverage detected