Forked from brdcastro/maestro
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPersistedState = getPersistedState;
exports.savePersistedState = savePersistedState;
exports.ensureWorkspaceExists = ensureWorkspaceExists;
const promises_1 = require("fs/promises");
const path_1 = require("path");
const os = __importStar(require("os"));
const CONFIG_FILE_NAME = ".plugin_state.json";
const DEFAULT_DIR = (0, path_1.join)(os.homedir(), ".maestro-toolbox", "workspace");
const STATE_PATH = (0, path_1.join)(os.homedir(), ".maestro-toolbox", CONFIG_FILE_NAME);
const DEFAULT_STATE = {
currentWorkingDirectory: DEFAULT_DIR,
messageCount: 0,
};
/** In-memory cache — avoids reading from disk on every call. */
let _cached = null;
/** Write queue to prevent concurrent writes from corrupting state. */
let _writeLock = Promise.resolve();
async function getPersistedState() {
if (_cached)
return _cached;
try {
const content = await (0, promises_1.readFile)(STATE_PATH, "utf-8");
const state = JSON.parse(content);
_cached = {
currentWorkingDirectory: state.currentWorkingDirectory ?? DEFAULT_DIR,
messageCount: state.messageCount ?? 0,
largeFilesSaved: state.largeFilesSaved ?? [],
workflowPhase: state.workflowPhase ?? "understand",
phaseToolCounts: state.phaseToolCounts ?? { reads: 0, writes: 0, executions: 0, tests: 0 },
};
return _cached;
}
catch {
_cached = { ...DEFAULT_STATE };
return _cached;
}
}
async function savePersistedState(state) {
_cached = state; // update cache immediately
_writeLock = _writeLock.then(async () => {
try {
const dir = (0, path_1.join)(os.homedir(), ".maestro-toolbox");
await (0, promises_1.mkdir)(dir, { recursive: true });
await (0, promises_1.writeFile)(STATE_PATH, JSON.stringify(state, null, 2), "utf-8");
}
catch (error) {
console.error("Failed to save plugin state:", error);
}
});
await _writeLock;
}
async function ensureWorkspaceExists(path) {
try {
await (0, promises_1.mkdir)(path, { recursive: true });
}
catch (error) {
console.error(`Failed to create/access directory ${path}`, error);
}
}
//# sourceMappingURL=stateManager.js.map