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 a50cd96fc843..e7ab09fc3c67 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx @@ -440,14 +440,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 7fd081899193..57603b98486c 100644 --- a/packages/opencode/test/permission/next.test.ts +++ b/packages/opencode/test/permission/next.test.ts @@ -567,6 +567,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: PermissionID.make("permission_test_corrected"), + sessionID: SessionID.make("session_test"), + permission: "bash", + patterns: ["ls"], + metadata: {}, + always: [], + ruleset: [], + }) + + await PermissionNext.reply({ + requestID: PermissionID.make("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({