mirror of
https://github.com/razzant/ouroboros.git
synced 2026-10-03 12:18:39 +00:00
17 lines
1.2 KiB
JavaScript
17 lines
1.2 KiB
JavaScript
// One line of truth for an extension "action" whose response carries no
|
|
// `message`: every top-level object with a `state` string is summarised as
|
|
// `key: state (reason)`, so a degraded bridge is reported as what it is
|
|
// instead of the generic "Saved." (#376). Summaries take the neutral tone —
|
|
// the text is a status report, not a success claim.
|
|
export function extensionActionStatus(data, fallback = 'Saved.') {
|
|
if (!data || typeof data !== 'object' || Array.isArray(data)) return { text: fallback, tone: 'ok' };
|
|
if (typeof data.message === 'string' && data.message.trim()) return { text: data.message, tone: 'ok' };
|
|
const parts = [];
|
|
for (const [key, value] of Object.entries(data)) {
|
|
if (!value || typeof value !== 'object' || Array.isArray(value)) continue;
|
|
if (typeof value.state !== 'string' || !value.state.trim()) continue;
|
|
const reason = [value.reason_code, value.message].find((item) => typeof item === 'string' && item.trim());
|
|
parts.push(reason ? `${key}: ${value.state} (${reason})` : `${key}: ${value.state}`);
|
|
}
|
|
return parts.length ? { text: parts.join(' · '), tone: 'muted' } : { text: fallback, tone: 'ok' };
|
|
}
|