refactor(opencode): simplify code-mode catalog description

This commit is contained in:
Aiden Cline 2026-07-03 01:39:25 -05:00
commit 50348b3f9c
3 changed files with 12 additions and 16 deletions

View file

@ -88,22 +88,16 @@ export function groupByServer(
return groups
}
export function buildCatalog(
mcpTools: Record<string, AITool>,
mcpDefs: Record<string, MCPToolDef>,
servers: readonly string[],
): CatalogEntry[] {
return [...groupByServer(mcpTools, servers, mcpDefs).values()].flat().filter((entry) => entry.tool.execute !== undefined)
}
export function catalogInstructions(
export function describeCatalog(
mcpTools: Record<string, AITool>,
mcpDefs: Record<string, MCPToolDef>,
servers: readonly string[],
): string {
const catalog = buildCatalog(mcpTools, mcpDefs, servers)
return CodeMode.make({
tools: toolTree(catalog, () => () => Effect.fail(toolError("Tool preview is not executable."))),
tools: toolTree(
[...groupByServer(mcpTools, servers, mcpDefs).values()].flat().filter((entry) => entry.tool.execute !== undefined),
() => () => Effect.fail(toolError("Tool preview is not executable.")),
),
}).instructions()
}
@ -288,7 +282,9 @@ export const CodeModeTool = Tool.define(
const ruleset = Permission.merge(agent.permission, session.permission ?? [])
const mcpTools = Permission.visibleTools(yield* mcp.tools(), ruleset)
const servers = Object.keys(yield* mcp.clients()).map(McpCatalog.sanitize)
const catalog = buildCatalog(mcpTools, yield* mcp.defs(), servers)
const catalog = [...groupByServer(mcpTools, servers, yield* mcp.defs()).values()]
.flat()
.filter((entry) => entry.tool.execute !== undefined)
const calls: CallEntry[] = []
const attachments: Attachment[] = []

View file

@ -1,5 +1,5 @@
import { beforeAll, describe, expect, test } from "bun:test"
import { CodeModeTool, catalogInstructions } from "@/tool/code-mode"
import { CodeModeTool, describeCatalog } from "@/tool/code-mode"
import { McpCatalog } from "@/mcp/catalog"
import { Agent } from "@/agent/agent"
import { MCP } from "@/mcp"
@ -161,7 +161,7 @@ async function buildTool() {
)
return {
tool: await Effect.runPromise(CodeModeTool.pipe(Effect.flatMap(Tool.init), Effect.provide(layer))),
description: catalogInstructions(mcpTools, mcpDefs, [SERVER]),
description: describeCatalog(mcpTools, mcpDefs, [SERVER]),
}
}

View file

@ -3,7 +3,7 @@ import {
CODE_MODE_TOOL,
CodeModeTool,
Parameters,
catalogInstructions,
describeCatalog,
formatValue,
groupByServer,
toSandboxResult,
@ -100,7 +100,7 @@ function describeFor(
servers?: string[],
permission: PermissionV1.Rule[] = [],
) {
return catalogInstructions(Permission.visibleTools(mcpTools, permission), defs, serverNames(mcpTools, servers))
return describeCatalog(Permission.visibleTools(mcpTools, permission), defs, serverNames(mcpTools, servers))
}
describe("code mode execute", () => {