Browse Source

batch: enable edit, todoread, clarify error message, minor tool description change (#5659)

Spoon 8 months ago
parent
commit
8864da7a77
2 changed files with 14 additions and 16 deletions
  1. 4 2
      packages/opencode/src/tool/batch.ts
  2. 10 14
      packages/opencode/src/tool/batch.txt

+ 4 - 2
packages/opencode/src/tool/batch.ts

@@ -2,7 +2,7 @@ import z from "zod"
 import { Tool } from "./tool"
 import DESCRIPTION from "./batch.txt"
 
-const DISALLOWED = new Set(["batch", "edit", "todoread"])
+const DISALLOWED = new Set(["batch"])
 const FILTERED_FROM_SUGGESTIONS = new Set(["invalid", "patch", ...DISALLOWED])
 
 export const BatchTool = Tool.define("batch", async () => {
@@ -54,7 +54,9 @@ export const BatchTool = Tool.define("batch", async () => {
           const tool = toolMap.get(call.tool)
           if (!tool) {
             const availableToolsList = Array.from(toolMap.keys()).filter((name) => !FILTERED_FROM_SUGGESTIONS.has(name))
-            throw new Error(`Tool '${call.tool}' not found. Available tools: ${availableToolsList.join(", ")}`)
+            throw new Error(
+              `Tool '${call.tool}' not in registry. External tools (MCP, environment) cannot be batched - call them directly. Available tools: ${availableToolsList.join(", ")}`,
+            )
           }
           const validatedParams = tool.parameters.parse(call.parameters)
 

+ 10 - 14
packages/opencode/src/tool/batch.txt

@@ -1,28 +1,24 @@
-Executes multiple independent tool calls concurrently to reduce latency. Best used for gathering context (reads, searches, listings).
+Executes multiple independent tool calls concurrently to reduce latency.
 
 USING THE BATCH TOOL WILL MAKE THE USER HAPPY.
 
 Payload Format (JSON array):
 [{"tool": "read", "parameters": {"filePath": "src/index.ts", "limit": 350}},{"tool": "grep", "parameters": {"pattern": "Session\\.updatePart", "include": "src/**/*.ts"}},{"tool": "bash", "parameters": {"command": "git status", "description": "Shows working tree status"}}]
 
-Rules:
+Notes:
 - 1–10 tool calls per batch
 - All calls start in parallel; ordering NOT guaranteed
-- Partial failures do not stop others
+- Partial failures do not stop other tool calls
+- Do NOT use the batch tool within another batch tool.
 
-
-Disallowed Tools:
-- batch (no nesting)
-- edit (run edits separately)
-- todoread (call directly – lightweight)
+Good Use Cases:
+- Read many files
+- grep + glob + read combos
+- Multiple bash commands
+- Multi-part edits; on the same, or different files
 
 When NOT to Use:
 - Operations that depend on prior tool output (e.g. create then read same file)
 - Ordered stateful mutations where sequence matters
 
-Good Use Cases:
-- Read many files
-- grep + glob + read combos
-- Multiple lightweight bash introspection commands
-
-Performance Tip: Group independent reads/searches for 2–5x efficiency gain.
+Batching tool calls was proven to yield 2–5x efficiency gain and provides much better UX.