openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
69 lines (68 loc) • 2.29 kB
JavaScript
//#region src/skills/runtime/refresh-state.ts
const listeners = /* @__PURE__ */ new Set();
const workspaceVersions = /* @__PURE__ */ new Map();
let globalVersion = 0;
let listenerErrorHandler;
function bumpVersion(current) {
const now = Date.now();
return now <= current ? current + 1 : now;
}
function emit(event) {
for (const listener of listeners) try {
listener(event);
} catch (err) {
listenerErrorHandler?.(err);
}
}
function setSkillsChangeListenerErrorHandler(handler) {
listenerErrorHandler = handler;
}
function registerSkillsChangeListener(listener) {
listeners.add(listener);
return () => {
listeners.delete(listener);
};
}
function bumpSkillsSnapshotVersion(params) {
const reason = params?.reason ?? "manual";
const changedPath = params?.changedPath;
if (params?.workspaceDir) {
const next = bumpVersion(Math.max(globalVersion, workspaceVersions.get(params.workspaceDir) ?? 0));
workspaceVersions.set(params.workspaceDir, next);
emit({
workspaceDir: params.workspaceDir,
reason,
changedPath
});
return next;
}
globalVersion = bumpVersion(globalVersion);
emit({
reason,
changedPath
});
return globalVersion;
}
function getSkillsSnapshotVersion(workspaceDir) {
if (!workspaceDir) return globalVersion;
const local = workspaceVersions.get(workspaceDir) ?? 0;
return Math.max(globalVersion, local);
}
function clearSkillsSnapshotVersionForWorkspace(workspaceDir) {
const local = workspaceVersions.get(workspaceDir);
if (typeof local === "number" && local > globalVersion) globalVersion = local;
workspaceVersions.delete(workspaceDir);
}
function shouldRefreshSnapshotForVersion(cachedVersion, nextVersion) {
const cached = typeof cachedVersion === "number" ? cachedVersion : 0;
const next = typeof nextVersion === "number" ? nextVersion : 0;
return next === 0 ? cached > 0 : cached < next;
}
function resetSkillsRefreshStateForTest() {
listeners.clear();
workspaceVersions.clear();
globalVersion = 0;
listenerErrorHandler = void 0;
}
//#endregion
export { resetSkillsRefreshStateForTest as a, registerSkillsChangeListener as i, clearSkillsSnapshotVersionForWorkspace as n, setSkillsChangeListenerErrorHandler as o, getSkillsSnapshotVersion as r, shouldRefreshSnapshotForVersion as s, bumpSkillsSnapshotVersion as t };