{
  "ok": true,
  "auth": "All /browser/* routes require Authorization: Bearer <jwt> (HS256, claims 含 tenant_id)",
  "phase4_integration": {
    "start": "JWT → adk_session_id + profile → D1 INSERT(active) → 容器 profile → open → D1 opened_at；已起沙箱后任一步失败则 failed + destroy",
    "commands": "JWT → active 校验 → OS timeout + Worker withTimeout + 会话 inflight 锁；screenshot/pdf/record stop 容器 curl PUT 到 R2，只回 artifact.url（禁止 base64）",
    "exec": "JWT → active 校验 → mode=wait|wait_kill（timeout -k 超杀）或 detach（startProcess 立刻返回 pid）；同会话 inflight=1，忙则 429",
    "processes": "GET 列表/详情、DELETE 杀进程；detach 配套；不占用 inflight",
    "delete": "JWT → 容器 zip + 预签名 PUT/curl 上 R2 → destroy（export 失败仍 destroy）→ D1 ended"
  },
  "phase5_session_type": "启动 body：`sessionType` 或 `session_type`（二选一需一致）为 headed|headless，缺省 headed；写入 D1 `session_type`；agent-browser：`headed`→`--headed`，`headless`→不传（CLI 默认无头）",
  "endpoints": {
    "startBrowser": "POST /browser/sessions",
    "runCommand": "POST /browser/sessions/:id/commands",
    "execSandbox": "POST /browser/sessions/:id/exec",
    "listProcesses": "GET /browser/sessions/:id/processes?adk_session_id=",
    "getProcess": "GET /browser/sessions/:id/processes/:processId?adk_session_id=",
    "killProcess": "DELETE /browser/sessions/:id/processes/:processId",
    "closeBrowser": "DELETE /browser/sessions/:id",
    "shutdownNoExport": "DELETE /browser/sessions/:id/shutdown",
    "listProfileRefs": "POST /browser/profile-refs",
    "querySessions": "POST /browser/sandbox-sessions/query"
  },
  "example": {
    "start": {
      "method": "POST",
      "path": "/browser/sessions",
      "headers": {
        "Authorization": "Bearer <jwt>"
      },
      "body": {
        "adk_session_id": "adk-xxx",
        "profile": {
          "mode": "new",
          "name": "myprofile"
        },
        "sessionType": "headed",
        "url": "https://example.com",
        "novnc": false
      }
    },
    "command": {
      "method": "POST",
      "path": "/browser/sessions/br-xxx/commands",
      "headers": {
        "Authorization": "Bearer <jwt>"
      },
      "body": {
        "adk_session_id": "adk-xxx",
        "argv": [
          "screenshot",
          "/workspace/out/s.png"
        ]
      },
      "note": "成功时响应含 artifact.url；JSON 中无 base64"
    },
    "exec": {
      "method": "POST",
      "path": "/browser/sessions/br-xxx/exec",
      "headers": {
        "Authorization": "Bearer <jwt>"
      },
      "body": {
        "adk_session_id": "adk-xxx",
        "command": "ls -la /",
        "mode": "wait"
      }
    },
    "execDetach": {
      "method": "POST",
      "path": "/browser/sessions/br-xxx/exec",
      "headers": {
        "Authorization": "Bearer <jwt>"
      },
      "body": {
        "adk_session_id": "adk-xxx",
        "command": "npm run dev",
        "mode": "detach"
      }
    },
    "close": {
      "method": "DELETE",
      "path": "/browser/sessions/br-xxx",
      "headers": {
        "Authorization": "Bearer <jwt>",
        "content-type": "application/json"
      },
      "body": {
        "adk_session_id": "adk-xxx"
      }
    }
  }
}