From e2602f6807d8ca097cda19e0b6b12a9f9ef17d12 Mon Sep 17 00:00:00 2001 From: LXT <307322522@qq.com> Date: Fri, 20 Mar 2026 22:11:56 +0800 Subject: [PATCH] CLI: widen nodes list legacy fallback --- src/cli/nodes-cli/register.status.ts | 1 + src/cli/program.nodes-basic.e2e.test.ts | 29 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/cli/nodes-cli/register.status.ts b/src/cli/nodes-cli/register.status.ts index 3d8e6a3598e..e7d0aa69505 100644 --- a/src/cli/nodes-cli/register.status.ts +++ b/src/cli/nodes-cli/register.status.ts @@ -127,6 +127,7 @@ function shouldFallbackToPairList(error: unknown): boolean { return ( message.includes("unknown method") || message.includes("method not found") || + message.includes("invalid request") || message.includes("not implemented") || message.includes("unsupported") ); diff --git a/src/cli/program.nodes-basic.e2e.test.ts b/src/cli/program.nodes-basic.e2e.test.ts index b3fa45389ff..80b5bb13305 100644 --- a/src/cli/program.nodes-basic.e2e.test.ts +++ b/src/cli/program.nodes-basic.e2e.test.ts @@ -182,6 +182,35 @@ describe("cli program (nodes basics)", () => { expect(output).toContain("One"); }); + it("runs nodes list and falls back to node.pair.list on invalid request", async () => { + callGateway.mockImplementation(async (...args: unknown[]) => { + const opts = (args[0] ?? {}) as { method?: string }; + if (opts.method === "node.pair.list") { + return { + pending: [], + paired: [ + { + nodeId: "n1", + displayName: "One", + remoteIp: "10.0.0.1", + lastConnectedAtMs: Date.now() - 1_000, + }, + ], + }; + } + if (opts.method === "node.list") { + throw new Error("invalid request"); + } + return { ok: true }; + }); + + await runProgram(["nodes", "list"]); + + const output = getRuntimeOutput(); + expect(output).toContain("Pending: 0 ยท Paired: 1"); + expect(output).toContain("One"); + }); + it("fails clearly for nodes list --connected when node.list is unavailable", async () => { callGateway.mockImplementation(async (...args: unknown[]) => { const opts = (args[0] ?? {}) as { method?: string };