限制與配額
以下是前端 API 實際會碰到的限制(取自 src/components/sandbox/constants.py、storage.py 與 schema)。Context 上傳的 staging 配額對 company manager 是租戶面。
分頁
| 項目 | 值 |
|---|---|
page_size | ge=1,le=100(MAX_PAGE_SIZE),預設 20 或 50(依端點) |
page_token | 不透明字串,max_length=512 |
輸入與腳本大小
| 項目 | 值 |
|---|---|
| 執行輸入 JSON | ≤ 1 MiB、深度 ≤ 64、節點 ≤ 100,000、無 NUL、無重複 key |
| startup / work 腳本 | 各 ≤ 1 MiB(MAX_SCRIPT_UTF8_BYTES) |
| 環境變數 | ≤ 100 個名稱、每項 ≤ 64 KiB |
| 提交 body(Content-Length) | 過大先回 413 request_too_large |
逾時
| 項目 | 值 |
|---|---|
| 預設 work 逾時 | 1800 秒(DEFAULT_WORK_TIMEOUT_SECONDS) |
| 最大 work 逾時 | ≈ 7 天(168 小時 − finalization envelope) |
timeout_seconds 欄位 | ge=1,le=604680(MAX_CUSTOMER_WORK_TIMEOUT_SECONDS)。公司 timeout_ceiling_seconds(預設 86400)只在發布任務版本時檢查——任務版本發布與 quick-run(會發布隱藏的 v1)超過即 422 timeout_exceeds_ceiling;POST .../runs 與 Agent submit 上的 timeout_seconds 覆寫不會再對公司天花板檢查。 |
| 提案 TTL | 1800s(PROPOSAL_TTL_SECONDS) |
| Turn-receipt TTL | 600s(TURN_RECEIPT_TTL_SECONDS) |
Agent wait_seconds | 0..60(MAX_STATUS_WAIT_SECONDS) |
| 下載 capability | 5 分鐘(_DOWNLOAD_CAPABILITY_TTL) |
| Context 上傳 capability | 15 分鐘(DEFAULT_CAPABILITY_TTL_SECONDS) |
| Run 的 runner 憑證(manifest、進度與完成回報、結果上傳) | 認領起算 timeout_seconds + 120 秒(FINALIZATION_ENVELOPE_SECONDS),所以最多 604800 秒。v5.21.0 之前這兩把憑證用的是平台預設的 600 秒。 |
Context 上傳(company manager)
| 項目 | 值 |
|---|---|
| 封存大小 | ≤ 1 GiB(MAX_DECLARED_OBJECT_BYTES) |
| Live staging slots | 20(MAX_STAGING_SLOTS) |
| 宣告 staging 位元組 | 20 GiB(MAX_STAGING_DECLARED_BYTES) |
| 每公司每分鐘 init | 5(MAX_UPLOAD_INITS_PER_MINUTE)——計 context 上傳與腳本/任務包上傳;run input 與 runner 自己的結果物件不計(後端 ≥ #1140) |
| 模式 | 只有 single_part |
| 格式 | zip/tar/tar.gz |
Dockerfile FROM | 任何公開映像,含 scratch——2026-08-25 起沒有固定允許清單 |
429 staging_slot_exhausted/upload_rate_limited。413 context_too_large。未完成的上傳會佔住一個 live slot(與其宣告位元組),直到被 abort 或該 session 過期(UPLOAD_SESSION_TTL_SECONDS = 24 小時);已 complete 的 session 會立刻釋放 slot。20 個佔滿時,連 scan report 的 staging lease 也開不出來。
產出物
| 項目 | 值 |
|---|---|
| 單一 run 產出物檔案數 | ≤ 1000(MAX_ARTIFACT_FILES) |
| Agent 產出物頁 | ≤ 20 列(ARTIFACT_LIST_PAGE_SIZE) |
| Agent output 預覽 | ≤ 64 KiB(MAX_OUTPUT_PREVIEW_UTF8_BYTES) |
| Agent log 預覽 | ≤ 16 KiB head+tail(MAX_LOG_PREVIEW_UTF8_BYTES) |
| Idempotency-Key | 1..128 字元,禁 NUL |
| Ordinary env 序列化 | ≤ 64 KiB(MAX_ORDINARY_ENV_SERIALIZED_UTF8_BYTES) |
| Ordinary + secret env | ≤ 256 KiB(MAX_ORDINARY_PLUS_SECRET_ENV_UTF8_BYTES) |
每公司政策上限(SandboxCompanyPolicy)
由後端政策決定、可經 PUT /settings(部分)調整或屬營運範圍:
active_environment_limit:可用環境數上限。預設 30(DEFAULT_ACTIVE_ENVIRONMENT_LIMIT)。capacity_retained_version_limit:營運端設定的輸入值,預設 100。實際生效上限是min(設定值, floor(0.10 × 各 active region 中最小的已確認 Cloud Run Job 配額));任一 active region 配額未知、或完全沒有 active region 時即為 0。計數是整間公司的 capacity-retained 版本數;超過就 409version_allocation_exhausted,所以實際可用的版本數常遠低於 100。- 預設公司 run 併發 50、queued-run 上限 100、active-build 上限 2、queued-build 上限 20。queued-run 上限把關 REST 提交、重試、Agent 提交與自訂表格 trigger;Quick Run 不受它檢查。
- 地端部署另有兩個 operator 設定的等待 run 上限(v5.10.11):每公司
SANDBOX_ONPREM_MAX_QUEUED_PER_COMPANY(預設 20;實際的公司上限取它與政策上限中較小者,Quick Run 也適用)與整個 fleet 的SANDBOX_ONPREM_MAX_QUEUED(預設 200 → 429queue_full,帶Retry-After: 60)。託管雲端兩者皆無。 run_content_retention_days:1..365(可設定;預設 30)。unreferenced_image_retention_days:1..90(可設定;預設 30)。- 執行期 profile(
SandboxResourceProfile):
| Profile | vCPU | 顧客記憶體 | Workspace | 租戶可選 |
|---|---|---|---|---|
standard | 1 | 1280 MiB | 512 MiB | 是(預設) |
performance | 2 | 2560 MiB | 1024 MiB | 是 |
large | 4 | 5120 MiB | 2048 MiB | 是 |
xlarge | 8 | 10240 MiB | 4096 MiB | 否 — 只有營運端可開 |
確認集合:GET /public/info/sandbox/profiles。
提交/佇列建置的定價拒絕:403 budget_reservation_exceeded(envelope 塞不進配額;不建列)或 422 no_active_region/missing_price/invalid_envelope/missing_window。queued-run 上限 → 429 sandbox_queued_run_limit(body 含 limit);地端 fleet 佇列已滿 → 429 queue_full(limit、retry_after_seconds、Retry-After)。因為沒有已確認的區域 Job 配額而版本上限為 0 → 409 version_allocation_exhausted。平台 stage-image 輪替期間(全平台、非單一公司的限制),POST .../builds 與 POST .../retry-build 會回 503 build_admission_fenced,body 帶 retry_after_seconds(同值也在 Retry-After header)——此時什麼都沒排進佇列,依 Retry-After 重試即可(通常數分鐘);Redis 不可用時 fence 會 fail-open 放行。
第一次 GET /settings 可能插入一列預設 SandboxCompanyPolicy(get_or_create_company_policy 然後 commit)。把它當成一次可能寫入預設值的讀取。
超過相關上限時,對應端點回錯誤(多為 409/422,未授權為 404)。錯誤碼見 錯誤碼對照表。