opencode-python-sdk 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. opencode/.generated.json +39 -0
  2. opencode/__init__.py +156 -0
  3. opencode/_base_client.py +518 -0
  4. opencode/_client.py +167 -0
  5. opencode/_constants.py +27 -0
  6. opencode/_errors.py +547 -0
  7. opencode/_exceptions.py +249 -0
  8. opencode/_models.py +54 -0
  9. opencode/_pagination.py +192 -0
  10. opencode/_qs.py +95 -0
  11. opencode/_resource.py +42 -0
  12. opencode/_server.py +327 -0
  13. opencode/_streaming.py +227 -0
  14. opencode/_types.py +77 -0
  15. opencode/_unions.py +46 -0
  16. opencode/_version.py +8 -0
  17. opencode/py.typed +0 -0
  18. opencode/resources/__init__.py +364 -0
  19. opencode/resources/agent.py +177 -0
  20. opencode/resources/command.py +98 -0
  21. opencode/resources/config.py +238 -0
  22. opencode/resources/credential.py +382 -0
  23. opencode/resources/debug.py +174 -0
  24. opencode/resources/event.py +84 -0
  25. opencode/resources/experimental.py +760 -0
  26. opencode/resources/file.py +353 -0
  27. opencode/resources/form.py +98 -0
  28. opencode/resources/generate.py +108 -0
  29. opencode/resources/integration.py +1023 -0
  30. opencode/resources/location.py +160 -0
  31. opencode/resources/mcp.py +488 -0
  32. opencode/resources/message.py +151 -0
  33. opencode/resources/migration.py +118 -0
  34. opencode/resources/model.py +175 -0
  35. opencode/resources/permission.py +698 -0
  36. opencode/resources/plugin.py +248 -0
  37. opencode/resources/project.py +185 -0
  38. opencode/resources/provider.py +181 -0
  39. opencode/resources/pty.py +517 -0
  40. opencode/resources/reference.py +98 -0
  41. opencode/resources/rpc.py +111 -0
  42. opencode/resources/server.py +228 -0
  43. opencode/resources/session.py +3553 -0
  44. opencode/resources/shell.py +410 -0
  45. opencode/resources/skill.py +98 -0
  46. opencode/resources/vcs.py +496 -0
  47. opencode/resources/voice.py +111 -0
  48. opencode/resources/websearch.py +182 -0
  49. opencode/resources/worktree.py +334 -0
  50. opencode/types/__init__.py +1462 -0
  51. opencode/types/_generated.py +8540 -0
  52. opencode_python_sdk-0.1.0.dist-info/METADATA +317 -0
  53. opencode_python_sdk-0.1.0.dist-info/RECORD +55 -0
  54. opencode_python_sdk-0.1.0.dist-info/WHEEL +4 -0
  55. opencode_python_sdk-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,698 @@
