Skip to content

Commit 077a61c

Browse files
feat: [kernel-1028] add api clipboard support
1 parent e9265c4 commit 077a61c

File tree

7 files changed

+378
-4
lines changed

7 files changed

+378
-4
lines changed

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 101
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-a935c8aae21f8ddb83ea5e289034df12cbde88d432fa2b287629814bb3f58bb6.yml
3-
openapi_spec_hash: df3189b9728372f01662a19c060bcbc5
4-
config_hash: 81f143f4bee47ae7b0b8357551babadf
1+
configured_endpoints: 103
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-f05b888046776a18dbffc1264a27c0256839d132066ef5f6e09ccf1bc505a8f7.yml
3+
openapi_spec_hash: 646fce3982d3efbdb38004b0e4ac4d17
4+
config_hash: cff4d43372b6fa66b64e2d4150f6aa76

api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ Types:
192192
```python
193193
from kernel.types.browsers import (
194194
ComputerGetMousePositionResponse,
195+
ComputerReadClipboardResponse,
195196
ComputerSetCursorVisibilityResponse,
196197
)
197198
```
@@ -205,9 +206,11 @@ Methods:
205206
- <code title="post /browsers/{id}/computer/get_mouse_position">client.browsers.computer.<a href="./src/kernel/resources/browsers/computer.py">get_mouse_position</a>(id) -> <a href="./src/kernel/types/browsers/computer_get_mouse_position_response.py">ComputerGetMousePositionResponse</a></code>
206207
- <code title="post /browsers/{id}/computer/move_mouse">client.browsers.computer.<a href="./src/kernel/resources/browsers/computer.py">move_mouse</a>(id, \*\*<a href="src/kernel/types/browsers/computer_move_mouse_params.py">params</a>) -> None</code>
207208
- <code title="post /browsers/{id}/computer/press_key">client.browsers.computer.<a href="./src/kernel/resources/browsers/computer.py">press_key</a>(id, \*\*<a href="src/kernel/types/browsers/computer_press_key_params.py">params</a>) -> None</code>
209+
- <code title="post /browsers/{id}/computer/clipboard/read">client.browsers.computer.<a href="./src/kernel/resources/browsers/computer.py">read_clipboard</a>(id) -> <a href="./src/kernel/types/browsers/computer_read_clipboard_response.py">ComputerReadClipboardResponse</a></code>
208210
- <code title="post /browsers/{id}/computer/scroll">client.browsers.computer.<a href="./src/kernel/resources/browsers/computer.py">scroll</a>(id, \*\*<a href="src/kernel/types/browsers/computer_scroll_params.py">params</a>) -> None</code>
209211
- <code title="post /browsers/{id}/computer/cursor">client.browsers.computer.<a href="./src/kernel/resources/browsers/computer.py">set_cursor_visibility</a>(id, \*\*<a href="src/kernel/types/browsers/computer_set_cursor_visibility_params.py">params</a>) -> <a href="./src/kernel/types/browsers/computer_set_cursor_visibility_response.py">ComputerSetCursorVisibilityResponse</a></code>
210212
- <code title="post /browsers/{id}/computer/type">client.browsers.computer.<a href="./src/kernel/resources/browsers/computer.py">type_text</a>(id, \*\*<a href="src/kernel/types/browsers/computer_type_text_params.py">params</a>) -> None</code>
213+
- <code title="post /browsers/{id}/computer/clipboard/write">client.browsers.computer.<a href="./src/kernel/resources/browsers/computer.py">write_clipboard</a>(id, \*\*<a href="src/kernel/types/browsers/computer_write_clipboard_params.py">params</a>) -> None</code>
211214

212215
## Playwright
213216

src/kernel/resources/browsers/computer.py

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@
3434
computer_drag_mouse_params,
3535
computer_move_mouse_params,
3636
computer_click_mouse_params,
37+
computer_write_clipboard_params,
3738
computer_capture_screenshot_params,
3839
computer_set_cursor_visibility_params,
3940
)
41+
from ...types.browsers.computer_read_clipboard_response import ComputerReadClipboardResponse
4042
from ...types.browsers.computer_get_mouse_position_response import ComputerGetMousePositionResponse
4143
from ...types.browsers.computer_set_cursor_visibility_response import ComputerSetCursorVisibilityResponse
4244

@@ -408,6 +410,39 @@ def press_key(
408410
cast_to=NoneType,
409411
)
410412

