/** * The single refusal wording, shared by every tool that enforces the rule so * the refusal reads identically across all five. * * It names the rejected key and the account, and deliberately does not tell the * caller to supply a `userId`. The tools' previous error text did exactly that, * and an agent with no way to learn a real AdminUser id supplied a * plausible-looking name instead — which is how the invented key `rob-mead` * reached a live client account. */ export declare function unknownAdminUserMessage(tool: string, userId: string, accountId: string): string; /** Raised when a key names no `:AdminUser` on the calling account. */ export declare class VoiceIdentityError extends Error { readonly userId: string; readonly accountId: string; constructor(tool: string, userId: string, accountId: string); } /** * Throws `VoiceIdentityError` when `userId` names no `:AdminUser` on * `accountId`. * * `ORG_USER_ID` returns immediately without a query: the reserved org key * legitimately names no `:AdminUser` and anchors on `:LocalBusiness` instead * (Task 676). Short-circuiting before the session also keeps org scope working * on a spawn that carries `ACCOUNT_ID` but no personal identity (Task 975). * * A driver error propagates. The gate never reports valid on a failed lookup, * so a Neo4j outage refuses writes rather than opening the gate. */ export declare function assertAdminUserOnAccount(tool: string, userId: string, accountId: string): Promise; //# sourceMappingURL=admin-user.d.ts.map