UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

70 lines (69 loc) 2.4 kB
//#region src/skills/runtime/refresh-state.ts const listeners = /* @__PURE__ */ new Set(); const workspaceVersions = /* @__PURE__ */ new Map(); const INITIAL_SKILLS_SNAPSHOT_VERSION = Date.now(); let globalVersion = INITIAL_SKILLS_SNAPSHOT_VERSION; 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 = INITIAL_SKILLS_SNAPSHOT_VERSION; 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 };