/** * The run→project index the daemon tags `/ws` frames with (DES-PROJECT-001 §5.2: "the daemon * tags frames with `project_id` from the membership table" — no new socket, no engine change). * * A latency layer, NOT truth: the membership table in core.db is authoritative; this map exists * because the tag is applied on the synchronous event fan-out path where an engine read per frame * is unaffordable. It hydrates once from the engine at server start and is updated by exactly the * route handlers that change memberships (launch-with-projectId, attach, detach) — the same * post-commit points that emit the bus events, so the map can only lag by a failed hydrate, never * diverge silently. */ import type { CoreAdapter } from '../core/adapter.js'; export declare class MembershipIndex { private readonly runToProject; /** * Load every live `crew.run`/`crew.chat` membership from the engine. Best-effort: a pre-0.6.0 * addon (no project surface) leaves the index empty — frames simply go untagged, which is the * pre-projects behavior, not an error. */ hydrate(adapter: CoreAdapter, log?: (msg: string) => void): Promise; set(runOrChatId: string, projectId: string): void; delete(runOrChatId: string): void; projectOf(runOrChatId: string): string | undefined; /** WT-W4: every run or chat id the index maps to `projectId` (the discovery view's member set). */ runsOf(projectId: string): string[]; } //# sourceMappingURL=membership-index.d.ts.map