From 4fa73392dbba3d030db89f50cc785b1e766a96f4 Mon Sep 17 00:00:00 2001 From: Ilyas Salikhov Date: Wed, 9 Sep 2026 21:52:03 +0300 Subject: [PATCH] chore(release): prepare v0.1.5 --- packages/cli/package.json | 2 +- packages/code-interpreter-js/package.json | 2 +- packages/code-interpreter-python/package.json | 2 +- .../code-interpreter-python/pyproject.toml | 2 +- packages/code-interpreter-python/uv.lock | 4 +- packages/go-sdk/README.md | 4 +- .../go-sdk/internal/gen/api/client.gen.go | 11 ++ packages/go-sdk/version.go | 2 +- packages/js-sdk/package.json | 2 +- packages/js-sdk/src/api/schema.gen.ts | 28 ++- .../client/api/sandboxes/post_sandboxes.py | 4 + .../agentbox/api/client/models/__init__.py | 2 + .../agentbox/api/client/models/node.py | 28 ++- .../agentbox/api/client/models/node_detail.py | 28 ++- .../agentbox/api/client/models/node_role.py | 9 + packages/python-sdk/package.json | 2 +- packages/python-sdk/pyproject.toml | 2 +- packages/python-sdk/uv.lock | 2 +- reference/manifest.json | 20 +- reference/openapi/control-plane.yml | 8 + reference/openapi/markdown/createSandbox.md | 18 ++ reference/sdk/go/core.md | 2 +- scripts/public_openapi.py | 6 +- spec/openapi.yml | 181 +++++++++++------- spec/source.json | 4 +- 25 files changed, 271 insertions(+), 104 deletions(-) create mode 100644 packages/python-sdk/agentbox/api/client/models/node_role.py diff --git a/packages/cli/package.json b/packages/cli/package.json index b8a65708..790305e4 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@abox-dev/cli", - "version": "0.1.4", + "version": "0.1.5", "description": "CLI for AgentBox sandboxes and templates", "homepage": "https://docs.agentbox.ru/en/cli/", "license": "MIT", diff --git a/packages/code-interpreter-js/package.json b/packages/code-interpreter-js/package.json index 1dfa7308..ffa3f29b 100644 --- a/packages/code-interpreter-js/package.json +++ b/packages/code-interpreter-js/package.json @@ -1,6 +1,6 @@ { "name": "@abox-dev/code-interpreter", - "version": "0.1.4", + "version": "0.1.5", "packageManager": "pnpm@10.34.5", "description": "AgentBox Code Interpreter - Stateful code execution", "homepage": "https://docs.agentbox.ru/en/sdk/code-interpreter/", diff --git a/packages/code-interpreter-python/package.json b/packages/code-interpreter-python/package.json index 86e190e0..a9f2b717 100644 --- a/packages/code-interpreter-python/package.json +++ b/packages/code-interpreter-python/package.json @@ -1,7 +1,7 @@ { "name": "@abox-dev/code-interpreter-python", "private": true, - "version": "0.1.4", + "version": "0.1.5", "scripts": { "test": "uv run pytest -n 2 --verbose -x tests/test_sandbox_url.py", "test:integration": "uv run pytest -n 2 --verbose -x", diff --git a/packages/code-interpreter-python/pyproject.toml b/packages/code-interpreter-python/pyproject.toml index 52ae57a5..f27ca9f7 100644 --- a/packages/code-interpreter-python/pyproject.toml +++ b/packages/code-interpreter-python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "abox-code-interpreter" -version = "0.1.4" +version = "0.1.5" description = "AgentBox Code Interpreter - Stateful code execution" authors = [{ name = "RetailDriver LLC" }] license = "MIT" diff --git a/packages/code-interpreter-python/uv.lock b/packages/code-interpreter-python/uv.lock index 158f9462..f3501d7c 100644 --- a/packages/code-interpreter-python/uv.lock +++ b/packages/code-interpreter-python/uv.lock @@ -16,7 +16,7 @@ members = [ [[package]] name = "abox-code-interpreter" -version = "0.1.4" +version = "0.1.5" source = { editable = "." } dependencies = [ { name = "abox-sdk" }, @@ -58,7 +58,7 @@ dev = [ [[package]] name = "abox-sdk" -version = "0.1.4" +version = "0.1.5" source = { editable = "../python-sdk" } dependencies = [ { name = "attrs" }, diff --git a/packages/go-sdk/README.md b/packages/go-sdk/README.md index 8c777361..2b9a648b 100644 --- a/packages/go-sdk/README.md +++ b/packages/go-sdk/README.md @@ -44,8 +44,8 @@ func main() { Code Interpreter is available from `github.com/abox-dev/sdk/packages/go-sdk/codeinterpreter`. -API reference for this release: [core SDK on pkg.go.dev](https://pkg.go.dev/github.com/abox-dev/sdk/packages/go-sdk@v0.1.4) and -[Code Interpreter on pkg.go.dev](https://pkg.go.dev/github.com/abox-dev/sdk/packages/go-sdk/codeinterpreter@v0.1.4). +API reference for this release: [core SDK on pkg.go.dev](https://pkg.go.dev/github.com/abox-dev/sdk/packages/go-sdk@v0.1.5) and +[Code Interpreter on pkg.go.dev](https://pkg.go.dev/github.com/abox-dev/sdk/packages/go-sdk/codeinterpreter@v0.1.5). Documentation: [core SDK](https://docs.agentbox.ru/en/sdk/), [sandboxes](https://docs.agentbox.ru/en/sdk/sandboxes/), diff --git a/packages/go-sdk/internal/gen/api/client.gen.go b/packages/go-sdk/internal/gen/api/client.gen.go index 236b3fab..3dfd74fa 100644 --- a/packages/go-sdk/internal/gen/api/client.gen.go +++ b/packages/go-sdk/internal/gen/api/client.gen.go @@ -949,6 +949,9 @@ type N409 = Error // N500 defines model for 500. type N500 = Error +// N503 defines model for 503. +type N503 = Error + // GetSandboxesMetricsParams defines parameters for GetSandboxesMetrics. type GetSandboxesMetricsParams struct { // SandboxIds Comma-separated list of sandbox IDs to get metrics for @@ -3654,6 +3657,7 @@ type PostSandboxesResponse struct { JSON400 *N400 JSON401 *N401 JSON500 *N500 + JSON503 *N503 } // Status returns HTTPResponse.Status @@ -4970,6 +4974,13 @@ func ParsePostSandboxesResponse(rsp *http.Response) (*PostSandboxesResponse, err } response.JSON500 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 503: + var dest N503 + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON503 = &dest + } return response, nil diff --git a/packages/go-sdk/version.go b/packages/go-sdk/version.go index 77627826..c5983de5 100644 --- a/packages/go-sdk/version.go +++ b/packages/go-sdk/version.go @@ -1,4 +1,4 @@ package agentbox // Version is the AgentBox SDK release version. -const Version = "0.1.4" +const Version = "0.1.5" diff --git a/packages/js-sdk/package.json b/packages/js-sdk/package.json index 80beef65..b3f5fd45 100644 --- a/packages/js-sdk/package.json +++ b/packages/js-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@abox-dev/sdk", - "version": "0.1.4", + "version": "0.1.5", "description": "AgentBox SDK for secure cloud sandboxes", "homepage": "https://docs.agentbox.ru/en/sdk/", "license": "MIT", diff --git a/packages/js-sdk/src/api/schema.gen.ts b/packages/js-sdk/src/api/schema.gen.ts index 9921ef6e..f56f42fa 100644 --- a/packages/js-sdk/src/api/schema.gen.ts +++ b/packages/js-sdk/src/api/schema.gen.ts @@ -42,6 +42,7 @@ export interface paths { 400: components["responses"]["400"]; 401: components["responses"]["401"]; 500: components["responses"]["500"]; + 503: components["responses"]["503"]; }; }; delete?: never; @@ -1797,10 +1798,16 @@ export interface components { /** @description Identifier of the node */ id: string; machineInfo: components["schemas"]["MachineInfo"]; + /** + * Format: uint32 + * @description Runtime maintenance contract version reported by ServiceInfo + */ + maintenanceVersion: number; metrics: components["schemas"]["NodeMetrics"]; + roles: components["schemas"]["NodeRole"][]; /** * Format: uint32 - * @description Number of sandboxes running on the node + * @description Number of sandboxes running on the node; for template builders this is not an outstanding build count. */ sandboxCount: number; /** @@ -1837,10 +1844,16 @@ export interface components { /** @description Identifier of the node */ id: string; machineInfo: components["schemas"]["MachineInfo"]; + /** + * Format: uint32 + * @description Runtime maintenance contract version reported by ServiceInfo + */ + maintenanceVersion: number; metrics: components["schemas"]["NodeMetrics"]; + roles: components["schemas"]["NodeRole"][]; /** * Format: uint32 - * @description Number of sandboxes running on the node + * @description Number of sandboxes running on the node; for template builders this is not an outstanding build count. */ sandboxCount: number; /** @description Service instance identifier of the node */ @@ -1909,6 +1922,8 @@ export interface components { */ memoryUsedBytes: number; }; + /** @enum {string} */ + NodeRole: "worker" | "template-builder"; /** * @description Status of the node. * - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. @@ -2566,6 +2581,15 @@ export interface components { "application/json": components["schemas"]["Error"]; }; }; + /** @description Service temporarily unavailable */ + 503: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Error"]; + }; + }; }; parameters: { accessTokenID: string; diff --git a/packages/python-sdk/agentbox/api/client/api/sandboxes/post_sandboxes.py b/packages/python-sdk/agentbox/api/client/api/sandboxes/post_sandboxes.py index 856042fc..6cc1e08b 100644 --- a/packages/python-sdk/agentbox/api/client/api/sandboxes/post_sandboxes.py +++ b/packages/python-sdk/agentbox/api/client/api/sandboxes/post_sandboxes.py @@ -49,6 +49,10 @@ def _parse_response( response_500 = Error.from_dict(response.json()) return response_500 + if response.status_code == 503: + response_503 = Error.from_dict(response.json()) + + return response_503 if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: diff --git a/packages/python-sdk/agentbox/api/client/models/__init__.py b/packages/python-sdk/agentbox/api/client/models/__init__.py index 22640c74..c0a9088a 100644 --- a/packages/python-sdk/agentbox/api/client/models/__init__.py +++ b/packages/python-sdk/agentbox/api/client/models/__init__.py @@ -29,6 +29,7 @@ from .node import Node from .node_detail import NodeDetail from .node_metrics import NodeMetrics +from .node_role import NodeRole from .node_status import NodeStatus from .node_status_change import NodeStatusChange from .resumed_sandbox import ResumedSandbox @@ -115,6 +116,7 @@ "Node", "NodeDetail", "NodeMetrics", + "NodeRole", "NodeStatus", "NodeStatusChange", "ResumedSandbox", diff --git a/packages/python-sdk/agentbox/api/client/models/node.py b/packages/python-sdk/agentbox/api/client/models/node.py index dfae913b..16ab4779 100644 --- a/packages/python-sdk/agentbox/api/client/models/node.py +++ b/packages/python-sdk/agentbox/api/client/models/node.py @@ -6,6 +6,7 @@ from attrs import field as _attrs_field from dateutil.parser import isoparse +from ..models.node_role import NodeRole from ..models.node_status import NodeStatus if TYPE_CHECKING: @@ -20,6 +21,8 @@ class Node: """ Attributes: + roles (list[NodeRole]): + maintenance_version (int): Runtime maintenance contract version reported by ServiceInfo version (str): Version of the orchestrator commit (str): Commit of the orchestrator id (str): Identifier of the node @@ -31,13 +34,16 @@ class Node: sandboxes are done. - standby: the node is not actively used, but it can return to ready and continue serving traffic. status_changed_at (datetime.datetime): Time when the node status was last changed - sandbox_count (int): Number of sandboxes running on the node + sandbox_count (int): Number of sandboxes running on the node; for template builders this is not an outstanding + build count. metrics (NodeMetrics): Node metrics create_successes (int): Number of sandbox create successes create_fails (int): Number of sandbox create fails sandbox_starting_count (int): Number of starting Sandboxes """ + roles: list[NodeRole] + maintenance_version: int version: str commit: str id: str @@ -54,6 +60,13 @@ class Node: additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: + roles = [] + for roles_item_data in self.roles: + roles_item = roles_item_data.value + roles.append(roles_item) + + maintenance_version = self.maintenance_version + version = self.version commit = self.commit @@ -84,6 +97,8 @@ def to_dict(self) -> dict[str, Any]: field_dict.update(self.additional_properties) field_dict.update( { + "roles": roles, + "maintenanceVersion": maintenance_version, "version": version, "commit": commit, "id": id, @@ -108,6 +123,15 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.node_metrics import NodeMetrics d = dict(src_dict) + roles = [] + _roles = d.pop("roles") + for roles_item_data in _roles: + roles_item = NodeRole(roles_item_data) + + roles.append(roles_item) + + maintenance_version = d.pop("maintenanceVersion") + version = d.pop("version") commit = d.pop("commit") @@ -135,6 +159,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: sandbox_starting_count = d.pop("sandboxStartingCount") node = cls( + roles=roles, + maintenance_version=maintenance_version, version=version, commit=commit, id=id, diff --git a/packages/python-sdk/agentbox/api/client/models/node_detail.py b/packages/python-sdk/agentbox/api/client/models/node_detail.py index b5b5c014..3c2ef48f 100644 --- a/packages/python-sdk/agentbox/api/client/models/node_detail.py +++ b/packages/python-sdk/agentbox/api/client/models/node_detail.py @@ -6,6 +6,7 @@ from attrs import field as _attrs_field from dateutil.parser import isoparse +from ..models.node_role import NodeRole from ..models.node_status import NodeStatus if TYPE_CHECKING: @@ -20,6 +21,8 @@ class NodeDetail: """ Attributes: + roles (list[NodeRole]): + maintenance_version (int): Runtime maintenance contract version reported by ServiceInfo cluster_id (str): Identifier of the cluster version (str): Version of the orchestrator commit (str): Commit of the orchestrator @@ -31,12 +34,15 @@ class NodeDetail: sandboxes are done. - standby: the node is not actively used, but it can return to ready and continue serving traffic. status_changed_at (datetime.datetime): Time when the node status was last changed - sandbox_count (int): Number of sandboxes running on the node + sandbox_count (int): Number of sandboxes running on the node; for template builders this is not an outstanding + build count. metrics (NodeMetrics): Node metrics create_successes (int): Number of sandbox create successes create_fails (int): Number of sandbox create fails """ + roles: list[NodeRole] + maintenance_version: int cluster_id: str version: str commit: str @@ -52,6 +58,13 @@ class NodeDetail: additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: + roles = [] + for roles_item_data in self.roles: + roles_item = roles_item_data.value + roles.append(roles_item) + + maintenance_version = self.maintenance_version + cluster_id = self.cluster_id version = self.version @@ -80,6 +93,8 @@ def to_dict(self) -> dict[str, Any]: field_dict.update(self.additional_properties) field_dict.update( { + "roles": roles, + "maintenanceVersion": maintenance_version, "clusterID": cluster_id, "version": version, "commit": commit, @@ -103,6 +118,15 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.node_metrics import NodeMetrics d = dict(src_dict) + roles = [] + _roles = d.pop("roles") + for roles_item_data in _roles: + roles_item = NodeRole(roles_item_data) + + roles.append(roles_item) + + maintenance_version = d.pop("maintenanceVersion") + cluster_id = d.pop("clusterID") version = d.pop("version") @@ -128,6 +152,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: create_fails = d.pop("createFails") node_detail = cls( + roles=roles, + maintenance_version=maintenance_version, cluster_id=cluster_id, version=version, commit=commit, diff --git a/packages/python-sdk/agentbox/api/client/models/node_role.py b/packages/python-sdk/agentbox/api/client/models/node_role.py new file mode 100644 index 00000000..80a30c74 --- /dev/null +++ b/packages/python-sdk/agentbox/api/client/models/node_role.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class NodeRole(str, Enum): + TEMPLATE_BUILDER = "template-builder" + WORKER = "worker" + + def __str__(self) -> str: + return str(self.value) diff --git a/packages/python-sdk/package.json b/packages/python-sdk/package.json index 811e3b7a..0ca08e10 100644 --- a/packages/python-sdk/package.json +++ b/packages/python-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@abox-dev/python-sdk", "private": true, - "version": "0.1.4", + "version": "0.1.5", "scripts": { "test": "uv run pytest -n 4 --verbose -x tests/test_*.py tests/shared", "test:integration": "uv run pytest -n 4 --verbose -x tests/sync tests/async", diff --git a/packages/python-sdk/pyproject.toml b/packages/python-sdk/pyproject.toml index 3cb453c9..02ea6825 100644 --- a/packages/python-sdk/pyproject.toml +++ b/packages/python-sdk/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "abox-sdk" -version = "0.1.4" +version = "0.1.5" description = "AgentBox SDK for secure cloud sandboxes" authors = [{ name = "RetailDriver LLC" }] license = "MIT" diff --git a/packages/python-sdk/uv.lock b/packages/python-sdk/uv.lock index 6d1646f2..3d49ed27 100644 --- a/packages/python-sdk/uv.lock +++ b/packages/python-sdk/uv.lock @@ -8,7 +8,7 @@ resolution-markers = [ [[package]] name = "abox-sdk" -version = "0.1.4" +version = "0.1.5" source = { editable = "." } dependencies = [ { name = "attrs" }, diff --git a/reference/manifest.json b/reference/manifest.json index 88308a90..f3672bda 100644 --- a/reference/manifest.json +++ b/reference/manifest.json @@ -2,12 +2,12 @@ "files": { "connect/filesystem.md": "82a407c0ed5bd7cc707821ab73a943b6640a9e3793b354e9fc2a842bc799347e", "connect/process.md": "7e0348bb046382f6c624659b5d8d1281c03df898c411f9502e8caea12f40b3f9", - "openapi/control-plane.yml": "189a83a1177f0a64ad06a39cd0e6e4496bbcc2adec96fa4b083f325db2d75b52", + "openapi/control-plane.yml": "5c5c01d2be6377a5fcdc21c063d916978b7abd3a0c6edcf0d0a63d2a2d2908af", "openapi/envd.yml": "334700432025fcdfd9f95f9e58d90e6290b835015a24f269548eba5500c0df4f", "openapi/markdown/assignTemplateTags.md": "d537a5123d8d2f6a6e5bc533db96d530e372b8aa4a6dbad3808904ca59e232fb", "openapi/markdown/composeFiles.md": "208ca29c5143720389bc82db267aa8aaa2e8e7780e8a6cd5c9e11717bb44c84a", "openapi/markdown/connectSandbox.md": "f6fdd47bbc40c52b32e6f6513ff0919c0cd76e557d2e58131d0e5d309b28421d", - "openapi/markdown/createSandbox.md": "5be57e2d56b48acade8416da552c7979edd8a01d71353ce03e4b6ffa716592a7", + "openapi/markdown/createSandbox.md": "3114c781a36a12a5f04ea0030dffaea9e29624d8b4273bb299f43c46ac2ea3f0", "openapi/markdown/createSnapshot.md": "1af5dcb96e3217dfc98a54eb43cc721cdd58f875f88bd77cde0b4fe34df0cb0d", "openapi/markdown/createTemplate.md": "1a8b379df9e0e03c7b1c1fe0308d693dc09e589c3d474ee521d71fe556a96db2", "openapi/markdown/deleteTemplate.md": "c0dff20f19cb6d8958f8ee859154f9a2508bb0da6c6a4f8bdb517fd275974e83", @@ -45,7 +45,7 @@ "sdk/cli/sandbox.md": "16b64c5a4e932eca2452e400e0faf154eba1d3c7373513aa7cd9744e02908313", "sdk/cli/template.md": "f270b22b9ee10a9b954a14f24e04c5449b4d5823bb28002ffde3ed682594cfc5", "sdk/go/code-interpreter.md": "9c56333b8181878d656baa27a4b56b768a0cb01c9d764f7ac8d52d32d8faa70c", - "sdk/go/core.md": "41d700b3837e9aa7932779ba44186aaf0c54a6927ebaafa7945b0037b76db49e", + "sdk/go/core.md": "bfef1b73c0df94691e918838117ef2892baed56ffb2d1f12171898133265f09a", "sdk/javascript/code-interpreter/README.md": "a787206eb86f81fc306b373ce20bc6c91464b0ab3c3ec7650eccbb6be5f676c5", "sdk/javascript/code-interpreter/classes/Sandbox.md": "19d9f1f1e8847606a54d93c5a6e5d4c89f936a745866e8d6a2aa06758b605e60", "sdk/javascript/code-interpreter/enumerations/ChartType.md": "cf1ba00cd3258cc88814b7215e101b0d775ceb15dd833636d58ae538d8107ec1", @@ -182,14 +182,14 @@ "sdk/python/templates-async.md": "f5485b2595b9ccd9be8eda2990ed3341cddb39c5bcb0f9bdbcf9efc82dc8f3b3", "sdk/python/templates-sync.md": "e1c5ce24c0e608ec0a3b248f0c19e90e521ec19a6e12626ecc23244afde3a249" }, - "monoRevision": "559cf23aa80d22eeb1bd2769d4ab6646b8e40fcb", + "monoRevision": "a7d59d50e3dd84faee59aca08df1b5bb175266e6", "packages": { - "@abox-dev/cli": "0.1.4", - "@abox-dev/code-interpreter": "0.1.4", - "@abox-dev/sdk": "0.1.4", - "abox-code-interpreter": "0.1.4", - "abox-sdk": "0.1.4", - "github.com/abox-dev/sdk/packages/go-sdk": "0.1.4" + "@abox-dev/cli": "0.1.5", + "@abox-dev/code-interpreter": "0.1.5", + "@abox-dev/sdk": "0.1.5", + "abox-code-interpreter": "0.1.5", + "abox-sdk": "0.1.5", + "github.com/abox-dev/sdk/packages/go-sdk": "0.1.5" }, "schemaVersion": 1 } diff --git a/reference/openapi/control-plane.yml b/reference/openapi/control-plane.yml index 5208ac1d..fff382df 100644 --- a/reference/openapi/control-plane.yml +++ b/reference/openapi/control-plane.yml @@ -98,6 +98,12 @@ components: application/json: schema: $ref: '#/components/schemas/Error' + '503': + description: Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/Error' schemas: TeamUser: required: @@ -1310,6 +1316,8 @@ paths: $ref: '#/components/responses/400' '500': $ref: '#/components/responses/500' + '503': + $ref: '#/components/responses/503' operationId: createSandbox security: - ApiKeyAuth: [] diff --git a/reference/openapi/markdown/createSandbox.md b/reference/openapi/markdown/createSandbox.md index c72d3540..e450c6f2 100644 --- a/reference/openapi/markdown/createSandbox.md +++ b/reference/openapi/markdown/createSandbox.md @@ -205,3 +205,21 @@ Schema: `Error` - **`message`** · `string` · required Error + +### 503 + +Service temporarily unavailable + +Content-Type: `application/json` + +Schema: `Error` + +- **`code`** · `integer` · required + + Error code + + Format: `int32` + +- **`message`** · `string` · required + + Error diff --git a/reference/sdk/go/core.md b/reference/sdk/go/core.md index f991541b..fe0fef2e 100644 --- a/reference/sdk/go/core.md +++ b/reference/sdk/go/core.md @@ -261,7 +261,7 @@ Create a client, start a sandbox, and run a command: Version is the AgentBox SDK release version. - const Version = "0.1.4" + const Version = "0.1.5" ## func IAMTokenPlaceholder diff --git a/scripts/public_openapi.py b/scripts/public_openapi.py index 872a65cb..38a39c5d 100644 --- a/scripts/public_openapi.py +++ b/scripts/public_openapi.py @@ -5,9 +5,9 @@ from typing import Any REMOVED_SCHEMAS = { - "CreatedAccessToken", + "CatalogEntry", + "Mcp", "NewVolume", - "NewAccessToken", "SandboxVolumeMount", "TemplateLegacy", "Volume", @@ -15,7 +15,7 @@ "VolumeToken", } -CLIENT_REMOVED_PROPERTIES = {"volumeMounts"} +CLIENT_REMOVED_PROPERTIES = {"mcp", "volumeMounts"} REFERENCE_REMOVED_PROPERTIES = CLIENT_REMOVED_PROPERTIES | { "envdAccessToken", "trafficAccessToken", diff --git a/spec/openapi.yml b/spec/openapi.yml index dcac46c6..4eab0a14 100644 --- a/spec/openapi.yml +++ b/spec/openapi.yml @@ -189,6 +189,13 @@ components: schema: $ref: "#/components/schemas/Error" + "503": + description: Service temporarily unavailable + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + schemas: Team: required: @@ -296,6 +303,12 @@ components: type: string description: Environment variables for the sandbox + Mcp: + type: object + description: MCP configuration for the sandbox + additionalProperties: {} + nullable: true + SandboxNetworkConfig: type: object properties: @@ -785,6 +798,8 @@ components: $ref: "#/components/schemas/SandboxMetadata" envVars: $ref: "#/components/schemas/EnvVars" + mcp: + $ref: "#/components/schemas/Mcp" iam: $ref: "#/components/schemas/SandboxIam" volumeMounts: @@ -1318,6 +1333,17 @@ components: type: boolean description: Whether the step should be forced to run regardless of the cache + CatalogEntry: + type: object + required: [alias, description] + properties: + alias: + type: string + description: Bare global catalog name owned by the configured project. + description: + type: string + maxLength: 4096 + TemplateBuildRequestV3: properties: name: @@ -1725,8 +1751,15 @@ components: type: string description: CPU architecture of the node + NodeRole: + type: string + enum: [worker, template-builder] + x-enum-varnames: [NodeRoleWorker, NodeRoleTemplateBuilder] + Node: required: + - roles + - maintenanceVersion - id - serviceInstanceID - clusterID @@ -1741,6 +1774,14 @@ components: - commit - machineInfo properties: + roles: + type: array + items: + $ref: "#/components/schemas/NodeRole" + maintenanceVersion: + type: integer + format: uint32 + description: Runtime maintenance contract version reported by ServiceInfo version: type: string description: Version of the orchestrator @@ -1767,7 +1808,7 @@ components: sandboxCount: type: integer format: uint32 - description: Number of sandboxes running on the node + description: Number of sandboxes running on the node; for template builders this is not an outstanding build count. metrics: $ref: "#/components/schemas/NodeMetrics" createSuccesses: @@ -1785,6 +1826,8 @@ components: NodeDetail: required: + - roles + - maintenanceVersion - id - serviceInstanceID - clusterID @@ -1798,6 +1841,14 @@ components: - metrics - machineInfo properties: + roles: + type: array + items: + $ref: "#/components/schemas/NodeRole" + maintenanceVersion: + type: integer + format: uint32 + description: Runtime maintenance contract version reported by ServiceInfo clusterID: type: string description: Identifier of the cluster @@ -1824,7 +1875,7 @@ components: sandboxCount: type: integer format: uint32 - description: Number of sandboxes running on the node + description: Number of sandboxes running on the node; for template builders this is not an outstanding build count. metrics: $ref: "#/components/schemas/NodeMetrics" createSuccesses: @@ -1836,39 +1887,6 @@ components: format: uint64 description: Number of sandbox create fails - CreatedAccessToken: - required: - - id - - name - - token - - mask - - createdAt - properties: - id: - type: string - format: uuid - description: Identifier of the access token - name: - type: string - description: Name of the access token - token: - type: string - description: The fully created access token - mask: - $ref: "#/components/schemas/IdentifierMaskingDetails" - createdAt: - type: string - format: date-time - description: Timestamp of access token creation - - NewAccessToken: - required: - - name - properties: - name: - type: string - description: Name of the access token - TeamAPIKey: required: - id @@ -2103,12 +2121,20 @@ paths: /health: get: summary: Health check - description: Health check + description: API readiness, independent of runtime worker availability responses: - "204": - description: The service is healthy - "401": - $ref: "#/components/responses/401" + "200": + description: The API is initialized and ready to accept requests + content: + text/plain: + schema: + type: string + "503": + description: The API is not ready or is draining + content: + text/plain: + schema: + type: string /teams: get: @@ -2290,6 +2316,8 @@ paths: $ref: "#/components/responses/400" "500": $ref: "#/components/responses/500" + "503": + $ref: "#/components/responses/503" /v2/sandboxes: get: @@ -3537,10 +3565,43 @@ paths: "500": $ref: "#/components/responses/500" + /admin/templates/{templateID}/catalog: + post: + summary: Expose a template in the global catalog + description: Sets public visibility, global alias and storefront description. Requires a ready default; does not assign tags. Disabled without TEMPLATE_CATALOG_TEAM_ID and TEMPLATE_CATALOG_ALIASES. + tags: [admin] + security: + - AdminApiKeyAuth: [] + parameters: + - $ref: "#/components/parameters/templateID" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CatalogEntry" + responses: + "204": + description: Catalog entry configured + "400": + $ref: "#/components/responses/400" + "401": + $ref: "#/components/responses/401" + "403": + $ref: "#/components/responses/403" + "404": + $ref: "#/components/responses/404" + "409": + $ref: "#/components/responses/409" + "503": + $ref: "#/components/responses/503" + "500": + $ref: "#/components/responses/500" + /nodes: get: summary: List nodes - description: List all nodes + description: List workers and template builders, including draining and unhealthy runtimes. Records are unique by clusterID and id. tags: [admin] security: - AdminApiKeyAuth: [] @@ -3569,7 +3630,7 @@ paths: /nodes/{nodeID}: get: summary: Node info - description: Get node info + description: Read current ServiceInfo from a known worker or template builder. An unreachable runtime returns 503. tags: [admin] security: - AdminApiKeyAuth: [] @@ -3583,6 +3644,8 @@ paths: type: string format: uuid responses: + "503": + $ref: "#/components/responses/503" "200": description: Successfully returned the node content: @@ -3597,7 +3660,7 @@ paths: $ref: "#/components/responses/500" post: summary: Change node status - description: Change status of a node + description: Change worker or template builder status; acknowledged only after the runtime persists the maintenance decision. tags: [admin] security: - AdminApiKeyAuth: [] @@ -3609,6 +3672,10 @@ paths: schema: $ref: "#/components/schemas/NodeStatusChange" responses: + "503": + $ref: "#/components/responses/503" + "400": + $ref: "#/components/responses/400" "204": description: The node status was changed successfully "409": @@ -3745,34 +3812,6 @@ paths: "500": $ref: "#/components/responses/500" - /access-tokens: - post: - summary: Create access token - description: Create a new access token. Deprecated; use an AgentBox project API key instead. - deprecated: true - tags: [access-tokens] - security: - - AuthProviderBearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/NewAccessToken" - responses: - "201": - description: Access token created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/CreatedAccessToken" - "401": - $ref: "#/components/responses/401" - "410": - $ref: "#/components/responses/410" - "500": - $ref: "#/components/responses/500" - /access-tokens/{accessTokenID}: delete: summary: Delete access token diff --git a/spec/source.json b/spec/source.json index 4c1505b9..7225745a 100644 --- a/spec/source.json +++ b/spec/source.json @@ -1,8 +1,8 @@ { "source": "agentbox/mono", - "revision": "559cf23aa80d22eeb1bd2769d4ab6646b8e40fcb", + "revision": "a7d59d50e3dd84faee59aca08df1b5bb175266e6", "files": { - "spec/openapi.yml": "9e4e6cbbb135d9319da25fcfe82ed90081f146630bed5e543d016d6d5dcf4ba8", + "spec/openapi.yml": "a68d01da364290267f3b50b99c23e01c8a921900828a794a66b5189b988eff7f", "spec/envd/envd.yaml": "dab04a541720b813e837eb803074a8ae7e5611411b79a619bddf676e7e5fb324", "spec/envd/filesystem/filesystem.proto": "1d862617d00478673b68953ee9849e9a500b3307796d76e3f0567c95da69f77b", "spec/envd/process/process.proto": "8edd9358c7dbfcad96796b3f0ed8d14c262b8b14d6bc7d5e84d468941511b8e0"