From abac76ecb401ab2d825bad2746466d2a94137645 Mon Sep 17 00:00:00 2001 From: James Bornholt Date: Thu, 8 Jan 2026 01:54:08 +0000 Subject: [PATCH] fix: show path in external_directory permission prompt - Update bash tool to ask for each external directory individually (consistent with read/edit/patch tools) - Populate metadata.parentDir in bash tool's external_directory request - Use metadata.parentDir in permission UI instead of non-existent input().path - Display absolute path for external directories instead of relative --- .../src/cli/cmd/tui/routes/session/permission.tsx | 5 ++++- packages/opencode/src/tool/bash.ts | 11 +++++++---- packages/opencode/test/tool/bash.test.ts | 1 + packages/opencode/test/tool/read.test.ts | 1 + 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx index f5b6badb589..072353b25a5 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx @@ -219,7 +219,10 @@ export function PermissionPrompt(props: { request: PermissionRequest }) { - + diff --git a/packages/opencode/src/tool/bash.ts b/packages/opencode/src/tool/bash.ts index e06a3f157cb..f5e683adedd 100644 --- a/packages/opencode/src/tool/bash.ts +++ b/packages/opencode/src/tool/bash.ts @@ -136,12 +136,15 @@ export const BashTool = Tool.define("bash", async () => { } } - if (directories.size > 0) { + for (const dir of directories) { await ctx.ask({ permission: "external_directory", - patterns: Array.from(directories), - always: Array.from(directories).map((x) => path.dirname(x) + "*"), - metadata: {}, + patterns: [dir], + always: [dir + "/*"], + metadata: { + filepath: dir, + parentDir: dir, + }, }) } diff --git a/packages/opencode/test/tool/bash.test.ts b/packages/opencode/test/tool/bash.test.ts index 750ff8193e9..cc5c0d34406 100644 --- a/packages/opencode/test/tool/bash.test.ts +++ b/packages/opencode/test/tool/bash.test.ts @@ -144,6 +144,7 @@ describe("tool.bash permissions", () => { const extDirReq = requests.find((r) => r.permission === "external_directory") expect(extDirReq).toBeDefined() expect(extDirReq!.patterns).toContain("/tmp") + expect(extDirReq!.metadata.parentDir).toBe("/tmp") }, }) }) diff --git a/packages/opencode/test/tool/read.test.ts b/packages/opencode/test/tool/read.test.ts index a88d25f73ab..8ae81e70b0f 100644 --- a/packages/opencode/test/tool/read.test.ts +++ b/packages/opencode/test/tool/read.test.ts @@ -73,6 +73,7 @@ describe("tool.read external_directory permission", () => { const extDirReq = requests.find((r) => r.permission === "external_directory") expect(extDirReq).toBeDefined() expect(extDirReq!.patterns.some((p) => p.includes(outerTmp.path))).toBe(true) + expect(extDirReq!.metadata.parentDir).toBe(outerTmp.path) }, }) })