API 端點目錄
除非另註,路徑省略前綴 {BASE}/private/module/sandbox。租戶路由經 get_sandbox_principal;未授權回 404(例外:不能擁有的 department/company 建立是 403 owner_scope_forbidden;owner_scope=chatroom 是 422)。完整欄位:請求與回應欄位。OpenAPI 雙 tag:總 tag Module: Sandbox 加上 Module: Sandbox - Settings/Environments/Tasks/Bindings/Secrets/Runs。
公開確認目錄(沒有 /private 前綴,不必登入)
| 方法 + 路徑 | 用途 | 回應 |
|---|---|---|
GET /public/info/sandbox/regions | 部署所用 provider 的封閉 region 集合,給下拉/allowed_regions/build_region:託管服務是雲端區域(tier 1 = 較便宜/優先,2 = 溢流);地端部署只有 onprem(tier 3 = 固定容量,以名目會計費率計價) | SandboxPublicRegionListResponse { items: [{ code, display_name, location, tier }] }(tier 1..3) |
GET /public/info/sandbox/profiles | 封閉 resource-profile 集合。只有 tenant_selectable 才能送 id | SandboxPublicProfileListResponse { items: [{ id, display_name, vcpu, provider_memory_mib, customer_memory_mib, workspace_mib, tenant_selectable, is_default }] } |
xlarge 的 tenant_selectable=false。Region 再與 GET /settings.allowed_regions 取交集。營運端 live 集合是 /root/sandbox/regions。
| 方法 + 路徑 | 用途 | 回應 |
|---|---|---|
GET /public/info/model_key/public_key | 給 client 端加密 secret/API key 用的 RSA 公鑰(PEM) | ModelKeyPublicKeyResponse { public_key_pem, algorithm } |
用來加密 secret 寫入的 encrypted_value——見 Secret 與授權。跟 model-catalog 的 encrypted_api_key 流程共用(不是 sandbox 專屬)。503 代表伺服器沒設定金鑰對(加密寫入會回 422 sandbox_transit_keypair_missing,絕不會退回明文)。
永久公開產出物連結(沒有 /private 前綴,不必登入)
| 方法 + 路徑 | 用途 | 回應 |
|---|---|---|
GET /public/sandbox/artifacts/{token} | 串流由下方 public-link 路由鑄出的 run log/output 物件,或單一產出物檔案的位元組區間(驗 digest) | 原始位元組(Content-Disposition: attachment、X-Content-Type-Options: nosniff) |
沒有 TTL。撤銷後,或底層物件離開 deletion_state=active 後,一律 404。見 內容、Digest 與下載。
單次 run 的 Command 輸出端點(沒有 /private 前綴,Bearer 憑證)
| 方法 + 路徑 | 用途 | 請求 | 回應 |
|---|---|---|---|
POST /public/module/custom_tables/callback/command-output/{token_id} | Command 輸出 run 的 work script 送出它唯一宣告的自訂表格 Command 的輸入。Authorization: Bearer <secret>;兩者都來自 TEAMSYNC_CT_WRITEBACK_URL/TEAMSYNC_CT_WRITEBACK_TOKEN。不是前端呼叫。 | SandboxCommandOutputRequest { inputs } | Command 執行回應(省略 null 欄位)。錯誤:404/409 output_run_unavailable、409 output_command_stale、409 output_command_conflict、422 output_schema_violation、403 output_policy_author_denied |
掛在自訂表格 callback 路由底下,不是 Sandbox 的路由。見任務輸出交給自訂表格 Command。
公司設定
| 方法 + 路徑 | 用途 | 認證 | 請求 | 回應 |
|---|---|---|---|---|
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。GET 與 PUT 皆需 COMPANY_MANAGER。
SandboxCompanySettingsResponse 另外回傳(唯讀/衍生):timeout_ceiling_seconds、active_environment_limit、capacity_retained_version_limit、placement_scope(固定 "runtime_execution_only")、does_not_govern[](build/validator/registry/r2/log/control_plane)、residency_guaranteed(固定 false)、regional_job_capacity_grace_days_fixed。allowed_regions 只管執行期 Job/Execution 放置,不管建置/validator/registry/R2/log/控制面駐留。
環境 / 版本 / 建置(前綴 /environments)
**環境權限:**公司擁有環境由公司管理員管理;部門擁有環境可由該部門管理員或公司管理員建立/管理。部門管理員建立時須傳 owner_scope: "department" 與該部門的 owner_id。Context 上傳、版本、build、重試與 archive 都套用相同 owner-scope 閘門;curated 環境沒有租戶寫入路徑。Metadata 仍可由同公司身分讀取,上傳 session 則要求 owner 管理權。未授權租戶在 router 回 404,受限 key 會先被 auth 拒絕。
| 方法 + 路徑 | 用途 | 請求 | 回應 |
|---|---|---|---|
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 |
GET /environments/{id}/context-uploads | 列出此環境已完成的 context 上傳,並附由它建出的版本(environment owner-scope manager;q: page_size,page_token,lifecycle;後端 ≥ #1151) | — | SandboxContextObjectListResponse |
POST /environments/{id}/context-uploads | 初始化建置 context 上傳 | SandboxContextUploadInitRequest | SandboxContextUploadInitResponse |
GET /environments/{id}/context-uploads/{sid} | 輪詢上傳 session | — | SandboxContextUploadSessionResponse |
PUT /environments/{id}/context-uploads/{sid} | PUT 封存位元組 | raw body + X-Sandbox-Upload-Capability | SandboxContextUploadPutResponse |
POST /environments/{id}/context-uploads/{sid}/complete | 鑄出 owned_object_id | SandboxContextUploadCompleteRequest | SandboxContextUploadCompleteResponse |
POST /environments/{id}/context-uploads/{sid}/abort | 丟掉未完成 session | — | SandboxContextUploadSessionResponse |
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,status[](可重複 SandboxBuildAttemptState) | SandboxBuildAttemptListResponse |
GET /environments/{id}/versions/{vid}/builds/{aid} | 取建置(輪詢) | — | SandboxBuildAttemptResponse |
POST /environments/{id}/versions/{vid}/builds/{aid}/cancel | 圍欄未終態建置(cancel_requested + 可持久化 cancel intent;輪詢到 cancelled) | — | SandboxBuildAttemptResponse |
POST /environments/{id}/versions/{vid}/retry-build | 重試失敗建置 | — | SandboxBuildAttemptResponse |
POST /environments/{id}/versions/{vid}/retry-provisioning | 重試區域佈建 | — | SandboxEnvironmentVersionResponse |
請求欄位
SandboxEnvironmentCreateRequest:name(1–256)、description(≤2048)。- Context 上傳:company manager;策展環境 404。
declared_bytes1..1 GiB;archive_formatzip/tar/tar.gz。PUT 要X-Sandbox-Upload-Capability+Content-Type: application/octet-stream。上限:20 slots、20 GiB 宣告、每分鐘 5 次 init。Abort 未完成 session — 漏掉的 slot 會 429staging_slot_exhausted,連 scan report 也卡住。 - Dockerfile
FROM(compose):任何公開映像都可以,包含scratch——2026-08-25 起沒有固定允許清單(合成後的 layer 仍會檢查平台保留路徑,error_code=context_invalid)。compose 仍拒絕:動態FROM、任何# syntax=指示行(檔案中任何一行都算)、來自網路來源的ADD、RUN --network=host、type=secret/type=ssh的RUN --mount或from=指到未審查 stage 的--mount、指到未審查 stage 的COPY --from,以及超過 1 MiB 的 Dockerfile。 SandboxEnvironmentVersionCreateRequest:首選owned_object_id(來自 complete)。source_digest可選(^sha256:[0-9a-f]{64}$),但單獨送時後端只驗格式,不會確認它對應任何已完成的 context 物件——會建出一個沒有綁定封存的版本,後續建置仍會被受理並保留預算,直到建置時才失敗;請一律送owned_object_id。兩個都送必須相符。source_ref(≤1024)、resource_profile(僅租戶可選;不是xlarge)。SandboxBuildAttemptCreateRequest:build_region(SandboxRegionCode列舉,可省略;託管雲端預設asia-east1,地端部署預設onprem;集合見GET /public/info/sandbox/regions)、build_profile(SandboxBuildProfile列舉,可省略,預設standard)。沒有 ≤64/≤32 的長度限制——送不在列舉內的字串是 422 enum 錯誤。列舉內但該部署目錄沒公開的值(雲端的onprem、地端的任何雲端代碼)是 422build_region_unavailable;地端在已有 active 區域列、但指定的不在其中時也回同一個 422。
回應重點欄位
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、error_detail(≤128 字元,error_code底下具體是哪條規則,例如reserved_path_or_hostile_entry)、build_region、build_profile、report_total_bytes(無任何憑證/金鑰)。常見error_code:context_invalid、dockerfile_exit、policy_reject、identity_config、tenant_cancel(CVE 掃描結果自 2026-08-25 起只是參考——vulnerability_reject已經不會再出現)。
任務 / 版本 / 分享(前綴 /tasks)
| 方法 + 路徑 | 用途 | 請求 | 回應 |
|---|---|---|---|
GET /tasks | 列任務 | q: page_size,page_token,lifecycle | SandboxTaskListResponse |
POST /tasks | 建目錄任務(department | company) | SandboxTaskCreateRequest | SandboxTaskResponse |
GET /tasks/{id}/runs | Company-manager 歷史(offset/limit) | q: offset,limit,order、篩選 | SandboxTaskRunHistoryItem[] |
GET /tasks/{id}/runs/numOfData | 該歷史的筆數 | 同一組篩選 | NumOfData { num } |
GET /tasks/{id} | 取任務 | — | SandboxTaskResponse |
PATCH /tasks/{id} | 只改 name/description/agent_enabled(owner-manager;已歸檔 → 409 task_archived;空 body → 422 no_fields;後端 ≥ #1151) | SandboxTaskUpdateRequest | SandboxTaskResponse |
POST /tasks/{id}/archive | 整個任務歸檔:版本全部歸檔、聊天室 binding 撤銷(排隊中的 run 取消)、分享紀錄保留;再呼叫一次 409 already_archived(後端 ≥ #1151) | — | SandboxTaskResponse |
GET /tasks/{id}/versions | 列版本 | q: 分頁,lifecycle | SandboxTaskVersionListResponse |
POST /tasks/{id}/script-uploads | 上傳 UTF-8 腳本檔(≤1 MiB),得到 24 小時可重用的 handle,供 work_script_id/startup_script_id(版本建立前) | multipart file | SandboxScriptUploadResponse |
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}/script-file?target=startup|work | 上傳 UTF-8 腳本檔(≤1 MiB)進 draft 的 startup_script/work_script | multipart file | SandboxTaskVersionResponse |
POST /tasks/{id}/versions/{vid}/input-preview | Dry-run 一個候選 input:精確位元組、digest、runtime 契約、schema 驗證結果——不會派工 | SandboxInputPreviewRequest { input } | SandboxInputPreviewResponse |
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(只有department/company;chatroom→ 422)、owner_id(pattern)、agent_enabled(預設 false,舊旗標)。SandboxTaskVersionCreateRequest/UpdateRequest(僅 PATCH draft):environment_version_id、startup_script(≤1MiB)、work_script(≤1MiB)、ordinary_env?、input_instructions?(≤64KiB)、input_example?(≤64KiB,若設了input_schema必須符合它——不符合是這次草稿建立/更新呼叫的 422job_contract_invalid,發布時絕不會出現)、input_schema?(≤64KiB,JSON Schema draft 2020-12;每次 run 提交都會強制檢查,不符合是 422input_schema_violation)、work_command?(≤4096 UTF-8 位元組——寫進/workspace/driver.sh的 driver 指令列,在startup.sh之後 source;空白 →. /workspace/work.sh;含 NUL 或超長 → 422job_contract_invalid)、timeout_seconds(預設1800,最大 604680)、secret_slot_declarations?({name}或字串的 list)、requires_confirmation(預設 false)、output_policy?(以kind區分的聯集:{ kind: "custom_table_writeback", table_id, allowed_ops },或自 v5.21.0 起的{ kind: "custom_table_command", command_id, chatroom_id, input_schema };只有部門擁有)。- 分享 vs 啟用 vs 選單:任務受眾。歷史篩選:
status、method、executor_kind、source_kind、department_id、chatroom_id。limit預設 10,最大 100。 SandboxShareCreateRequest:target_kind、target_id、secret_slot_policies?({slot_name: "borrower"|"owner"|"owner_overridable"},≤100 筆,只能在建立時設定——見 Secrets)。SandboxShareRevokeRequest:reason(≤512)。SandboxInputPreviewRequest:{ input: <任意 JSON> }。
回應重點:SandboxTaskVersionResponse 含必填的 source_visible、state、content_state(active/scrubbed)、requires_confirmation、secret_slot_names[]、canonical_digest、content_hash、update_available;擁有者專屬:startup_script?、work_script?、work_command?、ordinary_env?、secret_slot_declarations?、output_policy?(借用視圖省略;借用者的 work_command 是 null)。GET /tasks 會過濾隱藏的 quick-run 父任務。SandboxShareGrantResponse 也帶 secret_slot_policies?(owner 與 borrower 視圖都看得到——政策名稱不是機密)。SandboxInputPreviewResponse:input_file_content($TEAMSYNC_INPUTS_FILE 的精確位元組)、input_digest、runtime_contract(見下)、schema_valid、schema_errors[]。
綁定(前綴 /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。與 granted-jobs 啟用同一釘選。首選 POST /chatrooms/{id}/granted-jobs/{task_id}/enable。沒有 GET /bindings 列表。 房間管理者用 GET /chatrooms/{id}/granted-jobs 列 grant。Agent/UI 目錄是 GET /chatrooms/{id}/menu(已授予 且 已啟用)。
Secret / 授權(路徑 /secrets*、/secret-approvals*、/shared-task-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 |
POST /shared-task-secret-approvals | 借用授權別名(同 POST /secret-approvals) | SandboxSecretApprovalCreateRequest | SandboxSecretApprovalResponse |
POST /shared-task-secret-approvals/{id}/revoke | 撤銷授權別名(同 POST /secret-approvals/{id}/revoke) | SandboxSecretApprovalRevokeRequest | SandboxSecretApprovalResponse |
SandboxSecretWriteRequest:consumer_scope、consumer_id、task_id、slot_name(^[A-Za-z_][A-Za-z0-9_]{0,127}$)、encrypted_value(必填;SandboxEncryptedValue { encrypted_key, iv, ciphertext },全都 base64——混合 AES-256-GCM + RSA-OAEP-SHA256 傳輸信封;解密後的值 1..64KiB,不記錄)。明文 value 欄位一律拒絕——加密流程與四種可分辨的 422 slug 見 Secrets。SandboxSecretApprovalCreateRequest:consumer_scope、consumer_id、task_id、task_version_id、task_version_digest(sha256:)、slot_names(1..100——理論上在共享 secret slot 政策下必須剛好等於 borrower 解析出的 slot 子集,但這條路由本身不檢查;不符只會在之後認領時才被抓到,讓 run 被 secret_approval_required 拒絕——見 Secrets)、risk_accepted: true(必為 true)。digest 不符 → 409。binding/approval 沒有列表端點。
執行(路徑帶 /chatrooms/{chatroom_id}/...)
| 方法 + 路徑 | 用途 | 受限 key | 請求 | 回應 |
|---|---|---|---|---|
GET /chatrooms/{cid}/menu | 已授予 且 已啟用的目錄(每個呼叫者同一份) | ✅ | q: page_size,page_token(預設50) | SandboxMenuResponse |
GET /chatrooms/{cid}/granted-jobs | Grant + 房間啟用開關 | ❌ 405 | — | SandboxGrantedJobListResponse |
POST /chatrooms/{cid}/granted-jobs/{tid}/enable | 啟用給 Agent/選單 | ❌ 405 | SandboxGrantedJobEnableRequest(task_version_id?) | SandboxGrantedJobItemResponse |
POST /chatrooms/{cid}/granted-jobs/{tid}/disable | 從 Agent/選單拿掉;share 還在 | ❌ 405 | — | SandboxGrantedJobItemResponse |
POST /chatrooms/{cid}/runs | 提交手動執行 | ✅ | SandboxManualRunSubmitRequest + Idempotency-Key | SandboxRunDetailResponse |
GET /chatrooms/{cid}/runs | 列 run(受限只見自己) | ✅ | q: page_size,page_token,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,page_token,lifecycle | SandboxRunArtifactListResponse |
POST /chatrooms/{cid}/runs/{rid}/artifacts/{aid}/download | 授權並發下載 capability(沒有兌換路由——要交出檔案請用下面的 public-link) | ✅ | — | SandboxArtifactDownloadCapabilityResponse |
POST /chatrooms/{cid}/runs/{rid}/artifacts/{aid}/public-link | 為單一產出物檔案鑄永久公開連結(冪等;後端 ≥ #1149) | ❌ 404 | — | SandboxArtifactPublicLinkResponse |
DELETE /chatrooms/{cid}/runs/{rid}/artifacts/{aid}/public-link | 撤銷該連結(冪等;下次鑄造會拿到新 token) | ❌ 404 | — | SandboxArtifactPublicLinkResponse |
POST /chatrooms/{cid}/runs/{rid}/{log|output}/public-link | 鑄一個永久公開下載連結(冪等) | ❌ 405 | — | SandboxPublicLinkResponse |
DELETE /chatrooms/{cid}/runs/{rid}/{log|output}/public-link | 撤銷公開連結(冪等;下次鑄造會拿到新 token) | ❌ 405 | — | SandboxPublicLinkResponse |
POST /chatrooms/{cid}/runs/{rid}/cancel | 取消你讀得到的 run(can_cancel_run == can_read_run)。受限金鑰:只有自己的 | ✅ | — | SandboxRunDetailResponse |
POST /chatrooms/{cid}/runs/{rid}/retry | 以新身分重試終態 run(重放保留的 input,也可覆寫——見下) | ❌ 405 | Idempotency-Key | SandboxRunDetailResponse |
POST /chatrooms/{cid}/quick-run | manager-only 原子 quick run | ❌ 403 | SandboxQuickRunRequest + Idempotency-Key | SandboxQuickRunResponse |
受限金鑰欄的 ❌ 405 來自 scope allowlist(路由不在受限金鑰的允許清單),quick-run 的 ❌ 403 來自 denied-path 規則——沒有任何一條會回 404。這些是金鑰已涵蓋該聊天室時的結果;金鑰 allowed_chatrooms 不含 {cid} 時,任何路由都先回 403。
請求欄位
SandboxManualRunSubmitRequest:task_version_id、input(canonical JSON——若版本宣告了input_schema且不符合,會在派工前回 422input_schema_violation)、timeout_seconds?。手動 REST 需要 live share + 成員資格;不要求啟用。Agent/選單需要 granted+enabled。- Retry 保留精確的任務版本 pin,並建立新的 run 身分。省略 body、送
{}或{"input": null}會逐位元重放保留的來源 input;非 null 的input會覆寫參數,並依一般 input 限制驗證與暫存。來源 input 不存在、已退役、無法讀取或 digest 不符時,重放回 409retry_input_unavailable;請改傳明確 input。必須帶Idempotency-Key;來源尚未終態時回 409retry_not_eligible。受限 Sandbox key 不能 retry:允許房間的請求由 route allowlist 回 405,超出 scope 的房間可能更早回 403。 SandboxQuickRunRequest:name、environment_version_id、startup_script、work_script、ordinary_env、input、timeout_seconds(必填)。input跟手動提交一樣會暫存(v5.10.11),所以 Quick Run 也可能回 422input_not_stageable/503input_staging_unavailable。- 提交、重試與 Quick Run 把 429 宣告為
SandboxQueuedRunLimitErrorResponse(sandbox_queued_run_limit)或SandboxQueueFullErrorResponse(queue_full,僅地端,帶Retry-After)。什麼都沒排入佇列。見執行與取回結果。 - 選單
page_size預設 50;後端 ≥ #1149 起next_page_token是真的游標(用page_token帶回)。items 還含task_id、task_name、task_version_digest、input_schema?、secret_slots[](逐 slot 的{name, policy, borrower_bound, owner_bound, effective_source})、runtime_contract?、secret_use_risk_warning?。Granted-jobs items 也帶secret_slots[]。 - run 上的
submission_source:rest/agent/quick_run/custom_table_trigger。
回應重點
SandboxRunDetailResponse:id、company_id、chatroom_id、status、resource_profile、principal_type、principal_id、auth_method、task_id、task_version_id、timeout_seconds、submission_source、input_digest、retry_of_run_id、error_code、queue_position?、eta_seconds?(v5.10.11;託管雲端一律null)、queued_at?、terminal_at?、secret_slot_provenance?({slot_name: {resolved_via, consumer_scope}},已遮蔽——run 沒有快照時是null)。(cancel_requested_at有持久化,不回傳。share_grant_id在提交時內部凍結,但不在這個回應上。)SandboxRunContentResponse:state、has_input、has_output、has_log、has_artifact_bundle、input_digest(只有旗標 — REST 沒有 log/output 位元組)。SandboxArtifactDownloadCapabilityResponse:artifact_id、run_id、company_id、capability_token、expires_at(5 分鐘)、content_type、content_disposition、x_content_type_options: nosniff(無原始 key/URL,也沒有租戶兌換路由 — 見 下載)。SandboxPublicLinkResponse:run_id、object_kind(log/output)、url(永久,沒有 TTL)、token、revoked、created_at?。見 下載。
不對前端開放(僅供理解)
/sandbox-control/*:系統對系統 OIDC + capability,include_in_schema=False。人不要呼叫。地端部署另外掛載 executor 的 work-lease 路由/sandbox-control/onprem/work/*(以 executor token 驗證;託管雲端沒有)。/root/sandbox/*:營運/root,不是前端——包括工作佇列檢視GET /root/sandbox/queue。見 營運與 Root。
欄位或路徑若與後端不符,以
src/routers/private/modules/sandbox/與src/schemas/sandbox.py為準。
能力與管理清單(v5.10.0)
下列路徑共用 private Sandbox base。授權、回應欄位與 UI 串接請見能力與管理查詢。
| Method | Path | 用途 |
|---|---|---|
| GET | /me | 當前使用者能力提示,本身不授予權限 |
| GET | /runs | 依可見範圍篩選的跨聊天室歷史、total 與 keyset 分頁 |
| GET | /tasks/{task_id}/bindings | 任務採用歷史;非 owner 只看可管理房間 |
| GET | /chatrooms/{chatroom_id}/bindings | 房間管理員的 binding 歷史,可要求 retired 列 |
| GET | /tasks/{task_id}/secrets | 縮限到可管理 consumer scope 的遮罩 binding |
| GET | /tasks/{task_id}/secret-approvals | 可管理 consumer scope 的精確版本核准 metadata |
| GET | /secrets | 以必填 consumer_scope、consumer_id 查找可管理的 binding |