Skip to content

Commit 03b3223

Browse files
feat(api): new process, fs, and log endpoints
New endpoints for executing processes on browser instances, uploading / downloading whole directories as zip files, and streaming any log file on a browser instance
1 parent fe21c07 commit 03b3223

25 files changed

+2864
-6
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: 31
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-b55c3e0424fa7733487139488b9fff00ad8949ff02ee3160ee36b9334e84b134.yml
3-
openapi_spec_hash: 17f36677e3dc0a3aeb419654c8d5cae3
4-
config_hash: f67e4b33b2fb30c1405ee2fff8096320
1+
configured_endpoints: 41
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-a7c1df5070fe59642d7a1f168aa902a468227752bfc930cbf38930f7c205dbb6.yml
3+
openapi_spec_hash: eab65e39aef4f0a0952b82adeecf6b5b
4+
config_hash: 5de78bc29ac060562575cb54bb26826c

api.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,14 @@ Methods:
108108
- <code title="put /browsers/{id}/fs/create_directory">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">create_directory</a>(id, \*\*<a href="src/kernel/types/browsers/f_create_directory_params.py">params</a>) -> None</code>
109109
- <code title="put /browsers/{id}/fs/delete_directory">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">delete_directory</a>(id, \*\*<a href="src/kernel/types/browsers/f_delete_directory_params.py">params</a>) -> None</code>
110110
- <code title="put /browsers/{id}/fs/delete_file">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">delete_file</a>(id, \*\*<a href="src/kernel/types/browsers/f_delete_file_params.py">params</a>) -> None</code>
111+
- <code title="get /browsers/{id}/fs/download_dir_zip">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">download_dir_zip</a>(id, \*\*<a href="src/kernel/types/browsers/f_download_dir_zip_params.py">params</a>) -> BinaryAPIResponse</code>
111112
- <code title="get /browsers/{id}/fs/file_info">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">file_info</a>(id, \*\*<a href="src/kernel/types/browsers/f_file_info_params.py">params</a>) -> <a href="./src/kernel/types/browsers/f_file_info_response.py">FFileInfoResponse</a></code>
112113
- <code title="get /browsers/{id}/fs/list_files">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">list_files</a>(id, \*\*<a href="src/kernel/types/browsers/f_list_files_params.py">params</a>) -> <a href="./src/kernel/types/browsers/f_list_files_response.py">FListFilesResponse</a></code>
113114
- <code title="put /browsers/{id}/fs/move">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">move</a>(id, \*\*<a href="src/kernel/types/browsers/f_move_params.py">params</a>) -> None</code>
114115
- <code title="get /browsers/{id}/fs/read_file">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">read_file</a>(id, \*\*<a href="src/kernel/types/browsers/f_read_file_params.py">params</a>) -> BinaryAPIResponse</code>
115116
- <code title="put /browsers/{id}/fs/set_file_permissions">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">set_file_permissions</a>(id, \*\*<a href="src/kernel/types/browsers/f_set_file_permissions_params.py">params</a>) -> None</code>
117+
- <code title="post /browsers/{id}/fs/upload">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">upload</a>(id, \*\*<a href="src/kernel/types/browsers/f_upload_params.py">params</a>) -> None</code>
118+
- <code title="post /browsers/{id}/fs/upload_zip">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">upload_zip</a>(id, \*\*<a href="src/kernel/types/browsers/f_upload_zip_params.py">params</a>) -> None</code>
116119
- <code title="put /browsers/{id}/fs/write_file">client.browsers.fs.<a href="./src/kernel/resources/browsers/fs/fs.py">write_file</a>(id, contents, \*\*<a href="src/kernel/types/browsers/f_write_file_params.py">params</a>) -> None</code>
117120

