UNPKG

@stackmemoryai/stackmemory

Version:

Project-scoped memory for AI coding tools. Durable context across sessions with MCP integration, frames, smart retrieval, Claude Code skills, and automatic hooks.

131 lines (130 loc) 3.52 kB
import { fileURLToPath as __fileURLToPath } from 'url'; import { dirname as __pathDirname } from 'path'; const __filename = __fileURLToPath(import.meta.url); const __dirname = __pathDirname(__filename); import { readFileSync, writeFileSync, existsSync } from "fs"; import { join } from "path"; import { logger } from "../../core/monitoring/logger.js"; import { ProjectIsolationManager } from "../../core/projects/project-isolation.js"; class LinearConfigManager { configPath; projectRoot; isolationManager; constructor(projectRoot) { this.projectRoot = projectRoot; this.configPath = join( projectRoot, ".stackmemory", "linear-auto-sync.json" ); this.isolationManager = ProjectIsolationManager.getInstance(); } /** * Load configuration from file */ loadConfig() { if (!existsSync(this.configPath)) { return null; } try { const configData = readFileSync(this.configPath, "utf8"); return JSON.parse(configData); } catch (error) { logger.error( "Failed to load Linear auto-sync configuration:", error ); return null; } } /** * Save configuration to file */ saveConfig(config) { const existingConfig = this.loadConfig() || this.getDefaultConfig(); const updatedConfig = { ...existingConfig, ...config, lastUpdated: Date.now() }; try { writeFileSync(this.configPath, JSON.stringify(updatedConfig, null, 2)); logger.info("Linear auto-sync configuration saved"); } catch (error) { logger.error( "Failed to save Linear auto-sync configuration:", error ); throw error; } } /** * Get default configuration with project isolation */ getDefaultConfig() { const projectId = this.isolationManager.getProjectIdentification(this.projectRoot); return { enabled: true, interval: 5, // 5 minutes direction: "bidirectional", conflictResolution: "newest_wins", retryAttempts: 3, retryDelay: 3e4, // 30 seconds quietHours: { start: 22, // 10 PM end: 7 // 7 AM }, // Project isolation from stable identification teamId: projectId.linearTeamId, organization: projectId.linearOrganization, workspaceFilter: projectId.workspaceFilter, projectPrefix: projectId.projectPrefix, lastUpdated: Date.now() }; } /** * Convert to AutoSyncConfig format */ toAutoSyncConfig(config) { const persistedConfig = config || this.loadConfig() || this.getDefaultConfig(); return { enabled: persistedConfig.enabled, direction: persistedConfig.direction, defaultTeamId: void 0, // Will be set by sync engine autoSync: true, conflictResolution: persistedConfig.conflictResolution, syncInterval: persistedConfig.interval, interval: persistedConfig.interval, retryAttempts: persistedConfig.retryAttempts, retryDelay: persistedConfig.retryDelay, quietHours: persistedConfig.quietHours }; } /** * Update specific configuration values */ updateConfig(updates) { this.saveConfig(updates); } /** * Check if configuration exists */ hasConfig() { return existsSync(this.configPath); } /** * Reset to default configuration */ resetConfig() { this.saveConfig(this.getDefaultConfig()); } } export { LinearConfigManager }; //# sourceMappingURL=config.js.map