fix(coding-agent): scope disabled-only autocomplete to enable/disable; fix changelog section
- collectMcpServerNames takes an includeDisabled flag (default true); the /mcp completer now passes false for test/reconnect/reauth/unauth, whose handlers (#resolveServerForAuth, reconnectServer) can never resolve a disabled-only discovered name (dropped from mcpManager, absent from mcpServers). enable/disable keep offering it since #handleSetEnabled handles that case for both directions. - Moved the /mcp autocomplete CHANGELOG entry from the now-released ## [17.1.0] section (where an earlier upstream merge relocated it) back under ## [Unreleased].
This commit is contained in:
@@ -136,6 +136,30 @@ describe("MCP server-name autocomplete", () => {
|
||||
expect(filtered?.[0]?.value).toBe("enable my-server ");
|
||||
});
|
||||
|
||||
test("/mcp getArgumentCompletions offers a disabled-only discovered name for enable/disable but not test/reconnect/reauth/unauth", async () => {
|
||||
// "discovered-disabled" is a third-party server that was /mcp disable'd:
|
||||
// present only in userConfig.disabledServers, absent from mcpServers, and
|
||||
// no longer reported by the manager (loadAllMCPConfigs drops disabled
|
||||
// sources). #resolveServerForAuth/reconnectServer can't resolve it, so
|
||||
// test/reconnect/reauth/unauth must not suggest it.
|
||||
await Bun.write(
|
||||
getMCPConfigPath("user", projectDir),
|
||||
`${JSON.stringify({ mcpServers: {}, disabledServers: ["discovered-disabled"] }, null, 2)}\n`,
|
||||
);
|
||||
await writeConfig("project", projectDir, {});
|
||||
const { ctx } = createFakeCtx([]);
|
||||
const runtime: TuiSlashCommandRuntime = { ctx };
|
||||
const mcp = buildTuiBuiltinSlashCommands(runtime).find(c => c.name === "mcp");
|
||||
if (!mcp?.getArgumentCompletions) throw new Error("expected /mcp command with getArgumentCompletions");
|
||||
|
||||
expect((await mcp.getArgumentCompletions("enable "))?.map(item => item.label)).toEqual(["discovered-disabled"]);
|
||||
expect((await mcp.getArgumentCompletions("disable "))?.map(item => item.label)).toEqual(["discovered-disabled"]);
|
||||
expect(await mcp.getArgumentCompletions("test ")).toBeNull();
|
||||
expect(await mcp.getArgumentCompletions("reconnect ")).toBeNull();
|
||||
expect(await mcp.getArgumentCompletions("reauth ")).toBeNull();
|
||||
expect(await mcp.getArgumentCompletions("unauth ")).toBeNull();
|
||||
});
|
||||
|
||||
test("/mcp getArgumentCompletions returns null for subcommands that don't take a server name", async () => {
|
||||
await writeConfig("user", projectDir, { "my-server": { type: "stdio", command: "one" } });
|
||||
const { ctx } = createFakeCtx([]);
|
||||
|
||||
Reference in New Issue
Block a user