From dec04c1f0e6b08f08eb15109722d8d359d17317b Mon Sep 17 00:00:00 2001 From: thomasalvaedison7777-lgtm Date: Wed, 15 Jul 2026 21:30:23 -0700 Subject: [PATCH] feat(mcp): enhance API compatibility status output for unparseable minimum version Add handling for the "unknown" API compatibility status in the loopover-mcp CLI, ensuring that an unparseable minimum version is reported in human-readable output. Update unit tests to verify this behavior, confirming that the output includes the unsupported minimum client version when applicable. --- packages/loopover-mcp/bin/loopover-mcp.js | 3 +++ test/unit/mcp-cli-doctor.test.ts | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/loopover-mcp/bin/loopover-mcp.js b/packages/loopover-mcp/bin/loopover-mcp.js index 100084c6b1..0b1d2c02f1 100755 --- a/packages/loopover-mcp/bin/loopover-mcp.js +++ b/packages/loopover-mcp/bin/loopover-mcp.js @@ -3149,6 +3149,9 @@ async function status(options) { process.stdout.write(`API compatibility: compatible (minimum ${packageName}@${apiCompatibility.minVersion}).\n`); } else if (apiCompatibility.status === "unavailable") { process.stdout.write(`API compatibility: unavailable (${apiCompatibility.reason ?? "unknown"}).\n`); + } else if (apiCompatibility.status === "unknown") { + // Mirror doctor()'s unknown arm (#6263): an unparseable minimum version must still surface in human output. + process.stdout.write(`API reported an unsupported minimum client version (${apiCompatibility.minVersion}).\n`); } } } diff --git a/test/unit/mcp-cli-doctor.test.ts b/test/unit/mcp-cli-doctor.test.ts index 2beffc0d43..bf9777f028 100644 --- a/test/unit/mcp-cli-doctor.test.ts +++ b/test/unit/mcp-cli-doctor.test.ts @@ -308,6 +308,26 @@ describe("loopover-mcp CLI — doctor", () => { }); }); + it("prints API compatibility unknown when the minimum version is unparseable (#6263)", async () => { + tempDir = mkdtempSync(join(tmpdir(), "loopover-cli-")); + const url = await startFixtureServer({ minMcpVersion: "not-a-semver" }); + const env = { + LOOPOVER_API_URL: url, + LOOPOVER_TOKEN: "session-token", + LOOPOVER_CONFIG_DIR: tempDir, + LOOPOVER_SKIP_NPM_VERSION_CHECK: "true", + }; + const statusJson = JSON.parse(await runAsync(["status", "--json"], env)) as { + apiCompatibility: { status: string; minVersion: string }; + }; + expect(statusJson.apiCompatibility).toMatchObject({ status: "unknown", minVersion: "not-a-semver" }); + + // Human-readable status used to omit this arm entirely; keep it visible like doctor(). + const statusOutput = await runAsync(["status"], env); + expect(statusOutput).toContain("unsupported minimum client version"); + expect(statusOutput).toContain("not-a-semver"); + }); + it("flags API compatibility mismatches with upgrade guidance", async () => { tempDir = mkdtempSync(join(tmpdir(), "loopover-cli-")); const url = await startFixtureServer({ minMcpVersion: "9.0.0" });