From f1cd767f889a13aae9d16ccaa544896886360604 Mon Sep 17 00:00:00 2001 From: "Nacho F. Lizaur" Date: Mon, 23 Feb 2026 10:18:44 +0100 Subject: [PATCH 1/3] fix(tui): show reject message prompt in main agent session --- .../cli/cmd/tui/routes/session/permission.tsx | 9 +------ .../opencode/test/permission/next.test.ts | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 8 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 389fc2418cc6..afba5c13cb1a 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx @@ -439,14 +439,7 @@ export function PermissionPrompt(props: { request: PermissionRequest }) { return } if (option === "reject") { - if (session()?.parentID) { - setStore("stage", "reject") - return - } - sdk.client.permission.reply({ - reply: "reject", - requestID: props.request.id, - }) + setStore("stage", "reject") return } sdk.client.permission.reply({ diff --git a/packages/opencode/test/permission/next.test.ts b/packages/opencode/test/permission/next.test.ts index add3332048c8..d80078232780 100644 --- a/packages/opencode/test/permission/next.test.ts +++ b/packages/opencode/test/permission/next.test.ts @@ -565,6 +565,32 @@ test("reply - reject throws RejectedError", async () => { }) }) +test("reply - reject with message throws CorrectedError", async () => { + await using tmp = await tmpdir({ git: true }) + await Instance.provide({ + directory: tmp.path, + fn: async () => { + const askPromise = PermissionNext.ask({ + id: "permission_test_corrected", + sessionID: "session_test", + permission: "bash", + patterns: ["ls"], + metadata: {}, + always: [], + ruleset: [], + }) + + await PermissionNext.reply({ + requestID: "permission_test_corrected", + reply: "reject", + message: "Use a different approach instead", + }) + + await expect(askPromise).rejects.toBeInstanceOf(PermissionNext.CorrectedError) + }, + }) +}) + test("reply - always persists approval and resolves", async () => { await using tmp = await tmpdir({ git: true }) await Instance.provide({ From 0ec82ff5c7ffa6c52e317815e62b4b8e0887e374 Mon Sep 17 00:00:00 2001 From: "Nacho F. Lizaur" Date: Mon, 23 Feb 2026 11:27:13 +0100 Subject: [PATCH 2/3] chore: retrigger CI From 4c05c00d16fdbc5dbe00c627ffdec826a487f397 Mon Sep 17 00:00:00 2001 From: "Nacho F. Lizaur" Date: Fri, 13 Mar 2026 15:39:23 +0100 Subject: [PATCH 3/3] fix(test): use branded types in permission reject test --- packages/opencode/test/permission/next.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/opencode/test/permission/next.test.ts b/packages/opencode/test/permission/next.test.ts index b9c2138a2827..57603b98486c 100644 --- a/packages/opencode/test/permission/next.test.ts +++ b/packages/opencode/test/permission/next.test.ts @@ -573,8 +573,8 @@ test("reply - reject with message throws CorrectedError", async () => { directory: tmp.path, fn: async () => { const askPromise = PermissionNext.ask({ - id: "permission_test_corrected", - sessionID: "session_test", + id: PermissionID.make("permission_test_corrected"), + sessionID: SessionID.make("session_test"), permission: "bash", patterns: ["ls"], metadata: {}, @@ -583,7 +583,7 @@ test("reply - reject with message throws CorrectedError", async () => { }) await PermissionNext.reply({ - requestID: "permission_test_corrected", + requestID: PermissionID.make("permission_test_corrected"), reply: "reject", message: "Use a different approach instead", })