feat(client): persist digital employee snapshots
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import { contextBridge, ipcRenderer } from "electron";
|
||||
|
||||
type PerfPayload = Record<string, unknown>;
|
||||
type ServiceStatus = Record<string, unknown> | null;
|
||||
|
||||
const CHAT_ROUTE_RE = /^\/home\/chat\/\d+\/\d+$/;
|
||||
const CHAT_ROOT_SELECTOR = '[data-qimingclaw-perf-scope="chat-root"]';
|
||||
@@ -94,68 +93,7 @@ contextBridge.exposeInMainWorld("QimingClawBridge", {
|
||||
perf,
|
||||
digital: {
|
||||
async getSnapshot() {
|
||||
const [
|
||||
agent,
|
||||
mcp,
|
||||
computerServer,
|
||||
lanproxy,
|
||||
fileServer,
|
||||
guiServer,
|
||||
sessionsResult,
|
||||
] = await Promise.all([
|
||||
ipcRenderer.invoke("agent:serviceStatus").catch((error) => ({
|
||||
running: false,
|
||||
error: String(error),
|
||||
})),
|
||||
ipcRenderer.invoke("mcp:status").catch((error) => ({
|
||||
running: false,
|
||||
error: String(error),
|
||||
})),
|
||||
ipcRenderer.invoke("computerServer:status").catch((error) => ({
|
||||
running: false,
|
||||
error: String(error),
|
||||
})),
|
||||
ipcRenderer.invoke("lanproxy:status").catch((error) => ({
|
||||
running: false,
|
||||
error: String(error),
|
||||
})),
|
||||
ipcRenderer.invoke("fileServer:status").catch((error) => ({
|
||||
running: false,
|
||||
error: String(error),
|
||||
})),
|
||||
ipcRenderer.invoke("guiServer:status").catch((error) => ({
|
||||
running: false,
|
||||
error: String(error),
|
||||
})),
|
||||
ipcRenderer.invoke("agent:listSessionsDetailed").catch((error) => ({
|
||||
success: false,
|
||||
data: [],
|
||||
error: String(error),
|
||||
})),
|
||||
]);
|
||||
|
||||
const sessions = Array.isArray(sessionsResult?.data)
|
||||
? sessionsResult.data
|
||||
: [];
|
||||
|
||||
return {
|
||||
generatedAt: new Date().toISOString(),
|
||||
services: {
|
||||
agent: agent as ServiceStatus,
|
||||
mcp: mcp as ServiceStatus,
|
||||
computerServer: computerServer as ServiceStatus,
|
||||
lanproxy: lanproxy as ServiceStatus,
|
||||
fileServer: fileServer as ServiceStatus,
|
||||
guiServer: guiServer as ServiceStatus,
|
||||
},
|
||||
sessions: {
|
||||
total: sessions.length,
|
||||
active: sessions.filter((session: { status?: string }) =>
|
||||
session.status === "active" || session.status === "pending",
|
||||
).length,
|
||||
items: sessions.slice(0, 10),
|
||||
},
|
||||
};
|
||||
return ipcRenderer.invoke("digitalEmployee:getSnapshot");
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user