copilot-api / tests /tool-search.test.ts
imspsycho's picture
Initial upload from Google Colab
98c9143 verified
Raw
History Blame Contribute Delete
4.66 kB
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")
})
})