agentkernel-sdk 0.20.0__tar.gz → 0.21.0__tar.gz
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.
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/PKG-INFO +1 -1
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/pyproject.toml +1 -1
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/__init__.py +6 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/async_client.py +8 -1
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/client.py +8 -1
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/types.py +31 -1
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/tests/test_client.py +3 -1
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/uv.lock +1 -1
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/.gitignore +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/README.md +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/examples/async_example.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/examples/quickstart.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/examples/sandbox_session.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/examples/streaming.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/_config.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/browser.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/errors.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/py.typed +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/sse.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/tests/test_async_client.py +0 -0
- {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/tests/test_sse.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentkernel-sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.21.0
|
|
4
4
|
Summary: Python SDK for agentkernel — run AI coding agents in secure, isolated microVMs
|
|
5
5
|
Project-URL: Homepage, https://github.com/thrashr888/agentkernel
|
|
6
6
|
Project-URL: Repository, https://github.com/thrashr888/agentkernel/tree/main/sdk/python
|
|
@@ -23,6 +23,9 @@ from .errors import (
|
|
|
23
23
|
)
|
|
24
24
|
from .types import (
|
|
25
25
|
AriaSnapshot,
|
|
26
|
+
BackendCapabilities,
|
|
27
|
+
BackendDescriptor,
|
|
28
|
+
BackendDiscovery,
|
|
26
29
|
BatchCommand,
|
|
27
30
|
BatchFileWriteResponse,
|
|
28
31
|
BatchResult,
|
|
@@ -56,6 +59,9 @@ from .types import (
|
|
|
56
59
|
|
|
57
60
|
__all__ = [
|
|
58
61
|
"AgentKernel",
|
|
62
|
+
"BackendCapabilities",
|
|
63
|
+
"BackendDescriptor",
|
|
64
|
+
"BackendDiscovery",
|
|
59
65
|
"AsyncAgentKernel",
|
|
60
66
|
"SandboxSession",
|
|
61
67
|
"AsyncSandboxSession",
|
|
@@ -14,6 +14,7 @@ if TYPE_CHECKING:
|
|
|
14
14
|
from ._config import resolve_config
|
|
15
15
|
from .errors import AgentKernelError, NetworkError, error_from_status
|
|
16
16
|
from .types import (
|
|
17
|
+
BackendDiscovery,
|
|
17
18
|
BatchFileWriteResponse,
|
|
18
19
|
BatchRunResponse,
|
|
19
20
|
DetachedCommand,
|
|
@@ -34,7 +35,7 @@ from .types import (
|
|
|
34
35
|
StreamEvent,
|
|
35
36
|
)
|
|
36
37
|
|
|
37
|
-
SDK_VERSION = "0.
|
|
38
|
+
SDK_VERSION = "0.21.0"
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
class AsyncSandboxSession:
|
|
@@ -181,6 +182,10 @@ class AsyncAgentKernel:
|
|
|
181
182
|
data = await self._request("GET", "/sandboxes")
|
|
182
183
|
return [SandboxInfo(**s) for s in data]
|
|
183
184
|
|
|
185
|
+
async def get_backends(self) -> BackendDiscovery:
|
|
186
|
+
"""Discover server-supported and ready sandbox backends."""
|
|
187
|
+
return BackendDiscovery(**await self._request("GET", "/backends"))
|
|
188
|
+
|
|
184
189
|
async def create_sandbox(
|
|
185
190
|
self,
|
|
186
191
|
name: str,
|
|
@@ -189,6 +194,7 @@ class AsyncAgentKernel:
|
|
|
189
194
|
vcpus: int | None = None,
|
|
190
195
|
memory_mb: int | None = None,
|
|
191
196
|
profile: SecurityProfile | None = None,
|
|
197
|
+
backend: str | None = None,
|
|
192
198
|
source_url: str | None = None,
|
|
193
199
|
source_ref: str | None = None,
|
|
194
200
|
volumes: list[str] | None = None,
|
|
@@ -199,6 +205,7 @@ class AsyncAgentKernel:
|
|
|
199
205
|
"/sandboxes",
|
|
200
206
|
json={
|
|
201
207
|
"name": name,
|
|
208
|
+
"backend": backend,
|
|
202
209
|
"image": image,
|
|
203
210
|
"vcpus": vcpus,
|
|
204
211
|
"memory_mb": memory_mb,
|
|
@@ -13,6 +13,7 @@ if TYPE_CHECKING:
|
|
|
13
13
|
from ._config import resolve_config
|
|
14
14
|
from .errors import AgentKernelError, NetworkError, error_from_status
|
|
15
15
|
from .types import (
|
|
16
|
+
BackendDiscovery,
|
|
16
17
|
BatchFileWriteResponse,
|
|
17
18
|
BatchRunResponse,
|
|
18
19
|
DetachedCommand,
|
|
@@ -33,7 +34,7 @@ from .types import (
|
|
|
33
34
|
StreamEvent,
|
|
34
35
|
)
|
|
35
36
|
|
|
36
|
-
SDK_VERSION = "0.
|
|
37
|
+
SDK_VERSION = "0.21.0"
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
class SandboxSession:
|
|
@@ -167,6 +168,10 @@ class AgentKernel:
|
|
|
167
168
|
data = self._request("GET", "/sandboxes")
|
|
168
169
|
return [SandboxInfo(**s) for s in data]
|
|
169
170
|
|
|
171
|
+
def get_backends(self) -> BackendDiscovery:
|
|
172
|
+
"""Discover server-supported and ready sandbox backends."""
|
|
173
|
+
return BackendDiscovery(**self._request("GET", "/backends"))
|
|
174
|
+
|
|
170
175
|
def create_sandbox(
|
|
171
176
|
self,
|
|
172
177
|
name: str,
|
|
@@ -175,6 +180,7 @@ class AgentKernel:
|
|
|
175
180
|
vcpus: int | None = None,
|
|
176
181
|
memory_mb: int | None = None,
|
|
177
182
|
profile: SecurityProfile | None = None,
|
|
183
|
+
backend: str | None = None,
|
|
178
184
|
source_url: str | None = None,
|
|
179
185
|
source_ref: str | None = None,
|
|
180
186
|
volumes: list[str] | None = None,
|
|
@@ -184,6 +190,7 @@ class AgentKernel:
|
|
|
184
190
|
"""Create a new sandbox."""
|
|
185
191
|
body = {
|
|
186
192
|
"name": name,
|
|
193
|
+
"backend": backend,
|
|
187
194
|
"image": image,
|
|
188
195
|
"vcpus": vcpus,
|
|
189
196
|
"memory_mb": memory_mb,
|
|
@@ -7,7 +7,7 @@ from typing import Any, Literal
|
|
|
7
7
|
from pydantic import BaseModel
|
|
8
8
|
|
|
9
9
|
SecurityProfile = Literal["permissive", "moderate", "restrictive"]
|
|
10
|
-
SandboxStatus = Literal["running", "stopped"]
|
|
10
|
+
SandboxStatus = Literal["running", "paused", "stopped", "dormant", "archived"]
|
|
11
11
|
StreamEventType = Literal["started", "progress", "output", "done", "error"]
|
|
12
12
|
|
|
13
13
|
|
|
@@ -30,6 +30,34 @@ class SandboxInfo(BaseModel):
|
|
|
30
30
|
created_at: str | None = None
|
|
31
31
|
|
|
32
32
|
|
|
33
|
+
class BackendCapabilities(BaseModel):
|
|
34
|
+
mount_cwd: bool
|
|
35
|
+
mount_home: bool
|
|
36
|
+
attach: bool
|
|
37
|
+
host_volumes: bool
|
|
38
|
+
ssh: bool
|
|
39
|
+
proxy_secret_bindings: bool
|
|
40
|
+
secret_files: bool
|
|
41
|
+
snapshots: bool
|
|
42
|
+
resume: bool
|
|
43
|
+
full_state_pause_resume: bool
|
|
44
|
+
full_state_fork: bool
|
|
45
|
+
endpoints: bool
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class BackendDescriptor(BaseModel):
|
|
49
|
+
backend: str
|
|
50
|
+
configured: bool
|
|
51
|
+
usable: bool
|
|
52
|
+
readiness_reason: str
|
|
53
|
+
capabilities: BackendCapabilities
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class BackendDiscovery(BaseModel):
|
|
57
|
+
default_backend: str | None = None
|
|
58
|
+
backends: list[BackendDescriptor]
|
|
59
|
+
|
|
60
|
+
|
|
33
61
|
class RunOptions(BaseModel):
|
|
34
62
|
"""Options for the run command."""
|
|
35
63
|
|
|
@@ -41,6 +69,8 @@ class RunOptions(BaseModel):
|
|
|
41
69
|
class CreateSandboxOptions(BaseModel):
|
|
42
70
|
"""Options for creating a sandbox."""
|
|
43
71
|
|
|
72
|
+
backend: str | None = None
|
|
73
|
+
|
|
44
74
|
image: str | None = None
|
|
45
75
|
vcpus: int | None = None
|
|
46
76
|
memory_mb: int | None = None
|
|
@@ -61,13 +61,15 @@ class TestListSandboxes:
|
|
|
61
61
|
"data": [
|
|
62
62
|
{"name": "sb-1", "status": "running", "backend": "docker"},
|
|
63
63
|
{"name": "sb-2", "status": "stopped", "backend": "docker"},
|
|
64
|
+
{"name": "sb-3", "status": "paused", "backend": "firecracker"},
|
|
64
65
|
],
|
|
65
66
|
}
|
|
66
67
|
)
|
|
67
68
|
result = make_client().list_sandboxes()
|
|
68
|
-
assert len(result) ==
|
|
69
|
+
assert len(result) == 3
|
|
69
70
|
assert all(isinstance(s, SandboxInfo) for s in result)
|
|
70
71
|
assert result[0].name == "sb-1"
|
|
72
|
+
assert result[2].status == "paused"
|
|
71
73
|
|
|
72
74
|
|
|
73
75
|
class TestCreateSandbox:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|