From f4fdeeb0840377b4d8be2226bc73c3d22218349a Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Singh Date: Fri, 7 Aug 2026 22:59:13 +0530 Subject: [PATCH 1/2] fix(status): report actual recall and capture configuration --- src/skills/status.ts | 13 +++++++++++-- test/unit.mjs | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/skills/status.ts b/src/skills/status.ts index adaf353..6b78524 100644 --- a/src/skills/status.ts +++ b/src/skills/status.ts @@ -39,6 +39,15 @@ function getDevTlsHint(): string | null { return "Dev API TLS: set NODE_EXTRA_CA_CERTS to your Portless CA before starting Codex."; } +function getRecallStatus(): string { + return CONFIG.autoRecallEveryPrompt ? "every prompt" : "manual"; +} + +function getCaptureStatus(): string { + if (CONFIG.captureEveryNTurns <= 0) return "disabled"; + return `every ${CONFIG.captureEveryNTurns} turn${CONFIG.captureEveryNTurns === 1 ? "" : "s"}`; +} + async function fetchJson(path: string): Promise { const apiKey = getApiKeyValue(); if (!apiKey) return null; @@ -103,8 +112,8 @@ async function main(): Promise { lines.push(`API key: ${maskKey(apiKey)} (${getKeySource()})`); lines.push(`API URL: ${API_URL}`); lines.push(`Memory scope: one project container with metadata scopes`); - lines.push(`Recall mode: auto-recall on every prompt`); - lines.push(`Capture cadence: ${CONFIG.autoSaveEveryTurns > 0 ? `every ${CONFIG.autoSaveEveryTurns} turn${CONFIG.autoSaveEveryTurns === 1 ? "" : "s"} + session end` : "session end only"}`); + lines.push(`Recall: ${getRecallStatus()}`); + lines.push(`Capture: ${getCaptureStatus()}`); lines.push(`Project container: ${tags.canonical}`); lines.push(`Reads (including legacy): ${tags.allReads.join(", ")}`); diff --git a/test/unit.mjs b/test/unit.mjs index 3d4a3e2..4bf7266 100644 --- a/test/unit.mjs +++ b/test/unit.mjs @@ -752,6 +752,18 @@ describe("skill scripts: search/add/save/forget/status/logout", () => { }); } + function runStatusWithConfig(t, config) { + const tmpDir = makeTmpDir(); + const codexDir = join(tmpDir, ".codex"); + mkdirSync(codexDir, { recursive: true }); + writeFileSync(join(codexDir, "supermemory.json"), JSON.stringify(config)); + t.after(() => rmSync(tmpDir, { recursive: true, force: true })); + return spawnSync("node", [statusBin], { + env: { PATH: process.env.PATH, HOME: tmpDir, USERPROFILE: tmpDir, SUPERMEMORY_CODEX_API_KEY: "" }, + encoding: "utf-8", + }); + } + // Run a script with a (fake) API key but no network. We expect arg-parsing // branches (missing query/content) to short-circuit before any network call. function runSkillNoArgs(t, bin) { @@ -796,6 +808,31 @@ describe("skill scripts: search/add/save/forget/status/logout", () => { assert.match(result.stdout, /supermemory-login/); }); + test("status reports manual recall when auto recall is disabled", (t) => { + const result = runStatusWithConfig(t, { autoRecallEveryPrompt: false, captureEveryNTurns: 0 }); + assert.equal(result.status, 0); + assert.match(result.stdout, /Recall: manual/); + }); + + test("status reports every-prompt recall when auto recall is enabled", (t) => { + const result = runStatusWithConfig(t, { autoRecallEveryPrompt: true, captureEveryNTurns: 0 }); + assert.equal(result.status, 0); + assert.match(result.stdout, /Recall: every prompt/); + }); + + test("status reports disabled capture when captureEveryNTurns is zero", (t) => { + const result = runStatusWithConfig(t, { autoRecallEveryPrompt: false, captureEveryNTurns: 0 }); + assert.equal(result.status, 0); + assert.match(result.stdout, /Capture: disabled/); + }); + + test("status reports configured capture cadence from captureEveryNTurns", (t) => { + const result = runStatusWithConfig(t, { autoRecallEveryPrompt: false, captureEveryNTurns: 5, autoSaveEveryTurns: 3 }); + assert.equal(result.status, 0); + assert.match(result.stdout, /Capture: every 5 turns/); + assert.doesNotMatch(result.stdout, /every 3 turns/); + }); + test("logout removes saved credentials and config apiKey", (t) => { const tmpDir = makeTmpDir(); const codexDir = join(tmpDir, ".codex"); From 2d14244795db2aedf27b8bce3bf024ac214597e9 Mon Sep 17 00:00:00 2001 From: Dhravya Shah Date: Fri, 7 Aug 2026 18:56:11 -0700 Subject: [PATCH 2/2] fix(status): use Auto-recall / Auto-capture off wording Make status labels clearer that these toggles are for automatic behavior, not all capture/recall. Co-authored-by: Cursor --- src/skills/status.ts | 12 ++++++------ test/unit.mjs | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/skills/status.ts b/src/skills/status.ts index 6b78524..6a1d6f5 100644 --- a/src/skills/status.ts +++ b/src/skills/status.ts @@ -39,12 +39,12 @@ function getDevTlsHint(): string | null { return "Dev API TLS: set NODE_EXTRA_CA_CERTS to your Portless CA before starting Codex."; } -function getRecallStatus(): string { - return CONFIG.autoRecallEveryPrompt ? "every prompt" : "manual"; +function getAutoRecallStatus(): string { + return CONFIG.autoRecallEveryPrompt ? "every prompt" : "off"; } -function getCaptureStatus(): string { - if (CONFIG.captureEveryNTurns <= 0) return "disabled"; +function getAutoCaptureStatus(): string { + if (CONFIG.captureEveryNTurns <= 0) return "off"; return `every ${CONFIG.captureEveryNTurns} turn${CONFIG.captureEveryNTurns === 1 ? "" : "s"}`; } @@ -112,8 +112,8 @@ async function main(): Promise { lines.push(`API key: ${maskKey(apiKey)} (${getKeySource()})`); lines.push(`API URL: ${API_URL}`); lines.push(`Memory scope: one project container with metadata scopes`); - lines.push(`Recall: ${getRecallStatus()}`); - lines.push(`Capture: ${getCaptureStatus()}`); + lines.push(`Auto-recall: ${getAutoRecallStatus()}`); + lines.push(`Auto-capture: ${getAutoCaptureStatus()}`); lines.push(`Project container: ${tags.canonical}`); lines.push(`Reads (including legacy): ${tags.allReads.join(", ")}`); diff --git a/test/unit.mjs b/test/unit.mjs index 4bf7266..427f466 100644 --- a/test/unit.mjs +++ b/test/unit.mjs @@ -808,28 +808,28 @@ describe("skill scripts: search/add/save/forget/status/logout", () => { assert.match(result.stdout, /supermemory-login/); }); - test("status reports manual recall when auto recall is disabled", (t) => { + test("status reports auto-recall off when auto recall is disabled", (t) => { const result = runStatusWithConfig(t, { autoRecallEveryPrompt: false, captureEveryNTurns: 0 }); assert.equal(result.status, 0); - assert.match(result.stdout, /Recall: manual/); + assert.match(result.stdout, /Auto-recall: off/); }); - test("status reports every-prompt recall when auto recall is enabled", (t) => { + test("status reports every-prompt auto-recall when enabled", (t) => { const result = runStatusWithConfig(t, { autoRecallEveryPrompt: true, captureEveryNTurns: 0 }); assert.equal(result.status, 0); - assert.match(result.stdout, /Recall: every prompt/); + assert.match(result.stdout, /Auto-recall: every prompt/); }); - test("status reports disabled capture when captureEveryNTurns is zero", (t) => { + test("status reports auto-capture off when captureEveryNTurns is zero", (t) => { const result = runStatusWithConfig(t, { autoRecallEveryPrompt: false, captureEveryNTurns: 0 }); assert.equal(result.status, 0); - assert.match(result.stdout, /Capture: disabled/); + assert.match(result.stdout, /Auto-capture: off/); }); - test("status reports configured capture cadence from captureEveryNTurns", (t) => { + test("status reports configured auto-capture cadence from captureEveryNTurns", (t) => { const result = runStatusWithConfig(t, { autoRecallEveryPrompt: false, captureEveryNTurns: 5, autoSaveEveryTurns: 3 }); assert.equal(result.status, 0); - assert.match(result.stdout, /Capture: every 5 turns/); + assert.match(result.stdout, /Auto-capture: every 5 turns/); assert.doesNotMatch(result.stdout, /every 3 turns/); });