diff --git a/extensions/diagnostics-otel/src/service.ts b/extensions/diagnostics-otel/src/service.ts index 8c3f607fd66..3ada2aefacc 100644 --- a/extensions/diagnostics-otel/src/service.ts +++ b/extensions/diagnostics-otel/src/service.ts @@ -2222,6 +2222,8 @@ export function createDiagnosticsOtelService(): OpenClawPluginService { case "diagnostic.liveness.warning": recordLivenessWarning(evt); return; + case "diagnostic.phase.completed": + return; case "run.started": recordRunStarted(evt, metadata); return; diff --git a/src/logging/diagnostic-phase.ts b/src/logging/diagnostic-phase.ts index abd8b379a40..d6b8ddbb1bc 100644 --- a/src/logging/diagnostic-phase.ts +++ b/src/logging/diagnostic-phase.ts @@ -39,7 +39,7 @@ export function getCurrentDiagnosticPhase(): string | undefined { } export function getRecentDiagnosticPhases(limit = 8): DiagnosticPhaseSnapshot[] { - return recentPhases.slice(-Math.max(0, limit)).map((phase) => ({ ...phase })); + return recentPhases.slice(-Math.max(0, limit)).map((phase) => Object.assign({}, phase)); } export function recordDiagnosticPhase(snapshot: DiagnosticPhaseSnapshot): void { diff --git a/src/logging/diagnostic.test.ts b/src/logging/diagnostic.test.ts index ac93e0e2212..26eae67d146 100644 --- a/src/logging/diagnostic.test.ts +++ b/src/logging/diagnostic.test.ts @@ -397,7 +397,7 @@ describe("stuck session diagnostics threshold", () => { } expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("terminalProgressStale=true")); - expect(events.filter((event) => event.type === "session.stalled").at(-1)).toMatchObject({ + expect(events.findLast((event) => event.type === "session.stalled")).toMatchObject({ terminalProgressStale: true, lastProgressReason: "codex_app_server:notification:rawResponseItem/completed", }); @@ -754,9 +754,7 @@ describe("stuck session diagnostics threshold", () => { expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("phase=startup.plugins.load")); expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("work=[queued=main(")); - expect( - events.filter((event) => event.type === "diagnostic.liveness.warning").at(-1), - ).toMatchObject({ + expect(events.findLast((event) => event.type === "diagnostic.liveness.warning")).toMatchObject({ phase: "startup.plugins.load", queuedWorkLabels: [expect.stringContaining("main(")], });