feat(codemode): accept tools.-prefixed namespaces in search (#50438)

This commit is contained in:
Aiden Cline
2026-09-21 16:59:31 -05:00
committed by GitHub
parent d62049aab4
commit 97457ec7a3
2 changed files with 11 additions and 6 deletions
+7 -6
View File
@@ -221,14 +221,15 @@ const makeSearchTool = (searchIndex: ReadonlyArray<SearchEntry>): Tool => ({
const request = input as typeof SearchInput.Type
const query = request.query ?? ""
const offset = request.offset ?? 0
let ns = request.namespace
if (ns !== undefined && !searchIndex.some((entry) => entry.description.path.startsWith("tools."))) {
if (ns === "tools") ns = undefined
else if (ns.startsWith("tools.")) ns = ns.slice("tools.".length)
}
const scoped =
request.namespace === undefined
ns === undefined
? searchIndex
: searchIndex.filter(
(entry) =>
entry.description.path === request.namespace ||
entry.description.path.startsWith(`${request.namespace}.`),
)
: searchIndex.filter((entry) => entry.description.path === ns || entry.description.path.startsWith(`${ns}.`))
const trimmed = query.trim()
const pathQuery = trimmed.startsWith("tools.") ? trimmed.slice("tools.".length) : trimmed
const exact =
+4
View File
@@ -995,6 +995,10 @@ describe("CodeMode public contract", () => {
expect(value.items[0]?.path).toBe("tools.linear.list_issues")
}
const prefixed = await Effect.runPromise(runtime.execute(`return search({ query: "", namespace: "tools.github" })`))
expect(prefixed.ok).toBe(true)
if (prefixed.ok) expect((prefixed.value as { items: Array<unknown> }).items).toHaveLength(2)
const invalid = await Effect.runPromise(runtime.execute(`return search({ query: "issues", namespace: 7 })`))
expect(invalid.ok).toBe(false)
if (!invalid.ok) expect(invalid.error.kind).toBe("InvalidToolInput")