Skip to content

Commit cb1499d

Browse files
stephentoubCopilot
andcommitted
Remove Python session event shims
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent e0f6990 commit cb1499d

8 files changed

Lines changed: 46 additions & 536 deletions

File tree

python/README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -558,9 +558,11 @@ Provide your own function to inspect each request and apply custom logic (sync o
558558

559559
```python
560560
from copilot.session import PermissionRequestResult
561-
from copilot.generated.session_events import PermissionRequest
561+
from copilot.generated.session_events import PermissionRequestedDataPermissionRequest
562562

563-
def on_permission_request(request: PermissionRequest, invocation: dict) -> PermissionRequestResult:
563+
def on_permission_request(
564+
request: PermissionRequestedDataPermissionRequest, invocation: dict
565+
) -> PermissionRequestResult:
564566
# request.kind — what type of operation is being requested:
565567
# "shell" — executing a shell command
566568
# "write" — writing or editing a file
@@ -590,7 +592,9 @@ session = await client.create_session(
590592
Async handlers are also supported:
591593

592594
```python
593-
async def on_permission_request(request: PermissionRequest, invocation: dict) -> PermissionRequestResult:
595+
async def on_permission_request(
596+
request: PermissionRequestedDataPermissionRequest, invocation: dict
597+
) -> PermissionRequestResult:
594598
# Simulate an async approval check (e.g., prompting a user over a network)
595599
await asyncio.sleep(0)
596600
return PermissionRequestResult(kind="approved")

python/copilot/client.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@
3737
ServerRpc,
3838
register_client_session_api_handlers,
3939
)
40-
from .generated.session_events import PermissionRequest, SessionEvent, session_event_from_dict
40+
from .generated.session_events import (
41+
PermissionRequestedDataPermissionRequest,
42+
SessionEvent,
43+
session_event_from_dict,
44+
)
4145
from .session import (
4246
CommandDefinition,
4347
CopilotSession,
@@ -2635,7 +2639,7 @@ async def _handle_permission_request_v2(self, params: dict) -> dict:
26352639
raise ValueError(f"unknown session {session_id}")
26362640

26372641
try:
2638-
perm_request = PermissionRequest.from_dict(permission_request)
2642+
perm_request = PermissionRequestedDataPermissionRequest.from_dict(permission_request)
26392643
result = await session._handle_permission_request(perm_request)
26402644
if result.kind == "no-result":
26412645
raise ValueError(NO_RESULT_PERMISSION_V2_ERROR)

python/copilot/generated/session_events.py

Lines changed: 0 additions & 236 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

python/copilot/session.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@
5252
CommandExecuteData,
5353
ElicitationRequestedData,
5454
ExternalToolRequestedData,
55-
PermissionRequest,
5655
PermissionRequestedData,
56+
PermissionRequestedDataPermissionRequest,
5757
SessionErrorData,
5858
SessionEvent,
5959
SessionIdleData,
@@ -244,15 +244,15 @@ class PermissionRequestResult:
244244

245245

246246
_PermissionHandlerFn = Callable[
247-
[PermissionRequest, dict[str, str]],
247+
[PermissionRequestedDataPermissionRequest, dict[str, str]],
248248
PermissionRequestResult | Awaitable[PermissionRequestResult],
249249
]
250250

251251

252252
class PermissionHandler:
253253
@staticmethod
254254
def approve_all(
255-
request: PermissionRequest, invocation: dict[str, str]
255+
request: PermissionRequestedDataPermissionRequest, invocation: dict[str, str]
256256
) -> PermissionRequestResult:
257257
return PermissionRequestResult(kind="approved")
258258

@@ -1621,7 +1621,7 @@ def _register_permission_handler(self, handler: _PermissionHandlerFn | None) ->
16211621
self._permission_handler = handler
16221622

16231623
async def _handle_permission_request(
1624-
self, request: PermissionRequest
1624+
self, request: PermissionRequestedDataPermissionRequest
16251625
) -> PermissionRequestResult:
16261626
"""
16271627
Handle a permission request from the Copilot CLI.

python/e2e/test_permissions.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@
66

77
import pytest
88

9-
from copilot.generated.session_events import SessionIdleData, ToolExecutionCompleteData
10-
from copilot.session import PermissionHandler, PermissionRequest, PermissionRequestResult
9+
from copilot.generated.session_events import (
10+
PermissionRequestedDataPermissionRequest,
11+
SessionIdleData,
12+
ToolExecutionCompleteData,
13+
)
14+
from copilot.session import PermissionHandler, PermissionRequestResult
1115

1216
from .testharness import E2ETestContext
1317
from .testharness.helper import read_file, write_file
@@ -21,7 +25,7 @@ async def test_should_invoke_permission_handler_for_write_operations(self, ctx:
2125
permission_requests = []
2226

2327
def on_permission_request(
24-
request: PermissionRequest, invocation: dict
28+
request: PermissionRequestedDataPermissionRequest, invocation: dict
2529
) -> PermissionRequestResult:
2630
permission_requests.append(request)
2731
assert invocation["session_id"] == session.session_id
@@ -46,7 +50,7 @@ async def test_should_deny_permission_when_handler_returns_denied(self, ctx: E2E
4650
"""Test denying permissions"""
4751

4852
def on_permission_request(
49-
request: PermissionRequest, invocation: dict
53+
request: PermissionRequestedDataPermissionRequest, invocation: dict
5054
) -> PermissionRequestResult:
5155
return PermissionRequestResult(kind="denied-interactively-by-user")
5256

@@ -158,7 +162,7 @@ async def test_should_handle_async_permission_handler(self, ctx: E2ETestContext)
158162
permission_requests = []
159163

160164
async def on_permission_request(
161-
request: PermissionRequest, invocation: dict
165+
request: PermissionRequestedDataPermissionRequest, invocation: dict
162166
) -> PermissionRequestResult:
163167
permission_requests.append(request)
164168
# Simulate async permission check (e.g., user prompt)
@@ -186,7 +190,7 @@ async def test_should_resume_session_with_permission_handler(self, ctx: E2ETestC
186190

187191
# Resume with permission handler
188192
def on_permission_request(
189-
request: PermissionRequest, invocation: dict
193+
request: PermissionRequestedDataPermissionRequest, invocation: dict
190194
) -> PermissionRequestResult:
191195
permission_requests.append(request)
192196
return PermissionRequestResult(kind="approved")
@@ -206,7 +210,7 @@ async def test_should_handle_permission_handler_errors_gracefully(self, ctx: E2E
206210
"""Test that permission handler errors are handled gracefully"""
207211

208212
def on_permission_request(
209-
request: PermissionRequest, invocation: dict
213+
request: PermissionRequestedDataPermissionRequest, invocation: dict
210214
) -> PermissionRequestResult:
211215
raise RuntimeError("Handler error")
212216

@@ -226,7 +230,7 @@ async def test_should_receive_toolcallid_in_permission_requests(self, ctx: E2ETe
226230
received_tool_call_id = False
227231

228232
def on_permission_request(
229-
request: PermissionRequest, invocation: dict
233+
request: PermissionRequestedDataPermissionRequest, invocation: dict
230234
) -> PermissionRequestResult:
231235
nonlocal received_tool_call_id
232236
if request.tool_call_id:

0 commit comments

Comments
 (0)