import { describe, expect, test } from "bun:test" import { createMcpToolSearchSentinel, hasDeferredMcpNamespaceTool, parseMcpToolSearchSentinel, resolveBridgeToolSearchName, selectDeferredToolsByNames, shouldEnableResponsesToolSearch, } from "~/lib/tool-search" import { runMcpServer } from "~/mcp" describe("tool search helpers", () => { test("detects eligible Responses tool search requests", () => { expect( shouldEnableResponsesToolSearch({ model: "gpt-5.4", tools: [ { name: "mcp__tool_search__search" }, { name: "mcp__fetch__fetch" }, ], }), ).toBe(true) expect( shouldEnableResponsesToolSearch({ model: "gpt-5.4", tools: [{ name: "tool_search_search" }, { name: "mcp__fetch__fetch" }], }), ).toBe(true) expect( shouldEnableResponsesToolSearch({ model: "gpt-5", tools: [ { name: "mcp__tool_search__search" }, { name: "mcp__fetch__fetch" }, ], }), ).toBe(false) expect( shouldEnableResponsesToolSearch({ model: "gpt-5.4", tools: [{ name: "mcp__fetch__fetch" }], }), ).toBe(false) expect( shouldEnableResponsesToolSearch({ model: "gpt-5.4", tools: [{ name: "mcp__tool_search__search" }], }), ).toBe(false) expect( shouldEnableResponsesToolSearch({ model: "gpt-5.4", tools: [{ name: "mcp__tool_search__search" }, { name: "TaskCreate" }], }), ).toBe(true) expect( shouldEnableResponsesToolSearch({ model: "gpt-5.4", tools: [ { name: "mcp__tool_search__search" }, { name: "chrome-devtools_click" }, ], }), ).toBe(true) expect( shouldEnableResponsesToolSearch({ model: "gpt-5.4", tools: [{ name: "mcp__tool_search__search" }, { name: "bash" }], }), ).toBe(false) expect( shouldEnableResponsesToolSearch({ model: "gpt-5.4", tools: [ { name: "mcp__tool_search__search" }, { name: "EnterPlanMode" }, { name: "ExitPlanMode" }, { name: "WebFetch" }, ], }), ).toBe(false) }) test("round-trips MCP bridge sentinel payloads", () => { const sentinel = createMcpToolSearchSentinel( "mcp__fetch__fetch, TaskList, TaskList", ) expect(parseMcpToolSearchSentinel(sentinel)).toEqual({ type: "copilot_api_tool_search", names: ["mcp__fetch__fetch", "TaskList"], }) }) test("prefers the configured bridge tool search alias", () => { expect( resolveBridgeToolSearchName([ { name: "tool_search_search" }, { name: "mcp__fetch__fetch" }, ]), ).toBe("tool_search_search") expect(resolveBridgeToolSearchName(undefined)).toBe( "mcp__tool_search__search", ) }) test("selects only named deferred tools", () => { const matches = selectDeferredToolsByNames( "chrome-devtools_click,TaskList,mcp__fetch__fetch,Read,TodoWrite,Unknown", [ { name: "mcp__tool_search__search", description: "Bridge", }, { name: "chrome-devtools_click", description: "Click an element", }, { name: "mcp__fetch__fetch", description: "Fetch a URL", }, { name: "Read", description: "Read files", }, { name: "TodoWrite", description: "Update the todo list", }, { name: "TaskList", description: "List tasks", }, ], ) expect(matches.map((tool) => tool.name)).toEqual([ "chrome-devtools_click", "TaskList", "mcp__fetch__fetch", ]) }) test("detects translated deferred namespaces", () => { expect( hasDeferredMcpNamespaceTool([ { type: "namespace", name: "mcp__fetch__fetch", tools: [ { type: "function", name: "mcp__fetch__fetch", defer_loading: true, }, ], }, ]), ).toBe(true) expect( hasDeferredMcpNamespaceTool([ { type: "namespace", name: "chrome-devtools_click", tools: [ { type: "function", name: "chrome-devtools_click", defer_loading: true, }, ], }, ]), ).toBe(true) }) test("exports an mcp CLI command", () => { expect(typeof runMcpServer).toBe("function") }) })