88 lines
1.8 KiB
JavaScript
88 lines
1.8 KiB
JavaScript
/**
|
|
* Simple state store for Command Center
|
|
* Holds the current dashboard state and notifies subscribers of changes
|
|
*/
|
|
|
|
let state = {
|
|
vitals: null,
|
|
sessions: [],
|
|
tokenStats: null,
|
|
statusCounts: { all: 0, live: 0, recent: 0, idle: 0 },
|
|
capacity: null,
|
|
operators: { operators: [], roles: {} },
|
|
llmUsage: null,
|
|
cron: [],
|
|
memory: null,
|
|
cerebro: null,
|
|
subagents: [],
|
|
pagination: { page: 1, pageSize: 50, totalPages: 1 },
|
|
timestamp: null,
|
|
};
|
|
|
|
const subscribers = new Set();
|
|
|
|
/**
|
|
* Get the current state
|
|
* @returns {Object} Current state
|
|
*/
|
|
export function getState() {
|
|
return state;
|
|
}
|
|
|
|
/**
|
|
* Update the state with new data
|
|
* @param {Object} newState - New state data (partial or full)
|
|
*/
|
|
export function setState(newState) {
|
|
state = { ...state, ...newState, timestamp: Date.now() };
|
|
notifySubscribers();
|
|
}
|
|
|
|
/**
|
|
* Subscribe to state changes
|
|
* @param {Function} callback - Called when state changes
|
|
* @returns {Function} Unsubscribe function
|
|
*/
|
|
export function subscribe(callback) {
|
|
subscribers.add(callback);
|
|
return () => subscribers.delete(callback);
|
|
}
|
|
|
|
function notifySubscribers() {
|
|
for (const callback of subscribers) {
|
|
try {
|
|
callback(state);
|
|
} catch (err) {
|
|
console.error("[Store] Subscriber error:", err);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Filter state
|
|
export const filters = {
|
|
session: { status: "all", channel: "all", kind: "all" },
|
|
cron: { status: "all", schedule: "all" },
|
|
memory: { type: "all", age: "all" },
|
|
};
|
|
|
|
export function setFilter(section, key, value) {
|
|
if (filters[section]) {
|
|
filters[section][key] = value;
|
|
notifySubscribers();
|
|
}
|
|
}
|
|
|
|
// Pagination state
|
|
export const pagination = {
|
|
page: 1,
|
|
pageSize: 20,
|
|
total: 0,
|
|
totalPages: 0,
|
|
hasNext: false,
|
|
hasPrev: false,
|
|
};
|
|
|
|
export function setPagination(newPagination) {
|
|
Object.assign(pagination, newPagination);
|
|
}
|