| 282 | * Reset internal state for testing purposes only. |
| 283 | */ |
| 284 | export async function resetForTesting(overrides?: { |
| 285 | stabilityThreshold?: number |
| 286 | pollInterval?: number |
| 287 | reloadDebounce?: number |
| 288 | chokidarInterval?: number |
| 289 | }): Promise<void> { |
| 290 | // Clean up existing watcher if present to avoid resource leaks |
| 291 | if (watcher) { |
| 292 | await watcher.close() |
| 293 | watcher = null |
| 294 | } |
| 295 | if (reloadTimer) { |
| 296 | clearTimeout(reloadTimer) |
| 297 | reloadTimer = null |
| 298 | } |
| 299 | pendingChangedPaths.clear() |
| 300 | skillsChanged.clear() |
| 301 | initialized = false |
| 302 | disposed = false |
| 303 | testOverrides = overrides ?? null |
| 304 | } |
| 305 | |
| 306 | export const skillChangeDetector = { |
| 307 | initialize, |