fix(rules-injector): retry storage writes after cleanup race

The full Bun suite can remove the shared rules-injector storage directory between a parent-directory check and the file write. Save operations now create the directory immediately before writing and retry once if ENOENT still wins the race.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
YeonGyu-Kim
2026-05-20 14:35:11 +09:00
parent 4a72729acc
commit 0ebba9eba1
+10 -5
View File
@@ -37,10 +37,6 @@ export function saveInjectedRules(
sessionID: string,
data: { contentHashes: Set<string>; realPaths: Set<string> }
): void {
if (!existsSync(RULES_INJECTOR_STORAGE)) {
mkdirSync(RULES_INJECTOR_STORAGE, { recursive: true });
}
const storageData: InjectedRulesData = {
sessionID,
injectedHashes: [...data.contentHashes],
@@ -48,7 +44,16 @@ export function saveInjectedRules(
updatedAt: Date.now(),
};
writeFileSync(getStoragePath(sessionID), JSON.stringify(storageData, null, 2));
mkdirSync(RULES_INJECTOR_STORAGE, { recursive: true });
try {
writeFileSync(getStoragePath(sessionID), JSON.stringify(storageData, null, 2));
} catch (error) {
if (!(error instanceof Error) || !("code" in error) || error.code !== "ENOENT") {
throw error;
}
mkdirSync(RULES_INJECTOR_STORAGE, { recursive: true });
writeFileSync(getStoragePath(sessionID), JSON.stringify(storageData, null, 2));
}
}
export function clearInjectedRules(sessionID: string): void {