import { PeerInfo, MessageRecord } from "../types.js";
export declare function registerPeer(peerId: string, sessionId: string, cwd: string, label: string, clientVersion?: string, mode?: "observer" | "agent", channelSessionId?: string, capabilities?: string[], workspaceId?: string, threadId?: string): Promise<PeerInfo>;
export declare function updateLastSeen(peerId: string): Promise<void>;
export declare function deregisterPeer(peerId: string): Promise<boolean>;
export declare function getPeer(peerId: string): Promise<PeerInfo | undefined>;
export declare function listPeers(): Promise<PeerInfo[]>;
export declare function recordMessage(record: Omit<MessageRecord, "id" | "timestamp">): Promise<MessageRecord>;
/**
 * The metadataOnly projection contract — the EXACT key set, sorted.
 *
 * One documented contract has two implementations: this file (local mode) and
 * server/src/routes/messages.ts (the relay). They silently disagreed for the
 * whole of Cogent Mail M2.5 — the relay gained attachmentCount, local mode did
 * not — because each was tested only against itself. This const is the bridge
 * side's single source of truth: the local projection is asserted against it,
 * and src/e2e/metadata-contract.e2e.test.ts asserts a REAL relay response
 * against the same list, so the two cannot drift apart without a test going
 * red. The tool description in src/tools/get-history.ts must name these keys.
 */
export declare const METADATA_ONLY_KEYS: readonly ["attachmentCount", "durationMs", "fromPeerId", "id", "isRelayEcho", "success", "timestamp", "toPeerId"];
export declare function getHistory(peerId?: string, limit?: number, includeRelayEchoes?: boolean, metadataOnly?: boolean): Promise<MessageRecord[]>;
//# sourceMappingURL=peer-registry.d.ts.map