Skip to content

Commit 6091fd7

Browse files
fix: check error.message not result.content for permission denied detection
When a tool call is denied due to no permission handler, the SDK emits a tool.execution_complete event with success=false and the denial message in the error.message field (not result.content). Update all 4 language e2e tests to assert on error.message. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 9941b3a commit 6091fd7

File tree

4 files changed

+9
-11
lines changed

4 files changed

+9
-11
lines changed

dotnet/test/PermissionTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public async Task Should_Deny_Tool_Operations_By_Default_When_No_Handler_Is_Prov
8080
{
8181
if (evt is ToolExecutionCompleteEvent toolEvt &&
8282
!toolEvt.Data.Success &&
83-
toolEvt.Data.Result?.Content.Contains("Permission denied") == true)
83+
toolEvt.Data.Error?.Message.Contains("Permission denied") == true)
8484
{
8585
permissionDenied = true;
8686
}

go/internal/e2e/permissions_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ func TestPermissions(t *testing.T) {
171171
session.On(func(event copilot.SessionEvent) {
172172
if event.Type == copilot.ToolExecutionComplete &&
173173
event.Data.Success != nil && !*event.Data.Success &&
174-
event.Data.Result != nil && strings.Contains(event.Data.Result.Content, "Permission denied") {
174+
event.Data.Error != nil && event.Data.Error.ErrorClass != nil &&
175+
strings.Contains(event.Data.Error.ErrorClass.Message, "Permission denied") {
175176
mu.Lock()
176177
permissionDenied = true
177178
mu.Unlock()

nodejs/test/e2e/permissions.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ describe("Permission callbacks", async () => {
7171
if (
7272
event.type === "tool.execution_complete" &&
7373
!event.data.success &&
74-
event.data.result?.content.includes("Permission denied")
74+
event.data.error?.message.includes("Permission denied")
7575
) {
7676
permissionDenied = true;
7777
}

python/e2e/test_permissions.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,11 @@ async def test_should_deny_tool_operations_by_default_when_no_handler_is_provide
7979
done_event = asyncio.Event()
8080

8181
def on_event(event):
82-
if (
83-
event.type.value == "tool.execution_complete"
84-
and event.data.success is False
85-
and event.data.result is not None
86-
and event.data.result.content is not None
87-
and "Permission denied" in event.data.result.content
88-
):
89-
denied_events.append(event)
82+
if event.type.value == "tool.execution_complete" and event.data.success is False:
83+
error = event.data.error
84+
msg = error if isinstance(error, str) else (getattr(error, "message", None) if error is not None else None)
85+
if msg and "Permission denied" in msg:
86+
denied_events.append(event)
9087
elif event.type.value == "session.idle":
9188
done_event.set()
9289

0 commit comments

Comments
 (0)