From ac067aca0a63b0ec2b0c3338eb49a9e581ff2d82 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 7 Nov 2025 03:19:49 +0000 Subject: [PATCH] Handle HTTP tool selectors without explicit verb --- src/cli/http-utils.ts | 10 +++++++++- tests/cli-command-inference.test.ts | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/cli/http-utils.ts b/src/cli/http-utils.ts index 9137c0a..d330aff 100644 --- a/src/cli/http-utils.ts +++ b/src/cli/http-utils.ts @@ -26,7 +26,15 @@ export function looksLikeHttpUrl(value?: string): boolean { } export function splitHttpToolSelector(input: string): { baseUrl: string; tool: string } | null { - const normalized = normalizeHttpUrlCandidate(input); + const trimmed = input.trim(); + const candidate = (() => { + const openParen = trimmed.indexOf('('); + if (openParen === -1) { + return trimmed; + } + return trimmed.slice(0, openParen); + })(); + const normalized = normalizeHttpUrlCandidate(candidate); if (!normalized) { return null; } diff --git a/tests/cli-command-inference.test.ts b/tests/cli-command-inference.test.ts index 08b6167..7f3c40a 100644 --- a/tests/cli-command-inference.test.ts +++ b/tests/cli-command-inference.test.ts @@ -42,6 +42,12 @@ describe('command inference', () => { expect(result).toEqual({ kind: 'command', command: 'call', args: [token, 'limit=1'] }); }); + it('routes HTTP tool expressions with arguments directly to call', () => { + const token = 'https://api.example.com/mcp.getStatus(component: "foo")'; + const result = inferCommandRouting(token, [], definitions); + expect(result).toEqual({ kind: 'command', command: 'call', args: [token] }); + }); + it('suggests names when edit distance is large', () => { const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); const result = inferCommandRouting('unknown', [], definitions);