UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

137 lines (136 loc) 4.77 kB
import "node:path"; import "node:url"; import { AsyncLocalStorage } from "node:async_hooks"; //#region src/shared/global-singleton.ts /** * Process-local singleton helpers for registries, caches, and SDK-visible shared state. * Keys must be symbols so unrelated modules cannot collide on `globalThis` property names. */ const GLOBAL_SINGLETON_RESETS_KEY = Symbol.for("openclaw.globalSingletonLifecycleResets"); function resolveGlobalSingletonResetRegistry() { const globalStore = globalThis; const existing = globalStore[GLOBAL_SINGLETON_RESETS_KEY]; if (existing instanceof Map) return existing; const created = /* @__PURE__ */ new Map(); globalStore[GLOBAL_SINGLETON_RESETS_KEY] = created; return created; } /** Resolves a process-local singleton for caches and registries that tolerate helper lookup. */ function resolveGlobalSingleton(key, create, reset, lifecycle = "close-and-restart") { const globalStore = globalThis; let value; if (Object.hasOwn(globalStore, key)) value = globalStore[key]; else { value = create(); globalStore[key] = value; } if (reset) resolveGlobalSingletonResetRegistry().set(key, { lifecycle, reset: () => reset(value) }); return value; } //#endregion //#region src/plugins/plugin-cache-artifacts.ts function createPluginCacheArtifacts() { return { moduleLoaders: /* @__PURE__ */ new Map(), sources: /* @__PURE__ */ new Map(), sourceAliases: /* @__PURE__ */ new Map() }; } //#endregion //#region src/plugins/plugin-cache-management.ts function createPluginCacheManagement() { return { installRecords: /* @__PURE__ */ new Map(), persistedInstalledIndex: /* @__PURE__ */ new Map(), dependencyStatus: /* @__PURE__ */ new WeakMap() }; } //#endregion //#region src/plugins/plugin-cache-metadata.ts function createPluginCacheMetadata() { return { metadata: { current: { snapshot: void 0, owner: "operation", configFingerprint: void 0, envFingerprint: void 0, defaultDiscoveryCompatible: false, compatiblePolicyHashes: void 0, compatibleConfigFingerprints: void 0, modelIdNormalizationPolicies: void 0, revision: Symbol("plugin-metadata-snapshot"), configIdentities: /* @__PURE__ */ new WeakSet() }, snapshots: /* @__PURE__ */ new Map(), discovery: /* @__PURE__ */ new Map(), projections: /* @__PURE__ */ new WeakMap(), projectionSources: /* @__PURE__ */ new WeakMap(), completions: /* @__PURE__ */ new WeakMap(), indexFingerprints: /* @__PURE__ */ new WeakMap(), channelAdapters: /* @__PURE__ */ new WeakMap(), bundledChannelCatalogs: /* @__PURE__ */ new Map(), staticCatalogStates: /* @__PURE__ */ new WeakMap(), modelSuppressionResolvers: /* @__PURE__ */ new WeakMap() } }; } //#endregion //#region src/plugins/plugin-cache-sdk.ts /** Derived SDK facts share the plugin cache lifetime; none owns a separate expiry. */ function createPluginCacheSdk() { return { hosts: /* @__PURE__ */ new Map(), contexts: /* @__PURE__ */ new Map(), packageNames: /* @__PURE__ */ new Map(), packageSearches: /* @__PURE__ */ new Map(), argvDirectories: /* @__PURE__ */ new Map(), devSourceRoots: /* @__PURE__ */ new Map(), bundledPackages: /* @__PURE__ */ new Map(), runtimeModules: /* @__PURE__ */ new Map(), usableDistArtifacts: /* @__PURE__ */ new Map(), normalizedJitiAliases: /* @__PURE__ */ new Map(), aliasFacts: /* @__PURE__ */ new WeakMap(), mergedAliases: /* @__PURE__ */ new WeakMap(), native: { sdkProviders: /* @__PURE__ */ new Map(), aliases: /* @__PURE__ */ new Map(), aliasesByMap: /* @__PURE__ */ new WeakMap(), registeredHosts: /* @__PURE__ */ new Set(), hostRoots: /* @__PURE__ */ new Map(), nearestPackageRoots: /* @__PURE__ */ new Map(), loaderPackageRoots: /* @__PURE__ */ new Map(), allowedParentRoots: /* @__PURE__ */ new Map() } }; } //#endregion //#region src/plugins/plugin-cache.ts const state = resolveGlobalSingleton(Symbol.for("openclaw.pluginCache"), () => ({ scope: new AsyncLocalStorage(), snapshotOwners: /* @__PURE__ */ new WeakMap() })); /** A cache generation owns progressively acquired facts, never mutable activation state. */ function createPluginCache(options = {}) { return { kind: options.kind ?? "operation", roots: /* @__PURE__ */ new Map(), rootAliases: /* @__PURE__ */ new Map(), sdk: createPluginCacheSdk(), ...createPluginCacheMetadata(), ...createPluginCacheManagement(), ...createPluginCacheArtifacts() }; } function getProcessPluginCache() { return state.current ??= createPluginCache({ kind: "process" }); } function getScopedPluginCache() { return state.scope.getStore(); } function getPluginCache() { return getScopedPluginCache() ?? getProcessPluginCache(); } //#endregion export { resolveGlobalSingleton as n, getPluginCache as t };