From 038b77dd22889d4942ef5bbeab48bdd17effab14 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Singh Date: Fri, 7 Aug 2026 00:54:51 +0530 Subject: [PATCH] fix: honor logout marker at session start --- src/hooks/session-start.ts | 6 ++++++ test/unit.mjs | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/hooks/session-start.ts b/src/hooks/session-start.ts index d4c6fda..9cd5152 100644 --- a/src/hooks/session-start.ts +++ b/src/hooks/session-start.ts @@ -11,6 +11,7 @@ import { getSeenFacts, addSeenFacts } from "../services/factCache.js"; import { checkNpmUpdate, formatUpdateNotice } from "../services/version-check.js"; const AUTH_ATTEMPTED_FILE = join(homedir(), ".codex", "supermemory", ".auth-attempted"); +const LOGGED_OUT_FILE = join(homedir(), ".codex", "supermemory", ".logged-out"); const UPDATE_COMMAND = "npx codex-supermemory@latest install"; interface CodexHookPayload { @@ -46,6 +47,11 @@ async function main() { } if (!isConfigured()) { + if (existsSync(LOGGED_OUT_FILE)) { + log("session-start: logged out marker present, skipping browser auth"); + exitWithContext(""); + } + const alreadyAttempted = existsSync(AUTH_ATTEMPTED_FILE); if (!alreadyAttempted) { try { diff --git a/test/unit.mjs b/test/unit.mjs index 8afa556..3d4a3e2 100644 --- a/test/unit.mjs +++ b/test/unit.mjs @@ -633,6 +633,30 @@ describe("recall hook output envelope", () => { }); }); +// ─── session-start hook logout behavior ────────────────────────────────────── + +describe("session-start hook logout behavior", () => { + const sessionStartBin = fileURLToPath(new URL("../dist/hooks/session-start.js", import.meta.url)); + + test("exits silently after explicit logout marker", (t) => { + const tmpDir = makeTmpDir(); + const supermemoryDir = join(tmpDir, ".codex", "supermemory"); + mkdirSync(supermemoryDir, { recursive: true }); + writeFileSync(join(supermemoryDir, ".logged-out"), new Date().toISOString()); + t.after(() => rmSync(tmpDir, { recursive: true, force: true })); + + const result = spawnSync("node", [sessionStartBin], { + input: JSON.stringify({ session_id: "s1" }), + env: { ...process.env, HOME: tmpDir, USERPROFILE: tmpDir, SUPERMEMORY_CODEX_API_KEY: "" }, + encoding: "utf-8", + timeout: 5_000, + }); + + assert.equal(result.status, 0); + assert.equal(result.stdout, ""); + }); +}); + // ─── flush hook — Stop payload handling ────────────────────────────────────── describe("flush hook Stop payload", () => {