Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/20260826120230-regenerate-sdk-from-openapi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@truefoundry/trueforge-sdk": patch
---

Regenerate SDK from updated OpenAPI spec.
8 changes: 8 additions & 0 deletions .changeset/strict-lilies-start.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@truefoundry/trueforge": minor
"@truefoundry/trueforge-core": minor
"@truefoundry/trueforge-ui": minor
---

Add OpenSandbox as a configurable sandbox provider.

251 changes: 176 additions & 75 deletions .github/fern/openapi/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -517,44 +517,85 @@
]
},
"CatalogSandboxProvider": {
"additionalProperties": false,
"properties": {
"auto_archive_interval_in_minutes": {
"description": "Minutes before Daytona auto-archives the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"auto_delete_interval_in_minutes": {
"description": "Minutes before Daytona auto-deletes the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"auto_stop_interval_in_minutes": {
"description": "Minutes of idle time before Daytona auto-stops the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"exec_timeout_ms": {
"description": "Default sandbox command exec timeout in milliseconds.",
"exclusiveMinimum": 0,
"type": "integer"
"oneOf": [
{
"additionalProperties": false,
"properties": {
"auto_archive_interval_in_minutes": {
"description": "Minutes before Daytona auto-archives the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"auto_delete_interval_in_minutes": {
"description": "Minutes before Daytona auto-deletes the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"auto_stop_interval_in_minutes": {
"description": "Minutes of idle time before Daytona auto-stops the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"exec_timeout_ms": {
"description": "Default sandbox command exec timeout in milliseconds.",
"exclusiveMinimum": 0,
"type": "integer"
},
"type": {
"description": "Daytona sandbox provider.",
"enum": [
"daytona"
],
"type": "string"
}
},
"required": [
"type",
"exec_timeout_ms",
"auto_stop_interval_in_minutes",
"auto_archive_interval_in_minutes",
"auto_delete_interval_in_minutes"
],
"type": "object"
},
"type": {
"description": "Daytona sandbox provider.",
"enum": [
"daytona"
{
"additionalProperties": false,
"properties": {
"domain": {
"description": "OpenSandbox API host, optionally including a port, without a URL scheme.",
"minLength": 1,
"type": "string"
},
"exec_timeout_ms": {
"description": "Default sandbox command exec timeout in milliseconds.",
"exclusiveMinimum": 0,
"type": "integer"
},
"protocol": {
"default": "https",
"description": "Protocol used to reach the OpenSandbox API.",
"enum": [
"http",
"https"
],
"type": "string"
},
"type": {
"description": "OpenSandbox sandbox provider.",
"enum": [
"opensandbox"
],
"type": "string"
}
},
"required": [
"type",
"domain",
"exec_timeout_ms"
],
"type": "string"
"type": "object"
}
},
"required": [
"type",
"exec_timeout_ms",
"auto_stop_interval_in_minutes",
"auto_archive_interval_in_minutes",
"auto_delete_interval_in_minutes"
],
"type": "object"
]
},
"CatalogSkill": {
"additionalProperties": false,
Expand Down Expand Up @@ -2404,6 +2445,21 @@
],
"type": "object"
},
"OpenSandboxProviderAuth": {
"additionalProperties": false,
"description": "OpenSandbox authentication credentials.",
"properties": {
"api_key": {
"description": "OpenSandbox API key. Responses are redacted; on PUT, a real value sets/rotates and a redacted value keeps the stored key.",
"minLength": 1,
"type": "string"
}
},
"required": [
"api_key"
],
"type": "object"
},
"PreviousTurnIdInput": {
"anyOf": [
{
Expand Down Expand Up @@ -2733,48 +2789,93 @@
"type": "object"
},
"SandboxProviderManifest": {
"additionalProperties": false,
"properties": {
"auth": {
"$ref": "#/components/schemas/DaytonaSandboxProviderAuth"
},
"auto_archive_interval_in_minutes": {
"description": "Minutes before Daytona auto-archives the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"auto_delete_interval_in_minutes": {
"description": "Minutes before Daytona auto-deletes the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"auto_stop_interval_in_minutes": {
"description": "Minutes of idle time before Daytona auto-stops the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"exec_timeout_ms": {
"description": "Default sandbox command exec timeout in milliseconds.",
"exclusiveMinimum": 0,
"type": "integer"
"oneOf": [
{
"additionalProperties": false,
"properties": {
"auth": {
"$ref": "#/components/schemas/DaytonaSandboxProviderAuth"
},
"auto_archive_interval_in_minutes": {
"description": "Minutes before Daytona auto-archives the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"auto_delete_interval_in_minutes": {
"description": "Minutes before Daytona auto-deletes the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"auto_stop_interval_in_minutes": {
"description": "Minutes of idle time before Daytona auto-stops the sandbox (0 disables).",
"minimum": 0,
"type": "integer"
},
"exec_timeout_ms": {
"description": "Default sandbox command exec timeout in milliseconds.",
"exclusiveMinimum": 0,
"type": "integer"
},
"type": {
"description": "Daytona sandbox provider.",
"enum": [
"daytona"
],
"type": "string"
}
},
"required": [
"type",
"auth",
"exec_timeout_ms",
"auto_stop_interval_in_minutes",
"auto_archive_interval_in_minutes",
"auto_delete_interval_in_minutes"
],
"type": "object"
},
"type": {
"description": "Daytona sandbox provider.",
"enum": [
"daytona"
{
"additionalProperties": false,
"properties": {
"auth": {
"$ref": "#/components/schemas/OpenSandboxProviderAuth"
},
"domain": {
"description": "OpenSandbox API host, optionally including a port, without a URL scheme.",
"minLength": 1,
"type": "string"
},
"exec_timeout_ms": {
"description": "Default sandbox command exec timeout in milliseconds.",
"exclusiveMinimum": 0,
"type": "integer"
},
"protocol": {
"default": "https",
"description": "Protocol used to reach the OpenSandbox API.",
"enum": [
"http",
"https"
],
"type": "string"
},
"type": {
"description": "OpenSandbox sandbox provider.",
"enum": [
"opensandbox"
],
"type": "string"
}
},
"required": [
"type",
"auth",
"domain",
"exec_timeout_ms"
],
"type": "string"
"type": "object"
}
},
"required": [
"type",
"auth",
"exec_timeout_ms",
"auto_stop_interval_in_minutes",
"auto_archive_interval_in_minutes",
"auto_delete_interval_in_minutes"
],
"type": "object"
]
},
"Session": {
"properties": {
Expand Down Expand Up @@ -6739,7 +6840,7 @@
}
}
},
"description": "Daytona rejected the provided API key."
"description": "The sandbox provider rejected the provided API key."
}
},
"summary": "Create or replace the sandbox provider",
Expand Down
2 changes: 2 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ services:
NODE_ENV: production
# Inside the container; host mapping above is 8791.
PORT: 8790
# Bind to all interfaces so healthcheck probe can reach the server.
HOST: 0.0.0.0
# Host-facing origin for MCP OAuth callbacks (mapped port, not container PORT).
PUBLIC_BASE_URL: http://localhost:8791
# Compose network hosts — do not use packages/trueforge/.env localhost values.
Expand Down
Loading