/**
 * Routes events from event sources (file watcher, cron, future kinds) to
 * matching subscriptions, then hands each matched subscription to a
 * dispatcher that knows how to invoke the target member.
 *
 * The router is registry-agnostic by design: it does NOT call
 * SubagentExecutor / CustomCommandLoader / ToolRegistry directly. The
 * `SubscriptionDispatcher` interface decouples matching from invocation so
 * the router can be unit-tested without standing up a full toolchain, and
 * so the dispatcher can evolve (plan-mode for confirm:true, checkpointing,
 * activity surfacing) without touching the router.
 *
 * See `agents/2026-05-20-skills-unification-plan.md` step 8.
 */
import type { Event, EventKind, Subscription } from './types.js';
export interface SubscriptionDispatcher {
    dispatch(subscription: Subscription, event: Event): Promise<void> | void;
}
export declare class EventRouter {
    private readonly dispatcher;
    private readonly byKind;
    private readonly byId;
    constructor(dispatcher: SubscriptionDispatcher);
    subscribe(subscription: Subscription): void;
    unsubscribe(id: string): boolean;
    listByKind(kind: EventKind): Subscription[];
    all(): Subscription[];
    emit(event: Event): Promise<void>;
}
export declare function matchesFilter(sub: Subscription, event: Event): boolean;
export declare function matchGlob(pattern: string, path: string): boolean;
//# sourceMappingURL=event-router.d.ts.map