voidrun 0.2.0__tar.gz → 0.2.2__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 (85) hide show
  1. {voidrun-0.2.0 → voidrun-0.2.2}/PKG-INFO +15 -5
  2. {voidrun-0.2.0 → voidrun-0.2.2}/README.md +13 -3
  3. {voidrun-0.2.0 → voidrun-0.2.2}/pyproject.toml +1 -1
  4. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/configuration.py +2 -2
  5. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/sandbox.py +1 -1
  6. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/client.py +8 -0
  7. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/constants.py +1 -1
  8. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/sandbox.py +1 -0
  9. {voidrun-0.2.0 → voidrun-0.2.2}/.gitignore +0 -0
  10. {voidrun-0.2.0 → voidrun-0.2.2}/scripts/run_all_examples.sh +0 -0
  11. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/__init__.py +0 -0
  12. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/__init__.py +0 -0
  13. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api/__init__.py +0 -0
  14. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api/execution_api.py +0 -0
  15. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api/file_system_api.py +0 -0
  16. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api/images_api.py +0 -0
  17. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api/organizations_api.py +0 -0
  18. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api/sandboxes_api.py +0 -0
  19. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api/system_api.py +0 -0
  20. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api/users_api.py +0 -0
  21. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api_client.py +0 -0
  22. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/api_response.py +0 -0
  23. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/exceptions.py +0 -0
  24. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/__init__.py +0 -0
  25. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/activate_api_key_request.py +0 -0
  26. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/api_key_response.py +0 -0
  27. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/api_response_sandbox.py +0 -0
  28. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/api_response_sandboxes_list.py +0 -0
  29. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/api_response_sandboxes_list_meta.py +0 -0
  30. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/command_kill_response.py +0 -0
  31. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/command_list_response.py +0 -0
  32. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/command_run_response.py +0 -0
  33. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/command_wait_response.py +0 -0
  34. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/compress_request.py +0 -0
  35. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/create_file_request.py +0 -0
  36. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/create_image_request.py +0 -0
  37. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/create_pty_session200_response.py +0 -0
  38. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/create_pty_session200_response_all_of_data.py +0 -0
  39. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/create_pty_session_request.py +0 -0
  40. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/create_sandbox201_response.py +0 -0
  41. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/create_sandbox_request.py +0 -0
  42. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/disk_usage.py +0 -0
  43. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/error_response.py +0 -0
  44. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/exec_request.py +0 -0
  45. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/exec_response.py +0 -0
  46. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/exec_response_data.py +0 -0
  47. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/execute_in_session_request.py +0 -0
  48. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/extract_request.py +0 -0
  49. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/file_event.py +0 -0
  50. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/file_info.py +0 -0
  51. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/file_stats.py +0 -0
  52. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/generate_api_key_request.py +0 -0
  53. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/generated_api_key_response.py +0 -0
  54. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/get_current_user200_response.py +0 -0
  55. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/get_current_user200_response_orgs_inner.py +0 -0
  56. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/get_org_users200_response.py +0 -0
  57. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/get_org_users200_response_all_of_data_inner.py +0 -0
  58. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/get_pty_buffer200_response.py +0 -0
  59. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/get_pty_buffer200_response_all_of_data.py +0 -0
  60. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/get_version200_response.py +0 -0
  61. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/image.py +0 -0
  62. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/kill_background_process_request.py +0 -0
  63. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/list_files200_response.py +0 -0
  64. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/list_files200_response_data.py +0 -0
  65. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/list_pty_sessions200_response.py +0 -0
  66. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/list_pty_sessions200_response_all_of_data.py +0 -0
  67. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/organization.py +0 -0
  68. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/process_info.py +0 -0
  69. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/pty_session_info.py +0 -0
  70. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/resize_terminal_request.py +0 -0
  71. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/run_background_command_request.py +0 -0
  72. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/session_exec_request.py +0 -0
  73. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/session_exec_response.py +0 -0
  74. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/session_exec_stream_request.py +0 -0
  75. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/start_watch200_response.py +0 -0
  76. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/start_watch200_response_data.py +0 -0
  77. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/start_watch_request.py +0 -0
  78. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/models/success_response.py +0 -0
  79. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/py.typed +0 -0
  80. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/api_client/rest.py +0 -0
  81. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/commands.py +0 -0
  82. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/fs.py +0 -0
  83. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/interpreter.py +0 -0
  84. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/pty.py +0 -0
  85. {voidrun-0.2.0 → voidrun-0.2.2}/voidrun/response.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: voidrun
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Python SDK for VoidRun AI Sandbox
5
5
  Project-URL: Homepage, https://voidrun.io
