43 lines · 1.6 KB · TypeScript
RawDownload
import * as Effect from "effect/Effect";import * as FileSystem from "effect/FileSystem";import * as Path from "effect/Path";import * as Schema from "effect/Schema"; const isNativeSessionId = Schema.is(Schema.String.check(Schema.isUUID(4)));const decodeSessionMetadata = Schema.decodeEffect(  Schema.fromJsonString(Schema.Struct({ cwd: Schema.String })),); /** Call after the process closes. The unique temporary cwd proves which session we own. */export const removeAntigravitySessionFiles = Effect.fn("removeAntigravitySessionFiles")(  function* (input: {    readonly profileDirectory: string;    readonly sessionId: string | undefined;    readonly cwd: string;  }) {    if (input.sessionId === undefined || !isNativeSessionId(input.sessionId)) {      return;    }    const fs = yield* FileSystem.FileSystem;    const path = yield* Path.Path;    const acpDirectory = path.join(input.profileDirectory, "antigravity-acp");    const base = path.join(acpDirectory, "conversations", input.sessionId);    if (!(yield* fs.exists(`${base}.meta`))) {      return;    }    const metadata = yield* fs      .readFileString(`${base}.meta`)      .pipe(Effect.flatMap(decodeSessionMetadata));    if (metadata.cwd !== input.cwd) {      return;    }    for (const suffix of [".db", ".db-wal", ".db-shm", ".db-journal", ".meta"]) {      yield* fs.remove(`${base}${suffix}`, { force: true });    }    yield* fs.remove(path.join(acpDirectory, "brain", input.sessionId), {      recursive: true,      force: true,    });  },  Effect.catch(() => Effect.logWarning("Could not remove temporary Antigravity session files.")),);