413+
def read_clipboard(
414+
self,
415+
id: str,
416+
*,
417+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
418+
# The extra values given here take precedence over values defined on the client or passed to this method.
419+
extra_headers: Headers | None = None,
420+
extra_query: Query | None = None,
421+
extra_body: Body | None = None,
422+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
423+
) -> ComputerReadClipboardResponse:
424+
"""
425+
Read text from the clipboard on the browser instance
426+
427+
Args:
428+
extra_headers: Send extra headers
429+
430+
extra_query: Add additional query parameters to the request
431+
432+
extra_body: Add additional JSON properties to the request
433+
434+
timeout: Override the client-level default timeout for this request, in seconds
435+
"""
436+
if not id:
437+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
438+
return self._post(
439+
f"/browsers/{id}/computer/clipboard/read",
440+
options=make_request_options(
441+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
442+
),
443+
cast_to=ComputerReadClipboardResponse,
444+
)
445+
411446
def scroll(
412447
self,
413448
id: str,
@@ -553,6 +588,44 @@ def type_text(
553588
cast_to=NoneType,
554589
)
555590

591+
def write_clipboard(
592+
self,
593+
id: str,
594+
*,
595+
text: str,
596+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
597+
# The extra values given here take precedence over values defined on the client or passed to this method.
598+
extra_headers: Headers | None = None,
599+
extra_query: Query | None = None,
600+
extra_body: Body | None = None,
601+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
602+
) -> None:
603+
"""
604+
Write text to the clipboard on the browser instance
605+
606+
Args:
607+
text: Text to write to the system clipboard
608+
609+
extra_headers: Send extra headers
610+
611+
extra_query: Add additional query parameters to the request
612+
613+
extra_body: Add additional JSON properties to the request
614+
615+
timeout: Override the client-level default timeout for this request, in seconds
616+
"""
617+
if not id:
618+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
619+
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
620+
return self._post(
621+
f"/browsers/{id}/computer/clipboard/write",
622+
body=maybe_transform({"text": text}, computer_write_clipboard_params.ComputerWriteClipboardParams),
623+
options=make_request_options(
624+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
625+
),
626+
cast_to=NoneType,
627+
)
628+
556629

557630
class AsyncComputerResource(AsyncAPIResource):
558631
@cached_property
@@ -919,6 +992,39 @@ async def press_key(
919992
cast_to=NoneType,
920993
)
921994

995+
async def read_clipboard(
996+
self,
997+
id: str,
998+
*,
999+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1000+
# The extra values given here take precedence over values defined on the client or passed to this method.
1001+
extra_headers: Headers | None = None,
1002+
extra_query: Query | None = None,
1003+
extra_body: Body | None = None,
1004+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
1005+
) -> ComputerReadClipboardResponse:
1006+
"""
1007+
Read text from the clipboard on the browser instance
1008+
1009+
Args:
1010+
extra_headers: Send extra headers
1011+
1012+
extra_query: Add additional query parameters to the request
1013+
1014+
extra_body: Add additional JSON properties to the request
1015+
1016+
timeout: Override the client-level default timeout for this request, in seconds
1017+
"""
1018+
if not id:
1019+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
1020+
return await self._post(
1021+
f"/browsers/{id}/computer/clipboard/read",
1022+
options=make_request_options(
1023+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1024+
),
1025+
cast_to=ComputerReadClipboardResponse,
1026+
)
1027+
9221028
async def scroll(
9231029
self,
9241030
id: str,
@@ -1064,6 +1170,46 @@ async def type_text(
10641170
cast_to=NoneType,
10651171
)
10661172

1173+
async def write_clipboard(
1174+
self,
1175+
id: str,
1176+
*,
1177+
text: str,
1178+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1179+
# The extra values given here take precedence over values defined on the client or passed to this method.
1180+
extra_headers: Headers | None = None,
1181+
extra_query: Query | None = None,
1182+
extra_body: Body | None = None,
1183+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
1184+
) -> None:
1185+
"""
1186+
Write text to the clipboard on the browser instance
1187+
1188+
Args:
1189+
text: Text to write to the system clipboard
1190+
1191+
extra_headers: Send extra headers
1192+
1193+
extra_query: Add additional query parameters to the request
1194+
1195+
extra_body: Add additional JSON properties to the request
1196+
1197+
timeout: Override the client-level default timeout for this request, in seconds
1198+
"""
1199+
if not id:
1200+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
1201+
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
1202+
return await self._post(
1203+
f"/browsers/{id}/computer/clipboard/write",
1204+
body=await async_maybe_transform(
1205+
{"text": text}, computer_write_clipboard_params.ComputerWriteClipboardParams
1206+
),
1207+
options=make_request_options(
1208+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1209+
),
1210+
cast_to=NoneType,
1211+
)
1212+
10671213

10681214
class ComputerResourceWithRawResponse:
10691215
def __init__(self, computer: ComputerResource) -> None:
@@ -1091,6 +1237,9 @@ def __init__(self, computer: ComputerResource) -> None:
10911237
self.press_key = to_raw_response_wrapper(
10921238
computer.press_key,
10931239
)
1240+
self.read_clipboard = to_raw_response_wrapper(
1241+
computer.read_clipboard,
1242+
)
10941243
self.scroll = to_raw_response_wrapper(
10951244
computer.scroll,
10961245
)
@@ -1100,6 +1249,9 @@ def __init__(self, computer: ComputerResource) -> None:
11001249
self.type_text = to_raw_response_wrapper(
11011250
computer.type_text,
11021251
)
1252+
self.write_clipboard = to_raw_response_wrapper(
1253+
computer.write_clipboard,
1254+
)
11031255

11041256

11051257
class AsyncComputerResourceWithRawResponse:
@@ -1128,6 +1280,9 @@ def __init__(self, computer: AsyncComputerResource) -> None:
11281280
self.press_key = async_to_raw_response_wrapper(
11291281
computer.press_key,
11301282
)
1283+
self.read_clipboard = async_to_raw_response_wrapper(
1284+
computer.read_clipboard,
1285+
)
11311286
self.scroll = async_to_raw_response_wrapper(
11321287
computer.scroll,
11331288
)
@@ -1137,6 +1292,9 @@ def __init__(self, computer: AsyncComputerResource) -> None:
11371292
self.type_text = async_to_raw_response_wrapper(
11381293
computer.type_text,
11391294
)
1295+
self.write_clipboard = async_to_raw_response_wrapper(
1296+
computer.write_clipboard,
1297+
)
11401298

11411299

11421300
class ComputerResourceWithStreamingResponse:
@@ -1165,6 +1323,9 @@ def __init__(self, computer: ComputerResource) -> None:
11651323
self.press_key = to_streamed_response_wrapper(
11661324
computer.press_key,
11671325
)
1326+
self.read_clipboard = to_streamed_response_wrapper(
1327+
computer.read_clipboard,
1328+
)
11681329
self.scroll = to_streamed_response_wrapper(
11691330
computer.scroll,
11701331
)
@@ -1174,6 +1335,9 @@ def __init__(self, computer: ComputerResource) -> None:
11741335
self.type_text = to_streamed_response_wrapper(
11751336
computer.type_text,
11761337
)
1338+
self.write_clipboard = to_streamed_response_wrapper(
1339+
computer.write_clipboard,
1340+
)
11771341

11781342

11791343
class AsyncComputerResourceWithStreamingResponse:
@@ -1202,6 +1366,9 @@ def __init__(self, computer: AsyncComputerResource) -> None:
12021366
self.press_key = async_to_streamed_response_wrapper(
12031367
computer.press_key,
12041368
)
1369+
self.read_clipboard = async_to_streamed_response_wrapper(
1370+
computer.read_clipboard,
1371+
)
12051372
self.scroll = async_to_streamed_response_wrapper(
12061373
computer.scroll,
12071374
)
@@ -1211,3 +1378,6 @@ def __init__(self, computer: AsyncComputerResource) -> None:
12111378
self.type_text = async_to_streamed_response_wrapper(
12121379
computer.type_text,
12131380
)
1381+
self.write_clipboard = async_to_streamed_response_wrapper(
1382+
computer.write_clipboard,
1383+
)

src/kernel/types/browsers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
from .playwright_execute_response import PlaywrightExecuteResponse as PlaywrightExecuteResponse
4242
from .f_set_file_permissions_params import FSetFilePermissionsParams as FSetFilePermissionsParams
4343
from .process_stdout_stream_response import ProcessStdoutStreamResponse as ProcessStdoutStreamResponse
44+
from .computer_write_clipboard_params import ComputerWriteClipboardParams as ComputerWriteClipboardParams
45+
from .computer_read_clipboard_response import ComputerReadClipboardResponse as ComputerReadClipboardResponse
4446
from .computer_capture_screenshot_params import ComputerCaptureScreenshotParams as ComputerCaptureScreenshotParams
4547
from .computer_get_mouse_position_response import ComputerGetMousePositionResponse as ComputerGetMousePositionResponse
4648
from .computer_set_cursor_visibility_params import (
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from ..._models import BaseModel
4+
5+
__all__ = ["ComputerReadClipboardResponse"]
6+
7+
8+
class ComputerReadClipboardResponse(BaseModel):
9+
text: str
10+
"""Current clipboard text content"""
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from __future__ import annotations
4+
5+
from typing_extensions import Required, TypedDict
6+
7+
__all__ = ["ComputerWriteClipboardParams"]
8+
9+
10+
class ComputerWriteClipboardParams(TypedDict, total=False):
11+
text: Required[str]
12+
"""Text to write to the system clipboard"""

0 commit comments

Comments
 (0)