fix(status): hide healthy plugin summary (#100143)

* fix(status): hide healthy plugin summary

* fix(status): hide healthy plugin summary
This commit is contained in:
Peter Steinberger
2026-07-04 22:55:23 -04:00
committed by GitHub
parent 194d85e891
commit 4d181b62a9
4 changed files with 10 additions and 7 deletions
+1
View File
@@ -31,6 +31,7 @@ Docs: https://docs.openclaw.ai
### Fixes
- **Status signal:** omit the redundant `Plugins: OK` row from compact `/status` output while retaining actionable plugin-health warnings and detailed plugin status.
- **Control UI terminal rendering:** adopt the shared `@openclaw/libterminal` browser lifecycle and add Nerd Font fallbacks so icon-enabled shell listings render their glyphs when a compatible local font is installed.
- **Control UI chat history:** hide redundant channel-final delivery mirrors when the preceding app-server assistant reply already shows the same text.
- **Control UI chat spacing:** keep the first message comfortably clear of the topbar with a responsive minimum transcript inset.
+3 -3
View File
@@ -14,8 +14,8 @@ const emptySnapshot: StatusPluginHealthSnapshot = {
};
describe("plugin health status formatting", () => {
it("shows a tiny OK line when there are no plugin health problems", () => {
expect(formatCompactPluginHealthLine(emptySnapshot)).toBe("🔌 Plugins: OK");
it("omits the compact line when there are no plugin health problems", () => {
expect(formatCompactPluginHealthLine(emptySnapshot)).toBeUndefined();
});
it("summarizes plugin errors and context engine quarantines in the compact line", () => {
@@ -119,7 +119,7 @@ describe("plugin health status formatting", () => {
},
],
}),
).toBe("🔌 Plugins: OK");
).toBeUndefined();
});
it("merges runtime health into installed plugin snapshots for detailed status", () => {
+5 -3
View File
@@ -224,7 +224,9 @@ function formatCount(count: number, noun: string): string {
return `${count} ${noun}${count === 1 ? "" : "s"}`;
}
export function formatCompactPluginHealthLine(snapshot: StatusPluginHealthSnapshot): string {
export function formatCompactPluginHealthLine(snapshot: StatusPluginHealthSnapshot):
| string
| undefined {
const loadErrors = snapshot.plugins.filter((plugin) => plugin.status === "error").length;
const dependencyIssues = snapshot.plugins.filter(hasDependencyIssue).length;
const diagnosticErrors = countProblemDiagnostics(getReportableDiagnostics(snapshot)).errors;
@@ -243,7 +245,7 @@ export function formatCompactPluginHealthLine(snapshot: StatusPluginHealthSnapsh
diagnosticErrors > 0 ? formatCount(diagnosticErrors, "diagnostic error") : null,
].filter((part): part is string => Boolean(part));
return parts.length === 0 ? "🔌 Plugins: OK" : `⚠️ Plugins: ${parts.join(" · ")}`;
return parts.length === 0 ? undefined : `⚠️ Plugins: ${parts.join(" · ")}`;
}
function formatPluginList(ids: readonly string[], limit: number): string {
@@ -323,7 +325,7 @@ export function formatDetailedPluginHealth(snapshot: StatusPluginHealthSnapshot)
byLocale(left.configuredId, right.configuredId) || byLocale(left.source, right.source),
);
const lines = [
formatCompactPluginHealthLine(snapshot),
formatCompactPluginHealthLine(snapshot) ?? "🔌 Plugins: OK",
`Loaded: ${loaded.length}${loaded.length > 0 ? ` (${formatPluginList(loaded, 8)})` : ""}`,
`Disabled: ${disabled}`,
];
+1 -1
View File
@@ -274,7 +274,7 @@ function buildStatusUptimeLine(): string {
return `⏱️ Uptime: gateway ${formatStatusUptimeDuration(gatewayUptimeMs)} · system ${formatStatusUptimeDuration(systemUptimeMs)}`;
}
async function resolveRuntimePluginHealthLine(): Promise<string> {
async function resolveRuntimePluginHealthLine(): Promise<string | undefined> {
try {
const { collectRuntimePluginHealthSnapshot } = await loadStatusPluginHealthRuntime();
return formatCompactPluginHealthLine(collectRuntimePluginHealthSnapshot());