{"version":3,"file":"durable-store.d.ts","sourceRoot":"","sources":["../../../src/core/reliability/durable-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAIrE,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B,YAAY,IAAI,EAAE,MAAM,EAEvB;IAED,OAAO,CAAC,OAAO;IAIT,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;IAEK,IAAI,CAAC,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5D;IAEK,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAO3E;IAED,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEjC;CACD","sourcesContent":["/**\n * Durable Mission Store — atomic JSON persistence for a MissionRuntime document.\n *\n * Write-temp-then-rename so a process exit never leaves a partially written\n * document. This is a small, provider-independent store used by the Reliability\n * Kernel and its tests; the live agent session embeds the serialized document\n * into session state for session-associated durability.\n */\n\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport type { MissionRuntimeDocumentV1 } from \"./mission-runtime.js\";\n\nconst SUFFIX = \".tmp\";\n\nexport class MissionFileStore {\n\tprivate readonly root: string;\n\n\tconstructor(root: string) {\n\t\tthis.root = root;\n\t}\n\n\tprivate resolve(missionId: string): string {\n\t\treturn path.join(this.root, `${missionId}.mission.json`);\n\t}\n\n\tasync initialize(): Promise<void> {\n\t\tawait fsp.mkdir(this.root, { recursive: true });\n\t}\n\n\tasync save(document: MissionRuntimeDocumentV1): Promise<void> {\n\t\tawait this.initialize();\n\t\tconst target = this.resolve(document.missionId);\n\t\tconst tmp = `${target}${SUFFIX}`;\n\t\tawait fsp.writeFile(tmp, JSON.stringify(document, null, 2), \"utf8\");\n\t\tconst fh = await fsp.open(tmp, \"r\");\n\t\ttry {\n\t\t\tawait fh.sync();\n\t\t} finally {\n\t\t\tawait fh.close();\n\t\t}\n\t\tawait fsp.rename(tmp, target);\n\t}\n\n\tasync load(missionId: string): Promise<MissionRuntimeDocumentV1 | undefined> {\n\t\ttry {\n\t\t\tconst data = await fsp.readFile(this.resolve(missionId), \"utf8\");\n\t\t\treturn JSON.parse(data) as MissionRuntimeDocumentV1;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\texists(missionId: string): boolean {\n\t\treturn fs.existsSync(this.resolve(missionId));\n\t}\n}\n"]}