API 端點目錄
路徑省略前綴 {BASE}/private/module/sandbox。所有端點經 get_sandbox_principal;未授權回 404。
公司設定
| 方法 + 路徑 | 用途 | 認證 | 請求 | 回應 |
|---|---|---|---|---|
GET /settings | 讀公司 sandbox 設定 | company manager | — | SandboxCompanySettingsResponse |
PUT /settings | 更新保留天數 + 允許區域 | company manager | SandboxCompanySettingsUpdate | SandboxCompanySettingsResponse |
SandboxCompanySettingsUpdate:run_content_retention_days(1..365)、unreferenced_image_retention_days(1..90)、allowed_regions(≥1)、policy_version(樂觀鎖 CAS)。CAS 不符 → 409。
環境 / 版本 / 建置(前綴 /environments)
| 方法 + 路徑 | 用途 | 請求 | 回應 |
|---|---|---|---|
GET /environments | 列環境(含系統策展) | q: page_size,page_token,lifecycle | SandboxEnvironmentListResponse |
POST /environments | 建環境 | SandboxEnvironmentCreateRequest | SandboxEnvironmentResponse |
GET /environments/{id} | 取環境 | — | SandboxEnvironmentResponse |
PATCH /environments/{id} | 改名稱/描述 | SandboxEnvironmentUpdateRequest | SandboxEnvironmentResponse |
POST /environments/{id}/archive | 歸檔環境 | — | SandboxEnvironmentResponse |
GET /environments/{id}/versions | 列版本 | q: page_size,page_token,lifecycle | SandboxEnvironmentVersionListResponse |
POST /environments/{id}/versions | 建不可變版本 | SandboxEnvironmentVersionCreateRequest | SandboxEnvironmentVersionResponse |
GET /environments/{id}/versions/{vid} | 取版本(輪詢 ready) | — | SandboxEnvironmentVersionResponse |
POST /environments/{id}/versions/{vid}/archive | 歸檔版本 | — | SandboxEnvironmentVersionResponse |
POST /environments/{id}/versions/{vid}/builds | 佇列一次建置 | SandboxBuildAttemptCreateRequest | SandboxBuildAttemptResponse |
GET /environments/{id}/versions/{vid}/builds | 列建置 | q: page_size,page_token | SandboxBuildAttemptListResponse |
GET /environments/{id}/versions/{vid}/builds/{aid} | 取建置(輪詢) | — | SandboxBuildAttemptResponse |
POST /environments/{id}/versions/{vid}/builds/{aid}/cancel | 取消建置 | — | SandboxBuildAttemptResponse |
POST /environments/{id}/versions/{vid}/retry-build | 重試失敗建置 | — | SandboxBuildAttemptResponse |
POST /environments/{id}/versions/{vid}/retry-provisioning | 重試區域佈建 | — | SandboxEnvironmentVersionResponse |
請求欄位
SandboxEnvironmentCreateRequest:name(1–256)、description(≤2048)。SandboxEnvironmentVersionCreateRequest:source_digest(必填,^sha256:[0-9a-f]{64}$)、source_ref(≤1024)、resource_profile(standard/performance/large/xlarge)。SandboxBuildAttemptCreateRequest:build_region(≤64, 預設asia-east1)、build_profile(≤32, 預設standard)。
回應重點欄位
SandboxEnvironmentVersionResponse:id、environment_id、version_number、state、security_state、resource_profile、capacity_retained、ready_at?…;擁有者專屬:source_digest?、source_ref?(借用視圖省略)。SandboxBuildAttemptResponse:id、environment_version_id、attempt_number、status、phase、terminal_class、stage_code、error_code、build_region、build_profile、report_total_bytes(無任何憑證/金鑰)。
任務 / 版本 / 分享(前綴 /tasks)
| 方法 + 路徑 | 用途 | 請求 | 回應 |
|---|---|---|---|
GET /tasks | 列任務 | q: page_size,page_token,lifecycle | SandboxTaskListResponse |
POST /tasks | 建任務(draft) | SandboxTaskCreateRequest | SandboxTaskResponse |
GET /tasks/{id} | 取任務 | — | SandboxTaskResponse |
GET /tasks/{id}/versions | 列版本 | q: 分頁,lifecycle | SandboxTaskVersionListResponse |
POST /tasks/{id}/versions | 建 draft 版本 | SandboxTaskVersionCreateRequest | SandboxTaskVersionResponse |
GET /tasks/{id}/versions/{vid} | 取版本 | — | SandboxTaskVersionResponse |
PATCH /tasks/{id}/versions/{vid} | 改 draft 版本 | SandboxTaskVersionUpdateRequest | SandboxTaskVersionResponse |
POST /tasks/{id}/versions/{vid}/publish | 發布版本 | — | SandboxTaskVersionResponse |
POST /tasks/{id}/versions/{vid}/archive | 歸檔版本 | — | SandboxTaskVersionResponse |
GET /tasks/{id}/shares | 列分享(預設 lifecycle=all) | q: 分頁,lifecycle | SandboxShareGrantListResponse |
POST /tasks/{id}/shares | 分享給部門/公司/聊天室 | SandboxShareCreateRequest | SandboxShareGrantResponse |
POST /tasks/{id}/shares/{gid}/revoke | 撤銷分享 | SandboxShareRevokeRequest | SandboxShareGrantResponse |
請求欄位
SandboxTaskCreateRequest:name(1–256)、description(≤2048)、owner_scope(chatroom/department/company)、owner_id(pattern)、agent_enabled(預設 false)。SandboxTaskVersionCreateRequest:environment_version_id、startup_script(≤1MiB)、work_script(≤1MiB)、ordinary_env?、input_instructions?(≤64KiB)、input_example?(≤64KiB)、timeout_seconds(預設1800)、secret_slot_declarations?、requires_confirmation(預設 false)、output_policy?。SandboxShareCreateRequest:target_kind、target_id。SandboxShareRevokeRequest:reason(≤512)。
回應重點:SandboxTaskVersionResponse 含 state、content_state、requires_confirmation、secret_slot_names[]、update_available;擁有者專屬:startup_script?、work_script?、ordinary_env?、secret_slot_declarations?(借用視圖省略)。
綁定(前綴 /bindings)
| 方法 + 路徑 | 用途 | 請求 | 回應 |
|---|---|---|---|
POST /bindings | 把已發布版本釘進聊天室 | SandboxBindingCreateRequest | SandboxBindingResponse |
GET /bindings/{id} | 取綁定 | — | SandboxBindingResponse |
POST /bindings/{id}/accept-version | 明確升級到新版本 | SandboxBindingAcceptVersionRequest | SandboxBindingResponse |
POST /bindings/{id}/revoke | 撤銷綁定 | SandboxBindingRevokeRequest | SandboxBindingResponse |
SandboxBindingCreateRequest:chatroom_id、task_id、task_version_id。回應含 update_available、authority_applicable、state。
Secret / 授權(路徑 /secrets*、/secret-approvals*)
需 consumer-scope manager;建立/輪替/撤銷要帶 Idempotency-Key;值永不回顯。
| 方法 + 路徑 | 用途 | 請求 | 回應 |
|---|---|---|---|
POST /secrets | 建立 secret 值 | SandboxSecretWriteRequest | SandboxSecretOperationResponse |
POST /secrets/rotate | 輪替值 | SandboxSecretWriteRequest | SandboxSecretOperationResponse |
POST /secrets/revoke | 撤銷值 | SandboxSecretRevokeRequest | SandboxSecretOperationResponse |
GET /secrets/{id} | 取遮蔽 binding | — | SandboxSecretBindingResponse |
POST /secret-approvals | 借用授權(精確 digest) | SandboxSecretApprovalCreateRequest | SandboxSecretApprovalResponse |
POST /secret-approvals/{id}/revoke | 撤銷授權 | SandboxSecretApprovalRevokeRequest | SandboxSecretApprovalResponse |
SandboxSecretWriteRequest:consumer_scope、consumer_id、task_id、slot_name、value(1..64KiB, 不記錄)。SandboxSecretApprovalCreateRequest:task_version_digest(sha256:)、slot_names(1..100)、risk_accepted: true(必為 true)。digest 不符 → 409。
執行(路徑帶 /chatrooms/{chatroom_id}/...)
| 方法 + 路徑 | 用途 | 受限 key | 請求 | 回應 |
|---|---|---|---|---|
GET /chatrooms/{cid}/menu | 列可執行任務 | ✅ | q: page_size(預設50) | SandboxMenuResponse |
POST /chatrooms/{cid}/runs | 提交手動執行 | ✅ | SandboxManualRunSubmitRequest + Idempotency-Key | SandboxRunDetailResponse |
GET /chatrooms/{cid}/runs | 列 run(受限只見自己) | ✅ | q: page_size,status[] | SandboxRunListResponse |
GET /chatrooms/{cid}/runs/{rid} | 取 run 狀態(輪詢) | ✅ | — | SandboxRunDetailResponse |
GET /chatrooms/{cid}/runs/{rid}/content | 內容旗標(無本體) | ✅ | — | SandboxRunContentResponse |
GET /chatrooms/{cid}/runs/{rid}/artifacts | 列產出物 | ✅ | q: page_size,lifecycle | SandboxRunArtifactListResponse |
POST /chatrooms/{cid}/runs/{rid}/artifacts/{aid}/download | 授權並發下載 capability | ✅ | — | SandboxArtifactDownloadCapabilityResponse |
POST /chatrooms/{cid}/runs/{rid}/cancel | 取消自己的 run | ✅ | — | SandboxRunDetailResponse |
POST /chatrooms/{cid}/runs/{rid}/retry | 以新身分重試終態 run | ❌ 404 | Idempotency-Key | SandboxRunDetailResponse |
POST /chatrooms/{cid}/quick-run | manager-only 原子 quick run | ❌ 404 | SandboxQuickRunRequest + Idempotency-Key | SandboxQuickRunResponse |
請求欄位
SandboxManualRunSubmitRequest:task_version_id、input(canonical JSON)、timeout_seconds?。SandboxQuickRunRequest:name、environment_version_id、startup_script、work_script、ordinary_env、input、timeout_seconds(必填)。
回應重點
SandboxRunDetailResponse:id、chatroom_id、status、resource_profile、principal_type、auth_method、task_id、task_version_id、timeout_seconds、submission_source、input_digest、retry_of_run_id、error_code、queued_at?、terminal_at?。SandboxRunContentResponse:state、has_input、has_output、has_log、has_artifact_bundle、input_digest(只有旗標)。SandboxArtifactDownloadCapabilityResponse:capability_token、expires_at、content_type、content_disposition、x_content_type_options: nosniff(無原始 key/URL)。
不對前端開放(僅供理解)
/sandbox-control/*:控制面(OIDC + capability),include_in_schema=False。/root/sandbox/*:營運/root。
欄位或路徑若與後端不符,以
src/routers/private/modules/sandbox/與src/schemas/sandbox.py為準。