118121
### Watch
@@ -128,3 +131,33 @@ Methods:
128131
- <code title="get /browsers/{id}/fs/watch/{watch_id}/events">client.browsers.fs.watch.<a href="./src/kernel/resources/browsers/fs/watch.py">events</a>(watch_id, \*, id) -> <a href="./src/kernel/types/browsers/fs/watch_events_response.py">WatchEventsResponse</a></code>
129132
- <code title="post /browsers/{id}/fs/watch">client.browsers.fs.watch.<a href="./src/kernel/resources/browsers/fs/watch.py">start</a>(id, \*\*<a href="src/kernel/types/browsers/fs/watch_start_params.py">params</a>) -> <a href="./src/kernel/types/browsers/fs/watch_start_response.py">WatchStartResponse</a></code>
130133
- <code title="delete /browsers/{id}/fs/watch/{watch_id}">client.browsers.fs.watch.<a href="./src/kernel/resources/browsers/fs/watch.py">stop</a>(watch_id, \*, id) -> None</code>
134+
135+
## Process
136+
137+
Types:
138+
139+
```python
140+
from kernel.types.browsers import (
141+
ProcessExecResponse,
142+
ProcessKillResponse,
143+
ProcessSpawnResponse,
144+
ProcessStatusResponse,
145+
ProcessStdinResponse,
146+
ProcessStdoutStreamResponse,
147+
)
148+
```
149+
150+
Methods:
151+
152+
- <code title="post /browsers/{id}/process/exec">client.browsers.process.<a href="./src/kernel/resources/browsers/process.py">exec</a>(id, \*\*<a href="src/kernel/types/browsers/process_exec_params.py">params</a>) -> <a href="./src/kernel/types/browsers/process_exec_response.py">ProcessExecResponse</a></code>
153+
- <code title="post /browsers/{id}/process/{process_id}/kill">client.browsers.process.<a href="./src/kernel/resources/browsers/process.py">kill</a>(process_id, \*, id, \*\*<a href="src/kernel/types/browsers/process_kill_params.py">params</a>) -> <a href="./src/kernel/types/browsers/process_kill_response.py">ProcessKillResponse</a></code>
154+
- <code title="post /browsers/{id}/process/spawn">client.browsers.process.<a href="./src/kernel/resources/browsers/process.py">spawn</a>(id, \*\*<a href="src/kernel/types/browsers/process_spawn_params.py">params</a>) -> <a href="./src/kernel/types/browsers/process_spawn_response.py">ProcessSpawnResponse</a></code>
155+
- <code title="get /browsers/{id}/process/{process_id}/status">client.browsers.process.<a href="./src/kernel/resources/browsers/process.py">status</a>(process_id, \*, id) -> <a href="./src/kernel/types/browsers/process_status_response.py">ProcessStatusResponse</a></code>
156+
- <code title="post /browsers/{id}/process/{process_id}/stdin">client.browsers.process.<a href="./src/kernel/resources/browsers/process.py">stdin</a>(process_id, \*, id, \*\*<a href="src/kernel/types/browsers/process_stdin_params.py">params</a>) -> <a href="./src/kernel/types/browsers/process_stdin_response.py">ProcessStdinResponse</a></code>
157+
- <code title="get /browsers/{id}/process/{process_id}/stdout/stream">client.browsers.process.<a href="./src/kernel/resources/browsers/process.py">stdout_stream</a>(process_id, \*, id) -> <a href="./src/kernel/types/browsers/process_stdout_stream_response.py">ProcessStdoutStreamResponse</a></code>
158+
159+
## Logs
160+
161+
Methods:
162+
163+
- <code title="get /browsers/{id}/logs/stream">client.browsers.logs.<a href="./src/kernel/resources/browsers/logs.py">stream</a>(id, \*\*<a href="src/kernel/types/browsers/log_stream_params.py">params</a>) -> <a href="./src/kernel/types/shared/log_event.py">LogEvent</a></code>

