summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTommy D. Rossi <[email protected]>2026-04-30 05:06:29 +0200
committerGitHub <[email protected]>2026-04-29 22:06:29 -0500
commitd7701dbfb6c80fa82948cae2ddaf4df3963b668e (patch)
treef61e0976521ce08e8c2817cff7a43c806b9e6fb5
parentc49bf0b402d54c453e8bfd39cce465bee9281a43 (diff)
downloadopencode-d7701dbfb6c80fa82948cae2ddaf4df3963b668e.tar.gz
opencode-d7701dbfb6c80fa82948cae2ddaf4df3963b668e.zip
fix(opencode): preserve `external_dir` and `deny` parent permissions in task child sessions (#23290)
-rw-r--r--packages/opencode/src/tool/task.ts4
1 files changed, 4 insertions, 0 deletions
diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts
index bd8645d3c..e58ea9b12 100644
--- a/packages/opencode/src/tool/task.ts
+++ b/packages/opencode/src/tool/task.ts
@@ -64,12 +64,16 @@ export const TaskTool = Tool.define(
const session = taskID
? yield* sessions.get(SessionID.make(taskID)).pipe(Effect.catchCause(() => Effect.succeed(undefined)))
: undefined
+ const parent = yield* sessions.get(ctx.sessionID)
const nextSession =
session ??
(yield* sessions.create({
parentID: ctx.sessionID,
title: params.description + ` (@${next.name} subagent)`,
permission: [
+ ...(parent.permission ?? []).filter(
+ (rule) => rule.permission === "external_directory" || rule.action === "deny",
+ ),
...(canTodo
? []
: [