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.
Files changed (21) hide show
  1. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/PKG-INFO +1 -1
  2. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/pyproject.toml +1 -1
  3. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/__init__.py +6 -0
  4. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/async_client.py +8 -1
  5. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/client.py +8 -1
  6. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/types.py +31 -1
  7. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/tests/test_client.py +3 -1
  8. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/uv.lock +1 -1
  9. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/.gitignore +0 -0
  10. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/README.md +0 -0
  11. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/examples/async_example.py +0 -0
  12. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/examples/quickstart.py +0 -0
  13. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/examples/sandbox_session.py +0 -0
  14. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/examples/streaming.py +0 -0
  15. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/_config.py +0 -0
  16. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/browser.py +0 -0
  17. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/errors.py +0 -0
  18. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/py.typed +0 -0
  19. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/src/agentkernel/sse.py +0 -0
  20. {agentkernel_sdk-0.20.0 → agentkernel_sdk-0.21.0}/tests/test_async_client.py +0 -0
  21. {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.20.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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "agentkernel-sdk"
7
- version = "0.20.0"
7
+ version = "0.21.0"
8
8
  description = "Python SDK for agentkernel — run AI coding agents in secure, isolated microVMs"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -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.3.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.3.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) == 2
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:
@@ -8,7 +8,7 @@ resolution-markers = [
8
8
 
9
9
  [[package]]
10
10
  name = "agentkernel-sdk"
11
- version = "0.3.0"
11
+ version = "0.21.0"
12
12
  source = { editable = "." }
13
13
  dependencies = [
14
14
  { name = "httpx" },