src/kernel/resources/browsers/__init__.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,22 @@
88
FsResourceWithStreamingResponse,
99
AsyncFsResourceWithStreamingResponse,
1010
)
11+
from .logs import (
12+
LogsResource,
13+
AsyncLogsResource,
14+
LogsResourceWithRawResponse,
15+
AsyncLogsResourceWithRawResponse,
16+
LogsResourceWithStreamingResponse,
17+
AsyncLogsResourceWithStreamingResponse,
18+
)
19+
from .process import (
20+
ProcessResource,
21+
AsyncProcessResource,
22+
ProcessResourceWithRawResponse,
23+
AsyncProcessResourceWithRawResponse,
24+
ProcessResourceWithStreamingResponse,
25+
AsyncProcessResourceWithStreamingResponse,
26+
)
1127
from .replays import (
1228
ReplaysResource,
1329
AsyncReplaysResource,
@@ -38,6 +54,18 @@
3854
"AsyncFsResourceWithRawResponse",
3955
"FsResourceWithStreamingResponse",
4056
"AsyncFsResourceWithStreamingResponse",
57+
"ProcessResource",
58+
"AsyncProcessResource",
59+
"ProcessResourceWithRawResponse",
60+
"AsyncProcessResourceWithRawResponse",
61+
"ProcessResourceWithStreamingResponse",
62+
"AsyncProcessResourceWithStreamingResponse",
63+
"LogsResource",
64+
"AsyncLogsResource",
65+
"LogsResourceWithRawResponse",
66+
"AsyncLogsResourceWithRawResponse",
67+
"LogsResourceWithStreamingResponse",
68+
"AsyncLogsResourceWithStreamingResponse",
4169
"BrowsersResource",
4270
"AsyncBrowsersResource",
4371
"BrowsersResourceWithRawResponse",

src/kernel/resources/browsers/browsers.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@
44

55
import httpx
66

7+
from .logs import (
8+
LogsResource,
9+
AsyncLogsResource,
10+
LogsResourceWithRawResponse,
11+
AsyncLogsResourceWithRawResponse,
12+
LogsResourceWithStreamingResponse,
13+
AsyncLogsResourceWithStreamingResponse,
14+
)
715
from .fs.fs import (
816
FsResource,
917
AsyncFsResource,
@@ -13,6 +21,14 @@
1321
AsyncFsResourceWithStreamingResponse,
1422
)
1523
from ...types import browser_create_params, browser_delete_params
24+
from .process import (
25+
ProcessResource,
26+
AsyncProcessResource,
27+
ProcessResourceWithRawResponse,
28+
AsyncProcessResourceWithRawResponse,
29+
ProcessResourceWithStreamingResponse,
30+
AsyncProcessResourceWithStreamingResponse,
31+
)
1632
from .replays import (
1733
ReplaysResource,
1834
AsyncReplaysResource,
@@ -49,6 +65,14 @@ def replays(self) -> ReplaysResource:
4965
def fs(self) -> FsResource:
5066
return FsResource(self._client)
5167

68+
@cached_property
69+
def process(self) -> ProcessResource:
70+
return ProcessResource(self._client)
71+
72+
@cached_property
73+
def logs(self) -> LogsResource:
74+
return LogsResource(self._client)
75+
5276
@cached_property
5377
def with_raw_response(self) -> BrowsersResourceWithRawResponse:
5478
"""
@@ -261,6 +285,14 @@ def replays(self) -> AsyncReplaysResource:
261285
def fs(self) -> AsyncFsResource:
262286
return AsyncFsResource(self._client)
263287

288+
@cached_property
289+
def process(self) -> AsyncProcessResource:
290+
return AsyncProcessResource(self._client)
291+
292+
@cached_property
293+
def logs(self) -> AsyncLogsResource:
294+
return AsyncLogsResource(self._client)
295+
264296
@cached_property
265297
def with_raw_response(self) -> AsyncBrowsersResourceWithRawResponse:
266298
"""
@@ -494,6 +526,14 @@ def replays(self) -> ReplaysResourceWithRawResponse:
494526
def fs(self) -> FsResourceWithRawResponse:
495527
return FsResourceWithRawResponse(self._browsers.fs)
496528

529+
@cached_property
530+
def process(self) -> ProcessResourceWithRawResponse:
531+
return ProcessResourceWithRawResponse(self._browsers.process)
532+
533+
@cached_property
534+
def logs(self) -> LogsResourceWithRawResponse:
535+
return LogsResourceWithRawResponse(self._browsers.logs)
536+
497537

498538
class AsyncBrowsersResourceWithRawResponse:
499539
def __init__(self, browsers: AsyncBrowsersResource) -> None:
@@ -523,6 +563,14 @@ def replays(self) -> AsyncReplaysResourceWithRawResponse:
523563
def fs(self) -> AsyncFsResourceWithRawResponse:
524564
return AsyncFsResourceWithRawResponse(self._browsers.fs)
525565

566+
@cached_property
567+
def process(self) -> AsyncProcessResourceWithRawResponse:
568+
return AsyncProcessResourceWithRawResponse(self._browsers.process)
569+
570+
@cached_property
571+
def logs(self) -> AsyncLogsResourceWithRawResponse:
572+
return AsyncLogsResourceWithRawResponse(self._browsers.logs)
573+
526574

527575
class BrowsersResourceWithStreamingResponse:
528576
def __init__(self, browsers: BrowsersResource) -> None:
@@ -552,6 +600,14 @@ def replays(self) -> ReplaysResourceWithStreamingResponse:
552600
def fs(self) -> FsResourceWithStreamingResponse:
553601
return FsResourceWithStreamingResponse(self._browsers.fs)
554602

603+
@cached_property
604+
def process(self) -> ProcessResourceWithStreamingResponse:
605+
return ProcessResourceWithStreamingResponse(self._browsers.process)
606+
607+
@cached_property
608+
def logs(self) -> LogsResourceWithStreamingResponse:
609+
return LogsResourceWithStreamingResponse(self._browsers.logs)
610+
555611

556612
class AsyncBrowsersResourceWithStreamingResponse:
557613
def __init__(self, browsers: AsyncBrowsersResource) -> None:
@@ -580,3 +636,11 @@ def replays(self) -> AsyncReplaysResourceWithStreamingResponse:
580636
@cached_property
581637
def fs(self) -> AsyncFsResourceWithStreamingResponse:
582638
return AsyncFsResourceWithStreamingResponse(self._browsers.fs)
639+
640+
@cached_property
641+
def process(self) -> AsyncProcessResourceWithStreamingResponse:
642+
return AsyncProcessResourceWithStreamingResponse(self._browsers.process)
643+
644+
@cached_property
645+
def logs(self) -> AsyncLogsResourceWithStreamingResponse:
646+
return AsyncLogsResourceWithStreamingResponse(self._browsers.logs)

0 commit comments

Comments
 (0)