refactor(opencode): simplify code-mode catalog description
This commit is contained in:
parent
d357fa57fb
commit
50348b3f9c
3 changed files with 12 additions and 16 deletions
|
|
@ -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[] = []
|
||||
|
|
|
|||
|
|
@ -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]),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue