UNPKG

@struktoai/mirage-core

Version:

A Unified Virtual Filesystem For AI Agents

87 lines • 3.35 kB
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= import { RAMObserverStore } from "../../observe/store.js"; import { RAMNamespaceStore } from "../mount/namespace/ram.js"; import { RAMJobStore } from "../../shell/job_table/ram.js"; import { generationOf } from "../record/types.js"; import { WorkspaceStateStore, } from "./base.js"; // WorkspaceStateStore held in process memory (the default). Durability // equals the process lifetime; snapshots remain the only persistence. // Redis-backed workspaces pass a RedisWorkspaceStateStore instead and // survive restarts / share state across processes. export class RAMWorkspaceStateStore extends WorkspaceStateStore { namespaces = new Map(); observers = new Map(); sessionTables = new Map(); jobPlanes = new Map(); meta = new Map(); constructor(overrides = {}) { super(overrides); } makeNamespace(workspaceId) { let ns = this.namespaces.get(workspaceId); if (ns === undefined) { ns = new RAMNamespaceStore(); this.namespaces.set(workspaceId, ns); } return ns; } makeObserver(workspaceId) { let ob = this.observers.get(workspaceId); if (ob === undefined) { ob = new RAMObserverStore(); this.observers.set(workspaceId, ob); } return ob; } makeSessions(workspaceId) { let table = this.sessionTables.get(workspaceId); if (table === undefined) { table = new RAMNamespaceStore(); this.sessionTables.set(workspaceId, table); } return table; } makeJobs(workspaceId) { let jobs = this.jobPlanes.get(workspaceId); if (jobs === undefined) { jobs = new RAMJobStore(); this.jobPlanes.set(workspaceId, jobs); } return jobs; } readMeta(workspaceId) { const fields = this.meta.get(workspaceId); return Promise.resolve(fields !== undefined ? { ...fields } : null); } casWriteMeta(workspaceId, fields, expectedGeneration) { const stored = this.meta.get(workspaceId); if (generationOf(stored) !== expectedGeneration) return Promise.resolve(false); this.meta.set(workspaceId, { ...fields }); return Promise.resolve(true); } forgetSelf(workspaceId) { this.namespaces.delete(workspaceId); this.observers.delete(workspaceId); this.sessionTables.delete(workspaceId); this.jobPlanes.delete(workspaceId); this.meta.delete(workspaceId); return Promise.resolve(); } closeSelf() { return Promise.resolve(); } } //# sourceMappingURL=ram.js.map