import type { ChannelAccountSnapshot } from "openclaw/plugin-sdk/channel-contract"; import {
createConnectedChannelStatusPatch,
createTransportActivityStatusPatch,
} from "openclaw/plugin-sdk/gateway-runtime"; import { formatMatrixErrorMessage } from "../errors.js"; import {
isMatrixDisconnectedSyncState,
isMatrixReadySyncState,
type MatrixSyncState,
} from "../sync-state.js";
type MatrixMonitorStatusSink = (patch: ChannelAccountSnapshot) => void;
function cloneLastDisconnect(
value: ChannelAccountSnapshot["lastDisconnect"],
): ChannelAccountSnapshot["lastDisconnect"] { if (!value || typeof value === "string") { return value ?? null;
} return { ...value };
}
function formatSyncError(error: unknown): string | null { if (!error) { returnnull;
} if (error instanceof Error) { return error.message || error.name || "unknown";
} return formatMatrixErrorMessage(error);
}
export type MatrixMonitorStatusController = ReturnType<typeof createMatrixMonitorStatusController>;
return {
noteSyncState(state: MatrixSyncState, error?: unknown, at = Date.now()) { if (isMatrixReadySyncState(state)) { // matrix-js-sdk emits SYNCING after each successful /sync response. // PREPARED can be cache-backed and CATCHUP is a lifecycle bridge, so // neither should refresh transport liveness.
noteConnected(at, { transportActivity: state === "SYNCING" }); return;
} if (isMatrixDisconnectedSyncState(state)) {
noteDisconnected({ state, at, error }); return;
} // Unknown future SDK states inherit the current connectivity bit until the // SDK classifies them as ready or disconnected. Avoid guessing here.
status.lastEventAt = at;
status.healthState = state.toLowerCase();
emit();
},
noteUnexpectedError(error: unknown, at = Date.now()) {
noteDisconnected({ state: "ERROR", at, error });
},
markStopped(at = Date.now()) {
status.connected = false;
status.lastEventAt = at; if (status.healthState !== "error") {
status.healthState = "stopped";
}
emit();
},
};
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.13Bemerkung:
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.