6
6
  Project-URL: Documentation, https://docs.voidrun.io
@@ -114,7 +114,7 @@ Exported from `voidrun`:
114
114
 
115
115
  | Constant | Value | Meaning |
116
116
  |----------|-------|---------|
117
- | `DEFAULT_API_BASE_URL` | `https://platform.void-run.com/api` | Default API host when `VR_API_URL` / `API_URL` are unset. |
117
+ | `DEFAULT_API_BASE_URL` | `https://api.void-run.com/api` | Default API host when `VR_API_URL` / `API_URL` are unset. |
118
118
  | `DEFAULT_SANDBOX_IMAGE` | `"code"` | Default image id when creating a sandbox without `image=`. |
119
119
  | `DEFAULT_SANDBOX_CPU` | `1` | Default CPU count. |
120
120
  | `DEFAULT_SANDBOX_MEM` | `1024` | Default memory in MB. |
@@ -134,12 +134,17 @@ sandbox = vr.create_sandbox(
134
134
  mem=1024,
135
135
  cpu=1,
136
136
  labels={"env": "prod", "team": "api"},
137
+ publish_ports=[8080], # expose ports as public URLs (set at create time only)
137
138
  )
138
139
 
139
140
  result = sandbox.exec('echo "Hello from VoidRun"')
140
141
  # Exec returns VoidRunResponse whose .data is ExecResponseData
141
142
  print(result.data.stdout)
142
143
  print(sandbox.labels)
144
+ print(sandbox.publish_ports)
145
+
146
+ # Public URLs are only available for ports declared at creation
147
+ print(sandbox.get_public_urls())
143
148
 
144
149
  listed = vr.list_sandboxes(labels={"env": "prod"})
145
150
  print(listed.meta.total)
@@ -147,6 +152,11 @@ print(listed.meta.total)
147
152
  sandbox.remove()
148
153
  ```
149
154
 
155
+ `publish_ports` (alias `publishPorts`) must be set at creation to expose ports
156
+ as public HTTPS URLs. Pass up to **4** ports (each `1–65535`, no duplicates);
157
+ the created sandbox echoes them on `sandbox.publish_ports`. Ports not published
158
+ at creation are not reachable via `get_public_urls()`.
159
+
150
160
  ### Async
151
161
 
152
162
  ```python
@@ -202,7 +212,7 @@ Use the same mental model as `@voidrun/sdk` (or the internal TS client):
202
212
 
203
213
  **Recommended methods**
204
214
 
205
- - `create_sandbox(...)` → `Sandbox` (optional `labels=`)
215
+ - `create_sandbox(...)` → `Sandbox` (optional `labels=`, `publish_ports=`)
206
216
  - `get_sandbox(sandbox_id)` → `Sandbox`
207
217
  - `list_sandboxes(page=..., limit=..., labels=...)` → `ListSandboxesResult`
208
218
  - `remove_sandbox(sandbox_id)` → `None`
