/** * `FleetReport` — the shared, loud rendering of a config mutation's fleet broadcast. * Every mutation surface (connector, backup, mcp-config, env, extensions, single-MCP * reload, fleet reload) computes a `FleetReportSummary` from its response through the * api-client's shared handler and hands it here, so a FAILED propagation is never * invisible. * * The `action` prop tunes the copy to the caller's framing: `'save'` (the default, * used by every config-mutation surface) reports a saved change that did not fully * propagate and points the operator at the System page to reload; `'reload'` (the * System page's own fleet-reload action) drops the "Change saved" framing — nothing * was saved, a reload was dispatched — and the self-referential System-page pointer; * `'deregister'` and `'remove'` (detach fan-outs) likewise drop the "Change saved" * framing and points the operator back at re-running the deregister, because a * reload would re-attach the very server being detached — the wrong remediation. * * A `converged` summary (every worker applied, or a lone-worker local-only change) * renders NOTHING — the calling surface shows its own success. A `degraded` summary * (the bus was reached but a sibling did not confirm) or an `unreachable` summary (the * bus itself failed) renders a loud `role="alert"` panel naming the honest per-worker * outcomes: `failed` / `missing` / `departed` / `timed_out` / `resyncing` / `recycling` / * `stale`, or the bus error. It never fakes success on a stranded worker. Every * server-supplied string (a worker name, an error/detail message) renders as escaped * React text, never an HTML sink. * * Every state — the headline and each worker's outcome — is a `tai-status` line: an * icon MARK plus a word LABEL, with the tone color only reinforcing them, so the * report is readable without color perception. */ import type { FleetReportSummary } from '@tai42/api-client'; import type { ReactNode } from 'react'; /** * Render a fleet broadcast's failure state. Returns `null` for a converged/absent * report (nothing to warn about) so callers can always mount it unconditionally * beside their own success line. */ export interface FleetReportProps { readonly summary: FleetReportSummary | null; /** * Whose framing the copy takes: a saved config change (`'save'`), a dispatched * reload (`'reload'`), a connector detach fan-out (`'deregister'`), or a live-registry * tool removal (`'remove'`). All but `'save'` drop the "Change saved" framing; * `'deregister'` and `'remove'` also point remediation back at re-running that * same detach, since a reload would re-attach the detached server or tool. */ readonly action?: 'save' | 'reload' | 'deregister' | 'remove'; } export declare function FleetReport({ summary, action }: FleetReportProps): ReactNode; //# sourceMappingURL=fleet-report.d.ts.map