/** * The registry's pulled sources and its `/ws` relay (DES-TRIGGER-REGISTRY-001 §4.5, §4.6). * * BUS PULL. Bus key points are PULLED through the engine (`tapBus` over `Core.busRead`), never * pushed: the tap awaits each row's handler (route, check, emit) before it reads on, so its * in-memory cursor advances only after the row's outputs were emitted or recorded as failed. When * the lanes are slow the tap simply reads later; the bus is the buffer. Armed only while an enabled * entry listens on the bus (the first is TR-W7's `scope-drift`, joined to the team's `plan.accepted` * row; none did in TR-W5a). * * RELAY. Watch rows reach `/ws` as `{type:"watchEvent", event:, project_id?}` through a tap * of `wicked.crew.watch_finding.**`, the team relay's pattern (`team/ws-relay.ts`). The registry * never broadcasts directly, so the socket and the record cannot disagree. */ import type { CoreEvent } from '../core/types.js'; import type { KeyPointInput } from './types.js'; export interface BusPull { /** ms between the newest handled row's emit and its handling (0 when caught up). */ tailLagMs(): number; stop(): Promise; } /** Arm the bus pull. `wants(type)` is the router's O(1) type check; `handle` is awaited per row. */ export declare function startBusPull(opts: { dbPath: string; wants: (type: string) => boolean; handle: (input: KeyPointInput) => Promise; pollIntervalMs?: number; log?: (msg: string) => void; }): Promise; /** The boot replay's bus half (§4.8 step 2): the wanted rows of the live runs, oldest first. */ export declare function replayBusRows(dbPath: string, types: readonly string[], liveRuns: ReadonlySet): Promise; export interface WatchRelay { stop(): Promise; } /** Arm the `watchEvent` relay; `null` (logged) when no engine holds the bus. */ export declare function startWatchWsRelay(opts: { dbPath: string; projectOf: (runId: string) => string | undefined; broadcast: (frame: CoreEvent) => void; pollIntervalMs?: number; log?: (msg: string) => void; }): Promise; //# sourceMappingURL=sources.d.ts.map