import type { AllowedUsers } from "./whitelist.js"; import type { SynthesisBundle } from "../fleet/synthesis.js"; /** Returns the parsed bundle, or null when absent/unparseable. Tests inject a fake. */ export type SynthesisReader = () => Promise; /** * Production reader: reads /.bober/fleet-synthesis.json * via node:fs/promises and JSON.parse. Returns null on ENOENT or parse failure * (e.g. non-blackboard run — the file is absent by design in that case). * * bober: single-process JSON read; swap for a streaming parser if * fleet-synthesis.json ever exceeds a few MB in practice. */ export declare function defaultSynthesisReader(): Promise; /** * Group bundle.findings by FactRecord.subject and emit one section per agent. * Returns string[]: index 0 is the header (shows bundle.rounds), subsequent * elements are agent sections (label + one-line summary + round + confidence + count). * * PURE: no IO, no throw, deterministic output from the same input. * * CRITICAL: FactRecord has NO round field (round is lost at publish() in * shared-blackboard.ts). The per-section round AND the header round both * come from bundle.rounds (the run-level count). Do NOT reference finding.round. */ export declare function renderFleetView(bundle: SynthesisBundle): string[]; /** * /fleet command handler. * * Sequence: * 1. Gate FIRST — non-whitelisted senders get denialReply; reader is never called (sc-7-6). * 2. Read bundle via injected reader (default: disk via defaultSynthesisReader). * 3. Absent or empty findings → return a friendly "no recent fleet run" message. * 4. Non-empty bundle → return renderFleetView sections joined into one reply string. * * Returns a plain string for the caller to pass through sendSafe — no transport access here. */ export declare function handleFleet(senderId: number, allowed: AllowedUsers, reader?: SynthesisReader): Promise; //# sourceMappingURL=fleet-view.d.ts.map