1
+ # This file is generated by `python -m codegen` from spec/contract.json. Do not edit it by hand.
2
+ # OpenCode 2.1.2
3
+
4
+ """The ``permission`` resource."""
5
+
6
+ from __future__ import annotations
7
+
8
+ import builtins
9
+ from collections.abc import Mapping, Sequence
10
+ from functools import cached_property
11
+ from typing import Any, cast
12
+
13
+ from .._base_client import RequestOptions
14
+ from .._qs import encode_path_segment
15
+ from .._resource import AsyncAPIResource, SyncAPIResource
16
+ from .._types import NOT_GIVEN, Body, Headers, NotGiven, Query, Timeout
17
+ from ..types import (
18
+ AgentID,
19
+ Location,
20
+ PermissionCreateResponse,
21
+ PermissionID,
22
+ PermissionReply,
23
+ PermissionRequest,
24
+ PermissionRequestListResponse,
25
+ PermissionSavedID,
26
+ PermissionSavedInfo,
27
+ PermissionSource,
28
+ ProjectID,
29
+ SessionID,
30
+ )
31
+
32
+ __all__ = ["PermissionResource", "AsyncPermissionResource"]
33
+
34
+
35
+ class PermissionRequestResource(SyncAPIResource):
36
+ """Operations under ``client.permission.request`` (OpenCode ``permission.request``)."""
37
+
38
+ def list(
39
+ self,
40
+ *,
41
+ location: Location | NotGiven | None = NOT_GIVEN,
42
+ extra_headers: Headers | None = None,
43
+ extra_query: Query | None = None,
44
+ extra_body: Body | None = None,
45
+ timeout: Timeout | NotGiven = NOT_GIVEN,
46
+ ) -> PermissionRequestListResponse:
47
+ """List pending permission requests.
48
+
49
+ Retrieve pending permission requests for a location.
50
+
51
+ Raises:
52
+ InvalidRequestError
53
+ UnauthorizedError
54
+ LocationNotFoundError
55
+
56
+ ``GET /api/permission/request``
57
+ """
58
+ return cast(
59
+ "PermissionRequestListResponse",
60
+ self._client.request(
61
+ RequestOptions(
62
+ method="GET",
63
+ path="/api/permission/request",
64
+ query={"location": self._location(location)},
65
+ extra_headers=extra_headers,
66
+ extra_query=extra_query,
67
+ extra_body=extra_body,
68
+ timeout=timeout,
69
+ ),
70
+ response_type=PermissionRequestListResponse,
71
+ ),
72
+ )
73
+
74
+
75
+ class PermissionSavedResource(SyncAPIResource):
76
+ """Operations under ``client.permission.saved`` (OpenCode ``permission.saved``)."""
77
+
78
+ def list(
79
+ self,
80
+ *,
81
+ project_id: ProjectID | NotGiven | None = NOT_GIVEN,
82
+ extra_headers: Headers | None = None,
83
+ extra_query: Query | None = None,
84
+ extra_body: Body | None = None,
85
+ timeout: Timeout | NotGiven = NOT_GIVEN,
86
+ ) -> builtins.list[PermissionSavedInfo]:
87
+ """List saved permissions.
88
+
89
+ Retrieve saved permissions, optionally filtered by project.
90
+
91
+ Raises:
92
+ InvalidRequestError
93
+ UnauthorizedError
94
+ LocationNotFoundError
95
+
96
+ ``GET /api/permission/saved``
97
+ """
98
+ return cast(
99
+ "builtins.list[PermissionSavedInfo]",
100
+ self._client.request(
101
+ RequestOptions(
102
+ method="GET",
103
+ path="/api/permission/saved",
104
+ query={"projectID": project_id},
105
+ extra_headers=extra_headers,
106
+ extra_query=extra_query,
107
+ extra_body=extra_body,
108
+ timeout=timeout,
109
+ ),
110
+ response_type=builtins.list[PermissionSavedInfo],
111
+ unwrap=True,
112
+ ),
113
+ )
114
+
115
+ def update(
116
+ self,
117
+ id: PermissionSavedID,
118
+ *,
119
+ action: str | NotGiven | None = NOT_GIVEN,
120
+ resource: str | NotGiven | None = NOT_GIVEN,
121
+ extra_headers: Headers | None = None,
122
+ extra_query: Query | None = None,
123
+ extra_body: Body | None = None,
124
+ timeout: Timeout | NotGiven = NOT_GIVEN,
125
+ ) -> PermissionSavedInfo:
126
+ """Update saved permission.
127
+
128
+ Change the action or resource of a saved permission. Fails with a conflict when the project already has a saved permission with the same action and resource.
129
+
130
+ Raises:
131
+ InvalidRequestError
132
+ UnauthorizedError
133
+ PermissionSavedNotFoundError
134
+ LocationNotFoundError
135
+ ConflictError
136
+
137
+ ``PATCH /api/permission/saved/:id``
138
+ """
139
+ return cast(
140
+ "PermissionSavedInfo",
141
+ self._client.request(
142
+ RequestOptions(
143
+ method="PATCH",
144
+ path=f"/api/permission/saved/{encode_path_segment(id)}",
145
+ body={"action": action, "resource": resource},
146
+ extra_headers=extra_headers,
147
+ extra_query=extra_query,
148
+ extra_body=extra_body,
149
+ timeout=timeout,
150
+ ),
151
+ response_type=PermissionSavedInfo,
152
+ unwrap=True,
153
+ ),
154
+ )
155
+
156
+ def remove(
157
+ self,
158
+ id: PermissionSavedID,
159
+ *,
160
+ extra_headers: Headers | None = None,
161
+ extra_query: Query | None = None,
162
+ extra_body: Body | None = None,
163
+ timeout: Timeout | NotGiven = NOT_GIVEN,
164
+ ) -> None:
165
+ """Remove saved permission.
166
+
167
+ Remove a saved permission by ID.
168
+
169
+ Raises:
170
+ InvalidRequestError
171
+ UnauthorizedError
172
+ LocationNotFoundError
173
+
174
+ ``DELETE /api/permission/saved/:id``
175
+ """
176
+ self._client.request(
177
+ RequestOptions(
178
+ method="DELETE",
179
+ path=f"/api/permission/saved/{encode_path_segment(id)}",
180
+ extra_headers=extra_headers,
181
+ extra_query=extra_query,
182
+ extra_body=extra_body,
183
+ timeout=timeout,
184
+ ),
185
+ kind="void",
186
+ )
187
+
188
+
189
+ class PermissionResource(SyncAPIResource):
190
+ """Operations under ``client.permission`` (OpenCode ``permission``)."""
191
+
192
+ @cached_property
193
+ def request_(self) -> PermissionRequestResource:
194
+ return PermissionRequestResource(self._client)
195
+
196
+ @cached_property
197
+ def saved(self) -> PermissionSavedResource:
198
+ return PermissionSavedResource(self._client)
199
+
200
+ def create(
201
+ self,
202
+ session_id: SessionID,
203
+ *,
204
+ action: str,
205
+ resources: Sequence[str],
206
+ id: PermissionID | NotGiven | None = NOT_GIVEN,
207
+ save: Sequence[str] | NotGiven = NOT_GIVEN,
208
+ metadata: Mapping[str, Any] | NotGiven = NOT_GIVEN,
209
+ source: PermissionSource | NotGiven = NOT_GIVEN,
210
+ agent: AgentID | NotGiven | None = NOT_GIVEN,
211
+ extra_headers: Headers | None = None,
212
+ extra_query: Query | None = None,
213
+ extra_body: Body | None = None,
214
+ timeout: Timeout | NotGiven = NOT_GIVEN,
215
+ ) -> PermissionCreateResponse:
216
+ """Create permission request.
217
+
218
+ Evaluate and, when approval is required, create a permission request for a session.
219
+
220
+ Raises:
221
+ InvalidRequestError
222
+ UnauthorizedError
223
+ SessionNotFoundError
224
+ LocationNotFoundError
225
+
226
+ ``POST /api/session/:sessionID/permission``
227
+ """
228
+ return cast(
229
+ "PermissionCreateResponse",
230
+ self._client.request(
231
+ RequestOptions(
232
+ method="POST",
233
+ path=f"/api/session/{encode_path_segment(session_id)}/permission",
234
+ body={
235
+ "id": id,
236
+ "action": action,
237
+ "resources": resources,
238
+ "save": save,
239
+ "metadata": metadata,
240
+ "source": source,
241
+ "agent": agent,
242
+ },
243
+ extra_headers=extra_headers,
244
+ extra_query=extra_query,
245
+ extra_body=extra_body,
246
+ timeout=timeout,
247
+ ),
248
+ response_type=PermissionCreateResponse,
249
+ unwrap=True,
250
+ ),
251
+ )
252
+
253
+ def list(
254
+ self,
255
+ session_id: SessionID,
256
+ *,
257
+ extra_headers: Headers | None = None,
258
+ extra_query: Query | None = None,
259
+ extra_body: Body | None = None,
260
+ timeout: Timeout | NotGiven = NOT_GIVEN,
261
+ ) -> builtins.list[PermissionRequest]:
262
+ """List session permission requests.
263
+
264
+ Retrieve pending permission requests owned by a session.
265
+
266
+ Raises:
267
+ InvalidRequestError
268
+ UnauthorizedError
269
+ SessionNotFoundError
270
+ LocationNotFoundError
271
+
272
+ ``GET /api/session/:sessionID/permission``
273
+ """
274
+ return cast(
275
+ "builtins.list[PermissionRequest]",
276
+ self._client.request(
277
+ RequestOptions(
278
+ method="GET",
279
+ path=f"/api/session/{encode_path_segment(session_id)}/permission",
280
+ extra_headers=extra_headers,
281
+ extra_query=extra_query,
282
+ extra_body=extra_body,
283
+ timeout=timeout,
284
+ ),
285
+ response_type=builtins.list[PermissionRequest],
286
+ unwrap=True,
287
+ ),
288
+ )
289
+
290
+ def get(
291
+ self,
292
+ session_id: SessionID,
293
+ request_id: PermissionID,
294
+ *,
295
+ extra_headers: Headers | None = None,
296
+ extra_query: Query | None = None,
297
+ extra_body: Body | None = None,
298
+ timeout: Timeout | NotGiven = NOT_GIVEN,
299
+ ) -> PermissionRequest:
300
+ """Get permission request.
301
+
302
+ Retrieve a pending permission request owned by a session.
303
+
304
+ Raises:
305
+ InvalidRequestError
306
+ UnauthorizedError
307
+ SessionNotFoundError
308
+ PermissionNotFoundError
309
+ LocationNotFoundError
310
+
311
+ ``GET /api/session/:sessionID/permission/:requestID``
312
+ """
313
+ return cast(
314
+ "PermissionRequest",
315
+ self._client.request(
316
+ RequestOptions(
317
+ method="GET",
318
+ path=f"/api/session/{encode_path_segment(session_id)}/permission/{encode_path_segment(request_id)}",
319
+ extra_headers=extra_headers,
320
+ extra_query=extra_query,
321
+ extra_body=extra_body,
322
+ timeout=timeout,
323
+ ),
324
+ response_type=PermissionRequest,
325
+ unwrap=True,
326
+ ),
327
+ )
328
+
329
+ def reply(
330
+ self,
331
+ session_id: SessionID,
332
+ request_id: PermissionID,
333
+ *,
334
+ decision: PermissionReply,
335
+ message: str | NotGiven | None = NOT_GIVEN,
336
+ extra_headers: Headers | None = None,
337
+ extra_query: Query | None = None,
338
+ extra_body: Body | None = None,
339
+ timeout: Timeout | NotGiven = NOT_GIVEN,
340
+ ) -> None:
341
+ """Reply to pending permission request.
342
+
343
+ Respond to a pending permission request owned by a session.
344
+
345
+ Raises:
346
+ InvalidRequestError
347
+ UnauthorizedError
348
+ SessionNotFoundError
349
+ PermissionNotFoundError
350
+ LocationNotFoundError
351
+
352
+ ``POST /api/session/:sessionID/permission/:requestID/reply``
353
+ """
354
+ self._client.request(
355
+ RequestOptions(
356
+ method="POST",
357
+ path=f"/api/session/{encode_path_segment(session_id)}/permission/{encode_path_segment(request_id)}/reply",
358
+ body={"decision": decision, "message": message},
359
+ extra_headers=extra_headers,
360
+ extra_query=extra_query,
361
+ extra_body=extra_body,
362
+ timeout=timeout,
363
+ ),
364
+ kind="void",
365
+ )
366
+
367
+
368
+ class AsyncPermissionRequestResource(AsyncAPIResource):
369
+ """Operations under ``client.permission.request`` (OpenCode ``permission.request``)."""
370
+
371
+ async def list(
372
+ self,
373
+ *,
374
+ location: Location | NotGiven | None = NOT_GIVEN,
375
+ extra_headers: Headers | None = None,
376
+ extra_query: Query | None = None,
377
+ extra_body: Body | None = None,
378
+ timeout: Timeout | NotGiven = NOT_GIVEN,
379
+ ) -> PermissionRequestListResponse:
380
+ """List pending permission requests.
381
+
382
+ Retrieve pending permission requests for a location.
383
+
384
+ Raises:
385
+ InvalidRequestError
386
+ UnauthorizedError
387
+ LocationNotFoundError
388
+
389
+ ``GET /api/permission/request``
390
+ """
391
+ return cast(
392
+ "PermissionRequestListResponse",
393
+ await self._client.request(
394
+ RequestOptions(
395
+ method="GET",
396
+ path="/api/permission/request",
397
+ query={"location": self._location(location)},
398
+ extra_headers=extra_headers,
399
+ extra_query=extra_query,
400
+ extra_body=extra_body,
401
+ timeout=timeout,
402
+ ),
403
+ response_type=PermissionRequestListResponse,
404
+ ),
405
+ )
406
+
407
+
408
+ class AsyncPermissionSavedResource(AsyncAPIResource):
409
+ """Operations under ``client.permission.saved`` (OpenCode ``permission.saved``)."""
410
+
411
+ async def list(
412
+ self,
413
+ *,
414
+ project_id: ProjectID | NotGiven | None = NOT_GIVEN,
415
+ extra_headers: Headers | None = None,
416
+ extra_query: Query | None = None,
417
+ extra_body: Body | None = None,
418
+ timeout: Timeout | NotGiven = NOT_GIVEN,
419
+ ) -> builtins.list[PermissionSavedInfo]:
420
+ """List saved permissions.
421
+
422
+ Retrieve saved permissions, optionally filtered by project.
423
+
424
+ Raises:
425
+ InvalidRequestError
426
+ UnauthorizedError
427
+ LocationNotFoundError
428
+
429
+ ``GET /api/permission/saved``
430
+ """
431
+ return cast(
432
+ "builtins.list[PermissionSavedInfo]",
433
+ await self._client.request(
434
+ RequestOptions(
435
+ method="GET",
436
+ path="/api/permission/saved",
437
+ query={"projectID": project_id},
438
+ extra_headers=extra_headers,
439
+ extra_query=extra_query,
440
+ extra_body=extra_body,
441
+ timeout=timeout,
442
+ ),
443
+ response_type=builtins.list[PermissionSavedInfo],
444
+ unwrap=True,
445
+ ),
446
+ )
447
+
448
+ async def update(
449
+ self,
450
+ id: PermissionSavedID,
451
+ *,
452
+ action: str | NotGiven | None = NOT_GIVEN,
453
+ resource: str | NotGiven | None = NOT_GIVEN,
454
+ extra_headers: Headers | None = None,
455
+ extra_query: Query | None = None,
456
+ extra_body: Body | None = None,
457
+ timeout: Timeout | NotGiven = NOT_GIVEN,
458
+ ) -> PermissionSavedInfo:
459
+ """Update saved permission.
460
+
461
+ Change the action or resource of a saved permission. Fails with a conflict when the project already has a saved permission with the same action and resource.
462
+
463
+ Raises:
464
+ InvalidRequestError
465
+ UnauthorizedError
466
+ PermissionSavedNotFoundError
467
+ LocationNotFoundError
468
+ ConflictError
469
+
470
+ ``PATCH /api/permission/saved/:id``
471
+ """
472
+ return cast(
473
+ "PermissionSavedInfo",
474
+ await self._client.request(
475
+ RequestOptions(
476
+ method="PATCH",
477
+ path=f"/api/permission/saved/{encode_path_segment(id)}",
478
+ body={"action": action, "resource": resource},
479
+ extra_headers=extra_headers,
480
+ extra_query=extra_query,
481
+ extra_body=extra_body,
482
+ timeout=timeout,
483
+ ),
484
+ response_type=PermissionSavedInfo,
485
+ unwrap=True,
486
+ ),
487
+ )
488
+
489
+ async def remove(
490
+ self,
491
+ id: PermissionSavedID,
492
+ *,
493
+ extra_headers: Headers | None = None,
494
+ extra_query: Query | None = None,
495
+ extra_body: Body | None = None,
496
+ timeout: Timeout | NotGiven = NOT_GIVEN,
497
+ ) -> None:
498
+ """Remove saved permission.
499
+
500
+ Remove a saved permission by ID.
501
+
502
+ Raises:
503
+ InvalidRequestError
504
+ UnauthorizedError
505
+ LocationNotFoundError
506
+
507
+ ``DELETE /api/permission/saved/:id``
508
+ """
509
+ await self._client.request(
510
+ RequestOptions(
511
+ method="DELETE",
512
+ path=f"/api/permission/saved/{encode_path_segment(id)}",
513
+ extra_headers=extra_headers,
514
+ extra_query=extra_query,
515
+ extra_body=extra_body,
516
+ timeout=timeout,
517
+ ),
518
+ kind="void",
519
+ )
520
+
521
+
522
+ class AsyncPermissionResource(AsyncAPIResource):
523
+ """Operations under ``client.permission`` (OpenCode ``permission``)."""
524
+
525
+ @cached_property
526
+ def request_(self) -> AsyncPermissionRequestResource:
527
+ return AsyncPermissionRequestResource(self._client)
528
+
529
+ @cached_property
530
+ def saved(self) -> AsyncPermissionSavedResource:
531
+ return AsyncPermissionSavedResource(self._client)
532
+
533
+ async def create(
534
+ self,
535
+ session_id: SessionID,
536
+ *,
537
+ action: str,
538
+ resources: Sequence[str],
539
+ id: PermissionID | NotGiven | None = NOT_GIVEN,
540
+ save: Sequence[str] | NotGiven = NOT_GIVEN,
541
+ metadata: Mapping[str, Any] | NotGiven = NOT_GIVEN,
542
+ source: PermissionSource | NotGiven = NOT_GIVEN,
543
+ agent: AgentID | NotGiven | None = NOT_GIVEN,
544
+ extra_headers: Headers | None = None,
545
+ extra_query: Query | None = None,
546
+ extra_body: Body | None = None,
547
+ timeout: Timeout | NotGiven = NOT_GIVEN,
548
+ ) -> PermissionCreateResponse:
549
+ """Create permission request.
550
+
551
+ Evaluate and, when approval is required, create a permission request for a session.
552
+
553
+ Raises:
554
+ InvalidRequestError
555
+ UnauthorizedError
556
+ SessionNotFoundError
557
+ LocationNotFoundError
558
+
559
+ ``POST /api/session/:sessionID/permission``
560
+ """
561
+ return cast(
562
+ "PermissionCreateResponse",
563
+ await self._client.request(
564
+ RequestOptions(
565
+ method="POST",
566
+ path=f"/api/session/{encode_path_segment(session_id)}/permission",
567
+ body={
568
+ "id": id,
569
+ "action": action,
570
+ "resources": resources,
571
+ "save": save,
572
+ "metadata": metadata,
573
+ "source": source,
574
+ "agent": agent,
575
+ },
576
+ extra_headers=extra_headers,
577
+ extra_query=extra_query,
578
+ extra_body=extra_body,
579
+ timeout=timeout,
580
+ ),
581
+ response_type=PermissionCreateResponse,
582
+ unwrap=True,
583
+ ),
584
+ )
585
+
586
+ async def list(
587
+ self,
588
+ session_id: SessionID,
589
+ *,
590
+ extra_headers: Headers | None = None,
591
+ extra_query: Query | None = None,
592
+ extra_body: Body | None = None,
593
+ timeout: Timeout | NotGiven = NOT_GIVEN,
594
+ ) -> builtins.list[PermissionRequest]:
595
+ """List session permission requests.
596
+
597
+ Retrieve pending permission requests owned by a session.
598
+
599
+ Raises:
600
+ InvalidRequestError
601
+ UnauthorizedError
602
+ SessionNotFoundError
603
+ LocationNotFoundError
604
+
605
+ ``GET /api/session/:sessionID/permission``
606
+ """
607
+ return cast(
608
+ "builtins.list[PermissionRequest]",
609
+ await self._client.request(
610
+ RequestOptions(
611
+ method="GET",
612
+ path=f"/api/session/{encode_path_segment(session_id)}/permission",
613
+ extra_headers=extra_headers,
614
+ extra_query=extra_query,
615
+ extra_body=extra_body,
616
+ timeout=timeout,
617
+ ),
618
+ response_type=builtins.list[PermissionRequest],
619
+ unwrap=True,
620
+ ),
621
+ )
622
+
623
+ async def get(
624
+ self,
625
+ session_id: SessionID,
626
+ request_id: PermissionID,
627
+ *,
628
+ extra_headers: Headers | None = None,
629
+ extra_query: Query | None = None,
630
+ extra_body: Body | None = None,
631
+ timeout: Timeout | NotGiven = NOT_GIVEN,
632
+ ) -> PermissionRequest:
633
+ """Get permission request.
634
+
635
+ Retrieve a pending permission request owned by a session.
636
+
637
+ Raises:
638
+ InvalidRequestError
639
+ UnauthorizedError
640
+ SessionNotFoundError
641
+ PermissionNotFoundError
642
+ LocationNotFoundError
643
+
644
+ ``GET /api/session/:sessionID/permission/:requestID``
645
+ """
646
+ return cast(
647
+ "PermissionRequest",
648
+ await self._client.request(
649
+ RequestOptions(
650
+ method="GET",
651
+ path=f"/api/session/{encode_path_segment(session_id)}/permission/{encode_path_segment(request_id)}",
652
+ extra_headers=extra_headers,
653
+ extra_query=extra_query,
654
+ extra_body=extra_body,
655
+ timeout=timeout,
656
+ ),
657
+ response_type=PermissionRequest,
658
+ unwrap=True,
659
+ ),
660
+ )
661
+
662
+ async def reply(
663
+ self,
664
+ session_id: SessionID,
665
+ request_id: PermissionID,
666
+ *,
667
+ decision: PermissionReply,
668
+ message: str | NotGiven | None = NOT_GIVEN,
669
+ extra_headers: Headers | None = None,
670
+ extra_query: Query | None = None,
671
+ extra_body: Body | None = None,
672
+ timeout: Timeout | NotGiven = NOT_GIVEN,
673
+ ) -> None:
674
+ """Reply to pending permission request.
675
+
676
+ Respond to a pending permission request owned by a session.
677
+
678
+ Raises:
679
+ InvalidRequestError
680
+ UnauthorizedError
681
+ SessionNotFoundError
682
+ PermissionNotFoundError
683
+ LocationNotFoundError
684
+
685
+ ``POST /api/session/:sessionID/permission/:requestID/reply``
686
+ """
687
+ await self._client.request(
688
+ RequestOptions(
689
+ method="POST",
690
+ path=f"/api/session/{encode_path_segment(session_id)}/permission/{encode_path_segment(request_id)}/reply",
691
+ body={"decision": decision, "message": message},
692
+ extra_headers=extra_headers,
693
+ extra_query=extra_query,
694
+ extra_body=extra_body,
695
+ timeout=timeout,
696
+ ),
697
+ kind="void",
698
+ )