UNPKG

trellis

Version:

Agentic State Engine — event-sourced causal graph with branching, decision traces, and realtime sync for AI-native applications

99 lines (97 loc) 2.39 kB
// src/server/vm-config.ts import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"; import { join } from "path"; import { homedir } from "os"; function getVmDir() { return join(homedir(), ".trellis"); } function getVmPath() { return join(getVmDir(), "vm.json"); } function loadVmConfig() { const vmPath = getVmPath(); if (!existsSync(vmPath)) { return { activeSprite: null, sprites: {} }; } try { const raw = readFileSync(vmPath, "utf-8"); return JSON.parse(raw); } catch { return { activeSprite: null, sprites: {} }; } } function saveVmConfig(config) { const dir = getVmDir(); if (!existsSync(dir)) { mkdirSync(dir, { recursive: true }); } writeFileSync(getVmPath(), JSON.stringify(config, null, 2)); } function getActiveSprite() { const config = loadVmConfig(); return config.activeSprite; } function setActiveSprite(spriteName) { const config = loadVmConfig(); if (!config.sprites[spriteName]) { config.sprites[spriteName] = { name: spriteName, createdAt: (/* @__PURE__ */ new Date()).toISOString(), url: `https://${spriteName}.sprites.app`, hasTrellis: false }; } config.activeSprite = spriteName; saveVmConfig(config); } function trackSprite(spriteName, opts = {}) { const config = loadVmConfig(); const existing = config.sprites[spriteName] ?? { name: spriteName, createdAt: (/* @__PURE__ */ new Date()).toISOString(), url: `https://${spriteName}.sprites.app`, hasTrellis: false }; config.sprites[spriteName] = { ...existing, ...opts, url: opts.url ?? existing.url, hasTrellis: opts.hasTrellis ?? existing.hasTrellis }; if (!config.activeSprite) { config.activeSprite = spriteName; } saveVmConfig(config); } function untrackSprite(spriteName) { const config = loadVmConfig(); delete config.sprites[spriteName]; if (config.activeSprite === spriteName) { config.activeSprite = null; } saveVmConfig(config); } function isSpriteTracked(spriteName) { const config = loadVmConfig(); return !!config.sprites[spriteName]; } function getSprite(spriteName) { const config = loadVmConfig(); return config.sprites[spriteName] ?? null; } export { loadVmConfig, saveVmConfig, getActiveSprite, setActiveSprite, trackSprite, untrackSprite, isSpriteTracked, getSprite };