{"openapi":"3.1.0","info":{"title":"image-agent API","description":"image-agent 服务接口。支持 Supabase `Authorization: Bearer <access_token>` 和服务端 API key `X-API-Key: <key>` 两种鉴权方式。\n\n常用流程：创建/更新/删除 Project，维护 Project 下的站点，创建并轮询 Task，然后通过 `/tasks/{task_id}/artifact-files`、`/tasks/{task_id}/artifact-files/content`、`/tasks/{task_id}/artifact-files/download` 或 `/tasks/{task_id}/artifacts` 获取产物。","version":"0.1.0"},"paths":{"/auth/api-keys":{"get":{"tags":["auth"],"summary":"列出 API key","description":"列出当前登录用户已创建的 API key 元数据。不会返回完整 key。","operationId":"list_user_api_keys_auth_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKeyInfo"},"type":"array","title":"Response List User Api Keys Auth Api Keys Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["auth"],"summary":"创建 API key","description":"为当前登录用户创建一个 API key。返回值中的 `key` 只出现一次；后续调用 Project、站点、Task 和产物接口时在请求头传 `X-API-Key: <key>`。","operationId":"create_user_api_key_auth_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/api-keys/{key_id}":{"delete":{"tags":["auth"],"summary":"删除 API key","description":"删除当前用户的指定 API key。删除后该 key 立即不能继续访问接口。","operationId":"delete_user_api_key_auth_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/session-cookie":{"post":{"tags":["auth"],"summary":"Set Session Cookie","operationId":"set_session_cookie_auth_session_cookie_post","responses":{"204":{"description":"Successful Response"}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["auth"],"summary":"Clear Session Cookie","operationId":"clear_session_cookie_auth_session_cookie_delete","responses":{"204":{"description":"Successful Response"}}}},"/admin/api-keys":{"get":{"tags":["admin"],"summary":"Admin 列出 API key","operationId":"list_admin_api_keys_admin_api_keys_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminApiKeyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Admin 创建 API key","operationId":"create_admin_api_key_admin_api_keys_post","security":[{"APIKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreateApiKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedApiKey"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api-keys/{key_id}":{"delete":{"tags":["admin"],"summary":"Admin 删除 API key","operationId":"delete_admin_api_key_admin_api_keys__key_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api-keys/{key_id}/freeze":{"post":{"tags":["admin"],"summary":"Admin 冻结 API key","operationId":"freeze_admin_api_key_admin_api_keys__key_id__freeze_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api-keys/{key_id}/unfreeze":{"post":{"tags":["admin"],"summary":"Admin 解冻 API key","operationId":"unfreeze_admin_api_key_admin_api_keys__key_id__unfreeze_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api-key-usage":{"get":{"tags":["admin"],"summary":"查询 API key 使用量","description":"Super admin 查询 API key 触发的模型调用用量、费用和 token 统计。调用时需要在请求头传 `X-Admin-Key`，其值来自部署环境变量 `IMAGE_AGENT_SUPER_ADMIN_KEY`。","operationId":"get_api_key_usage_admin_api_key_usage_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"task_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/models":{"get":{"summary":"Get Models","description":"Return available models. No auth required.","operationId":"get_models_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/tasks":{"get":{"summary":"列出 Task","operationId":"get_tasks_tasks_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"创建 Task","description":"创建一个 AI 配图/截图任务。可用 `project_id` 绑定 Project，可用 `site_id` 绑定站点知识。API key 调用时请在请求头传 `X-API-Key`。","operationId":"create_task_tasks_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_task_tasks_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}":{"get":{"summary":"获取 Task 状态","operationId":"get_task_tasks__task_id__get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/cancel":{"post":{"summary":"取消 Task","operationId":"cancel_task_tasks__task_id__cancel_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/retry":{"post":{"summary":"重试 Task","operationId":"retry_task_tasks__task_id__retry_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/logs":{"get":{"summary":"读取 Task 日志","operationId":"get_task_logs_tasks__task_id__logs_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/artifact-files":{"get":{"summary":"列出 Task 产物文件","description":"返回 `tasks/{task_id}/output/` 下的文件树，用于 API 客户端发现任务产物。","operationId":"get_task_artifact_files_tasks__task_id__artifact_files_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TaskArtifactNode"},"title":"Response Get Task Artifact Files Tasks  Task Id  Artifact Files Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/artifact-files/content":{"get":{"summary":"读取 Task 产物文本预览","description":"按相对路径读取单个产物文件。Markdown/text 会返回 `text` 预览；图片和二进制文件返回元数据和下载地址。","operationId":"get_task_artifact_file_content_tasks__task_id__artifact_files_content_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskArtifactContentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/artifact-files/resource":{"get":{"summary":"读取 Task 产物资源","description":"按相对路径以内联资源方式返回产物文件，适合前端预览图片等资源。","operationId":"get_task_artifact_file_resource_tasks__task_id__artifact_files_resource_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}},{"name":"image_agent_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Agent Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/artifact-files/download":{"get":{"summary":"下载 Task 单个产物文件","description":"按相对路径下载 `tasks/{task_id}/output/` 下的单个产物文件。","operationId":"download_task_artifact_file_tasks__task_id__artifact_files_download_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/artifacts":{"get":{"summary":"下载 Task 全部产物 ZIP","description":"下载任务打包后的全部产物。若已上传到 Supabase Storage，返回签名下载跳转；否则返回本地 ZIP 文件。","operationId":"download_artifacts_tasks__task_id__artifacts_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects":{"get":{"tags":["projects"],"summary":"列出 Project","operationId":"list_all_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectInfo"},"type":"array","title":"Response List All Projects Get"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]},"post":{"tags":["projects"],"summary":"创建 Project","description":"创建一个 project。API key 调用时请在请求头传 `X-API-Key`。","operationId":"create_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/projects/{project_id}/files":{"post":{"tags":["projects"],"summary":"上传 Project 文件","operationId":"upload_file_projects__project_id__files_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_projects__project_id__files_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["projects"],"summary":"列出 Project 上传文件","operationId":"get_files_projects__project_id__files_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectFilesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/archives":{"post":{"tags":["projects"],"summary":"上传归档文件","operationId":"upload_archive_projects__project_id__archives_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_archive_projects__project_id__archives_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/github-repository":{"post":{"tags":["projects"],"summary":"导入 GitHub 仓库","operationId":"import_github_repository_projects__project_id__github_repository_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitHubRepositoryImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/chat-attachments":{"post":{"tags":["projects"],"summary":"Upload Chat Attachment","operationId":"upload_chat_attachment_projects__project_id__chat_attachments_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_chat_attachment_projects__project_id__chat_attachments_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/finalize":{"post":{"tags":["projects"],"summary":"完成 Project 上传","operationId":"finalize_projects__project_id__finalize_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}":{"get":{"tags":["projects"],"summary":"获取 Project","operationId":"get_one_projects__project_id__get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["projects"],"summary":"更新 Project","description":"更新 project 的名称或描述。未传字段保持不变。","operationId":"patch_project_projects__project_id__patch","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"删除 Project","operationId":"delete_projects__project_id__delete","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/file-tree":{"get":{"tags":["projects"],"summary":"列出 Project 文件树","operationId":"get_file_tree_projects__project_id__file_tree_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scope","in":"query","required":false,"schema":{"enum":["all","uploads","tasks","output"],"type":"string","default":"all","title":"Scope"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectFileNode"},"title":"Response Get File Tree Projects  Project Id  File Tree Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/file-content":{"get":{"tags":["projects"],"summary":"读取 Project 文本文件内容","operationId":"get_file_content_projects__project_id__file_content_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectFileContentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/file-resource":{"get":{"tags":["projects"],"summary":"读取 Project 文件资源","operationId":"get_file_resource_projects__project_id__file_resource_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}},{"name":"image_agent_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Agent Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/file-download":{"get":{"tags":["projects"],"summary":"下载 Project 单个文件","operationId":"download_project_file_projects__project_id__file_download_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/file-download-zip":{"get":{"tags":["projects"],"summary":"下载 Project 文件夹 ZIP","operationId":"download_project_folder_zip_projects__project_id__file_download_zip_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/file-entry":{"delete":{"tags":["projects"],"summary":"删除 Project 文件或文件夹","operationId":"delete_project_file_entry_projects__project_id__file_entry_delete","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/download":{"post":{"tags":["projects"],"summary":"下载 Project 到本地","operationId":"download_to_local_projects__project_id__download_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/materialize":{"post":{"tags":["projects"],"summary":"物化 Project 文件","operationId":"materialize_projects__project_id__materialize_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-chats":{"get":{"tags":["agent-chats"],"summary":"Get Chats","operationId":"get_chats_agent_chats_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChatState"},"title":"Response Get Chats Agent Chats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["agent-chats"],"summary":"Create","operationId":"create_agent_chats_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-chats/stream":{"post":{"tags":["agent-chats"],"summary":"Create Stream","operationId":"create_stream_agent_chats_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/agent-chats/{chat_id}":{"get":{"tags":["agent-chats"],"summary":"Get One","operationId":"get_one_agent_chats__chat_id__get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatState"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-chats/{chat_id}/events":{"get":{"tags":["agent-chats"],"summary":"Stream Events","operationId":"stream_events_agent_chats__chat_id__events_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"after","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-chats/{chat_id}/messages":{"post":{"tags":["agent-chats"],"summary":"Send Message","operationId":"send_message_agent_chats__chat_id__messages_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatState"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-chats/{chat_id}/messages/stream":{"post":{"tags":["agent-chats"],"summary":"Send Message Stream","operationId":"send_message_stream_agent_chats__chat_id__messages_stream_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-chats/{chat_id}/files/{rel_path}":{"get":{"tags":["agent-chats"],"summary":"Download File","operationId":"download_file_agent_chats__chat_id__files__rel_path__get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"rel_path","in":"path","required":true,"schema":{"type":"string","title":"Rel Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/github/connection":{"get":{"tags":["github"],"summary":"Get Connection","operationId":"get_connection_github_connection_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GitHubConnection"},{"type":"null"}],"title":"Response Get Connection Github Connection Get"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]},"delete":{"tags":["github"],"summary":"Delete Connection","operationId":"delete_connection_github_connection_delete","responses":{"204":{"description":"Successful Response"}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/github/oauth/start":{"post":{"tags":["github"],"summary":"Start Oauth","operationId":"start_oauth_github_oauth_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthStartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/github/oauth/callback":{"get":{"tags":["github"],"summary":"Github Oauth Callback","operationId":"github_oauth_callback_github_oauth_callback_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Description"}},{"name":"image_agent_github_oauth","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Agent Github Oauth"}},{"name":"image_agent_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Agent Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/memory":{"get":{"tags":["project-memory"],"summary":"List Project Memory","operationId":"list_project_memory_projects__project_id__memory_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectMemoryIndex"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/memory/files/{path}":{"get":{"tags":["project-memory"],"summary":"Get Project Memory File","operationId":"get_project_memory_file_projects__project_id__memory_files__path__get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectMemoryPayload"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["project-memory"],"summary":"Put Project Memory File","operationId":"put_project_memory_file_projects__project_id__memory_files__path__put","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectMemoryWriteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectMemoryPayload"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["project-memory"],"summary":"Delete Project Memory File","operationId":"delete_project_memory_file_projects__project_id__memory_files__path__delete","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/sites":{"get":{"tags":["sites"],"summary":"列出站点","description":"列出指定 Project 下维护的 URL/codebase 站点。","operationId":"list_project_sites_projects__project_id__sites_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Site"},"title":"Response List Project Sites Projects  Project Id  Sites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sites"],"summary":"创建站点","description":"在 Project 下创建站点配置，用于后续知识构建和 Task 绑定。","operationId":"create_project_site_projects__project_id__sites_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSiteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}":{"get":{"tags":["sites"],"summary":"获取站点","operationId":"get_site_sites__site_id__get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["sites"],"summary":"更新站点","description":"更新站点展示名、来源类型或来源引用。","operationId":"patch_site_sites__site_id__patch","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSiteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sites"],"summary":"删除站点","operationId":"delete_one_site_sites__site_id__delete","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/knowledge":{"get":{"tags":["sites"],"summary":"读取站点知识","operationId":"get_site_knowledge_sites__site_id__knowledge_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["sites"],"summary":"写入站点知识","description":"手动覆盖站点知识 Markdown；自动知识构建请使用知识构建接口。","operationId":"put_site_knowledge_sites__site_id__knowledge_put","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/learnings":{"get":{"tags":["sites"],"summary":"读取站点 learnings","operationId":"get_site_learnings_sites__site_id__learnings_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/identity":{"get":{"tags":["site-identities"],"summary":"Get Site Identity","operationId":"get_site_identity_sites__site_id__identity_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SiteIdentity"},{"type":"null"}],"title":"Response Get Site Identity Sites  Site Id  Identity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["site-identities"],"summary":"Put Site Identity","operationId":"put_site_identity_sites__site_id__identity_put","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertSiteIdentityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteIdentity"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["site-identities"],"summary":"Delete One Site Identity","operationId":"delete_one_site_identity_sites__site_id__identity_delete","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/builds":{"post":{"tags":["knowledge-builds"],"summary":"Start Build","operationId":"start_build_sites__site_id__builds_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartBuildRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["knowledge-builds"],"summary":"List Site Builds","operationId":"list_site_builds_sites__site_id__builds_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KnowledgeBuild"},"title":"Response List Site Builds Sites  Site Id  Builds Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-builds/{build_id}":{"get":{"tags":["knowledge-builds"],"summary":"Get Build","operationId":"get_build_knowledge_builds__build_id__get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","title":"Build Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeBuild"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-builds/{build_id}/logs":{"get":{"tags":["knowledge-builds"],"summary":"Get Build Logs","operationId":"get_build_logs_knowledge_builds__build_id__logs_get","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","title":"Build Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-builds/{build_id}/cancel":{"post":{"tags":["knowledge-builds"],"summary":"Cancel Build","operationId":"cancel_build_knowledge_builds__build_id__cancel_post","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"build_id","in":"path","required":true,"schema":{"type":"string","title":"Build Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeBuild"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/healthz":{"get":{"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdminApiKeyListResponse":{"properties":{"api_keys":{"items":{"$ref":"#/components/schemas/ApiKeyInfo"},"type":"array","title":"Api Keys"}},"type":"object","required":["api_keys"],"title":"AdminApiKeyListResponse"},"AdminCreateApiKeyRequest":{"properties":{"user_id":{"type":"string","title":"User Id","description":"API key owner user_id"},"name":{"type":"string","title":"Name","description":"API key display name","default":"API key"}},"type":"object","required":["user_id"],"title":"AdminCreateApiKeyRequest"},"ApiKeyInfo":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"frozen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Frozen At"}},"type":"object","required":["id","user_id","name","key_prefix","created_at"],"title":"ApiKeyInfo"},"ApiKeyUsageEvent":{"properties":{"id":{"type":"string","title":"Id"},"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"},"api_key_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Prefix"},"api_key_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Name"},"user_id":{"type":"string","title":"User Id"},"task_id":{"type":"string","title":"Task Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"model":{"type":"string","title":"Model"},"provider_model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Model Name"},"runtime_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Runtime Id"},"status":{"type":"string","title":"Status"},"total_cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Usd"},"input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Tokens"},"output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Tokens"},"cache_creation_input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Creation Input Tokens"},"cache_read_input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Read Input Tokens"},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens"},"num_turns":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Turns"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"duration_api_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Api Ms"},"stop_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stop Reason"},"usage":{"additionalProperties":true,"type":"object","title":"Usage"},"model_usage":{"additionalProperties":true,"type":"object","title":"Model Usage"},"recorded_at":{"type":"string","format":"date-time","title":"Recorded At"}},"type":"object","required":["id","user_id","task_id","model","status","usage","model_usage","recorded_at"],"title":"ApiKeyUsageEvent"},"ApiKeyUsageResponse":{"properties":{"summary":{"$ref":"#/components/schemas/ApiKeyUsageSummary"},"events":{"items":{"$ref":"#/components/schemas/ApiKeyUsageEvent"},"type":"array","title":"Events"}},"type":"object","required":["summary","events"],"title":"ApiKeyUsageResponse"},"ApiKeyUsageSummary":{"properties":{"event_count":{"type":"integer","title":"Event Count"},"total_cost_usd":{"type":"number","title":"Total Cost Usd"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"cache_creation_input_tokens":{"type":"integer","title":"Cache Creation Input Tokens"},"cache_read_input_tokens":{"type":"integer","title":"Cache Read Input Tokens"},"total_tokens":{"type":"integer","title":"Total Tokens"}},"type":"object","required":["event_count","total_cost_usd","input_tokens","output_tokens","cache_creation_input_tokens","cache_read_input_tokens","total_tokens"],"title":"ApiKeyUsageSummary"},"ArchiveUploadResponse":{"properties":{"target_path":{"type":"string","title":"Target Path"},"file_count":{"type":"integer","title":"File Count"},"total_bytes":{"type":"integer","title":"Total Bytes"},"skipped_count":{"type":"integer","title":"Skipped Count"}},"type":"object","required":["target_path","file_count","total_bytes","skipped_count"],"title":"ArchiveUploadResponse"},"Body_create_task_tasks_post":{"properties":{"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"},"instruction":{"type":"string","title":"Instruction"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"max_turns":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Turns"},"max_retries":{"type":"integer","title":"Max Retries","default":2},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},"type":"object","required":["instruction"],"title":"Body_create_task_tasks_post"},"Body_upload_archive_projects__project_id__archives_post":{"properties":{"target_path":{"type":"string","title":"Target Path"},"archive":{"type":"string","contentMediaType":"application/octet-stream","title":"Archive"},"preset":{"anyOf":[{"type":"string","const":"codebase"},{"type":"null"}],"title":"Preset"}},"type":"object","required":["target_path","archive"],"title":"Body_upload_archive_projects__project_id__archives_post"},"Body_upload_chat_attachment_projects__project_id__chat_attachments_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_chat_attachment_projects__project_id__chat_attachments_post"},"Body_upload_file_projects__project_id__files_post":{"properties":{"relative_path":{"type":"string","title":"Relative Path"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["relative_path","file"],"title":"Body_upload_file_projects__project_id__files_post"},"BuildCreateResponse":{"properties":{"build_id":{"type":"string","title":"Build Id"},"status":{"$ref":"#/components/schemas/BuildStatus"}},"type":"object","required":["build_id","status"],"title":"BuildCreateResponse"},"BuildMode":{"type":"string","enum":["initial","refine"],"title":"BuildMode"},"BuildStatus":{"type":"string","enum":["pending","queued","running","succeeded","failed","cancelled"],"title":"BuildStatus"},"ChatCreateResponse":{"properties":{"chat_id":{"type":"string","title":"Chat Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["chat_id","status"],"title":"ChatCreateResponse"},"ChatMessage":{"properties":{"role":{"type":"string","enum":["user","assistant","system"],"title":"Role"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["role","content"],"title":"ChatMessage"},"ChatState":{"properties":{"chat_id":{"type":"string","title":"Chat Id"},"user_id":{"type":"string","title":"User Id"},"project_id":{"type":"string","title":"Project Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","enum":["idle","running","failed"],"title":"Status","default":"idle"},"model":{"type":"string","title":"Model","default":"claude-sonnet-4-6"},"max_turns":{"type":"integer","title":"Max Turns","default":80},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"runtime_state":{"additionalProperties":true,"type":"object","title":"Runtime State"},"current_turn":{"type":"integer","title":"Current Turn","default":0},"mode":{"type":"string","enum":["auto","screenshot","document_illustration"],"title":"Mode","default":"auto"},"selected_paths":{"items":{"type":"string"},"type":"array","title":"Selected Paths"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","title":"Messages"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["chat_id","user_id","project_id","title"],"title":"ChatState"},"CreateApiKeyRequest":{"properties":{"name":{"type":"string","title":"Name","description":"API key 名称，仅用于列表展示。","default":"API key"}},"type":"object","title":"CreateApiKeyRequest"},"CreateChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"project_id":{"type":"string","title":"Project Id"},"selected_paths":{"items":{"type":"string"},"type":"array","title":"Selected Paths","default":[]},"mode":{"type":"string","enum":["auto","screenshot","document_illustration"],"title":"Mode","default":"auto"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"max_turns":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Turns"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},"type":"object","required":["message","project_id"],"title":"CreateChatRequest"},"CreateProjectRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["name"],"title":"CreateProjectRequest"},"CreateSiteRequest":{"properties":{"site_key":{"type":"string","title":"Site Key"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"source_type":{"$ref":"#/components/schemas/SiteSourceType","default":"unknown"},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"}},"type":"object","required":["site_key"],"title":"CreateSiteRequest"},"CreatedApiKey":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"frozen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Frozen At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","user_id","name","key_prefix","created_at","key"],"title":"CreatedApiKey"},"CreatedApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"frozen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Frozen At"},"key":{"type":"string","title":"Key","description":"完整 API key 只在创建时返回一次，请立即保存。"}},"type":"object","required":["id","user_id","name","key_prefix","created_at","key"],"title":"CreatedApiKeyResponse"},"DownloadResponse":{"properties":{"local_path":{"type":"string","title":"Local Path"},"project_dir":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Dir"},"uploads_dir":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploads Dir"},"file_count":{"type":"integer","title":"File Count"},"total_bytes":{"type":"integer","title":"Total Bytes"},"downloaded_in_ms":{"type":"integer","title":"Downloaded In Ms"},"skipped":{"type":"boolean","title":"Skipped","default":false}},"type":"object","required":["local_path","file_count","total_bytes","downloaded_in_ms"],"title":"DownloadResponse"},"FileInfo":{"properties":{"path":{"type":"string","title":"Path"},"size":{"type":"integer","title":"Size"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"}},"type":"object","required":["path","size","content_type"],"title":"FileInfo"},"GitHubConnection":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"github_user_id":{"type":"string","title":"Github User Id"},"github_login":{"type":"string","title":"Github Login"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"scope":{"type":"string","title":"Scope","default":""},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","user_id","github_user_id","github_login","created_at","updated_at"],"title":"GitHubConnection"},"GitHubRepositoryImportRequest":{"properties":{"repository":{"type":"string","title":"Repository"},"target_path":{"type":"string","title":"Target Path"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"}},"type":"object","required":["repository","target_path"],"title":"GitHubRepositoryImportRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KnowledgeBuild":{"properties":{"id":{"type":"string","title":"Id"},"site_id":{"type":"string","title":"Site Id"},"project_id":{"type":"string","title":"Project Id"},"user_id":{"type":"string","title":"User Id"},"site_key":{"type":"string","title":"Site Key"},"mode":{"$ref":"#/components/schemas/BuildMode"},"source_type":{"$ref":"#/components/schemas/SiteSourceType"},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"},"status":{"$ref":"#/components/schemas/BuildStatus"},"instruction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instruction"},"model":{"type":"string","title":"Model"},"max_turns":{"type":"integer","title":"Max Turns"},"max_retries":{"type":"integer","title":"Max Retries","default":0},"log_path":{"type":"string","title":"Log Path"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["id","site_id","project_id","user_id","site_key","mode","source_type","status","model","max_turns","log_path","created_at","updated_at"],"title":"KnowledgeBuild"},"KnowledgePayload":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"KnowledgePayload"},"KnowledgeResponse":{"properties":{"site_id":{"type":"string","title":"Site Id"},"site_key":{"type":"string","title":"Site Key"},"source":{"type":"string","title":"Source"},"content":{"type":"string","title":"Content"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["site_id","site_key","source","content"],"title":"KnowledgeResponse"},"KnowledgeStatus":{"type":"string","enum":["empty","building","ready","stale","failed"],"title":"KnowledgeStatus"},"OAuthStartRequest":{"properties":{"return_to":{"type":"string","title":"Return To","default":"/projects"}},"type":"object","title":"OAuthStartRequest"},"OAuthStartResponse":{"properties":{"authorization_url":{"type":"string","title":"Authorization Url"}},"type":"object","required":["authorization_url"],"title":"OAuthStartResponse"},"ProjectFileContentResponse":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"root":{"type":"string","enum":["uploads","tasks","output"],"title":"Root"},"size":{"type":"integer","title":"Size"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"kind":{"type":"string","enum":["markdown","image","text","binary"],"title":"Kind"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"truncated":{"type":"boolean","title":"Truncated","default":false},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["path","name","root","size","updated_at","content_type","kind","download_url"],"title":"ProjectFileContentResponse"},"ProjectFileNode":{"properties":{"name":{"type":"string","title":"Name"},"path":{"type":"string","title":"Path"},"type":{"type":"string","enum":["file","directory"],"title":"Type"},"root":{"type":"string","enum":["uploads","tasks","output"],"title":"Root"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"children":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProjectFileNode"},"type":"array"},{"type":"null"}],"title":"Children"}},"type":"object","required":["name","path","type","root","size","updated_at","content_type"],"title":"ProjectFileNode"},"ProjectFilesResponse":{"properties":{"project_id":{"type":"string","title":"Project Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"file_count":{"type":"integer","title":"File Count"},"total_bytes":{"type":"integer","title":"Total Bytes"},"files":{"items":{"$ref":"#/components/schemas/FileInfo"},"type":"array","title":"Files"}},"type":"object","required":["project_id","name","status","file_count","total_bytes","files"],"title":"ProjectFilesResponse"},"ProjectInfo":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"storage_prefix":{"type":"string","title":"Storage Prefix"},"file_count":{"type":"integer","title":"File Count"},"total_bytes":{"type":"integer","title":"Total Bytes"},"status":{"$ref":"#/components/schemas/ProjectStatus"},"is_default":{"type":"boolean","title":"Is Default","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","user_id","name","storage_prefix","file_count","total_bytes","status","created_at","updated_at"],"title":"ProjectInfo"},"ProjectMemoryFile":{"properties":{"path":{"type":"string","title":"Path"},"size":{"type":"integer","title":"Size"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["path","size","updated_at"],"title":"ProjectMemoryFile"},"ProjectMemoryIndex":{"properties":{"project_id":{"type":"string","title":"Project Id"},"default_path":{"type":"string","title":"Default Path"},"files":{"items":{"$ref":"#/components/schemas/ProjectMemoryFile"},"type":"array","title":"Files"}},"type":"object","required":["project_id","default_path","files"],"title":"ProjectMemoryIndex"},"ProjectMemoryPayload":{"properties":{"path":{"type":"string","title":"Path"},"content":{"type":"string","title":"Content"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["path","content"],"title":"ProjectMemoryPayload"},"ProjectMemoryWriteRequest":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"ProjectMemoryWriteRequest"},"ProjectStatus":{"type":"string","enum":["uploading","ready","failed"],"title":"ProjectStatus"},"SendMessageRequest":{"properties":{"message":{"type":"string","title":"Message"},"selected_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Selected Paths"},"mode":{"anyOf":[{"type":"string","enum":["auto","screenshot","document_illustration"]},{"type":"null"}],"title":"Mode"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},"type":"object","required":["message"],"title":"SendMessageRequest"},"Site":{"properties":{"id":{"type":"string","title":"Id"},"project_id":{"type":"string","title":"Project Id"},"user_id":{"type":"string","title":"User Id"},"site_key":{"type":"string","title":"Site Key"},"display_name":{"type":"string","title":"Display Name"},"source_type":{"$ref":"#/components/schemas/SiteSourceType"},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"},"knowledge_status":{"$ref":"#/components/schemas/KnowledgeStatus"},"latest_build_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Build Id"},"last_built_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Built At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","project_id","user_id","site_key","display_name","source_type","knowledge_status","created_at","updated_at"],"title":"Site"},"SiteIdentity":{"properties":{"id":{"type":"string","title":"Id"},"site_id":{"type":"string","title":"Site Id"},"project_id":{"type":"string","title":"Project Id"},"user_id":{"type":"string","title":"User Id"},"label":{"type":"string","title":"Label","default":"default"},"login_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Login Url"},"username":{"type":"string","title":"Username","default":""},"has_password":{"type":"boolean","title":"Has Password","default":false},"notes":{"type":"string","title":"Notes","default":""},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","site_id","project_id","user_id","created_at","updated_at"],"title":"SiteIdentity"},"SiteSourceType":{"type":"string","enum":["url","codebase","unknown"],"title":"SiteSourceType"},"StartBuildRequest":{"properties":{"mode":{"$ref":"#/components/schemas/BuildMode","default":"initial"},"instruction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instruction"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"max_turns":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Turns"},"max_retries":{"type":"integer","title":"Max Retries","default":2},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"}},"type":"object","title":"StartBuildRequest"},"TaskArtifactContentResponse":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"size":{"type":"integer","title":"Size"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"kind":{"type":"string","enum":["markdown","image","text","binary"],"title":"Kind"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"truncated":{"type":"boolean","title":"Truncated","default":false},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["path","name","size","updated_at","content_type","kind","download_url"],"title":"TaskArtifactContentResponse"},"TaskArtifactNode":{"properties":{"name":{"type":"string","title":"Name"},"path":{"type":"string","title":"Path"},"type":{"type":"string","enum":["file","directory"],"title":"Type"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"children":{"anyOf":[{"items":{"$ref":"#/components/schemas/TaskArtifactNode"},"type":"array"},{"type":"null"}],"title":"Children"}},"type":"object","required":["name","path","type","size","updated_at","content_type"],"title":"TaskArtifactNode"},"TaskCreateResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"$ref":"#/components/schemas/TaskStatus"}},"type":"object","required":["task_id","status"],"title":"TaskCreateResponse"},"TaskStatus":{"type":"string","enum":["pending","queued","running","succeeded","failed","cancelled"],"title":"TaskStatus"},"UpdateProjectRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"UpdateProjectRequest"},"UpdateSiteRequest":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"source_type":{"anyOf":[{"$ref":"#/components/schemas/SiteSourceType"},{"type":"null"}]},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"}},"type":"object","title":"UpdateSiteRequest"},"UpsertSiteIdentityRequest":{"properties":{"label":{"type":"string","title":"Label","default":"default"},"login_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Login Url"},"username":{"type":"string","title":"Username","default":""},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","title":"UpsertSiteIdentityRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}