UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

71 lines (70 loc) 3.01 kB
import { r as matchesSkillFilter } from "./agent-filter-Ckm_ksHY.js"; import { t as stableStringify } from "./stable-stringify-BL8fDhrH.js"; import { t as buildWorkspaceSkillSnapshot } from "./workspace-_gXfieOh.js"; import { n as redactConfigObject } from "./redact-snapshot-CuoBedjD.js"; import { r as getSkillsSnapshotVersion, s as shouldRefreshSnapshotForVersion } from "./refresh-state-DzUL33ps.js"; import { n as ensureSkillsWatcher } from "./refresh-DOopJbr6.js"; import crypto from "node:crypto"; //#region src/skills/runtime/snapshot-hydration.ts function hydrateResolvedSkills(snapshot, rebuild) { if (snapshot.resolvedSkills !== void 0) return snapshot; return { ...snapshot, resolvedSkills: rebuild().resolvedSkills }; } //#endregion //#region src/skills/runtime/session-snapshot.ts const resolvedSkillsCache = /* @__PURE__ */ new Map(); const RESOLVED_SKILLS_CACHE_MAX = 10; function resetResolvedSkillsCacheForTests() { resolvedSkillsCache.clear(); } function fingerprintSkillSnapshotConfig(config) { return crypto.createHash("sha256").update(stableStringify(redactConfigObject(config))).digest("hex"); } function cacheResolvedSkills(cacheKey, snapshot) { resolvedSkillsCache.set(cacheKey, snapshot.resolvedSkills); if (resolvedSkillsCache.size > RESOLVED_SKILLS_CACHE_MAX) { const oldest = resolvedSkillsCache.keys().next().value; if (oldest !== void 0) resolvedSkillsCache.delete(oldest); } return snapshot; } function resolveReusableWorkspaceSkillSnapshot(params) { if (params.watch !== false) ensureSkillsWatcher({ workspaceDir: params.workspaceDir, config: params.config }); const snapshotVersion = params.snapshotVersion ?? getSkillsSnapshotVersion(params.workspaceDir); const shouldRefresh = shouldRefreshSnapshotForVersion(params.existingSnapshot?.version, snapshotVersion) || !matchesSkillFilter(params.existingSnapshot?.skillFilter, params.skillFilter); const buildSnapshot = () => { return buildWorkspaceSkillSnapshot(params.workspaceDir, { config: params.config, agentId: params.agentId, skillFilter: params.skillFilter, eligibility: params.eligibility, snapshotVersion }); }; const configFingerprint = fingerprintSkillSnapshotConfig(params.config); const snapshotCacheKey = JSON.stringify([ params.workspaceDir, snapshotVersion, params.skillFilter, params.agentId, params.eligibility, configFingerprint ]); const cachedRebuild = () => { if (resolvedSkillsCache.has(snapshotCacheKey)) return { resolvedSkills: resolvedSkillsCache.get(snapshotCacheKey) }; return cacheResolvedSkills(snapshotCacheKey, buildSnapshot()); }; return { snapshot: !params.existingSnapshot || shouldRefresh ? cacheResolvedSkills(snapshotCacheKey, buildSnapshot()) : params.hydrateExisting === false ? params.existingSnapshot : hydrateResolvedSkills(params.existingSnapshot, cachedRebuild), shouldRefresh, snapshotVersion }; } //#endregion export { resolveReusableWorkspaceSkillSnapshot as n, resetResolvedSkillsCacheForTests as t };