/** * `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) with * no worker awaiting a respawn 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. * * Whatever the status, a worker whose reload named recycle-class settings awaiting a * respawn is listed in a warning status panel beside it: the reload applied every other * change, and those settings take effect only when that worker restarts. * * 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 and its workers awaiting a respawn. Returns * `null` for an absent report or a converged one with no worker awaiting a respawn * (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