@@ -215,7 +225,7 @@ Create options accept both snake_case and camelCase where noted in code (e.g. `e
215
225
 
216
226
  ### `Sandbox`
217
227
 
218
- Notable attributes: `id`, `name`, `cpu`, `mem`, `org_id`, `status`, `env_vars`, `image`, `region`, `ref_id`, `auto_sleep`, `disk_mb`, `labels`, `created_at`, `created_by`.
228
+ Notable attributes: `id`, `name`, `cpu`, `mem`, `org_id`, `status`, `env_vars`, `image`, `region`, `ref_id`, `auto_sleep`, `disk_mb`, `labels`, `publish_ports`, `created_at`, `created_by`.
219
229
 
220
230
  Sub-clients:
221
231
 
@@ -90,7 +90,7 @@ Exported from `voidrun`:
90
90
 
91
91
  | Constant | Value | Meaning |
92
92
  |----------|-------|---------|
93
- | `DEFAULT_API_BASE_URL` | `https://platform.void-run.com/api` | Default API host when `VR_API_URL` / `API_URL` are unset. |
93
+ | `DEFAULT_API_BASE_URL` | `https://api.void-run.com/api` | Default API host when `VR_API_URL` / `API_URL` are unset. |
94
94
  | `DEFAULT_SANDBOX_IMAGE` | `"code"` | Default image id when creating a sandbox without `image=`. |
95
95
  | `DEFAULT_SANDBOX_CPU` | `1` | Default CPU count. |
96
96
  | `DEFAULT_SANDBOX_MEM` | `1024` | Default memory in MB. |
@@ -110,12 +110,17 @@ sandbox = vr.create_sandbox(
110
110
  mem=1024,
111
111
  cpu=1,
112
112
  labels={"env": "prod", "team": "api"},
113
+ publish_ports=[8080], # expose ports as public URLs (set at create time only)
113
114
  )
114
115
 
115
116
  result = sandbox.exec('echo "Hello from VoidRun"')
116
117
  # Exec returns VoidRunResponse whose .data is ExecResponseData
117
118
  print(result.data.stdout)
118
119
  print(sandbox.labels)
120
+ print(sandbox.publish_ports)
121
+
122
+ # Public URLs are only available for ports declared at creation
123
+ print(sandbox.get_public_urls())
119
124
 
120
125
  listed = vr.list_sandboxes(labels={"env": "prod"})
121
126
  print(listed.meta.total)
@@ -123,6 +128,11 @@ print(listed.meta.total)
123
128
  sandbox.remove()
124
129
  ```
125
130
 
131
+ `publish_ports` (alias `publishPorts`) must be set at creation to expose ports
132
+ as public HTTPS URLs. Pass up to **4** ports (each `1–65535`, no duplicates);
133
+ the created sandbox echoes them on `sandbox.publish_ports`. Ports not published
134
+ at creation are not reachable via `get_public_urls()`.
135
+
126
136
  ### Async
127
137
 
128
138
  ```python
@@ -178,7 +188,7 @@ Use the same mental model as `@voidrun/sdk` (or the internal TS client):
178
188
 
179
189
  **Recommended methods**
180
190
 
181
- - `create_sandbox(...)` → `Sandbox` (optional `labels=`)
191
+ - `create_sandbox(...)` → `Sandbox` (optional `labels=`, `publish_ports=`)
182
192
  - `get_sandbox(sandbox_id)` → `Sandbox`
183
193
  - `list_sandboxes(page=..., limit=..., labels=...)` → `ListSandboxesResult`
184
194
  - `remove_sandbox(sandbox_id)` → `None`
@@ -191,7 +201,7 @@ Create options accept both snake_case and camelCase where noted in code (e.g. `e
191
201
 
192
202
  ### `Sandbox`
193
203
 
194
- Notable attributes: `id`, `name`, `cpu`, `mem`, `org_id`, `status`, `env_vars`, `image`, `region`, `ref_id`, `auto_sleep`, `disk_mb`, `labels`, `created_at`, `created_by`.
204
+ Notable attributes: `id`, `name`, `cpu`, `mem`, `org_id`, `status`, `env_vars`, `image`, `region`, `ref_id`, `auto_sleep`, `disk_mb`, `labels`, `publish_ports`, `created_at`, `created_by`.
195
205
 
196
206
  Sub-clients:
197
207
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "voidrun"
7
- version = "0.2.0"
7
+ version = "0.2.2"
8
8
  description = "Python SDK for VoidRun AI Sandbox"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -238,7 +238,7 @@ conf = voidrun.api_client.Configuration(
238
238
  ) -> None:
239
239
  """Constructor
240
240
  """
241
- self._base_path = "https://platform.void-run.com/api" if host is None else host
241
+ self._base_path = "https://api.void-run.com/api" if host is None else host
242
242
  """Default Base url
243
243
  """
244
244
  self.server_index = 0 if server_index is None and host is None else server_index
@@ -581,7 +581,7 @@ conf = voidrun.api_client.Configuration(
581
581
  """
582
582
  return [
583
583
  {
584
- 'url': "https://platform.void-run.com/api",
584
+ 'url': "https://api.void-run.com/api",
585
585
  'description': "Production server",
586
586
  }
587
587
  ]
@@ -34,7 +34,7 @@ class Sandbox(BaseModel):
34
34
  image: Optional[StrictStr] = Field(default=None, description="Resolved image in `name:ver` format", json_schema_extra={"examples": ["code:1.0.42"]})
35
35
  cpu: Optional[StrictInt] = Field(default=None, description="Number of vCPUs allocated", json_schema_extra={"examples": [2]})
36
36
  mem: Optional[StrictInt] = Field(default=None, description="Memory in MiB", json_schema_extra={"examples": [2048]})
37
- disk_mb: Optional[StrictInt] = Field(default=None, description="Disk size in MiB", alias="diskMB", json_schema_extra={"examples": [5120]})
37
+ disk_mb: Optional[StrictInt] = Field(default=None, description="Disk size in MiB", alias="diskMB", json_schema_extra={"examples": [10240]})
38
38
  status: Optional[StrictStr] = Field(default=None, description="Lifecycle state. Terminal states `killed` and `deleted` may still appear in list responses for historical or cleanup rows.", json_schema_extra={"examples": ["running"]})
39
39
  created_at: Optional[datetime] = Field(default=None, alias="createdAt")
40
40
  created_by: Optional[StrictStr] = Field(default=None, description="User ID who created the sandbox", alias="createdBy", json_schema_extra={"examples": ["65ae1234567890abcdef1234"]})
@@ -62,6 +62,7 @@ def _build_create_sandbox_request(
62
62
  auto_sleep: Optional[bool],
63
63
  region: Optional[str],
64
64
  labels: Optional[Dict[str, str]] = None,
65
+ publish_ports: Optional[List[int]] = None,
65
66
  ) -> CreateSandboxRequest:
66
67
  default_name = f"sdbx-{int(time.time() * 1000)}"
67
68
  org_clean = (org_id or "").strip() or None
@@ -77,6 +78,7 @@ def _build_create_sandbox_request(
77
78
  auto_sleep=auto_sleep,
78
79
  region=region,
79
80
  labels=labels,
81
+ publish_ports=publish_ports,
80
82
  )
81
83
 
82
84
 
@@ -125,6 +127,8 @@ class VoidRun:
125
127
  autoSleep: Optional[bool] = None,
126
128
  region: Optional[str] = None,
127
129
  labels: Optional[Dict[str, str]] = None,
130
+ publish_ports: Optional[List[int]] = None,
131
+ publishPorts: Optional[List[int]] = None,
128
132
  _owner: Optional[Any] = None,
129
133
  ) -> Sandbox:
130
134
  """_owner: internal — AsyncVoidRun passes itself so Sandbox uses the async client."""
@@ -139,6 +143,7 @@ class VoidRun:
139
143
  ev = env_vars if env_vars is not None else envVars
140
144
  asl = auto_sleep if auto_sleep is not None else autoSleep
141
145
  uid = user_id if user_id is not None else userId
146
+ pp = publish_ports if publish_ports is not None else publishPorts
142
147
 
143
148
  req = _build_create_sandbox_request(
144
149
  name=name,
@@ -152,6 +157,7 @@ class VoidRun:
152
157
  auto_sleep=asl,
153
158
  region=region,
154
159
  labels=labels,
160
+ publish_ports=pp,
155
161
  )
156
162
  response = self._sandboxes_api.create_sandbox_with_http_info(
157
163
  create_sandbox_request=req,
@@ -244,6 +250,7 @@ class SandboxesFacade:
244
250
  auto_sleep=kwargs.get("auto_sleep") or kwargs.get("autoSleep"),
245
251
  region=kwargs.get("region"),
246
252
  labels=kwargs.get("labels"),
253
+ publish_ports=kwargs.get("publish_ports") or kwargs.get("publishPorts"),
247
254
  )
248
255
  response = self._api.create_sandbox_with_http_info(
249
256
  create_sandbox_request=req,
@@ -381,6 +388,7 @@ class AsyncSandboxesFacade:
381
388
  auto_sleep=kwargs.get("auto_sleep") or kwargs.get("autoSleep"),
382
389
  region=kwargs.get("region"),
383
390
  labels=kwargs.get("labels"),
391
+ publish_ports=kwargs.get("publish_ports") or kwargs.get("publishPorts"),
384
392
  )
385
393
  response = await self._client._run_async(
386
394
  self._api.create_sandbox_with_http_info,
@@ -10,7 +10,7 @@ DEFAULT_SANDBOX_CPU = 1
10
10
  DEFAULT_SANDBOX_MEM = 1024
11
11
 
12
12
  # Same default host as ts-sdk `BASE_PATH` (hosted VoidRun API).
13
- DEFAULT_API_BASE_URL = "https://platform.void-run.com/api"
13
+ DEFAULT_API_BASE_URL = "https://api.void-run.com/api"
14
14
 
15
15
 
16
16
  def default_api_key() -> Optional[str]:
@@ -50,6 +50,7 @@ class Sandbox:
50
50
  self.image = model.image
51
51
  self.disk_mb = model.disk_mb
52
52
  self.labels = model.labels
53
+ self.publish_ports = model.publish_ports
53
54
 
54
55
  self.fs = FS(self)
55
56
  self.pty = PTY(self)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes