{"openapi":"3.1.0","info":{"title":"chatagent-platform","summary":"通用跨行业多租户 RAG 聊天智能体平台","description":"多租户 RAG 聊天智能体平台。鉴权分层：`X-Admin-Token`（平台）、`X-API-Key`（租户）、`X-End-User`（代理终端用户）、`Authorization: Bearer <jwt>`（平台登录终端用户）、`X-Act-Tenant`（admin 以租户身份）、可选 `X-Space-Id`。详见管理端「API 文档」页。","version":"0.1.0"},"paths":{"/health":{"get":{"tags":["health"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Health Get"}}}}}}},"/readyz":{"get":{"tags":["health"],"summary":"Readyz","operationId":"readyz_readyz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"tags":["meta"],"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Root  Get"}}}}}}},"/auth/methods":{"get":{"tags":["end-user-auth"],"summary":"Auth Methods","description":"登录页据此决定显示哪些登录方式：只有租户实际启用/配置的才显示。\n\n公开端点（tenant_id 是公开标识）。auth_mode=proxy 的租户没有平台原生登录，\npassword/oauth 都为空。社交按钮只列该租户有有效凭证的 provider（见 oauth.available_providers）。","operationId":"auth_methods_auth_methods_get","parameters":[{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthMethodsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/register":{"post":{"tags":["end-user-auth"],"summary":"Register","operationId":"register_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/verify":{"get":{"tags":["end-user-auth"],"summary":"Verify Email","operationId":"verify_email_auth_verify_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/resend-verification":{"post":{"tags":["end-user-auth"],"summary":"Resend Verification","operationId":"resend_verification_auth_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Resend Verification Auth Resend Verification Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/forgot-password":{"post":{"tags":["end-user-auth"],"summary":"Forgot Password","operationId":"forgot_password_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Forgot Password Auth Forgot Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/reset-password":{"post":{"tags":["end-user-auth"],"summary":"Reset Password","operationId":"reset_password_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Reset Password Auth Reset Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/oauth/{provider}/start":{"get":{"tags":["end-user-auth"],"summary":"Oauth Start","operationId":"oauth_start_auth_oauth__provider__start_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"redirect","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/oauth/{provider}/callback":{"get":{"tags":["end-user-auth"],"summary":"Oauth Callback","operationId":"oauth_callback_auth_oauth__provider__callback_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"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"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"tags":["end-user-auth"],"summary":"Login","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__auth_end_user__LoginIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/stream":{"get":{"tags":["auth","auth"],"summary":"Me Stream","description":"常驻 SSE 通道：服务端把本 (user, space) 的主动推送（如到点的延后跟进）实时下发给网页。\n\n前端用 fetch 读取器带 bearer/X-Space-Id 打开（EventSource 不能带 header）。按配置周期性 ping 保活。","operationId":"me_stream_me_stream_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/me/reminders":{"get":{"tags":["auth","auth"],"summary":"My Reminders","description":"本用户的定时提醒/闹钟（游标分页，最近创建在前；正文不返回）。","operationId":"my_reminders_me_reminders_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyReminderPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/reminders/{rid}/cancel":{"post":{"tags":["auth","auth"],"summary":"Cancel My Reminder","description":"取消本人一个待触发（pending）提醒（保留记录，置为已取消）。","operationId":"cancel_my_reminder_me_reminders__rid__cancel_post","parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/reminders/{rid}":{"delete":{"tags":["auth","auth"],"summary":"Delete My Reminder","description":"彻底删除本人一个提醒（任意状态，从列表移除）。","operationId":"delete_my_reminder_me_reminders__rid__delete","parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me":{"get":{"tags":["auth","auth"],"summary":"Me","operationId":"me_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Me Me Get"}}}}}}},"/me/features":{"get":{"tags":["auth","auth"],"summary":"My Features","description":"客户端能力探测：目前只有 stt（是否可用语音输入 = 存在启用的 stt 后端）。","operationId":"my_features_me_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Response My Features Me Features Get"}}}}}}},"/me/remembered":{"get":{"tags":["auth","auth"],"summary":"My Remembered","description":"看 Agent 记住了我什么。\n\nGDPR 第 15 条（访问权）。注册前的匿名咨询也会以要点摘要的形式结转到这里\n（见 app/chat/handoff.py），用户理应看得到。","operationId":"my_remembered_me_remembered_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MyRememberedOut"},"type":"array","title":"Response My Remembered Me Remembered Get"}}}}}}},"/me/remembered/{agent_name}":{"delete":{"tags":["auth","auth"],"summary":"Forget Me","description":"让 Agent 忘掉关于我的画像。\n\nGDPR 第 17 条（删除权）。**只删画像，不动会话记录**——那是两件事，用户想清掉「你记住的\n我是谁」时，通常并不是要销毁自己的历史对话；会话另有删除入口。","operationId":"forget_me_me_remembered__agent_name__delete","parameters":[{"name":"agent_name","in":"path","required":true,"schema":{"type":"string","title":"Agent Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/profile":{"get":{"tags":["auth","auth"],"summary":"My Profile","description":"本用户的称呼/联系方式/城市/时区偏好；附上按当前 IP 检测到的建议值（best-effort）。","operationId":"my_profile_me_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyProfileOut"}}}}}},"patch":{"tags":["auth","auth"],"summary":"Update My Profile","description":"设置称呼/联系方式/城市/时区；空串或 null 清空。邮箱/电话字段级加密存。","operationId":"update_my_profile_me_profile_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyProfileIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/agents":{"get":{"tags":["auth","auth"],"summary":"My Available Agents","description":"本租户已发布的 agent（可加入空间对话的候选）。","operationId":"my_available_agents_me_agents_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response My Available Agents Me Agents Get"}}}}}}},"/me/spaces":{"get":{"tags":["auth","auth"],"summary":"My Spaces","operationId":"my_spaces_me_spaces_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MySpaceOut"},"type":"array","title":"Response My Spaces Me Spaces Get"}}}}}},"post":{"tags":["auth","auth"],"summary":"Create My Space","operationId":"create_my_space_me_spaces_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MySpaceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/spaces/{sid}":{"patch":{"tags":["auth","auth"],"summary":"Rename My Space","operationId":"rename_my_space_me_spaces__sid__patch","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MySpaceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["auth","auth"],"summary":"Delete My Space","operationId":"delete_my_space_me_spaces__sid__delete","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/spaces/{sid}/merge":{"post":{"tags":["auth","auth"],"summary":"Merge My Space","description":"把 sid 空间下的所有数据迁入 target 空间后删除 sid。\n\n内容按 (user, space) 字段级加密（space_id 参与 AAD），迁移需**逐条重加密**到目标空间的 space_id。\n整个操作在一个事务内；任一步失败则回滚，不会损坏数据。","operationId":"merge_my_space_me_spaces__sid__merge_post","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceMergeIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/spaces/{sid}/agents":{"post":{"tags":["auth","auth"],"summary":"Add My Space Agent","operationId":"add_my_space_agent_me_spaces__sid__agents_post","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceAgentIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response Add My Space Agent Me Spaces  Sid  Agents Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/spaces/{sid}/agents/{name}":{"delete":{"tags":["auth","auth"],"summary":"Remove My Space Agent","operationId":"remove_my_space_agent_me_spaces__sid__agents__name__delete","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/spaces/{sid}/sessions":{"get":{"tags":["auth","auth"],"summary":"My Space Sessions","description":"本用户在某空间的会话列表（最新在前，游标分页——历史很长时懒加载）。","operationId":"my_space_sessions_me_spaces__sid__sessions_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MySessionPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/sessions/{sid}":{"patch":{"tags":["auth","auth"],"summary":"Rename My Session","description":"用户手动重命名会话；置 title_by_user=True 后 AI 不再自动覆盖（见 docs/18）。","operationId":"rename_my_session_me_sessions__sid__patch","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionTitleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MySessionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["auth","auth"],"summary":"Delete My Session","description":"删除本用户的一个会话（级联清其消息与附件）。","operationId":"delete_my_session_me_sessions__sid__delete","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/sessions/{sid}/messages/{mid}":{"delete":{"tags":["auth","auth"],"summary":"Delete My Message","description":"删除本用户某会话里的单条消息（避免不必要的上下文污染）。","operationId":"delete_my_message_me_sessions__sid__messages__mid__delete","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["auth","auth"],"summary":"Edit My Message","description":"编辑本用户某条消息的正文（重新加密存储）。若编辑的是用户消息，后台按新内容重提取派生记忆。","operationId":"edit_my_message_me_sessions__sid__messages__mid__patch","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageEditIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyMessageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/sessions/{sid}/messages/{mid}/branch":{"post":{"tags":["auth","auth"],"summary":"Branch My Session","description":"从某条消息处分叉：新建会话，复制该会话里【截至这条消息（含）】的所有消息。","operationId":"branch_my_session_me_sessions__sid__messages__mid__branch_post","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MySessionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/sessions/{sid}/messages":{"get":{"tags":["auth","auth"],"summary":"My Session Messages","description":"本用户某会话的消息（时序，解密自己的内容）。","operationId":"my_session_messages_me_sessions__sid__messages_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MyMessageOut"},"title":"Response My Session Messages Me Sessions  Sid  Messages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/sessions/{sid}/attachments":{"get":{"tags":["auth","auth"],"summary":"My Session Attachments","description":"本用户某会话的图片附件（时序，仅元信息；原图经 /me/attachments/{id} 解密取回）。","operationId":"my_session_attachments_me_sessions__sid__attachments_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MyAttachmentOut"},"title":"Response My Session Attachments Me Sessions  Sid  Attachments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/attachments/{aid}":{"get":{"tags":["auth","auth"],"summary":"My Attachment Blob","description":"解密并回传本用户的附件原图（按 owner 校验）。","operationId":"my_attachment_blob_me_attachments__aid__get","parameters":[{"name":"aid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Aid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/telegram/bind-code":{"post":{"tags":["auth","auth"],"summary":"Create Tg Bind Code","description":"为当前登录用户签发一次性绑定码 + 二维码深链，用于扫码把 Telegram 关联到本账号。","operationId":"create_tg_bind_code_me_telegram_bind_code_post","parameters":[{"name":"agent","in":"query","required":true,"schema":{"type":"string","title":"Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TgBindOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/telegram/status":{"get":{"tags":["auth","auth"],"summary":"Tg Status","operationId":"tg_status_me_telegram_status_get","parameters":[{"name":"agent","in":"query","required":true,"schema":{"type":"string","title":"Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TgStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/telegram/binding":{"delete":{"tags":["auth","auth"],"summary":"Tg Unbind","description":"解绑：删除指向本账号的 Telegram 身份（对方下次发消息会回落为匿名 telegram:<id>）。","operationId":"tg_unbind_me_telegram_binding_delete","responses":{"204":{"description":"Successful Response"}}}},"/me/whatsapp/bind-code":{"post":{"tags":["auth","auth"],"summary":"Create Wa Bind Code","operationId":"create_wa_bind_code_me_whatsapp_bind_code_post","parameters":[{"name":"agent","in":"query","required":true,"schema":{"type":"string","title":"Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaBindOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/whatsapp/status":{"get":{"tags":["auth","auth"],"summary":"Wa Bind Status","operationId":"wa_bind_status_me_whatsapp_status_get","parameters":[{"name":"agent","in":"query","required":true,"schema":{"type":"string","title":"Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaBindStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/whatsapp/binding":{"delete":{"tags":["auth","auth"],"summary":"Wa Unbind","operationId":"wa_unbind_me_whatsapp_binding_delete","responses":{"204":{"description":"Successful Response"}}}},"/me/documents":{"get":{"tags":["auth","me"],"summary":"List My Documents","description":"当前空间内我上传的文档。空间是隔离边界（X-Space-Id / 默认空间），不跨空间列。\n\n`tag`：按标签过滤（JSONB 包含；标签是明文组织元数据，故可以 SQL 过滤）。","operationId":"list_my_documents_me_documents_get","parameters":[{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MyDocOut"},"title":"Response List My Documents Me Documents Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/documents/{doc_id}/tags":{"patch":{"tags":["auth","me"],"summary":"Set My Document Tags","description":"改自己文档的标签（整组替换；normalize 见 app/tags）。","operationId":"set_my_document_tags_me_documents__doc_id__tags_patch","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/documents/{doc_id}/reingest":{"post":{"tags":["auth","me"],"summary":"Reingest My Document","description":"重试入库：用已存的加密正文重跑嵌入，无需重新上传。置 pending 并后台跑（见 rag/ingest）。\n\n针对被重启打断/嵌入失败的文档。若正文本就为空（扫描件/纯图片 PDF），重试仍会落 error。","operationId":"reingest_my_document_me_documents__doc_id__reingest_post","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/documents/{doc_id}":{"delete":{"tags":["auth","me"],"summary":"Delete My Document","description":"删自己空间里的文档。chunks 由 FK CASCADE 带走；渗入记忆的衍生内容先回收（docs/28）。","operationId":"delete_my_document_me_documents__doc_id__delete","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/documents/{doc_id}/detail":{"get":{"tags":["auth","me"],"summary":"My Document Detail","description":"这份文档产出了什么：切片（带预览）+ 抽出的实体（带在本文档的提及次数）。","operationId":"my_document_detail_me_documents__doc_id__detail_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyDocDetailOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/memories":{"get":{"tags":["auth","me"],"summary":"List My Memories","description":"当前空间从我的对话中派生出的长期记忆。按重要性+最近性排序（同管理端）。","operationId":"list_my_memories_me_memories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MyMemoryOut"},"type":"array","title":"Response List My Memories Me Memories Get"}}}}}}},"/me/memories/{mid}":{"delete":{"tags":["auth","me"],"summary":"Delete My Memory","description":"删掉一条自己的记忆（不想让 AI 记住的东西，用户自己就能清）。","operationId":"delete_my_memory_me_memories__mid__delete","parameters":[{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/graph":{"get":{"tags":["auth","me"],"summary":"My Knowledge Graph","description":"我的知识星云。两种视图（前端切换，见 docs/35）：\n\n- `chunks`（默认）：投用户上传文档的切片，父节点=文档（原行为）。\n- `entities`：投抽出的实体，节点=实体（按类型标注）、边=同一 chunk 共现。\n\n范围锁死本空间：聊天记忆不进（有自己的 tab）、租户 KB 不进（另一暴露级别）。","operationId":"my_knowledge_graph_me_graph_get","parameters":[{"name":"mode","in":"query","required":false,"schema":{"type":"string","default":"chunks","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response My Knowledge Graph Me Graph Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/debug/stream":{"get":{"tags":["admin"],"summary":"Debug Stream","description":"管理台实时调试日志流（SSE）：每个请求的输入/输出、记忆召回、工具调用、后端路由等。\n\n平台 admin 可看全部；带 `?tenant=<id>`（或管理台的 X-Act-Tenant）则只看该租户。","operationId":"debug_stream_admin_debug_stream_get","parameters":[{"name":"tenant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant"}},{"name":"x-act-tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Act-Tenant"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants":{"post":{"tags":["admin"],"summary":"Create Tenant Endpoint","operationId":"create_tenant_endpoint_admin_tenants_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTenantIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTenantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin"],"summary":"List Tenants","description":"每租户摘要（含用户/Agent/消息/文档计数）。sort=newest|oldest|users|messages|documents。\n\n`q`：按**名字 / 别名 / UUID** 模糊搜索——管理员手上拿到的可能是任意一种，\n让他先想清楚\"这串是什么\"再选对应的框，是没必要的负担。\n\n按聚合列排序 → 用 offset 分页（cursor 为不透明 offset）；租户数量适中，性能可接受。","operationId":"list_tenants_admin_tenants_get","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"newest","title":"Sort"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}":{"get":{"tags":["admin"],"summary":"Get Tenant","operationId":"get_tenant_admin_tenants__tid__get","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin"],"summary":"Patch Tenant","operationId":"patch_tenant_admin_tenants__tid__patch","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Tenant","operationId":"delete_tenant_admin_tenants__tid__delete","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}/keys":{"get":{"tags":["admin"],"summary":"List Keys","operationId":"list_keys_admin_tenants__tid__keys_get","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyOut"},"title":"Response List Keys Admin Tenants  Tid  Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Issue Key","operationId":"issue_key_admin_tenants__tid__keys_post","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuedKeyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}/keys/{kid}/revoke":{"post":{"tags":["admin"],"summary":"Revoke Key","operationId":"revoke_key_admin_tenants__tid__keys__kid__revoke_post","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}},{"name":"kid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Kid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}/keys/{kid}":{"delete":{"tags":["admin"],"summary":"Delete Key","description":"软删除一把**已撤销**的 Key：从列表隐藏，行仍留库（审计可追）。\n\n只允许删已撤销的——避免用\"删除\"绕过撤销语义把一把仍有效的 key 从视野里抹掉。\n鉴权本就先看 revoked，故被软删的 key 依旧被拒（见 app/auth/principal.py）。","operationId":"delete_key_admin_tenants__tid__keys__kid__delete","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}},{"name":"kid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Kid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}/accounts":{"get":{"tags":["admin"],"summary":"List Accounts","operationId":"list_accounts_admin_tenants__tid__accounts_get","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TenantAccountOut"},"title":"Response List Accounts Admin Tenants  Tid  Accounts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Add Account","operationId":"add_account_admin_tenants__tid__accounts_post","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantAccountOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}/accounts/{aid}/password":{"post":{"tags":["admin"],"summary":"Reset Account Password","description":"管理员重置某租户账号的密码（租户方忘记密码时的兜底）。\n\n**不校验旧密码**——这是管理员的越权重置，不是用户自助改密（那条在 /console/change-password）。","operationId":"reset_account_password_admin_tenants__tid__accounts__aid__password_post","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}},{"name":"aid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Aid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPasswordIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}/accounts/{aid}":{"delete":{"tags":["admin"],"summary":"Delete Account","operationId":"delete_account_admin_tenants__tid__accounts__aid__delete","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}},{"name":"aid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Aid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}/oauth":{"get":{"tags":["admin"],"summary":"List Oauth","operationId":"list_oauth_admin_tenants__tid__oauth_get","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OauthProviderOut"},"title":"Response List Oauth Admin Tenants  Tid  Oauth Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tenants/{tid}/oauth/{provider}":{"put":{"tags":["admin"],"summary":"Set Oauth","operationId":"set_oauth_admin_tenants__tid__oauth__provider__put","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OauthCredIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Oauth","operationId":"delete_oauth_admin_tenants__tid__oauth__provider__delete","parameters":[{"name":"tid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tid"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/overview":{"get":{"tags":["admin"],"summary":"Overview","operationId":"overview_admin_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OverviewOut"}}}}}}},"/admin/audit":{"get":{"tags":["admin"],"summary":"Audit","description":"游标分页（keyset：按 (created_at, id) 降序）。next_cursor 非空则可继续加载。","operationId":"audit_admin_audit_get","parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/models":{"get":{"tags":["admin"],"summary":"List Models","operationId":"list_models_admin_models_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelBackendOut"},"title":"Response List Models Admin Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Model","operationId":"create_model_admin_models_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBackendIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBackendOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/models/fetch-models":{"post":{"tags":["admin"],"summary":"Fetch Models","description":"据 base_url + api_key 探测远端 /v1/models，返回可选模型 id + 推断的类型。\n\naudio.cpp（OpenAI 兼容的 /v1/models + /v1/audio/{speech,transcriptions}）会在模型条目带\n`task`（tts/asr），据此自动分类 stt/tts；缺失则按 id 关键词启发，仍不确定则留空由人工选。","operationId":"fetch_models_admin_models_fetch_models_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchModelsIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchModelsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/models/{mid}":{"get":{"tags":["admin"],"summary":"Get Model","operationId":"get_model_admin_models__mid__get","parameters":[{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBackendOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin"],"summary":"Patch Model","operationId":"patch_model_admin_models__mid__patch","parameters":[{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBackendPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBackendOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Model","operationId":"delete_model_admin_models__mid__delete","parameters":[{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/models/{mid}/test":{"post":{"tags":["admin"],"summary":"Test Model","description":"用该后端凭证探测 /v1/models，校验 model 是否存在，缓存 status/last_error/last_checked_at。","operationId":"test_model_admin_models__mid__test_post","parameters":[{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBackendOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/models/usage/by-server":{"get":{"tags":["admin"],"summary":"Usage By Server","description":"每 LLM 后端 server 的 token 汇总 + 已分配会话数（负载监看）。","operationId":"usage_by_server_admin_models_usage_by_server_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ServerUsageRow"},"type":"array","title":"Response Usage By Server Admin Models Usage By Server Get"}}}}}}},"/admin/models/usage/daily":{"get":{"tags":["admin"],"summary":"Usage Daily","description":"每 server 的 token 消耗时间序列（供折线图）。hours>0 按小时分桶（近 N 小时），否则按天；kind 过滤后端类型。\n\n返回**连续的**桶序列：无数据的时段补 0 占位而非跳过——否则折线图上等宽的一段可能代表 1 小时也可能\n代表 9 小时，横轴失去时间意义。","operationId":"usage_daily_admin_models_usage_daily_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Hours"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyUsageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenant/settings":{"get":{"tags":["tenant"],"summary":"Get Settings Ep","operationId":"get_settings_ep_tenant_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantSettingsOut"}}}}}},"patch":{"tags":["tenant"],"summary":"Patch Settings Ep","operationId":"patch_settings_ep_tenant_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantSettingsPatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantSettingsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenant/quota":{"get":{"tags":["tenant"],"summary":"Get Quota Ep","description":"本租户配额消耗快照（供控制台警告横幅 + 进度条，见 docs/36）。租户只读，配额由平台/agent4.io 设。","operationId":"get_quota_ep_tenant_quota_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Quota Ep Tenant Quota Get"}}}}}}},"/tenant/settings/smtp":{"put":{"tags":["tenant"],"summary":"Set Smtp Ep","description":"设置租户级 SMTP 发信配置（密码平台 KEK 封装）。host 留空=清空（回落平台全局）。","operationId":"set_smtp_ep_tenant_settings_smtp_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmtpIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantSettingsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenant/settings/smtp/test":{"post":{"tags":["tenant"],"summary":"Test Smtp Ep","description":"用当前租户 SMTP 发一封测试邮件到 `to`。未配则走平台全局（或 dev-log）。","operationId":"test_smtp_ep_tenant_settings_smtp_test_post","parameters":[{"name":"to","in":"query","required":true,"schema":{"type":"string","title":"To"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenant/oauth/{provider}":{"put":{"tags":["tenant"],"summary":"Set Oauth Ep","operationId":"set_oauth_ep_tenant_oauth__provider__put","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OauthCredIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tenant"],"summary":"Delete Oauth Ep","operationId":"delete_oauth_ep_tenant_oauth__provider__delete","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenant/oauth/{provider}/enabled":{"put":{"tags":["tenant"],"summary":"Set Oauth Enabled Ep","description":"显式开/关某个社交登录（与「有没有填凭证」解耦）。\n\n关掉后即使平台有默认 OAuth 应用，登录页也不显示该按钮——租户得能自己决定给不给用，\n而不是\"平台配了就一定出现\"。","operationId":"set_oauth_enabled_ep_tenant_oauth__provider__enabled_put","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OauthEnabledIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenant/keys":{"get":{"tags":["tenant"],"summary":"List My Keys","description":"本租户的 API Key 列表（仅元数据，永不回明文）。","operationId":"list_my_keys_tenant_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKeyOut"},"type":"array","title":"Response List My Keys Tenant Keys Get"}}}}}},"post":{"tags":["tenant"],"summary":"Issue My Key","description":"为本租户生成一把新 API Key（明文仅此刻返回一次）。","operationId":"issue_my_key_tenant_keys_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuedKeyOut"}}}}}}},"/tenant/keys/{kid}/revoke":{"post":{"tags":["tenant"],"summary":"Revoke My Key","description":"撤销本租户的一把 API Key。禁止撤销最后一把有效 key（避免自锁死）。","operationId":"revoke_my_key_tenant_keys__kid__revoke_post","parameters":[{"name":"kid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Kid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenant/me":{"get":{"tags":["tenant"],"summary":"Tenant Me","description":"当前租户身份（供管理端显示租户 ID / 名称）。鉴权 X-API-Key 或 admin+X-Act-Tenant。","operationId":"tenant_me_tenant_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantMeOut"}}}}}}},"/tenant/privacy":{"get":{"tags":["tenant"],"summary":"Get Privacy","operationId":"get_privacy_tenant_privacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ByokOut"}}}}}},"put":{"tags":["tenant"],"summary":"Set Privacy","operationId":"set_privacy_tenant_privacy_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ByokIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ByokOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenant/settings/logo":{"post":{"tags":["tenant"],"summary":"Upload Brand Logo","description":"上传登录页 Logo：存 blob，profile.login_logo 指向公开流式端点。\n\n带时间戳 `?v=` 破缓存——公开端点缓存了一天，换 Logo 后 URL 要变才刷新。","operationId":"upload_brand_logo_tenant_settings_logo_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_brand_logo_tenant_settings_logo_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Brand Logo Tenant Settings Logo Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/t/{alias}":{"get":{"tags":["tenant-page"],"summary":"Tenant Login Page","description":"租户品牌登录页。别名解析不到 / 租户停用 → 404。","operationId":"tenant_login_page_t__alias__get","parameters":[{"name":"alias","in":"path","required":true,"schema":{"type":"string","title":"Alias"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/t/{alias}/{agent_ref}":{"get":{"tags":["tenant-page"],"summary":"Tenant Agent Page","description":"某个 agent 的人类可读整页对话：`chat.agent4.io/t/{租户别名}/{agent 别名}`。\n\n只暴露主人**显式设了别名**的 agent（resolve_agent_by_alias 不回落 name）。首次访问时若该\nagent 还没有可用的分享链接，就懒建一个匿名分享——别名本身即\"我要公开分享它\"的意图，这样\n这条链接对已设别名的 agent 永远可用，而不会因为忘了先建分享而 404。之后复用同一个令牌。","operationId":"tenant_agent_page_t__alias___agent_ref__get","parameters":[{"name":"alias","in":"path","required":true,"schema":{"type":"string","title":"Alias"}},{"name":"agent_ref","in":"path","required":true,"schema":{"type":"string","title":"Agent Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brand/{tenant_id}/logo":{"get":{"tags":["tenant-page"],"summary":"Tenant Logo","description":"公开流式租户上传的 Logo（登录页 <img> 用）。未上传 → 404。","operationId":"tenant_logo_brand__tenant_id__logo_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/img/{tenant_id}/{image_id}":{"get":{"tags":["tenant-page"],"summary":"Tenant Image","description":"公开流式租户上传的商品图（挂件里给访客看的 <img>）。仿 Logo：公开、不加密。\n\nid 是随机 UUID、不可枚举，且校验 image.tenant_id 与路径一致，防跨租户猜取。图片内容不加密\n——它本就要挂在租户聊天里公开展示（见 TenantImage 的说明）。内容按 blob_ref 不可变，长缓存。","operationId":"tenant_image_img__tenant_id___image_id__get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"image_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Image Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents":{"get":{"tags":["agents"],"summary":"List Tenant Agents","operationId":"list_tenant_agents_agents_get","parameters":[{"name":"published","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Published"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentSummary"},"title":"Response List Tenant Agents Agents Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}":{"get":{"tags":["agents"],"summary":"Get Agent","operationId":"get_agent_agents__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["agents"],"summary":"Create Agent","operationId":"create_agent_agents__name__post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["agents"],"summary":"Update Agent","operationId":"update_agent_agents__name__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["agents"],"summary":"Patch Agent","description":"局部更新：只写请求里出现过的字段，其余原样留着。\n\n404 而不是「创建一个」：PATCH 一个不存在的对象是调用方弄错了名字，替他建一个空壳只会让\n那个错误更晚才被发现。","operationId":"patch_agent_agents__name__patch","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agents"],"summary":"Remove Agent","operationId":"remove_agent_agents__name__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/import":{"post":{"tags":["agents"],"summary":"Import Agent","description":"导入一份导出的 Agent JSON，落成一个未发布的 Agent。版本号感知；名字冲突自动改名。","operationId":"import_agent_agents_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentImportIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/clone":{"post":{"tags":["agents"],"summary":"Clone Agent","description":"从现有 Agent 复制一个未发布的副本，供改动微调（也可复制内置 Agent 成一份可编辑的）。","operationId":"clone_agent_agents__name__clone_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/export":{"get":{"tags":["agents"],"summary":"Export Agent","description":"导出一份可移植的 Agent JSON（不含租户/别名/发布态），供备份或迁移。","operationId":"export_agent_agents__name__export_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentExport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/alias":{"get":{"tags":["agents"],"summary":"Get Agent Alias","operationId":"get_agent_alias_agents__name__alias_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentAliasOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["agents"],"summary":"Set Agent Alias","description":"设置或清除 agent 别名。校验 + 租户内查重（撞车 409，不合法 400）。\n\n刻意不走 upsert_agent：别名是路由属性、不进修订快照，混进整体替换只会招来\"PUT 静默清字段\"\n那类 bug。","operationId":"set_agent_alias_agents__name__alias_put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentAliasIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentAliasOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/revisions":{"get":{"tags":["agents"],"summary":"List Agent Revisions","description":"这个 Agent 的历史，最新在前。第一条就是当前状态（快照记的是写入之后）。","operationId":"list_agent_revisions_agents__name__revisions_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/app__api__agents__RevisionOut"},"title":"Response List Agent Revisions Agents  Name  Revisions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/revisions/{rev_id}/restore":{"post":{"tags":["agents"],"summary":"Restore Agent Revision","description":"把 Agent 变回某一条修订的样子。\n\n恢复本身也是一次写入，所以它自己也会产生一条修订——撤销是可撤销的。这不是巧合，是把\n记录挂在 upsert 漏斗上的直接结果。","operationId":"restore_agent_revision_agents__name__revisions__rev_id__restore_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"rev_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rev Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/shares":{"post":{"tags":["agents"],"summary":"Create Agent Share","operationId":"create_agent_share_agents__name__shares_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["agents"],"summary":"List Agent Shares","operationId":"list_agent_shares_agents__name__shares_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShareOut"},"title":"Response List Agent Shares Agents  Name  Shares Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/shares/{token}":{"patch":{"tags":["agents"],"summary":"Update Agent Share","operationId":"update_agent_share_agents__name__shares__token__patch","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agents"],"summary":"Revoke Agent Share","operationId":"revoke_agent_share_agents__name__shares__token__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"purge","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Purge"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/shares/{token}/secret":{"post":{"tags":["agents"],"summary":"Rotate Share Secret","description":"（重新）签发 host_session 集成密钥：明文仅本次返回，服务端只存密文。","operationId":"rotate_share_secret_agents__name__shares__token__secret_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/improve-prompt":{"post":{"tags":["assist"],"summary":"Improve Prompt Endpoint","operationId":"improve_prompt_endpoint_assist_improve_prompt_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImprovePromptIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImprovePromptOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/diagnose-prompt":{"post":{"tags":["assist"],"summary":"Diagnose Prompt Endpoint","operationId":"diagnose_prompt_endpoint_assist_diagnose_prompt_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiagnosePromptIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiagnosePromptOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/skills":{"get":{"tags":["skills"],"summary":"List Tenant Skills","operationId":"list_tenant_skills_skills_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SkillOut"},"type":"array","title":"Response List Tenant Skills Skills Get"}}}}}}},"/skills/{name}":{"get":{"tags":["skills"],"summary":"Get Skill","operationId":"get_skill_skills__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["skills"],"summary":"Create Skill","operationId":"create_skill_skills__name__post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["skills"],"summary":"Update Skill","operationId":"update_skill_skills__name__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["skills"],"summary":"Patch Skill","description":"局部更新。404 而不是创建：PATCH 一个不存在的技能是名字写错了。","operationId":"patch_skill_skills__name__patch","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["skills"],"summary":"Remove Skill","operationId":"remove_skill_skills__name__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/skills/{name}/revisions":{"get":{"tags":["skills"],"summary":"List Skill Revisions","operationId":"list_skill_revisions_skills__name__revisions_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SkillRevisionOut"},"title":"Response List Skill Revisions Skills  Name  Revisions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/skills/{name}/revisions/{rev_id}/restore":{"post":{"tags":["skills"],"summary":"Restore Skill Revision","operationId":"restore_skill_revision_skills__name__revisions__rev_id__restore_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"rev_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rev Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines":{"get":{"tags":["storylines"],"summary":"List Storylines","operationId":"list_storylines_storylines_get","parameters":[{"name":"agent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StorylineOut"},"title":"Response List Storylines Storylines Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["storylines"],"summary":"Create Storyline","operationId":"create_storyline_storylines_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}":{"get":{"tags":["storylines"],"summary":"Get Storyline","operationId":"get_storyline_storylines__storyline_id__get","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["storylines"],"summary":"Update Storyline","operationId":"update_storyline_storylines__storyline_id__put","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["storylines"],"summary":"Delete Storyline","operationId":"delete_storyline_storylines__storyline_id__delete","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/clone":{"post":{"tags":["storylines"],"summary":"Clone Storyline","description":"从一条现有故事线复制出一份**草稿**副本，供改动微调。副本不抢默认、不带串联指向。","operationId":"clone_storyline_storylines__storyline_id__clone_post","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/export":{"get":{"tags":["storylines"],"summary":"Export Storyline","description":"导出一份可移植的故事线 JSON（不含租户/版本/revision/串联 id），供备份或迁移。","operationId":"export_storyline_storylines__storyline_id__export_get","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineExport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/import":{"post":{"tags":["storylines"],"summary":"Import Storyline","description":"导入一份导出的故事线 JSON，落成一条**草稿**。版本号感知：高于系统支持的版本拒绝，\n低版本可在此按需迁移（当前只有 v1，无需迁移）。始终新建、不抢默认、key 冲突自动改名。","operationId":"import_storyline_storylines_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineImportIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/validate":{"post":{"tags":["storylines"],"summary":"Validate Storyline","operationId":"validate_storyline_storylines__storyline_id__validate_post","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/publish":{"post":{"tags":["storylines"],"summary":"Publish Storyline","operationId":"publish_storyline_storylines__storyline_id__publish_post","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/unpublish":{"post":{"tags":["storylines"],"summary":"Unpublish Storyline","description":"下线（归档）：不再自动入线，在途用户下一轮静默降级为普通 Agent（进度保留，重新发布可续）。","operationId":"unpublish_storyline_storylines__storyline_id__unpublish_post","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorylineOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/revisions":{"get":{"tags":["storylines"],"summary":"List Revisions","operationId":"list_revisions_storylines__storyline_id__revisions_get","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/app__api__storylines__RevisionOut"},"title":"Response List Revisions Storylines  Storyline Id  Revisions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/enrollments":{"get":{"tags":["storylines"],"summary":"List Enrollments","description":"在途学员列表（含 user_id 以便运营点进用户详情；不含 blackboard/正文）。按 tenant 校验故事线归属。","operationId":"list_enrollments_storylines__storyline_id__enrollments_get","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EnrollmentOut"},"title":"Response List Enrollments Storylines  Storyline Id  Enrollments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/funnel":{"get":{"tags":["storylines"],"summary":"Storyline Funnel","description":"节点漏斗：历史 enter/exit/complete（来自聚合埋点，不记用户）+ 当前各节点停留人数。","operationId":"storyline_funnel_storylines__storyline_id__funnel_get","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storylines/{storyline_id}/enrollments/migrate":{"post":{"tags":["storylines"],"summary":"Migrate Enrollments","description":"批量处置在途学员（细则 5）：move 迁到指定节点 / reset 打回入口 / abandon 作废。\n\nreset/abandon 会丢学员进度——UI 侧强制二次确认；此处只执行。跨用户，靠 storyline_id 归属校验隔离。","operationId":"migrate_enrollments_storylines__storyline_id__enrollments_migrate_post","parameters":[{"name":"storyline_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Storyline Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Migrate Enrollments Storylines  Storyline Id  Enrollments Migrate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/storyline/callback":{"post":{"tags":["storylines"],"summary":"Storyline Callback","description":"第三方（教学评测 / 嵌入小游戏）回传结构化反馈。带外到达，故自建会话 + set_rls_context。","operationId":"storyline_callback_storyline_callback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallbackIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Storyline Callback Storyline Callback Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases":{"get":{"tags":["knowledge-bases"],"summary":"List Tenant Kbs","operationId":"list_tenant_kbs_knowledge_bases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/KbOut"},"type":"array","title":"Response List Tenant Kbs Knowledge Bases Get"}}}}}}},"/knowledge-bases/{name}":{"get":{"tags":["knowledge-bases"],"summary":"Get Tenant Kb","operationId":"get_tenant_kb_knowledge_bases__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["knowledge-bases"],"summary":"Create Kb","operationId":"create_kb_knowledge_bases__name__post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["knowledge-bases"],"summary":"Update Kb","operationId":"update_kb_knowledge_bases__name__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["knowledge-bases"],"summary":"Remove Kb","operationId":"remove_kb_knowledge_bases__name__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases/{name}/documents":{"get":{"tags":["knowledge-bases"],"summary":"List Documents","operationId":"list_documents_knowledge_bases__name__documents_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KbDocOut"},"title":"Response List Documents Knowledge Bases  Name  Documents Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["knowledge-bases"],"summary":"Add Text Document","operationId":"add_text_document_knowledge_bases__name__documents_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbTextIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbIngestOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases/{name}/documents/upload":{"post":{"tags":["knowledge-bases"],"summary":"Upload Kb Document","description":"上传文件入库：txt/md/html/pdf/docx。切片/嵌入**同步**完成（与用户级的后台入库不同）。\n\n租户 KB 是管理员低频的运维动作，不是终端用户的交互路径——同步返回真实块数比\"先返回再后台跑\"\n对管理员更有用（传完就知道成没成，不必再刷新看状态）。","operationId":"upload_kb_document_knowledge_bases__name__documents_upload_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_kb_document_knowledge_bases__name__documents_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbIngestOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases/{name}/documents/{doc_id}/tags":{"patch":{"tags":["knowledge-bases"],"summary":"Set Kb Document Tags","description":"改 KB 文档的标签（整组替换；normalize 见 app/tags）。","operationId":"set_kb_document_tags_knowledge_bases__name__documents__doc_id__tags_patch","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbTagsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases/{name}/documents/{doc_id}":{"delete":{"tags":["knowledge-bases"],"summary":"Remove Kb Document","operationId":"remove_kb_document_knowledge_bases__name__documents__doc_id__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases/{name}/search":{"post":{"tags":["knowledge-bases"],"summary":"Search Kb","description":"按该 KB 检索（管理员自测用：验证阈值与切片是否合理）。走与对话完全相同的检索路径。","operationId":"search_kb_knowledge_bases__name__search_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbSearchIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KbSearchHit"},"title":"Response Search Kb Knowledge Bases  Name  Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/images":{"post":{"tags":["catalog"],"summary":"Upload Image","description":"上传一张商品图：存 blob（公开、不加密），返回可直接放进商品的绝对/相对 URL。","operationId":"upload_image_images_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_image_images_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Image Images Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases/{name}/products":{"get":{"tags":["catalog"],"summary":"Get Products","operationId":"get_products_knowledge_bases__name__products_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductOut"},"title":"Response Get Products Knowledge Bases  Name  Products Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["catalog"],"summary":"Create Product","operationId":"create_product_knowledge_bases__name__products_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases/{name}/products/{product_id}":{"put":{"tags":["catalog"],"summary":"Update Product","operationId":"update_product_knowledge_bases__name__products__product_id__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["catalog"],"summary":"Remove Product","operationId":"remove_product_knowledge_bases__name__products__product_id__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/knowledge-bases/{name}/products/import":{"post":{"tags":["catalog"],"summary":"Import Feed","description":"从 Google Shopping 风格的 Feed 批量导入/更新商品（按 external_id 去重）。文件或 URL 二选一。","operationId":"import_feed_knowledge_bases__name__products_import_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_feed_knowledge_bases__name__products_import_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Import Feed Knowledge Bases  Name  Products Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/sessions/{sid}/attachments":{"get":{"tags":["case-attachments"],"summary":"Session Attachments","description":"某会话里访客上传的附件（时序，仅元信息；内容经 /manage/attachments/{id} 取回）。","operationId":"session_attachments_manage_sessions__sid__attachments_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentOut"},"title":"Response Session Attachments Manage Sessions  Sid  Attachments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/attachments/{aid}":{"get":{"tags":["case-attachments"],"summary":"Attachment Blob","description":"解密并回传一个附件原文件（图片/PDF），按 (session→user→tenant) 归属校验。","operationId":"attachment_blob_manage_attachments__aid__get","parameters":[{"name":"aid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Aid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/console/login":{"post":{"tags":["console"],"summary":"Login","description":"用户名+密码 → 控制台会话令牌。\n\n失败**不区分**\"用户不存在\"与\"密码错\"——否则等于白送一个用户名枚举接口。\n\n**限流按 (来源IP, 账号) + 来源IP 两个维度**，刻意不按账号单独计：那会变成\n\"任何知道 ADMIN_USER 的人都能把你永久锁在控制台外面\"的 DoS。见 app/auth/ratelimit。","operationId":"login_console_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__console_auth__LoginIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/console/me":{"get":{"tags":["console"],"summary":"Me","description":"回显当前控制台会话（前端启动时验令牌是否还有效）。","operationId":"me_console_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeOut"}}}}}}},"/console/change-password":{"post":{"tags":["console"],"summary":"Change Password","description":"租户账号自助改密码。**必须给对旧密码**——否则一个被顺手拿到的令牌就能改掉密码、\n把真正的主人锁在外面。（管理员的越权重置在 /admin/tenants/{tid}/accounts/{aid}/password。）\n\n平台管理员改不了：ADMIN_USER/ADMIN_PASS 来自 .env，**数据库里没有那一行**，\n改密码得去改 .env 再重启。","operationId":"change_password_console_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordIn"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/console/prefs":{"get":{"tags":["console"],"summary":"Get Prefs","operationId":"get_prefs_console_prefs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrefsOut"}}}}}},"put":{"tags":["console"],"summary":"Put Prefs","description":"**合并**式更新（不是整体替换）：前端只发改动的那几个键。\n\n整体替换会让两个标签页互相覆盖——A 页改了排序、B 页改了 tab，后提交的把先提交的抹掉。","operationId":"put_prefs_console_prefs_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Patch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrefsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/console/oidc/start":{"get":{"tags":["console"],"summary":"Oidc Start","description":"把管理员送去 agent4.io 授权。未配置 SSO 时明确 404，而不是静默跳到一个坏地址。","operationId":"oidc_start_console_oidc_start_get","parameters":[{"name":"redirect","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/console/oidc/callback":{"get":{"tags":["console"],"summary":"Oidc Callback","description":"授权回调：换令牌 → 认账号 → 发控制台令牌。\n\n令牌经 URL fragment 交给前端（`#console_token=…`）。fragment 不会被浏览器发往服务端，\n因此不会落进 Referer 或反代访问日志——查询串会，这正是不用查询串的原因。","operationId":"oidc_callback_console_oidc_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integration/install.sh":{"get":{"tags":["integration"],"summary":"Install Sh","description":"One command to add the MCP server and install every skill module (and to update them).","operationId":"install_sh_integration_install_sh_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/integration/manifest.json":{"get":{"tags":["integration"],"summary":"Manifest","description":"Module metadata for update detection — no markdown. `sha256`/`version` change when the\nupstream Cookbook changes, so a client can tell it holds an old copy.","operationId":"manifest_integration_manifest_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/integration/skills/{name}/SKILL.md":{"get":{"tags":["integration"],"summary":"Skill Module","description":"A single skill module's SKILL.md, mirrored from the website Cookbook.","operationId":"skill_module_integration_skills__name__SKILL_md_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integration/SKILL.md":{"get":{"tags":["integration"],"summary":"Skill Doc","description":"Back-compat single-file guide: the module index followed by every module, as one document.\nPreferred path is the one-command installer (`install.sh`) which lays down the modules separately.","operationId":"skill_doc_integration_SKILL_md_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/agent-templates":{"get":{"tags":["templates"],"summary":"List Agent Templates","operationId":"list_agent_templates_agent_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Agent Templates Agent Templates Get"}}}}}}},"/agent-templates/{name}":{"get":{"tags":["templates"],"summary":"Get Agent Template","operationId":"get_agent_template_agent_templates__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools":{"get":{"tags":["tools"],"summary":"List Available Tools","description":"返回可勾选工具（名字 + 简要说明），供白名单列表渲染。","operationId":"list_available_tools_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Available Tools Tools Get"}}}}}}},"/mcp-servers/{sid}/reveal":{"get":{"tags":["mcp-servers"],"summary":"Reveal Config","description":"返回该 MCP server 的**未遮罩**连接配置（含明文机密），供管理员调试。记审计。","operationId":"reveal_config_mcp_servers__sid__reveal_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevealOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp-servers":{"get":{"tags":["mcp-servers"],"summary":"List Servers","operationId":"list_servers_mcp_servers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/McpServerOut"},"type":"array","title":"Response List Servers Mcp Servers Get"}}}}}},"post":{"tags":["mcp-servers"],"summary":"Create Server","operationId":"create_server_mcp_servers_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp-servers/{sid}":{"patch":{"tags":["mcp-servers"],"summary":"Update Server","operationId":"update_server_mcp_servers__sid__patch","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mcp-servers"],"summary":"Delete Server","operationId":"delete_server_mcp_servers__sid__delete","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp-servers/test-config":{"post":{"tags":["mcp-servers"],"summary":"Test Config","description":"保存前先探测：用给定 transport+config **连一次但不落库**，返回连接状态/发现的工具/错误。\n前端据此在连接成功后才允许保存。仅远程传输（同创建策略）。","operationId":"test_config_mcp_servers_test_config_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestConfigIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp-servers/{sid}/test":{"post":{"tags":["mcp-servers"],"summary":"Test Server","description":"临时连接一次，发现工具并把状态/工具列表/错误缓存进库（供 UI 展示）。","operationId":"test_server_mcp_servers__sid__test_post","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp-servers/{sid}/probe":{"post":{"tags":["mcp-servers"],"summary":"Probe Server","description":"端到端\"试调用\"：给 AI 一句指令 + 只暴露本 server 的工具，看它是否发出正确的 tool_call。\n\n与 `/test`（连接+列工具，无 LLM）互补——这里验证 **AI 是否真的理解如何调用这个 MCP**。\n`execute=True` 则真执行工具拿到返回；否则只看意图（干跑，无副作用）。","operationId":"probe_server_mcp_servers__sid__probe_post","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProbeIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProbeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/users":{"get":{"tags":["manage","manage"],"summary":"List Users","operationId":"list_users_manage_users_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"recent","title":"Sort"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/users/{uid}":{"get":{"tags":["manage","manage"],"summary":"Get User","operationId":"get_user_manage_users__uid__get","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manage","manage"],"summary":"Delete User","description":"删除用户及其全部数据（加密销毁：级联删 UserKeys/空间/文档/会话/记忆/附件）。","operationId":"delete_user_manage_users__uid__delete","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/users/{uid}/usage":{"get":{"tags":["manage","manage"],"summary":"User Usage","description":"该用户的 token 用量时间序列（供图表）。hours>0 按小时分桶（近 N 小时），否则按天。空桶补 0。","operationId":"user_usage_manage_users__uid__usage_get","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uid"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Hours"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUsageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/users/{uid}/password":{"post":{"tags":["manage","manage"],"summary":"Admin Reset Password","description":"管理员/客服重置某邮箱密码用户的密码（见 docs/18）。非邮箱账号 → 404。","operationId":"admin_reset_password_manage_users__uid__password_post","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/end-user-token":{"post":{"tags":["manage","manage"],"summary":"Mint End User Token","description":"为集成方的某个用户换一个终端用户令牌（proxy 模式的单点登录握手）。\n\n`auth_mode=proxy` 的租户在平台上没有原生登录——身份由集成方提供。此前这条路只在\n**请求头**（X-End-User）里走得通，也就是只有服务端对服务端的调用能用；浏览器落在\n`/t/{alias}` 上时无从获得身份，那个页面因此是**无法登录**的。\n\n有了这个接口，集成方在自己站点确认用户身份后，用租户 API Key 换一个令牌交给浏览器，\n握手就闭合了。\n\n**只对 proxy / both 开放**：platform 模式的租户有自己的登录，再开一条「凭 API Key 就能\n冒充任意终端用户」的路没有必要，只是白白扩大攻击面。\n\n调用方必须在**服务端**持有 API Key。把它放到浏览器里，等于任何人都能签发任意身份。","operationId":"mint_end_user_token_manage_end_user_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndUserTokenIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndUserTokenOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/users/{uid}/spaces":{"post":{"tags":["manage","manage"],"summary":"Create Space","operationId":"create_space_manage_users__uid__spaces_post","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/spaces/{sid}":{"patch":{"tags":["manage","manage"],"summary":"Rename Space","operationId":"rename_space_manage_spaces__sid__patch","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manage","manage"],"summary":"Delete Space","description":"删除空间及其全部知识与会话（级联）。默认空间不可删除。","operationId":"delete_space_manage_spaces__sid__delete","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/spaces/{sid}/agents":{"get":{"tags":["manage","manage"],"summary":"List Space Members","operationId":"list_space_members_manage_spaces__sid__agents_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Space Members Manage Spaces  Sid  Agents Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["manage","manage"],"summary":"Add Space Member","operationId":"add_space_member_manage_spaces__sid__agents_post","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceAgentIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response Add Space Member Manage Spaces  Sid  Agents Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/spaces/{sid}/agents/{name}":{"delete":{"tags":["manage","manage"],"summary":"Remove Space Member","operationId":"remove_space_member_manage_spaces__sid__agents__name__delete","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/spaces/{sid}/documents":{"get":{"tags":["manage","manage"],"summary":"List Space Documents","operationId":"list_space_documents_manage_spaces__sid__documents_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/spaces/{sid}/sessions":{"get":{"tags":["manage","manage"],"summary":"List Space Sessions","operationId":"list_space_sessions_manage_spaces__sid__sessions_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/spaces/{sid}/memories":{"get":{"tags":["manage","manage"],"summary":"List Space Memories","description":"该空间从会话中派生出的长期记忆（事实/主题/整轮），供管理员查看与治理。按重要性+最近性排序。","operationId":"list_space_memories_manage_spaces__sid__memories_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MemoryOut"},"title":"Response List Space Memories Manage Spaces  Sid  Memories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/memories/{mid}":{"delete":{"tags":["manage","manage"],"summary":"Delete Memory","description":"删除一条派生记忆（治理：清掉不该记的信息）。校验其归属空间属于本租户。","operationId":"delete_memory_manage_memories__mid__delete","parameters":[{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/spaces/{sid}/profiles":{"get":{"tags":["manage","manage"],"summary":"List Space Profiles","description":"该空间下各 Agent 对该用户的画像（跨会话人格层），供管理员查看/治理。按更新时间倒序。","operationId":"list_space_profiles_manage_spaces__sid__profiles_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProfileOut"},"title":"Response List Space Profiles Manage Spaces  Sid  Profiles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/profiles/{pid}":{"put":{"tags":["manage","manage"],"summary":"Update Profile","description":"人工修改画像正文（重新加密入库）。下一轮对话仍可能被自动刷新覆盖。","operationId":"update_profile_manage_profiles__pid__put","parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manage","manage"],"summary":"Delete Profile","description":"删除画像（清空重置：下一轮对话累计到阈值后会重新生成）。","operationId":"delete_profile_manage_profiles__pid__delete","parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/users/{uid}/documents":{"get":{"tags":["manage","manage"],"summary":"List User Documents","operationId":"list_user_documents_manage_users__uid__documents_get","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/documents/{doc_id}":{"delete":{"tags":["manage","manage"],"summary":"Delete Document","operationId":"delete_document_manage_documents__doc_id__delete","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/users/{uid}/sessions":{"get":{"tags":["manage","manage"],"summary":"List User Sessions","operationId":"list_user_sessions_manage_users__uid__sessions_get","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/agents/{name}/sessions":{"get":{"tags":["manage","manage"],"summary":"List Agent Sessions","description":"某智能体在本租户内的会话时间线（跨用户/跨空间，按 created_at 降序）。\n\n把智能体当作「一个人」：看它和各用户在各空间的过往会话。仅会话元数据、不解密内容，\n故不设隐私门禁；读具体消息仍走 /sessions/{sid}/messages（受隐私门禁）。\n归属：join users.tenant_id 限定本租户。会话的 agent 归属为首轮智能体（见 chat.service）。","operationId":"list_agent_sessions_manage_agents__name__sessions_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/sessions/{sid}/messages":{"get":{"tags":["manage","manage"],"summary":"Get Session Messages","description":"按 (created_at,id) 降序分页（最新在前）；前端反转成时序、往上「加载更早」。","operationId":"get_session_messages_manage_sessions__sid__messages_get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":40,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagePage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/scheduled-tasks":{"get":{"tags":["manage","manage"],"summary":"List Scheduled Tasks","description":"本租户的计划/跟进任务（按创建时间倒序）。instruction 尝试解密；隐私模式或失败则为 None。","operationId":"list_scheduled_tasks_manage_scheduled_tasks_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledTaskPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/scheduled-tasks/{task_id}/cancel":{"post":{"tags":["manage","manage"],"summary":"Cancel Scheduled Task","description":"取消一条待执行（pending）任务；非 pending 返回 409。","operationId":"cancel_scheduled_task_manage_scheduled_tasks__task_id__cancel_post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledTaskOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/usage":{"get":{"tags":["manage","manage"],"summary":"Usage Summary","description":"本租户 token 用量汇总:总量 + 按维度(agent/user/space/hour/day/week/model/kind)分组。\n\n`since` 给一个时间窗口(ISO 8601):最近 24 小时配 `group=hour`、最近若干天配\n`group=day`、更长区间配 `group=week`——窗口由调用方算好传进来,这里只做过滤+分桶。\n不传 `since` 时统计全部历史(向后兼容原有 group=agent 等调用)。\n\n用量是纯元数据(仅 token 数),隐私模式租户也照常计量(见 docs/18)。","operationId":"usage_summary_manage_usage_get","parameters":[{"name":"group","in":"query","required":false,"schema":{"type":"string","default":"total","title":"Group"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/agent-stats":{"get":{"tags":["manage","manage"],"summary":"Agent Stats","description":"每个 agent 被用了多少：会话数、不同的人数、最后一次有人跟它说话是什么时候。\n\n`/usage?group=agent` 回答的是\"花了多少 token\"，那是成本；这里回答的是\"有多少人在用\"，\n那是价值。两个数字都拿得到才谈得上判断一个 agent 值不值得留着。\n\n**纯计数，不碰内容。** 会话标题和正文都是加密的，这里一个都没读——只数行、数不同的\nuser_id、取最大时间戳。所以 privacy_mode 的租户同样能看到（那个开关挡的是读取内容，\n不是知道自己有没有被用）。","operationId":"agent_stats_manage_agent_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentStatsOut"}}}}}}},"/manage/users/{uid}/knowledge-graph":{"get":{"tags":["manage","manage"],"summary":"User Knowledge Graph","description":"用户记忆 / 知识库切片的 3D 投影。\n\n父节点：memories 用 **session**（NOT NULL、100% 覆盖），chunks 用 **document**。\n刻意不用 `message_id`——实测 246 条里仅 15 条有值，绝大多数会连不上父。","operationId":"user_knowledge_graph_manage_users__uid__knowledge_graph_get","parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uid"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","pattern":"^(memories|chunks)$","default":"memories","title":"Source"}},{"name":"space_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Space Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response User Knowledge Graph Manage Users  Uid  Knowledge Graph Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/knowledge-bases/{name}/graph":{"get":{"tags":["manage","manage"],"summary":"Kb Graph","description":"租户级知识库切片的 3D 投影。父节点 = 文档。\n\n不走 `readable_tenant`：租户 KB 是**不加密的公用知识**，与隐私模式（保护的是终端用户内容）无关。","operationId":"kb_graph_manage_knowledge_bases__name__graph_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Kb Graph Manage Knowledge Bases  Name  Graph Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/page-contexts":{"get":{"tags":["manage","manage"],"summary":"List Page Contexts","operationId":"list_page_contexts_manage_page_contexts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PageContextOut"},"type":"array","title":"Response List Page Contexts Manage Page Contexts Get"}}}}}}},"/manage/page-contexts/{key}":{"put":{"tags":["manage","manage"],"summary":"Upsert Page Context","operationId":"upsert_page_context_manage_page_contexts__key__put","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageContextIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageContextOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manage","manage"],"summary":"Delete Page Context","operationId":"delete_page_context_manage_page_contexts__key__delete","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/page-context-templates":{"get":{"tags":["manage","manage"],"summary":"List Playbook Templates","description":"页面类型的提问原型，供「新建剧本」时预填骨架。\n\n按**页面类型**而非行业分类是刻意的：剧本绑的是具体站点的具体页面，跨租户不可移植；\n可复用的是「访客在这类页面上会问什么」。行业差异由 Agent 的 soul/task 承担。","operationId":"list_playbook_templates_manage_page_context_templates_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"zh","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaybookTemplate"},"title":"Response List Playbook Templates Manage Page Context Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/page-context-stats":{"get":{"tags":["manage","manage"],"summary":"Playbook Stats","description":"哪条剧本被打开过、哪个推荐问题被点。没有这个，文案就只能靠猜着改。","operationId":"playbook_stats_manage_page_context_stats_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaybookStat"},"title":"Response Playbook Stats Manage Page Context Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/page-contexts/resolve":{"get":{"tags":["manage","manage"],"summary":"Resolve Page Context","description":"贴一个网址（或 key），回答它会命中哪条剧本。管理界面的匹配测试器用。","operationId":"resolve_page_context_manage_page_contexts_resolve_get","parameters":[{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/knowledge-bases/{name}/crawl":{"post":{"tags":["manage","crawl"],"summary":"Start Crawl","description":"启动抓取。**这一步不消耗 token**——只发现页面并取回正文。","operationId":"start_crawl_manage_knowledge_bases__name__crawl_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/crawl":{"get":{"tags":["manage","crawl"],"summary":"Current Crawl","description":"当前任务；没有进行中的就返回最近一个已结束的（界面据此显示上次结果）。","operationId":"current_crawl_manage_crawl_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CrawlOut"},{"type":"null"}],"title":"Response Current Crawl Manage Crawl Get"}}}}}}},"/manage/crawl/{job_id}/pages":{"get":{"tags":["manage","crawl"],"summary":"Crawl Pages","operationId":"crawl_pages_manage_crawl__job_id__pages_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PageOut"},"title":"Response Crawl Pages Manage Crawl  Job Id  Pages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/crawl/{job_id}/confirm":{"post":{"tags":["manage","crawl"],"summary":"Confirm Crawl","description":"确认后开始向量化。**这一步消耗 token**，用户是在看到确切字数之后才走到这里的。","operationId":"confirm_crawl_manage_crawl__job_id__confirm_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manage/crawl/{job_id}/cancel":{"post":{"tags":["manage","crawl"],"summary":"Cancel Crawl","description":"终止任务。\n\n**已经写进知识库的文档保留**——它们已经花过 token 了，删掉等于让用户白付一次。","operationId":"cancel_crawl_manage_crawl__job_id__cancel_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents":{"post":{"tags":["rag"],"summary":"Create Document","description":"入库文档：同步建 Document 并返回计划块数；切片/嵌入在后台异步完成（稍后可检索）。","operationId":"create_document_documents_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/upload":{"post":{"tags":["rag"],"summary":"Upload Document","description":"上传文件入库：支持 .txt/.md/.html/.pdf/.docx（按扩展名/MIME 选解析器）。\n\ntitle 缺省用文件名；source 缺省用文件名。单文件大小上限见 `document_max_upload_mb`。\n含图过多时先回 needs_vision_confirm，前端确认后带 confirm_vision=true 重传。","operationId":"upload_document_documents_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_documents_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search":{"post":{"tags":["rag"],"summary":"Search Documents","operationId":"search_documents_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SearchHit"},"type":"array","title":"Response Search Documents Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat":{"post":{"tags":["chat"],"summary":"Chat Endpoint","operationId":"chat_endpoint_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/stream":{"post":{"tags":["chat"],"summary":"Chat Stream Endpoint","operationId":"chat_stream_endpoint_chat_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/sessions/{sid}/messages/{mid}/regenerate":{"post":{"tags":["chat"],"summary":"Regenerate Endpoint","description":"重生成某条 assistant 回复（删它及其后，据历史重新流式生成）。SSE 明文流。","operationId":"regenerate_endpoint_me_sessions__sid__messages__mid__regenerate_post","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}":{"get":{"tags":["share"],"summary":"Share Info","operationId":"share_info_share__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/chat":{"post":{"tags":["share"],"summary":"Share Chat","operationId":"share_chat_share__token__chat_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareChatIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/chat/stream":{"post":{"tags":["share"],"summary":"Share Chat Stream","operationId":"share_chat_stream_share__token__chat_stream_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareChatIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/stream":{"post":{"tags":["share"],"summary":"Share Stream","description":"分享/嵌入页的**常驻** SSE 推送通道（对应 `/me/stream`，但按分享 token + keyless 身份鉴权）。\n\n服务端主动推送（到点的定时跟进、IM 侧同步过来的对话）由 `app.push.bus` 按 (user, space) 投递；\n`/me/stream` 要求 JWT/API Key，而 widget 的 anonymous / host_session 两种模式拿不出这类凭证，\n故这里用 `_resolve_principal` 从 body 解析身份（三种模式通吃），space 由服务端推导，无需 X-Space-Id。\n\n注意：bus 无订阅者时事件直接丢弃，所以 widget 收起时也要保持本连接（未读角标靠它实时更新）；\n错过的推送由前端用会话列表的 message_count 差值补算。","operationId":"share_stream_share__token__stream_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareAuthIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/documents/upload":{"post":{"tags":["share"],"summary":"Share Upload Document","description":"访客把文档传进**自己的**空间（与网页客户端同一条 RAG 摄取管线）。\n\n**默认关**，租户在分享配置里打开（uploads=true）——把控制权交给租户：有的场景就是需要\n用户提交材料（\"看看我的证件是否有效\"），有的场景开放上传等于请人灌垃圾。\n滥用护栏：`upload_daily_limit`（默认 20/天/用户，租户可调）+ 全局单文件大小上限。","operationId":"share_upload_document_share__token__documents_upload_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_share_upload_document_share__token__documents_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Share Upload Document Share  Token  Documents Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/sessions":{"post":{"tags":["share"],"summary":"Share List Sessions","operationId":"share_list_sessions_share__token__sessions_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareAuthIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareSessionPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/visitor":{"post":{"tags":["share"],"summary":"Share Mint Visitor","description":"签发一个新的匿名访客身份 + 持有性证明。\n\n取代 widget 自己 `Math.random()` 造 id 的老做法：id 改为密码学随机，且带一个只有服务端\n能生成的签名，这样\"注册后认领这段匿名咨询\"才有据可依。","operationId":"share_mint_visitor_share__token__visitor_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitorOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/playbook":{"post":{"tags":["share"],"summary":"Share Playbook","description":"访客打开对话框时的开场白与推荐问题（页面剧本，见 docs/40）。\n\n没有匹配到剧本就返回空——挂件照旧显示空白框，不是错误。","operationId":"share_playbook_share__token__playbook_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareAuthIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaybookOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/playbook/hit":{"post":{"tags":["share"],"summary":"Share Playbook Hit","description":"访客点了某条推荐问题。纯计数，不记谁点的（见 app/models/playbook_event.py）。","operationId":"share_playbook_hit_share__token__playbook_hit_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaybookHitIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/claim":{"post":{"tags":["share"],"summary":"Share Claim","description":"注册后认领注册前的匿名咨询（只结转要点画像，不迁移原始会话）。\n\n见 app/chat/handoff.py 的取舍说明。这里只负责：验两侧身份 → 生成摘要 → 写入目标画像 →\n打一次性锁。","operationId":"share_claim_share__token__claim_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareClaimIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareClaimOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/sessions/{sid}/messages":{"post":{"tags":["share"],"summary":"Share Session Messages","operationId":"share_session_messages_share__token__sessions__sid__messages_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareAuthIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShareMessageOut"},"title":"Response Share Session Messages Share  Token  Sessions  Sid  Messages Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/sessions/{sid}/delete":{"post":{"tags":["share"],"summary":"Share Delete Session","operationId":"share_delete_session_share__token__sessions__sid__delete_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareAuthIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/sessions/{sid}/rename":{"post":{"tags":["share"],"summary":"Share Rename Session","operationId":"share_rename_session_share__token__sessions__sid__rename_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareRenameIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareSessionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/greeting":{"post":{"tags":["share"],"summary":"Share Greeting","description":"为新会话生成 Agent 主动问候（需 Agent 开启 auto_greeting 且配置了 greeting 提示词）。","operationId":"share_greeting_share__token__greeting_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareAuthIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GreetingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}/attachments/{attachment_id}":{"get":{"tags":["share"],"summary":"Share Download Attachment","description":"凭短时效签名下载导出的文档（见 app/documents/download.py）。\n\n**签名即授权**，这里没有 principal——挂件访客的 proof 在 IM 渠道拿不到，而导出的文档\n要能发到 WhatsApp/Telegram。因此授权由 URL 上的签名承担，不看客户端自报的身份。\n\n附件行用未加作用域的 session 读：此刻还不知道它属于哪个 user/space，无法先建 RLS\n作用域。签名已经限定了**只能取这一个 attachment_id**，越权的前提（改 id）恰恰是签名\n拦住的那件事。解密所用的 user/space 一律取自附件行本身，绝不取自请求。","operationId":"share_download_attachment_share__token__attachments__attachment_id__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}},{"name":"exp","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Exp"}},{"name":"sig","in":"query","required":false,"schema":{"type":"string","default":"","title":"Sig"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/embed/{token}":{"get":{"tags":["embed"],"summary":"Embed Widget","description":"嵌入形态：供宿主页 iframe 加载（气泡/窗口/全屏三态）。","operationId":"embed_widget_embed__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/s/{token}":{"get":{"tags":["embed"],"summary":"Standalone Page","description":"独立整页形态：直接发给终端用户的分享链接。","operationId":"standalone_page_s__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/telegram/webhook/{secret}":{"post":{"tags":["telegram"],"summary":"Telegram Webhook","operationId":"telegram_webhook_telegram_webhook__secret__post","parameters":[{"name":"secret","in":"path","required":true,"schema":{"type":"string","title":"Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Telegram Webhook Telegram Webhook  Secret  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/telegram":{"get":{"tags":["telegram"],"summary":"Get Agent Telegram","operationId":"get_agent_telegram_agents__name__telegram_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelegramStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["telegram"],"summary":"Connect Agent Telegram","operationId":"connect_agent_telegram_agents__name__telegram_put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelegramTokenIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelegramStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["telegram"],"summary":"Disconnect Agent Telegram","operationId":"disconnect_agent_telegram_agents__name__telegram_delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/telegram/toggle":{"post":{"tags":["telegram"],"summary":"Toggle Agent Telegram","operationId":"toggle_agent_telegram_agents__name__telegram_toggle_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelegramToggleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelegramStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/whatsapp/webhook":{"get":{"tags":["whatsapp"],"summary":"Whatsapp Verify","description":"Meta 校验握手：verify_token 命中某集成则回显 hub.challenge。","operationId":"whatsapp_verify_whatsapp_webhook_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["whatsapp"],"summary":"Whatsapp Inbound","operationId":"whatsapp_inbound_whatsapp_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Whatsapp Inbound Whatsapp Webhook Post"}}}}}}},"/agents/{name}/whatsapp":{"get":{"tags":["whatsapp"],"summary":"Get Agent Whatsapp","operationId":"get_agent_whatsapp_agents__name__whatsapp_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["whatsapp"],"summary":"Connect Agent Whatsapp","operationId":"connect_agent_whatsapp_agents__name__whatsapp_put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaConnectIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["whatsapp"],"summary":"Disconnect Agent Whatsapp","operationId":"disconnect_agent_whatsapp_agents__name__whatsapp_delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{name}/whatsapp/toggle":{"post":{"tags":["whatsapp"],"summary":"Toggle Agent Whatsapp","operationId":"toggle_agent_whatsapp_agents__name__whatsapp_toggle_post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaToggleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/attachments/{attachment_id}":{"get":{"tags":["attachments"],"summary":"Download Attachment","operationId":"download_attachment_attachments__attachment_id__get","parameters":[{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","title":"Attachment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AgentAliasIn":{"properties":{"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"}},"type":"object","title":"AgentAliasIn"},"AgentAliasOut":{"properties":{"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"url_prefix":{"type":"string","title":"Url Prefix","default":"/t/"}},"type":"object","title":"AgentAliasOut"},"AgentExport":{"properties":{"schema_version":{"type":"integer","title":"Schema Version"},"kind":{"type":"string","title":"Kind","default":"agent"},"name":{"type":"string","title":"Name"},"soul":{"type":"string","title":"Soul","default":""},"task":{"type":"string","title":"Task","default":""},"tools":{"items":{"type":"string"},"type":"array","title":"Tools","default":[]},"skills":{"items":{"type":"string"},"type":"array","title":"Skills","default":[]},"knowledge_bases":{"items":{"type":"string"},"type":"array","title":"Knowledge Bases","default":[]},"history_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"History Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"tool_call_max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Call Max Tokens"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"auto_greeting":{"type":"boolean","title":"Auto Greeting","default":false},"ask_forms":{"type":"boolean","title":"Ask Forms","default":false},"reasoning":{"type":"boolean","title":"Reasoning","default":false},"grounding_required":{"type":"boolean","title":"Grounding Required","default":false}},"type":"object","required":["schema_version","name"],"title":"AgentExport"},"AgentImportIn":{"properties":{"schema_version":{"type":"integer","title":"Schema Version","default":1},"kind":{"type":"string","title":"Kind","default":"agent"},"name":{"type":"string","title":"Name"},"soul":{"type":"string","title":"Soul","default":""},"task":{"type":"string","title":"Task","default":""},"tools":{"items":{"type":"string"},"type":"array","title":"Tools","default":[]},"skills":{"items":{"type":"string"},"type":"array","title":"Skills","default":[]},"knowledge_bases":{"items":{"type":"string"},"type":"array","title":"Knowledge Bases","default":[]},"history_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"History Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"tool_call_max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Call Max Tokens"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"auto_greeting":{"type":"boolean","title":"Auto Greeting","default":false},"ask_forms":{"type":"boolean","title":"Ask Forms","default":false},"reasoning":{"type":"boolean","title":"Reasoning","default":false},"grounding_required":{"type":"boolean","title":"Grounding Required","default":false},"override_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override Name"}},"type":"object","required":["name"],"title":"AgentImportIn"},"AgentIn":{"properties":{"soul":{"type":"string","title":"Soul","default":""},"task":{"type":"string","title":"Task","default":""},"tools":{"items":{"type":"string"},"type":"array","title":"Tools","default":[]},"skills":{"items":{"type":"string"},"type":"array","title":"Skills","default":[]},"knowledge_bases":{"items":{"type":"string"},"type":"array","title":"Knowledge Bases","default":[]},"history_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"History Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"tool_call_max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Call Max Tokens","description":"发起工具调用那一轮的输出预算（token）。工具的入参也算模型输出，而导出文档的入参就是整份文档，所以这个值决定了智能体一次能写多长的文档。\n\n调大：面对大上下文的复杂问题，智能体能把话讲透、文档写全；代价是这类回合更慢（约 160 token/秒，写满 16K 约需 100 秒），且会更快消耗月度 token 配额。\n\n调小：更快更省，但复杂问题会被迫简答。低于下限的值会被抬回下限——设得过小不会让文档变短，而是让参数 JSON 被截断、整个导出失败。\n\n留空使用平台默认值。"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"published":{"type":"boolean","title":"Published","default":false},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"auto_greeting":{"type":"boolean","title":"Auto Greeting","default":false},"ask_forms":{"type":"boolean","title":"Ask Forms","default":false},"reasoning":{"type":"boolean","title":"Reasoning","default":false},"grounding_required":{"type":"boolean","title":"Grounding Required","default":false}},"type":"object","title":"AgentIn"},"AgentOut":{"properties":{"name":{"type":"string","title":"Name"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"soul":{"type":"string","title":"Soul"},"task":{"type":"string","title":"Task"},"tools":{"items":{"type":"string"},"type":"array","title":"Tools"},"skills":{"items":{"type":"string"},"type":"array","title":"Skills","default":[]},"knowledge_bases":{"items":{"type":"string"},"type":"array","title":"Knowledge Bases","default":[]},"history_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"History Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"tool_call_max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Call Max Tokens"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"published":{"type":"boolean","title":"Published","default":false},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"auto_greeting":{"type":"boolean","title":"Auto Greeting","default":false},"ask_forms":{"type":"boolean","title":"Ask Forms","default":false},"reasoning":{"type":"boolean","title":"Reasoning","default":false},"grounding_required":{"type":"boolean","title":"Grounding Required","default":false},"source":{"type":"string","title":"Source"}},"type":"object","required":["name","soul","task","tools","source"],"title":"AgentOut"},"AgentPatch":{"properties":{"soul":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Soul"},"task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task"},"tools":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tools"},"skills":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Skills"},"knowledge_bases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Knowledge Bases"},"history_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"History Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"tool_call_max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Call Max Tokens"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Published"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"auto_greeting":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Greeting"},"ask_forms":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ask Forms"},"reasoning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reasoning"},"grounding_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Grounding Required"}},"type":"object","title":"AgentPatch","description":"只改传来的字段。\n\n存在的理由是 `PUT` 是整体替换：`AgentIn` 每个字段都有默认值，一个漏掉 `soul` 的 PUT 会把\nsoul 静默清空。谁都不想要那个语义，所以每个调用方各自实现了一遍 GET→合并→PUT——包括我们\n自己的 MCP 工具 `update_agent`，它的 docstring 专门解释过这件事。同一个坑被绕两次，就说明\n该修的是坑。\n\n区分「传了 null」和「没传」靠 `model_fields_set`：`greeting=null` 是清空开场白，不传是别动它。"},"AgentSessionOut":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"external_user_id":{"type":"string","title":"External User Id"},"space_id":{"type":"string","title":"Space Id"},"space_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Space Name"},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"},"message_count":{"type":"integer","title":"Message Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","external_user_id","space_id","message_count","created_at"],"title":"AgentSessionOut","description":"某智能体维度的会话（跨用户/跨空间），带用户与空间标签供时间线展示。"},"AgentSessionPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AgentSessionOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"AgentSessionPage"},"AgentStatRow":{"properties":{"agent":{"type":"string","title":"Agent"},"conversations":{"type":"integer","title":"Conversations"},"people":{"type":"integer","title":"People"},"last_active":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Active"}},"type":"object","required":["agent","conversations","people"],"title":"AgentStatRow"},"AgentStatsOut":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/AgentStatRow"},"type":"array","title":"Rows"}},"type":"object","required":["rows"],"title":"AgentStatsOut"},"AgentSummary":{"properties":{"name":{"type":"string","title":"Name"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"published":{"type":"boolean","title":"Published","default":false},"source":{"type":"string","title":"Source","default":"db"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task"},"tools_count":{"type":"integer","title":"Tools Count","default":0},"skills_count":{"type":"integer","title":"Skills Count","default":0},"tools":{"items":{"type":"string"},"type":"array","title":"Tools","default":[]},"skills":{"items":{"type":"string"},"type":"array","title":"Skills","default":[]},"knowledge_bases":{"items":{"type":"string"},"type":"array","title":"Knowledge Bases","default":[]}},"type":"object","required":["name"],"title":"AgentSummary"},"ApiKeyOut":{"properties":{"id":{"type":"string","title":"Id"},"revoked":{"type":"boolean","title":"Revoked"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","revoked","created_at"],"title":"ApiKeyOut"},"AttachmentOut":{"properties":{"id":{"type":"string","title":"Id"},"mime":{"type":"string","title":"Mime"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","mime","name","created_at"],"title":"AttachmentOut"},"AuditOut":{"properties":{"id":{"type":"string","title":"Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"tenant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Name"},"actor_type":{"type":"string","title":"Actor Type"},"actor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Id"},"action":{"type":"string","title":"Action"},"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","actor_type","action","created_at"],"title":"AuditOut"},"AuditPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AuditOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"AuditPage"},"AuthMethodsOut":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"password":{"type":"boolean","title":"Password"},"oauth":{"items":{"type":"string"},"type":"array","title":"Oauth"}},"type":"object","required":["tenant_id","password","oauth"],"title":"AuthMethodsOut"},"Body_import_feed_knowledge_bases__name__products_import_post":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"}},"type":"object","title":"Body_import_feed_knowledge_bases__name__products_import_post"},"Body_share_upload_document_share__token__documents_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"auth":{"type":"string","title":"Auth","default":"{}"},"confirm_vision":{"type":"boolean","title":"Confirm Vision","default":false}},"type":"object","required":["file"],"title":"Body_share_upload_document_share__token__documents_upload_post"},"Body_upload_brand_logo_tenant_settings_logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_brand_logo_tenant_settings_logo_post"},"Body_upload_document_documents_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"confirm_vision":{"type":"boolean","title":"Confirm Vision","default":false}},"type":"object","required":["file"],"title":"Body_upload_document_documents_upload_post"},"Body_upload_image_images_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_image_images_post"},"Body_upload_kb_document_knowledge_bases__name__documents_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},"type":"object","required":["file"],"title":"Body_upload_kb_document_knowledge_bases__name__documents_upload_post"},"ByokIn":{"properties":{"privacy_mode":{"type":"boolean","title":"Privacy Mode"},"byok_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Byok Config"}},"type":"object","required":["privacy_mode"],"title":"ByokIn"},"ByokOut":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"privacy_mode":{"type":"boolean","title":"Privacy Mode"},"byok_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Byok Provider"}},"type":"object","required":["tenant_id","privacy_mode"],"title":"ByokOut"},"CallbackIn":{"properties":{"token":{"type":"string","title":"Token"},"nonce":{"type":"string","title":"Nonce"},"signal":{"type":"string","title":"Signal","default":"done"},"dims":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Dims"},"blackboard":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Blackboard"}},"type":"object","required":["token","nonce"],"title":"CallbackIn"},"ChangePasswordIn":{"properties":{"old_password":{"type":"string","title":"Old Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["old_password","new_password"],"title":"ChangePasswordIn"},"ChatIn":{"properties":{"message":{"type":"string","title":"Message","default":""},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"k":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K"},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images"},"files":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Files"},"audio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audio"},"client_pubkey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Pubkey"}},"type":"object","title":"ChatIn"},"ChatOut":{"properties":{"session_id":{"type":"string","title":"Session Id"},"reply":{"type":"string","title":"Reply"},"sources":{"items":{"$ref":"#/components/schemas/Source"},"type":"array","title":"Sources"},"transcript":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transcript"}},"type":"object","required":["session_id","reply","sources"],"title":"ChatOut"},"CrawlIn":{"properties":{"url":{"type":"string","title":"Url"},"path_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path Prefix"},"max_depth":{"type":"integer","maximum":3.0,"minimum":1.0,"title":"Max Depth","default":2},"max_pages":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Max Pages","default":50}},"type":"object","required":["url"],"title":"CrawlIn"},"CrawlOut":{"properties":{"id":{"type":"string","title":"Id"},"knowledge_base":{"type":"string","title":"Knowledge Base"},"start_url":{"type":"string","title":"Start Url"},"status":{"type":"string","title":"Status"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"discovered":{"type":"integer","title":"Discovered"},"fetched":{"type":"integer","title":"Fetched"},"embedded":{"type":"integer","title":"Embedded"},"skipped":{"type":"integer","title":"Skipped"},"flagged":{"type":"integer","title":"Flagged"},"total_chars":{"type":"integer","title":"Total Chars"},"estimated_tokens":{"type":"integer","title":"Estimated Tokens"},"tokens_used":{"type":"integer","title":"Tokens Used"},"created_at":{"type":"string","title":"Created At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["id","knowledge_base","start_url","status","error_code","error","discovered","fetched","embedded","skipped","flagged","total_chars","estimated_tokens","tokens_used","created_at","finished_at"],"title":"CrawlOut"},"CreateAccountIn":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"CreateAccountIn"},"CreateTenantIn":{"properties":{"name":{"type":"string","title":"Name"},"privacy_mode":{"type":"boolean","title":"Privacy Mode","default":false},"byok_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Byok Config"},"onboarding_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Onboarding Config"},"auth_mode":{"type":"string","title":"Auth Mode","default":"proxy"},"admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Email"},"admin_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Password"}},"type":"object","required":["name"],"title":"CreateTenantIn"},"CreateTenantOut":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"api_key":{"type":"string","title":"Api Key"},"admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Email"}},"type":"object","required":["tenant_id","api_key"],"title":"CreateTenantOut"},"DailyUsageOut":{"properties":{"servers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Servers"},"points":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Points"}},"type":"object","required":["servers","points"],"title":"DailyUsageOut"},"DiagnosePromptIn":{"properties":{"field":{"type":"string","enum":["persona","task","greeting","storyline_task","storyline_opening","storyline_ai_trigger","storyline_ai_criteria","skill_description","skill_instructions","kb_description","kb_instructions"],"title":"Field"},"current":{"type":"string","title":"Current","description":"该字段当前的文字；诊断需要有内容可读","default":""},"context":{"additionalProperties":true,"type":"object","title":"Context"}},"type":"object","required":["field"],"title":"DiagnosePromptIn"},"DiagnosePromptOut":{"properties":{"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions"}},"type":"object","required":["suggestions"],"title":"DiagnosePromptOut"},"DocChunkOut":{"properties":{"id":{"type":"string","title":"Id"},"preview":{"type":"string","title":"Preview"},"chars":{"type":"integer","title":"Chars"},"embedded":{"type":"boolean","title":"Embedded"}},"type":"object","required":["id","preview","chars","embedded"],"title":"DocChunkOut","description":"一个切片的摘要。正文只给前若干字——详情页是给人扫一眼「切成了什么」，不是全文阅读器。"},"DocEntityOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"mentions":{"type":"integer","title":"Mentions"}},"type":"object","required":["id","name","kind","mentions"],"title":"DocEntityOut"},"DocumentOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"space_id":{"type":"string","title":"Space Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","space_id","created_at"],"title":"DocumentOut"},"DocumentPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DocumentOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"DocumentPage"},"EmailIn":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"email":{"type":"string","title":"Email"}},"type":"object","required":["tenant_id","email"],"title":"EmailIn"},"EndUserTokenIn":{"properties":{"external_user_id":{"type":"string","title":"External User Id"},"ttl":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttl"}},"type":"object","required":["external_user_id"],"title":"EndUserTokenIn"},"EndUserTokenOut":{"properties":{"token":{"type":"string","title":"Token"},"external_user_id":{"type":"string","title":"External User Id"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["token","external_user_id","expires_in"],"title":"EndUserTokenOut"},"EnrollmentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"current_node_key":{"type":"string","title":"Current Node Key"},"status":{"type":"string","title":"Status"},"entered_node_at":{"type":"string","format":"date-time","title":"Entered Node At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","user_id","current_node_key","status","entered_node_at","updated_at"],"title":"EnrollmentOut"},"FetchModelsIn":{"properties":{"base_url":{"type":"string","title":"Base Url"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}},"type":"object","required":["base_url"],"title":"FetchModelsIn"},"FetchModelsOut":{"properties":{"models":{"items":{"type":"string"},"type":"array","title":"Models"},"detail":{"items":{"$ref":"#/components/schemas/FetchedModel"},"type":"array","title":"Detail","default":[]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["models"],"title":"FetchModelsOut"},"FetchedModel":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},"type":"object","required":["id"],"title":"FetchedModel"},"FunnelOut":{"properties":{"nodes":{"additionalProperties":{"additionalProperties":{"type":"integer"},"type":"object"},"type":"object","title":"Nodes"}},"type":"object","required":["nodes"],"title":"FunnelOut"},"GreetingOut":{"properties":{"text":{"type":"string","title":"Text"}},"type":"object","required":["text"],"title":"GreetingOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImprovePromptIn":{"properties":{"field":{"type":"string","enum":["persona","task","greeting","storyline_task","storyline_opening","storyline_ai_trigger","storyline_ai_criteria","skill_description","skill_instructions","kb_description","kb_instructions"],"title":"Field","description":"在编辑哪个字段，决定改写目标（见 app/assist/prompt_helper.py 的 FIELDS）"},"current":{"type":"string","title":"Current","description":"该字段当前的文字；留空表示从零起草","default":""},"hint":{"type":"string","title":"Hint","description":"用户这次想要的方向/提示；留空则做通用打磨","default":""},"context":{"additionalProperties":true,"type":"object","title":"Context"}},"type":"object","required":["field"],"title":"ImprovePromptIn"},"ImprovePromptOut":{"properties":{"improved":{"type":"string","title":"Improved"}},"type":"object","required":["improved"],"title":"ImprovePromptOut"},"IngestIn":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"content_type":{"type":"string","title":"Content Type","default":"text/plain"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["title","content"],"title":"IngestIn"},"IngestOut":{"properties":{"document_id":{"type":"string","title":"Document Id","default":""},"chunks":{"type":"integer","title":"Chunks","default":0},"needs_vision_confirm":{"type":"boolean","title":"Needs Vision Confirm","default":false},"figures":{"type":"integer","title":"Figures","default":0}},"type":"object","title":"IngestOut"},"IssuedKeyOut":{"properties":{"id":{"type":"string","title":"Id"},"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["id","api_key"],"title":"IssuedKeyOut"},"KbDocOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"chunks":{"type":"integer","title":"Chunks","default":0}},"type":"object","required":["id","title","source"],"title":"KbDocOut"},"KbIn":{"properties":{"instructions":{"type":"string","title":"Instructions","default":""},"description":{"type":"string","title":"Description","default":""},"max_distance":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Max Distance"},"kind":{"type":"string","title":"Kind","default":"text"}},"type":"object","title":"KbIn"},"KbIngestOut":{"properties":{"document_id":{"type":"string","title":"Document Id"},"chunks":{"type":"integer","title":"Chunks"},"imported":{"type":"integer","title":"Imported","default":1}},"type":"object","required":["document_id","chunks"],"title":"KbIngestOut"},"KbOut":{"properties":{"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind","default":"text"},"instructions":{"type":"string","title":"Instructions"},"description":{"type":"string","title":"Description"},"max_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Distance"},"documents":{"type":"integer","title":"Documents","default":0},"chunks":{"type":"integer","title":"Chunks","default":0}},"type":"object","required":["name","instructions","description","max_distance"],"title":"KbOut"},"KbSearchHit":{"properties":{"kb":{"type":"string","title":"Kb"},"content":{"type":"string","title":"Content"},"distance":{"type":"number","title":"Distance"}},"type":"object","required":["kb","content","distance"],"title":"KbSearchHit"},"KbSearchIn":{"properties":{"query":{"type":"string","title":"Query"},"k":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K"}},"type":"object","required":["query"],"title":"KbSearchIn"},"KbTagsIn":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["tags"],"title":"KbTagsIn"},"KbTextIn":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["title","content"],"title":"KbTextIn"},"LoginOut":{"properties":{"token":{"type":"string","title":"Token"},"role":{"type":"string","title":"Role"},"subject":{"type":"string","title":"Subject"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["token","role","subject"],"title":"LoginOut"},"McpServerIn":{"properties":{"name":{"type":"string","title":"Name"},"transport":{"type":"string","title":"Transport","default":"streamable_http"},"config":{"additionalProperties":true,"type":"object","title":"Config","default":{}},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["name"],"title":"McpServerIn"},"McpServerOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"transport":{"type":"string","title":"Transport"},"enabled":{"type":"boolean","title":"Enabled"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"discovered_tools":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Discovered Tools"},"last_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked 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","name","transport","enabled","config","created_at","updated_at"],"title":"McpServerOut"},"McpServerPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"transport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transport"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"McpServerPatch"},"MeOut":{"properties":{"role":{"type":"string","title":"Role"},"subject":{"type":"string","title":"Subject"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["role","subject"],"title":"MeOut"},"MemoryOut":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"importance":{"type":"integer","title":"Importance"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","kind","importance","created_at"],"title":"MemoryOut"},"MessageEditIn":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"MessageEditIn"},"MessageOut":{"properties":{"id":{"type":"string","title":"Id"},"role":{"type":"string","title":"Role"},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","role","content","created_at"],"title":"MessageOut"},"MessagePage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MessageOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"MessagePage"},"MigrateIn":{"properties":{"action":{"type":"string","title":"Action"},"from_node":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Node"},"to_node":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Node"}},"type":"object","required":["action"],"title":"MigrateIn"},"ModelBackendIn":{"properties":{"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind","default":"chat"},"base_url":{"type":"string","title":"Base Url"},"model":{"type":"string","title":"Model"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"weight":{"type":"integer","title":"Weight","default":1},"enabled":{"type":"boolean","title":"Enabled","default":true},"exclusive":{"type":"boolean","title":"Exclusive","default":false}},"type":"object","required":["name","base_url","model"],"title":"ModelBackendIn"},"ModelBackendOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"base_url":{"type":"string","title":"Base Url"},"model":{"type":"string","title":"Model"},"weight":{"type":"integer","title":"Weight"},"enabled":{"type":"boolean","title":"Enabled"},"exclusive":{"type":"boolean","title":"Exclusive","default":false},"supports_vision":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Vision"},"n_ctx":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Ctx"},"has_api_key":{"type":"boolean","title":"Has Api Key"},"status":{"type":"string","title":"Status"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"last_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked At"},"assigned_sessions":{"type":"integer","title":"Assigned Sessions","default":0},"total_tokens":{"type":"integer","title":"Total Tokens","default":0},"prompt_tokens":{"type":"integer","title":"Prompt Tokens","default":0},"completion_tokens":{"type":"integer","title":"Completion Tokens","default":0},"audio_ms":{"type":"integer","title":"Audio Ms","default":0},"text_words":{"type":"integer","title":"Text Words","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","kind","base_url","model","weight","enabled","has_api_key","status","created_at"],"title":"ModelBackendOut"},"ModelBackendPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"weight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weight"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"exclusive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exclusive"},"supports_vision":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Vision"},"n_ctx":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Ctx"}},"type":"object","title":"ModelBackendPatch"},"MyAttachmentOut":{"properties":{"id":{"type":"string","title":"Id"},"mime":{"type":"string","title":"Mime"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","mime","created_at"],"title":"MyAttachmentOut"},"MyDocDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"chunks":{"type":"integer","title":"Chunks"},"embedded":{"type":"integer","title":"Embedded"},"ready":{"type":"boolean","title":"Ready"},"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"pages_total":{"type":"integer","title":"Pages Total","default":0},"pages_done":{"type":"integer","title":"Pages Done","default":0},"embed_total":{"type":"integer","title":"Embed Total","default":0},"embed_done":{"type":"integer","title":"Embed Done","default":0},"can_retry":{"type":"boolean","title":"Can Retry","default":true},"created_at":{"type":"string","format":"date-time","title":"Created At"},"chunk_list":{"items":{"$ref":"#/components/schemas/DocChunkOut"},"type":"array","title":"Chunk List","default":[]},"entities":{"items":{"$ref":"#/components/schemas/DocEntityOut"},"type":"array","title":"Entities","default":[]}},"type":"object","required":["id","chunks","embedded","ready","status","created_at"],"title":"MyDocDetailOut","description":"文档详情：入库到底产出了什么。\n\n「状态是 ready」和「这份文件被读懂了」是两回事——前者只说明切片落库了。\n用户没有办法看到切成了几块、每块是什么、抽出了哪些实体，于是「知识星云里没有我的东西」\n这类问题无从自查。这个接口就是把那层黑箱打开。"},"MyDocOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"chunks":{"type":"integer","title":"Chunks"},"embedded":{"type":"integer","title":"Embedded"},"ready":{"type":"boolean","title":"Ready"},"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"pages_total":{"type":"integer","title":"Pages Total","default":0},"pages_done":{"type":"integer","title":"Pages Done","default":0},"embed_total":{"type":"integer","title":"Embed Total","default":0},"embed_done":{"type":"integer","title":"Embed Done","default":0},"can_retry":{"type":"boolean","title":"Can Retry","default":true},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","chunks","embedded","ready","status","created_at"],"title":"MyDocOut"},"MyMemoryOut":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"importance":{"type":"integer","title":"Importance"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","kind","importance","created_at"],"title":"MyMemoryOut"},"MyMessageOut":{"properties":{"id":{"type":"string","title":"Id"},"role":{"type":"string","title":"Role"},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"gen_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gen Ms"},"completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Completion Tokens"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["id","role","content","created_at"],"title":"MyMessageOut"},"MyProfileIn":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},"type":"object","title":"MyProfileIn"},"MyProfileOut":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"detected_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected City"},"detected_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected Timezone"}},"type":"object","title":"MyProfileOut"},"MyRememberedOut":{"properties":{"agent_name":{"type":"string","title":"Agent Name"},"content":{"type":"string","title":"Content"}},"type":"object","required":["agent_name","content"],"title":"MyRememberedOut","description":"Agent 记住的关于我的内容（跨会话画像），按 Agent 分。"},"MyReminderOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"run_at":{"type":"string","format":"date-time","title":"Run At"},"cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron"},"status":{"type":"string","title":"Status"},"channel":{"type":"string","title":"Channel"}},"type":"object","required":["id","run_at","status","channel"],"title":"MyReminderOut"},"MyReminderPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MyReminderOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"MyReminderPage"},"MySessionOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"title_by_user":{"type":"boolean","title":"Title By User","default":false},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"},"message_count":{"type":"integer","title":"Message Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","message_count","created_at"],"title":"MySessionOut"},"MySessionPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MySessionOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"MySessionPage"},"MySpaceOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"is_default":{"type":"boolean","title":"Is Default"},"agents":{"items":{"type":"string"},"type":"array","title":"Agents","default":[]},"session_count":{"type":"integer","title":"Session Count","default":0}},"type":"object","required":["id","name","is_default"],"title":"MySpaceOut"},"OauthCredIn":{"properties":{"client_id":{"type":"string","title":"Client Id"},"client_secret":{"type":"string","title":"Client Secret"}},"type":"object","required":["client_id","client_secret"],"title":"OauthCredIn"},"OauthEnabledIn":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"OauthEnabledIn"},"OauthProviderOut":{"properties":{"provider":{"type":"string","title":"Provider"},"client_id":{"type":"string","title":"Client Id"},"has_secret":{"type":"boolean","title":"Has Secret"},"enabled":{"type":"boolean","title":"Enabled","default":true},"creds_ok":{"type":"boolean","title":"Creds Ok","default":false},"effective":{"type":"boolean","title":"Effective","default":false},"redirect_uri":{"type":"string","title":"Redirect Uri","default":""}},"type":"object","required":["provider","client_id","has_secret"],"title":"OauthProviderOut"},"OverviewOut":{"properties":{"tenants":{"type":"integer","title":"Tenants"},"tenants_disabled":{"type":"integer","title":"Tenants Disabled"},"users":{"type":"integer","title":"Users"},"messages":{"type":"integer","title":"Messages"},"documents":{"type":"integer","title":"Documents"}},"type":"object","required":["tenants","tenants_disabled","users","messages","documents"],"title":"OverviewOut"},"PageContextIn":{"properties":{"label":{"type":"string","title":"Label","default":""},"url_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Pattern"},"context":{"type":"string","title":"Context","default":""},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"questions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Questions"},"greeting_mode":{"type":"string","title":"Greeting Mode","default":"static"},"is_default":{"type":"boolean","title":"Is Default","default":false},"position":{"type":"integer","title":"Position","default":0}},"type":"object","title":"PageContextIn"},"PageContextOut":{"properties":{"label":{"type":"string","title":"Label","default":""},"url_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Pattern"},"context":{"type":"string","title":"Context","default":""},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"questions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Questions"},"greeting_mode":{"type":"string","title":"Greeting Mode","default":"static"},"is_default":{"type":"boolean","title":"Is Default","default":false},"position":{"type":"integer","title":"Position","default":0},"key":{"type":"string","title":"Key"},"generated_langs":{"items":{"type":"string"},"type":"array","title":"Generated Langs"}},"type":"object","required":["key"],"title":"PageContextOut"},"PageOut":{"properties":{"url":{"type":"string","title":"Url"},"status":{"type":"string","title":"Status"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"chars":{"type":"integer","title":"Chars"},"review":{"type":"string","title":"Review"},"review_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Note"},"similar_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Similar To"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["url","status","title","chars","review","review_note","similar_to","error"],"title":"PageOut"},"PasswordIn":{"properties":{"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["new_password"],"title":"PasswordIn"},"PlaybookHitIn":{"properties":{"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"end_user":{"type":"string","title":"End User","default":""},"end_user_proof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End User Proof"},"page_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Key"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"},"id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Token"},"host_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Uid"},"host_ts":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Ts"},"host_sig":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Sig"},"key":{"type":"string","title":"Key","default":""},"question_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Question Index"}},"type":"object","title":"PlaybookHitIn"},"PlaybookOut":{"properties":{"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"greeting":{"type":"string","title":"Greeting","default":""},"questions":{"items":{"type":"string"},"type":"array","title":"Questions","default":[]}},"type":"object","title":"PlaybookOut"},"PlaybookStat":{"properties":{"key":{"type":"string","title":"Key"},"opened":{"type":"integer","title":"Opened","default":0},"question_clicks":{"type":"integer","title":"Question Clicks","default":0},"per_question":{"additionalProperties":{"type":"integer"},"type":"object","title":"Per Question"}},"type":"object","required":["key"],"title":"PlaybookStat"},"PlaybookTemplate":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"context_hint":{"type":"string","title":"Context Hint"},"questions":{"items":{"type":"string"},"type":"array","title":"Questions"}},"type":"object","required":["key","label","context_hint","questions"],"title":"PlaybookTemplate"},"PrefsOut":{"properties":{"prefs":{"additionalProperties":true,"type":"object","title":"Prefs"}},"type":"object","required":["prefs"],"title":"PrefsOut"},"ProbeIn":{"properties":{"instruction":{"type":"string","title":"Instruction"},"tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"},"execute":{"type":"boolean","title":"Execute","default":false}},"type":"object","required":["instruction"],"title":"ProbeIn"},"ProbeOut":{"properties":{"called":{"type":"boolean","title":"Called"},"tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"},"arguments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Arguments"},"executed":{"type":"boolean","title":"Executed","default":false},"result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result"},"reply":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["called"],"title":"ProbeOut"},"ProductIn":{"properties":{"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name"},"description":{"type":"string","title":"Description","default":""},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"availability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image_urls":{"items":{"type":"string"},"type":"array","title":"Image Urls","default":[]},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","required":["name"],"title":"ProductIn"},"ProductOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"availability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image_urls":{"items":{"type":"string"},"type":"array","title":"Image Urls"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"type":"string","title":"Source"}},"type":"object","required":["id","name","description","price","availability","category","tags","image_url","image_urls","link","source"],"title":"ProductOut"},"ProfileIn":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"ProfileIn"},"ProfileOut":{"properties":{"id":{"type":"string","title":"Id"},"agent_name":{"type":"string","title":"Agent Name"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","agent_name","updated_at"],"title":"ProfileOut"},"RegisterIn":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["tenant_id","email","password"],"title":"RegisterIn"},"ResetIn":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetIn"},"ResolveOut":{"properties":{"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"label":{"type":"string","title":"Label","default":""},"matched_by":{"type":"string","title":"Matched By","default":"none"}},"type":"object","title":"ResolveOut"},"RevealOut":{"properties":{"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["config"],"title":"RevealOut"},"ScheduledTaskOut":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"external_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External User Id"},"space_id":{"type":"string","title":"Space Id"},"space_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Space Name"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"session_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Title"},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"},"channel":{"type":"string","title":"Channel"},"kind":{"type":"string","title":"Kind","default":"followup"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron"},"status":{"type":"string","title":"Status"},"instruction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instruction"},"run_at":{"type":"string","format":"date-time","title":"Run At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"}},"type":"object","required":["id","user_id","space_id","channel","status","run_at","created_at"],"title":"ScheduledTaskOut","description":"计划/跟进任务（AI 安排的延后跟进 + 未来的定时提醒共用 scheduled_tasks）。"},"ScheduledTaskPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ScheduledTaskOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"ScheduledTaskPage"},"SearchHit":{"properties":{"chunk_id":{"type":"string","title":"Chunk Id"},"document_id":{"type":"string","title":"Document Id"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"distance":{"type":"number","title":"Distance"}},"type":"object","required":["chunk_id","document_id","content","distance"],"title":"SearchHit"},"SearchIn":{"properties":{"query":{"type":"string","title":"Query"},"k":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K"}},"type":"object","required":["query"],"title":"SearchIn"},"SecretOut":{"properties":{"secret":{"type":"string","title":"Secret"}},"type":"object","required":["secret"],"title":"SecretOut"},"ServerUsageRow":{"properties":{"server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id"},"name":{"type":"string","title":"Name"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"completion_tokens":{"type":"integer","title":"Completion Tokens"},"total_tokens":{"type":"integer","title":"Total Tokens"},"events":{"type":"integer","title":"Events"},"sessions":{"type":"integer","title":"Sessions","default":0}},"type":"object","required":["server_id","name","prompt_tokens","completion_tokens","total_tokens","events"],"title":"ServerUsageRow"},"SessionOut":{"properties":{"id":{"type":"string","title":"Id"},"space_id":{"type":"string","title":"Space Id"},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"message_count":{"type":"integer","title":"Message Count"},"tokens":{"type":"integer","title":"Tokens","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","space_id","message_count","created_at"],"title":"SessionOut"},"SessionPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SessionOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"SessionPage"},"SessionTitleIn":{"properties":{"title":{"type":"string","title":"Title"}},"type":"object","required":["title"],"title":"SessionTitleIn"},"SetPasswordIn":{"properties":{"password":{"type":"string","title":"Password"}},"type":"object","required":["password"],"title":"SetPasswordIn"},"ShareAuthIn":{"properties":{"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"end_user":{"type":"string","title":"End User","default":""},"end_user_proof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End User Proof"},"page_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Key"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"},"id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Token"},"host_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Uid"},"host_ts":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Ts"},"host_sig":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Sig"}},"type":"object","title":"ShareAuthIn","description":"keyless 请求携带的终端用户身份（按 auth_method 三选一）。"},"ShareChatIn":{"properties":{"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"end_user":{"type":"string","title":"End User","default":""},"end_user_proof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End User Proof"},"page_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Key"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"},"id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Token"},"host_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Uid"},"host_ts":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Ts"},"host_sig":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Sig"},"message":{"type":"string","title":"Message","default":""},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images"},"files":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Files"},"audio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audio"},"client_pubkey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Pubkey"}},"type":"object","title":"ShareChatIn"},"ShareClaimIn":{"properties":{"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"end_user":{"type":"string","title":"End User","default":""},"end_user_proof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End User Proof"},"page_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Key"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"},"id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Token"},"host_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Uid"},"host_ts":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Ts"},"host_sig":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Sig"}},"type":"object","title":"ShareClaimIn","description":"认领：把 end_user(+proof) 那段匿名咨询结转给 body 里的账号身份。\n\n继承 ShareAuthIn 是为了复用账号侧的三种身份证明；这里 end_user/end_user_proof 指的是\n**来源**（匿名），id_token 或 host_* 指的是**目标**（正式账号）。"},"ShareClaimOut":{"properties":{"claimed":{"type":"boolean","title":"Claimed"},"summary":{"type":"string","title":"Summary","default":""},"reason":{"type":"string","title":"Reason","default":""}},"type":"object","required":["claimed"],"title":"ShareClaimOut"},"ShareIn":{"properties":{"label":{"type":"string","title":"Label","default":""},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"config":{"anyOf":[{"$ref":"#/components/schemas/WidgetConfig"},{"type":"null"}]}},"type":"object","title":"ShareIn"},"ShareInfo":{"properties":{"agent":{"type":"string","title":"Agent"},"label":{"type":"string","title":"Label"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"auto_greeting":{"type":"boolean","title":"Auto Greeting","default":false},"theme_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme Color"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"launcher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Launcher"},"stt":{"type":"boolean","title":"Stt","default":false},"auth_method":{"type":"string","title":"Auth Method","default":"anonymous"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"providers":{"items":{"type":"string"},"type":"array","title":"Providers","default":[]},"auto_open":{"type":"boolean","title":"Auto Open","default":false},"custom_css":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Css"},"css_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Css Url"},"theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"uploads":{"type":"boolean","title":"Uploads","default":false}},"type":"object","required":["agent","label"],"title":"ShareInfo"},"ShareMessageOut":{"properties":{"id":{"type":"string","title":"Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","role","content","created_at"],"title":"ShareMessageOut"},"ShareOut":{"properties":{"token":{"type":"string","title":"Token"},"agent":{"type":"string","title":"Agent"},"label":{"type":"string","title":"Label"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"config":{"$ref":"#/components/schemas/WidgetConfig"},"has_secret":{"type":"boolean","title":"Has Secret"},"disabled":{"type":"boolean","title":"Disabled"},"url":{"type":"string","title":"Url"},"embed_url":{"type":"string","title":"Embed Url"},"public_base":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Base"}},"type":"object","required":["token","agent","label","config","has_secret","disabled","url","embed_url"],"title":"ShareOut"},"SharePatch":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"config":{"anyOf":[{"$ref":"#/components/schemas/WidgetConfig"},{"type":"null"}]},"disabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disabled"}},"type":"object","title":"SharePatch"},"ShareRenameIn":{"properties":{"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"end_user":{"type":"string","title":"End User","default":""},"end_user_proof":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End User Proof"},"page_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Key"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"},"id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Token"},"host_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Uid"},"host_ts":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Ts"},"host_sig":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Sig"},"title":{"type":"string","title":"Title","default":""}},"type":"object","title":"ShareRenameIn"},"ShareSessionOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"title_by_user":{"type":"boolean","title":"Title By User","default":false},"message_count":{"type":"integer","title":"Message Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","created_at"],"title":"ShareSessionOut"},"ShareSessionPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ShareSessionOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"ShareSessionPage"},"SkillIn":{"properties":{"description":{"type":"string","title":"Description","default":""},"instructions":{"type":"string","title":"Instructions","default":""},"tools":{"items":{"type":"string"},"type":"array","title":"Tools","default":[]}},"type":"object","title":"SkillIn"},"SkillOut":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"instructions":{"type":"string","title":"Instructions"},"tools":{"items":{"type":"string"},"type":"array","title":"Tools"}},"type":"object","required":["name","description","instructions","tools"],"title":"SkillOut"},"SkillPatch":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"tools":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tools"}},"type":"object","title":"SkillPatch","description":"只改传来的字段。理由同 AgentPatch：PUT 是整体替换，一个漏掉 instructions 的\nPUT 会把技能的正文清空。"},"SkillRevisionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"},"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot"}},"type":"object","required":["id","created_at","snapshot"],"title":"SkillRevisionOut"},"SmtpIn":{"properties":{"host":{"type":"string","title":"Host","default":""},"port":{"type":"integer","title":"Port","default":587},"user":{"type":"string","title":"User","default":""},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"from_addr":{"type":"string","title":"From Addr","default":""},"starttls":{"type":"boolean","title":"Starttls","default":true}},"type":"object","title":"SmtpIn"},"Source":{"properties":{"document_id":{"type":"string","title":"Document Id"},"distance":{"type":"number","title":"Distance"}},"type":"object","required":["document_id","distance"],"title":"Source"},"SpaceAgentIn":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"SpaceAgentIn"},"SpaceIn":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"SpaceIn"},"SpaceMergeIn":{"properties":{"target_space_id":{"type":"string","format":"uuid","title":"Target Space Id"}},"type":"object","required":["target_space_id"],"title":"SpaceMergeIn"},"SpaceOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"is_default":{"type":"boolean","title":"Is Default"}},"type":"object","required":["id","name","is_default"],"title":"SpaceOut"},"StorylineExport":{"properties":{"schema_version":{"type":"integer","title":"Schema Version"},"kind":{"type":"string","title":"Kind","default":"storyline"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"agent_name":{"type":"string","title":"Agent Name"},"graph":{"additionalProperties":true,"type":"object","title":"Graph"},"profile_schema":{"additionalProperties":true,"type":"object","title":"Profile Schema"},"is_default":{"type":"boolean","title":"Is Default"},"learner_visibility":{"type":"string","title":"Learner Visibility"},"on_complete":{"type":"string","title":"On Complete"},"allow_agent_enroll":{"type":"boolean","title":"Allow Agent Enroll"},"enroll_trigger":{"type":"string","title":"Enroll Trigger"}},"type":"object","required":["schema_version","key","name","description","agent_name","graph","profile_schema","is_default","learner_visibility","on_complete","allow_agent_enroll","enroll_trigger"],"title":"StorylineExport"},"StorylineImportIn":{"properties":{"schema_version":{"type":"integer","title":"Schema Version","default":1},"key":{"type":"string","title":"Key","default":""},"name":{"type":"string","title":"Name","default":""},"description":{"type":"string","title":"Description","default":""},"agent_name":{"type":"string","title":"Agent Name","default":""},"graph":{"additionalProperties":true,"type":"object","title":"Graph","default":{"nodes":[],"edges":[]}},"profile_schema":{"additionalProperties":true,"type":"object","title":"Profile Schema","default":{}},"learner_visibility":{"type":"string","title":"Learner Visibility","default":"hidden"},"on_complete":{"type":"string","title":"On Complete","default":"end"},"allow_agent_enroll":{"type":"boolean","title":"Allow Agent Enroll","default":false},"enroll_trigger":{"type":"string","title":"Enroll Trigger","default":""},"override_agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override Agent Name"}},"type":"object","title":"StorylineImportIn"},"StorylineIn":{"properties":{"agent_name":{"type":"string","title":"Agent Name"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name","default":""},"description":{"type":"string","title":"Description","default":""},"graph":{"additionalProperties":true,"type":"object","title":"Graph","default":{"nodes":[],"edges":[]}},"profile_schema":{"additionalProperties":true,"type":"object","title":"Profile Schema","default":{}},"is_default":{"type":"boolean","title":"Is Default","default":false},"learner_visibility":{"type":"string","title":"Learner Visibility","default":"hidden"},"on_complete":{"type":"string","title":"On Complete","default":"end"},"allow_agent_enroll":{"type":"boolean","title":"Allow Agent Enroll","default":false},"enroll_trigger":{"type":"string","title":"Enroll Trigger","default":""},"next_storyline_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Next Storyline Id"},"position":{"type":"integer","title":"Position","default":0},"expected_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Version"}},"type":"object","required":["agent_name","key"],"title":"StorylineIn"},"StorylineOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"agent_name":{"type":"string","title":"Agent Name"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"graph":{"additionalProperties":true,"type":"object","title":"Graph"},"profile_schema":{"additionalProperties":true,"type":"object","title":"Profile Schema"},"status":{"type":"string","title":"Status"},"published_revision_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Published Revision Id"},"is_default":{"type":"boolean","title":"Is Default"},"learner_visibility":{"type":"string","title":"Learner Visibility"},"on_complete":{"type":"string","title":"On Complete"},"allow_agent_enroll":{"type":"boolean","title":"Allow Agent Enroll"},"enroll_trigger":{"type":"string","title":"Enroll Trigger"},"next_storyline_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Next Storyline Id"},"position":{"type":"integer","title":"Position"},"version":{"type":"integer","title":"Version"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","agent_name","key","name","description","graph","profile_schema","status","published_revision_id","is_default","learner_visibility","on_complete","allow_agent_enroll","enroll_trigger","next_storyline_id","position","version","updated_at"],"title":"StorylineOut"},"TagsIn":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["tags"],"title":"TagsIn"},"TelegramStatusOut":{"properties":{"connected":{"type":"boolean","title":"Connected"},"enabled":{"type":"boolean","title":"Enabled","default":false},"bot_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot Username"},"bot_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot Link"},"has_token":{"type":"boolean","title":"Has Token","default":false}},"type":"object","required":["connected"],"title":"TelegramStatusOut"},"TelegramToggleIn":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"TelegramToggleIn"},"TelegramTokenIn":{"properties":{"bot_token":{"type":"string","title":"Bot Token"}},"type":"object","required":["bot_token"],"title":"TelegramTokenIn"},"TemplateOut":{"properties":{"name":{"type":"string","title":"Name"},"soul":{"type":"string","title":"Soul"},"task":{"type":"string","title":"Task"},"tools":{"items":{"type":"string"},"type":"array","title":"Tools"},"skills":{"items":{"type":"string"},"type":"array","title":"Skills"},"history_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"History Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["name","soul","task","tools","skills"],"title":"TemplateOut"},"TenantAccountOut":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"}},"type":"object","required":["id","email","created_at"],"title":"TenantAccountOut"},"TenantMeOut":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"auth_mode":{"type":"string","title":"Auth Mode"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"public_base":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Base"}},"type":"object","required":["tenant_id","name","auth_mode"],"title":"TenantMeOut"},"TenantOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"disabled":{"type":"boolean","title":"Disabled"},"privacy_mode":{"type":"boolean","title":"Privacy Mode"},"onboarding_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Onboarding Config"},"auth_mode":{"type":"string","title":"Auth Mode","default":"proxy"},"status":{"type":"string","title":"Status","default":"active"},"profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Profile"},"byok_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Byok Provider"},"user_count":{"type":"integer","title":"User Count","default":0},"agent_count":{"type":"integer","title":"Agent Count","default":0},"message_count":{"type":"integer","title":"Message Count","default":0},"document_count":{"type":"integer","title":"Document Count","default":0},"tokens_24h":{"type":"integer","title":"Tokens 24H","default":0},"tokens_total":{"type":"integer","title":"Tokens Total","default":0},"month_tokens":{"type":"integer","title":"Month Tokens","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","disabled","privacy_mode","created_at"],"title":"TenantOut"},"TenantPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TenantOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"TenantPage"},"TenantPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"disabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disabled"},"onboarding_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Onboarding Config"},"auth_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Mode"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Profile"}},"type":"object","title":"TenantPatch"},"TenantSettingsOut":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"alias_prefix":{"type":"string","title":"Alias Prefix","default":"/t/"},"auth_mode":{"type":"string","title":"Auth Mode"},"privacy_mode":{"type":"boolean","title":"Privacy Mode"},"status":{"type":"string","title":"Status"},"profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Profile"},"onboarding_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Onboarding Config"},"oauth":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Oauth","default":[]},"smtp":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Smtp"}},"type":"object","required":["tenant_id","name","auth_mode","privacy_mode","status"],"title":"TenantSettingsOut"},"TenantSettingsPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"auth_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Mode"},"profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Profile"},"onboarding_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Onboarding Config"}},"type":"object","title":"TenantSettingsPatch"},"TestConfigIn":{"properties":{"transport":{"type":"string","title":"Transport","default":"streamable_http"},"config":{"additionalProperties":true,"type":"object","title":"Config","default":{}}},"type":"object","title":"TestConfigIn"},"TgBindOut":{"properties":{"deep_link":{"type":"string","title":"Deep Link"},"qr_svg":{"type":"string","title":"Qr Svg"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"bot_username":{"type":"string","title":"Bot Username"}},"type":"object","required":["deep_link","qr_svg","expires_at","bot_username"],"title":"TgBindOut"},"TgStatusOut":{"properties":{"available":{"type":"boolean","title":"Available"},"bound":{"type":"boolean","title":"Bound","default":false},"bot_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot Username"}},"type":"object","required":["available"],"title":"TgStatusOut"},"TokenOut":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"user_id":{"type":"string","title":"User Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"external_user_id":{"type":"string","title":"External User Id"},"verified":{"type":"boolean","title":"Verified","default":true},"needs_verification":{"type":"boolean","title":"Needs Verification","default":false}},"type":"object","required":["user_id","tenant_id","external_user_id"],"title":"TokenOut"},"UsageOut":{"properties":{"group":{"type":"string","title":"Group"},"total":{"$ref":"#/components/schemas/UsageRow"},"rows":{"items":{"$ref":"#/components/schemas/UsageRow"},"type":"array","title":"Rows"}},"type":"object","required":["group","total","rows"],"title":"UsageOut"},"UsageRow":{"properties":{"key":{"type":"string","title":"Key"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"completion_tokens":{"type":"integer","title":"Completion Tokens"},"total_tokens":{"type":"integer","title":"Total Tokens"},"events":{"type":"integer","title":"Events"}},"type":"object","required":["key","prompt_tokens","completion_tokens","total_tokens","events"],"title":"UsageRow"},"UserDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"external_user_id":{"type":"string","title":"External User Id"},"pref_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pref Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"space_count":{"type":"integer","title":"Space Count","default":0},"session_count":{"type":"integer","title":"Session Count","default":0},"document_count":{"type":"integer","title":"Document Count","default":0},"auth":{"type":"string","title":"Auth","default":"proxy"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"email_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Verified"},"tokens_24h":{"type":"integer","title":"Tokens 24H","default":0},"spaces":{"items":{"$ref":"#/components/schemas/SpaceOut"},"type":"array","title":"Spaces","default":[]},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"pref_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pref City"},"pref_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pref Timezone"}},"type":"object","required":["id","external_user_id","created_at"],"title":"UserDetailOut"},"UserOut":{"properties":{"id":{"type":"string","title":"Id"},"external_user_id":{"type":"string","title":"External User Id"},"pref_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pref Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"space_count":{"type":"integer","title":"Space Count","default":0},"session_count":{"type":"integer","title":"Session Count","default":0},"document_count":{"type":"integer","title":"Document Count","default":0},"auth":{"type":"string","title":"Auth","default":"proxy"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"email_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Verified"},"tokens_24h":{"type":"integer","title":"Tokens 24H","default":0}},"type":"object","required":["id","external_user_id","created_at"],"title":"UserOut"},"UserPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items"],"title":"UserPage"},"UserUsageOut":{"properties":{"points":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Points"},"total_tokens":{"type":"integer","title":"Total Tokens"}},"type":"object","required":["points","total_tokens"],"title":"UserUsageOut"},"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"},"ValidationOut":{"properties":{"ok":{"type":"boolean","title":"Ok"},"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Errors"}},"type":"object","required":["ok","errors"],"title":"ValidationOut"},"VisitorOut":{"properties":{"end_user":{"type":"string","title":"End User"},"proof":{"type":"string","title":"Proof"}},"type":"object","required":["end_user","proof"],"title":"VisitorOut","description":"服务端签发的匿名访客身份。浏览器两个都存，之后每次请求带上。"},"WaBindOut":{"properties":{"link":{"type":"string","title":"Link"},"qr_svg":{"type":"string","title":"Qr Svg"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"wa_number":{"type":"string","title":"Wa Number"}},"type":"object","required":["link","qr_svg","expires_at","wa_number"],"title":"WaBindOut"},"WaBindStatusOut":{"properties":{"available":{"type":"boolean","title":"Available"},"bound":{"type":"boolean","title":"Bound","default":false},"wa_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wa Number"}},"type":"object","required":["available"],"title":"WaBindStatusOut"},"WaConnectIn":{"properties":{"phone_number_id":{"type":"string","title":"Phone Number Id"},"access_token":{"type":"string","title":"Access Token"},"app_secret":{"type":"string","title":"App Secret","default":""},"display_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Phone"},"graph_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Graph Version"}},"type":"object","required":["phone_number_id","access_token"],"title":"WaConnectIn"},"WaStatusOut":{"properties":{"connected":{"type":"boolean","title":"Connected"},"enabled":{"type":"boolean","title":"Enabled","default":false},"phone_number_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number Id"},"display_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Phone"},"callback_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Url"},"verify_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verify Token"},"has_token":{"type":"boolean","title":"Has Token","default":false}},"type":"object","required":["connected"],"title":"WaStatusOut"},"WaToggleIn":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"WaToggleIn"},"WidgetConfig":{"properties":{"theme_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme Color"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"launcher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Launcher"},"allowed_domains":{"items":{"type":"string"},"type":"array","title":"Allowed Domains","default":[]},"auth_method":{"type":"string","title":"Auth Method","default":"anonymous"},"auto_open":{"type":"boolean","title":"Auto Open","default":false},"custom_css":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Css"},"css_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Css Url"},"theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"uploads":{"type":"boolean","title":"Uploads","default":false},"upload_daily_limit":{"type":"integer","title":"Upload Daily Limit","default":20}},"type":"object","title":"WidgetConfig"},"app__api__agents__RevisionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"},"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot"}},"type":"object","required":["id","created_at","snapshot"],"title":"RevisionOut"},"app__api__auth_end_user__LoginIn":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["tenant_id","email","password"],"title":"LoginIn"},"app__api__console_auth__LoginIn":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","password"],"title":"LoginIn"},"app__api__storylines__RevisionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"version":{"type":"integer","title":"Version"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","version","actor","created_at"],"title":"RevisionOut"}}},"tags":[{"name":"health","description":"健康检查与就绪探针（无需鉴权）。"},{"name":"meta","description":"服务信息（版本、名称）。"},{"name":"end-user-auth","description":"终端用户平台原生认证：邮箱+密码注册/登录、邮箱验证、找回密码、社交 OAuth。请求带 tenant_id（公开标识）；登录返回 JWT，之后用 `Authorization: Bearer <jwt>`。"},{"name":"auth","description":"终端用户身份与自助：`/me` 回显身份；`/me/spaces` 管理自己的空间；`/me/spaces/{id}/agents` 把已发布 Agent 加入/移出空间；`/me/agents` 可选 Agent。鉴权：`Authorization: Bearer <jwt>`（平台登录）或 `X-API-Key + X-End-User`（代理）。"},{"name":"chat","description":"对话（RAG 检索 + 工具/MCP + 记忆），按空间隔离、流式可选。只有已加入该空间的 Agent 可对话；超月度配额返回 429。鉴权同 auth。可选 `X-Space-Id` 指定空间。"},{"name":"share","description":"匿名分享页对话：客户凭分享令牌与某个 Agent 对话，无需账号/API Key。"},{"name":"telegram","description":"Telegram bot 整合：每 Agent 一个 bot（webhook 回调 + 租户端 token 管理）；终端用户私聊用 telegram:<id> 身份，或扫码绑定平台账号共享会话。"},{"name":"whatsapp","description":"WhatsApp 整合（Meta Cloud API）：每 Agent 一个号（App 级 webhook + 签名校验 + 租户端凭证管理）；终端用户用 whatsapp:<号> 身份，或扫码绑定平台账号共享会话。"},{"name":"admin","description":"平台管理（`X-Admin-Token`）：租户 CRUD、API Key 签发/吊销、用量概览、审计、租户级 OAuth 凭证、冷启动模板、状态/档案。"},{"name":"tenant","description":"租户自服务设置（隐私模式 BYOK 等）。鉴权 `X-API-Key`。"},{"name":"manage","description":"租户管理面（`X-API-Key`，或平台 admin `X-Admin-Token + X-Act-Tenant`）：用户列表/详情/删除、空间与成员、文档、会话（客服只读）、用量汇总、重置用户密码。隐私模式内容不可读。"},{"name":"agents","description":"智能体 CRUD（人格/职责/工具/技能/发布）+ 分享链接。鉴权 `X-API-Key`。"},{"name":"skills","description":"技能 CRUD（按需加载的能力包）。"},{"name":"templates","description":"智能体模板（只读示例，可实例化为租户 Agent）。"},{"name":"tools","description":"可用工具清单（内置 + 该租户 MCP 工具），供 Agent 工具白名单选择。"},{"name":"mcp-servers","description":"租户私有 MCP server 注册（增删改 + 测试连接）；密钥加密存。"},{"name":"attachments","description":"附件（聊天图片原文件）访问，按用户/空间隔离。"},{"name":"integration","description":"接入分发：管理 MCP 的远程 HTTP 端点 `/mcp` 与给智能体看的指南。"},{"name":"console","description":"控制台登录（用户名+密码）：管理员用 ADMIN_USER/ADMIN_PASS；租户用其控制台账号（邮箱+密码，由平台管理员建租户时一并创建）。会话令牌带 typ=console，与终端用户 JWT 严格分型、不可互相冒充。"}]}