export interface WatcherCallbacks { onConfigReload: () => void; onCronReload: () => void; onOrgChange: () => void; onSkillsChange: () => void; onPluginsChange: () => void; } /** A debounced call whose pending timer can be cancelled from outside the closure. */ export type Debounced = (() => void) & { cancel: () => void; }; export declare function debounce(fn: () => void, ms: number): Debounced; /** * Sync symlinks in .claude/skills/ and .agents/skills/ to match skills/. * Each skill directory gets a relative symlink: ../../skills/ */ export declare function syncSkillSymlinks(): void; /** Read relative to the plugins root, so a home that happens to sit under a path * with one of those names is still watched. Exported for the test that holds the * set to what it claims, rather than measuring it through the filesystem. */ export declare function isUnwatchedPluginPath(target: string): boolean; export declare function startWatchers(callbacks: WatcherCallbacks): void; export declare function stopWatchers(): Promise; //# sourceMappingURL=watcher.d.ts.map