{ "swagger": "2.0", "info": { "description": "WeKnora 知识库管理系统 API 文档", "title": "WeKnora API", "termsOfService": "http://swagger.io/terms/", "contact": { "name": "WeKnora Github", "url": "https://github.com/Tencent/WeKnora" }, "version": "1.0" }, "basePath": "/api/v1", "paths": { "/agent-chat/{session_id}": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "基于Agent的智能问答,支持多轮对话和SSE流式响应", "consumes": [ "application/json" ], "produces": [ "text/event-stream" ], "tags": [ "问答" ], "summary": "Agent问答", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true }, { "description": "问答请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.CreateKnowledgeQARequest" } }, { "enum": [ "handle", "public" ], "type": "string", "default": "handle", "description": "文件引用形式,public 返回可加载直链", "name": "resource_urls", "in": "query" } ], "responses": { "200": { "description": "SSE 事件流", "schema": { "type": "string" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/agent/mcp-oauth-resolutions/{pending_id}": { "post": { "security": [ { "Bearer": [] } ], "description": "用户在对话中完成 OAuth 授权后调用,校验令牌存在后恢复被暂停的 Agent 工具调用", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "完成对话内 MCP OAuth 授权", "parameters": [ { "type": "string", "description": "待授权 ID", "name": "pending_id", "in": "path", "required": true }, { "description": "{service_id: string}", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "用户尚未完成授权", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/agent/mcp-oauth-resolutions/{pending_id}/cancel": { "post": { "security": [ { "Bearer": [] } ], "description": "用户主动跳过 OAuth 授权,解除 Agent 阻塞", "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "跳过对话内 MCP OAuth 授权", "parameters": [ { "type": "string", "description": "待授权 ID", "name": "pending_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/agent/prompts/{prompt_id}": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "回答 Agent 运行中发起的交互(ask_user 提问或工具审批)。\nkind 须与交互一致,response 为该类型的回答 JSON(不接受未知字段):\nask_user 为 {selected?, values?, text?, declined?};\ntool_approval 为 {approved: bool, modified_args?: object, reason?: string}。\n返回 resumed=true 表示运行已挂起并在本次回答后恢复,客户端需重新接入该消息的事件流", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Agent" ], "summary": "回答 Agent 的交互请求", "parameters": [ { "type": "string", "description": "交互 ID(事件中的 pending_id)", "name": "prompt_id", "in": "path", "required": true }, { "description": "{kind: \\", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "{success: true, resumed: bool}", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "回答不合法或交互已结束", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "交互不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/agent/tool-approvals/{pending_id}": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "用户审批通过或驳回一次工具调用(用于 Agent 阻塞等待审批的场景)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "处理 MCP 工具调用待审批请求", "parameters": [ { "type": "string", "description": "待审批记录 ID", "name": "pending_id", "in": "path", "required": true }, { "description": "{decision: \\", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "审批结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "待审批记录不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/agents": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取当前空间的所有智能体(包括内置智能体)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "获取智能体列表", "parameters": [ { "enum": [ "mine", "others" ], "type": "string", "x-agent": true, "description": "创建者过滤,仅 mine 与 others 生效", "name": "creator", "in": "query" } ], "responses": { "200": { "description": "智能体列表", "schema": { "$ref": "#/definitions/internal_handler.ListAgentsResponse" } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "agent.list", "max_items": 200, "risk": "read" }, "x-agent-hint": "Lists the workspace's agents, built-in ones included. Built-in agents are shared by everyone; only an admin can change them." }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "创建新的自定义智能体", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "创建智能体", "parameters": [ { "description": "智能体信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.CreateAgentRequest" } } ], "responses": { "201": { "description": "创建的智能体", "schema": { "$ref": "#/definitions/internal_handler.AgentWriteResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "agent.create", "label_param": "name", "risk": "write" }, "x-agent-hint": "Creates a smart-reasoning agent with default settings, owned by the user. It can call MCP services and skills. Configure it afterwards with agent.update." } }, "/agents/placeholders": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取所有可用的提示词占位符定义,按字段类型分组", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "获取占位符定义", "responses": { "200": { "description": "占位符定义", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.PlaceholderGroups" } } } ] } } } } }, "/agents/tools": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回编辑器可勾选的内置工具(含分组和知识库能力要求)、工具列表未设置时生效的默认工具,以及由开关控制、写入工具列表也不生效的工具", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "获取智能体可选工具", "responses": { "200": { "description": "工具目录", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_agent_tools.AgentToolCatalog" } } } ] } } } } }, "/agents/type-presets": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回所有 smart-reasoning 下可用的智能体类型预设(RAG/Wiki/Hybrid/Custom),用于编辑器自动填充系统提示词、工具和 KB 兼容性", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "获取智能体类型预设列表", "responses": { "200": { "description": "预设列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AgentTypePresetEntry" } } } } ] } } } } }, "/agents/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID获取智能体详情", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "获取智能体详情", "parameters": [ { "type": "string", "x-agent": "agent_id", "description": "智能体ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "智能体详情", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgent" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "智能体不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "agent.get", "risk": "read" }, "x-agent-hint": "Returns an agent's settings, including its full system prompt, tools and MCP and skill scope." }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新智能体的名称、描述和配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "更新智能体", "parameters": [ { "type": "string", "description": "智能体ID", "name": "id", "in": "path", "required": true }, { "description": "更新请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateAgentRequest" } } ], "responses": { "200": { "description": "更新后的智能体", "schema": { "$ref": "#/definitions/internal_handler.AgentWriteResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无法修改内置智能体", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定的智能体", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "删除智能体", "parameters": [ { "type": "string", "x-agent": "agent_id", "description": "智能体ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无法删除内置智能体", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "智能体不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "agent.delete", "label": "name", "risk": "destructive", "target": "agent.get" }, "x-agent-hint": "Deletes an agent and its IM channels. Cannot be undone; built-in agents cannot be deleted." }, "patch": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "只修改请求中出现的字段,其余配置保持不变。\n支持名称、描述、运行模式、系统提示词、对话模型、知识库、MCP、技能范围、联网搜索、多轮对话。\nagent_mode 取 quick-answer 或 smart-reasoning。MCP 与技能只在 smart-reasoning 下运行,切到该模式会打开多轮对话。\n传 knowledge_bases、mcp_services 或 selected_skills 而不传对应模式时,切换为 selected。\n技能模式 all/none 清空技能列表;启用技能须先在编辑器选择沙箱,selected 名称须可用,否则返回 400。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "部分更新智能体", "parameters": [ { "type": "string", "x-agent": "agent_id", "description": "智能体ID", "name": "id", "in": "path", "required": true }, { "description": "要修改的字段", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.PatchAgentRequest" } } ], "responses": { "200": { "description": "更新后的智能体", "schema": { "$ref": "#/definitions/internal_handler.AgentWriteResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权修改该智能体", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "智能体不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "agent.update", "label": "name", "require_complete_target": true, "risk": "write", "target": "agent.get" }, "x-agent-hint": "Changes the listed settings of an agent; a field left out is kept. agent_mode is quick-answer or smart-reasoning; MCP services and skills only run in smart-reasoning, and switching to it turns multi-turn on. system_prompt replaces the whole prompt, so start from the full prompt agent.get returns. Take model_id from model.list (a KnowledgeQA model), knowledge base ids from knowledge_base.list and MCP service ids from mcp_service.list. Take skill names exactly from skill.list with the agent's sandbox_config_id. knowledge_base_ids, mcp_service_ids or selected_skills alone also switch that scope to selected." } }, "/agents/{id}/copy": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "复制指定的智能体", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "复制智能体", "parameters": [ { "type": "string", "x-agent": "agent_id", "description": "智能体ID", "name": "id", "in": "path", "required": true } ], "responses": { "201": { "description": "复制成功", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgent" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "智能体不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "agent.copy", "label": "name", "risk": "write", "target": "agent.get" }, "x-agent-hint": "Copies an agent, settings included; the copy belongs to the user." } }, "/agents/{id}/shares/{share_id}": { "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "从智能体的共享列表中移除指定共享关系", "produces": [ "application/json" ], "tags": [ "组织" ], "summary": "取消智能体共享", "parameters": [ { "type": "string", "description": "智能体 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "共享记录 ID", "name": "share_id", "in": "path", "required": true } ], "responses": { "200": { "description": "success: true", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "403": { "description": "无权限", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/agents/{id}/suggested-questions": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "基于智能体关联的知识库,返回推荐问题供用户快捷提问", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "智能体" ], "summary": "获取推荐问题", "parameters": [ { "type": "string", "description": "智能体ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "知识库ID列表(逗号分隔),覆盖智能体默认配置", "name": "knowledge_base_ids", "in": "query" }, { "type": "string", "description": "知识ID列表(逗号分隔),限定到具体文档", "name": "knowledge_ids", "in": "query" }, { "type": "string", "description": "带知识库归属的标签范围(JSON)", "name": "tag_scopes", "in": "query" }, { "type": "integer", "description": "返回数量上限(未传时使用智能体配置的开场问题数量,最大30)", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "推荐问题列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.SuggestedQuestionsData" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "智能体不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/artifacts": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "跨会话列出当前用户可见会话中技能生成的文件,每个文件只返回最新版本(不含存储 URL)", "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "列出我的产物", "parameters": [ { "type": "string", "description": "按文件名过滤", "name": "keyword", "in": "query" }, { "type": "string", "description": "逗号分隔的扩展名,如 .pdf,.pptx", "name": "file_types", "in": "query" }, { "type": "integer", "description": "页码", "name": "page", "in": "query" }, { "type": "integer", "description": "每页数量(最大 100)", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "删除产物库中的一个文件。产物库一行代表一个文件的最新版本,默认连同该文件在本会话中的所有历史版本一并删除", "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "删除产物库中的文件", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "query", "required": true }, { "type": "string", "description": "消息ID", "name": "message_id", "in": "query", "required": true }, { "type": "integer", "description": "产物在消息中的位置", "name": "index", "in": "query", "required": true }, { "type": "boolean", "description": "是否删除所有版本,默认 true", "name": "all_versions", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/auto-setup": { "post": { "description": "Lite 版专用:首次启动时自动创建默认用户和空间并返回令牌,首次及后续启动均须通过桌面原生凭据认证,免除手动注册/登录流程", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "自动初始化(Lite 桌面版)", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.LoginResponse" } }, "403": { "description": "非 Lite 版本", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/change-password": { "post": { "security": [ { "Bearer": [] } ], "description": "修改当前用户的登录密码。新密码须满足 8–32 位且同时包含字母与数字;开启复杂密码后还需包含大小写与特殊字符。成功后所有会话被撤销,需重新登录。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "修改密码", "parameters": [ { "description": "密码修改请求", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "properties": { "new_password": { "type": "string" }, "old_password": { "type": "string" } } } } ], "responses": { "200": { "description": "修改成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/config": { "get": { "description": "返回当前部署的注册模式与密码复杂度开关,供前端决定是否展示注册入口以及密码校验规则", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "获取认证配置", "responses": { "200": { "description": "认证配置", "schema": { "$ref": "#/definitions/internal_handler.GetAuthConfigResponse" } } } } }, "/auth/invitations/lookup": { "post": { "description": "根据邀请链接中的 token 返回邀请上下文(空间名 / 角色 / 过期时间),\n供注册页展示。无认证;token 无效或被撤销返回 410。\n使用 POST + body 而非 GET + path,避免 token 落入访问日志 / 浏览器历史 / tracing。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "解析共享邀请链接 token", "parameters": [ { "description": "邀请 token", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.invitationLookupRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.invitationLookupResponse" } }, "410": { "description": "链接无效或已撤销", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/login": { "post": { "description": "用户登录并获取访问令牌", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "用户登录", "parameters": [ { "description": "登录请求参数", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.LoginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.LoginResponse" } }, "401": { "description": "认证失败", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/logout": { "post": { "security": [ { "Bearer": [] } ], "description": "撤销当前访问令牌并登出", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "用户登出", "responses": { "200": { "description": "登出成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/me": { "get": { "security": [ { "Bearer": [] } ], "description": "获取当前登录用户的详细信息", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "获取当前用户信息", "responses": { "200": { "description": "用户信息", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.CurrentUserData" } } } ] } }, "401": { "description": "未授权", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/me/preferences": { "put": { "security": [ { "Bearer": [] } ], "description": "按 PATCH 语义合并用户偏好(仅覆盖请求体里出现的字段,其余字段保持不变),\n数据存放在 users.preferences (JSON),跨设备/浏览器自动同步。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "更新当前用户的个性化设置", "parameters": [ { "description": "Preferences patch", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.updateMyPreferencesRequest" } } ], "responses": { "200": { "description": "更新后的偏好", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserPreferences" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "未授权", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/oidc/callback": { "get": { "description": "接收OIDC provider回调并由后端完成code交换,随后重定向回前端登录页", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "OIDC登录重定向回调", "parameters": [ { "type": "string", "description": "OIDC授权码", "name": "code", "in": "query" }, { "type": "string", "description": "OIDC状态", "name": "state", "in": "query" }, { "type": "string", "description": "OIDC错误码", "name": "error", "in": "query" } ], "responses": { "302": { "description": "Found" } } } }, "/auth/oidc/config": { "get": { "description": "返回OIDC是否启用以及provider展示名称,供前端决定是否展示OIDC登录入口", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "获取OIDC登录配置", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OIDCConfigResponse" } } } } }, "/auth/oidc/start": { "get": { "description": "与 /auth/oidc/url 不同,此端点直接 302 重定向到 OIDC Provider 的授权页,\n无需前端 JS 介入。适用于外部平台(如企业门户)直接给出一个链接即可\n触发 OIDC 授权码流程,借助 IdP 的 SSO session 实现免再次输密码。", "tags": [ "认证" ], "summary": "发起 OIDC 登录(直接 302)", "responses": { "302": { "description": "Found" } } } }, "/auth/oidc/url": { "get": { "description": "根据后端OIDC配置生成第三方登录跳转地址", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "获取OIDC授权地址", "parameters": [ { "type": "string", "description": "OIDC回调地址", "name": "redirect_uri", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OIDCAuthURLResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "OIDC未启用", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/refresh": { "post": { "description": "使用刷新令牌获取新的访问令牌", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "刷新令牌", "parameters": [ { "description": "刷新令牌", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "properties": { "refreshToken": { "type": "string" } } } } ], "responses": { "200": { "description": "新令牌", "schema": { "$ref": "#/definitions/internal_handler.RefreshTokenResponse" } }, "401": { "description": "令牌无效", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/register": { "post": { "description": "注册新用户账号", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "用户注册", "parameters": [ { "description": "注册请求参数", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RegisterRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RegisterResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "注册功能已禁用", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/register-by-invite": { "post": { "description": "通过共享邀请链接 token 完成注册,仅 self_serve / invite_register 模式允许。\n注册者自填邮箱(与 token 不绑定);注册成功后自动加入对应空间。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "使用共享链接注册", "parameters": [ { "description": "邀请注册请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.registerByInviteRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.LoginResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "注册功能已禁用", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "邮箱已注册", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "410": { "description": "链接无效或已撤销", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/switch-tenant": { "post": { "security": [ { "Bearer": [] } ], "description": "为当前用户在目标空间重新签发访问令牌;要求该用户在目标空间存在 active 成员关系(跨租户超级用户除外)。\n成功换签会把目标空间写入「最近活跃租户」偏好,下次登录与 refresh 都落在该空间(refresh JWT 不含 tenant_id)。\n该偏好是账号级的:一次换签会改变该用户所有设备的下次登录/refresh 落点。偏好写入失败则整次换签失败,不会发出新 token。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "切换激活空间", "parameters": [ { "description": "切换请求", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "properties": { "refresh_token": { "type": "string" }, "tenant_id": { "type": "integer" } } } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.LoginResponse" } }, "400": { "description": "参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无该空间成员关系或偏好写入失败", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/auth/validate": { "get": { "security": [ { "Bearer": [] } ], "description": "验证访问令牌是否有效", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "认证" ], "summary": "验证令牌", "responses": { "200": { "description": "令牌有效", "schema": { "$ref": "#/definitions/internal_handler.ValidateTokenResponse" } }, "401": { "description": "令牌无效", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/chunker/preview": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "对提交的文本运行自适应分块器并返回分块预览,不写入数据库不生成 embedding。文本最大 64k 字符", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "分块" ], "summary": "预览分块结果", "parameters": [ { "description": "{text, chunking_config}", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.PreviewChunkingRequest" } } ], "responses": { "200": { "description": "分块结果", "schema": { "$ref": "#/definitions/internal_handler.PreviewChunkingResponse" } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "413": { "description": "文本超过预览限制", "schema": { "type": "object", "additionalProperties": true } }, "504": { "description": "分块超时", "schema": { "type": "object", "additionalProperties": true } } } } }, "/chunks/by-id/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "仅通过分块ID获取分块详情(不需要knowledge_id);支持共享知识库下的分块访问", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "分块管理" ], "summary": "通过ID获取分块", "parameters": [ { "type": "string", "description": "分块ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "分块详情", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Chunk" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "分块不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/chunks/by-id/{id}/questions": { "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除分块中生成的问题", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "分块管理" ], "summary": "删除生成的问题", "parameters": [ { "type": "string", "description": "分块ID", "name": "id", "in": "path", "required": true }, { "description": "问题ID", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "properties": { "question_id": { "type": "string" } } } } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "分块不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/chunks/{knowledge_id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取指定知识下的所有分块列表,支持分页。chunk_type 可重复,缺省 text\n取值 text, parent_text, image_ocr, image_caption, image_vector, summary, entity,\nrelationship, faq, web_search, table_summary, table_column, wiki_page", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "分块管理" ], "summary": "获取知识分块列表", "parameters": [ { "type": "string", "x-agent": true, "description": "知识ID", "name": "knowledge_id", "in": "path", "required": true }, { "minimum": 1, "type": "integer", "default": 1, "x-agent": true, "x-agent-maximum": "10000", "description": "页码", "name": "page", "in": "query" }, { "maximum": 100, "minimum": 1, "type": "integer", "default": 10, "x-agent": true, "x-agent-maximum": "20", "description": "每页数量", "name": "page_size", "in": "query" }, { "type": "array", "items": { "enum": [ "text", "parent_text", "image_ocr", "image_caption", "image_vector", "summary", "entity", "relationship", "faq", "web_search", "table_summary", "table_column", "wiki_page" ], "type": "string" }, "collectionFormat": "multi", "x-agent": true, "description": "分块类型,可重复,缺省 text", "name": "chunk_type", "in": "query" } ], "responses": { "200": { "description": "分块列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.PageResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Chunk" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "chunk.list", "risk": "read" }, "x-agent-hint": "The chunks a document was split into, in order; use it to check how a document was parsed. meta.total counts every chunk." }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定知识下的所有分块", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "分块管理" ], "summary": "删除知识下所有分块", "parameters": [ { "type": "string", "description": "知识ID", "name": "knowledge_id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/chunks/{knowledge_id}/{id}": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新指定分块的内容和属性", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "分块管理" ], "summary": "更新分块", "parameters": [ { "type": "string", "description": "知识ID", "name": "knowledge_id", "in": "path", "required": true }, { "type": "string", "description": "分块ID", "name": "id", "in": "path", "required": true }, { "description": "更新请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateChunkRequest" } } ], "responses": { "200": { "description": "更新后的分块", "schema": { "$ref": "#/definitions/internal_handler.UpdateChunkResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "分块不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定的分块", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "分块管理" ], "summary": "删除分块", "parameters": [ { "type": "string", "description": "知识ID", "name": "knowledge_id", "in": "path", "required": true }, { "type": "string", "description": "分块ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "分块不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/datasource": { "get": { "description": "List all data sources for a specific knowledge base", "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "List data sources for a knowledge base", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "description": "Create a new data source configuration for a knowledge base", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "Create a new data source", "parameters": [ { "description": "Data source configuration", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/logs/{log_id}": { "get": { "description": "Retrieve a specific sync log entry", "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "Get specific sync log", "parameters": [ { "type": "string", "description": "Sync log ID", "name": "log_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SyncLog" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/types": { "get": { "description": "Get list of available data source connectors", "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "Get available connectors", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_datasource.ConnectorMetadata" } } } } } }, "/datasource/validate-credentials": { "post": { "description": "Validate connectivity to an external data source using type + credentials", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "Test connection with raw credentials (no persistence)", "parameters": [ { "description": "type and credentials", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/{id}": { "get": { "description": "Retrieve a data source configuration by ID", "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "Get a data source by ID", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "description": "Update an existing data source configuration", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "Update a data source", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true }, { "description": "Updated configuration", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "description": "Delete a data source (soft delete)", "tags": [ "DataSource" ], "summary": "Delete a data source", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/{id}/logs": { "get": { "description": "Retrieve sync history for a data source", "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "Get sync logs", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "description": "Limit (default: 10)", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset (default: 0)", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SyncLog" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/{id}/pause": { "post": { "description": "Pause a data source's scheduled syncs", "tags": [ "DataSource" ], "summary": "Pause data source", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/{id}/resource-ancestors": { "post": { "description": "Resolve the ancestor ExternalIDs that must be expanded to reveal the given (possibly deeply nested) resources in a lazily-loaded picker. Used to restore an existing selection when editing a data source.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "Resolve resource ancestors", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true }, { "description": "Resource IDs to resolve", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.resolveAncestorsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/{id}/resources": { "get": { "description": "List resources available for sync in the external system. Pass parent_id to lazily load the direct children of a resource (used for large hierarchical sources such as Feishu wiki).", "produces": [ "application/json" ], "tags": [ "DataSource" ], "summary": "List available resources in data source", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Parent resource ExternalID; empty lists the top level", "name": "parent_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Resource" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/{id}/resume": { "post": { "description": "Resume a paused data source", "tags": [ "DataSource" ], "summary": "Resume data source", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/{id}/sync": { "post": { "description": "Trigger an immediate sync for a data source", "tags": [ "DataSource" ], "summary": "Trigger immediate sync", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SyncLog" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/datasource/{id}/validate": { "post": { "description": "Validate the connection to an external data source", "tags": [ "DataSource" ], "summary": "Test data source connection", "parameters": [ { "type": "string", "description": "Data source ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/evaluation/": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据任务ID获取评估结果", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "评估" ], "summary": "获取评估结果", "parameters": [ { "type": "string", "description": "评估任务ID", "name": "task_id", "in": "query", "required": true } ], "responses": { "200": { "description": "评估结果", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.EvaluationDetail" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "对知识库进行评估测试", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "评估" ], "summary": "执行评估", "parameters": [ { "description": "评估请求参数", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.EvaluationRequest" } } ], "responses": { "200": { "description": "评估任务", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.EvaluationDetail" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/faq/import/progress/{task_id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取FAQ导入任务的进度", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "获取FAQ导入进度", "parameters": [ { "type": "string", "description": "任务ID", "name": "task_id", "in": "path", "required": true } ], "responses": { "200": { "description": "导入进度", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQImportProgress" } } } ] } }, "404": { "description": "任务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/im-channels/{id}": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新指定 IM 渠道的名称、模式、回复语言、知识库、凭证或启用状态", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "IM 渠道" ], "summary": "更新 IM 渠道", "parameters": [ { "type": "string", "description": "渠道 ID", "name": "id", "in": "path", "required": true }, { "description": "更新字段(含 locale)", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "更新后的渠道", "schema": { "$ref": "#/definitions/internal_handler.UpdateIMChannelResponse" } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "渠道不存在", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定 IM 渠道", "produces": [ "application/json" ], "tags": [ "IM 渠道" ], "summary": "删除 IM 渠道", "parameters": [ { "type": "string", "description": "渠道 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "success: true", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "渠道不存在", "schema": { "type": "object", "additionalProperties": true } } } } }, "/im-channels/{id}/toggle": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "切换指定 IM 渠道的启用状态", "produces": [ "application/json" ], "tags": [ "IM 渠道" ], "summary": "启用/停用 IM 渠道", "parameters": [ { "type": "string", "description": "渠道 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "更新后的渠道", "schema": { "$ref": "#/definitions/internal_handler.UpdateIMChannelResponse" } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "渠道不存在", "schema": { "type": "object", "additionalProperties": true } } } } }, "/im/callback/{channel_id}": { "get": { "description": "接收各 IM 平台的事件回调;走平台自身签名校验,不使用 API Key", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "IM 回调" ], "summary": "IM 平台回调", "parameters": [ { "type": "string", "description": "渠道 ID", "name": "channel_id", "in": "path", "required": true } ], "responses": { "200": { "description": "处理结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "签名校验失败", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "description": "接收各 IM 平台的事件回调;走平台自身签名校验,不使用 API Key", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "IM 回调" ], "summary": "IM 平台回调", "parameters": [ { "type": "string", "description": "渠道 ID", "name": "channel_id", "in": "path", "required": true } ], "responses": { "200": { "description": "处理结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "签名校验失败", "schema": { "type": "object", "additionalProperties": true } } } } }, "/image-attrs/schema": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回当前版本的图片属性注册表、提示词版本和默认动作。全局只读,不绑定知识库。", "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "获取图片属性字典", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.ImageAttrSchemaData" } } } ] } } } } }, "/initialization/asr/check": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "检查ASR(语音识别)模型连接是否正常,通过发送一段静默音频测试 /v1/audio/transcriptions 端点", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "检查ASR模型", "parameters": [ { "description": "ASR检查请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.ModelTestRequest" } } ], "responses": { "200": { "description": "检查结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/config/{kbId}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据知识库ID获取当前配置信息", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "获取知识库配置", "parameters": [ { "type": "string", "description": "知识库ID", "name": "kbId", "in": "path", "required": true } ], "responses": { "200": { "description": "配置信息", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据知识库ID更新模型和分块配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "更新知识库配置", "parameters": [ { "type": "string", "description": "知识库ID", "name": "kbId", "in": "path", "required": true }, { "description": "配置请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.KBModelConfigRequest" } } ], "responses": { "200": { "description": "更新成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/embedding/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "测试Embedding接口是否可用并返回向量维度", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "测试Embedding模型", "parameters": [ { "description": "Embedding测试请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.ModelTestRequest" } } ], "responses": { "200": { "description": "测试结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/extract/fabri-tag": { "post": { "description": "随机生成一组标签", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "生成随机标签", "responses": { "200": { "description": "生成的标签", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.FabriTagResponse" } } } ] } } } } }, "/initialization/extract/fabri-text": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据标签生成示例文本", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "生成示例文本", "parameters": [ { "description": "生成请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.FabriTextRequest" } } ], "responses": { "200": { "description": "生成的文本", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.FabriTextResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/extract/text-relation": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "从文本中提取实体和关系", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "提取文本关系", "parameters": [ { "description": "提取请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.TextRelationExtractionRequest" } } ], "responses": { "200": { "description": "提取结果", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.TextRelationExtractionResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/initialize/{kbId}": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据知识库ID执行完整配置更新", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "初始化知识库配置", "parameters": [ { "type": "string", "description": "知识库ID", "name": "kbId", "in": "path", "required": true }, { "description": "初始化请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.InitializationRequest" } } ], "responses": { "200": { "description": "初始化成功", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/multimodal/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "上传图片测试多模态处理功能", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "测试多模态功能", "parameters": [ { "type": "file", "description": "测试图片", "name": "image", "in": "formData", "required": true }, { "type": "string", "description": "VLM模型名称", "name": "vlm_model", "in": "formData", "required": true }, { "type": "string", "description": "VLM Base URL", "name": "vlm_base_url", "in": "formData", "required": true }, { "type": "string", "description": "VLM API Key", "name": "vlm_api_key", "in": "formData" }, { "type": "string", "description": "VLM接口类型", "name": "vlm_interface_type", "in": "formData" }, { "type": "string", "description": "存储类型(cos/minio)", "name": "storage_type", "in": "formData", "required": true } ], "responses": { "200": { "description": "测试结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/ollama/download/progress/{taskId}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取Ollama模型下载任务的进度", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "获取下载进度", "parameters": [ { "type": "string", "description": "任务ID", "name": "taskId", "in": "path", "required": true } ], "responses": { "200": { "description": "下载进度", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.DownloadTask" } } } ] } }, "404": { "description": "任务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/ollama/download/tasks": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "列出所有Ollama模型下载任务", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "列出下载任务", "responses": { "200": { "description": "任务列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.DownloadTask" } } } } ] } } } } }, "/initialization/ollama/models": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "列出已安装的Ollama模型", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "列出Ollama模型", "responses": { "200": { "description": "模型列表", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/ollama/models/check": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "检查指定的Ollama模型是否已安装", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "检查Ollama模型状态", "parameters": [ { "description": "模型名称列表", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "properties": { "models": { "type": "array", "items": { "type": "string" } } } } } ], "responses": { "200": { "description": "模型状态", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/ollama/models/download": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "异步下载指定的Ollama模型", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "下载Ollama模型", "parameters": [ { "description": "模型名称", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "properties": { "modelName": { "type": "string" } } } } ], "responses": { "200": { "description": "下载任务信息", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/ollama/status": { "get": { "description": "检查Ollama服务是否可用", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "检查Ollama服务状态", "responses": { "200": { "description": "Ollama状态", "schema": { "type": "object", "additionalProperties": true } } } } }, "/initialization/remote/check": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "检查远程API模型连接是否正常", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "检查远程模型", "parameters": [ { "description": "模型检查请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.RemoteModelCheckRequest" } } ], "responses": { "200": { "description": "检查结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/initialization/rerank/check": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "检查Rerank模型连接和功能是否正常", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "初始化" ], "summary": "检查Rerank模型", "parameters": [ { "description": "Rerank检查请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.ModelTestRequest" } } ], "responses": { "200": { "description": "检查结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取当前空间的所有知识库;或当传入 agent_id(共享智能体)时,校验权限后返回该智能体配置的知识库范围(用于 @ 提及)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "获取知识库列表", "parameters": [ { "type": "string", "description": "共享智能体 ID(传入时返回该智能体可用的知识库)", "name": "agent_id", "in": "query" }, { "enum": [ "mine", "others" ], "type": "string", "description": "按创建者过滤,仅 mine 与 others 生效", "name": "creator", "in": "query" } ], "responses": { "200": { "description": "知识库列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.KnowledgeBaseView" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.list", "max_items": 200, "risk": "read" }, "x-agent-hint": "The workspace's own knowledge bases, up to 200. Ones shared from other workspaces are in knowledge_base.list_shared." }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "创建新的知识库", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "创建知识库", "parameters": [ { "description": "知识库信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBase" } } ], "responses": { "201": { "description": "创建的知识库", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.KnowledgeBaseView" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.create", "label_param": "name", "risk": "write" }, "x-agent-hint": "Creates a knowledge base owned by the user. Omit type for document. Omit indexing flags for vector and keyword search. Set embedding_model_id and summary_model_id from model.list. vector_store_id can be chosen only now. A field you leave out keeps its default." } }, "/knowledge-bases/copy": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "将一个知识库的内容复制到另一个知识库(异步任务)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "复制知识库", "parameters": [ { "description": "复制请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.CopyKnowledgeBaseRequest" } } ], "responses": { "200": { "description": "任务ID", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.CopyKnowledgeBaseResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "未认证", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权限", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/copy/progress/{task_id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取知识库复制任务的进度", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "获取知识库复制进度", "parameters": [ { "type": "string", "description": "任务ID", "name": "task_id", "in": "path", "required": true } ], "responses": { "200": { "description": "进度信息", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KBCloneProgress" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "任务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID获取知识库详情。当使用共享智能体时,可传 agent_id 以校验该智能体是否有权访问该知识库。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "获取知识库详情", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "共享智能体 ID(用于校验智能体是否有权访问该知识库)", "name": "agent_id", "in": "query" } ], "responses": { "200": { "description": "知识库详情", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.KnowledgeBaseView" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权访问知识库", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.get", "risk": "read" }, "x-agent-hint": "Check which indexes are enabled (vector, keyword, Wiki, graph) and whether documents are processing." }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新知识库的名称、描述和配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "更新知识库", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "更新请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateKnowledgeBaseRequest" } } ], "responses": { "200": { "description": "更新后的知识库", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.KnowledgeBaseView" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权限", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定的知识库及其所有内容", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "删除知识库", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "仅所有者可删除", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.delete", "label": "name", "risk": "destructive", "target": "knowledge_base.get" }, "x-agent-hint": "Deletes the knowledge base and every document in it. Cannot be undone. Only the owner can delete it." }, "patch": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "修改请求里出现的设置。未出现的字段保持不变,包括分块、索引和模型里没写到的项。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "部分更新知识库", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "要修改的字段", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.PatchKnowledgeBaseRequest" } } ], "responses": { "200": { "description": "更新后的知识库", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.KnowledgeBaseView" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权限", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.update", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Changes the settings you send; a field left out is kept, including one indexing flag or one chunking field. Model ids come from model.list. embedding_model_id cannot change after documents exist. vector_store_id cannot be changed. Graph node types stay in the knowledge base editor." } }, "/knowledge-bases/{id}/activity": { "get": { "security": [ { "Bearer": [] } ], "description": "返回知识库的重要变更与后台任务入口。仅知识库创建者或所属空间管理员可读,共享空间不可读。\n按 id 倒序;把 next_cursor 作为 after_id 取下一页,返回空列表表示没有更多。", "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "获取知识库活动记录", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "x-agent": "cursor", "description": "游标:返回 id 小于此值的记录", "name": "after_id", "in": "query" }, { "maximum": 100, "minimum": 1, "type": "integer", "default": 50, "x-agent": true, "x-agent-maximum": "50", "description": "页大小", "name": "limit", "in": "query" }, { "type": "string", "x-agent": true, "description": "按 action 精确过滤,如 knowledge.deleted", "name": "action", "in": "query" }, { "enum": [ "success", "accepted", "partial", "failed", "denied", "canceled" ], "type": "string", "x-agent": true, "description": "结果过滤", "name": "outcome", "in": "query" }, { "type": "string", "description": "按 actor_user_id 精确过滤", "name": "actor", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.auditLogListResponse" } }, "403": { "description": "非创建者或管理员,或知识库来自其他空间", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.list_activity", "risk": "read", "role": "contributor" }, "x-agent-hint": "Newest first; only the creator or a workspace admin may read it. Assistant actions carry via=agent." } }, "/knowledge-bases/{id}/duplicate": { "post": { "security": [ { "Bearer": [] } ], "description": "创建一个只包含设置的新知识库副本,不复制知识、FAQ 内容、分块、索引、Wiki 页面、分享或置顶状态", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "创建知识库副本", "parameters": [ { "type": "string", "description": "源知识库 ID", "name": "id", "in": "path", "required": true } ], "responses": { "201": { "description": "创建后的知识库副本", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.DuplicateKnowledgeBaseData" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权限", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/faq/entries": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取知识库下的FAQ条目列表,支持分页和筛选", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "获取FAQ条目列表", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "minimum": 1, "type": "integer", "x-agent": true, "x-agent-maximum": "10000", "description": "页码", "name": "page", "in": "query" }, { "maximum": 1000, "minimum": 1, "type": "integer", "x-agent": true, "x-agent-maximum": "50", "description": "每页数量", "name": "page_size", "in": "query" }, { "type": "integer", "description": "标签ID筛选(seq_id),兼容旧版单标签", "name": "tag_id", "in": "query" }, { "type": "string", "x-agent": true, "description": "标签UUID筛选,逗号分隔(OR语义)", "name": "tag_ids", "in": "query" }, { "type": "string", "x-agent": true, "description": "关键词搜索", "name": "keyword", "in": "query" }, { "enum": [ "standard_question", "similar_questions", "answers" ], "type": "string", "x-agent": true, "description": "搜索字段,默认搜索全部", "name": "search_field", "in": "query" }, { "enum": [ "asc" ], "type": "string", "x-agent": true, "description": "排序方式: asc(按更新时间正序), 默认按更新时间倒序", "name": "sort_order", "in": "query" }, { "type": "boolean", "x-agent": true, "description": "启用状态筛选;不传时返回全部", "name": "is_enabled", "in": "query" } ], "responses": { "200": { "description": "FAQ列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.FAQEntryPage" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "faq.list_entries", "risk": "read", "root": "data.data" }, "x-agent-hint": "FAQ entries of an FAQ knowledge base, newest first; keyword searches questions and answers." }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "异步批量更新或插入FAQ条目。支持 dry_run 模式(设置 dry_run=true),异步验证不实际导入。\ndry_run 模式是异步操作,返回 task_id,通过 /faq/import/progress/{task_id} 查询进度和结果。\n验证内容包括:1) 条目基本格式 2) 重复问题(批次内和知识库已有) 3) 内容安全检查。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "批量更新/插入FAQ条目", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "批量操作请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQBatchUpsertPayload" } } ], "responses": { "200": { "description": "任务ID", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.TaskIDData" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "批量删除指定的FAQ条目", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "批量删除FAQ条目", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "要删除的FAQ ID列表(seq_id)", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.faqDeleteRequest" } } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "faq.delete_entries", "items": { "as": "entry_id", "label": "standard_question", "param": "entry_ids", "target": "faq.get_entry" }, "label": "name", "risk": "destructive", "target": "knowledge_base.get" }, "x-agent-hint": "Removes up to 20 FAQ entries. Cannot be undone; the confirmation lists every question." } }, "/knowledge-bases/{id}/faq/entries/export": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "将所有FAQ条目导出为 CSV(默认)或 JSON。?format=json 返回与 FAQEntryPayload 结构兼容的数组。", "consumes": [ "application/json" ], "produces": [ "text/csv", "application/json" ], "tags": [ "FAQ管理" ], "summary": "导出FAQ条目", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "导出格式:csv(默认)或 json", "name": "format", "in": "query" } ], "responses": { "200": { "description": "导出文件", "schema": { "type": "file" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/faq/entries/fields": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "批量更新FAQ条目的多个字段(is_enabled, is_recommended, tag_id)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "批量更新FAQ字段", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "字段更新请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsBatchUpdate" } } ], "responses": { "200": { "description": "更新成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/faq/entries/tags": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "批量更新FAQ条目的标签", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "批量更新FAQ标签", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "标签更新请求", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "更新成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/faq/entries/{entry_id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID获取单个FAQ条目的详情", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "获取FAQ条目详情", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "x-agent": true, "description": "FAQ条目ID(seq_id)", "name": "entry_id", "in": "path", "required": true } ], "responses": { "200": { "description": "FAQ条目详情", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntry" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "条目不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "faq.get_entry", "risk": "read" } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新指定的FAQ条目", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "更新FAQ条目", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "x-agent": true, "description": "FAQ条目ID(seq_id)", "name": "entry_id", "in": "path", "required": true }, { "description": "FAQ条目", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryPayload" } } ], "responses": { "200": { "description": "更新成功", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntry" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "faq.update_entry", "label": "standard_question", "require_complete_target": true, "risk": "write", "target": "faq.get_entry" }, "x-agent-hint": "Replaces the whole entry. Read it with faq.get_entry first and send every field, changed or not, or the rest is lost. Updates are refused if the current entry is truncated; use the FAQ editor for entries beyond the complete-read limits. To only add phrasings, use faq.add_similar_questions." } }, "/knowledge-bases/{id}/faq/entries/{entry_id}/similar-questions": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "向指定的FAQ条目添加相似问题", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "添加相似问", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "x-agent": true, "description": "FAQ条目ID(seq_id)", "name": "entry_id", "in": "path", "required": true }, { "description": "相似问列表", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.addSimilarQuestionsRequest" } } ], "responses": { "200": { "description": "更新后的FAQ条目", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntry" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "条目不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "faq.add_similar_questions", "label": "standard_question", "risk": "write", "target": "faq.get_entry" }, "x-agent-hint": "Adds phrasings to an entry and keeps everything else." } }, "/knowledge-bases/{id}/faq/entry": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "同步创建单个FAQ条目", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "创建单个FAQ条目", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "FAQ条目", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryPayload" } } ], "responses": { "200": { "description": "创建的FAQ条目", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntry" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "faq.create_entry", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Adds one FAQ entry. Questions already used by another entry are refused." } }, "/knowledge-bases/{id}/faq/import/last-result/display": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新FAQ知识库导入结果统计卡片的显示或隐藏状态", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "更新FAQ最后一次导入结果显示状态", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "状态更新请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.updateLastFAQImportResultDisplayStatusRequest" } } ], "responses": { "200": { "description": "更新成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在或无导入记录", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/faq/search": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "使用混合搜索在FAQ中搜索,支持两级优先级标签召回:first_priority_tag_ids优先级最高,second_priority_tag_ids次之", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "FAQ管理" ], "summary": "搜索FAQ", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "搜索请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQSearchRequest" } } ], "responses": { "200": { "description": "搜索结果", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntry" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/hybrid-search": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "底层召回:向量+关键词混合检索,默认不 rerank(可用 rerank 字段开启);一般检索请用 /knowledge-search。推荐 POST,GET 带 JSON 体仅兼容旧客户端。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "混合搜索", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "搜索参数", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SearchParams" } }, { "enum": [ "handle", "public" ], "type": "string", "default": "handle", "description": "文件引用形式,public 返回可加载直链", "name": "resource_urls", "in": "query" } ], "responses": { "200": { "description": "搜索结果", "schema": { "$ref": "#/definitions/internal_handler.HybridSearchResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "底层召回:向量+关键词混合检索,默认不 rerank(可用 rerank 字段开启);一般检索请用 /knowledge-search。推荐 POST,GET 带 JSON 体仅兼容旧客户端。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "混合搜索", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "搜索参数", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SearchParams" } }, { "enum": [ "handle", "public" ], "type": "string", "default": "handle", "description": "文件引用形式,public 返回可加载直链", "name": "resource_urls", "in": "query" } ], "responses": { "200": { "description": "搜索结果", "schema": { "$ref": "#/definitions/internal_handler.HybridSearchResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/images": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "浏览某知识库内的全部图片资产,支持关键字搜索(caption/OCR 文本)、按图片属性筛选(attr_filters / attr_rules)与排序分页。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "knowledge" ], "summary": "列出知识库图片资产", "parameters": [ { "type": "string", "description": "知识库 ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "description": "页码,默认 1", "name": "page", "in": "query" }, { "type": "integer", "description": "每页数量,默认 20,最大 1000", "name": "page_size", "in": "query" }, { "type": "string", "description": "关键字,对 search_in 指定字段做不区分大小写的子串匹配", "name": "keyword", "in": "query" }, { "type": "string", "description": "参与搜索的属性 ID(逗号分隔);须为 in_searchfield=true", "name": "search_in", "in": "query" }, { "type": "string", "description": "排序属性 ID;须为 in_sortfield=true,默认 created_at", "name": "sort_by", "in": "query" }, { "type": "string", "description": "排序方向:asc / desc,默认 desc", "name": "sort_order", "in": "query" }, { "type": "boolean", "description": "仅包含启用状态的图片", "name": "is_enabled", "in": "query" }, { "type": "string", "description": "来源文档 ID 列表(逗号分隔,最多 50 个),仅返回这些文档的图片", "name": "knowledge_ids", "in": "query" }, { "type": "string", "description": "属性筛选 JSON,同一属性多值 OR、属性间 AND", "name": "attr_filters", "in": "query" }, { "type": "string", "description": "属性逐值裁决 JSON(off 隐藏 / on 强制显示,on 优先)", "name": "attr_rules", "in": "query" } ], "responses": { "200": { "description": "图片资产分页列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.PageResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageAsset" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "与 GET /images 同义,筛选参数改经 JSON body 传递:knowledge_ids 不再受 URL 长度限制(上限 1000),供来源文档全选使用。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "knowledge" ], "summary": "列出知识库图片资产(body 版)", "parameters": [ { "type": "string", "description": "知识库 ID", "name": "id", "in": "path", "required": true }, { "description": "筛选参数(与 GET /images 同名参数同义)", "name": "body", "in": "body", "schema": { "$ref": "#/definitions/internal_handler.imageListRequestBody" } } ], "responses": { "200": { "description": "图片资产分页列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.PageResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageAsset" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/knowledge": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取知识库下的知识列表,支持分页和筛选\n不传 parse_status 时不返回删除中(deleting)的文档。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "获取知识列表", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "minimum": 1, "type": "integer", "default": 1, "x-agent": true, "x-agent-maximum": "10000", "description": "页码", "name": "page", "in": "query" }, { "maximum": 1000, "minimum": 1, "type": "integer", "default": 20, "x-agent": true, "x-agent-maximum": "50", "description": "每页数量", "name": "page_size", "in": "query" }, { "type": "string", "x-agent": true, "description": "标签ID筛选,逗号分隔(OR语义)", "name": "tag_ids", "in": "query" }, { "type": "string", "x-agent": true, "description": "关键词搜索", "name": "keyword", "in": "query" }, { "type": "string", "x-agent": true, "description": "文件类型筛选", "name": "file_type", "in": "query" }, { "enum": [ "pending", "processing", "finalizing", "completed", "failed", "cancelled", "deleting" ], "type": "string", "x-agent": true, "description": "状态", "name": "parse_status", "in": "query" }, { "type": "string", "description": "来源/渠道筛选 (web/api/feishu/notion/yuque/wechat/...,或 manual/url 按 type 过滤)", "name": "source", "in": "query" }, { "type": "string", "description": "更新时间起点,RFC3339 格式", "name": "start_time", "in": "query" }, { "type": "string", "description": "更新时间终点,RFC3339 格式", "name": "end_time", "in": "query" }, { "type": "string", "x-agent": true, "description": "文件夹路径筛选,空字符串表示知识库根目录;不传该参数则不按文件夹过滤", "name": "folder_path", "in": "query" }, { "type": "boolean", "x-agent": true, "description": "为 true 时同时返回子文件夹内的文档", "name": "folder_recursive", "in": "query" }, { "enum": [ "created_at", "updated_at", "file_name" ], "type": "string", "default": "created_at", "x-agent": true, "description": "排序字段", "name": "sort_by", "in": "query" }, { "enum": [ "asc", "desc" ], "type": "string", "default": "desc", "x-agent": true, "description": "排序方向", "name": "sort_order", "in": "query" } ], "responses": { "200": { "description": "知识列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.PageResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权访问知识库", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.list", "risk": "read" }, "x-agent-hint": "Use parse_status=failed to find documents that failed to parse; meta.total counts every match." }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除知识库下的所有知识条目(异步任务)。知识库本身保留,仅清空其中的内容", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "清空知识库内容", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "清空任务已提交", "schema": { "$ref": "#/definitions/internal_handler.SubmittedTaskResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/knowledge/batch-download": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "将同一知识库的最多 200 个文档打包为 ZIP,原始内容合计不超过 512 MiB。无原文件的条目会被跳过;无权访问、跨库或读取失败时不返回残缺压缩包。", "consumes": [ "application/json" ], "produces": [ "application/zip" ], "tags": [ "知识管理" ], "summary": "批量下载知识文件", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "文档ID列表", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.BatchDownloadKnowledgeRequest" } } ], "responses": { "200": { "description": "ZIP 压缩包", "schema": { "type": "file" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/knowledge/file": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "上传文件并创建知识条目", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "从文件创建知识", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "file", "description": "上传的文件", "name": "file", "in": "formData", "required": true }, { "type": "string", "description": "自定义文件名", "name": "fileName", "in": "formData" }, { "type": "string", "description": "元数据JSON", "name": "metadata", "in": "formData" }, { "type": "boolean", "description": "启用多模态处理", "name": "enable_multimodel", "in": "formData" }, { "type": "string", "description": "分类ID列表,逗号分隔", "name": "tag_ids", "in": "formData" }, { "type": "string", "description": "处理配置JSON(KnowledgeProcessOverrides)", "name": "process_config", "in": "formData" } ], "responses": { "200": { "description": "创建的知识", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "文件重复", "schema": { "type": "object", "additionalProperties": true } } } } }, "/knowledge-bases/{id}/knowledge/folders": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回知识库内由文件夹上传形成的目录树,包含每个文件夹的直接文档数与含子目录的总数", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "获取知识库文件夹目录树", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "目录树", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeFolderTree" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.list_folders", "max_items": 200, "risk": "read", "root": "data.folders" }, "x-agent-hint": "Top-level document folders, up to 200. meta.root_document_count is documents with no folder and meta.total_document_count is every document. Sub-folders are not listed; filter knowledge.list by folder_path to look inside one." }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "把一个文件夹及其所有子目录改到新路径。目标路径已存在时两个文件夹合并;不能移动到自身子目录下", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "重命名或移动文件夹", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "重命名请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.RenameKnowledgeFolderRequest" } } ], "responses": { "200": { "description": "重命名成功", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.FolderMoveData" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.rename_folder", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Moves a document folder and everything under it to a new path; an existing path is merged into." } }, "/knowledge-bases/{id}/knowledge/manual": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "手工录入Markdown格式的知识内容", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "手工创建知识", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "手工知识内容", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ManualKnowledgePayload" } } ], "responses": { "200": { "description": "创建的知识", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.create_manual", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Creates a Markdown document. Send the full content, and status draft to keep it out of search or publish to index it." } }, "/knowledge-bases/{id}/knowledge/url": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "从指定URL抓取内容并创建知识条目。当提供 file_name/file_type 或 URL 路径含已知文件扩展名时,自动切换为文件下载模式", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "从URL创建知识", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "URL请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.CreateKnowledgeFromURLRequest" } } ], "responses": { "201": { "description": "创建的知识", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "URL重复", "schema": { "type": "object", "additionalProperties": true } } }, "x-agent": { "id": "knowledge.create_from_url", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Fetches a public web page or file into the knowledge base and parses it in the background; follow with knowledge.get_parse_progress. Only use a URL the user gave." } }, "/knowledge-bases/{id}/move-targets": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回与源知识库 Type 一致、EmbeddingModelID 一致、非临时且不是自身的目标知识库列表", "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "获取可移动目标知识库列表", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "源知识库 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "可移动目标列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBase" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "未认证", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权限", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.list_move_targets", "risk": "read" }, "x-agent-hint": "Knowledge bases the documents of this one can be moved to: same type and embedding model." } }, "/knowledge-bases/{id}/pin": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "切换知识库的置顶状态", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "置顶/取消置顶知识库", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "更新后的知识库", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.KnowledgeBaseView" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/profile/generate": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "基于文档画像聚合,立即重新生成知识库的 AI 描述(不覆盖手写描述)", "produces": [ "application/json" ], "tags": [ "知识库" ], "summary": "生成知识库描述", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "生成的知识库画像", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfile" } } } ] } }, "400": { "description": "知识库类型不支持或未配置模型", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权限", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识库不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.generate_profile", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Regenerates the AI summary of what the knowledge base covers, with one model call. A description the user wrote is kept." } }, "/knowledge-bases/{id}/shares": { "get": { "security": [ { "Bearer": [] } ], "description": "获取知识库的所有共享记录", "produces": [ "application/json" ], "tags": [ "知识库共享" ], "summary": "获取知识库的共享列表", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ListSharesResponse" } } } }, "post": { "security": [ { "Bearer": [] } ], "description": "将知识库共享到指定组织", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库共享" ], "summary": "共享知识库到组织", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "共享信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ShareKnowledgeBaseRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseShare" } } } ] } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/shares/{share_id}": { "put": { "security": [ { "Bearer": [] } ], "description": "更新知识库共享的权限级别", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识库共享" ], "summary": "更新共享权限", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "共享记录ID", "name": "share_id", "in": "path", "required": true }, { "description": "权限信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UpdateSharePermissionRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "取消知识库的共享", "tags": [ "知识库共享" ], "summary": "取消共享", "parameters": [ { "type": "string", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "共享记录ID", "name": "share_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-bases/{id}/tags": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取知识库下的所有标签及统计信息", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "标签管理" ], "summary": "获取标签列表", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "minimum": 1, "type": "integer", "x-agent": true, "x-agent-maximum": "10000", "description": "页码", "name": "page", "in": "query" }, { "minimum": 1, "type": "integer", "x-agent": true, "x-agent-maximum": "50", "description": "每页数量", "name": "page_size", "in": "query" }, { "type": "string", "x-agent": true, "description": "关键词搜索", "name": "keyword", "in": "query" } ], "responses": { "200": { "description": "标签列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.TagPageResult" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.list_tags", "max_items": 50, "risk": "read", "root": "data.data" }, "x-agent-hint": "Tags of a knowledge base with how many documents use each. meta.total is the full count; pass tag ids to knowledge.list tag_ids. Ask for at most 50 per page." }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "在知识库下创建新标签", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "标签管理" ], "summary": "创建标签", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "description": "标签信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.CreateTagRequest" } } ], "responses": { "200": { "description": "创建的标签", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeTag" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.create_tag", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Creates a tag in the knowledge base. Pass the returned tag id to knowledge.set_tags." } }, "/knowledge-bases/{id}/tags/{tag_id}": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新标签信息", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "标签管理" ], "summary": "更新标签", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "string", "x-agent": "tag_id", "description": "标签ID (UUID或seq_id)", "name": "tag_id", "in": "path", "required": true }, { "description": "标签更新信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateTagRequest" } } ], "responses": { "200": { "description": "更新后的标签", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeTag" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.update_tag", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Renames a tag. tag_id comes from knowledge_base.list_tags. A field left out is kept." }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除标签,可使用force=true强制删除被引用的标签,content_only=true仅删除标签下的内容而保留标签本身", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "标签管理" ], "summary": "删除标签", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "知识库ID", "name": "id", "in": "path", "required": true }, { "type": "string", "x-agent": "tag_id", "description": "标签ID (UUID或seq_id)", "name": "tag_id", "in": "path", "required": true }, { "type": "boolean", "description": "强制删除", "name": "force", "in": "query" }, { "type": "boolean", "description": "仅删除内容,保留标签", "name": "content_only", "in": "query" }, { "description": "删除选项", "name": "body", "in": "body", "schema": { "$ref": "#/definitions/internal_handler.DeleteTagRequest" } } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge_base.delete_tag", "label": "name", "risk": "destructive", "target": "knowledge_base.get" }, "x-agent-hint": "Deletes a tag that no document uses. If documents still use it, this fails; take the tag off them with knowledge.set_tags first. Documents are not deleted." } }, "/knowledge-chat/{session_id}": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "基于知识库的问答(使用LLM总结),支持SSE流式响应", "consumes": [ "application/json" ], "produces": [ "text/event-stream" ], "tags": [ "问答" ], "summary": "知识问答", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true }, { "description": "问答请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.CreateKnowledgeQARequest" } }, { "enum": [ "handle", "public" ], "type": "string", "default": "handle", "description": "文件引用形式,public 返回可加载直链", "name": "resource_urls", "in": "query" } ], "responses": { "200": { "description": "SSE 事件流", "schema": { "type": "string" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge-search": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "在知识库中搜索(不使用LLM总结)。与产品内问答使用同一检索流程(召回、rerank、合并),外部检索首选;可覆盖召回参数与 rerank", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "问答" ], "summary": "知识搜索", "parameters": [ { "description": "搜索请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.SearchKnowledgeRequest" } }, { "enum": [ "handle", "public" ], "type": "string", "default": "handle", "description": "文件引用形式,public 返回可加载直链", "name": "resource_urls", "in": "query" } ], "responses": { "200": { "description": "搜索结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge/batch": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID列表批量获取知识条目。可选 kb_id:指定时按该知识库校验权限并用于共享知识库的空间解析;可选 agent_id:使用共享智能体时传此参数,后端按智能体所属空间查询(用于刷新后恢复共享知识库下的文件)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "批量获取知识", "parameters": [ { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "知识ID列表", "name": "ids", "in": "query", "required": true }, { "type": "string", "description": "可选,知识库ID(用于共享知识库时指定范围)", "name": "kb_id", "in": "query" }, { "type": "string", "description": "可选,共享智能体ID(用于按智能体空间批量拉取文件详情)", "name": "agent_id", "in": "query" } ], "responses": { "200": { "description": "知识列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge/batch-delete": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "按 ID 列表批量删除单个知识库下的多个知识条目", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "批量删除知识", "parameters": [ { "description": "批量删除请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.BatchDeleteKnowledgeRequest" } } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.SubmittedTaskResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.batch_delete", "items": { "as": "knowledge_id", "label": "title", "param": "knowledge_ids", "target": "knowledge.get" }, "label": "name", "risk": "destructive", "target": "knowledge_base.get" }, "x-agent-hint": "Removes up to 20 documents of one knowledge base with their chunks, embeddings and graph data. Cannot be undone; the confirmation lists every document." } }, "/knowledge/batch-reparse": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "按 ID 列表批量重新解析单个知识库下的多个知识条目", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "批量重新解析知识", "parameters": [ { "description": "批量重解析请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.batchReparseKnowledgeRequest" } } ], "responses": { "200": { "description": "任务已提交", "schema": { "$ref": "#/definitions/internal_handler.SubmittedTaskResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.batch_reparse", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Reparses several documents of one knowledge base in the background; check them afterwards with knowledge.list parse_status. Search results change meanwhile." } }, "/knowledge/folder": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "批量修改知识条目所属文件夹。文件夹由路径推导而来,因此目标路径不存在时会自动创建;空路径表示知识库顶层。仅调整归类,不会重新解析文档", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "移动知识到文件夹", "parameters": [ { "description": "移动请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.MoveKnowledgeToFolderRequest" } } ], "responses": { "200": { "description": "移动成功", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.FolderMoveData" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.move_to_folder", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Files documents of one knowledge base under a folder path such as docs/spec, created on demand; an empty path moves them back to the top level. Nothing is reparsed." } }, "/knowledge/image/{id}/{chunk_id}": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新知识分块的图像信息", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "更新图像信息", "parameters": [ { "type": "string", "description": "知识ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "分块ID", "name": "chunk_id", "in": "path", "required": true }, { "description": "图像信息", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "properties": { "image_info": { "type": "string" } } } } ], "responses": { "200": { "description": "更新成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge/manual/{id}": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新手工录入的Markdown知识内容", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "更新手工知识", "parameters": [ { "type": "string", "x-agent": "knowledge_id", "description": "知识ID", "name": "id", "in": "path", "required": true }, { "description": "手工知识内容", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ManualKnowledgePayload" } } ], "responses": { "200": { "description": "更新后的知识", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.update_manual", "label": "title", "risk": "write", "target": "knowledge.get" }, "x-agent-hint": "Replaces the whole Markdown of a document created as manual knowledge. Send the complete content, not a diff. status draft keeps it out of search; publish indexes it. Uploaded files cannot be edited this way." } }, "/knowledge/move": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "将一条或多条知识从源知识库移动到目标知识库(异步),返回任务 ID 用于查询进度", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识" ], "summary": "移动知识到其他知识库", "parameters": [ { "description": "{source_kb_id, target_kb_id, knowledge_ids}", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.MoveKnowledgeRequest" } } ], "responses": { "200": { "description": "任务信息", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.MoveKnowledgeResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.move", "items": { "as": "knowledge_id", "label": "title", "param": "knowledge_ids", "target": "knowledge.get" }, "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Moves up to 20 documents to another knowledge base of the same workspace; knowledge_base_id is the destination, from knowledge_base.list_move_targets. Runs in the background; follow with knowledge.get_move_progress." } }, "/knowledge/move/progress/{task_id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "按任务 ID 查询移动进度", "produces": [ "application/json" ], "tags": [ "知识" ], "summary": "获取知识移动进度", "parameters": [ { "type": "string", "x-agent": true, "description": "移动任务 ID", "name": "task_id", "in": "path", "required": true } ], "responses": { "200": { "description": "进度信息", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeMoveProgress" } } } ] } }, "404": { "description": "任务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.get_move_progress", "risk": "read" } } }, "/knowledge/search": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Search knowledge files by keyword. Pass recent=true without a keyword to browse recent files. When agent_id is set (shared agent), scope is the agent's configured knowledge bases.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Knowledge" ], "summary": "Search knowledge", "parameters": [ { "type": "string", "description": "Keyword to search", "name": "keyword", "in": "query" }, { "minimum": 0, "type": "integer", "description": "Offset for pagination (minimum 0)", "name": "offset", "in": "query" }, { "maximum": 100, "minimum": 1, "type": "integer", "description": "Limit for pagination (default 20, maximum 100)", "name": "limit", "in": "query" }, { "type": "string", "description": "Comma-separated file extensions to filter (e.g., csv,xlsx)", "name": "file_types", "in": "query" }, { "type": "string", "description": "Shared agent ID (search within agent's KB scope)", "name": "agent_id", "in": "query" }, { "type": "boolean", "description": "Return recent files when keyword is empty", "name": "recent", "in": "query" } ], "responses": { "200": { "description": "Search results", "schema": { "$ref": "#/definitions/internal_handler.KnowledgeSearchKnowledgeResponse" } }, "400": { "description": "Invalid request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge/tags": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "批量更新知识条目的标签。传 updates,或传 knowledge_ids 与 tag_ids。可选 kb_id:指定时按该知识库校验编辑权限并用于共享知识库的空间解析", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "批量更新知识标签", "parameters": [ { "description": "标签更新请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.KnowledgeTagBatchRequest" } } ], "responses": { "200": { "description": "更新成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.set_tags", "items": { "as": "knowledge_id", "label": "title", "param": "knowledge_ids", "target": "knowledge.get" }, "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Sets the same tags on up to 20 documents in one knowledge base, replacing the tags they have now. tag_ids come from knowledge_base.list_tags; an empty tag_ids clears every tag. It does not delete documents." } }, "/knowledge/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID获取知识条目详情", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "获取知识详情", "parameters": [ { "type": "string", "x-agent": "knowledge_id", "description": "知识ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "知识详情", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权访问所属知识库", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.get", "risk": "read" } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "部分更新知识条目(标题/描述/自定义元数据);未传字段保持不变,显式传空 description 可清空摘要", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "更新知识", "parameters": [ { "type": "string", "x-agent": "knowledge_id", "description": "知识ID", "name": "id", "in": "path", "required": true }, { "description": "更新字段(均可选)", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateKnowledgeRequest" } } ], "responses": { "200": { "description": "更新成功", "schema": { "$ref": "#/definitions/internal_handler.UpdateKnowledgeResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.update", "label": "title", "risk": "write", "target": "knowledge.get" }, "x-agent-hint": "Sets a document's title or summary; a field left out is kept." }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID异步删除知识条目。请求会被入队到与批量删除相同的异步管道(asynq);\n接口返回 200 仅表示任务已提交(响应 data.task_id 为任务 ID),实际删除由后台 worker 完成。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "删除知识", "parameters": [ { "type": "string", "x-agent": "knowledge_id", "description": "知识ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "任务已提交", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataMessageResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.TaskIDData" } } } ] } }, "400": { "description": "请求参数错误或知识正在移动", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "需要编辑权限", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.delete", "label": "title", "risk": "destructive", "target": "knowledge.get" }, "x-agent-hint": "Removes the document with its chunks, embeddings and graph data. Cannot be undone." } }, "/knowledge/{id}/cancel-parse": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "取消进行中的知识解析任务。当前已写入的 chunk / 索引保留,可通过 reparse 接口重新触发解析。已完成 / 已失败 / 删除中的知识不支持取消。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "取消知识解析", "parameters": [ { "type": "string", "x-agent": "knowledge_id", "description": "知识ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "取消已提交", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataMessageResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } ] } }, "400": { "description": "状态不支持取消", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.cancel_parse", "label": "title", "risk": "write", "target": "knowledge.get" } } }, "/knowledge/{id}/download": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "下载知识条目关联的原始文件", "consumes": [ "application/json" ], "produces": [ "application/octet-stream" ], "tags": [ "知识管理" ], "summary": "下载知识文件", "parameters": [ { "type": "string", "description": "知识ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "文件内容", "schema": { "type": "file" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge/{id}/preview": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回知识条目关联的原始文件,Content-Type 根据文件类型设置,用于浏览器内嵌预览", "consumes": [ "application/json" ], "produces": [ "application/pdf", "image/jpeg", "image/png", "text/plain" ], "tags": [ "知识管理" ], "summary": "预览知识文件", "parameters": [ { "type": "string", "description": "知识ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "文件内容", "schema": { "type": "file" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledge/{id}/reparse": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除知识中现有的文档内容并重新解析,使用异步任务方式处理", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "重新解析知识", "parameters": [ { "type": "string", "x-agent": "knowledge_id", "description": "知识ID", "name": "id", "in": "path", "required": true }, { "description": "可选;不传则沿用上传时的处理配置", "name": "body", "in": "body", "schema": { "$ref": "#/definitions/internal_handler.ReparseKnowledgeRequest" } } ], "responses": { "200": { "description": "重新解析任务已提交", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataMessageResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.reparse", "label": "title", "risk": "write", "target": "knowledge.get" }, "x-agent-hint": "Runs in the background; follow it with knowledge.get_parse_progress. Search results change meanwhile." } }, "/knowledge/{id}/spans": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回该知识在解析流水线的 trace tree(root → stage → subspan):每段状态、耗时、input/output、错误码、langfuse_trace_id。支持 ?attempt=N 查看历史尝试;不传则返回最新尝试。前端用于渲染时间线 + 多模态/embedding 子节点 + 一键跳转 Langfuse。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "知识管理" ], "summary": "获取知识文档解析的 Span 树(含历史尝试)", "parameters": [ { "type": "string", "x-agent": "knowledge_id", "description": "知识ID", "name": "id", "in": "path", "required": true }, { "minimum": 1, "type": "integer", "description": "指定尝试号;省略或非正数=最新", "name": "attempt", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.KnowledgeSpansData" } } } ] } }, "403": { "description": "无权访问所属知识库", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "知识不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "knowledge.get_parse_progress", "risk": "read" }, "x-agent-hint": "Use when a document is stuck or failed: tells a stalled parse from a running one, names the failed stage." } }, "/knowledgebase/{kb_id}/wiki/auto-fix": { "post": { "security": [ { "Bearer": [] } ], "description": "Automatically fix fixable wiki issues (broken links, etc.)", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Auto-fix wiki issues", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.AutoFixResponse" } } } } }, "/knowledgebase/{kb_id}/wiki/folders": { "get": { "security": [ { "Bearer": [] } ], "description": "Retrieve the direct child folders of a parent folder (parent_id empty = root level), each with its page count and a has-children flag for the directory tree.", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "List wiki folders", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "x-agent": true, "description": "Parent folder id (empty = root)", "name": "parent_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolderListResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "wiki.list_folders", "max_items": 200, "risk": "read", "root": "folders" }, "x-agent-hint": "Direct child folders of parent_id (omit it for the top level), up to 200, with page counts; has_children tells whether to look deeper." }, "post": { "security": [ { "Bearer": [] } ], "description": "Create a new (initially empty) directory node under parent_id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Create a wiki folder", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "description": "Folder data", "name": "folder", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolderCreateRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolder" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "wiki.create_folder", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Creates an empty Wiki folder under parent_id (omit it for the top level)." } }, "/knowledgebase/{kb_id}/wiki/folders/{folder_id}": { "put": { "security": [ { "Bearer": [] } ], "description": "Rename and/or reparent a folder; the whole subtree's paths and the affected pages' cached paths are recomputed", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Rename or move a wiki folder", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "Folder ID", "name": "folder_id", "in": "path", "required": true }, { "description": "Folder update", "name": "folder", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolderUpdateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolder" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "Delete a folder that has no pages and no child folders", "tags": [ "Wiki" ], "summary": "Delete an empty wiki folder", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "Folder ID", "name": "folder_id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledgebase/{kb_id}/wiki/graph": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns a slice of the wiki link graph for visualization. Supports\n`mode=overview` (top-N most-connected pages, default) and\n`mode=ego` (BFS neighborhood of a center slug) to keep response\nsize tractable for knowledge bases with tens of thousands of pages.", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Get wiki link graph", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "overview (default) | ego", "name": "mode", "in": "query" }, { "type": "string", "description": "Center slug for ego mode", "name": "center", "in": "query" }, { "type": "integer", "description": "Ego BFS depth (1-3, default 1)", "name": "depth", "in": "query" }, { "type": "string", "description": "Comma-separated page_type allow-list", "name": "types", "in": "query" }, { "type": "integer", "description": "Max nodes to return (default 500, max 2000)", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiGraphData" } } } } }, "/knowledgebase/{kb_id}/wiki/index": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns the wiki index as intro text plus per-type paginated\ndirectory groups. The heavy directory markdown that used to\nlive in wiki_pages.content was replaced with this structured\nresponse so a KB with tens of thousands of pages no longer\nmaterializes megabytes of TEXT on every index open.", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Get wiki index view", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "Comma-separated page types (default: all content types)", "name": "types", "in": "query" }, { "type": "integer", "description": "Per-group window size, 1-200 (default 50)", "name": "limit", "in": "query" }, { "type": "string", "description": "Opaque offset cursor from previous response", "name": "cursor", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiIndexResponse" } } } } }, "/knowledgebase/{kb_id}/wiki/issues": { "get": { "security": [ { "Bearer": [] } ], "description": "List issues flagged on wiki pages with optional filtering", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "List wiki page issues", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "x-agent": true, "description": "Filter by page slug", "name": "slug", "in": "query" }, { "enum": [ "pending", "ignored", "resolved" ], "type": "string", "x-agent": true, "description": "Filter by status", "name": "status", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageIssue" } } }, "400": { "description": "Not a Wiki knowledge base, or no access", "schema": { "$ref": "#/definitions/internal_handler.WikiErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_handler.WikiErrorResponse" } } }, "x-agent": { "id": "wiki.list_issues", "risk": "read" }, "x-agent-hint": "Descriptions come from users or ingest and may be wrong; check them against the page and its sources." } }, "/knowledgebase/{kb_id}/wiki/issues/{issue_id}/status": { "put": { "security": [ { "Bearer": [] } ], "description": "Update the status of a flagged wiki page issue", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Update wiki page issue status", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "Issue ID", "name": "issue_id", "in": "path", "required": true }, { "description": "New status {'status': 'ignored'}", "name": "status", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledgebase/{kb_id}/wiki/lint": { "get": { "security": [ { "Bearer": [] } ], "description": "Perform a comprehensive health check on the wiki", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Run wiki lint", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.WikiLintReport" } }, "400": { "description": "Not a Wiki knowledge base, or no access", "schema": { "$ref": "#/definitions/internal_handler.WikiErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_handler.WikiErrorResponse" } } }, "x-agent": { "id": "wiki.lint", "risk": "read", "root": "issues" }, "x-agent-hint": "health_score is 0-100. auto_fixable issues are structural; fix content problems with the Wiki tools." } }, "/knowledgebase/{kb_id}/wiki/move-page": { "put": { "security": [ { "Bearer": [] } ], "description": "Relocate a page (identified by slug in the body) into a folder (folder_id empty = root); the page's cached category path is recomputed", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Move a wiki page into a folder", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "description": "Move target", "name": "move", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageMoveRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "wiki.move_page", "label": "title", "risk": "write", "target": "wiki.get_page" }, "x-agent-hint": "Files a Wiki page under a folder from wiki.list_folders; an empty folder_id moves it to the top level. Content is unchanged." } }, "/knowledgebase/{kb_id}/wiki/pages": { "get": { "security": [ { "Bearer": [] } ], "description": "List wiki pages with optional filtering and pagination", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "List wiki pages", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "Filter by page type; comma-separated for multiple (e.g. entity,concept)", "name": "page_type", "in": "query" }, { "type": "string", "description": "Filter by status", "name": "status", "in": "query" }, { "type": "string", "description": "Full-text search", "name": "query", "in": "query" }, { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" }, { "type": "string", "description": "Sort field", "name": "sort_by", "in": "query" }, { "type": "string", "description": "Sort order (asc/desc)", "name": "sort_order", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageListResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "post": { "security": [ { "Bearer": [] } ], "description": "Create a new wiki page in the knowledge base", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Create a wiki page", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "description": "Wiki page data", "name": "page", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledgebase/{kb_id}/wiki/pages/{slug}": { "get": { "security": [ { "Bearer": [] } ], "description": "Retrieve a wiki page by its slug, including titles of existing backlinks", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Get a wiki page by slug", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "x-agent": true, "description": "Page slug", "name": "slug", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageDetail" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "catch_all": "slug", "id": "wiki.get_page", "risk": "read" }, "x-agent-hint": "A Wiki page's title, type, status, folder and version. Read its content with the document tools instead." }, "put": { "security": [ { "Bearer": [] } ], "description": "Partially update a wiki page by slug. Absent fields keep\ntheir stored value. When `version` is \u003e 0 it acts as an\noptimistic-lock guard: a mismatch with the stored version\nreturns 409 together with the current version so the client\ncan reload and re-apply.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Update a wiki page", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "Page slug", "name": "slug", "in": "path", "required": true }, { "description": "Fields to update", "name": "page", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageUpdateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "Soft-delete a wiki page by slug", "tags": [ "Wiki" ], "summary": "Delete a wiki page", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "Page slug", "name": "slug", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/knowledgebase/{kb_id}/wiki/rebuild-links": { "post": { "security": [ { "Bearer": [] } ], "description": "Re-parse all pages and rebuild bidirectional link references", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Rebuild wiki links", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.WikiMessageResponse" } }, "400": { "description": "Not a Wiki knowledge base, or no access", "schema": { "$ref": "#/definitions/internal_handler.WikiErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_handler.WikiErrorResponse" } } }, "x-agent": { "id": "wiki.rebuild_links", "label": "name", "risk": "write", "target": "knowledge_base.get" }, "x-agent-hint": "Use when wiki.lint reports link problems that do not match the page content." } }, "/knowledgebase/{kb_id}/wiki/revert": { "post": { "security": [ { "Bearer": [] } ], "description": "Rolls the page (slug in the body, like move-page) back to\nthe content of the given stored revision. Applied as a\nregular edit: the pre-revert state is snapshotted and the\nversion advances.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Revert a wiki page to an earlier revision", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "description": "Revert target", "name": "revert", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageRevertRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "wiki.revert", "label": "title", "risk": "write", "target": "wiki.get_page" }, "x-agent-hint": "Restores a Wiki page to a version from wiki.list_revisions. Read that version with content_version first. The restore is saved as a new version, so it can be undone the same way." } }, "/knowledgebase/{kb_id}/wiki/revisions/{slug}": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns the stored historical snapshots for a page, newest\nfirst (content omitted), plus the current version. Passing\n`version` returns that single snapshot with full content.\n`content_version` keeps this list envelope and includes that\none revision's content.", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "List wiki page revisions", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "x-agent": true, "description": "Page slug", "name": "slug", "in": "path", "required": true }, { "type": "integer", "description": "Return this single revision with content", "name": "version", "in": "query" }, { "minimum": 1, "type": "integer", "x-agent": true, "description": "Include this stored revision's content in the list envelope", "name": "content_version", "in": "query" }, { "type": "integer", "x-agent": true, "x-agent-maximum": "50", "description": "Page size (default 50, max 200)", "name": "limit", "in": "query" }, { "type": "integer", "x-agent": true, "x-agent-maximum": "10000", "description": "Offset into the newest-first list", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageRevisionListResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "catch_all": "slug", "id": "wiki.list_revisions", "risk": "read", "root": "revisions" }, "x-agent-hint": "Earlier versions of a Wiki page, newest first. Pass content_version to read one stored revision's content before wiki.revert. The current page is not in this list." } }, "/knowledgebase/{kb_id}/wiki/search": { "get": { "security": [ { "Bearer": [] } ], "description": "Full-text search over wiki pages", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Search wiki pages", "parameters": [ { "type": "string", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true }, { "type": "string", "description": "Search query", "name": "q", "in": "query", "required": true }, { "type": "integer", "description": "Max results (default 10)", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage" } } } } } }, "/knowledgebase/{kb_id}/wiki/stats": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns aggregate statistics about the wiki", "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Get wiki statistics", "parameters": [ { "type": "string", "x-agent": "knowledge_base_id", "description": "Knowledge base ID", "name": "kb_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiStats" } }, "400": { "description": "Not a Wiki knowledge base, or no access", "schema": { "$ref": "#/definitions/internal_handler.WikiErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_handler.WikiErrorResponse" } } }, "x-agent": { "id": "wiki.get_stats", "risk": "read" } } }, "/mcp-endpoints": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "MCP端点" ], "summary": "获取 MCP 端点列表", "responses": { "200": { "description": "端点列表", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "为当前工作空间发布一个 MCP 端点,响应中的 token 只返回一次", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP端点" ], "summary": "创建 MCP 端点", "parameters": [ { "description": "端点配置:name、description、enabled、knowledge_base_ids、tools 等", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "201": { "description": "创建的端点,含一次性 token", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } } } } }, "/mcp-endpoints/tools": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回工作空间 MCP 端点可勾选的工具清单、分组和默认勾选项", "produces": [ "application/json" ], "tags": [ "MCP端点" ], "summary": "获取 MCP 端点工具目录", "responses": { "200": { "description": "工具目录", "schema": { "type": "object", "additionalProperties": true } } } } }, "/mcp-endpoints/{endpoint_id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "MCP端点" ], "summary": "获取 MCP 端点详情", "parameters": [ { "type": "string", "description": "端点 ID", "name": "endpoint_id", "in": "path", "required": true } ], "responses": { "200": { "description": "端点详情", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "端点不存在", "schema": { "type": "object", "additionalProperties": true } } } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP端点" ], "summary": "更新 MCP 端点", "parameters": [ { "type": "string", "description": "端点 ID", "name": "endpoint_id", "in": "path", "required": true }, { "description": "要更新的字段,未提供的字段保持不变", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "更新后的端点", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "端点不存在", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "MCP端点" ], "summary": "删除 MCP 端点", "parameters": [ { "type": "string", "description": "端点 ID", "name": "endpoint_id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "404": { "description": "端点不存在", "schema": { "type": "object", "additionalProperties": true } } } } }, "/mcp-endpoints/{endpoint_id}/rotate-token": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "生成新令牌并立即作废旧令牌,响应中的 token 只返回一次", "produces": [ "application/json" ], "tags": [ "MCP端点" ], "summary": "轮换 MCP 端点令牌", "parameters": [ { "type": "string", "description": "端点 ID", "name": "endpoint_id", "in": "path", "required": true } ], "responses": { "200": { "description": "含新 token 的端点", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "端点不存在", "schema": { "type": "object", "additionalProperties": true } } } } }, "/mcp-services": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取当前空间的所有MCP服务(含已保存工具目录数量)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "获取MCP服务列表", "parameters": [ { "type": "string", "description": "Agent ID; needs agent_source_tenant_id", "name": "agent_id", "in": "query" }, { "type": "integer", "description": "Shared agent source workspace", "name": "agent_source_tenant_id", "in": "query" } ], "responses": { "200": { "description": "MCP服务列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.MCPServiceResponse" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "无权使用该共享智能体", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "mcp_service.list", "max_items": 200, "risk": "read" }, "x-agent-hint": "Lists the workspace's MCP services by name, with whether each is enabled. Connection details and credentials are not shown; the user manages MCP services in the settings." }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "创建新的MCP服务配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "创建MCP服务", "parameters": [ { "description": "MCP服务配置", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPService" } } ], "responses": { "200": { "description": "创建的MCP服务", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.MCPServiceResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/oauth/callback": { "get": { "description": "接收授权服务器回调并完成 code 交换,随后重定向回前端", "tags": [ "MCP服务" ], "summary": "MCP OAuth 回调", "parameters": [ { "type": "string", "description": "授权码", "name": "code", "in": "query" }, { "type": "string", "description": "状态参数", "name": "state", "in": "query" }, { "type": "string", "description": "授权错误码", "name": "error", "in": "query" } ], "responses": { "302": { "description": "Found" } } } }, "/mcp-services/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID获取MCP服务详情", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "获取MCP服务详情", "parameters": [ { "type": "string", "x-agent": "mcp_service_id", "description": "MCP服务ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "MCP服务详情", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.MCPServiceResponse" } } } ] } }, "404": { "description": "服务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "mcp_service.get", "risk": "read" } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新MCP服务配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "更新MCP服务", "parameters": [ { "type": "string", "description": "MCP服务ID", "name": "id", "in": "path", "required": true }, { "description": "更新字段", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "更新后的MCP服务", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.MCPServiceResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定的MCP服务", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "删除MCP服务", "parameters": [ { "type": "string", "description": "MCP服务ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/credentials": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "为指定字段写入新凭据;省略的字段保留原值;空字符串视为 no-op(如需删除请用 DELETE)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "设置 MCP 服务凭据", "parameters": [ { "type": "string", "description": "MCP 服务 ID", "name": "id", "in": "path", "required": true }, { "description": "{api_key?, token?, client_secret?: string}", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "写入后的凭据状态", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.CredentialsResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "服务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/credentials/{field}": { "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定字段的存储凭据;删除已为空的字段是幂等的", "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "移除 MCP 服务的单个凭据字段", "parameters": [ { "type": "string", "description": "MCP 服务 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "字段名(api_key | token | client_secret)", "name": "field", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "字段名非法", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "服务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/metadata": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "只读数据库,不连接上游。未同步时 data 为 null;连接配置变更后 stale 为 true。OAuth 目录按当前授权主体隔离。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "读取已保存的 MCP 工具目录", "parameters": [ { "type": "string", "description": "MCP服务ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "目录快照", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "OAuth 目录缺少授权主体", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "服务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/metadata/refresh": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "显式连接上游并原子替换完整目录。OAuth 服务写入当前用户的快照,Viewer 及以上可调用;静态认证写入租户共享快照,需要 Admin。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "同步 MCP 工具目录", "parameters": [ { "type": "string", "description": "MCP服务ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "同步后的目录快照", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "目录不完整或校验失败", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "OAuth 目录缺少授权主体", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "静态认证目录需要管理员刷新", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "服务不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "刷新期间连接配置已变更", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "503": { "description": "元数据存储不可用", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/oauth/assertion": { "post": { "security": [ { "Bearer": [] } ], "description": "以 JWT Bearer 授权(RFC 7523)提交调用方签发的断言(如 ID-JAG),为当前用户获取并保存令牌,\n无需浏览器跳转。使用该服务已注册的 OAuth 客户端", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "使用断言获取 MCP OAuth 令牌", "parameters": [ { "type": "string", "description": "MCP 服务 ID", "name": "id", "in": "path", "required": true }, { "description": "{assertion: string}", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "与 oauth/status 相同", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_mcp.OAuthAuthorizationStatus" } } } ] } }, "400": { "description": "断言无效或被授权服务器拒绝", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/oauth/authorize-url": { "post": { "security": [ { "Bearer": [] } ], "description": "对使用 OAuth 的 MCP 服务执行发现与动态客户端注册,返回浏览器应跳转的授权地址(当前用户维度)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "发起 MCP OAuth 授权", "parameters": [ { "type": "string", "description": "MCP 服务 ID", "name": "id", "in": "path", "required": true }, { "description": "{redirect_uri: string, frontend_redirect?: string}", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "{authorization_url: string, authorization_attempt: string}", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/oauth/status": { "get": { "security": [ { "Bearer": [] } ], "description": "返回当前用户的 OAuth Token 生命周期状态;传 authorization_attempt 时只检查本次授权流程", "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "查询 MCP OAuth 授权状态", "parameters": [ { "type": "string", "description": "MCP 服务 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "本次授权尝试 ID;传入后不会接受历史 Token", "name": "authorization_attempt", "in": "query" } ], "responses": { "200": { "description": "{authorized: bool, state: string, refresh_available: bool, expires_at?: string}", "schema": { "type": "object", "additionalProperties": true } } } } }, "/mcp-services/{id}/oauth/token": { "delete": { "security": [ { "Bearer": [] } ], "description": "删除当前用户对指定 MCP 服务的 OAuth 令牌", "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "撤销 MCP OAuth 授权", "parameters": [ { "type": "string", "description": "MCP 服务 ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" } } } }, "/mcp-services/{id}/resources": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取MCP服务提供的资源列表", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "获取MCP服务资源列表", "parameters": [ { "type": "string", "description": "MCP服务ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "资源列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPResource" } } } } ] } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "测试MCP服务是否可以正常连接", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "测试MCP服务连接", "parameters": [ { "type": "string", "description": "MCP服务ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "测试结果", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPTestResult" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/tool-approvals/{tool_name}": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "为指定 MCP 服务下的某个工具更新启用状态和/或人工审批要求。至少提供 require_approval 或 enabled 之一;省略的字段保持原值。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "设置 MCP 工具策略", "parameters": [ { "type": "string", "description": "MCP 服务 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "工具名", "name": "tool_name", "in": "path", "required": true }, { "description": "{require_approval?: bool, enabled?: bool}", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "更新结果", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "MCP 服务或工具不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/mcp-services/{id}/tools": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取MCP服务提供的工具列表", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "MCP服务" ], "summary": "获取MCP服务工具列表", "parameters": [ { "type": "string", "description": "MCP服务ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "工具列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPTool" } } } } ] } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/me/env-vars": { "get": { "security": [ { "Bearer": [] } ], "description": "List every sandbox config of this workspace with the caller's own config-wide variables and the credentials its skills declared, each reporting whether it is unset, filled in workspace-wide, or filled in by the caller. Values are never returned.", "produces": [ "application/json" ], "tags": [ "Me" ], "summary": "List my environment variables", "responses": { "200": { "description": "One group per sandbox config", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.ConfigEnvGroup" } } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } } } } }, "/me/env-vars/sandbox": { "put": { "security": [ { "Bearer": [] } ], "description": "Store the caller's own value for one variable on a sandbox config. It is injected into every skill script and shell command this caller's turns run on that config.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Me" ], "summary": "Set one of my sandbox environment variables", "parameters": [ { "description": "Sandbox config, variable name and value", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.meEnvVarRequest" } } ], "responses": { "200": { "description": "Stored", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "Invalid request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "Remove the caller's own value for one variable on a sandbox config.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Me" ], "summary": "Delete one of my sandbox environment variables", "parameters": [ { "description": "Sandbox config and variable name", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.meEnvVarRequest" } } ], "responses": { "200": { "description": "Deleted", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "404": { "description": "Not set", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/me/env-vars/skill": { "put": { "security": [ { "Bearer": [] } ], "description": "Store the caller's own value for one variable the skill declared. It overrides the workspace-wide value for this caller only, and is injected only into executions that name this skill.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Me" ], "summary": "Set one of my skill credentials", "parameters": [ { "description": "Skill, variable name and value", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.meEnvVarRequest" } } ], "responses": { "200": { "description": "Stored", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "Invalid request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "Remove the caller's own value. The workspace-wide value, if there is one, applies again afterwards.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Me" ], "summary": "Delete one of my skill credentials", "parameters": [ { "description": "Skill and variable name", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.meEnvVarRequest" } } ], "responses": { "200": { "description": "Deleted", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "404": { "description": "Not set", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/me/invitations": { "get": { "security": [ { "Bearer": [] } ], "description": "返回当前登录用户的待接受邀请(默认仅 pending),用于头像入口和 /invitations 收件箱页。", "produces": [ "application/json" ], "tags": [ "我的邀请" ], "summary": "列出我的待接受邀请", "parameters": [ { "type": "boolean", "description": "是否包含已处理 / 已过期等终止态行(默认 false)", "name": "include_terminal", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/me/invitations/accept-by-token": { "post": { "security": [ { "Bearer": [] } ], "description": "已登录用户用共享邀请链接 token 加入空间,不创建新账号;对已是成员的用户幂等。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "我的邀请" ], "summary": "通过共享链接加入空间", "parameters": [ { "description": "邀请 token", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.acceptInvitationByTokenRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "410": { "description": "链接无效或已撤销", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/me/invitations/pending-count": { "get": { "security": [ { "Bearer": [] } ], "description": "轻量级 endpoint,返回当前登录用户的 pending 邀请数,用于头像旁的角标轮询。", "produces": [ "application/json" ], "tags": [ "我的邀请" ], "summary": "获取我的待处理邀请数", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/me/invitations/{inv_id}/accept": { "post": { "security": [ { "Bearer": [] } ], "description": "当前登录用户接受一条 pending 邀请;服务端会同时写入 tenant_members 行。", "produces": [ "application/json" ], "tags": [ "我的邀请" ], "summary": "接受邀请", "parameters": [ { "type": "string", "description": "邀请 ID", "name": "inv_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/me/invitations/{inv_id}/decline": { "post": { "security": [ { "Bearer": [] } ], "description": "当前登录用户拒绝一条 pending 邀请;不创建 tenant_members 行。", "produces": [ "application/json" ], "tags": [ "我的邀请" ], "summary": "拒绝邀请", "parameters": [ { "type": "string", "description": "邀请 ID", "name": "inv_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/memory/consolidate": { "post": { "security": [ { "Bearer": [] } ], "description": "合并意思接近的条目、归档到期事项,不等待每日后台整理", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "立刻整理我的记忆", "responses": { "200": { "description": "整理结果", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryConsolidationResult" } } } ] } } } } }, "/memory/documents": { "get": { "security": [ { "Bearer": [] } ], "description": "返回当前用户回答里反复引用的文档,次数未达习惯门槛的不展示", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "列出常用资料", "parameters": [ { "type": "integer", "default": 50, "description": "每页条数", "name": "limit", "in": "query" }, { "type": "integer", "description": "偏移量", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "文档列表", "schema": { "$ref": "#/definitions/internal_handler.ListDocumentsResponse" } } } } }, "/memory/documents/{id}": { "delete": { "security": [ { "Bearer": [] } ], "description": "删除一条文档亲和度计数,之后检索不再因为这份文档而加权", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "停止用某份文档做个性化检索", "parameters": [ { "type": "string", "description": "亲和度 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/memory/export": { "get": { "security": [ { "Bearer": [] } ], "description": "以 JSON 导出当前用户的全部记忆", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "导出我的记忆", "responses": { "200": { "description": "记忆导出", "schema": { "$ref": "#/definitions/internal_handler.ExportResponse" } } } } }, "/memory/items": { "get": { "security": [ { "Bearer": [] } ], "description": "分页返回当前用户的记忆条目,可按状态过滤", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "列出我的记忆", "parameters": [ { "enum": [ "active", "superseded", "archived", "pending" ], "type": "string", "description": "状态过滤", "name": "status", "in": "query" }, { "type": "integer", "default": 50, "description": "每页条数", "name": "limit", "in": "query" }, { "type": "integer", "description": "偏移量", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "记忆列表", "schema": { "$ref": "#/definitions/internal_handler.ListItemsResponse" } } } }, "post": { "security": [ { "Bearer": [] } ], "description": "手动添加一条长期记忆", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "新增一条记忆", "parameters": [ { "description": "记忆内容", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "新增的记忆", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryItem" } } } ] } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "永久删除当前用户的全部记忆", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "清空我的记忆", "responses": { "200": { "description": "清空成功", "schema": { "$ref": "#/definitions/internal_handler.ClearResponse" } } } } }, "/memory/items/{id}": { "put": { "security": [ { "Bearer": [] } ], "description": "修改记忆内容与重要度,修改后该条记忆不会被后台抽取覆盖", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "修改一条记忆", "parameters": [ { "type": "string", "description": "记忆ID", "name": "id", "in": "path", "required": true }, { "description": "记忆内容", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "更新后的记忆", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryItem" } } } ] } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "永久删除一条记忆", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "删除一条记忆", "parameters": [ { "type": "string", "description": "记忆ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/memory/items/{id}/confirm": { "post": { "security": [ { "Bearer": [] } ], "description": "接受系统推断的记忆,使其开始生效", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "确认一条推断出的记忆", "parameters": [ { "type": "string", "description": "记忆 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "确认成功", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryItem" } } } ] } } } } }, "/memory/items/{id}/reject": { "post": { "security": [ { "Bearer": [] } ], "description": "拒绝系统推断的记忆,并记住这次拒绝", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "否决一条推断出的记忆", "parameters": [ { "type": "string", "description": "记忆 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "否决成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/memory/settings": { "get": { "security": [ { "Bearer": [] } ], "description": "返回合并后的记忆开关状态(空间级 + 个人级)与记忆条数", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "获取我的记忆设置", "responses": { "200": { "description": "记忆设置", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemorySettings" } } } ] } } } }, "put": { "security": [ { "Bearer": [] } ], "description": "开启或关闭当前用户自己的长期记忆", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "更新我的记忆设置", "parameters": [ { "description": "设置", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "更新后的设置", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemorySettings" } } } ] } } } } }, "/memory/topics": { "get": { "security": [ { "Bearer": [] } ], "description": "返回已计数、尚未提升为长期关注的主题,以及距离阈值还差几次", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "列出正在观察的主题", "parameters": [ { "type": "integer", "default": 50, "description": "每页条数", "name": "limit", "in": "query" }, { "type": "integer", "description": "偏移量", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "主题列表", "schema": { "$ref": "#/definitions/internal_handler.ListTopicsResponse" } } } } }, "/memory/topics/{id}": { "delete": { "security": [ { "Bearer": [] } ], "description": "删除尚未提升的主题计数,并记住这次拒绝,之后不会再自动记为长期关注", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "停止跟踪一个主题", "parameters": [ { "type": "string", "description": "主题 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/memory/topics/{id}/promote": { "post": { "security": [ { "Bearer": [] } ], "description": "不等待剩余次数,把正在观察的主题提升为一条长期关注记忆", "produces": [ "application/json" ], "tags": [ "长期记忆" ], "summary": "立即记为长期关注", "parameters": [ { "type": "string", "description": "主题 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "新增的记忆", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryItem" } } } ] } } } } }, "/messages/chat-history-stats": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取聊天历史知识库的统计信息(已索引消息数、知识库大小等)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "消息" ], "summary": "获取聊天历史知识库统计", "responses": { "200": { "description": "统计信息", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChatHistoryKBStats" } } } ] } } } } }, "/messages/search": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "通过关键词和/或向量相似度搜索历史对话记录,支持关键词、向量、混合三种模式", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "消息" ], "summary": "搜索历史对话", "parameters": [ { "description": "搜索请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.SearchMessagesRequest" } } ], "responses": { "200": { "description": "搜索结果", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MessageSearchResult" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/messages/{session_id}/load": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "加载会话的消息历史,支持分页和时间筛选", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "消息" ], "summary": "加载消息历史", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true }, { "type": "integer", "default": 20, "description": "返回数量", "name": "limit", "in": "query" }, { "type": "string", "description": "在此时间之前的消息(RFC3339Nano格式)", "name": "before_time", "in": "query" }, { "enum": [ "handle", "public" ], "type": "string", "default": "handle", "description": "文件引用形式,public 返回可加载直链", "name": "resource_urls", "in": "query" } ], "responses": { "200": { "description": "消息列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Message" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/messages/{session_id}/{id}": { "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "从会话中删除指定消息", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "消息" ], "summary": "删除消息", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true }, { "type": "string", "description": "消息ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/models": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取当前空间的所有模型", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "模型管理" ], "summary": "获取模型列表", "responses": { "200": { "description": "模型列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.ModelResponse" } } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "model.list", "max_items": 200, "risk": "read" }, "x-agent-hint": "Lists the workspace's models by name and type. An agent's chat model must be of type KnowledgeQA. Endpoints and keys are not shown; the user manages models in the settings." }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "创建新的模型配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "模型管理" ], "summary": "创建模型", "parameters": [ { "description": "模型信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.CreateModelRequest" } } ], "responses": { "201": { "description": "创建的模型", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.ModelResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/models/catalog/resolve": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据厂商、模型名、Base URL 与 extra_config 返回目录解析结果(协议、思考等级、上下文等),供模型编辑器实时展示", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "模型管理" ], "summary": "解析模型的有效接入配置", "parameters": [ { "type": "string", "description": "厂商标识", "name": "provider", "in": "query", "required": true }, { "type": "string", "description": "模型名", "name": "model", "in": "query" }, { "type": "string", "description": "Base URL", "name": "base_url", "in": "query" }, { "type": "string", "description": "模型类型", "name": "model_type", "in": "query" } ], "responses": { "200": { "description": "解析结果", "schema": { "type": "object", "additionalProperties": true } } } } }, "/models/providers": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据模型类型获取支持的厂商定义(含图标、默认地址、额外字段、内置模型目录与思考能力)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "模型管理" ], "summary": "获取模型厂商列表", "parameters": [ { "type": "string", "description": "模型类型 (chat, embedding, rerank, vllm, asr)", "name": "model_type", "in": "query" } ], "responses": { "200": { "description": "厂商列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.ModelProviderDTO" } } } } ] } } } } }, "/models/weknoracloud/status": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "检查当前空间的 WeKnoraCloud 凭证是否完好;needs_reinit=true 表示需要重新保存", "produces": [ "application/json" ], "tags": [ "WeKnoraCloud" ], "summary": "检查 WeKnoraCloud 凭证状态", "responses": { "200": { "description": "凭证状态", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WeKnoraCloudStatusResult" } }, "500": { "description": "服务器错误", "schema": { "type": "object", "additionalProperties": true } } } } }, "/models/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID获取模型详情", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "模型管理" ], "summary": "获取模型详情", "parameters": [ { "type": "string", "x-agent": "model_id", "description": "模型ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "模型详情", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.ModelResponse" } } } ] } }, "404": { "description": "模型不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "model.get", "risk": "read" } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新模型配置信息", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "模型管理" ], "summary": "更新模型", "parameters": [ { "type": "string", "description": "模型ID", "name": "id", "in": "path", "required": true }, { "description": "更新信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateModelRequest" } } ], "responses": { "200": { "description": "更新后的模型", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.ModelResponse" } } } ] } }, "404": { "description": "模型不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定的模型", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "模型管理" ], "summary": "删除模型", "parameters": [ { "type": "string", "description": "模型ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "模型仍被知识库、智能体或长期记忆引用", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "模型不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/models/{id}/copy": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "复制模型配置。name 与源模型一致,凭证从已存记录复制,不接受客户端重传。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "模型管理" ], "summary": "复制模型", "parameters": [ { "type": "string", "description": "源模型ID", "name": "id", "in": "path", "required": true }, { "description": "副本展示名", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.CopyModelRequest" } } ], "responses": { "201": { "description": "复制的模型", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.ModelResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "模型不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations": { "get": { "security": [ { "Bearer": [] } ], "description": "获取当前空间所属的所有组织,并附带各空间内知识库/智能体数量", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "获取我的组织列表", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ListOrganizationsResponse" } } } }, "post": { "security": [ { "Bearer": [] } ], "description": "创建新的组织,创建者自动成为管理员", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "创建组织", "parameters": [ { "description": "组织信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CreateOrganizationRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationResponse" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/join": { "post": { "security": [ { "Bearer": [] } ], "description": "使用邀请码加入组织", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "通过邀请码加入组织", "parameters": [ { "description": "邀请码", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.JoinOrganizationRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationResponse" } } } ] } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/join-by-id": { "post": { "security": [ { "Bearer": [] } ], "description": "加入已开放可被搜索的空间,无需邀请码", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "通过空间 ID 加入(可搜索空间)", "parameters": [ { "description": "空间 ID", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.JoinByOrganizationIDRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationResponse" } } } ] } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/join-request": { "post": { "security": [ { "Bearer": [] } ], "description": "对需要审核的组织提交加入申请", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "提交加入申请", "parameters": [ { "description": "申请信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SubmitJoinRequestRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationJoinRequest" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/preview/{code}": { "get": { "security": [ { "Bearer": [] } ], "description": "通过邀请码获取组织基本信息(不加入)", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "通过邀请码预览组织", "parameters": [ { "type": "string", "description": "邀请码", "name": "code", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/search": { "get": { "security": [ { "Bearer": [] } ], "description": "搜索已开放可被搜索的空间,用于发现并加入", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "搜索可加入的空间", "parameters": [ { "type": "string", "description": "搜索关键词(空间名称或描述)", "name": "q", "in": "query" }, { "type": "integer", "default": 20, "description": "返回数量限制", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SearchOrganizationsResponse" } } } } }, "/organizations/{id}": { "get": { "security": [ { "Bearer": [] } ], "description": "根据ID获取组织详情", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "获取组织详情", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationResponse" } } } ] } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "put": { "security": [ { "Bearer": [] } ], "description": "更新组织信息(需要管理员权限)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "更新组织", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true }, { "description": "更新信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UpdateOrganizationRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationResponse" } } } ] } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "删除组织(仅组织创建者可操作)", "tags": [ "组织管理" ], "summary": "删除组织", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/agent-shares": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回所有被共享到指定组织的智能体(含我的有效权限)", "produces": [ "application/json" ], "tags": [ "组织" ], "summary": "获取共享到本组织的智能体", "parameters": [ { "type": "string", "description": "组织 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "智能体共享列表 + total", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "非组织成员", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/invite": { "post": { "security": [ { "Bearer": [] } ], "description": "管理员直接添加用户为组织成员", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "邀请成员", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true }, { "description": "邀请信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.InviteMemberRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/invite-code": { "post": { "security": [ { "Bearer": [] } ], "description": "生成新的组织邀请码(需要管理员权限)", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "生成邀请码", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/join-requests": { "get": { "security": [ { "Bearer": [] } ], "description": "获取组织的待审核加入申请(仅管理员)", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "获取待审核加入申请列表", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ListJoinRequestsResponse" } } } ] } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/join-requests/{request_id}/review": { "put": { "security": [ { "Bearer": [] } ], "description": "通过或拒绝加入申请(仅管理员)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "审核加入申请", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "申请ID", "name": "request_id", "in": "path", "required": true }, { "description": "审核结果", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ReviewJoinRequestRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/leave": { "post": { "security": [ { "Bearer": [] } ], "description": "退出指定组织", "tags": [ "组织管理" ], "summary": "退出组织", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/members": { "get": { "security": [ { "Bearer": [] } ], "description": "获取组织的所有成员(按空间)", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "获取组织成员列表", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ListMembersResponse" } } } } }, "/organizations/{id}/members/{tenant_id}": { "put": { "security": [ { "Bearer": [] } ], "description": "更新组织成员(空间)的角色(需要管理员权限)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "更新成员角色", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "成员空间ID", "name": "tenant_id", "in": "path", "required": true }, { "description": "角色信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UpdateMemberRoleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "从组织中移除成员空间(需要管理员权限)", "tags": [ "组织管理" ], "summary": "移除成员", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "成员空间ID", "name": "tenant_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/request-upgrade": { "post": { "security": [ { "Bearer": [] } ], "description": "现有成员申请更高权限", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "申请权限升级", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true }, { "description": "申请信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RequestRoleUpgradeRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationJoinRequest" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/organizations/{id}/search-tenants": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "Resolve a workspace ID for invitation", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Exact workspace ID", "name": "q", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantInviteCandidate" } } } } ] } } } } }, "/organizations/{id}/search-users": { "get": { "deprecated": true, "responses": {} } }, "/organizations/{id}/shared-agents": { "get": { "security": [ { "Bearer": [] } ], "description": "获取指定空间下所有共享智能体,包含他人共享的与我共享的,用于列表页空间视角", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "获取空间内全部智能体(含我共享的)", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.ListOrganizationSharedAgentsResponse" } } } } }, "/organizations/{id}/shared-knowledge-bases": { "get": { "security": [ { "Bearer": [] } ], "description": "获取指定空间下所有共享知识库,包含直接共享的与通过共享智能体可见的,用于列表页空间视角", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "获取空间内全部知识库(含我共享的、含智能体携带的)", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.ListOrganizationSharedKnowledgeBasesResponse" } } } } }, "/organizations/{id}/shares": { "get": { "security": [ { "Bearer": [] } ], "description": "获取共享到指定组织的所有知识库", "produces": [ "application/json" ], "tags": [ "组织管理" ], "summary": "获取组织的共享知识库列表", "parameters": [ { "type": "string", "description": "组织ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ListSharesResponse" } } } } }, "/sandbox-configs": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "List workspace sandbox backend configs with credentials masked.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "List sandbox configs", "responses": { "200": { "description": "Sandbox configs and defaults", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Create a named workspace sandbox backend config. Credentials are masked in the response.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Create sandbox config", "parameters": [ { "description": "Sandbox backend config", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.sandboxConfigRequest" } } ], "responses": { "201": { "description": "Created sandbox config", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.sandboxConfigResponse" } } } ] } }, "400": { "description": "Invalid request or validation failure", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } } } } }, "/sandbox-configs/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Retrieve a workspace sandbox backend config with credentials masked.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Get sandbox config", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Sandbox config", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.sandboxConfigResponse" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Sandbox config not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Update a sandbox backend config. Identity-field changes are refused while the config owns live or paused sandboxes.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Update sandbox config", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "description": "Updated sandbox config", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.sandboxConfigRequest" } } ], "responses": { "200": { "description": "Updated sandbox config", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.sandboxConfigResponse" } } } ] } }, "400": { "description": "Invalid request or validation failure", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Sandbox config not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "Live sandboxes or unverifiable inventory", "schema": { "type": "object", "additionalProperties": true } }, "423": { "description": "Sandbox config is being modified by another request", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Soft-delete a sandbox backend config. force=true only overrides unverifiable provider inventory, never confirmed live sandboxes.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Delete sandbox config", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "boolean", "description": "Force delete when inventory is unverifiable", "name": "force", "in": "query" } ], "responses": { "200": { "description": "Deletion success", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "409": { "description": "Live sandboxes or unverifiable inventory", "schema": { "type": "object", "additionalProperties": true } } } } }, "/sandbox-configs/{id}/sandboxes": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Return live/paused sandbox inventory and affected agent names for one config.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Inspect sandbox config inventory", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Sandbox inventory", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.SandboxInventory" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } } } } }, "/sandbox-configs/{id}/skills": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "List the agent skills installed onto one sandbox config's image.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "List installed skills", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Installed skills", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.skillResponse" } } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Sandbox config not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Install a skill onto this sandbox config's image. Send a zip\nas multipart form field \"file\", or JSON {\"source\":\"...\"} to\npull a public skill. source is one of: \"@owner/slug\" or a\nslash-free slug (ClawHub), a github.com / gitlab.com /\nskills.sh / clawhub / skillhub URL, a ClawHub skills-sh\ncatalog page (https://clawhub.ai/skills-sh/owner/repo/slug),\na skills-sh:owner/repo/slug locator, or a direct zip/SKILL.md\nURL. Bare \"owner/slug\" is rejected as ambiguous. The source\nmust be readable anonymously. The install boots a sandbox and\nruns for minutes, so the request is only accepted; follow it\nvia the install-events stream.", "consumes": [ "application/json", "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Install a skill", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "file", "description": "Skill bundle (zip)", "name": "file", "in": "formData" }, { "description": "Install from a registry, git host, or archive URL", "name": "request", "in": "body", "schema": { "$ref": "#/definitions/internal_handler.skillSourceRequest" } } ], "responses": { "202": { "description": "Install accepted", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Missing, oversized or invalid bundle or source", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Sandbox config not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sandbox-configs/{id}/skills/{skillId}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Retrieve one installed skill of a sandbox config.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Get an installed skill", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true } ], "responses": { "200": { "description": "Installed skill", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.skillResponse" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Remove a skill from the config's image. The removal rebuilds\nthe image and runs for minutes, so it is only accepted; follow\nit via the install-events stream.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Remove an installed skill", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true } ], "responses": { "202": { "description": "Removal accepted", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "patch": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Show or hide an installed skill and set the workspace-wide values of the environment variables it declared. Either field may be sent, or both. The files stay in the image either way; removal is a separate flow.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Update an installed skill", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true }, { "description": "Fields to update", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.skillPatchRequest" } } ], "responses": { "200": { "description": "Updated skill", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.skillResponse" } } } ] } }, "400": { "description": "Invalid request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sandbox-configs/{id}/skills/{skillId}/files": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "List files in the stored skill bundle without starting a sandbox.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "List files of an installed skill", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true } ], "responses": { "200": { "description": "Skill files", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.SkillFileEntry" } } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill or files not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sandbox-configs/{id}/skills/{skillId}/files/content": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Read one skill file as UTF-8, a small base64 image, or binary.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Read one file of an installed skill", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true }, { "type": "string", "description": "Skill-root-relative file path", "name": "path", "in": "query", "required": true } ], "responses": { "200": { "description": "Skill file", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.SkillFileContent" } } } ] } }, "400": { "description": "Invalid path", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill or file not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sandbox-configs/{id}/skills/{skillId}/install-events": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Server-sent progress for one install or removal. The stream\nalways terminates: with the run's own terminal event, with one\nderived from the durable status, or with a \"detached\" frame\nwhen it stops following a run that is still going.", "produces": [ "text/event-stream" ], "tags": [ "SandboxConfig" ], "summary": "Follow an install or removal", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true } ], "responses": { "200": { "description": "SSE stream of progress events", "schema": { "type": "string" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sandbox-configs/{id}/skills/{skillId}/reinstall": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Retry a failed install from the stored archive; does not re-upload.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Retry a skill install", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true } ], "responses": { "202": { "description": "Reinstall accepted", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "The stored archive is gone", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sandbox-configs/{id}/skills/{skillId}/stop": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Abort an in-flight install so the operator can retry or uninstall. After a process restart the row may still say installing with no live process; this rewrites it immediately instead of waiting for the stuck-run reaper. Removal is not stopped.", "produces": [ "application/json" ], "tags": [ "SandboxConfig" ], "summary": "Stop a skill install", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true } ], "responses": { "200": { "description": "Stopped skill", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.skillResponse" } } } ] } }, "400": { "description": "Skill is not installing", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sandbox-configs/{id}/skills/{skillId}/transcript": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Server-sent replay of everything the installer agent did — the\nprompt it was given, its thinking, the commands it ran and\ntheir output — followed live while the install is still\nrunning. Frames are the same shape the chat stream uses, so a\nconsole renders an install with the components it renders a\nchat turn with. 404 once the event log has expired; the\ndurable message history is the fallback.", "produces": [ "text/event-stream" ], "tags": [ "SandboxConfig" ], "summary": "Follow an install's agent transcript", "parameters": [ { "type": "string", "description": "Sandbox config ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill ID", "name": "skillId", "in": "path", "required": true } ], "responses": { "200": { "description": "SSE stream of transcript events", "schema": { "type": "string" } }, "204": { "description": "Install is still preparing; retry once locators exist", "schema": { "type": "string" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Skill or transcript not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取当前空间的会话列表,支持分页、关键字搜索、按来源/Agent 筛选", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "获取会话列表", "parameters": [ { "type": "integer", "description": "页码", "name": "page", "in": "query" }, { "type": "integer", "description": "每页数量", "name": "page_size", "in": "query" }, { "enum": [ "assistant" ], "type": "string", "description": "会话类型:空值仅普通会话;assistant 仅当前用户的助手会话", "name": "kind", "in": "query" }, { "type": "string", "description": "标题模糊搜索", "name": "keyword", "in": "query" }, { "type": "string", "description": "来源过滤:web / embed / api / feishu / wechat / slack / ...(api、embed、IM 渠道需 Admin+)", "name": "source", "in": "query" }, { "type": "string", "description": "按 Agent 过滤(仅对 IM 会话生效)", "name": "agent_id", "in": "query" } ], "responses": { "200": { "description": "会话列表", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "创建新的对话会话。\nkind 为空时为普通会话,assistant 为助手会话。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "创建会话", "parameters": [ { "description": "会话创建请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.CreateSessionRequest" } } ], "responses": { "201": { "description": "创建的会话", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/batch": { "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID列表批量删除对话会话,或设置 delete_all=true 删除当前空间的所有会话", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "批量删除会话", "parameters": [ { "description": "批量删除请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.batchDeleteRequest" } } ], "responses": { "200": { "description": "删除结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/continue-stream/{session_id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "继续获取正在进行的流式响应", "consumes": [ "application/json" ], "produces": [ "text/event-stream" ], "tags": [ "问答" ], "summary": "继续流式响应", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true }, { "type": "string", "description": "消息ID", "name": "message_id", "in": "query", "required": true }, { "enum": [ "handle", "public" ], "type": "string", "default": "handle", "description": "文件引用形式,public 返回可加载直链", "name": "resource_urls", "in": "query" } ], "responses": { "200": { "description": "SSE 事件流", "schema": { "type": "string" } }, "404": { "description": "会话或消息不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID获取会话详情", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "获取会话详情", "parameters": [ { "type": "string", "description": "会话ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "会话详情", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "会话不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新会话属性", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "更新会话", "parameters": [ { "type": "string", "description": "会话ID", "name": "id", "in": "path", "required": true }, { "description": "会话信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Session" } } ], "responses": { "200": { "description": "更新后的会话", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "会话不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定的会话", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "删除会话", "parameters": [ { "type": "string", "description": "会话ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "会话不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{id}/messages": { "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除会话中的所有消息,同时清除 LLM 上下文和聊天历史知识库条目。会话本身保留。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "清空会话消息", "parameters": [ { "type": "string", "description": "会话ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "清空成功", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "会话不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{id}/pin": { "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "取消指定会话的置顶", "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "取消置顶会话", "parameters": [ { "type": "string", "description": "会话ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "取消置顶成功", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "会话不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{id}/steer": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "刷新页面后用来恢复输入框上方的队列。没有正在运行的 turn 时返回空列表。", "produces": [ "application/json" ], "tags": [ "问答" ], "summary": "列出当前运行中尚未消费的排队消息", "parameters": [ { "type": "string", "description": "会话 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "503": { "description": "活 turn 查询失败,可重试", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{id}/steer/{steer_id}": { "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "从当前运行的排队列表里去掉一条,不再注入也不再作为 follow-up 发出。", "produces": [ "application/json" ], "tags": [ "问答" ], "summary": "删除一条排队中的消息", "parameters": [ { "type": "string", "description": "会话 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "排队消息 ID", "name": "steer_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "503": { "description": "活 turn 查询失败,可重试", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/artifacts": { "get": { "security": [ { "Bearer": [] } ], "description": "返回本会话中所有 assistant 消息产生的技能产物元数据(不含 URL)", "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "列出会话生成的产物文件", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/fork": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "从指定的用户或助手消息处分叉出一个新会话。用户消息:复制其之前的历史并预填该问题;助手消息:复制含该回答在内的历史,从该轮沙箱状态继续。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "分叉会话", "parameters": [ { "type": "string", "description": "源会话 ID", "name": "session_id", "in": "path", "required": true }, { "description": "分叉请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.ForkSessionRequest" } } ], "responses": { "200": { "description": "新会话", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误 / 分叉点角色不支持", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "会话或消息不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "源会话正在生成中", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/messages/{message_id}/artifacts": { "get": { "responses": {} } }, "/sessions/{session_id}/messages/{message_id}/artifacts/{index}": { "delete": { "security": [ { "Bearer": [] } ], "description": "删除某条 assistant 消息生成的单个文件;all_versions=true 时连同本会话中该文件的所有历史版本一并删除", "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "删除会话中的产物文件", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true }, { "type": "string", "description": "消息ID", "name": "message_id", "in": "path", "required": true }, { "type": "integer", "description": "产物在消息中的位置", "name": "index", "in": "path", "required": true }, { "type": "boolean", "description": "是否删除该文件的所有版本", "name": "all_versions", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/messages/{message_id}/artifacts/{index}/download": { "get": { "responses": {} } }, "/sessions/{session_id}/messages/{message_id}/suggestions": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "获取回答后推荐问题", "parameters": [ { "type": "string", "description": "会话 ID", "name": "session_id", "in": "path", "required": true }, { "type": "string", "description": "助手消息 ID", "name": "message_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MessageSuggestionSet" } } } ] } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "对已完成的助手消息异步生成或重新生成推荐问题;相同配置快照会复用持久化结果", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "确保生成回答后推荐问题", "parameters": [ { "type": "string", "description": "会话 ID", "name": "session_id", "in": "path", "required": true }, { "type": "string", "description": "助手消息 ID", "name": "message_id", "in": "path", "required": true }, { "description": "生成选项", "name": "request", "in": "body", "schema": { "$ref": "#/definitions/internal_handler.EnsureMessageSuggestionsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MessageSuggestionSet" } } } ] } }, "202": { "description": "Accepted", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MessageSuggestionSet" } } } ] } } } } }, "/sessions/{session_id}/pin": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "将指定会话置顶(用户维度)", "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "置顶会话", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true } ], "responses": { "200": { "description": "置顶成功", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "会话不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/rewind": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "回滚当前会话到指定用户或助手消息:删除其后消息,可到达时 git reset 工作区。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "回滚会话", "parameters": [ { "type": "string", "description": "会话 ID", "name": "session_id", "in": "path", "required": true }, { "description": "回滚请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.RewindSessionRequest" } } ], "responses": { "200": { "description": "回滚结果", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误 / 回滚点角色不支持", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "会话或消息不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "409": { "description": "会话正在生成中 / 无检查点 / 沙箱已更换", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "500": { "description": "工作区回滚失败", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/steer": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "向运行中的 agent turn 追加用户消息(after 排队 / inject 注入)。无活 turn 时返回 new_run。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "问答" ], "summary": "向运行中的对话追加消息", "parameters": [ { "type": "string", "description": "会话 ID", "name": "session_id", "in": "path", "required": true }, { "description": "追加消息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.SteerMessageRequest" } } ], "responses": { "200": { "description": "queued | new_run", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "会话不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "503": { "description": "活 turn 查询失败,可重试", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/steer/{steer_id}/inject": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "把一条 delivery=after 的排队消息改为 inject,运行中的 agent 会在下一轮边界读到它。", "produces": [ "application/json" ], "tags": [ "问答" ], "summary": "将排队消息改为立即注入", "parameters": [ { "type": "string", "description": "会话 ID", "name": "session_id", "in": "path", "required": true }, { "type": "string", "description": "排队消息 ID", "name": "steer_id", "in": "path", "required": true } ], "responses": { "200": { "description": "queued | new_run", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "503": { "description": "活 turn 查询失败,可重试", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/stop": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "停止当前正在进行的生成任务", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "问答" ], "summary": "停止生成", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true }, { "description": "停止请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.StopSessionRequest" } } ], "responses": { "200": { "description": "停止成功", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "会话或消息不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/sessions/{session_id}/suggestion-events": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "记录曝光、点击或关闭事件", "consumes": [ "application/json" ], "tags": [ "会话" ], "summary": "上报推荐问题事件", "parameters": [ { "type": "string", "description": "会话 ID", "name": "session_id", "in": "path", "required": true }, { "description": "事件", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.SuggestionEventRequest" } } ], "responses": { "204": { "description": "No Content" } } } }, "/sessions/{session_id}/title": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据消息内容自动生成会话标题", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "会话" ], "summary": "生成会话标题", "parameters": [ { "type": "string", "description": "会话ID", "name": "session_id", "in": "path", "required": true }, { "description": "生成请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler_session.GenerateTitleRequest" } } ], "responses": { "200": { "description": "生成的标题", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/shared-agents": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回所有共享给当前用户所在组织的智能体", "produces": [ "application/json" ], "tags": [ "组织" ], "summary": "获取我可访问的共享智能体", "responses": { "200": { "description": "智能体列表 + total", "schema": { "$ref": "#/definitions/internal_handler.ListSharedAgentsResponse" } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/shared-knowledge-bases": { "get": { "security": [ { "Bearer": [] } ], "description": "获取通过组织共享给当前用户的所有知识库", "produces": [ "application/json" ], "tags": [ "知识库共享" ], "summary": "获取共享给我的知识库列表", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.ListSharedKnowledgeBasesResponse" } } }, "x-agent": { "id": "knowledge_base.list_shared", "max_items": 200, "risk": "read" }, "x-agent-hint": "Knowledge bases other workspaces share with the user, up to 200, with the organization and the user's permission on each." } }, "/skills": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回指定沙箱配置镜像内、智能体实际能调用的已安装技能(ready 且启用)。\n不传 sandbox_config_id 时列表为空。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Skills" ], "summary": "获取当前沙箱配置上可执行的 Skills", "parameters": [ { "type": "string", "x-agent": true, "x-agent-required": true, "description": "Sandbox config ID from agent.get; ignored for a shared agent", "name": "sandbox_config_id", "in": "query" }, { "type": "string", "description": "Agent ID; needs agent_source_tenant_id", "name": "agent_id", "in": "query" }, { "type": "integer", "description": "Shared agent source workspace", "name": "agent_source_tenant_id", "in": "query" } ], "responses": { "200": { "description": "Skills列表", "schema": { "$ref": "#/definitions/internal_handler.ListSkillsResponse" } }, "403": { "description": "无权使用该共享智能体", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } }, "x-agent": { "id": "skill.list", "risk": "read" }, "x-agent-hint": "Lists usable skills, chosen by name. Pass sandbox_config_id from agent.get; when the agent has none, pass host (WeKnora Lite runs skills locally). An empty list means there are no usable skills there; if the agent has no sandbox, tell the user to choose one in the agent editor." } }, "/skills/catalog": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Returns every skill definition in this workspace and which sandbox configs it is installed on.", "produces": [ "application/json" ], "tags": [ "Skills" ], "summary": "List workspace skills", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "description": "Records a skill without installing it. Send a zip as multipart field \"file\", or JSON {\"source\":\"...\"}.", "consumes": [ "application/json", "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "Skills" ], "summary": "Add a skill to the workspace catalog", "responses": { "201": { "description": "Created", "schema": { "type": "object", "additionalProperties": true } } } } }, "/skills/catalog/{id}": { "delete": { "description": "Refused while any sandbox still has an installation of this skill.", "tags": [ "Skills" ], "summary": "Delete a catalog skill", "parameters": [ { "type": "string", "description": "Catalog skill ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/skills/catalog/{id}/files": { "get": { "description": "Lists the stored catalog bundle. Files belong to the skill definition, not a sandbox install.", "produces": [ "application/json" ], "tags": [ "Skills" ], "summary": "List files of a catalog skill", "parameters": [ { "type": "string", "description": "Catalog skill ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.SkillFileEntry" } } } } ] } } } } }, "/skills/catalog/{id}/files/content": { "get": { "produces": [ "application/json" ], "tags": [ "Skills" ], "summary": "Read one file of a catalog skill", "parameters": [ { "type": "string", "description": "Catalog skill ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Skill-root-relative file path", "name": "path", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.SkillFileContent" } } } ] } } } } }, "/skills/catalog/{id}/install": { "post": { "description": "Runs the existing snapshot install onto each named sandbox config.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Skills" ], "summary": "Install a catalog skill onto sandboxes", "parameters": [ { "type": "string", "description": "Catalog skill ID", "name": "id", "in": "path", "required": true } ], "responses": { "202": { "description": "Accepted", "schema": { "type": "object", "additionalProperties": true } } } } }, "/storage-backends": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "List all storage backend instances for the current workspace, with credentials masked. The workspace default backend id is returned alongside the list.", "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "List storage backends", "responses": { "200": { "description": "List of storage backends and default_storage_backend_id", "schema": { "$ref": "#/definitions/internal_handler.ListResponse" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Register a new object/file storage instance for the current workspace. The configuration is validated and a connectivity test is run before the backend is persisted.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "Create storage backend", "parameters": [ { "description": "Storage backend configuration", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.storageBackendRequest" } } ], "responses": { "201": { "description": "Created storage backend", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageBackend" } } } ] } }, "400": { "description": "Invalid request, validation, or connectivity test failure", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "409": { "description": "A storage backend with this name already exists", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/storage-backends/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Test connectivity for the provided storage configuration without persisting it. Returns success=false with a sanitized error message on failure (the HTTP status stays 200).", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "Test storage backend with raw config", "parameters": [ { "description": "Storage backend configuration to test", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.storageBackendRequest" } } ], "responses": { "200": { "description": "Connectivity test result (success, error)", "schema": { "$ref": "#/definitions/internal_handler.SuccessErrorResponse" } }, "400": { "description": "Invalid request or validation error", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } } } } }, "/storage-backends/types": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Return the storage provider types allowed by STORAGE_ALLOW_LIST for UI form generation (e.g. local, minio, cos, tos, s3, oss, ks3, obs).", "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "List allowed storage provider types", "responses": { "200": { "description": "List of allowed storage provider types", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "string" } } } } ] } } } } }, "/storage-backends/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Retrieve a single storage backend by ID for the current workspace. Credentials are masked.", "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "Get storage backend", "parameters": [ { "type": "string", "description": "Storage backend ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Storage backend details", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageBackend" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Storage backend not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Update a storage backend's mutable fields (name, credentials, status). Provider and physical location (endpoint, region, bucket, path prefix) are immutable; use storage migration to move data. Environment-sourced backends are read-only. Redacted secret placeholders preserve the stored credentials.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "Update storage backend", "parameters": [ { "type": "string", "description": "Storage backend ID", "name": "id", "in": "path", "required": true }, { "description": "Updated storage backend fields", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.storageBackendRequest" } } ], "responses": { "200": { "description": "Updated storage backend", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageBackend" } } } ] } }, "400": { "description": "Immutable field change, read-only backend, validation, or connectivity failure", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Storage backend not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Soft-delete a storage backend. A backend that is the workspace default, still bound to knowledge bases, environment-sourced, or a legacy alias cannot be deleted.", "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "Delete storage backend", "parameters": [ { "type": "string", "description": "Storage backend ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Deletion success", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "Backend is default, bound, read-only, or legacy alias", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Storage backend not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/storage-backends/{id}/default": { "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Mark a storage backend as the workspace default. Only an active backend can become the default. New knowledge bases without an explicit binding use the default.", "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "Set default storage backend", "parameters": [ { "type": "string", "description": "Storage backend ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Default set successfully", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "Backend is not active", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Storage backend not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/storage-backends/{id}/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Test connectivity of an existing saved storage backend using its stored credentials. Returns success=false with a sanitized error message on failure (the HTTP status stays 200).", "produces": [ "application/json" ], "tags": [ "StorageBackend" ], "summary": "Test storage backend by ID", "parameters": [ { "type": "string", "description": "Storage backend ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Connectivity test result (success, error)", "schema": { "$ref": "#/definitions/internal_handler.SuccessErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Storage backend not found", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/system/admin/api-keys": { "get": { "security": [ { "Bearer": [] } ], "description": "Lists non-workspace API keys. Full tokens are always masked. Human SystemAdmin only.", "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "List platform API keys", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.tenantAPIKeyResponse" } } } } ] } } } }, "post": { "security": [ { "Bearer": [] } ], "description": "Creates a capability-scoped key that may target any workspace through X-Tenant-ID. The plaintext token is returned once. Human SystemAdmin only.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Create a platform API key", "parameters": [ { "description": "Platform API key", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.platformAPIKeyCreateRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.tenantAPIKeyCreateResponse" } } } ] } } } } }, "/system/admin/api-keys/{key_id}": { "delete": { "security": [ { "Bearer": [] } ], "description": "Immediately revokes a platform API key. Human SystemAdmin only.", "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Revoke a platform API key", "parameters": [ { "type": "integer", "description": "API key ID", "name": "key_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/system/admin/audit-log": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回 system-scope(tenant_id=0)的审计事件,覆盖 system.setting_changed / system.admin_promoted / system.admin_revoked 等 SystemAdmin 操作。按 id 倒序的游标分页。", "produces": [ "application/json" ], "tags": [ "审计日志" ], "summary": "获取平台审计日志", "parameters": [ { "type": "integer", "description": "游标:返回 id 小于此值的记录(默认从最新开始)", "name": "after_id", "in": "query" }, { "type": "integer", "description": "页大小,1-100,默认 50", "name": "limit", "in": "query" }, { "type": "string", "description": "按 action 精确过滤(如 system.setting_changed)", "name": "action", "in": "query" }, { "type": "string", "description": "按 outcome 精确过滤(success / denied)", "name": "outcome", "in": "query" }, { "type": "string", "description": "按 actor_user_id 精确过滤", "name": "actor", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.auditLogListResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/system/admin/list": { "get": { "description": "Retrieve a paginated list of users with system administrator\nprivileges (SystemAdmin only). Supports `offset` (default 0)\nand `limit` (default 50, max 200) query parameters. Walks the\npartial-friendly idx_users_is_system_admin index.", "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "List all system administrators", "parameters": [ { "type": "integer", "default": 0, "description": "Page offset", "name": "offset", "in": "query" }, { "type": "integer", "default": 50, "description": "Page size (max 200)", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "System admins retrieved successfully", "schema": { "$ref": "#/definitions/internal_handler.ListSystemAdminsResponse" } }, "403": { "description": "Forbidden: not a system admin", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/model-catalog": { "get": { "security": [ { "Bearer": [] } ], "description": "System administrator JWT only; API keys are not accepted. Returns built-in, deployment and effective\ncatalogs, the current overlay, version/baseline tokens, and the latest 20 published revisions.", "produces": [ "application/json" ], "tags": [ "系统管理" ], "summary": "Get the system model catalog", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogState" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": true } }, "503": { "description": "Service Unavailable", "schema": { "type": "object", "additionalProperties": true } } } }, "put": { "security": [ { "Bearer": [] } ], "description": "System administrator JWT only; API keys are not accepted. Validates and publishes a new overlay\nrevision using the current version and baseline. Stale values return 409. To restore a historical\nconfiguration, submit its overlay with the current version and baseline.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "系统管理" ], "summary": "Publish a model catalog overlay", "parameters": [ { "description": "Version, baseline and overlay object (max 1 MiB)", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogUpdate" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogState" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": true } }, "409": { "description": "Conflict", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/model-catalog/preview": { "post": { "security": [ { "Bearer": [] } ], "description": "System administrator JWT only; API keys are not accepted. Validates the overlay without publishing\nit. Supply the current version and baseline; stale values return 409. The response contains the\ncandidate effective catalog and normalized overlay; history, builtin and deployment are null.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "系统管理" ], "summary": "Preview a model catalog overlay", "parameters": [ { "description": "Version, baseline and overlay object (max 1 MiB)", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogUpdate" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogState" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden", "schema": { "type": "object", "additionalProperties": true } }, "409": { "description": "Conflict", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/promote": { "post": { "description": "Grant system administrator privileges to a user (SystemAdmin only).\nIdempotent: re-promoting an existing system admin returns 200 with no DB write.\nIdentify the user by email (preferred for human operators) or user_id (UUID, for API clients).", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Promote a user to system administrator", "parameters": [ { "description": "User promotion request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.PromoteUserToSystemAdminRequest" } } ], "responses": { "200": { "description": "User promoted successfully", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo" } }, "400": { "description": "Bad request", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden: not a system admin", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "User not found", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/revoke": { "post": { "description": "Remove system administrator privileges from a user (SystemAdmin only).\nTwo safety guards: the caller cannot revoke their own privileges,\nand revoking the last remaining system admin is rejected — both\nprevent a SystemAdmin from accidentally locking the platform out\nof system-level administration. Idempotent on already-non-admin users.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Revoke system administrator privileges from a user", "parameters": [ { "description": "User revocation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.RevokeSystemAdminRequest" } } ], "responses": { "200": { "description": "Privileges revoked successfully", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo" } }, "400": { "description": "Bad request / would remove last admin / self-revoke", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden: not a system admin", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "User not found", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/runtime/queues": { "get": { "description": "返回各 asynq 队列的实时深度(pending/active/scheduled/retry 等)与 worker 并发配置,仅系统管理员可见", "produces": [ "application/json" ], "tags": [ "系统管理" ], "summary": "获取解析任务队列运行时状态", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.RuntimeQueuesResponse" } } } } }, "/system/admin/runtime/queues/{queue}/archived": { "delete": { "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Purge all archived tasks in a queue", "parameters": [ { "type": "string", "description": "Queue name", "name": "queue", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.PurgeArchivedRuntimeTasksResponse" } } } } }, "/system/admin/runtime/queues/{queue}/tasks": { "get": { "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "List runtime queue tasks by state", "parameters": [ { "type": "string", "description": "Queue name", "name": "queue", "in": "path", "required": true }, { "enum": [ "pending", "active", "scheduled", "retry", "archived", "completed" ], "type": "string", "description": "Task state", "name": "state", "in": "query", "required": true }, { "type": "string", "description": "Opaque continuation cursor", "name": "cursor", "in": "query" }, { "type": "integer", "default": 20, "description": "Page size", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.RuntimeTasksResponse" } } } } }, "/system/admin/runtime/queues/{queue}/tasks/{task_id}/actions/{action}": { "post": { "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Run a safe runtime task action", "parameters": [ { "type": "string", "description": "Queue name", "name": "queue", "in": "path", "required": true }, { "type": "string", "description": "Task ID", "name": "task_id", "in": "path", "required": true }, { "enum": [ "cancel", "run_now", "delete" ], "type": "string", "description": "Action", "name": "action", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "boolean" } } } } } }, "/system/admin/settings/{key}": { "get": { "description": "Returns the row matching :key. 404 when the key is unknown\nto the registry; 200 with the row when known.", "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Get a single system setting by key", "parameters": [ { "type": "string", "description": "Setting key (e.g. file.max_size_mb)", "name": "key", "in": "path", "required": true } ], "responses": { "200": { "description": "the setting row", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SystemSetting" } }, "400": { "description": "Unknown key", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Key registered but DB row absent", "schema": { "type": "object", "additionalProperties": true } } } }, "put": { "description": "Persist a new value for :key. Service validates the\nrawValue against the registry's declared value_type and\nrejects mismatches with 400. SystemAdmin only. Emits an\naudit row (action=system.setting_changed) on success.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Update a system setting value", "parameters": [ { "type": "string", "description": "Setting key", "name": "key", "in": "path", "required": true }, { "description": "New value", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateSystemSettingRequest" } } ], "responses": { "200": { "description": "the updated row", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SystemSetting" } }, "400": { "description": "Bad request / unknown key / type mismatch", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden: not a system admin", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "description": "Removes the DB override for :key so the 3-tier resolver\nfalls back to the environment variable (when configured)\nor the in-code default. Idempotent — resetting a key\nthat was never persisted returns 200.", "tags": [ "System Admin" ], "summary": "Reset a system setting to ENV / built-in default", "parameters": [ { "type": "string", "description": "Setting key", "name": "key", "in": "path", "required": true } ], "responses": { "200": { "description": "Reset acknowledged", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "Unknown key", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "DB write failed", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/tenants/apply-default-storage-quota": { "post": { "description": "Reads the current value of `tenant.default_storage_quota_gb`\n(3-tier resolver: DB \u003e ENV \u003e default) and writes that many\nGiB into storage_quota for every row in tenants. Bypasses\nthe per-workspace PUT whitelist, which forbids storage_quota\nedits by Owners. SystemAdmin only.\nIdempotent — running twice with the same setting is a no-op.", "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Apply the default storage quota to every existing workspace", "responses": { "200": { "description": "{ affected: int64, quota_bytes: int64 }", "schema": { "$ref": "#/definitions/internal_handler.ApplyDefaultStorageQuotaToAllTenantsResponse" } }, "500": { "description": "DB write failed", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/users": { "get": { "description": "Retrieve a paginated list of every user across tenants (SystemAdmin only).\nSupports `offset` (default 0) and `limit` (default 50, max 200).\nPassword/hashes are never serialised — only the redacted UserInfo shape.", "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "List all platform users", "parameters": [ { "type": "integer", "default": 0, "description": "Page offset", "name": "offset", "in": "query" }, { "type": "integer", "default": 50, "description": "Page size (max 200)", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "Users retrieved successfully", "schema": { "$ref": "#/definitions/internal_handler.ListAllUsersResponse" } }, "403": { "description": "Forbidden: not a system admin", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/users/create": { "post": { "description": "Provision a new local user account (SystemAdmin only).\nWhen `password` is omitted or null, a cryptographically random\npassword is generated (OIDC-style crypto/rand + base64url)\nand returned once in the response body. Any provided value,\nincluding empty string, is policy-checked. Tenant provisioning\nfollows the shared auth.default_tenant_mode policy.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Create a new user (SystemAdmin)", "parameters": [ { "description": "User creation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AdminCreateUserRequest" } } ], "responses": { "200": { "description": "Identity already exists, returns the existing user", "schema": { "$ref": "#/definitions/internal_handler.CreateSystemUserResponse" } }, "201": { "description": "User created successfully", "schema": { "$ref": "#/definitions/internal_handler.CreateSystemUserResponse" } }, "400": { "description": "Invalid request or weak password", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden: not a system admin", "schema": { "type": "object", "additionalProperties": true } }, "409": { "description": "Email and username refer to conflicting identities", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal error", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/users/reset-password": { "post": { "description": "Replace another user's local password and revoke all of their existing sessions (SystemAdmin only).\nA system administrator cannot reset their own password through this endpoint; self-service password change still requires the old password.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Reset another user's password", "parameters": [ { "description": "Password reset request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.ResetUserPasswordRequest" } } ], "responses": { "200": { "description": "Password reset successfully", "schema": { "$ref": "#/definitions/internal_handler.ResetUserPasswordResponse" } }, "400": { "description": "Invalid request, weak password, or self reset", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "Forbidden: not a system admin", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "User not found", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/admin/users/status": { "post": { "description": "Disable revokes the target's active sessions immediately.\nSelf-disable and disabling the last active system administrator are rejected.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "System Admin" ], "summary": "Enable or disable a user account", "parameters": [ { "description": "Account status request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.SetUserStatusRequest" } } ], "responses": { "200": { "description": "Status updated", "schema": { "$ref": "#/definitions/internal_handler.SetUserStatusResponse" } }, "400": { "description": "Self-disable / last-admin guard", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "User not found", "schema": { "type": "object", "additionalProperties": true } } } } }, "/system/capabilities": { "get": { "description": "返回当前部署版本及实际注册的后端路由所对应的功能能力;仅 supported=false 表示入口应隐藏", "produces": [ "application/json" ], "tags": [ "系统" ], "summary": "获取部署能力清单", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.GetDeploymentCapabilitiesResponse" } } } } }, "/system/docreader/reconnect": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "系统" ], "summary": "重连文档解析服务", "parameters": [ { "description": "DocReader 地址", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK" } } } }, "/system/info": { "get": { "description": "获取系统版本、构建信息和引擎配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "系统" ], "summary": "获取系统信息", "responses": { "200": { "description": "系统信息", "schema": { "$ref": "#/definitions/internal_handler.GetSystemInfoResponse" } } } } }, "/system/parser-engines": { "get": { "produces": [ "application/json" ], "tags": [ "系统" ], "summary": "列出可用的文档解析引擎", "responses": { "200": { "description": "解析引擎列表", "schema": { "$ref": "#/definitions/internal_handler.ListParserEnginesResponse" } } } } }, "/system/parser-engines/check": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "系统" ], "summary": "使用当前参数检测解析引擎可用性", "parameters": [ { "description": "解析引擎配置(与保存接口同结构)", "name": "body", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK" } } } }, "/system/sandbox-check": { "post": { "description": "使用当前填写的参数测试沙箱后端,不保存配置;deep=true 会执行临时脚本,远端后端还会创建并销毁一个沙箱", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "系统" ], "summary": "测试沙箱连通性", "parameters": [ { "description": "沙箱配置", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.SandboxCheckRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SandboxCheckResponse" } } } } }, "/system/storage-engine-check": { "post": { "description": "使用当前填写的参数测试 MinIO/COS 连通性,不保存配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "系统" ], "summary": "测试存储引擎连通性", "parameters": [ { "description": "存储引擎配置", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.StorageCheckRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.StorageCheckResponse" } } } } }, "/system/storage-engine-status": { "get": { "description": "返回 Local、MinIO、COS 各存储引擎的可用状态及说明,供全局设置与知识库选择使用", "produces": [ "application/json" ], "tags": [ "系统" ], "summary": "获取存储引擎状态", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.GetStorageEngineStatusResponse" } } } } }, "/tenants": { "get": { "security": [ { "Bearer": [] } ], "description": "获取当前用户可访问的空间列表", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "获取空间列表", "responses": { "200": { "description": "空间列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.TenantListData" } } } ] } }, "500": { "description": "服务器错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "post": { "security": [ { "Bearer": [] } ], "description": "创建新的空间。任意已登录用户均可调用以建立自己的新工作区,\n调用方会被自动设为该空间的 Owner。跨空间超管仍可像以前一样\n通过本接口创建任意空间。\n当 tenant.auto_create_api_key(或 WEKNORA_TENANT_AUTO_CREATE_API_KEY)\n开启时,会自动创建一个 full_access API Key,并在响应体的 data.api_key 字段返回其明文 token。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "创建空间", "parameters": [ { "description": "空间信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.createTenantRequest" } } ], "responses": { "201": { "description": "创建的空间(可选含 api_key)", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/all": { "get": { "security": [ { "Bearer": [] } ], "description": "获取系统中所有空间(需要跨空间访问权限)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "获取所有空间列表", "responses": { "200": { "description": "所有空间列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.TenantListData" } } } ] } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/kv/prompt-templates": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取系统配置的提示词模板列表", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "获取提示词模板", "responses": { "200": { "description": "提示词模板配置", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplatesConfig" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/kv/web-search-config": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取空间的网络搜索配置", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "获取空间网络搜索配置", "responses": { "200": { "description": "网络搜索配置", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchConfig" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/kv/{key}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "获取空间级别的KV配置(支持web-search-config、prompt-templates、parser-engine-config、storage-engine-config、chat-history-config、retrieval-config)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "获取空间KV配置", "parameters": [ { "type": "string", "description": "配置键名", "name": "key", "in": "path", "required": true } ], "responses": { "200": { "description": "配置值", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "不支持的键", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新空间级别的KV配置(支持web-search-config、parser-engine-config、storage-engine-config、chat-history-config、retrieval-config)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "更新空间KV配置", "parameters": [ { "type": "string", "description": "配置键名", "name": "key", "in": "path", "required": true }, { "description": "配置值", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "更新成功", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "不支持的键", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/search": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "分页搜索空间(需要跨空间访问权限)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "搜索空间", "parameters": [ { "type": "string", "description": "搜索关键词", "name": "keyword", "in": "query" }, { "type": "integer", "description": "空间ID筛选", "name": "tenant_id", "in": "query" }, { "type": "integer", "default": 1, "description": "页码", "name": "page", "in": "query" }, { "maximum": 100, "minimum": 1, "type": "integer", "default": 20, "description": "每页数量", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "搜索结果", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.TenantSearchData" } } } ] } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据ID获取空间详情", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "获取空间详情", "parameters": [ { "type": "integer", "description": "空间ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "空间详情", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.TenantResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "404": { "description": "空间不存在", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "put": { "security": [ { "Bearer": [] } ], "description": "更新空间信息", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "更新空间", "parameters": [ { "type": "integer", "description": "空间ID", "name": "id", "in": "path", "required": true }, { "description": "空间信息", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Tenant" } } ], "responses": { "200": { "description": "更新后的空间", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.TenantResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "删除指定的空间", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "删除空间", "parameters": [ { "type": "integer", "description": "空间ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "删除成功", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/{id}/api-principal-config": { "get": { "security": [ { "Bearer": [] } ], "description": "返回 X-API-Key 请求如何映射为终端 Principal 的配置(Owner)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "获取空间 API Key 用户身份配置", "parameters": [ { "type": "integer", "description": "空间ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "API principal 配置", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.apiPrincipalConfigResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } }, "put": { "security": [ { "Bearer": [] } ], "description": "配置 X-API-Key 请求如何映射为终端 Principal(Owner)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "更新空间 API Key 用户身份配置", "parameters": [ { "type": "integer", "description": "空间ID", "name": "id", "in": "path", "required": true }, { "description": "API principal 配置", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.apiPrincipalConfigRequest" } } ], "responses": { "200": { "description": "更新后的配置", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.apiPrincipalConfigResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/{id}/api-principal-test-token": { "post": { "security": [ { "Bearer": [] } ], "description": "使用空间已保存的 HMAC 密钥签发短期外部用户 JWT(Owner)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间管理" ], "summary": "生成 API Playground 测试 JWT", "parameters": [ { "type": "integer", "description": "空间ID", "name": "id", "in": "path", "required": true }, { "description": "测试 Token 参数", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.apiPrincipalTestTokenRequest" } } ], "responses": { "200": { "description": "短期 JWT", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.apiPrincipalTestTokenResponse" } } } ] } }, "400": { "description": "请求参数错误", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "403": { "description": "权限不足", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/{id}/audit-log": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回该空间最近的审计事件,按 id 倒序。游标分页:将上次响应的 next_cursor 作为下一次请求的 after_id。", "produces": [ "application/json" ], "tags": [ "审计日志" ], "summary": "获取空间审计日志", "parameters": [ { "type": "string", "description": "空间ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "description": "游标:返回 id 小于此值的记录(默认从最新开始)", "name": "after_id", "in": "query" }, { "type": "integer", "description": "页大小,1-100,默认 50", "name": "limit", "in": "query" }, { "type": "string", "description": "按 action 精确过滤(如 rbac.member_added / rbac.access_denied)", "name": "action", "in": "query" }, { "type": "string", "description": "按 outcome 精确过滤(success / denied)", "name": "outcome", "in": "query" }, { "type": "string", "description": "按 actor_user_id 精确过滤", "name": "actor", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.auditLogListResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/tenants/{id}/invitations": { "get": { "security": [ { "Bearer": [] } ], "description": "按空间列出待接受 / 历史邀请。query include_terminal=true 时附带 accepted/declined/revoked/expired。", "produces": [ "application/json" ], "tags": [ "空间邀请" ], "summary": "列出空间邀请", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true }, { "type": "boolean", "description": "是否包含终止态行(默认 false)", "name": "include_terminal", "in": "query" }, { "type": "integer", "default": 1, "description": "页码(从 1 起)", "name": "page", "in": "query" }, { "type": "integer", "default": 20, "description": "每页数量", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "security": [ { "Bearer": [] } ], "description": "Owner 通过邮箱邀请已注册用户加入空间。开启 tenant.auto_accept_invitation 后被邀请人立即自动加入(响应为成员结构),否则需在 /me/invitations 接受后成为成员。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间邀请" ], "summary": "发出空间邀请", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true }, { "description": "邀请请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.createInvitationRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantInvitationResponse" } } } ] } } } } }, "/tenants/{id}/invitations/{inv_id}": { "delete": { "security": [ { "Bearer": [] } ], "description": "Owner 取消一条还在 pending 的邀请;已 accepted/declined/revoked/expired 的行不可再撤销。", "produces": [ "application/json" ], "tags": [ "空间邀请" ], "summary": "撤销待接受邀请", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "邀请 ID", "name": "inv_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/tenants/{id}/invite-links": { "post": { "security": [ { "Bearer": [] } ], "description": "生成一条多次使用的共享邀请链接:谁拿到链接谁就能注册并加入当前空间。\n链接持续有效,直到过期或被撤销。", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间邀请" ], "summary": "生成共享邀请链接", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true }, { "description": "共享链接配置", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.createInviteLinkRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantInvitationResponse" } } } ] } } } } }, "/tenants/{id}/leave": { "post": { "security": [ { "Bearer": [] } ], "description": "调用方主动退出当前空间。等价于以自己的 user_id 调 RemoveMember,", "produces": [ "application/json" ], "tags": [ "空间成员" ], "summary": "退出当前空间", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/tenants/{id}/members": { "get": { "security": [ { "Bearer": [] } ], "description": "分页返回当前空间内 active 成员(含每位成员的角色、邮箱、头像);支持 q 按邮箱/用户名筛选", "produces": [ "application/json" ], "tags": [ "空间成员" ], "summary": "列出空间成员", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "按邮箱/用户名模糊筛选", "name": "q", "in": "query" }, { "type": "integer", "default": 1, "description": "页码(从 1 起)", "name": "page", "in": "query" }, { "type": "integer", "default": 20, "description": "每页数量(最大 100)", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "security": [ { "Bearer": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间成员" ], "summary": "直接添加空间成员(直加路径)", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true }, { "description": "邀请请求", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.addMemberRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "type": "object", "additionalProperties": true } } } } }, "/tenants/{id}/members/{user_id}": { "put": { "security": [ { "Bearer": [] } ], "description": "Owner 修改某位成员在当前空间内的角色;不能将最后一位 Owner 降级", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "空间成员" ], "summary": "修改空间成员角色", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "用户 ID", "name": "user_id", "in": "path", "required": true }, { "description": "目标角色", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.updateMemberRoleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } }, "delete": { "security": [ { "Bearer": [] } ], "description": "Owner 将某位成员从当前空间中移除(软删除 tenant_members 行);不能移除最后一位 Owner", "produces": [ "application/json" ], "tags": [ "空间成员" ], "summary": "移除空间成员", "parameters": [ { "type": "string", "description": "空间 ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "用户 ID", "name": "user_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/user/favorites": { "get": { "description": "Lists this user's starred resources in the current workspace for a given type", "tags": [ "User" ], "summary": "List my favorites", "parameters": [ { "type": "string", "description": "Resource type (kb | agent)", "name": "type", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserResourceFavorite" } } } } ] } } } }, "post": { "tags": [ "User" ], "summary": "Star a resource", "parameters": [ { "description": "Type + id", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.AddFavoriteRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/user/favorites/{type}/{id}": { "delete": { "tags": [ "User" ], "summary": "Unstar a resource", "parameters": [ { "type": "string", "description": "Resource type", "name": "type", "in": "path", "required": true }, { "type": "string", "description": "Resource id", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } } } } }, "/vector-stores": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "List all vector stores for the current workspace, including environment-configured and user-created stores", "produces": [ "application/json" ], "tags": [ "VectorStore" ], "summary": "List vector stores", "responses": { "200": { "description": "List of vector stores (env + DB)", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VectorStoreResponse" } } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Create a new vector store configuration for the current workspace", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "VectorStore" ], "summary": "Create vector store", "parameters": [ { "description": "Vector store configuration", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.CreateStoreRequest" } } ], "responses": { "201": { "description": "Created vector store", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VectorStoreResponse" } } } ] } }, "400": { "description": "Invalid request or validation error", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "409": { "description": "Duplicate endpoint and index", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } }, "/vector-stores/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Test connectivity using provided credentials without persisting. Returns detected server version.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "VectorStore" ], "summary": "Test vector store connection with raw credentials", "parameters": [ { "description": "Engine type and connection config", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.TestStoreRequest" } } ], "responses": { "200": { "description": "Connection test result (success, version)", "schema": { "$ref": "#/definitions/internal_handler.TestStoreRawResponse" } }, "400": { "description": "Invalid request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } } } } }, "/vector-stores/types": { "get": { "description": "Return supported engine types with connection and index field schemas for UI form generation", "produces": [ "application/json" ], "tags": [ "VectorStore" ], "summary": "List vector store types", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VectorStoreTypeInfo" } } } } ] } } } } }, "/vector-stores/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Retrieve a single vector store by ID. Supports both DB stores and env stores (__env_* IDs)", "produces": [ "application/json" ], "tags": [ "VectorStore" ], "summary": "Get vector store", "parameters": [ { "type": "string", "description": "Vector store ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Vector store details", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VectorStoreResponse" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Vector store not found", "schema": { "type": "object", "additionalProperties": true } } } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Update a vector store (name only). Engine type, connection config, and index config are immutable. Env stores cannot be modified.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "VectorStore" ], "summary": "Update vector store", "parameters": [ { "type": "string", "description": "Vector store ID", "name": "id", "in": "path", "required": true }, { "description": "Updated fields", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateStoreRequest" } } ], "responses": { "200": { "description": "Updated vector store", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Env store or validation error", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Vector store not found", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Soft-delete a vector store. Env stores cannot be deleted.", "produces": [ "application/json" ], "tags": [ "VectorStore" ], "summary": "Delete vector store", "parameters": [ { "type": "string", "description": "Vector store ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Deletion success", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "400": { "description": "Env store cannot be deleted", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Vector store not found", "schema": { "type": "object", "additionalProperties": true } } } } }, "/vector-stores/{id}/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Test connectivity of an existing saved or env store. Returns detected server version. For DB stores, the version is automatically saved to connection_config.", "produces": [ "application/json" ], "tags": [ "VectorStore" ], "summary": "Test vector store connection by ID", "parameters": [ { "type": "string", "description": "Vector store ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Connection test result (success, version)", "schema": { "$ref": "#/definitions/internal_handler.TestStoreByIDResponse" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Vector store not found", "schema": { "type": "object", "additionalProperties": true } } } } }, "/web-search-providers/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "使用前端表单中尚未保存的凭证测试连通性,用于\"测试连接\"按钮", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "网络搜索" ], "summary": "使用原始凭证测试 Provider(不落库)", "parameters": [ { "description": "{provider, parameters}", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.TestProviderRequest" } } ], "responses": { "200": { "description": "测试结果", "schema": { "$ref": "#/definitions/internal_handler.SuccessErrorResponse" } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } } } } }, "/web-search-providers/types": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回 UI 表单需要的 provider 类型及参数定义", "produces": [ "application/json" ], "tags": [ "网络搜索" ], "summary": "获取网络搜索 Provider 类型元数据", "responses": { "200": { "description": "provider 类型列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderTypeInfo" } } } } ] } } } } }, "/web-search-providers/{id}": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "根据 ID 获取指定 provider 配置", "produces": [ "application/json" ], "tags": [ "网络搜索" ], "summary": "获取网络搜索 Provider 详情", "parameters": [ { "type": "string", "description": "Provider ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Provider 详情", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderEntity" } }, "404": { "description": "Provider 不存在", "schema": { "type": "object", "additionalProperties": true } } } }, "put": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "更新指定 provider 的名称/描述/参数/是否默认", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "网络搜索" ], "summary": "更新网络搜索 Provider", "parameters": [ { "type": "string", "description": "Provider ID", "name": "id", "in": "path", "required": true }, { "description": "更新字段", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.UpdateProviderRequest" } } ], "responses": { "200": { "description": "更新后的 Provider", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderEntity" } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Provider 不存在", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "删除指定 provider 配置", "produces": [ "application/json" ], "tags": [ "网络搜索" ], "summary": "删除网络搜索 Provider", "parameters": [ { "type": "string", "description": "Provider ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "success: true", "schema": { "$ref": "#/definitions/internal_handler.SuccessResponse" } }, "404": { "description": "Provider 不存在", "schema": { "type": "object", "additionalProperties": true } } } } }, "/web-search-providers/{id}/test": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "使用数据库中已保存的凭证测试连通性", "produces": [ "application/json" ], "tags": [ "网络搜索" ], "summary": "测试已保存的 Provider", "parameters": [ { "type": "string", "description": "Provider ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "测试结果", "schema": { "$ref": "#/definitions/internal_handler.SuccessErrorResponse" } }, "404": { "description": "Provider 不存在", "schema": { "type": "object", "additionalProperties": true } } } } }, "/web-search/providers": { "get": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "返回所有已注册的网络搜索 provider(含元数据)", "produces": [ "application/json" ], "tags": [ "网络搜索" ], "summary": "获取可用网络搜索 Provider 列表", "responses": { "200": { "description": "provider 列表", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderTypeInfo" } } } } ] } } } } }, "/wechat/qrcode": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "申请一个用于扫码登录绑定的微信二维码(无请求体)", "produces": [ "application/json" ], "tags": [ "IM 渠道" ], "summary": "获取微信扫码登录二维码", "responses": { "200": { "description": "二维码信息(qrcode_url + qrcode 标识)", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "二维码生成失败", "schema": { "type": "object", "additionalProperties": true } } } } }, "/wechat/qrcode/status": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "查询指定二维码是否已被扫描/确认/过期;confirmed 时返回凭证", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "IM 渠道" ], "summary": "轮询微信二维码状态", "parameters": [ { "description": "{qrcode: string}", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "扫码状态", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "服务器错误", "schema": { "type": "object", "additionalProperties": true } } } } }, "/weknoracloud/credentials": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "保存 APPID/APPSECRET 到当前空间配置(不自动创建模型)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "WeKnoraCloud" ], "summary": "保存 WeKnoraCloud 凭证", "parameters": [ { "description": "{app_id, app_secret}", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "success: true", "schema": { "$ref": "#/definitions/internal_handler.MessageResponse" } }, "400": { "description": "请求参数错误", "schema": { "type": "object", "additionalProperties": true } } } } }, "/wiki-search": { "post": { "security": [ { "Bearer": [] }, { "ApiKeyAuth": [] } ], "description": "Cross-KB wiki search using the same POSIX regex ranking as single-KB wiki search", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wiki" ], "summary": "Cross-KB wiki search", "parameters": [ { "description": "Wiki search request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handler.SearchWikiRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/internal_handler.DataResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.WikiSearchHit" } } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError" } } } } } }, "definitions": { "github_com_Tencent_WeKnora_internal_agent_tools.AgentToolCatalog": { "type": "object", "properties": { "default_tools": { "description": "DefaultTools apply when an agent's allowed_tools was never set (null).", "type": "array", "items": { "type": "string" } }, "switch_managed_tools": { "description": "SwitchManagedTools follow other agent settings; naming them in the list\ndoes not register them.", "type": "array", "items": { "type": "string" } }, "tools": { "description": "Tools are the selectable tools, in display order.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_agent_tools.AgentToolInfo" } } } }, "github_com_Tencent_WeKnora_internal_agent_tools.AgentToolInfo": { "type": "object", "properties": { "danger": { "description": "Danger marks tools that modify content, which the editor highlights.", "type": "boolean" }, "description": { "type": "string" }, "group": { "type": "string" }, "label": { "type": "string" }, "name": { "type": "string" }, "requirement": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_agent_tools.AgentToolRequirement" } } }, "github_com_Tencent_WeKnora_internal_agent_tools.AgentToolRequirement": { "type": "object", "properties": { "all_of": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_agent_tools.KBCapability" } }, "any_of": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_agent_tools.KBCapability" } } } }, "github_com_Tencent_WeKnora_internal_agent_tools.KBCapability": { "type": "string", "enum": [ "vector", "keyword", "wiki", "graph", "faq" ], "x-enum-varnames": [ "CapVector", "CapKeyword", "CapWiki", "CapGraph", "CapFAQ" ] }, "github_com_Tencent_WeKnora_internal_application_service.CatalogProviderView": { "type": "object", "properties": { "api": { "type": "string" }, "id": { "type": "string" }, "model_thinking_levels": { "description": "ModelThinkingLevels lists, per chat model id, the levels offered once\nthinking is enabled, resolved against the vendor map and protocol so\nthe console does not re-implement level inheritance.", "type": "object", "additionalProperties": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.ReasoningEffort" } } }, "model_types": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelType" } }, "models": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models.ModelSpec" } }, "name": { "type": "string" }, "settings": { "type": "object", "additionalProperties": {} }, "vendor_thinking_levels": { "description": "VendorThinkingLevels is what a chat model without its own map offers.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.ReasoningEffort" } } } }, "github_com_Tencent_WeKnora_internal_application_service.CatalogRevision": { "type": "object", "properties": { "overlay": { "type": "object" }, "updated_at": { "type": "string" }, "updated_by": { "type": "string" }, "version": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_application_service.CatalogState": { "type": "object", "properties": { "applied_version": { "type": "integer" }, "baseline": { "type": "string" }, "builtin": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogProviderView" } }, "deployment": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogProviderView" } }, "deployment_error": { "type": "string" }, "effective": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogProviderView" } }, "history": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.CatalogRevision" } }, "overlay": { "type": "object" }, "sync_error": { "type": "string" }, "version": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_application_service.CatalogUpdate": { "type": "object", "properties": { "baseline": { "type": "string" }, "overlay": { "type": "object" }, "version": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_application_service.ConfigEnvGroup": { "type": "object", "properties": { "description": { "type": "string" }, "sandbox_config_id": { "type": "string" }, "sandbox_config_name": { "type": "string" }, "skills": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.SkillEnvGroup" } }, "vars": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.EnvVarView" } } } }, "github_com_Tencent_WeKnora_internal_application_service.EnvVarView": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "type": "string" }, "required": { "type": "boolean" }, "source": { "type": "string" }, "updated_at": { "description": "UpdatedAt is set only for the caller's own value; a workspace value has\nno per-variable timestamp to report.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_application_service.SandboxInventory": { "type": "object", "properties": { "agent_names": { "type": "array", "items": { "type": "string" } }, "sandbox_count": { "type": "integer" }, "session_ids": { "type": "array", "items": { "type": "string" } }, "unverifiable": { "description": "Unverifiable reports that SandboxCount is unknown rather than zero\nbecause the provider could not be reached. The management page must say\nso instead of rendering a reassuring \"0 sandboxes\".", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_application_service.SkillEnvGroup": { "type": "object", "properties": { "description": { "type": "string" }, "skill_id": { "type": "string" }, "skill_name": { "type": "string" }, "vars": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.EnvVarView" } } } }, "github_com_Tencent_WeKnora_internal_application_service.SkillFileContent": { "type": "object", "properties": { "binary": { "type": "boolean" }, "content": { "type": "string" }, "encoding": { "type": "string" }, "media_type": { "type": "string" }, "path": { "type": "string" }, "size": { "type": "integer" }, "truncated": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_application_service.SkillFileEntry": { "type": "object", "properties": { "path": { "type": "string" }, "size": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_application_service.SkillServedInfo": { "type": "object", "properties": { "version": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_application_service.WikiLintIssue": { "type": "object", "properties": { "auto_fixable": { "type": "boolean", "x-agent": true }, "description": { "type": "string", "x-agent": true }, "page_slug": { "type": "string", "x-agent": "slug" }, "severity": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.WikiLintIssueSeverity" } ], "x-agent": true }, "target_slug": { "description": "TargetSlug identifies the other page involved in the issue (e.g. the\nbroken link target, or the entity slug for a missing cross-ref). It is\nthe structured field used by AutoFix instead of parsing Description.", "type": "string", "x-agent": true }, "type": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.WikiLintIssueType" } ], "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_application_service.WikiLintIssueSeverity": { "type": "string", "enum": [ "info", "warning", "error" ], "x-enum-varnames": [ "SeverityInfo", "SeverityWarning", "SeverityError" ] }, "github_com_Tencent_WeKnora_internal_application_service.WikiLintIssueType": { "type": "string", "enum": [ "orphan_page", "broken_link", "stale_ref", "missing_cross_ref", "empty_content", "duplicate_slug" ], "x-enum-varnames": [ "LintIssueOrphanPage", "LintIssueBrokenLink", "LintIssueStaleRef", "LintIssueMissingCrossRef", "LintIssueEmptyContent", "LintIssueDuplicateSlug" ] }, "github_com_Tencent_WeKnora_internal_application_service.WikiLintReport": { "type": "object", "properties": { "health_score": { "description": "0-100", "type": "integer", "x-agent": true }, "issues": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.WikiLintIssue" } }, "knowledge_base_id": { "type": "string" }, "stats": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiStats" }, "summary": { "type": "string", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_config.PromptTemplate": { "type": "object", "properties": { "content": { "type": "string" }, "default": { "type": "boolean" }, "description": { "type": "string" }, "has_knowledge_base": { "type": "boolean" }, "has_web_search": { "type": "boolean" }, "id": { "type": "string" }, "mode": { "type": "string" }, "name": { "type": "string" }, "user": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_config.PromptTemplatesConfig": { "type": "object", "properties": { "agent_system_prompt": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "context_template": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "fallback": { "description": "Fallback 合并了固定回复模板和模型兜底 prompt(通过 mode:\"model\" 区分)", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "generate_kb_description": { "description": "GenerateKBDescription writes the knowledge-base gist from the document profile aggregate.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "generate_questions": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "generate_session_title": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "generate_summary": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "graph_extraction": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "intent_prompts": { "description": "IntentPrompts holds per-intent system prompt overrides (template ID = intent value).", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "keywords_extraction": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "rewrite": { "description": "Rewrite 合并了前端可选模板和运行时默认模板,每个模板同时包含 content + user", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } }, "system_prompt": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_config.PromptTemplate" } } } }, "github_com_Tencent_WeKnora_internal_datasource.ConnectorMetadata": { "type": "object", "properties": { "auth_type": { "description": "\"oauth2\", \"api_key\", \"token\", etc.", "type": "string" }, "capabilities": { "description": "\"incremental\", \"webhook\", \"deletion_sync\", etc.", "type": "array", "items": { "type": "string" } }, "description": { "type": "string" }, "icon": { "type": "string" }, "name": { "type": "string" }, "priority": { "description": "Priority order for UI display (lower = higher priority)", "type": "integer" }, "type": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_errors.AppError": { "type": "object", "properties": { "code": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_errors.ErrorCode" }, "details": {}, "message": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_errors.ErrorCode": { "type": "integer", "enum": [ 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 2000, 2001, 2002, 2003, 2004, 2005, 2100, 2101, 2102, 2103, 2200, 2201, 2300 ], "x-enum-varnames": [ "ErrBadRequest", "ErrUnauthorized", "ErrForbidden", "ErrNotFound", "ErrMethodNotAllowed", "ErrConflict", "ErrTooManyRequests", "ErrInternalServer", "ErrServiceUnavailable", "ErrTimeout", "ErrValidation", "ErrTenantNotFound", "ErrTenantAlreadyExists", "ErrTenantInactive", "ErrTenantNameRequired", "ErrTenantInvalidStatus", "ErrTenantCreationDisabled", "ErrAgentMissingThinkingModel", "ErrAgentMissingAllowedTools", "ErrAgentInvalidMaxIterations", "ErrAgentInvalidTemperature", "ErrVectorStoreBindingInvalid", "ErrVectorStoreUnavailable", "ErrModelInUse" ] }, "github_com_Tencent_WeKnora_internal_handler_dto.CredentialFieldMetadata": { "type": "object", "properties": { "configured": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_handler_dto.CredentialsResponse": { "type": "object", "properties": { "fields": { "type": "object", "additionalProperties": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.CredentialFieldMetadata" } } } }, "github_com_Tencent_WeKnora_internal_handler_dto.MCPAuthConfigResponse": { "type": "object", "properties": { "api_key_header": { "type": "string" }, "auth_server_metadata_url": { "type": "string" }, "auth_type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPAuthType" }, "client_id": { "type": "string" }, "custom_headers": { "type": "object", "additionalProperties": { "type": "string" } }, "scopes": { "type": "array", "items": { "type": "string" } } } }, "github_com_Tencent_WeKnora_internal_handler_dto.MCPCatalogSummary": { "type": "object", "properties": { "stale": { "type": "boolean" }, "synced_at": { "type": "string" }, "tool_count": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_handler_dto.MCPServiceResponse": { "type": "object", "properties": { "advanced_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPAdvancedConfig" }, "auth_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.MCPAuthConfigResponse" }, "catalog": { "description": "Catalog is the persisted tool-directory summary for list cards.\nOmitted when this principal has never synchronized the service.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.MCPCatalogSummary" } ] }, "created_at": { "type": "string" }, "credentials": { "description": "Credentials is the per-field \"configured?\" map. Embedded on the main\nresponse so the credential UI doesn't need a follow-up GET. The\nfrontend never sees the actual secret value — only whether one is\nstored. Omitted entirely for builtin services (they can't have\nper-tenant credentials).", "type": "object", "additionalProperties": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.CredentialFieldMetadata" } }, "description": { "type": "string", "x-agent": true }, "enabled": { "type": "boolean", "x-agent": true }, "env_vars": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPEnvVars" }, "headers": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPHeaders" }, "id": { "type": "string", "x-agent": "mcp_service_id" }, "is_builtin": { "type": "boolean", "x-agent": true }, "name": { "type": "string", "x-agent": true }, "stdio_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPStdioConfig" }, "tenant_id": { "type": "integer" }, "transport_type": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPTransportType" } ], "x-agent": true }, "updated_at": { "type": "string" }, "url": { "type": "string" }, "usage_instructions": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_handler_dto.ModelParametersDTO": { "type": "object", "properties": { "app_id": { "type": "string" }, "base_url": { "type": "string" }, "context_window": { "type": "integer" }, "custom_headers": { "type": "object", "additionalProperties": { "type": "string" } }, "embedding_parameters": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.EmbeddingParameters" }, "extra_config": { "type": "object", "additionalProperties": { "type": "string" } }, "interface_type": { "type": "string" }, "max_concurrency": { "type": "integer" }, "max_output_tokens": { "type": "integer" }, "parameter_size": { "type": "string" }, "provider": { "type": "string" }, "spec": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelSpecOverride" }, "supports_vision": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_handler_dto.ModelResponse": { "type": "object", "properties": { "capabilities": { "description": "Capabilities is the catalog view of the model. Chat models get the\nprotocol, thinking levels and context window; embedding and rerank\nmodels get input modalities, including support for image input.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_runtime.Capabilities" } ] }, "created_at": { "type": "string" }, "credentials": { "description": "Per-field \"configured?\" map. Omitted for builtin models unless the\ncaller is a system administrator. See MCPServiceResponse.Credentials.", "type": "object", "additionalProperties": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.CredentialFieldMetadata" } }, "description": { "type": "string", "x-agent": true }, "display_name": { "type": "string", "x-agent": true }, "id": { "type": "string", "x-agent": "model_id" }, "is_builtin": { "type": "boolean", "x-agent": true }, "is_default": { "type": "boolean", "x-agent": true }, "name": { "type": "string", "x-agent": true }, "parameters": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.ModelParametersDTO" }, "source": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelSource" } ], "x-agent": true }, "status": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelStatus" } ], "x-agent": true }, "tenant_id": { "type": "integer" }, "type": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelType" } ], "x-agent": true }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_handler_dto.TenantResponse": { "type": "object", "properties": { "assistant_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AssistantConfig" }, "business": { "type": "string" }, "chat_history_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChatHistoryConfig" }, "context_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ContextConfig" }, "created_at": { "type": "string" }, "credentials": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CredentialsConfig" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "description": { "type": "string" }, "id": { "type": "integer" }, "memory_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryConfig" }, "name": { "type": "string" }, "parser_engine_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineConfig" }, "retrieval_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrievalConfig" }, "retriever_engines": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngines" }, "status": { "type": "string" }, "storage_engine_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageEngineConfig" }, "storage_quota": { "type": "integer" }, "storage_used": { "type": "integer" }, "updated_at": { "type": "string" }, "web_search_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchConfig" } } }, "github_com_Tencent_WeKnora_internal_im.IMChannel": { "type": "object", "properties": { "agent_id": { "type": "string" }, "bot_identity": { "type": "string" }, "created_at": { "type": "string" }, "credentials": { "type": "object" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "enabled": { "type": "boolean" }, "id": { "type": "string" }, "knowledge_base_id": { "type": "string" }, "locale": { "type": "string" }, "mode": { "type": "string" }, "name": { "type": "string" }, "output_mode": { "type": "string" }, "platform": { "type": "string" }, "session_mode": { "type": "string" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_infrastructure_chunker.DocProfile": { "type": "object", "properties": { "all_caps_short_line_count": { "type": "integer" }, "avg_line_len": { "type": "number" }, "blank_paragraph_breaks": { "type": "integer" }, "chinese_chapter_count": { "type": "integer" }, "code_ratio": { "type": "number" }, "detected_langs": { "description": "Detected language hints (best-effort)", "type": "array", "items": { "type": "string" } }, "english_chapter_count": { "type": "integer" }, "form_feed_count": { "type": "integer" }, "german_chapter_count": { "type": "integer" }, "has_code": { "type": "boolean" }, "has_tables": { "description": "Content characteristics", "type": "boolean" }, "md_heading_counts": { "description": "Markdown structure", "type": "object", "additionalProperties": { "type": "integer" } }, "md_heading_total": { "type": "integer" }, "numbered_section_count": { "description": "Heuristic indicators", "type": "integer" }, "repeated_footer_count": { "type": "integer" }, "std_line_len": { "type": "number" }, "total_chars": { "type": "integer" }, "total_lines": { "type": "integer" }, "visual_sep_count": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_infrastructure_chunker.StrategyTier": { "type": "string", "enum": [ "heading", "heuristic", "legacy" ], "x-enum-varnames": [ "TierHeading", "TierHeuristic", "TierLegacy" ] }, "github_com_Tencent_WeKnora_internal_infrastructure_chunker.TierRejection": { "type": "object", "properties": { "reason": { "type": "string" }, "tier": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.StrategyTier" } } }, "github_com_Tencent_WeKnora_internal_mcp.OAuthAuthorizationStatus": { "type": "object", "properties": { "authorized": { "type": "boolean" }, "expires_at": { "type": "string" }, "refresh_available": { "type": "boolean" }, "state": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_models.ModelCost": { "type": "object", "properties": { "cache_read": { "type": "number" }, "cache_write": { "type": "number" }, "currency": { "type": "string" }, "input": { "type": "number" }, "output": { "type": "number" } } }, "github_com_Tencent_WeKnora_internal_models.ModelSpec": { "type": "object", "properties": { "aliases": { "description": "Aliases are additional ids that resolve to this entry (dated\nsnapshots, vendor-prefixed names on gateways).", "type": "array", "items": { "type": "string" } }, "api": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.API" }, "compat": { "description": "Compat is the protocol-specific overlay for this model (flat object,\nfields depend on API). Decoded lazily by Resolve.", "type": "object" }, "context_window": { "type": "integer" }, "cost": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models.ModelCost" }, "deprecated": { "description": "Deprecated hides the entry from pickers but keeps resolution working.", "type": "boolean" }, "dimension": { "description": "Dimension is the embedding vector width (embedding entries only).", "type": "integer" }, "id": { "type": "string" }, "input": { "description": "Input lists accepted modalities: text, image, audio, video.", "type": "array", "items": { "type": "string" } }, "match": { "description": "Match is a case-insensitive glob (\"gpt-5*\", \"*deepseek-r1*\") that lets\none entry describe a family. Exact ids and aliases win over patterns;\namong patterns the longest literal prefix wins.", "type": "string" }, "max_output_tokens": { "type": "integer" }, "name": { "type": "string" }, "reasoning": { "description": "Reasoning reports whether the model can emit thinking at all.", "type": "boolean" }, "source": { "description": "Source is the documentation URL the facts were taken from.", "type": "string" }, "thinking_levels": { "description": "ThinkingLevels maps protocol-neutral levels to vendor values; missing\nkeys inherit the vendor map. See api.ThinkingLevelMap.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.ThinkingLevelMap" } ] }, "type": { "description": "Type is the WeKnora model type this entry describes. Chat models with\nimage input are still KnowledgeQA; the UI derives VLM eligibility from\nInput. Embedding / Rerank / ASR entries exist for the model picker.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelType" } ] } } }, "github_com_Tencent_WeKnora_internal_models_api.API": { "type": "string", "enum": [ "openai-completions", "openai-responses", "anthropic-messages", "google-generative-ai", "ollama" ], "x-enum-varnames": [ "APIOpenAICompletions", "APIOpenAIResponses", "APIAnthropicMessages", "APIGoogleGenerativeAI", "APIOllama" ] }, "github_com_Tencent_WeKnora_internal_models_api.ReasoningEffort": { "type": "string", "enum": [ "off", "auto", "minimal", "low", "medium", "high", "xhigh", "max" ], "x-enum-varnames": [ "ReasoningOff", "ReasoningAuto", "ReasoningMinimal", "ReasoningLow", "ReasoningMedium", "ReasoningHigh", "ReasoningXHigh", "ReasoningMax" ] }, "github_com_Tencent_WeKnora_internal_models_api.ThinkingLevelMap": { "type": "object", "additionalProperties": { "type": "string" } }, "github_com_Tencent_WeKnora_internal_models_limiter.RuntimeStat": { "type": "object", "properties": { "active": { "type": "integer" }, "limit": { "type": "integer" }, "model_id": { "type": "string" }, "name": { "type": "string" }, "waiting": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_models_providers.AuthStyle": { "type": "string", "enum": [ "bearer", "api-key", "x-api-key", "x-goog-api-key", "none", "signed" ], "x-enum-varnames": [ "AuthBearer", "AuthAPIKeyHeader", "AuthXAPIKey", "AuthGoogleAPIKey", "AuthNone", "AuthSigned" ] }, "github_com_Tencent_WeKnora_internal_models_providers.CredentialLabel": { "type": "object", "properties": { "hint": { "description": "Hint is rendered under the input, for a warning the label cannot carry.", "type": "string" }, "hints": { "type": "object", "additionalProperties": { "type": "string" } }, "label": { "type": "string" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "model_types": { "description": "ModelTypes restricts the override; empty means every type.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelType" } }, "placeholder": { "type": "string" }, "placeholders": { "type": "object", "additionalProperties": { "type": "string" } }, "required": { "description": "Required marks the credential mandatory even where the generic label\ncalls it optional.", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_models_providers.ExtraField": { "type": "object", "properties": { "default": { "type": "string" }, "key": { "type": "string" }, "label": { "type": "string" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "model_types": { "description": "ModelTypes restricts the field to some model types; empty means all.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelType" } }, "options": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_providers.ExtraFieldOption" } }, "placeholder": { "type": "string" }, "placeholders": { "description": "Placeholders carries localized variants of Placeholder.", "type": "object", "additionalProperties": { "type": "string" } }, "required": { "type": "boolean" }, "secret": { "description": "Secret marks values that must never be echoed back to the UI.", "type": "boolean" }, "type": { "description": "\"string\", \"number\", \"boolean\", \"select\", \"password\"", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_models_providers.ExtraFieldOption": { "type": "object", "properties": { "label": { "type": "string" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "value": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_models_runtime.Capabilities": { "type": "object", "properties": { "api": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.API" }, "cataloged": { "type": "boolean" }, "context_window": { "type": "integer" }, "input": { "type": "array", "items": { "type": "string" } }, "max_output_tokens": { "type": "integer" }, "max_tokens_field": { "type": "string" }, "provider": { "type": "string" }, "reasoning": { "type": "boolean" }, "thinking_format": { "type": "string" }, "thinking_levels": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.ReasoningEffort" } } } }, "github_com_Tencent_WeKnora_internal_types.APIKeyScopeType": { "type": "string", "enum": [ "tenant", "platform" ], "x-enum-varnames": [ "APIKeyScopeTenant", "APIKeyScopePlatform" ] }, "github_com_Tencent_WeKnora_internal_types.APIPrincipalMode": { "type": "string", "enum": [ "tenant", "direct_header", "signed_token" ], "x-enum-varnames": [ "APIPrincipalModeTenant", "APIPrincipalModeDirect", "APIPrincipalModeSignedToken" ] }, "github_com_Tencent_WeKnora_internal_types.ASRConfig": { "type": "object", "properties": { "enabled": { "description": "Enabled turns speech transcription on. Also send asr_model_id.", "type": "boolean", "x-agent": "asr_enabled" }, "language": { "description": "Language is an optional hint for transcription, such as zh or en.", "type": "string", "x-agent": "asr_language" }, "model_id": { "description": "Model that transcribes audio. model.list returns the ids.", "type": "string", "x-agent": "asr_model_id" } } }, "github_com_Tencent_WeKnora_internal_types.AdminCreateUserRequest": { "type": "object", "required": [ "email", "username" ], "properties": { "email": { "type": "string" }, "password": { "type": "string" }, "username": { "type": "string", "maxLength": 50, "minLength": 2 } } }, "github_com_Tencent_WeKnora_internal_types.AgentStep": { "type": "object", "properties": { "intermediate_answer": { "description": "IntermediateAnswer preserves a plain answer followed by a loop-end steer.\nThe canonical final answer is still stored in Message.Content.", "type": "boolean" }, "iteration": { "description": "Iteration number (0-indexed)", "type": "integer" }, "reasoning_content": { "description": "ReasoningContent stores the OpenAI-protocol reasoning_content emitted by the\nmodel in this round. Persisted on AgentStep so cross-turn replay can put it\nback on the assistant message — required by MiMo / DeepSeek V3.2+ thinking\nmode, ignored by providers that don't recognize the field.", "type": "string" }, "reasoning_metadata": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ProviderMetadata" }, "reasoning_signature": { "description": "ReasoningSignature / ReasoningMetadata are the provider artifacts that\nmust accompany ReasoningContent on replay (Anthropic signatures,\nOpenAI Responses encrypted reasoning items).", "type": "string" }, "thought": { "description": "LLM's reasoning/thinking (Think phase)", "type": "string" }, "timestamp": { "description": "When this step occurred", "type": "string" }, "tool_calls": { "description": "Tools called in this step (Act phase)", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ToolCall" } }, "truncated": { "description": "Truncated marks the round the completion-token cap cut off. It rides in\nthe agent_steps JSON so a reloaded, shared or re-opened conversation can\nstill show that the answer stops mid-sentence by design, rather than\nlooking finished. Live streaming carries the same fact on the answer\nevent; this is what survives the round trip.", "type": "boolean" }, "user_messages_before": { "description": "UserMessagesBefore records consumed steer rows in delivery order, before\nthis model response. Unlike timestamps, this remains unambiguous on replay.", "type": "array", "items": { "type": "string" } } } }, "github_com_Tencent_WeKnora_internal_types.AgentTypeKBFilter": { "type": "object", "properties": { "all_of": { "description": "AllOf: KB must expose ALL of these capability flags.", "type": "array", "items": { "type": "string" } }, "any_of": { "description": "AnyOf: KB must expose at least ONE of these capability flags.", "type": "array", "items": { "type": "string" } }, "none_of": { "description": "NoneOf: KB must expose NONE of these capability flags.", "type": "array", "items": { "type": "string" } } } }, "github_com_Tencent_WeKnora_internal_types.AgentTypePresetConfig": { "type": "object", "properties": { "allowed_tools": { "type": "array", "items": { "type": "string" } }, "faq_priority_enabled": { "type": "boolean" }, "kb_selection_mode": { "description": "KBSelectionMode presets the KB picker mode: \"all\" | \"selected\" | \"none\".\nWhen empty, the user's current value stays untouched.", "type": "string" }, "max_iterations": { "type": "integer" }, "retain_retrieval_history": { "type": "boolean" }, "supported_file_types": { "type": "array", "items": { "type": "string" } }, "system_prompt_id": { "type": "string" }, "temperature": { "type": "number" }, "web_search_enabled": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.AgentTypePresetEntry": { "type": "object", "properties": { "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AgentTypePresetConfig" }, "i18n": { "type": "object", "additionalProperties": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AgentTypePresetI18n" } }, "id": { "type": "string" }, "kb_filter": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AgentTypeKBFilter" } } }, "github_com_Tencent_WeKnora_internal_types.AgentTypePresetI18n": { "type": "object", "properties": { "description": { "type": "string" }, "label": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.AnswerStrategy": { "type": "string", "enum": [ "all", "random" ], "x-enum-varnames": [ "AnswerStrategyAll", "AnswerStrategyRandom" ] }, "github_com_Tencent_WeKnora_internal_types.AssistantAccessLevel": { "type": "string", "enum": [ "read_only", "confirm", "auto_write" ], "x-enum-varnames": [ "AssistantAccessReadOnly", "AssistantAccessConfirm", "AssistantAccessAutoWrite" ] }, "github_com_Tencent_WeKnora_internal_types.AssistantConfig": { "type": "object", "properties": { "display_name": { "description": "DisplayName replaces the product name in the assistant UI; empty keeps\nthe default.", "type": "string" }, "max_access_level": { "description": "MaxAccessLevel is the highest level a member may pick; empty means\nAssistantAccessConfirm.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AssistantAccessLevel" } ] } } }, "github_com_Tencent_WeKnora_internal_types.AttrSpec": { "type": "object", "properties": { "consumers": { "description": "downstream steps that read this attribute", "type": "array", "items": { "type": "string" } }, "description": { "description": "one line explaining what the attribute measures", "type": "string" }, "label": { "description": "human-readable name for the settings panel", "type": "string" }, "name": { "description": "stable key, e.g. \"contain.text\"", "type": "string" }, "question": { "description": "sentence shown to the model in the describe round", "type": "string" }, "type": { "description": "extent | presence", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AttrType" } ] }, "values": { "description": "ordered low-\u003ehigh for extent attrs", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AttrValue" } } } }, "github_com_Tencent_WeKnora_internal_types.AttrType": { "type": "string", "enum": [ "extent", "presence" ], "x-enum-varnames": [ "AttrTypeExtent", "AttrTypePresence" ] }, "github_com_Tencent_WeKnora_internal_types.AttrValue": { "type": "object", "properties": { "description": { "description": "sentence explaining the value", "type": "string" }, "label": { "description": "short on-screen name", "type": "string" }, "value": { "description": "raw machine value, never localized", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.AuditAction": { "type": "string", "enum": [ "rbac.member_added", "rbac.member_removed", "rbac.member_role_changed", "rbac.member_left", "rbac.access_denied", "rbac.invitation_sent", "rbac.invitation_accepted", "rbac.invitation_declined", "rbac.invitation_revoked", "rbac.invitation_expired", "vector_store.created", "vector_store.updated", "vector_store.deleted", "opensearch.index_created", "opensearch.index_deleted", "opensearch.reindex_executed", "system.setting_changed", "system.admin_promoted", "system.admin_revoked", "system.user_password_reset", "system.user_created", "system.api_key_created", "system.api_key_revoked", "system.queue_task_retried", "system.queue_task_deleted", "system.queue_task_run_now", "system.queue_task_cancelled", "system.queue_archived_purged", "kb.created", "kb.updated", "kb.deleted", "kb.duplicated", "kb.clone_started", "kb.clone_completed", "kb.clone_failed", "knowledge.created", "knowledge.updated", "knowledge.deleted", "knowledge.batch_deleted", "knowledge.reparse_started", "knowledge.parse_canceled", "knowledge.move_started", "knowledge.move_completed", "knowledge.move_failed", "tag.created", "tag.updated", "tag.deleted", "datasource.created", "datasource.updated", "datasource.deleted", "datasource.sync_started", "datasource.sync_completed", "datasource.sync_failed", "datasource.paused", "datasource.resumed", "kb.share_added", "kb.share_permission_changed", "kb.share_removed", "wiki.content_changed", "faq.import_started", "faq.import_completed", "faq.import_failed" ], "x-enum-varnames": [ "AuditActionMemberAdded", "AuditActionMemberRemoved", "AuditActionMemberRoleChanged", "AuditActionMemberLeft", "AuditActionAccessDenied", "AuditActionInvitationSent", "AuditActionInvitationAccepted", "AuditActionInvitationDeclined", "AuditActionInvitationRevoked", "AuditActionInvitationExpired", "AuditActionVectorStoreCreated", "AuditActionVectorStoreUpdated", "AuditActionVectorStoreDeleted", "AuditActionOpenSearchIndexCreated", "AuditActionOpenSearchIndexDeleted", "AuditActionOpenSearchReindexExecuted", "AuditActionSystemSettingChanged", "AuditActionSystemAdminPromoted", "AuditActionSystemAdminRevoked", "AuditActionSystemUserPasswordReset", "AuditActionSystemUserCreated", "AuditActionSystemAPIKeyCreated", "AuditActionSystemAPIKeyRevoked", "AuditActionSystemQueueTaskRetried", "AuditActionSystemQueueTaskDeleted", "AuditActionSystemQueueTaskRunNow", "AuditActionSystemQueueTaskCancelled", "AuditActionSystemQueueArchivedPurged", "AuditActionKBCreated", "AuditActionKBUpdated", "AuditActionKBDeleted", "AuditActionKBDuplicated", "AuditActionKBCloneStarted", "AuditActionKBCloneCompleted", "AuditActionKBCloneFailed", "AuditActionKnowledgeCreated", "AuditActionKnowledgeUpdated", "AuditActionKnowledgeDeleted", "AuditActionKnowledgeBatchDeleted", "AuditActionKnowledgeReparseStarted", "AuditActionKnowledgeParseCanceled", "AuditActionKnowledgeMoveStarted", "AuditActionKnowledgeMoveCompleted", "AuditActionKnowledgeMoveFailed", "AuditActionTagCreated", "AuditActionTagUpdated", "AuditActionTagDeleted", "AuditActionDataSourceCreated", "AuditActionDataSourceUpdated", "AuditActionDataSourceDeleted", "AuditActionDataSourceSyncStarted", "AuditActionDataSourceSyncCompleted", "AuditActionDataSourceSyncFailed", "AuditActionDataSourcePaused", "AuditActionDataSourceResumed", "AuditActionKBShareAdded", "AuditActionKBSharePermissionChanged", "AuditActionKBShareRemoved", "AuditActionWikiContentChanged", "AuditActionFAQImportStarted", "AuditActionFAQImportCompleted", "AuditActionFAQImportFailed" ] }, "github_com_Tencent_WeKnora_internal_types.AuditLog": { "type": "object", "properties": { "action": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AuditAction" } ], "x-agent": true }, "actor_role": { "type": "string", "x-agent": true }, "actor_user_id": { "type": "string" }, "created_at": { "type": "string", "x-agent": true }, "details": { "type": "object", "x-agent": true, "x-agent-keys": "title|trigger|via|processing_status" }, "id": { "type": "integer", "x-agent": "event_id" }, "outcome": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AuditOutcome" } ], "x-agent": true }, "request_method": { "type": "string" }, "request_path": { "type": "string" }, "scope_id": { "type": "string" }, "scope_type": { "type": "string" }, "target_id": { "type": "string" }, "target_type": { "type": "string", "x-agent": true }, "target_user_id": { "type": "string" }, "tenant_id": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.AuditOutcome": { "type": "string", "enum": [ "success", "accepted", "denied", "failed", "partial", "canceled" ], "x-enum-varnames": [ "AuditOutcomeSuccess", "AuditOutcomeAccepted", "AuditOutcomeDenied", "AuditOutcomeFailed", "AuditOutcomePartial", "AuditOutcomeCanceled" ] }, "github_com_Tencent_WeKnora_internal_types.AutoTagConfig": { "type": "object", "properties": { "enabled": { "description": "Enabled turns automatic tagging on. The model picks from tags that already exist.", "type": "boolean", "x-agent": "auto_tag_enabled" }, "max_tags": { "description": "MaxTags is how many tags one document may receive, from 1 to 10.", "type": "integer", "maximum": 10, "minimum": 1, "x-agent": "auto_tag_max_tags" }, "model_id": { "description": "ModelID overrides the summary model. Empty uses summary_model_id.", "type": "string", "x-agent": "auto_tag_model_id" }, "skip_if_tagged": { "description": "SkipIfTagged leaves a document alone when it already has tags. Empty means yes.", "type": "boolean", "x-agent": "auto_tag_skip_if_tagged" } } }, "github_com_Tencent_WeKnora_internal_types.COSEngineConfig": { "type": "object", "properties": { "app_id": { "type": "string" }, "bucket_name": { "type": "string" }, "path_prefix": { "type": "string" }, "region": { "type": "string" }, "secret_id": { "type": "string" }, "secret_key": { "type": "string" }, "temp_bucket_name": { "type": "string" }, "temp_region": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ChatHistoryConfig": { "type": "object", "properties": { "embedding_model_id": { "description": "EmbeddingModelID is the ID of the embedding model used for vectorizing chat messages.\nOnce messages have been indexed, the model cannot be changed (requires re-indexing).", "type": "string" }, "enabled": { "description": "Enabled controls whether chat history indexing is active", "type": "boolean" }, "knowledge_base_id": { "description": "KnowledgeBaseID is the auto-managed hidden knowledge base for chat history.\nThis is set internally when the feature is first enabled; users should not set this directly.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ChatHistoryKBStats": { "type": "object", "properties": { "embedding_model_id": { "description": "ID of the embedding model used", "type": "string" }, "enabled": { "description": "Whether the chat history KB is configured and enabled", "type": "boolean" }, "has_indexed_messages": { "description": "Whether there are any indexed messages (used by frontend to lock embedding model)", "type": "boolean" }, "indexed_message_count": { "description": "Number of indexed message entries (Knowledge count)", "type": "integer" }, "knowledge_base_id": { "description": "ID of the knowledge base used for chat history", "type": "string" }, "knowledge_base_name": { "description": "Name of the knowledge base", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ChatManage": { "type": "object", "properties": { "chat_model_id": { "description": "Chat model parameters", "type": "string" }, "citation_enabled": { "description": "CitationEnabled controls only final knowledge/web source citations. Nil\ndefaults to true for requests and agents created before this option existed.", "type": "boolean" }, "disable_keywords_match": { "type": "boolean" }, "disable_vector_match": { "description": "DisableVectorMatch / DisableKeywordsMatch turn off one recall path for\nevery search target. Set by the knowledge-search API.", "type": "boolean" }, "embedding_top_k": { "type": "integer" }, "enable_query_expansion": { "type": "boolean" }, "enable_rewrite": { "description": "Rewrite parameters", "type": "boolean" }, "fallback_prompt": { "type": "string" }, "fallback_response": { "type": "string" }, "fallback_strategy": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FallbackStrategy" }, "history": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.History" } }, "intent": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QueryIntent" }, "keyword_threshold": { "type": "number" }, "knowledge_base_ids": { "description": "Knowledge base retrieval parameters", "type": "array", "items": { "type": "string" } }, "knowledge_ids": { "type": "array", "items": { "type": "string" } }, "max_rounds": { "type": "integer" }, "query": { "type": "string" }, "query_understand_model_id": { "description": "QueryUnderstandModelID, when set, overrides the chat model used for\nthe query-understanding (rewrite + intent classification) stage only.\nEmpty means fall back to ChatModelID.", "type": "string" }, "rerank_model_id": { "description": "Rerank parameters", "type": "string" }, "rerank_threshold": { "type": "number" }, "rerank_top_k": { "type": "integer" }, "rewrite_prompt_system": { "type": "string" }, "rewrite_prompt_user": { "type": "string" }, "rewrite_query": { "type": "string" }, "session_id": { "type": "string" }, "summary_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SummaryConfig" }, "user_id": { "type": "string" }, "vector_database": { "type": "string" }, "vector_threshold": { "type": "number" } } }, "github_com_Tencent_WeKnora_internal_types.Chunk": { "type": "object", "properties": { "chunk_index": { "description": "Index position of the chunk in the original document", "type": "integer", "x-agent": true }, "chunk_type": { "description": "Chunk 类型,用于区分不同类型的 Chunk", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkType" } ], "x-agent": true }, "content": { "description": "Actual text content of the chunk", "type": "string", "x-agent": true }, "content_hash": { "description": "ContentHash 存储内容的 hash 值,用于快速匹配(主要用于 FAQ)", "type": "string" }, "content_revision": { "description": "ContentRevision is incremented for every user edit or rollback.", "type": "integer" }, "created_at": { "description": "Chunk creation time", "type": "string" }, "deleted_at": { "description": "Soft delete marker, supports data recovery", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "end_at": { "description": "Ending character position in the original text", "type": "integer", "x-agent": true }, "flags": { "description": "Flags 存储多个布尔状态的位标志(如推荐状态等)\n默认值为 ChunkFlagRecommended (1),表示默认可推荐", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkFlags" } ] }, "id": { "description": "Unique identifier of the chunk, using UUID format", "type": "string", "x-agent": "chunk_id" }, "image_info": { "description": "图片信息,存储为 JSON", "type": "string" }, "index_status": { "description": "IndexStatus reports whether the current content is reflected in the\nretrieval stores: ready | processing | failed.", "type": "string" }, "indirect_relation_chunks": { "description": "间接关系 Chunk ID,用于关联间接关系 Chunk 和原始文本 Chunk", "type": "array", "items": { "type": "string" } }, "is_enabled": { "description": "Whether the chunk is enabled, can be used to temporarily disable certain chunks", "type": "boolean", "x-agent": true }, "knowledge_base_id": { "description": "ID of the knowledge base, for quick location", "type": "string" }, "knowledge_id": { "description": "ID of the parent knowledge, associated with the Knowledge model", "type": "string" }, "last_editor_id": { "description": "LastEditorID records the actor that produced the current revision.", "type": "string" }, "metadata": { "description": "Metadata 存储 chunk 级别的扩展信息,例如 FAQ 元数据", "type": "object" }, "next_chunk_id": { "description": "Next chunk ID", "type": "string" }, "parent_chunk_id": { "description": "父 Chunk ID,用于关联图片 Chunk 和原始文本 Chunk", "type": "string" }, "pre_chunk_id": { "description": "Previous chunk ID", "type": "string" }, "relation_chunks": { "description": "关系 Chunk ID,用于关联关系 Chunk 和原始文本 Chunk", "type": "array", "items": { "type": "string" } }, "seq_id": { "description": "SeqID is an auto-increment integer ID for external API usage (FAQ entries)", "type": "integer" }, "source_locators": { "description": "SourceLocators point back into the original file (page and region,\nslide, sheet rows, ...) so citations can open the file at this chunk.\nEmpty when the parser reported no positions.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SourceLocator" } }, "start_at": { "description": "Starting character position in the original text", "type": "integer", "x-agent": true }, "status": { "description": "Status of the chunk", "type": "integer" }, "tag_id": { "description": "Optional tag ID for categorization within a knowledge base (used for FAQ)", "type": "string" }, "tenant_id": { "description": "Tenant ID, used for multi-tenant isolation", "type": "integer" }, "updated_at": { "description": "Chunk last update time", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ChunkFlags": { "type": "integer", "enum": [ 1 ], "x-enum-varnames": [ "ChunkFlagRecommended" ] }, "github_com_Tencent_WeKnora_internal_types.ChunkType": { "type": "string", "enum": [ "text", "parent_text", "image_ocr", "image_caption", "image_vector", "entity", "relationship", "faq", "web_search", "table_summary", "table_column", "wiki_page" ], "x-enum-varnames": [ "ChunkTypeText", "ChunkTypeParentText", "ChunkTypeImageOCR", "ChunkTypeImageCaption", "ChunkTypeImageVector", "ChunkTypeEntity", "ChunkTypeRelationship", "ChunkTypeFAQ", "ChunkTypeWebSearch", "ChunkTypeTableSummary", "ChunkTypeTableColumn", "ChunkTypeWikiPage" ] }, "github_com_Tencent_WeKnora_internal_types.ChunkingConfig": { "type": "object", "properties": { "child_chunk_size": { "description": "ChildChunkSize is the size of child chunks used for embedding (default: 384).\nOnly used when EnableParentChild is true.", "type": "integer", "maximum": 10000, "minimum": 1, "x-agent": true }, "chunk_overlap": { "description": "Chunk overlap in characters.", "type": "integer", "maximum": 5000, "minimum": 0, "x-agent": true }, "chunk_size": { "description": "Chunk size in characters. Empty on create uses the server default.", "type": "integer", "maximum": 10000, "minimum": 100, "x-agent": true }, "enable_parent_child": { "description": "EnableParentChild splits into large parent chunks and small child chunks. Search matches a child and returns its parent.", "type": "boolean", "x-agent": true }, "languages": { "description": "Languages hints the splitter, for example de or zh. Empty detects the language from the document.", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-maximum": "20" }, "parent_chunk_size": { "description": "ParentChunkSize is the size of parent chunks (default: 4096).\nOnly used when EnableParentChild is true.", "type": "integer", "maximum": 20000, "minimum": 1, "x-agent": true }, "parser_engine_rules": { "description": "ParserEngineRules configures which parser engine to use for each file type.\nWhen empty, DefaultParserEngine is used (builtin/simple routing, except\ntypes that only a specific engine can parse: ppt/pptx fall back to\nmarkitdown). A linked anydoc binding is preferred for every type it\nconverts.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule" } }, "separators": { "description": "Separators, in the order they are tried.", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-maximum": "20" }, "strategy": { "description": "Strategy selects how documents are split: auto, heading, heuristic, recursive or legacy. Empty keeps the server default.", "type": "string", "enum": [ "auto", "heading", "heuristic", "recursive", "legacy" ], "x-agent": true }, "table_metadata_instructions": { "description": "TableMetadataInstructions is extra guidance for CSV and Excel summaries. The output format stays fixed.", "type": "string", "x-agent": true, "x-agent-detail": true, "x-agent-max-bytes": "4000" }, "token_limit": { "description": "TokenLimit caps chunk size in approximate tokens. 0 uses ChunkSize as a character count.", "type": "integer", "maximum": 100000, "minimum": 0, "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.ConnectionConfig": { "type": "object", "properties": { "addr": { "description": "Common", "type": "string" }, "api_key": { "description": "AES-GCM encrypted", "type": "string" }, "database": { "description": "Database name used by engines that support database-level namespaces\n(currently Milvus, Tencent VectorDB, and Doris).", "type": "string" }, "grpc_address": { "description": "Weaviate", "type": "string" }, "host": { "description": "Qdrant", "type": "string" }, "http_port": { "description": "Doris: HTTP port for Stream Load API (FE default 8030).\nAddr is reused for the MySQL protocol \"host:9030\"; HTTPPort + the host of Addr\ntogether form the FE HTTP endpoint used by Stream Load.", "type": "integer" }, "insecure_skip_verify": { "description": "InsecureSkipVerify disables TLS certificate verification when\ntalking to the backing store over HTTPS. Defaults to false\n(secure). Set to true ONLY for self-signed development clusters;\nproduction deployments should provide trusted certificates via\nthe system CA pool. Cross-driver applicable but currently only\nthe OpenSearch driver (Phase 3) reads this field. Note: this\ndiffers from the Qdrant-specific UseTLS below, which *enables*\nTLS on gRPC connections — InsecureSkipVerify only controls\n*verification* of an already-TLS connection.", "type": "boolean" }, "password": { "description": "AES-GCM encrypted", "type": "string" }, "port": { "type": "integer" }, "scheme": { "type": "string" }, "use_default_connection": { "description": "Postgres", "type": "boolean" }, "use_tls": { "type": "boolean" }, "username": { "type": "string" }, "version": { "description": "Version is the detected server version (e.g., \"7.10.1\", \"16.2\", \"1.12.6\").\nAuto-populated by TestConnection on successful connectivity check.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ContextCompressionStrategy": { "type": "string", "enum": [ "sliding_window", "smart" ], "x-enum-varnames": [ "ContextCompressionSlidingWindow", "ContextCompressionSmart" ] }, "github_com_Tencent_WeKnora_internal_types.ContextConfig": { "type": "object", "properties": { "compression_strategy": { "description": "Compression strategy: \"sliding_window\" or \"smart\"", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ContextCompressionStrategy" } ] }, "max_tokens": { "description": "Maximum tokens allowed in LLM context", "type": "integer" }, "recent_message_count": { "description": "For sliding_window: number of messages to keep\nFor smart: number of recent messages to keep uncompressed", "type": "integer" }, "summarize_threshold": { "description": "Summarize threshold: number of messages before summarization", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.CreateOrganizationRequest": { "type": "object", "required": [ "name" ], "properties": { "avatar": { "description": "optional avatar URL", "type": "string", "maxLength": 512 }, "description": { "type": "string", "maxLength": 1000 }, "invite_code_validity_days": { "description": "optional: 0=never, 1, 7, 30; default 7", "type": "integer" }, "member_limit": { "description": "optional: max members; 0=unlimited; default 50", "type": "integer" }, "name": { "type": "string", "maxLength": 255, "minLength": 1 } } }, "github_com_Tencent_WeKnora_internal_types.CredentialsConfig": { "type": "object", "properties": { "weknoracloud": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WeKnoraCloudCredentials" } } }, "github_com_Tencent_WeKnora_internal_types.CubeEgressRule": { "type": "object", "properties": { "audit": { "description": "Audit is none | metadata | full. Empty uses the server default.", "type": "string" }, "deny": { "description": "Deny inverts the action, which defaults to allow. A deny rule still\nneeds Host or SNI: the target has to reach CubeEgress for it to answer\nwith a request-level 403 instead of the network layer dropping it.", "type": "boolean" }, "host": { "type": "string" }, "inject": { "description": "Inject adds credential headers on allowed HTTPS requests.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CubeHeaderInject" } }, "methods": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" }, "path": { "type": "string" }, "scheme": { "type": "string" }, "sni": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.CubeHeaderInject": { "type": "object", "properties": { "format": { "type": "string" }, "header": { "type": "string" }, "secret": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.CubeSandboxConfig": { "type": "object", "properties": { "api_key": { "description": "加密", "type": "string" }, "api_url": { "type": "string" }, "cube_sandbox_ttl_seconds": { "type": "integer" }, "dns_servers": { "description": "DNSServers are Cube template nameserver IPs. Empty uses Cubelet's default.", "type": "array", "items": { "type": "string" } }, "http_timeout_sec": { "description": "HTTPTimeoutSec bounds each HTTP call to the sandbox control plane.\n0 means use the built-in default (30s), never the deployment's value.", "type": "integer" }, "proxy_url": { "type": "string" }, "sandbox_domain": { "type": "string" }, "template_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.CustomAgent": { "type": "object", "properties": { "avatar": { "description": "Avatar/Icon of the agent (emoji or icon name)", "type": "string" }, "config": { "description": "Agent configuration", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgentConfig" } ], "x-agent": true }, "created_at": { "description": "Timestamps", "type": "string" }, "created_by": { "description": "Created by user ID", "type": "string" }, "creator_name": { "description": "CreatorName 由 list handler 在返回前批量回填,作用同 KnowledgeBase.CreatorName:\n让前端列表卡片区分「我创建」与「同空间其他成员创建」。不落库,内建 agent / 老数据\n仍可能为空。", "type": "string", "x-agent": true }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "description": { "description": "Description of the agent", "type": "string", "x-agent": true }, "id": { "description": "Unique identifier of the agent (composite primary key with TenantID)\nFor built-in agents, this is 'builtin-quick-answer' or 'builtin-smart-reasoning'\nFor custom agents, this is a UUID", "type": "string", "x-agent": "agent_id" }, "is_builtin": { "description": "Whether this is a built-in agent (normal mode / agent mode)", "type": "boolean", "x-agent": true }, "name": { "description": "Name of the agent", "type": "string", "x-agent": true }, "tenant_id": { "description": "Tenant ID (composite primary key with ID)", "type": "integer" }, "updated_at": { "type": "string", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.CustomAgentConfig": { "type": "object", "properties": { "agent_mode": { "description": "===== Basic Settings =====\nAgent mode: \"quick-answer\" for RAG mode, \"smart-reasoning\" for ReAct agent mode", "type": "string", "x-agent": true }, "agent_type": { "description": "AgentType is a preset category under smart-reasoning mode that pre-fills\nsystem prompt, allowed tools and recommended KB compatibility.\nValid values: \"rag-qa\", \"wiki-qa\", \"hybrid-rag-wiki\", \"custom\".\nEmpty / unknown values are treated as \"custom\" (no preset applied).\nIgnored for quick-answer mode.", "type": "string", "x-agent": true }, "allowed_tools": { "description": "Allowed tools (only for agent type)", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-detail": true }, "asr_model_id": { "description": "ASR model ID for audio transcription (optional)", "type": "string" }, "attachment_image_understanding": { "description": "AttachmentImageUnderstanding enables VLM OCR fallback for image-only /\nscanned documents (PDF/PPT whose pages are images). Disabled by default\nbecause it materially increases parse latency; only triggers when the\nextracted text is below a threshold and a VLM model is configured.", "type": "boolean" }, "attachment_ocr_max_pages": { "description": "AttachmentOCRMaxPages caps how many pages of a scanned / image-only\ndocument this agent sends to the VLM for OCR. 0 falls back to the global\ndefault (WEKNORA_CHAT_ATTACHMENT_OCR_MAX_PAGES). More pages means higher\ncoverage but slower parsing and more VLM cost.", "type": "integer" }, "attachment_parse_wait_timeout_sec": { "description": "AttachmentParseWaitTimeoutSec bounds, in seconds, how long a chat turn\nwaits for this agent's still-parsing attachments before proceeding with\nonly the finished ones. 0 falls back to the global default\n(WEKNORA_CHAT_ATTACHMENT_WAIT_TIMEOUT_SEC).", "type": "integer" }, "audio_upload_enabled": { "description": "Whether audio upload (ASR transcription) is enabled for this agent (default: false)", "type": "boolean" }, "chat_parser_engine_rules": { "description": "===== Chat Attachment Parsing Settings =====\nChatParserEngineRules selects parser engines for session-scoped chat\nattachments by file type. Takes precedence over the tenant-level\nParserEngineConfig.ChatParserEngineRules; an explicit per-request\nparser_engine still overrides both.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule" } }, "citation_enabled": { "description": "Whether final answers include knowledge/web source citations. Nil defaults to true\nso agents saved before this option was introduced keep their existing behavior.", "type": "boolean" }, "context_template": { "description": "Context template for normal mode (how to format retrieved chunks)", "type": "string" }, "context_template_id": { "description": "ContextTemplateID references a template ID in prompt_templates/ YAML files.\nIf set and ContextTemplate is empty, the template content is resolved at request time for saved agents.", "type": "string" }, "data_analysis_enabled": { "description": "===== Data Analysis Settings =====\nWhether to run the legacy in-pipeline DuckDB SQL data-analysis stage when\nthe retrieved chunks include CSV/Excel files. This issues an extra LLM\ncall to generate a SQL query and is disabled by default because most\nquick-answer / RAG-style agents do not want the added latency.", "type": "boolean" }, "embedding_top_k": { "description": "===== Retrieval Strategy Settings (for both modes) =====\nEmbedding/Vector retrieval top K", "type": "integer" }, "enable_query_expansion": { "description": "===== Advanced Settings (mainly for normal mode) =====\nWhether to enable query expansion", "type": "boolean" }, "enable_rewrite": { "description": "Whether to enable query rewrite for multi-turn conversations", "type": "boolean" }, "fallback_prompt": { "description": "Fallback prompt (when FallbackStrategy is \"model\")", "type": "string" }, "fallback_response": { "description": "Fixed fallback response (when FallbackStrategy is \"fixed\")", "type": "string" }, "fallback_strategy": { "description": "Fallback strategy: \"fixed\" for fixed response, \"model\" for model generation", "type": "string" }, "faq_direct_answer_threshold": { "description": "FAQ direct answer threshold - if similarity \u003e this value, use FAQ answer directly", "type": "number" }, "faq_priority_enabled": { "description": "===== FAQ Strategy Settings =====\nWhether FAQ priority strategy is enabled (FAQ answers prioritized over document chunks)", "type": "boolean" }, "faq_score_boost": { "description": "FAQ score boost multiplier - FAQ results score multiplied by this factor", "type": "number" }, "history_turns": { "description": "Number of history turns to keep in context. Quick-answer only; smart-reasoning sizes history by context window", "type": "integer" }, "image_storage_provider": { "description": "Storage provider for image uploads: \"local\", \"minio\", \"cos\", \"tos\", \"s3\", \"oss\", \"ks3\".\nEmpty means use the global/workspace default provider.", "type": "string" }, "image_upload_enabled": { "description": "===== Image Upload / Multimodal Settings =====\nWhether image upload is enabled for this agent (default: false)", "type": "boolean" }, "intent_prompts": { "description": "IntentPrompts holds per-intent system prompt overrides for non-retrieval\nintents (greeting, chitchat, etc.). Empty values fall back to templates\nunder config/prompt_templates/intent_prompts.yaml.", "type": "object", "additionalProperties": { "type": "string" } }, "kb_selection_mode": { "description": "===== Knowledge Base Settings =====\nKnowledge base selection mode: \"all\" = all KBs, \"selected\" = specific KBs, \"none\" = no KB", "type": "string", "x-agent": true }, "keyword_threshold": { "description": "Keyword retrieval threshold", "type": "number" }, "knowledge_bases": { "description": "Associated knowledge base IDs (only used when KBSelectionMode is \"selected\")", "type": "array", "items": { "type": "string" }, "x-agent": "knowledge_base_ids" }, "llm_call_timeout": { "description": "Timeout for a single LLM call in seconds (0 = use global default)", "type": "integer" }, "max_completion_tokens": { "description": "Maximum completion tokens. Quick-answer uses this for the RAG answer.\nSmart-reasoning ReAct rounds send this value as-is (zero becomes\nDefaultMaxCompletionTokens at call time: 4096, or 24576 with a sandbox).", "type": "integer" }, "max_iterations": { "description": "===== Agent Mode Settings =====\nMaximum iterations for the ReAct loop. Zero is unset (filled with a\ndefault). A negative value is unlimited: the loop runs until the model\nstops, the user cancels, or another guard fires.", "type": "integer" }, "mcp_auth_wait_timeout": { "description": "MCPAuthWaitTimeout is how many seconds to wait for in-conversation OAuth\nauthorization before skipping. \u003c=0 uses the gate's configured timeout.", "type": "integer" }, "mcp_selection_mode": { "description": "MCP service selection mode: \"all\" = all enabled MCP services, \"selected\" = specific services, \"none\" = no MCP", "type": "string", "x-agent": true, "x-agent-detail": true }, "mcp_services": { "description": "Selected MCP service IDs (only used when MCPSelectionMode is \"selected\")", "type": "array", "items": { "type": "string" }, "x-agent": "mcp_service_ids", "x-agent-detail": true }, "memory_enabled": { "description": "Whether this agent may read the user's long-term memory. Nil inherits\nthe workspace setting; false opts a single agent out of memory even when\nthe workspace has it on. There is no \"on\" that overrides the workspace.", "type": "boolean" }, "model_id": { "description": "===== Model Settings =====\nModel ID to use for conversations", "type": "string", "x-agent": true }, "multi_turn_enabled": { "description": "===== Multi-turn Conversation Settings =====\nWhether multi-turn conversation is enabled", "type": "boolean", "x-agent": true, "x-agent-detail": true }, "query_understand_model_id": { "description": "Dedicated chat model ID for the query-understanding (rewrite + intent) step.\nWhen empty, the main conversation ModelID is used as a fallback.", "type": "string" }, "question_suggestions": { "description": "===== Conversation Question Suggestions =====\nQuestionSuggestions owns both the static/knowledge-backed prompts shown\nbefore the first user turn and the contextual follow-up questions shown\nafter a completed assistant answer.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionSuggestionConfig" } ] }, "reasoning_effort": { "description": "ReasoningEffort selects the thinking intensity (off | auto | minimal |\nlow | medium | high | xhigh | max). Empty keeps the boolean Thinking\nsemantics: true means \"auto\". See internal/models/api.ReasoningEffort.", "type": "string" }, "rerank_model_id": { "description": "ReRank model ID for retrieval", "type": "string" }, "rerank_threshold": { "description": "Rerank threshold", "type": "number" }, "rerank_top_k": { "description": "Rerank top K", "type": "integer" }, "retain_retrieval_history": { "description": "Whether to retain retrieval history across turns", "type": "boolean" }, "retrieve_kb_only_when_mentioned": { "description": "Whether to retrieve knowledge base only when explicitly mentioned with @ (default: false)\nWhen true, knowledge base retrieval only happens if user explicitly mentions KB/files with @\nWhen false, knowledge base retrieval happens according to KBSelectionMode", "type": "boolean" }, "rewrite_prompt_system": { "description": "Rewrite prompt system message", "type": "string" }, "rewrite_prompt_user": { "description": "Rewrite prompt user message template", "type": "string" }, "sandbox_config_id": { "description": "===== Sandbox Settings =====\nSandboxConfigID selects which workspace sandbox config this agent's\nskill scripts run on. Empty means sandbox execution is disabled.\n\nThis references the LOGICAL config, never a specific revision: keeping\nthe indirection here is what would let credential rotation happen\nwithout re-pointing every agent (see the spec's §4.8).", "type": "string", "x-agent": true, "x-agent-detail": true }, "selected_skills": { "description": "Selected skill names (only used when SkillsSelectionMode is \"selected\")", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-detail": true }, "skills_selection_mode": { "description": "===== Skills Settings (only for smart-reasoning mode) =====\nSkills selection mode: \"all\" = all installed skills, \"selected\" = specific skills, \"none\" = no skills", "type": "string", "x-agent": true, "x-agent-detail": true }, "supported_file_types": { "description": "===== File Type Restriction Settings =====\nSupported file types for this agent (e.g., [\"csv\", \"xlsx\", \"xls\"])\nEmpty means all file types are supported\nWhen set, only files with matching extensions can be used with this agent", "type": "array", "items": { "type": "string" } }, "system_prompt": { "description": "System prompt for the agent (unified prompt, uses web_search_status placeholder for dynamic behavior)", "type": "string", "x-agent": true, "x-agent-detail": true, "x-agent-max-runes": "8000" }, "system_prompt_id": { "description": "SystemPromptID references a template ID in prompt_templates/ YAML files.\nIf set and SystemPrompt is empty, the template content is resolved at request time for saved agents.", "type": "string" }, "temperature": { "description": "Temperature for LLM (0-1)", "type": "number" }, "thinking": { "description": "Whether to enable thinking mode (for models that support extended thinking)", "type": "boolean" }, "vector_threshold": { "description": "Vector retrieval threshold", "type": "number" }, "vlm_model_id": { "description": "VLM model ID for image analysis (optional, falls back to workspace-level VLM)", "type": "string" }, "web_fetch_enabled": { "description": "Whether to auto-fetch full page content for reranked web search results", "type": "boolean" }, "web_fetch_top_n": { "description": "Max number of pages to fetch after rerank (default: 3)", "type": "integer" }, "web_search_enabled": { "description": "===== Web Search Settings =====\nWhether web search is enabled", "type": "boolean", "x-agent": true, "x-agent-detail": true }, "web_search_max_results": { "description": "Maximum web search results", "type": "integer" }, "web_search_provider_id": { "description": "WebSearchProviderID references a specific WebSearchProviderEntity.\nIf empty, the workspace's default provider (is_default=true) is used.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.DataSource": { "type": "object", "properties": { "config": { "description": "Encrypted configuration (API credentials, tokens, etc.)\nStored as JSON with AES-256-GCM encryption", "type": "object" }, "conflict_strategy": { "description": "Conflict resolution strategy: overwrite or skip", "type": "string" }, "created_at": { "description": "Creation timestamp", "type": "string" }, "deleted_at": { "description": "Soft delete timestamp", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "error_message": { "description": "Error message if status is \"error\"", "type": "string" }, "id": { "description": "Unique identifier", "type": "string" }, "knowledge_base_id": { "description": "Target knowledge base ID", "type": "string" }, "last_sync_at": { "description": "Last successful sync timestamp", "type": "string" }, "last_sync_cursor": { "description": "Cursor or state for incremental sync (connector-specific)", "type": "object" }, "last_sync_result": { "description": "Summary of last sync result", "type": "object" }, "latest_sync_log": { "description": "Latest sync log (not stored in DB, populated on query)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SyncLog" } ] }, "name": { "description": "User-friendly name", "type": "string" }, "status": { "description": "Current status: active, paused, error", "type": "string" }, "sync_deletions": { "description": "Whether to sync deletions from source", "type": "boolean" }, "sync_log_retention_days": { "description": "Number of days to keep sync logs (default: 30)", "type": "integer" }, "sync_mode": { "description": "Sync mode: \"incremental\" (recommended) or \"full\"", "type": "string" }, "sync_schedule": { "description": "Cron expression for scheduled syncs (e.g., \"0 */6 * * *\" = every 6 hours)", "type": "string" }, "tenant_id": { "description": "Workspace ID for multi-workspace isolation", "type": "integer" }, "total_items_synced": { "description": "Total items synced (not stored in DB, calculated on query)", "type": "integer" }, "type": { "description": "Connector type (feishu, notion, confluence, etc.)", "type": "string" }, "updated_at": { "description": "Last update timestamp", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.DockerSandboxConfig": { "type": "object", "properties": { "cpu_limit": { "description": "CPULimit is the number of CPU cores one sandbox may use. 0 uses the\nbuilt-in default.", "type": "number" }, "host": { "description": "Host is the daemon endpoint in DOCKER_HOST form. Empty means the local\nunix socket.", "type": "string" }, "http_timeout_sec": { "description": "HTTPTimeoutSec bounds each Engine API call. 0 uses the built-in default.", "type": "integer" }, "idle_ttl_seconds": { "description": "IdleTTLSeconds is how long a session container may go unused before it\nis reclaimed. The daemon has no idle timeout of its own, so this is what\nstops an abandoned session from pinning host memory indefinitely.", "type": "integer" }, "image": { "type": "string" }, "memory_limit_mb": { "description": "MemoryLimitMB caps one sandbox's memory. 0 uses the built-in default.", "type": "integer" }, "network_mode": { "description": "NetworkMode is the Docker network sandboxes join: \"bridge\" (default) or\n\"none\" for no egress. Nothing else is accepted — host and container:\nmodes share another namespace outright, and a named network is usually\nthe deployment's own compose network, which would put the sandbox next\nto Postgres and Redis.", "type": "string" }, "pids_limit": { "description": "PidsLimit caps how many processes one sandbox may run. 0 uses the\nbuilt-in default.", "type": "integer" }, "runtime": { "description": "Runtime selects an alternative OCI runtime such as \"runsc\" (gVisor).\nEmpty uses the daemon default.", "type": "string" }, "tls_cert_path": { "description": "TLSCertPath is a directory on the WeKnora host containing ca.pem,\ncert.pem and key.pem. Required when Host is a TCP endpoint.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.E2BHostRule": { "type": "object", "properties": { "headers": { "description": "Headers values are credentials and are encrypted at rest; names stay\nreadable so operators can see which headers are injected.", "type": "object", "additionalProperties": { "type": "string" } }, "host": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.E2BSandboxConfig": { "type": "object", "properties": { "api_key": { "description": "加密", "type": "string" }, "api_url": { "type": "string" }, "e2b_sandbox_ttl_seconds": { "type": "integer" }, "http_timeout_sec": { "description": "HTTPTimeoutSec bounds each HTTP call to the sandbox control plane.\n0 means use the built-in default (30s), never the deployment's value.", "type": "integer" }, "proxy_url": { "description": "ProxyURL is the data-plane gateway that fronts envd. E2B Cloud resolves\n\"\u003cport\u003e-\u003csandboxID\u003e.\u003csandbox_domain\u003e\" through public DNS and TLS, so it\nneeds no value here. Self-hosted E2B-compatible control planes usually\nserve every sandbox from one gateway address and expect the sandbox\nauthority in the Host header; setting this makes WeKnora dial the\ngateway directly instead of requiring wildcard DNS and a certificate\nfor the sandbox domain. An \"http://\" gateway also downgrades the\ndata-plane scheme, which the E2B SDK otherwise pins to https.", "type": "string" }, "sandbox_domain": { "type": "string" }, "template_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.EmbeddingParameters": { "type": "object", "properties": { "dimension": { "type": "integer" }, "supports_dimension_override": { "type": "boolean" }, "truncate_prompt_tokens": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.EvaluationDetail": { "type": "object", "properties": { "metric": { "description": "Evaluation metrics", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MetricResult" } ] }, "params": { "description": "Evaluation parameters", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChatManage" } ] }, "task": { "description": "Evaluation task info", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.EvaluationTask" } ] } } }, "github_com_Tencent_WeKnora_internal_types.EvaluationStatue": { "type": "integer", "enum": [ 0, 1, 2, 3 ], "x-enum-comments": { "EvaluationStatueFailed": "Task failed", "EvaluationStatuePending": "Task is waiting to start", "EvaluationStatueRunning": "Task is in progress", "EvaluationStatueSuccess": "Task completed successfully" }, "x-enum-descriptions": [ "Task is waiting to start", "Task is in progress", "Task completed successfully", "Task failed" ], "x-enum-varnames": [ "EvaluationStatuePending", "EvaluationStatueRunning", "EvaluationStatueSuccess", "EvaluationStatueFailed" ] }, "github_com_Tencent_WeKnora_internal_types.EvaluationTask": { "type": "object", "properties": { "dataset_id": { "description": "Dataset ID for evaluation", "type": "string" }, "err_msg": { "description": "Error message if failed", "type": "string" }, "finished": { "description": "Completed items count", "type": "integer" }, "id": { "description": "Unique task ID", "type": "string" }, "start_time": { "description": "Task start time", "type": "string" }, "status": { "description": "Current task status", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.EvaluationStatue" } ] }, "tenant_id": { "description": "Tenant/Organization ID", "type": "integer" }, "total": { "description": "Total items to evaluate", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.ExtractConfig": { "type": "object", "properties": { "custom_instructions": { "description": "CustomInstructions adds domain guidance. The graph output format stays fixed.", "type": "string", "x-agent": "extract_instructions", "x-agent-detail": true, "x-agent-max-bytes": "4000" }, "enabled": { "description": "Enabled turns graph extraction on. Node and relation types are edited in the knowledge base editor.", "type": "boolean", "x-agent": "extract_enabled" }, "nodes": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.GraphNode" } }, "relations": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.GraphRelation" } }, "tags": { "description": "Tags are the entity labels extraction may use.", "type": "array", "items": { "type": "string" }, "x-agent": "extract_tags", "x-agent-maximum": "50" }, "text": { "description": "Text is the extraction prompt. Required when extraction is on and no text is saved yet.", "type": "string", "x-agent": "extract_text", "x-agent-detail": true, "x-agent-max-bytes": "8000" } } }, "github_com_Tencent_WeKnora_internal_types.FAQBatchUpsertPayload": { "type": "object", "required": [ "entries" ], "properties": { "dry_run": { "description": "仅验证,不实际导入", "type": "boolean" }, "entries": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryPayload" } }, "knowledge_id": { "type": "string" }, "mode": { "type": "string", "enum": [ "append", "replace" ] }, "task_id": { "description": "可选,如果不传则自动生成UUID", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.FAQConfig": { "type": "object", "properties": { "index_mode": { "description": "IndexMode is question_only or question_answer.", "enum": [ "question_only", "question_answer" ], "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQIndexMode" } ], "x-agent": "faq_index_mode" }, "question_index_mode": { "description": "QuestionIndexMode is combined or separate.", "enum": [ "combined", "separate" ], "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQQuestionIndexMode" } ], "x-agent": "faq_question_index_mode" } } }, "github_com_Tencent_WeKnora_internal_types.FAQEntry": { "type": "object", "properties": { "answer_strategy": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AnswerStrategy" } ], "x-agent": true }, "answers": { "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-max-runes": "8000" }, "chunk_id": { "type": "string" }, "chunk_type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkType" }, "created_at": { "type": "string" }, "id": { "type": "integer", "x-agent": "entry_id" }, "index_mode": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQIndexMode" }, "is_enabled": { "type": "boolean", "x-agent": true }, "is_recommended": { "type": "boolean", "x-agent": true }, "knowledge_base_id": { "type": "string" }, "knowledge_id": { "type": "string" }, "match_type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MatchType" }, "matched_question": { "description": "MatchedQuestion is the actual question text that was matched in FAQ search\nCould be the standard question or one of the similar questions", "type": "string" }, "negative_questions": { "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-max-runes": "8000" }, "score": { "type": "number" }, "similar_questions": { "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-max-runes": "8000" }, "standard_question": { "type": "string", "x-agent": true, "x-agent-max-runes": "8000" }, "tag_id": { "type": "integer", "x-agent": "tag_seq_id" }, "tag_name": { "type": "string", "x-agent": true }, "updated_at": { "type": "string", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsBatchUpdate": { "type": "object", "properties": { "by_id": { "description": "ByID 按条目ID更新,key为条目ID (seq_id)", "type": "object", "additionalProperties": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsUpdate" } }, "by_tag": { "description": "ByTag 按Tag批量更新,key为TagID (seq_id)", "type": "object", "additionalProperties": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsUpdate" } }, "exclude_ids": { "description": "ExcludeIDs 在ByTag操作中需要排除的ID列表 (seq_id)", "type": "array", "items": { "type": "integer" } } } }, "github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsUpdate": { "type": "object", "properties": { "is_enabled": { "type": "boolean" }, "is_recommended": { "type": "boolean" }, "tag_id": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.FAQEntryPayload": { "type": "object", "required": [ "standard_question" ], "properties": { "answer_strategy": { "description": "all returns every answer; random returns one.", "enum": [ "all", "random" ], "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AnswerStrategy" } ], "x-agent": true, "x-agent-required": true }, "answers": { "description": "Answers; one is picked by answer_strategy.", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-max-bytes": "32000", "x-agent-required": true }, "id": { "description": "ID 可选,用于数据迁移时指定 seq_id(必须小于自增起始值 100000000)", "type": "integer" }, "is_enabled": { "description": "Whether the entry is served; omit to keep the current or default value.", "type": "boolean", "x-agent": true }, "is_recommended": { "description": "Whether the entry is recommended; omit to keep the current or default value.", "type": "boolean", "x-agent": true }, "negative_questions": { "description": "Phrasings that must not match; [] for none.", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-max-bytes": "32000", "x-agent-required": true }, "similar_questions": { "description": "Other phrasings that should match; [] for none.", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-max-bytes": "32000", "x-agent-required": true }, "standard_question": { "description": "The question the entry answers.", "type": "string", "x-agent": true, "x-agent-max-bytes": "32000" }, "tag_id": { "description": "Tag seq id (tag_seq_id from knowledge_base.list_tags); 0 for none.", "type": "integer", "x-agent": "tag_seq_id", "x-agent-required": true }, "tag_name": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.FAQFailedEntry": { "type": "object", "properties": { "answer_all": { "description": "是否全部回复", "type": "boolean" }, "answers": { "description": "答案", "type": "array", "items": { "type": "string" } }, "failure_type": { "description": "失败类型:pre_validation / post_validation", "type": "string" }, "index": { "description": "条目在批次中的索引(从0开始)", "type": "integer" }, "is_disabled": { "description": "是否停用", "type": "boolean" }, "is_partial_failure": { "description": "是否为部分失败(相似问/反例被移除,但整条仍可导入)", "type": "boolean" }, "negative_questions": { "description": "反例问题", "type": "array", "items": { "type": "string" } }, "reason": { "description": "失败原因", "type": "string" }, "removed_negative_questions": { "description": "被移除的反例及原因", "type": "array", "items": { "type": "string" } }, "removed_similar_questions": { "description": "部分失败详情(当 IsPartialFailure 为 true 时)", "type": "array", "items": { "type": "string" } }, "similar_questions": { "description": "相似问题", "type": "array", "items": { "type": "string" } }, "standard_question": { "description": "标准问题", "type": "string" }, "tag_name": { "description": "分类", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.FAQImportProgress": { "type": "object", "properties": { "added_count": { "description": "新增的条目数", "type": "integer" }, "created_at": { "description": "Task creation timestamp", "type": "integer" }, "display_status": { "description": "显示状态:open 或 close", "type": "string" }, "dry_run": { "description": "是否为 dry run 模式", "type": "boolean" }, "error": { "description": "Error message if failed", "type": "string" }, "failed_count": { "description": "失败的条目数", "type": "integer" }, "failed_entries": { "description": "失败条目详情(少量时直接返回)", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQFailedEntry" } }, "failed_entries_url": { "description": "失败条目CSV下载URL(大量时返回URL)", "type": "string" }, "import_mode": { "description": "Result fields (populated when Status == \"completed\")", "type": "string" }, "imported_at": { "description": "导入完成时间", "type": "string" }, "kb_id": { "description": "Knowledge Base ID", "type": "string" }, "knowledge_id": { "description": "FAQ Knowledge ID", "type": "string" }, "merge_details": { "description": "合并详情", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQMergeDetail" } }, "merge_entry_indices": { "description": "需要合并的条目索引(内部使用,用于重试时跳过识别)", "type": "array", "items": { "type": "integer" } }, "merged_count": { "description": "合并更新的条目数", "type": "integer" }, "message": { "description": "Status message", "type": "string" }, "partial_failed_count": { "description": "部分失败的条目数(相似问/反例被移除)", "type": "integer" }, "processed": { "description": "Entries processed so far", "type": "integer" }, "processing_time": { "description": "处理耗时(毫秒)", "type": "integer" }, "progress": { "description": "0-100 percentage", "type": "integer" }, "skipped_count": { "description": "跳过的条目数(如重复等)", "type": "integer" }, "status": { "description": "Task status", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQImportTaskStatus" } ] }, "success_count": { "description": "完全成功的条目数(不包含部分成功/部分失败)", "type": "integer" }, "success_entries": { "description": "成功条目简单信息(少量时直接返回)", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQSuccessEntry" } }, "task_id": { "description": "UUID for the import task", "type": "string" }, "total": { "description": "Total entries to import", "type": "integer" }, "updated_at": { "description": "Last update timestamp", "type": "integer" }, "valid_entry_indices": { "description": "验证通过的条目索引(用于重试时跳过验证)", "type": "array", "items": { "type": "integer" } } } }, "github_com_Tencent_WeKnora_internal_types.FAQImportTaskStatus": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ], "x-enum-varnames": [ "FAQImportStatusPending", "FAQImportStatusProcessing", "FAQImportStatusCompleted", "FAQImportStatusFailed" ] }, "github_com_Tencent_WeKnora_internal_types.FAQIndexMode": { "type": "string", "enum": [ "question_only", "question_answer" ], "x-enum-varnames": [ "FAQIndexModeQuestionOnly", "FAQIndexModeQuestionAnswer" ] }, "github_com_Tencent_WeKnora_internal_types.FAQMergeDetail": { "type": "object", "properties": { "answer_changed": { "description": "答案是否变更", "type": "boolean" }, "index": { "description": "行号(在批次中的索引)", "type": "integer" }, "new_negative_count": { "description": "新增反例数量", "type": "integer" }, "new_similar_count": { "description": "新增相似问数量", "type": "integer" }, "standard_question": { "description": "标准问", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.FAQQuestionIndexMode": { "type": "string", "enum": [ "combined", "separate" ], "x-enum-varnames": [ "FAQQuestionIndexModeCombined", "FAQQuestionIndexModeSeparate" ] }, "github_com_Tencent_WeKnora_internal_types.FAQSearchRequest": { "type": "object", "required": [ "query_text" ], "properties": { "first_priority_tag_ids": { "description": "第一优先级标签ID列表,限定命中范围,优先级最高", "type": "array", "items": { "type": "integer" } }, "match_count": { "type": "integer" }, "only_recommended": { "description": "是否仅返回推荐的条目", "type": "boolean" }, "query_text": { "type": "string" }, "second_priority_tag_ids": { "description": "第二优先级标签ID列表,限定命中范围,优先级低于第一优先级", "type": "array", "items": { "type": "integer" } }, "vector_threshold": { "type": "number" } } }, "github_com_Tencent_WeKnora_internal_types.FAQSuccessEntry": { "type": "object", "properties": { "index": { "description": "条目在批次中的索引(从0开始)", "type": "integer" }, "seq_id": { "description": "导入后的条目序列ID", "type": "integer" }, "standard_question": { "description": "标准问题", "type": "string" }, "tag_id": { "description": "分类ID(seq_id)", "type": "integer" }, "tag_name": { "description": "分类名称", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.FallbackStrategy": { "type": "string", "enum": [ "fixed", "model" ], "x-enum-comments": { "FallbackStrategyFixed": "Fixed response", "FallbackStrategyModel": "Model fallback response" }, "x-enum-descriptions": [ "Fixed response", "Model fallback response" ], "x-enum-varnames": [ "FallbackStrategyFixed", "FallbackStrategyModel" ] }, "github_com_Tencent_WeKnora_internal_types.FollowUpSuggestionConfig": { "type": "object", "properties": { "additional_instruction": { "type": "string" }, "allow_regenerate": { "type": "boolean" }, "categories": { "type": "array", "items": { "type": "string" } }, "count": { "type": "integer" }, "enabled": { "type": "boolean" }, "knowledge_fallback": { "type": "boolean" }, "max_context_turns": { "type": "integer" }, "mode": { "type": "string" }, "model_id": { "type": "string" }, "suppress_on_fallback": { "type": "boolean" }, "suppress_when_answer_asks_question": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.GalleryUserPrefs": { "type": "object", "properties": { "mode": { "description": "Mode is \"all\" (every search-eligible field active) or \"custom\"\n(per-field Status governs). Empty = \"all\".", "type": "string" }, "status": { "description": "Status maps a namespaced attribute id (\"builtin:caption\") to\n\"on\"/\"off\". Only consulted in custom mode; an unrecorded field is\noff. Source-declared on/off does not exist — activation is always\nthe user's own record.", "type": "object", "additionalProperties": { "type": "string" } } } }, "github_com_Tencent_WeKnora_internal_types.GenerationMetrics": { "type": "object", "properties": { "bleu1": { "description": "BLEU-1 score", "type": "number" }, "bleu2": { "description": "BLEU-2 score", "type": "number" }, "bleu4": { "description": "BLEU-4 score", "type": "number" }, "rouge1": { "description": "ROUGE-1 score", "type": "number" }, "rouge2": { "description": "ROUGE-2 score", "type": "number" }, "rougel": { "description": "ROUGE-L score", "type": "number" } } }, "github_com_Tencent_WeKnora_internal_types.GraphNode": { "type": "object", "properties": { "attributes": { "type": "array", "items": { "type": "string" } }, "chunks": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.GraphRelation": { "type": "object", "properties": { "node1": { "type": "string" }, "node2": { "type": "string" }, "type": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.History": { "type": "object", "properties": { "answer": { "description": "System response text", "type": "string" }, "createAt": { "description": "When this history entry was created", "type": "string" }, "knowledgeReferences": { "description": "Knowledge references used in the answer", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SearchResult" } }, "query": { "description": "User query text", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ImageActionsConfig": { "type": "object", "properties": { "ocr": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageOCRAction" } } }, "github_com_Tencent_WeKnora_internal_types.ImageAsset": { "type": "object", "properties": { "attrs": { "description": "Attrs is the observed attribute map (e.g. contain.text, contain.data_visual)\nproduced by the attribute pipeline. Absent keys mean \"not observed\".", "type": "object", "additionalProperties": {} }, "caption": { "description": "Caption is the model-generated image description.", "type": "string" }, "chunk_id": { "description": "ChunkID is the owning chunk (text chunk for embedded images, or the\nimage_ocr / image_caption chunk for dedicated image assets).", "type": "string" }, "chunk_type": { "description": "ChunkType is the owning chunk's type; empty for images discovered on a\ntext (document) chunk. Helps the UI label the source.", "type": "string" }, "created_at": { "description": "CreatedAt is the owning chunk's creation time.", "type": "string" }, "id": { "description": "ID is stable and unique within a KB: \"\u003cchunkID\u003e#\u003cindex-in-array\u003e\".", "type": "string" }, "is_enabled": { "description": "IsEnabled mirrors the owning chunk's enabled flag.", "type": "boolean" }, "knowledge_id": { "description": "KnowledgeID is the document/knowledge item the image belongs to.", "type": "string" }, "ocr_text": { "description": "OCRText is the extracted text from the image, if any.", "type": "string" }, "original_url": { "description": "OriginalURL is the pre-transform source reference, when different.", "type": "string" }, "source_name": { "description": "SourceName is the human-readable name of the source knowledge item\n(document), resolved from KnowledgeID. Empty when the item no longer\nexists (e.g. deleted), in which case KnowledgeID is still shown.", "type": "string" }, "status": { "description": "Status mirrors the owning chunk's index status.", "type": "integer" }, "updated_at": { "description": "UpdatedAt is the owning chunk's last update time.", "type": "string" }, "url": { "description": "URL is the rendered image URL (COS / storage provider).", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ImageAttrCondition": { "type": "object", "properties": { "is": { "type": "string" }, "prop": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ImageOCRAction": { "type": "object", "properties": { "on": { "description": "On is the list of attribute conditions that enable OCR. Matching any one\nturns OCR on.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageAttrCondition" } }, "on_unobserved": { "description": "OnUnobserved is the OCR decision used when the observation does not\nanswer for one of the attributes the policy reads — the attribute is\nabsent because the model skipped the line, or because the value it wrote\nwas not one of the allowed ones. The default is true: an incomplete\nobservation keeps extracting, so a missed block of text costs one extra\ncall instead of being lost. Turn it off only with a model reliable enough\nto answer every attribute line.", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.ImageProcessingConfig": { "type": "object", "properties": { "image_actions": { "description": "ImageActions overrides the built-in attribute→work table (see\nDefaultImageActions). A nil value keeps the conservative default: run OCR\nfor block text, data visuals, and unobserved images.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageActionsConfig" } ] }, "image_attrs_enabled": { "description": "ImageAttrsEnabled turns the attribute-observed image pipeline on for this\nknowledge base. It is off by default on purpose, so upgrading an\nexisting deployment never changes what happens to documents already\nbeing ingested: with it off every image is described and OCR'd exactly\nas before. When on, the describe round also observes image attributes and\nthe attribute policy decides whether OCR runs for it. A single upload can\noverride it per document through\nKnowledgeProcessOverrides.ImageAttrsEnabled.", "type": "boolean", "x-agent": true }, "image_vector_enabled": { "description": "ImageVectorEnabled lets a knowledge base whose embedding model takes\nimages index each image by its own vector and recall it with one. It\nis off by default on purpose: a model that takes images is also used\nfor plain text, and turning this on costs an embedding call per image\nand widens vector recall. Existing knowledge bases stay off after an\nupgrade because the stored JSON has no such key.", "type": "boolean", "x-agent": true }, "model_id": { "description": "Model ID used when describing images. Empty uses the knowledge base's caption model.", "type": "string", "x-agent": "image_model_id" } } }, "github_com_Tencent_WeKnora_internal_types.IndexConfig": { "type": "object", "properties": { "buckets_num": { "description": "Doris: number of buckets per table (DISTRIBUTED BY HASH ... BUCKETS N)", "type": "integer" }, "collection_name": { "description": "Milvus", "type": "string" }, "collection_prefix": { "description": "Qdrant, Weaviate", "type": "string" }, "desired_shard_count": { "description": "Weaviate: number of shards per collection", "type": "integer" }, "hnsw_ef_construction": { "description": "OpenSearch: HNSW index-build candidate list size", "type": "integer" }, "hnsw_ef_search": { "description": "OpenSearch: HNSW search candidate list size (faiss; lucene reads at query time)", "type": "integer" }, "hnsw_m": { "description": "--- OpenSearch k-NN HNSW fields ---\nAll omitempty so other engines' serialized IndexConfig is unchanged.\nZero / empty values fall back to the driver defaults in buildInternalCfg.", "type": "integer" }, "index_name": { "description": "--- Existing fields ---", "type": "string" }, "knn_engine": { "description": "OpenSearch: k-NN backend (\"lucene\" | \"faiss\")", "type": "string" }, "number_of_replicas": { "description": "ES, OpenSearch", "type": "integer" }, "number_of_shards": { "description": "ES, OpenSearch", "type": "integer" }, "replica_number": { "description": "Milvus LoadCollection / Tencent VectorDB CreateCollection replicas", "type": "integer" }, "replication_factor": { "description": "Qdrant, Weaviate: number of replicas", "type": "integer" }, "replication_num": { "description": "Doris: replication_num PROPERTIES", "type": "integer" }, "shard_number": { "description": "--- Scalability fields ---", "type": "integer" }, "shards_num": { "description": "Milvus: number of shards per collection (CreateCollection)", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.IndexingStrategy": { "type": "object", "properties": { "graph_enabled": { "description": "GraphEnabled enables knowledge graph entity/relation extraction", "type": "boolean", "x-agent": true }, "keyword_enabled": { "description": "KeywordEnabled enables keyword-based (BM25) search", "type": "boolean", "x-agent": true }, "vector_enabled": { "description": "VectorEnabled enables semantic vector embedding and search", "type": "boolean", "x-agent": true }, "wiki_enabled": { "description": "WikiEnabled enables automatic wiki page generation from documents", "type": "boolean", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.InviteMemberRequest": { "type": "object", "required": [ "role" ], "properties": { "representative_user_id": { "description": "RepresentativeUserID is accepted for compatibility and ignored: a\ndirect add attaches no user of the enrolled workspace, since the\ninviter must not choose whose details the roster shows.", "type": "string" }, "role": { "description": "Role to assign: admin/editor/viewer", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ] }, "tenant_id": { "description": "TenantID is the workspace to enrol as an org member. Preferred field.", "type": "integer" }, "user_id": { "description": "UserID is retained for backward compatibility. When set without\nTenantID, the handler resolves the user's TenantID.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.JSONMap": { "type": "object", "additionalProperties": {} }, "github_com_Tencent_WeKnora_internal_types.JoinByOrganizationIDRequest": { "type": "object", "required": [ "organization_id" ], "properties": { "message": { "description": "Optional message for join request", "type": "string", "maxLength": 500 }, "organization_id": { "type": "string" }, "role": { "description": "Optional: requested role (admin/editor/viewer); default viewer", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ] } } }, "github_com_Tencent_WeKnora_internal_types.JoinOrganizationRequest": { "type": "object", "required": [ "invite_code" ], "properties": { "invite_code": { "type": "string", "maxLength": 32, "minLength": 8 } } }, "github_com_Tencent_WeKnora_internal_types.JoinRequestResponse": { "type": "object", "properties": { "created_at": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "message": { "type": "string" }, "prev_role": { "description": "Previous role (only for upgrade requests)", "type": "string" }, "request_type": { "description": "'join' or 'upgrade'", "type": "string" }, "requested_role": { "description": "Role the applicant requested (admin/editor/viewer)", "type": "string" }, "reviewed_at": { "type": "string" }, "status": { "type": "string" }, "user_id": { "type": "string" }, "username": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.JoinRequestStatus": { "type": "string", "enum": [ "pending", "approved", "rejected" ], "x-enum-varnames": [ "JoinRequestStatusPending", "JoinRequestStatusApproved", "JoinRequestStatusRejected" ] }, "github_com_Tencent_WeKnora_internal_types.JoinRequestType": { "type": "string", "enum": [ "join", "upgrade" ], "x-enum-varnames": [ "JoinRequestTypeJoin", "JoinRequestTypeUpgrade" ] }, "github_com_Tencent_WeKnora_internal_types.KBCapabilities": { "type": "object", "properties": { "faq": { "description": "FAQ means the KB is a FAQ-type KB (Q/A pairs).", "type": "boolean" }, "graph": { "description": "Graph means knowledge-graph extraction is enabled.", "type": "boolean" }, "keyword": { "description": "Keyword means BM25 / sparse keyword search is indexed.", "type": "boolean" }, "vector": { "description": "Vector means semantic (embedding) search is indexed.", "type": "boolean" }, "wiki": { "description": "Wiki means the wiki feature is enabled and authored pages exist / will be generated.", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.KBCloneProgress": { "type": "object", "properties": { "created_at": { "description": "任务创建时间", "type": "integer" }, "error": { "description": "错误信息", "type": "string" }, "message": { "description": "状态消息", "type": "string" }, "processed": { "description": "已处理数", "type": "integer" }, "progress": { "description": "0-100", "type": "integer" }, "source_id": { "type": "string" }, "status": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KBCloneTaskStatus" }, "target_id": { "type": "string" }, "task_id": { "type": "string" }, "total": { "description": "总知识数", "type": "integer" }, "updated_at": { "description": "最后更新时间", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.KBCloneTaskStatus": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ], "x-enum-varnames": [ "KBCloneStatusPending", "KBCloneStatusProcessing", "KBCloneStatusCompleted", "KBCloneStatusFailed" ] }, "github_com_Tencent_WeKnora_internal_types.KS3EngineConfig": { "type": "object", "properties": { "access_key": { "type": "string" }, "bucket_name": { "type": "string" }, "endpoint": { "type": "string" }, "path_prefix": { "type": "string" }, "region": { "type": "string" }, "secret_key": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.Knowledge": { "type": "object", "properties": { "channel": { "description": "Channel indicates through which channel the knowledge was ingested (web, api, browser_extension, wechat, etc.)", "type": "string", "x-agent": true }, "created_at": { "description": "Creation time of the knowledge", "type": "string", "x-agent": true }, "custom_metadata": { "description": "CustomMetadata is user-authored descriptive metadata. It is deliberately\nseparate from Metadata, which contains internal ingestion state and IDs.", "type": "object" }, "deleted_at": { "description": "Deletion time of the knowledge", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "description": { "description": "Description of the knowledge", "type": "string" }, "embedding_model_id": { "description": "ID of the embedding model", "type": "string" }, "enable_status": { "description": "Enable status of the knowledge", "type": "string", "x-agent": true }, "error_message": { "description": "Error message of the knowledge", "type": "string", "x-agent": true }, "file_hash": { "description": "File hash of the knowledge", "type": "string" }, "file_name": { "description": "File name of the knowledge", "type": "string", "x-agent": true }, "file_path": { "description": "File path of the knowledge", "type": "string" }, "file_size": { "description": "File size of the knowledge", "type": "integer", "x-agent": true }, "file_type": { "description": "File type of the knowledge", "type": "string", "x-agent": true }, "folder_path": { "description": "FolderPath is the canonical relative directory this entry belongs to\ninside the knowledge base, e.g. \"docs/spec\" for a folder upload of\n\"docs/spec/design.md\". Empty means the knowledge base root. It is a\ndisplay/navigation concern only: it never affects where the file is\nphysically stored (see FilePath).", "type": "string", "x-agent": true }, "id": { "description": "Unique identifier of the knowledge", "type": "string", "x-agent": "knowledge_id" }, "knowledge_base_id": { "description": "ID of the knowledge base", "type": "string", "x-agent": true }, "knowledge_base_name": { "description": "Knowledge base name (not stored in database, populated on query)", "type": "string", "x-agent": true }, "last_activity_at": { "description": "Most recent processing progress (row or span write) for an in-flight\nrow, so clients can tell a slow stage from a stalled one. Not stored.", "type": "string", "x-agent": true }, "last_faq_import_result": { "description": "Last FAQ import result (for FAQ type knowledge only)", "type": "object" }, "metadata": { "description": "Metadata of the knowledge", "type": "object" }, "parse_status": { "description": "Parse status of the knowledge", "type": "string", "x-agent": true }, "pending_subtasks_count": { "description": "PendingSubtasksCount is the outstanding enrichment subtask count\n(summary + question + graph chunks). Only meaningful while\nParseStatus == \"finalizing\"; defaults to 0 in any terminal state.", "type": "integer" }, "processed_at": { "description": "Processed time of the knowledge", "type": "string", "x-agent": true }, "profile": { "description": "Profile is the structured companion of Description: a one-line gist,\ntopic keywords, a document type and one typical question. It is produced\nby the same model call as the summary and feeds the knowledge-base\nlevel description aggregation. nil when no summary has been generated.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeProfile" } ] }, "source": { "description": "Source of the knowledge (e.g. URL address for url type, \"manual\" for manual type)", "type": "string", "x-agent": true }, "stall_state": { "description": "Verdict on an in-flight row gone quiet: StallStateQueued (its work is\nstill queued, i.e. backlogged) or StallStateStalled (nothing left to\nrun it). Empty while it is progressing or the probe failed. Not stored.", "type": "string", "x-agent": true }, "storage_size": { "description": "Storage size of the knowledge", "type": "integer" }, "summary_status": { "description": "Summary status for async summary generation", "type": "string", "x-agent": true }, "tags": { "description": "Tags holds the tags associated with this knowledge (populated on query, not persisted directly).", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeTag" } }, "tenant_id": { "description": "Workspace ID", "type": "integer" }, "title": { "description": "Title of the knowledge", "type": "string", "x-agent": true }, "type": { "description": "Type of the knowledge", "type": "string", "x-agent": true }, "updated_at": { "description": "Last updated time of the knowledge", "type": "string", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeBase": { "type": "object", "required": [ "name" ], "properties": { "asr_config": { "description": "ASR config (Automatic Speech Recognition)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ASRConfig" } ], "x-agent": true, "x-agent-detail": true }, "auto_tag_config": { "description": "AutoTagConfig controls asynchronous association of existing tags after parsing.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AutoTagConfig" } ], "x-agent": true, "x-agent-detail": true }, "chunk_count": { "description": "Chunk count (not stored in database, calculated on query)", "type": "integer", "x-agent": true, "x-agent-response": true }, "chunking_config": { "description": "Chunking configuration", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkingConfig" } ], "x-agent": true, "x-agent-detail": true }, "created_at": { "description": "Creation time of the knowledge base", "type": "string" }, "creator_id": { "description": "CreatorID records the user ID of whoever originally created the KB.\nUsed by the workspace-level RBAC middleware to let Contributors edit\ntheir own KBs without granting them access to everyone else's.\nNullable for backward compatibility with rows created before the\nRBAC migration backfilled the column to the workspace Owner.", "type": "string" }, "creator_name": { "description": "CreatorName 是 CreatorID 对应用户的展示名(username / email 等),\n仅在列表场景由 handler 批量回填,不落库;为空表示创建者无法解析(用户已删除、\nCreatorID 为空的老数据等)。前端用它在卡片来源徽章上做 mine vs workspace 的二分。", "type": "string" }, "deleted_at": { "description": "Deletion time of the knowledge base", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "description": { "description": "Description of the knowledge base", "type": "string", "x-agent": true }, "embedding_model_id": { "description": "ID of the embedding model. model.list returns the ids. Cannot change after the knowledge base has documents.", "type": "string", "x-agent": "embedding_model_id" }, "extract_config": { "description": "Extract config", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ExtractConfig" } ], "x-agent": true, "x-agent-detail": true }, "faq_config": { "description": "FAQConfig stores FAQ specific configuration such as indexing strategy", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQConfig" } ], "x-agent": true, "x-agent-detail": true }, "generated_profile": { "description": "GeneratedProfile is the machine-generated description: a gist, merged\ntopics, typical questions and the aggregate snapshot they came from. It\nnever overwrites the user-authored Description; both are shown to agents.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfile" } ] }, "id": { "description": "Unique identifier of the knowledge base", "type": "string", "x-agent": "knowledge_base_id", "x-agent-response": true }, "image_processing_config": { "description": "Image processing configuration", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageProcessingConfig" } ], "x-agent": true, "x-agent-detail": true }, "indexing_strategy": { "description": "IndexingStrategy controls which indexing pipelines are active for this knowledge base.\nPipelines: vector search, keyword search, wiki generation, knowledge graph extraction.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.IndexingStrategy" } ], "x-agent": true, "x-agent-response": true }, "is_pinned": { "description": "IsPinned and PinnedAt are computed per-caller from user_kb_pins\n(see migration 000050). They used to be stored on the row itself,\nwhich made pinning a workspace-wide ordering decision gated behind\nthe kb-edit RBAC guard. The columns are still present in legacy\nschemas for rollback safety but are no longer read or written by\nthe application — both fields are tagged `gorm:\"-\"` so GORM\nignores them on every CRUD call and the list handler stamps them\nafter enriching with the caller's pin set.", "type": "boolean" }, "is_processing": { "description": "IsProcessing indicates if there is a processing import task (for FAQ type knowledge bases)", "type": "boolean", "x-agent": true, "x-agent-response": true }, "is_temporary": { "description": "Whether this knowledge base is temporary (ephemeral) and should be hidden from UI", "type": "boolean" }, "knowledge_count": { "description": "Knowledge count (not stored in database, calculated on query)", "type": "integer", "x-agent": true, "x-agent-response": true }, "name": { "description": "Name of the knowledge base", "type": "string", "x-agent": true, "x-agent-required": true }, "pinned_at": { "description": "PinnedAt records when the current caller pinned this knowledge\nbase; nil when they have not.", "type": "string" }, "processing_count": { "description": "ProcessingCount indicates the number of knowledge items being processed (for document type knowledge bases)", "type": "integer", "x-agent": true, "x-agent-response": true }, "profile_config": { "description": "ProfileConfig controls automatic generation of the knowledge-base\ndescription from per-document profiles (document knowledge bases only).", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfileConfig" } ], "x-agent": true, "x-agent-detail": true }, "question_generation_config": { "description": "QuestionGenerationConfig stores question generation configuration for document knowledge bases", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig" } ], "x-agent": true, "x-agent-detail": true }, "share_count": { "description": "ShareCount indicates the number of organizations this knowledge base is shared with (not stored in database)", "type": "integer" }, "storage_backend_id": { "description": "StorageBackendID binds this KB to one concrete storage instance. The\nlegacy provider field remains readable during migration only.", "type": "string", "x-agent": "storage_backend_id" }, "storage_config": { "description": "Deprecated: legacy COS config column. Kept for backward compatibility with old data.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageConfig" } ] }, "storage_provider_config": { "description": "Storage provider config (new): only stores provider selection; credentials from workspace StorageEngineConfig", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageProviderConfig" } ] }, "summary_model_id": { "description": "Summary model ID. model.list returns the ids. Used for summaries, and as the default for auto-tagging and the AI description.", "type": "string", "x-agent": "summary_model_id" }, "tenant_id": { "description": "Workspace ID", "type": "integer" }, "type": { "description": "Type of the knowledge base: document, faq or wiki. Empty means document.", "type": "string", "enum": [ "document", "faq", "wiki" ], "x-agent": true }, "updated_at": { "description": "Last updated time of the knowledge base", "type": "string", "x-agent": true, "x-agent-response": true }, "vector_store_id": { "description": "VectorStoreID references the VectorStore this knowledge base is bound to.\nWhen nil, the KB falls back to the workspace's effective engines derived from\nthe RETRIEVE_DRIVER environment variable (env store flow).\nThis field is set once at creation time and must not be modified afterwards;\nenforcement lives at the GORM layer (`\u003c-:create`) plus the service-layer\nKB update path, which omits this field from its update DTO.", "type": "string", "x-agent": "vector_store_id" }, "vlm_config": { "description": "VLM config", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig" } ], "x-agent": true, "x-agent-detail": true }, "wiki_config": { "description": "WikiConfig stores wiki-specific configuration (only for wiki type knowledge bases)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiConfig" } ], "x-agent": true, "x-agent-detail": true } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeBaseConfig": { "type": "object", "properties": { "asr_config": { "description": "ASRConfig replaces speech-recognition settings when set. nil means no change.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ASRConfig" } ] }, "auto_tag_config": { "description": "AutoTagConfig controls optional automatic association of existing KB tags.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AutoTagConfig" } ] }, "chunking_config": { "description": "Chunking configuration", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkingConfig" } ] }, "embedding_model_id": { "description": "EmbeddingModelID changes the embedding model. nil means no change.\nA knowledge base that already has documents cannot switch models.", "type": "string" }, "extract_config": { "description": "ExtractConfig replaces graph extraction settings when set. nil means no change.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ExtractConfig" } ] }, "faq_config": { "description": "FAQ configuration (only for FAQ type knowledge bases)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQConfig" } ] }, "image_processing_config": { "description": "Image processing configuration.\n\nnil means \"no change\" when updating, the same contract IndexingStrategy\nuses. A request that does not mention this field must leave the image\nsettings alone: the attribute-observation switch and the attribute policy\nare things a knowledge base accumulates, and a client that predates them\nwould otherwise reset the lot on any save. Sending an object — empty\nincluded — replaces the whole configuration.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageProcessingConfig" } ] }, "indexing_strategy": { "description": "IndexingStrategy controls which indexing pipelines are active.\nnil means \"no change\" when updating (preserves existing strategy).", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.IndexingStrategy" } ] }, "profile_config": { "description": "ProfileConfig controls optional automatic knowledge-base description\ngeneration. nil means \"no change\" when updating.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfileConfig" } ] }, "question_generation_config": { "description": "QuestionGenerationConfig replaces generated-question settings when set. nil means no change.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig" } ] }, "storage_backend_id": { "description": "StorageBackendID rebinds file storage. nil means no change.", "type": "string" }, "summary_model_id": { "description": "SummaryModelID changes the summary model. nil means no change.", "type": "string" }, "wiki_config": { "description": "Wiki configuration (only for wiki-enabled knowledge bases)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiConfig" } ] } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfile": { "type": "object", "properties": { "aggregate_hash": { "description": "AggregateHash identifies the aggregate the gist was generated from. A\nmismatch with the live aggregate means the text is stale.", "type": "string" }, "error": { "description": "Error holds the last generation error when Status is failed.", "type": "string", "x-agent": "profile_error" }, "generated_at": { "description": "GeneratedAt records when the text was produced.", "type": "string", "x-agent": true }, "gist": { "description": "Gist is a short statement of what the knowledge base covers.", "type": "string", "x-agent": true }, "model_id": { "description": "ModelID records which chat model produced the text.", "type": "string" }, "stats": { "description": "Stats is the aggregate snapshot the text was generated from.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfileStats" } ] }, "status": { "description": "Status is one of the KnowledgeBaseProfileStatus* values.", "type": "string", "x-agent": "profile_status" }, "topics": { "description": "Topics is the merged topic list (at most KnowledgeBaseProfileMaxTopics).", "type": "array", "items": { "type": "string" }, "x-agent": true }, "typical_questions": { "description": "TypicalQuestions lists questions this knowledge base can answer.", "type": "array", "items": { "type": "string" }, "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfileConfig": { "type": "object", "properties": { "custom_instructions": { "description": "CustomInstructions is extra guidance for the description, such as the audience. The format stays fixed.", "type": "string", "x-agent": "profile_instructions", "x-agent-detail": true, "x-agent-max-bytes": "4000" }, "enabled": { "description": "Enabled turns the AI knowledge-base description on.", "type": "boolean", "x-agent": "profile_enabled" }, "model_id": { "description": "ModelID overrides the summary model. Empty uses summary_model_id.", "type": "string", "x-agent": "profile_model_id" } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfileStats": { "type": "object", "properties": { "doc_types": { "description": "DocTypes counts documents per model-assigned document type.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.NamedCount" } }, "document_count": { "description": "DocumentCount is the number of eligible documents at generation time.", "type": "integer" }, "earliest_at": { "description": "EarliestAt and LatestAt bound document creation times.", "type": "string" }, "file_types": { "description": "FileTypes counts documents per file extension.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.NamedCount" } }, "folders": { "description": "Folders lists the top-level folder names present.", "type": "array", "items": { "type": "string" } }, "latest_at": { "type": "string" }, "profiled_count": { "description": "ProfiledCount is how many of them carried a document profile.", "type": "integer" }, "raw_topics": { "description": "RawTopics counts documents per normalized topic keyword before merging.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.NamedCount" } }, "tags": { "description": "Tags counts documents per knowledge-base tag.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.NamedCount" } } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeBaseShare": { "type": "object", "properties": { "created_at": { "description": "Creation time", "type": "string" }, "deleted_at": { "description": "Deletion time (soft delete)", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "id": { "description": "Unique identifier", "type": "string" }, "knowledge_base": { "description": "Associations (not stored in database)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBase" } ] }, "knowledge_base_id": { "description": "Knowledge base ID being shared", "type": "string" }, "organization": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Organization" }, "organization_id": { "description": "Organization ID receiving the share", "type": "string" }, "permission": { "description": "Permission level (admin/editor/viewer)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ] }, "shared_by_user_id": { "description": "User ID who shared the knowledge base", "type": "string" }, "source_tenant_id": { "description": "Original tenant ID of the knowledge base (for cross-tenant embedding model access)", "type": "integer" }, "updated_at": { "description": "Last updated time", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeBaseShareResponse": { "type": "object", "properties": { "chunk_count": { "type": "integer" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "knowledge_base_id": { "type": "string" }, "knowledge_base_name": { "type": "string" }, "knowledge_base_type": { "type": "string" }, "knowledge_count": { "type": "integer" }, "my_permission": { "description": "Effective permission for current user = min(Permission, MyRoleInOrg)", "type": "string" }, "my_role_in_org": { "description": "Current user's role in this organization (admin/editor/viewer)", "type": "string" }, "organization_id": { "type": "string" }, "organization_name": { "type": "string" }, "permission": { "description": "Share permission (what the space was granted: viewer/editor)", "type": "string" }, "require_approval": { "type": "boolean" }, "shared_by_user_id": { "type": "string" }, "shared_by_username": { "type": "string" }, "source_tenant_id": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeFolderNode": { "type": "object", "properties": { "children": { "description": "Children are the direct sub-folders, sorted by name.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeFolderNode" } }, "document_count": { "description": "DocumentCount counts entries whose folder_path equals Path.", "type": "integer", "x-agent": true }, "name": { "description": "Name is the last segment of Path, used as the tree row label.", "type": "string", "x-agent": true }, "path": { "description": "Path is the canonical folder path, e.g. \"docs/spec\".", "type": "string", "x-agent": "folder_path" }, "total_count": { "description": "TotalCount counts entries in Path and in all descendant folders.", "type": "integer", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeFolderTree": { "type": "object", "properties": { "folders": { "description": "Folders are the top-level folders, sorted by name.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeFolderNode" } }, "root_document_count": { "description": "RootDocumentCount counts entries that live at the knowledge base root\n(folder_path = \"\"), i.e. documents that were not uploaded as part of a\nfolder.", "type": "integer", "x-agent": true }, "total_document_count": { "description": "TotalDocumentCount counts every entry in the knowledge base, matching\nthe unfiltered document list total.", "type": "integer", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeMoveProgress": { "type": "object", "properties": { "created_at": { "description": "任务创建时间", "type": "integer" }, "error": { "description": "错误信息", "type": "string", "x-agent": true }, "failed": { "description": "失败数", "type": "integer", "x-agent": true }, "message": { "description": "状态消息", "type": "string", "x-agent": true }, "processed": { "description": "已处理数", "type": "integer", "x-agent": true }, "progress": { "description": "0-100", "type": "integer", "x-agent": true }, "source_kb_id": { "type": "string" }, "status": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KBCloneTaskStatus" } ], "x-agent": true }, "target_kb_id": { "type": "string" }, "task_id": { "type": "string" }, "total": { "description": "总知识数", "type": "integer", "x-agent": true }, "updated_at": { "description": "最后更新时间", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeProcessOverrides": { "type": "object", "properties": { "asr_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ASRConfig" }, "chunking_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkingConfig" }, "enable_multimodel": { "type": "boolean" }, "extract_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ExtractConfig" }, "graph_enabled": { "type": "boolean" }, "image_actions": { "description": "ImageActions overrides rows of the attribute-\u003ework table for this document\n(merged per action key on top of the knowledge base's table).\nnil keeps the knowledge base's setting.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageActionsConfig" } ] }, "image_attrs_enabled": { "description": "ImageAttrsEnabled overrides the knowledge base's attribute-observed image\npipeline switch for this one document. nil keeps the knowledge base's\nsetting.", "type": "boolean" }, "image_vector_enabled": { "description": "ImageVectorEnabled overrides image vector indexing for this document.\nIt does not change the KB-wide retrieval setting or embedding model.", "type": "boolean" }, "parser_engine_overrides": { "description": "ParserEngineOverrides passes key-value configuration to docreader parsers\n(e.g. pdf_force_scanned=true). Merged with workspace-level overrides in the\nparse pipeline; per-upload values take priority on conflict.", "type": "object", "additionalProperties": { "type": "string" } }, "parser_engine_rules": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule" } }, "question_generation_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig" }, "summary_enabled": { "description": "SummaryEnabled defaults to true when omitted for backward compatibility.", "type": "boolean" }, "vlm_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig" } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeProfile": { "type": "object", "properties": { "doc_type": { "description": "DocType is a coarse label such as \"user manual\", \"meeting notes\" or \"contract\".", "type": "string" }, "gist": { "description": "Gist is a one-line statement of what the document is about.", "type": "string" }, "topics": { "description": "Topics lists 3-5 short topic keywords.", "type": "array", "items": { "type": "string" } }, "typical_question": { "description": "TypicalQuestion is one natural-language question this document answers.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeTag": { "type": "object", "properties": { "color": { "description": "Optional display color", "type": "string" }, "created_at": { "description": "Creation time", "type": "string" }, "id": { "description": "Unique identifier of the tag (UUID)", "type": "string", "x-agent": "tag_id" }, "knowledge_base_id": { "description": "Knowledge base ID that this tag belongs to", "type": "string" }, "name": { "description": "Tag name, unique within the same knowledge base", "type": "string", "x-agent": true }, "seq_id": { "description": "SeqID is an auto-increment integer ID for external API usage", "type": "integer", "x-agent": "tag_seq_id" }, "sort_order": { "description": "Sort order within the same knowledge base", "type": "integer" }, "tenant_id": { "description": "Workspace ID", "type": "integer" }, "updated_at": { "description": "Last updated time", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.KnowledgeTagWithStats": { "type": "object", "properties": { "chunk_count": { "type": "integer" }, "color": { "description": "Optional display color", "type": "string" }, "created_at": { "description": "Creation time", "type": "string" }, "id": { "description": "Unique identifier of the tag (UUID)", "type": "string", "x-agent": "tag_id" }, "knowledge_base_id": { "description": "Knowledge base ID that this tag belongs to", "type": "string" }, "knowledge_count": { "type": "integer", "x-agent": true }, "name": { "description": "Tag name, unique within the same knowledge base", "type": "string", "x-agent": true }, "seq_id": { "description": "SeqID is an auto-increment integer ID for external API usage", "type": "integer", "x-agent": "tag_seq_id" }, "sort_order": { "description": "Sort order within the same knowledge base", "type": "integer" }, "tenant_id": { "description": "Workspace ID", "type": "integer" }, "updated_at": { "description": "Last updated time", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ListJoinRequestsResponse": { "type": "object", "properties": { "requests": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.JoinRequestResponse" } }, "total": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.ListMembersResponse": { "type": "object", "properties": { "members": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationMemberResponse" } }, "total": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.ListOrganizationsResponse": { "type": "object", "properties": { "organizations": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationResponse" } }, "resource_counts": { "description": "各空间内知识库/智能体数量,供列表侧栏展示", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ResourceCountsByOrgResponse" } ] }, "total": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.ListSharesResponse": { "type": "object", "properties": { "shares": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseShareResponse" } }, "total": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.LocalEngineConfig": { "type": "object", "properties": { "path_prefix": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.LoginRequest": { "type": "object", "required": [ "email", "password" ], "properties": { "email": { "type": "string" }, "password": { "type": "string", "minLength": 6 } } }, "github_com_Tencent_WeKnora_internal_types.LoginResponse": { "type": "object", "properties": { "active_tenant": { "description": "ActiveTenant is the workspace whose ID is encoded in the issued JWT;\nfuture requests are scoped to it until the client calls /auth/switch-tenant.\nDefaults to the user's home workspace on a fresh login.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Tenant" } ] }, "memberships": { "description": "Memberships lists every workspace the user can authenticate into,\nalong with their role in each. Always populated (length 1 for users\nwho only belong to their home workspace) so frontends can render a\nworkspace switcher without a follow-up request. Serialised without\nomitempty so the field is always present as a JSON array (possibly\nempty) — the \"always populated\" contract relies on the server side\nguaranteeing a non-nil slice.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Membership" } }, "message": { "type": "string" }, "refresh_token": { "type": "string" }, "success": { "type": "boolean" }, "token": { "type": "string" }, "user": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.User" } } }, "github_com_Tencent_WeKnora_internal_types.MCPAdvancedConfig": { "type": "object", "properties": { "retry_count": { "description": "Number of retries, default: 3", "type": "integer" }, "retry_delay": { "description": "Delay between retries in seconds, default: 1", "type": "integer" }, "timeout": { "description": "Timeout in seconds, default: 30", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.MCPAuthConfig": { "type": "object", "properties": { "api_key": { "type": "string" }, "api_key_header": { "description": "APIKeyHeader is the header name that carries APIKey when AuthType is\napi_key. Empty defaults to \"X-API-Key\". This is non-secret structural\nconfig (the secret is APIKey), so it is not encrypted and is safe to echo\nback in responses. It lets services that expect the key in a different\nheader (e.g. the raw token directly in \"Authorization\") work without\nresorting to plaintext custom headers.", "type": "string" }, "auth_server_metadata_url": { "description": "AuthServerMetadataURL optionally pins the OAuth authorization server\nmetadata URL. When empty, the server is discovered automatically from\nthe MCP URL (RFC 9728 / RFC 8414).", "type": "string" }, "auth_type": { "description": "AuthType selects the authentication strategy. Empty (\"\") is treated as\nnone for backward compatibility with rows that pre-date this field.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPAuthType" } ] }, "client_id": { "description": "ClientID optionally names an OAuth client registered with the\nauthorization server in advance. When set it is used instead of dynamic\nclient registration, for servers that offer no registration endpoint or\nallow grants only to clients an administrator registered. Non-secret.", "type": "string" }, "client_secret": { "description": "ClientSecret is the secret of ClientID for a confidential client.\nSecret: encrypted at rest like APIKey and Token, never returned, and\nchanged only through the credentials subresource after creation.", "type": "string" }, "custom_headers": { "type": "object", "additionalProperties": { "type": "string" } }, "scopes": { "description": "Scopes are the OAuth scopes requested during authorization. Optional.", "type": "array", "items": { "type": "string" } }, "token": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MCPAuthType": { "type": "string", "enum": [ "", "api_key", "bearer", "oauth" ], "x-enum-varnames": [ "MCPAuthNone", "MCPAuthAPIKey", "MCPAuthBearer", "MCPAuthOAuth" ] }, "github_com_Tencent_WeKnora_internal_types.MCPEnvVars": { "type": "object", "additionalProperties": { "type": "string" } }, "github_com_Tencent_WeKnora_internal_types.MCPHeaders": { "type": "object", "additionalProperties": { "type": "string" } }, "github_com_Tencent_WeKnora_internal_types.MCPResource": { "type": "object", "properties": { "description": { "type": "string" }, "mimeType": { "type": "string" }, "name": { "type": "string" }, "uri": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MCPService": { "type": "object", "properties": { "advanced_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPAdvancedConfig" }, "auth_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPAuthConfig" }, "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "description": { "type": "string" }, "enabled": { "type": "boolean" }, "env_vars": { "description": "Environment variables for stdio", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPEnvVars" } ] }, "headers": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPHeaders" }, "id": { "type": "string" }, "is_builtin": { "description": "Whether this is a builtin MCP service (visible to all workspaces)", "type": "boolean" }, "name": { "type": "string" }, "stdio_config": { "description": "Required for stdio transport", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPStdioConfig" } ] }, "tenant_id": { "type": "integer" }, "transport_type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPTransportType" }, "updated_at": { "type": "string" }, "url": { "description": "Optional: required for SSE/HTTP Streamable", "type": "string" }, "usage_instructions": { "description": "UsageInstructions is maintained locally and is not overwritten by directory refresh.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MCPStdioConfig": { "type": "object", "properties": { "args": { "description": "Command arguments array", "type": "array", "items": { "type": "string" } }, "command": { "description": "Command: \"uvx\" or \"npx\"", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MCPTestResult": { "type": "object", "properties": { "description": { "type": "string" }, "message": { "type": "string" }, "oauth_required": { "description": "OAuthRequired is true when the connection failed because the server\nrequires OAuth authorization (RFC 9728), even though the service was not\nconfigured for OAuth. The UI uses it to guide the user to switch the auth\nstrategy to OAuth.", "type": "boolean" }, "resources": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPResource" } }, "success": { "type": "boolean" }, "tools": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MCPTool" } } } }, "github_com_Tencent_WeKnora_internal_types.MCPTool": { "type": "object", "properties": { "description": { "type": "string" }, "inputSchema": { "description": "JSON Schema for tool parameters", "type": "object" }, "name": { "type": "string" }, "require_approval": { "description": "RequireApproval when true: agent execution pauses until the user approves in UI (issue #1173).", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.MCPTransportType": { "type": "string", "enum": [ "sse", "http-streamable", "stdio" ], "x-enum-comments": { "MCPTransportHTTPStreamable": "HTTP Streamable", "MCPTransportSSE": "Server-Sent Events", "MCPTransportStdio": "Stdio (Standard Input/Output)" }, "x-enum-descriptions": [ "Server-Sent Events", "HTTP Streamable", "Stdio (Standard Input/Output)" ], "x-enum-varnames": [ "MCPTransportSSE", "MCPTransportHTTPStreamable", "MCPTransportStdio" ] }, "github_com_Tencent_WeKnora_internal_types.ManualKnowledgePayload": { "type": "object", "properties": { "channel": { "type": "string" }, "content": { "description": "Markdown content. The assistant may send a full document; the API limit\nis 200000 runes, and x-agent-max-bytes covers that in UTF-8.", "type": "string", "x-agent": true, "x-agent-max-bytes": "800000", "x-agent-required": true }, "process_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeProcessOverrides" }, "status": { "description": "draft keeps the document out of search; publish indexes it.", "type": "string", "enum": [ "draft", "publish" ], "x-agent": true, "x-agent-required": true }, "tag_ids": { "type": "array", "items": { "type": "string" } }, "title": { "description": "Document title.", "type": "string", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.MatchType": { "type": "integer", "enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], "x-enum-comments": { "MatchTypeDataAnalysis": "数据分析匹配类型", "MatchTypeDirectLoad": "Deprecated: reserved to preserve serialized enum values", "MatchTypeParentChunk": "父Chunk匹配类型", "MatchTypeRelationChunk": "关系Chunk匹配类型", "MatchTypeWebSearch": "网络搜索匹配类型" }, "x-enum-descriptions": [ "", "", "", "", "父Chunk匹配类型", "关系Chunk匹配类型", "", "网络搜索匹配类型", "Deprecated: reserved to preserve serialized enum values", "数据分析匹配类型" ], "x-enum-varnames": [ "MatchTypeEmbedding", "MatchTypeKeywords", "MatchTypeNearByChunk", "MatchTypeHistory", "MatchTypeParentChunk", "MatchTypeRelationChunk", "MatchTypeGraph", "MatchTypeWebSearch", "MatchTypeDirectLoad", "MatchTypeDataAnalysis" ] }, "github_com_Tencent_WeKnora_internal_types.MatchedImage": { "type": "object", "properties": { "chunk_id": { "type": "string" }, "knowledge_base_id": { "type": "string" }, "url": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.Membership": { "type": "object", "properties": { "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole" }, "tenant_id": { "type": "integer" }, "tenant_name": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MemoryConfig": { "type": "object", "properties": { "embedding_model_id": { "description": "EmbeddingModelID is the single model used to score memory against a\nquestion. It is pinned per workspace: knowledge bases each have their\nown embedding model, and grabbing whichever one happens to be listed\nfirst would mix incomparable vector spaces. Blank means semantic recall\nis off and matching stays lexical.", "type": "string" }, "enabled": { "description": "Enabled defaults to false. Memory retains user statements across\nsessions, so a workspace admin has to turn it on deliberately.", "type": "boolean" }, "extract_delay_seconds": { "description": "ExtractDelaySeconds is how long a finished turn waits before\ndistillation runs. Waiting lets one model call cover the several\nmessages a user usually sends in a row. 0 means the default.", "type": "integer" }, "extract_instructions": { "description": "ExtractInstructions are workspace-specific rules appended to the\ndistillation prompt, for policies the product cannot guess (\"never record\ncustomer names\", \"always note the environment a question is about\").", "type": "string" }, "extract_min_interval_seconds": { "description": "ExtractMinIntervalSeconds is the floor between two distillation runs for\nthe same person, and exists purely to bound cost. It never drops a turn:\na turn arriving inside the interval is queued and picked up by the next\nrun. 0 means the default.", "type": "integer" }, "extract_model_id": { "description": "ExtractModelID is the model used by the background extraction task.\nEmpty means \"use the model the conversation itself used\", which is what\nthe settings UI promises, so the extraction task must never fail merely\nbecause this is blank.", "type": "string" }, "interest_threshold": { "description": "InterestThreshold is how many separate conversations must touch a topic\nbefore it becomes a stored interest. 0 means the default. Setting it to 1\nrecords every topic on first sight, which is usually too noisy.", "type": "integer" }, "max_items": { "description": "MaxItems caps active items per subject. 0 means DefaultMemoryMaxItems.", "type": "integer" }, "retrieval_conditioning": { "description": "RetrievalConditioning lets memory shape retrieval — query rewriting and\nper-document ranking — rather than only being appended to the answer\nprompt. This is where memory earns its keep in a knowledge-base product.", "type": "boolean" }, "vector_recall": { "description": "VectorRecall adds semantic similarity to memory recall. Nil means on\nwhen an embedding model is reachable.\n\nLexical matching alone cannot find a memory the user has re-worded, which\nis most of them: \"回答直接给结论\" and \"别铺垫那么多\" share no tokens. The\ncost is one embedding call per turn, bounded and degraded to lexical on\nfailure, so the feature never becomes a reason a chat is slow.", "type": "boolean" }, "write_mode": { "description": "WriteMode is MemoryWriteExplicitOnly or MemoryWriteAuto.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MemoryConsolidationResult": { "type": "object", "properties": { "candidates": { "description": "Candidates is how many groups were put in front of the model.", "type": "integer" }, "demoted": { "type": "integer" }, "expired": { "type": "integer" }, "merged": { "type": "integer" }, "reviewed": { "description": "Reviewed is how many active memories the pass looked at.", "type": "integer" }, "skipped": { "description": "Skipped is why nothing was merged, empty when something was.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MemoryDocView": { "type": "object", "properties": { "hits": { "type": "integer" }, "id": { "type": "string" }, "knowledge_base_id": { "type": "string" }, "knowledge_id": { "type": "string" }, "last_used_at": { "type": "string" }, "title": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MemoryItem": { "type": "object", "properties": { "content": { "type": "string" }, "created_at": { "type": "string" }, "expires_at": { "description": "ExpiresAt is when the statement stops being worth recalling, used for\nthings that are true only for a while (\"finish the migration this week\").\nWithout it an in-flight task stays in context forever and slowly turns\nthe memory into a list of things the user finished months ago.", "type": "string" }, "id": { "type": "string" }, "importance": { "type": "integer" }, "invalid_at": { "type": "string" }, "kind": { "type": "string" }, "last_used_at": { "type": "string" }, "normalized_key": { "description": "NormalizedKey identifies the topic this item is about. A new item with\nthe same key as an active one supersedes it, which is how contradictions\n(\"I use MySQL\" then \"I moved to Postgres\") resolve without an LLM in the\nread path.", "type": "string" }, "origin": { "type": "string" }, "replaces_id": { "type": "string" }, "source_message_id": { "type": "string" }, "source_session_id": { "type": "string" }, "status": { "type": "string" }, "subject_id": { "type": "string" }, "superseded_by": { "type": "string" }, "tenant_id": { "type": "integer" }, "topic": { "description": "Topic is the readable subject the statement is about, as the extraction\nmodel named it (\"在用的数据库\"). It is kept verbatim next to the\nnormalized key because it is the best retrieval handle available: a\nquestion often names the topic while the statement itself only carries\nthe value (\"已经迁到 PostgreSQL\").", "type": "string" }, "updated_at": { "type": "string" }, "use_count": { "type": "integer" }, "valid_from": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MemorySettings": { "type": "object", "properties": { "effective": { "description": "Effective is what actually happens: WorkspaceEnabled \u0026\u0026 UserEnabled.", "type": "boolean" }, "item_count": { "description": "ItemCount is how many active memories the caller currently has.", "type": "integer" }, "max_items": { "description": "MaxItems is the capacity cap after which the lowest ranked are archived.", "type": "integer" }, "user_enabled": { "description": "UserEnabled is the caller's own opt out. Meaningless while the\nworkspace switch is off, but still reported so the toggle keeps its\nposition when an admin turns the workspace back on.", "type": "boolean" }, "workspace_enabled": { "description": "WorkspaceEnabled is the admin switch on the workspace.", "type": "boolean" }, "write_mode": { "description": "WriteMode is the workspace write mode.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MemoryTopicView": { "type": "object", "properties": { "aliases": { "type": "array", "items": { "type": "string" } }, "hits": { "type": "integer" }, "id": { "type": "string" }, "last_seen_at": { "type": "string" }, "threshold": { "type": "integer" }, "topic": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MentionedItem": { "type": "object", "properties": { "id": { "type": "string" }, "kb_id": { "description": "Parent knowledge base for file/tag mentions", "type": "string" }, "kb_name": { "description": "Display name for parent KB", "type": "string" }, "kb_type": { "description": "\"document\" or \"faq\" (only for kb type)", "type": "string" }, "name": { "type": "string" }, "service_id": { "description": "Parent MCP service for MCP tool mentions", "type": "string" }, "skill_name": { "description": "Preloaded agent skill name", "type": "string" }, "type": { "description": "\"kb\", \"file\", \"tag\", \"mcp\", \"skill\"", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.Message": { "type": "object", "properties": { "agent_duration_ms": { "description": "Agent total execution duration in milliseconds (from query start to answer start)", "type": "integer" }, "agent_id": { "description": "AgentID is the agent used for this individual assistant turn. Unlike the\nsession's last_request_state it remains stable when users switch agents.", "type": "string" }, "agent_steps": { "description": "Agent execution steps (only for assistant messages generated by agent)\nThis contains the detailed reasoning process and tool calls made by the agent\nStored for user history display, but NOT included in LLM context to avoid redundancy", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AgentStep" } }, "artifacts": { "description": "Skill-generated files produced during this assistant turn (assistant messages only).\nPopulated by ArtifactCollector after the sandbox finishes, referenced by the\nartifact download endpoint. Empty for user messages and turns without skills.\n\nStored in the message_artifacts table, not on the message row: the message\nrepository loads it with every message it returns and writes it whenever it\nis non-nil on create or update. A nil slice leaves the stored rows alone.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MessageArtifact" } }, "attachments": { "description": "Attached files (documents, audio, etc., for user messages)", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MessageAttachment" } }, "channel": { "description": "Channel indicates the source channel of this message (e.g., \"web\", \"api\", \"im\")", "type": "string" }, "content": { "description": "Message text content", "type": "string" }, "created_at": { "description": "Message creation timestamp", "type": "string" }, "deleted_at": { "description": "Soft delete timestamp", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "id": { "description": "Unique identifier for the message", "type": "string" }, "images": { "description": "Attached images with OCR/Caption text (for user messages)", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MessageImage" } }, "is_completed": { "description": "Whether message generation is complete", "type": "boolean" }, "is_fallback": { "description": "Whether this response is a fallback (no knowledge base match found)", "type": "boolean" }, "knowledge_id": { "description": "KnowledgeID links this message to a Knowledge entry in the chat history knowledge base\nUsed for vector search indexing: when set, the message content has been indexed as a Knowledge passage", "type": "string" }, "knowledge_references": { "description": "References to knowledge chunks used in the response", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SearchResult" } }, "mentioned_items": { "description": "Mentioned knowledge bases and files (for user messages)\nStores the @mentioned items when user sends a message", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MentionedItem" } }, "model_id": { "description": "ModelID is the requested/effective chat model binding captured for this\nturn. It is useful for reproducibility and suggestion generation.", "type": "string" }, "pending_prompt": { "description": "PendingPrompt is the prompt an awaiting_input message waits on. The\nmessage list fills it in for the prompt's owner; it is never stored.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PendingPromptView" } ] }, "request_id": { "description": "Request identifier for tracking API requests", "type": "string" }, "role": { "description": "Message role: \"user\", \"assistant\", \"system\"", "type": "string" }, "run_state": { "description": "RunState refines an incomplete message: MessageRunStateAwaitingInput\nmeans the run ended suspended on a prompt instead of still generating.\nEmpty means IsCompleted alone describes the message.", "type": "string" }, "sandbox_checkpoint": { "description": "SandboxCheckpoint is the git commit this assistant turn produced in the\nsession sandbox's /workspace. Nil for user messages, for turns that ran\nwithout a sandbox, and for turns whose commit failed (best-effort — a\nfailed checkpoint must never block the reply). A message without a\ncheckpoint cannot serve as a fork point with sandbox state.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SandboxCheckpoint" } ] }, "session_id": { "description": "ID of the session this message belongs to", "type": "string" }, "updated_at": { "description": "Last update timestamp", "type": "string" }, "usage": { "description": "LLM token usage aggregated across every round of the turn that produced this\nassistant message. Persisted so history reads can attribute cost after the\nlive stream is gone; NULL (nil) for user messages and pre-feature rows.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TokenUsage" } ] }, "used_memories": { "description": "UsedMemories records which long-term memories were injected into this\nanswer, so the chat UI can show them and let the user delete one on the\nspot. Persisted rather than only streamed so reopening a conversation\nstill explains what the answer saw.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UsedMemory" } } } }, "github_com_Tencent_WeKnora_internal_types.MessageArtifact": { "type": "object", "properties": { "content_hash": { "description": "SHA-256 of the persisted bytes", "type": "string" }, "created_at": { "description": "When WeKnora persisted the blob", "type": "string" }, "deleted_at": { "description": "DeletedAt marks a file the user deleted. The entry stays in the list\nrather than being removed because its position IS the download address\n(msg.Artifacts[index]); dropping it would shift every later file's index\nand hand an old link the wrong blob. Keeping it also keeps the entry in\nArtifactCollector's de-duplication set, so the next collect does not\nre-attach the very file that was deleted — its sandbox mtime has not\nmoved. Clients filter these out; the bytes are already reclaimed.", "type": "string" }, "file_name": { "description": "Original filename inside the sandbox", "type": "string" }, "file_size": { "description": "File size in bytes", "type": "integer" }, "file_type": { "description": "File extension (e.g., \".pptx\", \".pdf\")", "type": "string" }, "mod_time": { "description": "Sandbox-side modification time (used for diff)", "type": "string" }, "source_path": { "description": "Absolute path inside the sandbox (used for diff)", "type": "string" }, "url": { "description": "Storage URL (provider://path); persisted, not sent to client", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MessageAttachment": { "type": "object", "properties": { "content": { "description": "Extracted text content (for small text files)", "type": "string" }, "content_mode": { "description": "full or selected_chunks", "type": "string" }, "file_name": { "description": "Original filename", "type": "string" }, "file_size": { "description": "File size in bytes", "type": "integer" }, "file_type": { "description": "File extension (e.g., \".pdf\", \".docx\")", "type": "string" }, "id": { "description": "Temporary document ID for session-scoped uploads", "type": "string" }, "is_truncated": { "description": "Whether content was truncated", "type": "boolean" }, "line_count": { "description": "Total line count (for text files)", "type": "integer" }, "selected_chunks": { "description": "Chunks included in this message prompt", "type": "integer" }, "token_count": { "description": "Approximate tokens in the parsed document", "type": "integer" }, "total_chunks": { "description": "Total parsed chunks", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.MessageImage": { "type": "object", "properties": { "caption": { "type": "string" }, "url": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MessageSearchGroupItem": { "type": "object", "properties": { "answer_content": { "description": "Assistant answer content (role=assistant), may be empty if only Q matched", "type": "string" }, "created_at": { "description": "Timestamp of the earliest message in the group", "type": "string" }, "match_type": { "description": "How this result was matched: \"keyword\", \"vector\", or \"hybrid\"", "type": "string" }, "query_content": { "description": "User query content (role=user)", "type": "string" }, "request_id": { "description": "The request_id that groups Q\u0026A together", "type": "string" }, "score": { "description": "Best score among the matched messages in this group", "type": "number" }, "session_id": { "description": "Session info", "type": "string" }, "session_title": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MessageSearchResult": { "type": "object", "properties": { "items": { "description": "List of merged Q\u0026A pairs", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MessageSearchGroupItem" } }, "total": { "description": "Total number of results", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.MessageSuggestionSet": { "type": "object", "properties": { "agent_id": { "type": "string" }, "allow_regenerate": { "type": "boolean" }, "assistant_message_id": { "type": "string" }, "completion_tokens": { "type": "integer" }, "config_hash": { "type": "string" }, "created_at": { "type": "string" }, "error_code": { "type": "string" }, "generated_at": { "type": "string" }, "id": { "type": "string" }, "latency_ms": { "type": "integer" }, "locale": { "type": "string" }, "model_id": { "type": "string" }, "placement": { "type": "string" }, "prompt_tokens": { "type": "integer" }, "questions": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SuggestionItem" } }, "session_id": { "type": "string" }, "status": { "type": "string" }, "suppression_reason": { "type": "string" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.MetricResult": { "type": "object", "properties": { "generation_metrics": { "description": "Text generation quality metrics", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.GenerationMetrics" } ] }, "retrieval_metrics": { "description": "Retrieval performance metrics", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrievalMetrics" } ] } } }, "github_com_Tencent_WeKnora_internal_types.MinIOEngineConfig": { "type": "object", "properties": { "access_key_id": { "type": "string" }, "bucket_name": { "type": "string" }, "endpoint": { "type": "string" }, "mode": { "description": "\"docker\" or \"remote\"", "type": "string" }, "path_prefix": { "type": "string" }, "secret_access_key": { "type": "string" }, "use_ssl": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.ModelParameters": { "type": "object", "properties": { "api_key": { "type": "string" }, "app_id": { "description": "WeKnoraCloud 厂商专用凭证", "type": "string" }, "app_secret": { "description": "AES-256 加密存储,实际承载上游 API Key", "type": "string" }, "base_url": { "type": "string" }, "context_window": { "description": "ContextWindow is the model's total context window in tokens and\nMaxOutputTokens the most it emits in one response. Both are provider\nfacts the agent cannot discover but has to act on: the context window is\nwhat decides when conversation history gets compacted, and assuming a\nwindow larger than the real one means compaction never fires and the\nprovider rejects the request mid-conversation instead. 0 means unknown,\nwhich falls back to DefaultMaxContextTokens.", "type": "integer" }, "custom_headers": { "description": "CustomHeaders 允许在调用远程模型 API 时附加自定义 HTTP 请求头,\n用途类似 Python OpenAI SDK 的 extra_headers 参数,\n常见场景包括透传企业网关鉴权信息、追踪 ID、路由标识等。\n保留字段(Authorization、api-key、Content-Type、Accept 等)会在运行期被忽略以避免破坏签名/鉴权流程。", "type": "object", "additionalProperties": { "type": "string" } }, "embedding_parameters": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.EmbeddingParameters" }, "extra_config": { "description": "Provider-specific configuration", "type": "object", "additionalProperties": { "type": "string" } }, "interface_type": { "type": "string" }, "max_concurrency": { "description": "MaxConcurrency caps concurrent in-flight BACKGROUND (ingestion /\nenrichment) calls to THIS specific model, keyed by model ID and shared\nacross all replicas. 0 (the default) means \"fall back to the\nprocess-wide model.max_concurrency\". Interactive user-facing calls are\nnever gated. Only chat / vlm / embedding honour this (see limiter.Gate).", "type": "integer" }, "max_output_tokens": { "type": "integer" }, "parameter_size": { "description": "Ollama model parameter size (e.g., \"7B\", \"13B\", \"70B\")", "type": "string" }, "provider": { "description": "Provider identifier: openai, aliyun, zhipu, generic", "type": "string" }, "spec": { "description": "Spec overrides the catalog entry for this row: protocol, capability\nflags and the flat protocol compat object. Everything omitted is\ninherited from the vendor catalog (see internal/models/catalog).", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelSpecOverride" } ] }, "supports_vision": { "description": "Whether the model accepts image/multimodal input", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.ModelSource": { "type": "string", "enum": [ "local", "remote", "aliyun", "zhipu", "volcengine", "deepseek", "hunyuan", "minimax", "openai", "gemini", "mimo", "siliconflow", "jina", "openrouter", "litellm", "requesty", "nvidia", "novita", "azure_openai" ], "x-enum-comments": { "ModelSourceAliyun": "Aliyun DashScope model", "ModelSourceAzureOpenAI": "Azure OpenAI model", "ModelSourceDeepseek": "Deepseek model", "ModelSourceGemini": "Gemini model", "ModelSourceHunyuan": "Hunyuan model", "ModelSourceJina": "Jina AI model", "ModelSourceLiteLLM": "LiteLLM proxy model", "ModelSourceLocal": "Local model", "ModelSourceMimo": "Mimo model", "ModelSourceMinimax": "Minimax mode", "ModelSourceNovita": "Novita AI model", "ModelSourceNvidia": "NVIDIA model", "ModelSourceOpenAI": "OpenAI model", "ModelSourceOpenRouter": "OpenRouter model", "ModelSourceRemote": "Remote model", "ModelSourceRequesty": "Requesty model", "ModelSourceSiliconFlow": "SiliconFlow model", "ModelSourceVolcengine": "Volcengine model", "ModelSourceZhipu": "Zhipu model" }, "x-enum-descriptions": [ "Local model", "Remote model", "Aliyun DashScope model", "Zhipu model", "Volcengine model", "Deepseek model", "Hunyuan model", "Minimax mode", "OpenAI model", "Gemini model", "Mimo model", "SiliconFlow model", "Jina AI model", "OpenRouter model", "LiteLLM proxy model", "Requesty model", "NVIDIA model", "Novita AI model", "Azure OpenAI model" ], "x-enum-varnames": [ "ModelSourceLocal", "ModelSourceRemote", "ModelSourceAliyun", "ModelSourceZhipu", "ModelSourceVolcengine", "ModelSourceDeepseek", "ModelSourceHunyuan", "ModelSourceMinimax", "ModelSourceOpenAI", "ModelSourceGemini", "ModelSourceMimo", "ModelSourceSiliconFlow", "ModelSourceJina", "ModelSourceOpenRouter", "ModelSourceLiteLLM", "ModelSourceRequesty", "ModelSourceNvidia", "ModelSourceNovita", "ModelSourceAzureOpenAI" ] }, "github_com_Tencent_WeKnora_internal_types.ModelSpecOverride": { "type": "object", "properties": { "api": { "type": "string" }, "compat": { "description": "Compat is a plain object so it round-trips through both JSON (API,\ndatabase column) and YAML (builtin_models.yaml).", "type": "object", "additionalProperties": {} }, "context_window": { "type": "integer" }, "input": { "type": "array", "items": { "type": "string" } }, "max_output_tokens": { "type": "integer" }, "reasoning": { "type": "boolean" }, "thinking_levels": { "type": "object", "additionalProperties": { "type": "string" } } } }, "github_com_Tencent_WeKnora_internal_types.ModelStatus": { "type": "string", "enum": [ "active", "downloading", "download_failed" ], "x-enum-comments": { "ModelStatusActive": "Model is active", "ModelStatusDownloadFailed": "Model download failed", "ModelStatusDownloading": "Model is downloading" }, "x-enum-descriptions": [ "Model is active", "Model is downloading", "Model download failed" ], "x-enum-varnames": [ "ModelStatusActive", "ModelStatusDownloading", "ModelStatusDownloadFailed" ] }, "github_com_Tencent_WeKnora_internal_types.ModelType": { "type": "string", "enum": [ "Embedding", "Rerank", "KnowledgeQA", "VLLM", "ASR" ], "x-enum-comments": { "ModelTypeASR": "ASR (Automatic Speech Recognition) model", "ModelTypeEmbedding": "Embedding model", "ModelTypeKnowledgeQA": "KnowledgeQA model", "ModelTypeRerank": "Rerank model", "ModelTypeVLLM": "VLLM model" }, "x-enum-descriptions": [ "Embedding model", "Rerank model", "KnowledgeQA model", "VLLM model", "ASR (Automatic Speech Recognition) model" ], "x-enum-varnames": [ "ModelTypeEmbedding", "ModelTypeRerank", "ModelTypeKnowledgeQA", "ModelTypeVLLM", "ModelTypeASR" ] }, "github_com_Tencent_WeKnora_internal_types.NamedCount": { "type": "object", "properties": { "count": { "type": "integer" }, "name": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.OBSEngineConfig": { "type": "object", "properties": { "access_key": { "type": "string" }, "bucket_name": { "type": "string" }, "endpoint": { "type": "string" }, "path_prefix": { "type": "string" }, "region": { "type": "string" }, "secret_key": { "type": "string" }, "use_ssl": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.OIDCAuthURLResponse": { "type": "object", "properties": { "authorization_url": { "type": "string" }, "provider_display_name": { "type": "string" }, "state": { "type": "string" }, "success": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.OIDCConfigResponse": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "provider_display_name": { "type": "string" }, "success": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.OSSEngineConfig": { "type": "object", "properties": { "access_key": { "type": "string" }, "bucket_name": { "type": "string" }, "endpoint": { "type": "string" }, "path_prefix": { "type": "string" }, "region": { "type": "string" }, "secret_key": { "type": "string" }, "temp_bucket_name": { "type": "string" }, "temp_region": { "type": "string" }, "use_temp_bucket": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.OrgMemberRole": { "type": "string", "enum": [ "admin", "editor", "viewer" ], "x-enum-varnames": [ "OrgRoleAdmin", "OrgRoleEditor", "OrgRoleViewer" ] }, "github_com_Tencent_WeKnora_internal_types.Organization": { "type": "object", "properties": { "avatar": { "description": "Avatar URL for display in list and settings", "type": "string" }, "created_at": { "description": "Creation time", "type": "string" }, "deleted_at": { "description": "Deletion time (soft delete)", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "description": { "description": "Description of the organization", "type": "string" }, "id": { "description": "Unique identifier of the organization", "type": "string" }, "invite_code": { "description": "Unique invitation code for joining the organization", "type": "string" }, "invite_code_expires_at": { "description": "When the current invite code expires; nil means no expiry", "type": "string" }, "invite_code_validity_days": { "description": "Invite link validity in days: 0=never, 1/7/30", "type": "integer" }, "member_limit": { "description": "Max members allowed; 0 means no limit", "type": "integer" }, "members": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationTenantMember" } }, "name": { "description": "Name of the organization", "type": "string" }, "owner": { "description": "Associations (not stored in database)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.User" } ] }, "owner_id": { "description": "User ID of the organization owner", "type": "string" }, "owner_tenant_id": { "description": "OwnerTenantID is the tenant the owner belonged to when the\norganization was created. Plan 3 (#1303) treats this tenant as\nthe org's \"owning tenant\": its membership row in\norganization_tenant_members is undeletable / unchangeable so\nthe org can never be orphaned even if the owner user later\nswitches tenants or is soft-deleted. See migration 000046.", "type": "integer" }, "require_approval": { "description": "Whether joining requires admin approval", "type": "boolean" }, "searchable": { "description": "Whether the space is open for search (discoverable; non-members can search and join by org ID)", "type": "boolean" }, "shares": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseShare" } }, "updated_at": { "description": "Last updated time", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.OrganizationJoinRequest": { "type": "object", "properties": { "created_at": { "description": "Creation time", "type": "string" }, "id": { "description": "Unique identifier", "type": "string" }, "message": { "description": "Optional message from the requester", "type": "string" }, "organization": { "description": "Associations (not stored in database)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Organization" } ] }, "organization_id": { "description": "Organization ID", "type": "string" }, "prev_role": { "description": "Previous role before upgrade (only for upgrade requests)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ] }, "request_type": { "description": "Type of request: 'join' for new member, 'upgrade' for role upgrade", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.JoinRequestType" } ] }, "requested_role": { "description": "Role requested by the applicant (admin/editor/viewer)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ] }, "review_message": { "description": "Optional message from the reviewer", "type": "string" }, "reviewed_at": { "description": "Time when the request was reviewed", "type": "string" }, "reviewed_by": { "description": "User ID of the admin who reviewed the request", "type": "string" }, "reviewer": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.User" }, "status": { "description": "Status of the request", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.JoinRequestStatus" } ] }, "tenant_id": { "description": "Tenant ID of the requester", "type": "integer" }, "updated_at": { "description": "Last updated time", "type": "string" }, "user": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.User" }, "user_id": { "description": "User ID of the requester", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.OrganizationMemberResponse": { "type": "object", "properties": { "avatar": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "joined_at": { "type": "string" }, "representative_user_id": { "type": "string" }, "role": { "type": "string" }, "tenant_id": { "type": "integer" }, "tenant_name": { "type": "string" }, "user_id": { "type": "string" }, "username": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.OrganizationResponse": { "type": "object", "properties": { "agent_share_count": { "description": "共享到该组织的智能体数量", "type": "integer" }, "avatar": { "type": "string" }, "created_at": { "type": "string" }, "description": { "type": "string" }, "has_pending_upgrade": { "description": "当前用户是否有待处理的权限升级申请", "type": "boolean" }, "id": { "type": "string" }, "invite_code": { "type": "string" }, "invite_code_expires_at": { "type": "string" }, "invite_code_validity_days": { "type": "integer" }, "is_owner": { "type": "boolean" }, "member_count": { "type": "integer" }, "member_limit": { "description": "0 = unlimited", "type": "integer" }, "my_role": { "type": "string" }, "name": { "type": "string" }, "owner_id": { "type": "string" }, "owner_tenant_id": { "description": "OwnerTenantID is the persisted owner workspace of the organization\n(Plan 3, migration 000046). Frontend uses this to identify the\n\"owner row\" in the workspace-keyed members list — comparing\nmember.tenant_id against owner_tenant_id is the post-Plan-3\nequivalent of the old member.user_id == owner_id check.", "type": "integer" }, "pending_join_request_count": { "description": "待审批加入申请数(仅管理员可见)", "type": "integer" }, "require_approval": { "type": "boolean" }, "searchable": { "type": "boolean" }, "share_count": { "description": "共享到该组织的知识库数量", "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.OrganizationSharedAgentItem": { "type": "object", "properties": { "agent": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgent" }, "disabled_by_me": { "description": "DisabledByMe: current tenant has hidden this shared agent from their conversation dropdown (per-user preference)", "type": "boolean" }, "is_mine": { "type": "boolean" }, "org_name": { "type": "string" }, "organization_id": { "type": "string" }, "permission": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" }, "share_id": { "type": "string" }, "shared_at": { "type": "string" }, "shared_by_user_id": { "type": "string" }, "shared_by_username": { "type": "string" }, "source_tenant_id": { "type": "integer" }, "web_search_ready": { "description": "WebSearchReady is resolved against the source workspace without exposing\nits provider list or credentials. Receivers must not compare the agent's\nprovider ID with their own workspace resources.", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.OrganizationTenantMember": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "joined_at": { "type": "string" }, "organization": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Organization" }, "organization_id": { "type": "string" }, "representative_user": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.User" }, "representative_user_id": { "type": "string" }, "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.PageContext": { "type": "object", "properties": { "agent_id": { "type": "string" }, "knowledge_base_id": { "type": "string" }, "knowledge_id": { "type": "string" }, "wiki_issue_ids": { "type": "array", "items": { "type": "string" } }, "wiki_slug": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ParserEngineConfig": { "type": "object", "properties": { "chat_parser_engine_rules": { "description": "ChatParserEngineRules selects parser engines for session-scoped chat\ndocuments. Knowledge bases keep their own rules in ChunkingConfig.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule" } }, "mineru_api_key": { "description": "MinerU 云 API Key", "type": "string" }, "mineru_cloud_enable_formula": { "type": "boolean" }, "mineru_cloud_enable_ocr": { "type": "boolean" }, "mineru_cloud_enable_table": { "type": "boolean" }, "mineru_cloud_language": { "type": "string" }, "mineru_cloud_model": { "description": "MinerU 云 API 解析参数", "type": "string" }, "mineru_enable_formula": { "type": "boolean" }, "mineru_enable_ocr": { "description": "MinerUEnableOCR is retained for compatibility with configurations saved\nbefore parse_method supported auto/ocr/txt.", "type": "boolean" }, "mineru_enable_table": { "type": "boolean" }, "mineru_endpoint": { "description": "MinerU 自建服务端点", "type": "string" }, "mineru_language": { "type": "string" }, "mineru_model": { "description": "以下 backend、vLLM、公式/表格、语言参数仅对 3.x 及更早版本生效。", "type": "string" }, "mineru_parse_method": { "type": "string" }, "mineru_server_api_key": { "description": "MinerU 自建解析参数。协议按服务端自动识别:4.0+ 走 V1 API,更早版本走 /file_parse。", "type": "string" }, "mineru_tier": { "description": "4.0+:flash/basic/standard/advanced,空为服务端默认", "type": "string" }, "mineru_vlm_server_url": { "description": "vLLM 服务器地址 (vlm-http-client / hybrid-http-client)", "type": "string" }, "odl_hybrid": { "description": "OpenDataLoader PDF (docreader engine); hybrid requires opendataloader-pdf-hybrid service.", "type": "string" }, "odl_hybrid_fallback": { "type": "boolean" }, "odl_hybrid_mode": { "description": "auto, full", "type": "string" }, "odl_hybrid_url": { "description": "e.g. http://odl-hybrid:5002", "type": "string" }, "odl_markdown_with_html": { "type": "boolean" }, "paddleocr_vl_cloud_model": { "description": "e.g. PaddleOCR-VL-1.6", "type": "string" }, "paddleocr_vl_cloud_token": { "description": "PaddleOCR-VL AI Studio cloud API.", "type": "string" }, "paddleocr_vl_cloud_use_chart_recognition": { "type": "boolean" }, "paddleocr_vl_cloud_use_seal_recognition": { "type": "boolean" }, "paddleocr_vl_endpoint": { "description": "PaddleOCR-VL self-hosted pipeline service (full /layout-parsing API).", "type": "string" }, "paddleocr_vl_use_chart_recognition": { "type": "boolean" }, "paddleocr_vl_use_seal_recognition": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.ParserEngineInfo": { "type": "object", "properties": { "available": { "type": "boolean" }, "description": { "type": "string" }, "fileTypes": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" }, "unavailableReason": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ParserEngineRule": { "type": "object", "properties": { "engine": { "type": "string" }, "file_types": { "type": "array", "items": { "type": "string" } }, "xlsx_first_row_as_header": { "description": "XLSXFirstRowAsHeader restores row-1 column context for flat XLSX tables.\nnil preserves the parser default; an explicit false disables the mode.", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.PendingPromptView": { "type": "object", "properties": { "created_at": { "type": "string" }, "expires_at": { "type": "string" }, "id": { "type": "string" }, "kind": { "type": "string" }, "request": { "type": "object" }, "tool_call_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.PromptCacheStatus": { "type": "string", "enum": [ "unsupported", "unreported", "miss", "hit" ], "x-enum-varnames": [ "PromptCacheStatusUnsupported", "PromptCacheStatusUnreported", "PromptCacheStatusMiss", "PromptCacheStatusHit" ] }, "github_com_Tencent_WeKnora_internal_types.PromptPlaceholder": { "type": "object", "properties": { "description": { "description": "Description explains what this placeholder represents", "type": "string" }, "label": { "description": "Label is a short label for the placeholder", "type": "string" }, "name": { "description": "Name is the placeholder name (without braces), e.g., \"query\"", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ProviderMetadata": { "type": "object", "additionalProperties": { "type": "object" } }, "github_com_Tencent_WeKnora_internal_types.QueryIntent": { "type": "string", "enum": [ "kb_search", "web_search", "greeting", "chitchat", "follow_up", "image_only", "doc_only", "summarize", "clarification" ], "x-enum-varnames": [ "IntentKBSearch", "IntentWebSearch", "IntentGreeting", "IntentChitchat", "IntentFollowUp", "IntentImageOnly", "IntentDocOnly", "IntentSummarize", "IntentClarification" ] }, "github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig": { "type": "object", "properties": { "custom_instructions": { "description": "CustomInstructions describes who the questions are for. The question format stays fixed.", "type": "string", "x-agent": "question_instructions", "x-agent-detail": true, "x-agent-max-bytes": "4000" }, "enabled": { "description": "Enabled turns question generation on. Generated questions are indexed beside the chunk.", "type": "boolean", "x-agent": "question_generation_enabled" }, "question_count": { "description": "QuestionCount is how many questions to write per chunk, from 1 to 10.", "type": "integer", "maximum": 10, "minimum": 1, "x-agent": "question_count" } } }, "github_com_Tencent_WeKnora_internal_types.QuestionOrigin": { "type": "object", "properties": { "knowledge_base_id": { "type": "string" }, "knowledge_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.QuestionSuggestionConfig": { "type": "object", "properties": { "follow_ups": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FollowUpSuggestionConfig" }, "starters": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StarterSuggestionConfig" } } }, "github_com_Tencent_WeKnora_internal_types.QueueStat": { "type": "object", "properties": { "active": { "type": "integer" }, "archived": { "type": "integer" }, "completed": { "type": "integer" }, "failed": { "type": "integer" }, "latency_ms": { "description": "LatencyMs is the age of the oldest pending task, in milliseconds.", "type": "integer" }, "memory_usage_bytes": { "description": "MemoryUsageBytes is the approximate Redis memory the queue occupies.", "type": "integer" }, "name": { "type": "string" }, "paused": { "description": "Paused reports whether the queue is paused (tasks not consumed).", "type": "boolean" }, "pending": { "type": "integer" }, "pool": { "description": "Pool is the independent worker pool that drains this queue.", "type": "string" }, "processed": { "description": "Processed / Failed are today's counters (reset daily).", "type": "integer" }, "retry": { "type": "integer" }, "scheduled": { "type": "integer" }, "size": { "description": "Size is the total number of tasks in the queue (pending + active +\nscheduled + retry + aggregating + archived).", "type": "integer" }, "weight": { "description": "Weight is the queue's scheduling weight inside its pool.", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.RegisterRequest": { "type": "object", "required": [ "email", "password", "username" ], "properties": { "email": { "type": "string" }, "password": { "type": "string", "minLength": 6 }, "username": { "type": "string", "maxLength": 50, "minLength": 2 } } }, "github_com_Tencent_WeKnora_internal_types.RegisterResponse": { "type": "object", "properties": { "message": { "type": "string" }, "success": { "type": "boolean" }, "tenant": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Tenant" }, "user": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.User" } } }, "github_com_Tencent_WeKnora_internal_types.RequestRoleUpgradeRequest": { "type": "object", "required": [ "requested_role" ], "properties": { "message": { "description": "Optional message explaining the reason", "type": "string", "maxLength": 500 }, "requested_role": { "description": "The role user wants to upgrade to", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ] } } }, "github_com_Tencent_WeKnora_internal_types.RerankDiagnostics": { "type": "object", "properties": { "applied": { "description": "Applied is true when rerank scores decided the returned order.", "type": "boolean" }, "candidate_count": { "type": "integer" }, "effective_threshold": { "type": "number" }, "error": { "description": "Error carries the reason for model_error / model_unavailable.", "type": "string" }, "images_kept": { "type": "integer" }, "images_scored": { "description": "ImagesScored counts image hits a multimodal reranker scored by their\nimage; ImagesKept the pictorial image hits kept over a text reranker's\nrejection on their vector's evidence.", "type": "integer" }, "model_id": { "description": "ModelID and ModelSource (request / tenant / auto) identify the model.", "type": "string" }, "model_source": { "type": "string" }, "outcome": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RerankOutcome" }, "result_count": { "type": "integer" }, "threshold": { "description": "Threshold is the requested minimum score; EffectiveThreshold is the one\napplied after degradation.", "type": "number" }, "top_score": { "description": "TopScore is the best rerank model score among the candidates.", "type": "number" } } }, "github_com_Tencent_WeKnora_internal_types.RerankOptions": { "type": "object", "properties": { "enabled": { "description": "Enabled turns the rerank stage off when explicitly false. Nil means on.", "type": "boolean" }, "model_id": { "description": "ModelID selects the rerank model. Empty falls back to the tenant\nRetrievalConfig, then to the first rerank model of the tenant.", "type": "string" }, "threshold": { "description": "Threshold is the minimum rerank model score. Nil uses the tenant\nRetrievalConfig. A pointer because 0 and negative scores are valid.", "type": "number" }, "top_k": { "description": "TopK caps the reranked results. Zero uses the endpoint's result count.", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.RerankOutcome": { "type": "string", "enum": [ "ok", "threshold_degraded", "fallback_top1", "all_below_threshold", "model_error", "model_unavailable", "no_model", "disabled", "no_candidates" ], "x-enum-varnames": [ "RerankOutcomeOK", "RerankOutcomeThresholdDegraded", "RerankOutcomeFallbackTop1", "RerankOutcomeAllBelowThreshold", "RerankOutcomeModelError", "RerankOutcomeModelUnavailable", "RerankOutcomeNoModel", "RerankOutcomeDisabled", "RerankOutcomeNoCandidates" ] }, "github_com_Tencent_WeKnora_internal_types.Resource": { "type": "object", "properties": { "description": { "description": "Optional description", "type": "string" }, "external_id": { "description": "Unique identifier in the external system", "type": "string" }, "has_children": { "description": "Whether this resource has children that can be expanded", "type": "boolean" }, "metadata": { "description": "Additional metadata", "type": "object", "additionalProperties": true }, "modified_at": { "description": "Last modified time in external system", "type": "string" }, "name": { "description": "Display name", "type": "string" }, "parent_id": { "description": "For hierarchical resources (parent ID if applicable)", "type": "string" }, "type": { "description": "Resource type (document, folder, space, page, etc.)", "type": "string" }, "url": { "description": "URL to access in external system", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ResourceCountsByOrgResponse": { "type": "object", "properties": { "agents": { "type": "object", "properties": { "by_organization": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "knowledge_bases": { "type": "object", "properties": { "by_organization": { "type": "object", "additionalProperties": { "type": "integer" } } } } } }, "github_com_Tencent_WeKnora_internal_types.RetrievalConfig": { "type": "object", "properties": { "embedding_top_k": { "description": "EmbeddingTopK is the maximum number of chunks returned by vector search (default: 50)", "type": "integer" }, "keyword_threshold": { "description": "KeywordThreshold is the minimum keyword match score (0-1, default: 0.3)", "type": "number" }, "rerank_model_id": { "description": "RerankModelID is the ID of the rerank model to use (required for search)", "type": "string" }, "rerank_threshold": { "description": "RerankThreshold is the minimum rerank score (-10 to 10, default: 0.2)", "type": "number" }, "rerank_top_k": { "description": "RerankTopK is the maximum number of results after reranking (default: 10)", "type": "integer" }, "rrf_k": { "description": "RRFK is the smoothing constant of Reciprocal Rank Fusion. Larger values\nflatten the curve, reducing the bias towards top-1 results.\nDefault: 60. Sensible range: 30..100 depending on corpus size.", "type": "integer" }, "rrf_keyword_weight": { "description": "RRFKeywordWeight is the keyword counterpart. Default: 0.3.", "type": "number" }, "rrf_vector_weight": { "description": "RRFVectorWeight is the weight applied to the vector retriever inside RRF.\nRRFVectorWeight + RRFKeywordWeight should usually sum to 1.0 but the math\nworks for any positive weights. Default: 0.7.", "type": "number" }, "vector_threshold": { "description": "VectorThreshold is the minimum vector similarity score (0-1, default: 0.15)", "type": "number" } } }, "github_com_Tencent_WeKnora_internal_types.RetrievalMeta": { "type": "object", "properties": { "rerank": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RerankDiagnostics" } } }, "github_com_Tencent_WeKnora_internal_types.RetrievalMetrics": { "type": "object", "properties": { "map": { "description": "Mean Average Precision", "type": "number" }, "mrr": { "description": "Mean Reciprocal Rank", "type": "number" }, "ndcg10": { "description": "Normalized Discounted Cumulative Gain at 10", "type": "number" }, "ndcg3": { "description": "Normalized Discounted Cumulative Gain at 3", "type": "number" }, "precision": { "description": "Precision score", "type": "number" }, "recall": { "description": "Recall score", "type": "number" } } }, "github_com_Tencent_WeKnora_internal_types.RetrieverEngineParams": { "type": "object", "properties": { "retriever_engine_type": { "description": "Retriever engine type", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngineType" } ] }, "retriever_type": { "description": "Retriever type", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverType" } ] } } }, "github_com_Tencent_WeKnora_internal_types.RetrieverEngineType": { "type": "string", "enum": [ "postgres", "elasticsearch", "infinity", "elasticfaiss", "qdrant", "milvus", "weaviate", "doris", "sqlite", "tencent_vectordb", "opensearch" ], "x-enum-varnames": [ "PostgresRetrieverEngineType", "ElasticsearchRetrieverEngineType", "InfinityRetrieverEngineType", "ElasticFaissRetrieverEngineType", "QdrantRetrieverEngineType", "MilvusRetrieverEngineType", "WeaviateRetrieverEngineType", "DorisRetrieverEngineType", "SQLiteRetrieverEngineType", "TencentVectorDBRetrieverEngineType", "OpenSearchRetrieverEngineType" ] }, "github_com_Tencent_WeKnora_internal_types.RetrieverEngines": { "type": "object", "properties": { "engines": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngineParams" } } } }, "github_com_Tencent_WeKnora_internal_types.RetrieverType": { "type": "string", "enum": [ "keywords", "vector", "websearch" ], "x-enum-comments": { "KeywordsRetrieverType": "Keywords retriever", "VectorRetrieverType": "Vector retriever", "WebSearchRetrieverType": "Web search retriever" }, "x-enum-descriptions": [ "Keywords retriever", "Vector retriever", "Web search retriever" ], "x-enum-varnames": [ "KeywordsRetrieverType", "VectorRetrieverType", "WebSearchRetrieverType" ] }, "github_com_Tencent_WeKnora_internal_types.ReviewJoinRequestRequest": { "type": "object", "properties": { "approved": { "type": "boolean" }, "message": { "type": "string", "maxLength": 500 }, "role": { "description": "Optional: role to assign when approving; overrides applicant's requested role", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ] } } }, "github_com_Tencent_WeKnora_internal_types.RuntimeTaskAction": { "type": "string", "enum": [ "cancel", "run_now", "delete" ], "x-enum-varnames": [ "RuntimeTaskActionCancel", "RuntimeTaskActionRunNow", "RuntimeTaskActionDelete" ] }, "github_com_Tencent_WeKnora_internal_types.RuntimeTaskInfo": { "type": "object", "properties": { "allowed_actions": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RuntimeTaskAction" } }, "completed_at": { "type": "string" }, "data_source_id": { "type": "string" }, "deadline": { "type": "string" }, "enqueued_at": { "type": "string" }, "id": { "type": "string" }, "is_orphaned": { "type": "boolean" }, "knowledge_base_id": { "type": "string" }, "knowledge_count": { "type": "integer" }, "knowledge_id": { "type": "string" }, "last_error": { "type": "string" }, "last_failed_at": { "type": "string" }, "max_retry": { "type": "integer" }, "next_process_at": { "type": "string" }, "queue": { "type": "string" }, "retried": { "type": "integer" }, "source_id": { "type": "string" }, "source_kb_id": { "type": "string" }, "started_at": { "type": "string" }, "state": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RuntimeTaskState" }, "sync_log_id": { "type": "string" }, "target_id": { "type": "string" }, "target_kb_id": { "type": "string" }, "task_id": { "type": "string" }, "tenant_id": { "type": "integer" }, "type": { "type": "string" }, "worker": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.RuntimeTaskState": { "type": "string", "enum": [ "pending", "active", "scheduled", "retry", "archived", "completed" ], "x-enum-varnames": [ "RuntimeTaskPending", "RuntimeTaskActive", "RuntimeTaskScheduled", "RuntimeTaskRetry", "RuntimeTaskArchived", "RuntimeTaskCompleted" ] }, "github_com_Tencent_WeKnora_internal_types.S3EngineConfig": { "type": "object", "properties": { "access_key": { "type": "string" }, "bucket_name": { "type": "string" }, "endpoint": { "type": "string" }, "force_path_style": { "type": "boolean" }, "path_prefix": { "type": "string" }, "region": { "type": "string" }, "secret_key": { "type": "string" }, "use_ssl": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.SandboxCheckpoint": { "type": "object", "properties": { "commit_sha": { "type": "string" }, "committed_at": { "type": "string" }, "sandbox_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SandboxNetworkPolicy": { "type": "object", "properties": { "allow_out": { "description": "AllowOut accepts IPv4, IPv4 CIDR, a DNS name, or a single-label\nwildcard such as \"*.example.com\". Domain entries are only meaningful\ntogether with a deny-all; see ValidateSandboxNetworkPolicy.", "type": "array", "items": { "type": "string" } }, "allow_public_inbound": { "description": "AllowPublicInbound is accepted on the wire for old payloads and then\ncleared. Inbound is always credential-required; a true value has no\nruntime effect.", "type": "boolean" }, "cube_rules": { "description": "CubeRules are validated whenever present and consumed only by the Cube\nprovider adapter.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CubeEgressRule" } }, "deny_egress_by_default": { "description": "DenyEgressByDefault installs a 0.0.0.0/0 deny-all, after which only\nAllowOut (and L7 rule targets) can reach the network. false allows\npublic egress, which is what skill installs need.", "type": "boolean" }, "deny_out": { "description": "DenyOut accepts IPv4 and IPv4 CIDR only. Neither provider can deny a\ndomain: denial is a pure longest-prefix match on the destination IP.", "type": "array", "items": { "type": "string" } }, "e2b_host_rules": { "description": "E2BHostRules are validated whenever present and consumed only by the E2B\nprovider adapter.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.E2BHostRule" } } } }, "github_com_Tencent_WeKnora_internal_types.SearchParams": { "type": "object", "properties": { "disable_keywords_match": { "type": "boolean" }, "disable_vector_match": { "type": "boolean" }, "keyword_threshold": { "type": "number" }, "knowledge_base_ids": { "description": "KnowledgeBaseIDs overrides the single KB ID passed to HybridSearch,\nallowing a single retrieval call to span multiple KBs that share the\nsame embedding model. When empty, HybridSearch uses its own id parameter.", "type": "array", "items": { "type": "string" } }, "knowledge_ids": { "type": "array", "items": { "type": "string" } }, "match_count": { "type": "integer" }, "only_recommended": { "type": "boolean" }, "query_embedding": { "type": "array", "items": { "type": "number" } }, "query_text": { "description": "QueryText is required unless query_embedding is provided, keyword matching is disabled,\nand vector matching remains enabled.", "type": "string" }, "rerank": { "description": "Rerank, when present and enabled, reranks the fused candidates before\ntruncating to MatchCount. Only the hybrid-search API reads it; internal\ncallers rerank on their own.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RerankOptions" } ] }, "scope_tag_ids": { "type": "array", "items": { "type": "string" } }, "skip_context_enrichment": { "description": "SkipContextEnrichment skips fetching parent, nearby, and relation chunks\nin processSearchResults. Used by the chat pipeline where context assembly\nis handled separately in the merge stage.", "type": "boolean" }, "tag_ids": { "description": "Tag IDs for filtering (used for FAQ priority filtering)", "type": "array", "items": { "type": "string" } }, "vector_threshold": { "type": "number" } } }, "github_com_Tencent_WeKnora_internal_types.SearchResult": { "type": "object", "properties": { "chunk_index": { "description": "Chunk index", "type": "integer" }, "chunk_metadata": { "description": "ChunkMetadata stores chunk-level metadata (e.g., generated questions)", "type": "object" }, "chunk_type": { "description": "Chunk 类型", "type": "string" }, "content": { "description": "Content", "type": "string" }, "end_at": { "description": "End at", "type": "integer" }, "id": { "description": "ID", "type": "string" }, "image_info": { "description": "图片信息 (JSON 格式)", "type": "string" }, "knowledge_base_id": { "description": "KnowledgeBaseID is the ID of the knowledge base this result belongs to", "type": "string" }, "knowledge_channel": { "description": "KnowledgeChannel indicates through which channel the knowledge was ingested (web, api, wechat, etc.)", "type": "string" }, "knowledge_custom_metadata": { "description": "KnowledgeCustomMetadata is user-authored context safe to expose to models.", "type": "string" }, "knowledge_description": { "description": "KnowledgeDescription is the description of the knowledge document", "type": "string" }, "knowledge_filename": { "description": "Knowledge file name\nUsed for file type knowledge, contains the original file name", "type": "string" }, "knowledge_id": { "description": "Knowledge ID", "type": "string" }, "knowledge_source": { "description": "Knowledge source\nUsed to indicate the source of the knowledge, such as \"url\"", "type": "string" }, "knowledge_title": { "description": "Knowledge title", "type": "string" }, "match_type": { "description": "Match type", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MatchType" } ] }, "matched_content": { "description": "MatchedContent is the actual content that was matched in vector search\nFor FAQ: this is the matched question text (standard or similar question)", "type": "string" }, "matched_images": { "description": "MatchedImages survives merging, deduplication and stored reference replay.\nIt contains storage references, never image bytes.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MatchedImage" } }, "metadata": { "description": "Metadata", "type": "object", "additionalProperties": { "type": "string" } }, "parent_chunk_id": { "description": "父 Chunk ID", "type": "string" }, "score": { "description": "Score", "type": "number" }, "seq": { "description": "Seq", "type": "integer" }, "source_locators": { "description": "SourceLocators point back into the original file for citation\nnavigation. Merged results carry the union of their chunks' locators.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SourceLocator" } }, "start_at": { "description": "Start at", "type": "integer" }, "sub_chunk_id": { "description": "SubChunkIndex", "type": "array", "items": { "type": "string" } } } }, "github_com_Tencent_WeKnora_internal_types.SearchableOrganizationItem": { "type": "object", "properties": { "agent_share_count": { "description": "共享到该组织的智能体数量", "type": "integer" }, "avatar": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "is_already_member": { "type": "boolean" }, "member_count": { "type": "integer" }, "member_limit": { "description": "0 = unlimited", "type": "integer" }, "name": { "type": "string" }, "require_approval": { "type": "boolean" }, "share_count": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.Session": { "type": "object", "properties": { "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "description": { "description": "Description", "type": "string" }, "forked_from_message_id": { "description": "ForkedFromMessageID is the user or assistant message, IN THE PARENT\nSESSION, that the fork branched at. For a user point, messages strictly\nbefore it were copied here. For an assistant point, that answer is\nincluded so the branch continues after it.", "type": "string" }, "host_workspace_dir": { "description": "HostWorkspaceDir is the user-selected project directory this session\noperates in, for the WeKnora Lite host sandbox only. Empty means the session\ngets an auto-allocated workspace instead.\n\nWritten once at creation and never updated: re-pointing a live session\nat a different directory would leave its transcript describing files\nthat are no longer there. Standard edition never writes it.", "type": "string" }, "id": { "description": "ID", "type": "string" }, "im_platform": { "description": "IMPlatform is the originating IM platform (e.g. \"feishu\", \"wecom\") when\nthis session is bound to an IM channel. It is not stored on the sessions\ntable (it lives in im_channel_sessions) and is populated on read so the\nWeb console can classify a session's origin folder without a list query.", "type": "string" }, "is_pinned": { "description": "IsPinned indicates whether the session is pinned in the list.", "type": "boolean" }, "kind": { "description": "Kind is empty for ordinary chats and SessionKindAssistant for assistant\nconversations; it is set at creation and never updated.", "type": "string" }, "last_request_state": { "description": "LastRequestState records the input-bar state used the last time this\nsession sent a question (agent, model, KB scope, web search, MCPs).\nPersisted on every successful POST to /knowledge-chat or /agent-chat so\nthat reopening the session can restore the original request context to\nthe chat UI. Stored in the legacy sessions.agent_config JSONB column to\navoid a new migration; the shape used today is `SessionLastRequestState`.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SessionLastRequestState" } ] }, "parent_session_id": { "description": "ParentSessionID names the session this one was forked from. Empty for\nordinary sessions. Deliberately not a foreign key: the parent may be\ndeleted while the branch lives on, and a branch must not cascade away\nwith it. A dangling value simply renders as an ordinary session.", "type": "string" }, "pinned_at": { "description": "PinnedAt records when the session was pinned; nil when not pinned.", "type": "string" }, "sandbox_config_id": { "description": "SandboxConfigID pins which sandbox config this session's CURRENT live\nsandbox was created on. Empty means no live sandbox;\nSandboxConfigIDGlobalDefault means the deployment-wide default config.\n\nThis is an ephemeral pin that dies with the sandbox, not a permanent\nowner: sessions outlive sandboxes by months, so treating it as\npermanent would make \"no session references this config\" never true.", "type": "string" }, "tenant_id": { "description": "Workspace ID", "type": "integer" }, "title": { "description": "Title", "type": "string" }, "updated_at": { "type": "string" }, "user_id": { "description": "UserID is the owner scope for this session. WeKnora user UUIDs, API\nexternal-user principals, and embed visitor principals all use this column.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SessionLastRequestState": { "type": "object", "properties": { "agent_enabled": { "type": "boolean" }, "agent_id": { "type": "string" }, "knowledge_base_ids": { "type": "array", "items": { "type": "string" } }, "knowledge_ids": { "type": "array", "items": { "type": "string" } }, "local_browser_enabled": { "type": "boolean" }, "mcp_service_ids": { "type": "array", "items": { "type": "string" } }, "mentioned_items": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MentionedItem" } }, "model_id": { "type": "string" }, "reasoning_effort": { "type": "string" }, "skill_names": { "type": "array", "items": { "type": "string" } }, "tag_ids": { "type": "array", "items": { "type": "string" } }, "web_search_enabled": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.ShareKnowledgeBaseRequest": { "type": "object", "required": [ "organization_id", "permission" ], "properties": { "organization_id": { "type": "string" }, "permission": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } } }, "github_com_Tencent_WeKnora_internal_types.SharedAgentInfo": { "type": "object", "properties": { "agent": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgent" }, "disabled_by_me": { "description": "DisabledByMe: current tenant has hidden this shared agent from their conversation dropdown (per-user preference)", "type": "boolean" }, "org_name": { "type": "string" }, "organization_id": { "type": "string" }, "permission": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" }, "share_id": { "type": "string" }, "shared_at": { "type": "string" }, "shared_by_user_id": { "type": "string" }, "shared_by_username": { "type": "string" }, "source_tenant_id": { "type": "integer" }, "web_search_ready": { "description": "WebSearchReady is resolved against the source workspace without exposing\nits provider list or credentials. Receivers must not compare the agent's\nprovider ID with their own workspace resources.", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.SkillImageConfig": { "type": "object", "properties": { "base_template_id": { "description": "BaseTemplateID is the template this chain was originally built from;\nthe rebuild path starts over from it.", "type": "string" }, "built_at": { "description": "BuiltAt records when this generation was produced.", "type": "string" }, "generation": { "description": "Generation increments on every successful install/remove, for naming\nand troubleshooting.", "type": "integer" }, "owner_fingerprint": { "description": "OwnerFingerprint identifies the provider account that owns the snapshot.\nSnapshots are invisible across accounts, so a mismatch means \"fall back\nto the base template\" rather than \"fail\".", "type": "string" }, "snapshot_id": { "description": "SnapshotID is the currently effective snapshot; empty = base template.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SourceLocator": { "type": "object", "properties": { "bbox": { "description": "BBox is [x0, y0, x1, y1] as fractions of the page width and height,\norigin at the top-left corner of the rendered page.", "type": "array", "items": { "type": "number" } }, "block": { "description": "Block is the 1-based index among a Word file's body paragraphs and tables.", "type": "integer" }, "end": { "type": "integer" }, "end_ms": { "type": "integer" }, "mapping": { "description": "Mapping records verified text-to-source alignment. Empty means legacy.", "type": "string" }, "page": { "description": "Page is the 1-based PDF page.", "type": "integer" }, "partial": { "description": "Partial means some of the chunk has no source mapping.", "type": "boolean" }, "quote": { "description": "Quote is the complete cited overlap as parsed. Viewers match it\ninside the rendered original and against the\nanswer sentence that cites the chunk.", "type": "string" }, "row_end": { "type": "integer" }, "row_start": { "type": "integer" }, "section": { "description": "Section is the 1-based EPUB spine index.", "type": "integer" }, "sheet": { "description": "Sheet is the spreadsheet sheet name; RowStart/RowEnd are its 1-based\nrow numbers as shown by spreadsheet applications.", "type": "string" }, "slide": { "description": "Slide is the 1-based slide number in presentation order.", "type": "integer" }, "source_hash": { "description": "SourceHash binds the locator to the knowledge record’s source revision hash.", "type": "string" }, "source_id": { "description": "SourceID identifies a block within the parser result, not a rendered item.", "type": "string" }, "start": { "description": "Start/End are rune offsets into the original text file.", "type": "integer" }, "start_ms": { "description": "StartMs/EndMs bound an audio segment.", "type": "integer" }, "title": { "description": "Title names the section or slide when the source has one.", "type": "string" }, "type": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SpanTreeNode": { "type": "object", "properties": { "attempt": { "type": "integer" }, "children": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SpanTreeNode" } }, "created_at": { "type": "string" }, "duration_ms": { "type": "integer" }, "error_code": { "type": "string" }, "error_message": { "type": "string" }, "finished_at": { "type": "string" }, "input": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.JSONMap" }, "kind": { "type": "string" }, "knowledge_id": { "type": "string" }, "metadata": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.JSONMap" }, "name": { "type": "string" }, "output": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.JSONMap" }, "parent_span_id": { "type": "string" }, "span_id": { "type": "string" }, "started_at": { "type": "string" }, "status": { "type": "string" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.StarterSuggestionConfig": { "type": "object", "properties": { "count": { "type": "integer" }, "enabled": { "type": "boolean" }, "items": { "type": "array", "items": { "type": "string" } }, "mode": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.StorageBackend": { "type": "object", "properties": { "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageBackendConfig" }, "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "id": { "type": "string" }, "legacy_alias": { "type": "boolean" }, "name": { "type": "string" }, "provider": { "type": "string" }, "source": { "type": "string" }, "status": { "type": "string" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.StorageBackendConfig": { "type": "object", "properties": { "access_key_id": { "type": "string" }, "app_id": { "type": "string" }, "bucket_name": { "type": "string" }, "endpoint": { "type": "string" }, "force_path_style": { "type": "boolean" }, "mode": { "type": "string" }, "path_prefix": { "type": "string" }, "region": { "type": "string" }, "secret_access_key": { "type": "string" }, "temp_bucket_name": { "type": "string" }, "temp_region": { "type": "string" }, "use_ssl": { "type": "boolean" }, "use_temp_bucket": { "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.StorageConfig": { "type": "object", "properties": { "app_id": { "description": "App ID (COS specific)", "type": "string" }, "bucket_name": { "description": "Bucket Name", "type": "string" }, "endpoint": { "description": "Endpoint (S3 specific) - e.g., s3.amazonaws.com, oss-cn-hangzhou.aliyuncs.com", "type": "string" }, "force_path_style": { "description": "ForcePathStyle (S3 specific) - whether to use path-style URLs", "type": "boolean" }, "path_prefix": { "description": "Path Prefix", "type": "string" }, "provider": { "description": "Provider: \"cos\", \"minio\", \"s3\"", "type": "string" }, "region": { "description": "Region", "type": "string" }, "secret_id": { "description": "Secret ID (COS) / Access Key ID (S3, MinIO)", "type": "string" }, "secret_key": { "description": "Secret Key (COS) / Secret Access Key (S3, MinIO)", "type": "string" }, "use_ssl": { "description": "UseSSL (S3 specific) - whether to use HTTPS", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.StorageEngineConfig": { "type": "object", "properties": { "cos": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.COSEngineConfig" }, "default_provider": { "description": "\"local\", \"minio\", \"cos\", \"tos\", \"s3\", \"oss\", \"ks3\", \"obs\"", "type": "string" }, "ks3": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KS3EngineConfig" }, "local": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.LocalEngineConfig" }, "minio": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MinIOEngineConfig" }, "obs": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OBSEngineConfig" }, "oss": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OSSEngineConfig" }, "s3": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.S3EngineConfig" }, "tos": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TOSEngineConfig" } } }, "github_com_Tencent_WeKnora_internal_types.StorageProviderConfig": { "type": "object", "properties": { "provider": { "description": "\"local\", \"minio\", \"cos\", \"tos\", \"s3\", \"oss\", \"ks3\", \"obs\"", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SubmitJoinRequestRequest": { "type": "object", "required": [ "invite_code" ], "properties": { "invite_code": { "type": "string", "maxLength": 32, "minLength": 8 }, "message": { "type": "string", "maxLength": 500 }, "role": { "description": "Optional: role the applicant requests (admin/editor/viewer); default viewer", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ] } } }, "github_com_Tencent_WeKnora_internal_types.SuggestedQuestion": { "type": "object", "properties": { "knowledge_base_id": { "description": "来源知识库ID(仅 faq/document/wiki 来源时有值)", "type": "string" }, "knowledge_id": { "description": "来源文档ID(仅 faq/document 来源时有值)", "type": "string" }, "question": { "description": "问题文本", "type": "string" }, "source": { "description": "来源类型: \"agent_config\", \"faq\", \"document\", \"wiki\"", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SuggestionAttribution": { "type": "object", "properties": { "question_id": { "type": "string" }, "suggestion_set_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SuggestionItem": { "type": "object", "properties": { "category": { "type": "string" }, "id": { "type": "string" }, "knowledge_base_ids": { "type": "array", "items": { "type": "string" } }, "source": { "type": "string" }, "text": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SummaryConfig": { "type": "object", "properties": { "context_template": { "description": "Context template", "type": "string" }, "frequency_penalty": { "description": "Frequency penalty", "type": "number" }, "max_completion_tokens": { "description": "Max completion tokens", "type": "integer" }, "max_tokens": { "description": "Max tokens", "type": "integer" }, "no_match_prefix": { "description": "No match prefix", "type": "string" }, "presence_penalty": { "description": "Presence penalty", "type": "number" }, "prompt": { "description": "Prompt", "type": "string" }, "reasoning_effort": { "description": "ReasoningEffort is the graded thinking level; empty falls back to Thinking.", "type": "string" }, "repeat_penalty": { "description": "Repeat penalty", "type": "number" }, "seed": { "description": "Seed", "type": "integer" }, "temperature": { "description": "Temperature", "type": "number" }, "thinking": { "description": "Thinking - whether to enable thinking mode", "type": "boolean" }, "top_k": { "description": "TopK", "type": "integer" }, "top_p": { "description": "TopP", "type": "number" } } }, "github_com_Tencent_WeKnora_internal_types.SyncLog": { "type": "object", "properties": { "created_at": { "description": "Creation timestamp (usually same as StartedAt)", "type": "string" }, "data_source_id": { "description": "Reference to the data source", "type": "string" }, "error_message": { "description": "Error details if status is \"failed\"", "type": "string" }, "finished_at": { "description": "Sync completion time", "type": "string" }, "id": { "description": "Unique identifier", "type": "string" }, "items_created": { "description": "New items created in knowledge base", "type": "integer" }, "items_deleted": { "description": "Items deleted from knowledge base", "type": "integer" }, "items_failed": { "description": "Items that failed to sync", "type": "integer" }, "items_skipped": { "description": "Items skipped (no changes detected)", "type": "integer" }, "items_total": { "description": "Total items fetched from source", "type": "integer" }, "items_updated": { "description": "Existing items updated", "type": "integer" }, "result": { "description": "Detailed sync result (JSON-encoded)", "type": "object" }, "started_at": { "description": "Sync start time", "type": "string" }, "status": { "description": "Sync status: running, success, partial, failed, canceled", "type": "string" }, "tenant_id": { "description": "Workspace ID", "type": "integer" }, "updated_at": { "description": "Last update timestamp", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.SystemSetting": { "type": "object", "properties": { "category": { "description": "Category groups settings in the management UI (\"limits\", \"agent\",\n\"auth\", ...). Free-form string so adding a new category is a\ndata-only change.", "type": "string" }, "created_at": { "type": "string" }, "description": { "type": "string" }, "enum": { "description": "Enum is populated by the service layer (NOT persisted) from the\nin-code registry. Empty/nil means \"free-form input\"; non-empty\nmeans the UI should render a select with these options. Tagged\n`gorm:\"-\"` so GORM never tries to read/write the column.", "type": "array", "items": { "type": "string" } }, "id": { "type": "integer" }, "is_secret": { "description": "IsSecret reserves UI affordances for P3 (mask + reveal-with-confirm).\nIn P1 every row is is_secret=false; service Update accepts the\ncolumn but does not yet enforce special handling.", "type": "boolean" }, "key": { "type": "string" }, "last_modified_by": { "type": "string" }, "last_modified_by_name": { "description": "LastModifiedByName is a display label resolved from LastModifiedBy\n(the user's UUID) at handler time — username when available,\notherwise email. Empty for virtual rows that were never persisted\n(LastModifiedBy=\"\"). Not stored: derived per request so renaming\na user reflects on the next reload without a backfill job.", "type": "string" }, "requires_restart": { "description": "RequiresRestart reserves UI affordances for P3 (banner \"this\nchange won't take effect until the next restart\"). In P1 the\nonly seeded key is per-request, so always false.", "type": "boolean" }, "updated_at": { "type": "string" }, "value": { "type": "object" }, "value_type": { "description": "ValueType is one of \"int\", \"string\", \"bool\". Service layer rejects\nupdates whose payload type does not match; UI uses it to pick\nInputNumber vs Input vs Switch.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.TOSEngineConfig": { "type": "object", "properties": { "access_key": { "type": "string" }, "bucket_name": { "type": "string" }, "endpoint": { "type": "string" }, "path_prefix": { "type": "string" }, "region": { "type": "string" }, "secret_key": { "type": "string" }, "temp_bucket_name": { "type": "string" }, "temp_region": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.Tenant": { "type": "object", "properties": { "assistant_config": { "description": "Assistant config: display name and access ceiling of the WeKnora assistant", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AssistantConfig" } ] }, "business": { "description": "Business", "type": "string" }, "chat_history_config": { "description": "Chat history config: knowledge base configuration for indexing and searching chat messages via vector search", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChatHistoryConfig" } ] }, "context_config": { "description": "Global Context configuration for this workspace (default for all sessions)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ContextConfig" } ] }, "created_at": { "description": "Creation time", "type": "string" }, "credentials": { "description": "Credentials config: third-party provider credentials (e.g. WeKnoraCloud AppID/AppSecret)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CredentialsConfig" } ] }, "default_storage_backend_id": { "description": "DefaultStorageBackendID is the workspace default concrete storage instance.", "type": "string" }, "deleted_at": { "description": "Deletion time", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "description": { "description": "Description", "type": "string" }, "id": { "description": "ID", "type": "integer" }, "memory_config": { "description": "Memory config: workspace switch for cross-session long-term memory", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryConfig" } ] }, "name": { "description": "Name", "type": "string" }, "parser_engine_config": { "description": "Parser engine config overrides (MinerU endpoint, API key, etc.). Used when parsing documents; overrides env.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineConfig" } ] }, "retrieval_config": { "description": "Retrieval config: global search/retrieval parameters shared by knowledge search and message search", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrievalConfig" } ] }, "retriever_engines": { "description": "Retriever engines", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngines" } ] }, "status": { "description": "Status", "type": "string" }, "storage_engine_config": { "description": "Storage engine config: parameters for Local, MinIO, COS. Used for document/file storage and docreader.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageEngineConfig" } ] }, "storage_quota": { "description": "Storage quota (Bytes), default is 10GB, including vector, original file, text, index, etc.", "type": "integer" }, "storage_used": { "description": "Storage used (Bytes)", "type": "integer" }, "updated_at": { "description": "Last updated time", "type": "string" }, "web_search_config": { "description": "Global WebSearch configuration for this workspace", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchConfig" } ] } } }, "github_com_Tencent_WeKnora_internal_types.TenantInvitationResponse": { "type": "object", "properties": { "accepted_count": { "description": "AcceptedCount mirrors TenantInvitation.AcceptedCount. Surfaced\nfor share-link rows so the management UI can show \"N 人已通过此\n链接加入\"; informational only for per-user invitations.", "type": "integer" }, "created_at": { "type": "string" }, "expires_at": { "type": "string" }, "id": { "type": "integer" }, "invite_url": { "description": "InviteURL is set on share-link rows that are still pending.\nComposed by the handler from FrontendBaseURL + the row's plaintext\ntoken, so the management UI can render a \"copy link\" button per\nrow without ever exposing the raw token through the JSON wire.", "type": "string" }, "invited_by": { "type": "string" }, "invitee_email": { "type": "string" }, "invitee_name": { "type": "string" }, "invitee_user_id": { "type": "string" }, "inviter_email": { "type": "string" }, "inviter_name": { "type": "string" }, "is_share_link": { "description": "IsShareLink is a convenience flag so the SPA doesn't have to\nspecial-case \"invitee_user_id == ''\" everywhere when distinguishing\nshare-link rows from per-user invitations.", "type": "boolean" }, "message": { "type": "string" }, "responded_at": { "type": "string" }, "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole" }, "status": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantInvitationStatus" }, "tenant_id": { "type": "integer" }, "tenant_name": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.TenantInvitationStatus": { "type": "string", "enum": [ "pending", "accepted", "declined", "revoked", "expired" ], "x-enum-varnames": [ "TenantInvitationStatusPending", "TenantInvitationStatusAccepted", "TenantInvitationStatusDeclined", "TenantInvitationStatusRevoked", "TenantInvitationStatusExpired" ] }, "github_com_Tencent_WeKnora_internal_types.TenantInviteCandidate": { "type": "object", "properties": { "representative_avatar": { "type": "string" }, "representative_email": { "type": "string" }, "representative_user_id": { "type": "string" }, "representative_username": { "type": "string" }, "tenant_id": { "type": "integer" }, "tenant_name": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.TenantRole": { "type": "string", "enum": [ "owner", "admin", "contributor", "viewer" ], "x-enum-varnames": [ "TenantRoleOwner", "TenantRoleAdmin", "TenantRoleContributor", "TenantRoleViewer" ] }, "github_com_Tencent_WeKnora_internal_types.TenantSandboxConfig": { "type": "object", "properties": { "allow_private_endpoints": { "description": "AllowPrivateEndpoints permits this workspace config to reach RFC1918 or\nloopback cluster endpoints. Link-local/cloud-metadata addresses remain\nblocked. It is explicit in the UI instead of hidden in process env.", "type": "boolean" }, "cube": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CubeSandboxConfig" }, "default_timeout_sec": { "description": "DefaultTimeoutSec is the per-execution timeout in seconds. 0 uses the\nprogram's built-in default.", "type": "integer" }, "desktop_enabled": { "description": "DesktopEnabled declares that this config's base template is a desktop\nimage (XFCE + x11vnc + websockify). It is NOT a second template: a\nconfig has exactly one boot target, and skill snapshots stack on top of\nthis base generation after generation. Flipping it changes the base, so\nany installed skills must be rebuilt from the new one.", "type": "boolean" }, "docker": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.DockerSandboxConfig" }, "e2b": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.E2BSandboxConfig" }, "env_vars": { "description": "EnvVars are additional environment variables injected into every\nsandbox created for this tenant. 🔒 Values are encrypted at rest.\nThese become visible to all scripts running in the tenant's\nsandboxes — do not place secrets here that scripts must not access.", "type": "object", "additionalProperties": { "type": "string" } }, "network": { "description": "Network is the outbound/inbound network policy applied to every sandbox\ncreated from this config — chat sessions, skill installs and deep\nconnectivity probes alike. nil and the zero value mean the same thing:\noutbound egress allowed, inbound public access closed.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SandboxNetworkPolicy" } ] }, "sandbox_type": { "description": "SandboxType is cube, e2b, or docker; disabled is the hidden policy row.", "type": "string" }, "skill_image": { "description": "SkillImage points at the snapshot that carries this config's installed\nskills. Empty means \"use the base template\". Written only by the skill\ninstall/remove path: MergeSandboxConfigForUpdate ignores client values\nso a settings-form save cannot wipe or plant the pointer.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SkillImageConfig" } ] }, "skill_rollout": { "description": "SkillRollout decides whether sessions that already hold a sandbox of\nthis config rebuild after a skill install or removal. Empty and\nSkillRolloutNextTurn rebuild on the next chat turn. SkillRolloutNewSession\nleaves those sandboxes on the previous image; only sessions that start\nafterwards boot the new snapshot.", "type": "string" }, "terminal_idle_disconnect_sec": { "description": "TerminalIdleDisconnectSec is how long an interactive terminal or\ndesktop may go without user activity before WeKnora closes the\nconnection so the sandbox can pause on its provider TTL. Terminal\ncounts keystrokes and PTY output; desktop counts mouse and keyboard.\n0 uses the built-in default (15 minutes). Not an identity field.", "type": "integer" }, "volume_mount": { "description": "VolumeMount configures an optional shared volume mounted into every\nsandbox created for this tenant. Currently used for tenant-installed\nskills, but the configuration itself is skill-agnostic and can serve\nany volume-mount use case (shared datasets, pre-installed toolchains,\netc.).", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VolumeMountConfig" } ] } } }, "github_com_Tencent_WeKnora_internal_types.TokenUsage": { "type": "object", "properties": { "cache_miss_tokens": { "type": "integer" }, "cache_read_tokens": { "type": "integer" }, "cache_reported": { "type": "boolean" }, "cache_status": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PromptCacheStatus" }, "cache_write_tokens": { "type": "integer" }, "cached_tokens": { "description": "CachedTokens is the legacy alias for CacheReadTokens. It remains on the\nwire for compatibility with existing API consumers.", "type": "integer" }, "completion_tokens": { "type": "integer" }, "context_token_scale": { "description": "ContextTokenScale is provider prompt tokens per cl100k-estimated token,\nmeasured over the turn's rounds. Persisted with the turn so the next\nturn's history loading and first compaction check are calibrated before\nany provider count of their own. Zero when the turn measured none.", "type": "number" }, "prompt_tokens": { "type": "integer" }, "total_tokens": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.ToolCall": { "type": "object", "properties": { "args": { "description": "Tool arguments", "type": "object", "additionalProperties": true }, "duration": { "description": "Execution time in milliseconds", "type": "integer" }, "id": { "description": "Function call ID from LLM", "type": "string" }, "name": { "description": "Tool name", "type": "string" }, "provider_metadata": { "description": "Provider-specific tool-call state for replay", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ToolCallMetadata" } ] }, "reflection": { "description": "Agent's reflection on this tool call result (if enabled)", "type": "string" }, "result": { "description": "Execution result (contains Output)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ToolResult" } ] }, "target": { "description": "Target identifies the actual proxy target; Name/Args retain the model call for replay.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ToolCallTarget" } ] } } }, "github_com_Tencent_WeKnora_internal_types.ToolCallMetadata": { "type": "object", "additionalProperties": { "type": "object" } }, "github_com_Tencent_WeKnora_internal_types.ToolCallTarget": { "type": "object", "properties": { "args": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "service_name": { "type": "string" }, "tool_name": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.ToolResult": { "type": "object", "properties": { "data": { "description": "Structured data for programmatic use", "type": "object", "additionalProperties": true }, "error": { "description": "Error message if execution failed", "type": "string" }, "images": { "description": "Base64 data URIs from tool (e.g. MCP image content)", "type": "array", "items": { "type": "string" } }, "output": { "description": "Human-readable output", "type": "string" }, "success": { "description": "Whether the tool executed successfully", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.UpdateMemberRoleRequest": { "type": "object", "required": [ "role" ], "properties": { "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } } }, "github_com_Tencent_WeKnora_internal_types.UpdateOrganizationRequest": { "type": "object", "properties": { "avatar": { "description": "optional avatar URL", "type": "string", "maxLength": 512 }, "description": { "type": "string", "maxLength": 1000 }, "invite_code_validity_days": { "description": "0=never, 1, 7, 30", "type": "integer" }, "member_limit": { "description": "max members; 0=unlimited", "type": "integer" }, "name": { "type": "string", "maxLength": 255, "minLength": 1 }, "require_approval": { "type": "boolean" }, "searchable": { "description": "open for search so others can discover and join", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.UpdateSharePermissionRequest": { "type": "object", "required": [ "permission" ], "properties": { "permission": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } } }, "github_com_Tencent_WeKnora_internal_types.UsedMemory": { "type": "object", "properties": { "content": { "type": "string" }, "id": { "type": "string" }, "kind": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.User": { "type": "object", "properties": { "avatar": { "description": "Avatar URL of the user", "type": "string" }, "can_access_all_tenants": { "description": "Whether the user can access all workspaces (cross-workspace access)", "type": "boolean" }, "created_at": { "description": "Creation time of the user", "type": "string" }, "deleted_at": { "description": "Deletion time of the user", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "email": { "description": "Email address of the user", "type": "string" }, "id": { "description": "Unique identifier of the user", "type": "string" }, "is_active": { "description": "Whether the user is active", "type": "boolean" }, "is_system_admin": { "description": "Whether the user is a system administrator (independent of workspace roles)", "type": "boolean" }, "preferences": { "description": "Per-user UI/feature preferences.\nStored as JSON (jsonb on Postgres, TEXT on SQLite) via the\ndriver.Valuer / sql.Scanner methods on UserPreferences.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserPreferences" } ] }, "tenant": { "description": "Association relationship, not stored in the database", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Tenant" } ] }, "tenant_id": { "description": "Workspace ID that the user belongs to", "type": "integer" }, "updated_at": { "description": "Last updated time of the user", "type": "string" }, "username": { "description": "Username of the user", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.UserInfo": { "type": "object", "properties": { "avatar": { "type": "string" }, "can_access_all_tenants": { "type": "boolean" }, "created_at": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "is_system_admin": { "type": "boolean" }, "preferences": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserPreferences" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" }, "username": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.UserPreferences": { "type": "object", "properties": { "browser_search_instructions": { "description": "BrowserSearchInstructions customizes browser search for this user. Nil/empty uses the platform default.", "type": "string" }, "gallery": { "description": "Gallery holds the user's image-gallery UI state: the search\nactivation mode and the per-attribute search-field toggles. Written\nby the gallery's mode / checkbox interactions via the preferences\nPUT; read back by GET /knowledge-bases/:id/gallery-config so the\ngallery renders the same activation state on every device. Nil = the\nuser never touched the gallery controls (mode defaults to \"all\").", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.GalleryUserPrefs" } ] }, "last_active_tenant_id": { "description": "LastActiveTenantID remembers the last workspace the user actively\nswitched into, so a fresh login (new device, cleared browser, new\nrefresh token) lands them back in that workspace instead of always\nbouncing to their home workspace. Written by the SPA's preferences\nPUT and by service-level SwitchTenant (including when switching\nhome, which stores the home ID). Login / RefreshToken validate that\nthe workspace still exists and the user still has an active membership\n(or CanAccessAllTenants) before honouring this preference; an\ninvalid pointer is best-effort cleared and the user falls back to\nhome. Refresh JWT claims have no tenant_id, so RefreshToken\nre-resolves from this field.\n\nnil = no preference (use user.TenantID, i.e. home)\n*0 = \"clear preference\" sentinel for the partial-update endpoint\n (UpdateUserPreferences turns this into nil). Otherwise treat\n a stored *0 the same as nil.\n*N = preferred workspace id.", "type": "integer" }, "oidc_only_login": { "description": "OidcOnlyLogin is set server-side when an account is auto-provisioned\nvia OIDC with a random password the user never received. The profile\nUI hides self-service password rotation until the user sets a known\npassword via ChangePassword (which clears this flag).", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.UserResourceFavorite": { "type": "object", "properties": { "created_at": { "type": "string" }, "resource_id": { "type": "string" }, "resource_type": { "type": "string" }, "tenant_id": { "type": "integer" }, "user_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.VLMConfig": { "type": "object", "properties": { "api_key": { "description": "API Key", "type": "string" }, "base_url": { "description": "Base URL", "type": "string" }, "custom_instructions": { "description": "CustomInstructions adds image-reading guidance. The OCR and Markdown format stay fixed.", "type": "string", "x-agent": "vlm_instructions", "x-agent-detail": true, "x-agent-max-bytes": "4000" }, "description_language": { "description": "DescriptionLanguage is the language of generated image captions. Empty follows the document language.", "type": "string", "x-agent": "vlm_language" }, "enabled": { "description": "Enabled turns image captions on. Also send vlm_model_id.", "type": "boolean", "x-agent": "vlm_enabled" }, "interface_type": { "description": "Interface Type: \"ollama\" or \"openai\"", "type": "string" }, "model_id": { "description": "Model that writes image captions. model.list returns the ids.", "type": "string", "x-agent": "vlm_model_id" }, "model_name": { "description": "兼容老版本\nModel Name", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.VectorStoreFieldInfo": { "type": "object", "properties": { "default": {}, "description": { "type": "string" }, "enum": { "description": "Enum constrains the allowed string values. Empty means no\nconstraint. Used by fields whose value space is closed (e.g.\nOpenSearch's knn_engine ∈ {\"lucene\", \"faiss\"}).", "type": "array", "items": { "type": "string" } }, "immutable": { "description": "Immutable marks a field whose value cannot be changed after the\nVectorStore is first created. The UI shows the input as read-only\nin edit mode; the backend rejects modification attempts. Used by\nengines whose underlying index structure is fixed at create time\n(e.g. OpenSearch's HNSW engine / M / ef_construction).", "type": "boolean" }, "max": { "type": "number" }, "min": { "description": "Min / Max set inclusive bounds for \"number\"-typed fields. nil\nmeans no bound on that side. Frontend uses these to constrain\ninputs; backend re-validates as defense-in-depth.", "type": "number" }, "name": { "type": "string" }, "required": { "type": "boolean" }, "sensitive": { "type": "boolean" }, "type": { "description": "\"string\", \"number\", \"boolean\"", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.VectorStoreResponse": { "type": "object", "properties": { "connection_config": { "description": "Driver-specific connection parameters (sensitive fields encrypted with AES-GCM)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ConnectionConfig" } ] }, "created_at": { "description": "Timestamps", "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "engine_type": { "description": "Engine type: postgres, elasticsearch, qdrant, milvus, weaviate, sqlite", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngineType" } ] }, "id": { "description": "Unique identifier (UUID, auto-generated)", "type": "string" }, "index_config": { "description": "Optional index/collection configuration (engine-specific defaults if empty)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.IndexConfig" } ] }, "name": { "description": "User-friendly name, e.g., \"elasticsearch-hot\"", "type": "string" }, "readonly": { "description": "env stores are read-only", "type": "boolean" }, "source": { "description": "\"env\" or \"user\"", "type": "string" }, "tenant_id": { "description": "Workspace ID for scoping", "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.VectorStoreTypeInfo": { "type": "object", "properties": { "connection_fields": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VectorStoreFieldInfo" } }, "display_name": { "type": "string" }, "index_fields": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VectorStoreFieldInfo" } }, "type": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.VolumeMountConfig": { "type": "object", "properties": { "enabled": { "description": "Enabled toggles the volume mount for this tenant.", "type": "boolean" }, "mount_path": { "description": "MountPath is the sandbox-internal path where the volume is mounted.\nDefault: /weknora/tenant/skills (customizable per use case).", "type": "string" }, "provider": { "description": "Provider identifies the volume backend. Currently \"e2b\" or \"cube\".", "type": "string" }, "volume_id": { "description": "VolumeID is the provider-specific volume identifier, populated after\nEnsureVolume / CreateVolume succeeds.", "type": "string" }, "volume_name": { "description": "VolumeName is the human-readable volume name, e.g.\n\"weknora-tenant-\u003cid\u003e-skills\".", "type": "string" }, "volume_owner_fingerprint": { "description": "VolumeOwnerFingerprint = sha256(provider + APIKey + APIURL).\nUsed to detect when the tenant switched to a different backend or\nAPI key, at which point the volume is no longer reachable and must\nbe recreated.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WeKnoraCloudCredentials": { "type": "object", "properties": { "app_id": { "type": "string" }, "app_secret": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WeKnoraCloudStatusResult": { "type": "object", "properties": { "has_models": { "description": "是否已配置 WeKnoraCloud 凭证", "type": "boolean" }, "needs_reinit": { "description": "是否需要重新初始化(凭证损坏)", "type": "boolean" }, "reason": { "description": "需要重新初始化的原因", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WebSearchConfig": { "type": "object", "properties": { "api_key": { "description": "Deprecated: Use WebSearchProviderEntity.Parameters.APIKey instead.", "type": "string" }, "blacklist": { "description": "黑名单规则列表", "type": "array", "items": { "type": "string" } }, "compression_method": { "description": "压缩方法:none, summary, extract, rag", "type": "string" }, "document_fragments": { "description": "文档片段数量(用于RAG压缩)", "type": "integer" }, "embedding_dimension": { "description": "嵌入维度(用于RAG压缩)", "type": "integer" }, "embedding_model_id": { "description": "RAG压缩相关配置", "type": "string" }, "include_date": { "description": "是否包含日期", "type": "boolean" }, "max_results": { "description": "最大搜索结果数", "type": "integer" }, "provider": { "description": "Deprecated: Use WebSearchProviderEntity.Parameters.APIKey instead.", "type": "string" }, "proxy_url": { "description": "Optional per-request proxy override; normally empty — use WebSearchProviderEntity.Parameters.proxy_url. Merged at call time when set.", "type": "string" }, "rerank_model_id": { "description": "重排模型ID(用于RAG压缩)", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WebSearchProviderConfigField": { "type": "object", "properties": { "default": { "type": "string" }, "description": { "type": "string" }, "description_key": { "type": "string" }, "key": { "type": "string" }, "label": { "type": "string" }, "label_key": { "type": "string" }, "options": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderConfigFieldOption" } }, "required": { "type": "boolean" }, "type": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WebSearchProviderConfigFieldOption": { "type": "object", "properties": { "label": { "type": "string" }, "label_key": { "type": "string" }, "value": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WebSearchProviderEntity": { "type": "object", "properties": { "created_at": { "description": "Timestamps", "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "description": { "description": "Description", "type": "string" }, "id": { "description": "Unique identifier (UUID, auto-generated)", "type": "string" }, "is_default": { "description": "Whether this is the default provider for the workspace", "type": "boolean" }, "name": { "description": "User-friendly name, e.g., \"Production Bing Search\"", "type": "string" }, "parameters": { "description": "Provider-specific parameters (API key, engine ID, etc.) stored as encrypted JSON", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderParameters" } ] }, "provider": { "description": "Provider type: bing, google, duckduckgo, tavily", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderType" } ] }, "tenant_id": { "description": "Workspace ID for scoping", "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WebSearchProviderParameters": { "type": "object", "properties": { "api_key": { "description": "API key for the search provider (encrypted in DB)", "type": "string" }, "base_url": { "description": "Base URL for self-hosted search engines (e.g. SearXNG instance URL).\nValidated with utils.ValidateURLForSSRF; private hosts must be added to SSRF_WHITELIST.", "type": "string" }, "engine_id": { "description": "Google Custom Search Engine ID (only for Google provider)", "type": "string" }, "extra_config": { "description": "Provider-specific extra configuration for future extensibility", "type": "object", "additionalProperties": { "type": "string" } }, "proxy_url": { "description": "Optional HTTP/HTTPS proxy URL for outbound search requests (e.g. http://host:port); validated with utils.ValidateURLForSSRF.\nDoes not replace the search API endpoint; only tunnels traffic to the official APIs.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WebSearchProviderType": { "type": "string", "enum": [ "brave", "bing", "google", "duckduckgo", "tavily", "ollama", "baidu", "searxng", "keenable", "zhipu", "exa", "metaso", "bocha", "serply" ], "x-enum-varnames": [ "WebSearchProviderTypeBrave", "WebSearchProviderTypeBing", "WebSearchProviderTypeGoogle", "WebSearchProviderTypeDuckDuckGo", "WebSearchProviderTypeTavily", "WebSearchProviderTypeOllama", "WebSearchProviderTypeBaidu", "WebSearchProviderTypeSearxng", "WebSearchProviderTypeKeenable", "WebSearchProviderTypeZhipu", "WebSearchProviderTypeExa", "WebSearchProviderTypeMetaso", "WebSearchProviderTypeBocha", "WebSearchProviderTypeSerply" ] }, "github_com_Tencent_WeKnora_internal_types.WebSearchProviderTypeInfo": { "type": "object", "properties": { "config_fields": { "description": "Provider-specific non-secret configuration rendered dynamically by the frontend.", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderConfigField" } }, "description": { "description": "Description", "type": "string" }, "docs_url": { "description": "URL to the provider's official website or documentation for obtaining credentials", "type": "string" }, "id": { "description": "Provider type identifier", "type": "string" }, "name": { "description": "Human-readable name", "type": "string" }, "requires_api_key": { "description": "Whether the provider requires an API key", "type": "boolean" }, "requires_base_url": { "description": "Whether the provider requires a user-supplied base URL (e.g., self-hosted SearXNG instance)", "type": "boolean" }, "requires_engine_id": { "description": "Whether the provider requires an engine ID (e.g., Google CSE)", "type": "boolean" }, "supports_optional_api_key": { "description": "Whether the provider accepts an optional API key (keyless by default, but a\nkey unlocks higher limits — e.g. Keenable). Mutually exclusive with RequiresAPIKey.", "type": "boolean" }, "supports_proxy": { "description": "Whether optional proxy_url in parameters is honored for outbound requests", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.WikiConfig": { "type": "object", "properties": { "content_instructions": { "description": "ContentInstructions sets tone and emphasis for generated Wiki prose. Citations stay fixed.", "type": "string", "x-agent": "wiki_content_instructions", "x-agent-detail": true, "x-agent-max-bytes": "4000" }, "extraction_granularity": { "description": "ExtractionGranularity is focused, standard or exhaustive. Empty means standard.", "enum": [ "focused", "standard", "exhaustive" ], "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiExtractionGranularity" } ], "x-agent": "wiki_granularity" }, "extraction_instructions": { "description": "ExtractionInstructions tells page extraction which concepts to keep. The output format stays fixed.", "type": "string", "x-agent": "wiki_extraction_instructions", "x-agent-detail": true, "x-agent-max-bytes": "4000" }, "ingest_batch_size": { "description": "IngestBatchSize controls how many pending ops a single batch claims and\nprocesses before scheduling a follow-up. 0 falls back to the hard-coded\ndefault (5). Larger batches amortize per-batch setup and let more docs\nshare the batch-internal Map/Reduce fan-out; smaller batches spread a\nKB's backlog across more concurrent batches (finer scheduling grain).", "type": "integer" }, "ingest_map_parallel": { "description": "IngestMapParallel sets the errgroup limit for the Map phase\n(per-document extraction + summary + chunk citation) WITHIN one batch.\n0 falls back to 10. Bound by the LLM provider's concurrency limit and\nthe worker's outbound HTTP pool. Remember it multiplies with the number\nof concurrent batches (IngestMaxInflight).", "type": "integer" }, "ingest_max_inflight": { "description": "IngestMaxInflight caps how many ingest batches for THIS KB may run\nconcurrently in the shared wiki worker pool (standard/Redis mode\nonly). 0 falls back to the hard-coded default (4). Since Phase 3\nremoved the exclusive per-KB lock, one KB's backlog could otherwise\nmonopolize the whole pool during a bulk import and starve other KBs;\nthis knob trades a single KB's peak throughput for cross-KB fairness.\nSet it \u003e= the wiki pool size to effectively disable the cap.", "type": "integer" }, "ingest_reduce_parallel": { "description": "IngestReduceParallel sets the errgroup limit for the Reduce phase\n(per-slug page write) WITHIN one batch. 0 falls back to 10. Bound by the\nsame LLM concurrency / HTTP pool considerations as the Map phase, plus\nDB connection pool size. Same multiplier caveat as IngestMapParallel.", "type": "integer" }, "max_pages_per_ingest": { "description": "MaxPagesPerIngest limits pages created or updated per ingest. 0 means no limit.", "type": "integer", "maximum": 1000, "minimum": 0, "x-agent": "wiki_max_pages" }, "synthesis_model_id": { "description": "SynthesisModelID is the model that writes Wiki pages. Empty uses summary_model_id.", "type": "string", "x-agent": "wiki_synthesis_model_id" } } }, "github_com_Tencent_WeKnora_internal_types.WikiExtractionGranularity": { "type": "string", "enum": [ "focused", "standard", "exhaustive" ], "x-enum-varnames": [ "WikiExtractionFocused", "WikiExtractionStandard", "WikiExtractionExhaustive" ] }, "github_com_Tencent_WeKnora_internal_types.WikiFolder": { "type": "object", "properties": { "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "depth": { "type": "integer" }, "id": { "type": "string", "x-agent": "folder_id" }, "knowledge_base_id": { "type": "string" }, "name": { "type": "string", "x-agent": true }, "parent_id": { "type": "string", "x-agent": true }, "path": { "type": "string", "x-agent": true }, "sort_order": { "type": "integer" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiFolderCreateRequest": { "type": "object", "properties": { "name": { "description": "Folder name.", "type": "string", "x-agent": true }, "parent_id": { "description": "Parent folder id; empty means the top level.", "type": "string", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.WikiFolderListResponse": { "type": "object", "properties": { "folders": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolderNode" } }, "parent_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiFolderNode": { "type": "object", "properties": { "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "depth": { "type": "integer" }, "has_children": { "type": "boolean", "x-agent": true }, "id": { "type": "string", "x-agent": "folder_id" }, "knowledge_base_id": { "type": "string" }, "name": { "type": "string", "x-agent": true }, "page_count": { "type": "integer", "x-agent": true }, "parent_id": { "type": "string", "x-agent": true }, "path": { "type": "string", "x-agent": true }, "sort_order": { "type": "integer" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiFolderUpdateRequest": { "type": "object", "properties": { "move_parent": { "type": "boolean" }, "name": { "type": "string" }, "parent_id": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiGraphData": { "type": "object", "properties": { "edges": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiGraphEdge" } }, "meta": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiGraphMeta" }, "nodes": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiGraphNode" } } } }, "github_com_Tencent_WeKnora_internal_types.WikiGraphEdge": { "type": "object", "properties": { "source": { "description": "source slug", "type": "string" }, "target": { "description": "target slug", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiGraphMeta": { "type": "object", "properties": { "center": { "description": "populated in ego mode", "type": "string" }, "depth": { "description": "populated in ego mode", "type": "integer" }, "familiar_count": { "description": "FamiliarCount is how many returned nodes are lit up for this person.", "type": "integer" }, "mode": { "type": "string" }, "returned": { "description": "number of nodes actually returned", "type": "integer" }, "total": { "description": "total node count in the KB before filtering/limit", "type": "integer" }, "truncated": { "description": "true when Returned \u003c Total (after filters)", "type": "boolean" } } }, "github_com_Tencent_WeKnora_internal_types.WikiGraphNode": { "type": "object", "properties": { "familiar": { "description": "Familiar is true when this page was built from a document this person\nkeeps citing in answers. It is a personal overlay, not a property of\nthe page: two people looking at the same wiki see different highlights.", "type": "boolean" }, "link_count": { "description": "Number of inbound + outbound links", "type": "integer" }, "page_type": { "type": "string" }, "slug": { "type": "string" }, "title": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiIndexEntry": { "type": "object", "properties": { "category_path": { "type": "array", "items": { "type": "string" } }, "depth": { "type": "integer" }, "parent_slug": { "type": "string" }, "slug": { "type": "string" }, "sort_order": { "type": "integer" }, "summary": { "type": "string" }, "title": { "type": "string" }, "wiki_path": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiIndexGroup": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiIndexEntry" } }, "next_cursor": { "type": "string" }, "total": { "type": "integer" }, "type": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiIndexResponse": { "type": "object", "properties": { "groups": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiIndexGroup" } }, "intro": { "type": "string" }, "version": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.WikiPage": { "type": "object", "properties": { "aliases": { "description": "Alternate names, abbreviations, acronyms or translated names", "type": "array", "items": { "type": "string" } }, "category_path": { "description": "CategoryPath is the directory breadcrumb that groups this page in the\nwiki browser, e.g. [\"AI\", \"LLM 应用\", \"RAG\"]. Derived cache of the\nfolder chain identified by FolderID.", "type": "array", "items": { "type": "string" } }, "chunk_refs": { "description": "ChunkRefs records the specific source-document chunks this page was\nbuilt from — one UUID per cited chunk. Populated during ingest from\nthe chunk-citation pass; refreshed wholesale whenever the page is\nre-materialized. Empty for summary pages (they are document-level\nsynopses and don't carry chunk-level citations). Use this when you\nneed to surface the underlying evidence for a wiki page, or to\nretract citations when a source document is deleted.", "type": "array", "items": { "type": "string" } }, "content": { "description": "Full markdown content", "type": "string" }, "created_at": { "description": "Creation time", "type": "string" }, "deleted_at": { "description": "Soft delete", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "depth": { "description": "Depth is len(CategoryPath), cached for filtering / display.", "type": "integer" }, "folder_id": { "description": "FolderID is the single source of truth for where this page sits in the\ndirectory tree — a reference to wiki_folders.id (\"\" = wiki root). The\nCategoryPath / WikiPath / Depth fields below are denormalized caches\nrecomputed from this folder's chain on every write so list/index/search\nqueries don't have to join wiki_folders.", "type": "string", "x-agent": true }, "id": { "description": "Unique identifier (UUID)", "type": "string" }, "in_links": { "description": "Slugs of pages that link TO this page (backlinks)", "type": "array", "items": { "type": "string" } }, "knowledge_base_id": { "description": "Knowledge base this page belongs to", "type": "string" }, "last_edit_source": { "description": "LastEditSource records who authored the CURRENT version: pipeline |\nagent | user | revert. Empty for legacy rows (treated as pipeline).\nWhen the version is superseded this value travels into the revision\nsnapshot, so each historical version keeps its own author kind.", "type": "string" }, "last_editor_id": { "description": "LastEditorID is the user id of the caller that produced the current\nversion (empty for background pipeline writes).", "type": "string" }, "out_links": { "description": "Slugs of pages this page links to (outbound links)", "type": "array", "items": { "type": "string" } }, "page_metadata": { "description": "Arbitrary metadata (tags, categories, dates, etc.)", "type": "object" }, "page_type": { "description": "Page type: summary, entity, concept, index, synthesis, comparison", "type": "string", "x-agent": true }, "parent_slug": { "description": "ParentSlug optionally points at the wiki page that should act as this\npage's semantic parent in the directory tree. The parent may be empty\nwhen the page is grouped only by FolderID.", "type": "string" }, "slug": { "description": "URL-friendly slug for addressing, e.g. \"entity/acme-corp\", \"concept/rag\"\nUnique within a knowledge base", "type": "string", "x-agent": true }, "sort_order": { "description": "SortOrder allows generated or manually edited pages to control sibling\nordering before falling back to title.", "type": "integer" }, "source_refs": { "description": "References to source knowledge IDs that contributed to this page.\nFormat matches the legacy \"\u003cknowledge_id\u003e|\u003cdoc_title\u003e\" convention used\nacross the ingest pipeline, so retract / display code can split on `|`\nto recover the title. Document-level granularity.", "type": "array", "items": { "type": "string" } }, "status": { "description": "Page status: draft, published, archived", "type": "string", "x-agent": true }, "summary": { "description": "One-line summary for index listing", "type": "string", "x-agent": true }, "tenant_id": { "description": "Workspace ID for multi-workspace isolation", "type": "integer" }, "title": { "description": "Human-readable title", "type": "string", "x-agent": true }, "updated_at": { "description": "Last update time", "type": "string", "x-agent": true }, "version": { "description": "Version number. Incremented only when a user-visible content field\n(title, content, summary, page_type, status) actually changes; pure\nbookkeeping writes (link maintenance, same-content re-ingest, status\nsync from background jobs) leave it untouched so it can be used as a\nreal \"the page was edited\" signal.", "type": "integer", "x-agent": true }, "wiki_path": { "description": "WikiPath is a normalized, sortable path derived from page_type,\ncategory_path, and title. It keeps large directory listings cheap to sort.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiPageDetail": { "type": "object", "properties": { "aliases": { "description": "Alternate names, abbreviations, acronyms or translated names", "type": "array", "items": { "type": "string" } }, "category_path": { "description": "CategoryPath is the directory breadcrumb that groups this page in the\nwiki browser, e.g. [\"AI\", \"LLM 应用\", \"RAG\"]. Derived cache of the\nfolder chain identified by FolderID.", "type": "array", "items": { "type": "string" } }, "chunk_refs": { "description": "ChunkRefs records the specific source-document chunks this page was\nbuilt from — one UUID per cited chunk. Populated during ingest from\nthe chunk-citation pass; refreshed wholesale whenever the page is\nre-materialized. Empty for summary pages (they are document-level\nsynopses and don't carry chunk-level citations). Use this when you\nneed to surface the underlying evidence for a wiki page, or to\nretract citations when a source document is deleted.", "type": "array", "items": { "type": "string" } }, "content": { "description": "Full markdown content", "type": "string" }, "created_at": { "description": "Creation time", "type": "string" }, "deleted_at": { "description": "Soft delete", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "depth": { "description": "Depth is len(CategoryPath), cached for filtering / display.", "type": "integer" }, "folder_id": { "description": "FolderID is the single source of truth for where this page sits in the\ndirectory tree — a reference to wiki_folders.id (\"\" = wiki root). The\nCategoryPath / WikiPath / Depth fields below are denormalized caches\nrecomputed from this folder's chain on every write so list/index/search\nqueries don't have to join wiki_folders.", "type": "string", "x-agent": true }, "id": { "description": "Unique identifier (UUID)", "type": "string" }, "in_link_titles": { "type": "object", "additionalProperties": { "type": "string" } }, "in_links": { "description": "Slugs of pages that link TO this page (backlinks)", "type": "array", "items": { "type": "string" } }, "knowledge_base_id": { "description": "Knowledge base this page belongs to", "type": "string" }, "last_edit_source": { "description": "LastEditSource records who authored the CURRENT version: pipeline |\nagent | user | revert. Empty for legacy rows (treated as pipeline).\nWhen the version is superseded this value travels into the revision\nsnapshot, so each historical version keeps its own author kind.", "type": "string" }, "last_editor_id": { "description": "LastEditorID is the user id of the caller that produced the current\nversion (empty for background pipeline writes).", "type": "string" }, "out_links": { "description": "Slugs of pages this page links to (outbound links)", "type": "array", "items": { "type": "string" } }, "page_metadata": { "description": "Arbitrary metadata (tags, categories, dates, etc.)", "type": "object" }, "page_type": { "description": "Page type: summary, entity, concept, index, synthesis, comparison", "type": "string", "x-agent": true }, "parent_slug": { "description": "ParentSlug optionally points at the wiki page that should act as this\npage's semantic parent in the directory tree. The parent may be empty\nwhen the page is grouped only by FolderID.", "type": "string" }, "slug": { "description": "URL-friendly slug for addressing, e.g. \"entity/acme-corp\", \"concept/rag\"\nUnique within a knowledge base", "type": "string", "x-agent": true }, "sort_order": { "description": "SortOrder allows generated or manually edited pages to control sibling\nordering before falling back to title.", "type": "integer" }, "source_refs": { "description": "References to source knowledge IDs that contributed to this page.\nFormat matches the legacy \"\u003cknowledge_id\u003e|\u003cdoc_title\u003e\" convention used\nacross the ingest pipeline, so retract / display code can split on `|`\nto recover the title. Document-level granularity.", "type": "array", "items": { "type": "string" } }, "status": { "description": "Page status: draft, published, archived", "type": "string", "x-agent": true }, "summary": { "description": "One-line summary for index listing", "type": "string", "x-agent": true }, "tenant_id": { "description": "Workspace ID for multi-workspace isolation", "type": "integer" }, "title": { "description": "Human-readable title", "type": "string", "x-agent": true }, "updated_at": { "description": "Last update time", "type": "string", "x-agent": true }, "version": { "description": "Version number. Incremented only when a user-visible content field\n(title, content, summary, page_type, status) actually changes; pure\nbookkeeping writes (link maintenance, same-content re-ingest, status\nsync from background jobs) leave it untouched so it can be used as a\nreal \"the page was edited\" signal.", "type": "integer", "x-agent": true }, "wiki_path": { "description": "WikiPath is a normalized, sortable path derived from page_type,\ncategory_path, and title. It keeps large directory listings cheap to sort.", "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiPageIssue": { "type": "object", "properties": { "created_at": { "type": "string", "x-agent": true }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "description": { "type": "string", "x-agent": true }, "id": { "type": "string", "x-agent": "issue_id" }, "issue_type": { "type": "string", "x-agent": true }, "knowledge_base_id": { "type": "string" }, "reported_by": { "type": "string", "x-agent": true }, "slug": { "type": "string", "x-agent": true }, "status": { "type": "string", "x-agent": true }, "suspected_knowledge_ids": { "type": "array", "items": { "type": "string" }, "x-agent": "knowledge_ids" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" } } }, "github_com_Tencent_WeKnora_internal_types.WikiPageListResponse": { "type": "object", "properties": { "page": { "type": "integer" }, "page_size": { "type": "integer" }, "pages": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage" } }, "total": { "type": "integer" }, "total_pages": { "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.WikiPageMoveRequest": { "type": "object", "required": [ "slug" ], "properties": { "folder_id": { "description": "Target folder id; empty means the top level.", "type": "string", "x-agent": true }, "slug": { "description": "Slug of the page to move.", "type": "string", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.WikiPageRevertRequest": { "type": "object", "required": [ "slug", "version" ], "properties": { "slug": { "description": "Slug of the page to revert.", "type": "string", "x-agent": true }, "version": { "description": "Revision to restore. Versions start at 1.", "type": "integer", "minimum": 1, "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.WikiPageRevision": { "type": "object", "properties": { "aliases": { "type": "array", "items": { "type": "string" } }, "content": { "type": "string", "x-agent": true, "x-agent-max-runes": "8000" }, "created_at": { "type": "string" }, "edit_source": { "description": "Author of THIS version (same semantics as WikiPage.LastEditSource).", "type": "string", "x-agent": true }, "edited_at": { "description": "When this version was authored (the page's updated_at while current).", "type": "string", "x-agent": true }, "editor_id": { "type": "string" }, "id": { "type": "string" }, "knowledge_base_id": { "type": "string" }, "page_id": { "type": "string" }, "page_type": { "type": "string" }, "slug": { "type": "string" }, "status": { "type": "string" }, "summary": { "type": "string", "x-agent": true }, "tenant_id": { "type": "integer" }, "title": { "type": "string", "x-agent": true }, "version": { "type": "integer", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.WikiPageRevisionListResponse": { "type": "object", "properties": { "current_version": { "type": "integer", "x-agent": true }, "revisions": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageRevision" } }, "total": { "type": "integer", "x-agent": true } } }, "github_com_Tencent_WeKnora_internal_types.WikiPageUpdateRequest": { "type": "object", "properties": { "aliases": { "type": "array", "items": { "type": "string" } }, "content": { "type": "string" }, "page_type": { "type": "string" }, "status": { "type": "string" }, "summary": { "type": "string" }, "title": { "type": "string" }, "version": { "description": "Version is the optimistic-lock guard: when \u003e 0 the update is rejected\nwith a conflict if the stored version differs (someone else edited the\npage since the client loaded it). 0 skips the check (legacy clients).", "type": "integer" } } }, "github_com_Tencent_WeKnora_internal_types.WikiStats": { "type": "object", "properties": { "is_active": { "description": "whether wiki ingestion is currently running", "type": "boolean", "x-agent": true }, "orphan_count": { "description": "pages with no inbound links", "type": "integer", "x-agent": true }, "pages_by_type": { "type": "object", "additionalProperties": { "type": "integer", "format": "int64" } }, "pending_issues": { "description": "number of pending wiki issues", "type": "integer", "x-agent": true }, "pending_tasks": { "description": "number of documents waiting to be ingested", "type": "integer", "x-agent": true }, "recent_updates": { "description": "last N updated pages", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage" } }, "total_links": { "type": "integer", "x-agent": true }, "total_pages": { "type": "integer", "x-agent": true } } }, "gorm.DeletedAt": { "type": "object", "properties": { "time": { "type": "string" }, "valid": { "description": "Valid is true if Time is not NULL", "type": "boolean" } } }, "internal_handler.AddFavoriteRequest": { "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string" } } }, "internal_handler.AgentWriteResponse": { "type": "object", "properties": { "allowed_tools_warnings": { "$ref": "#/definitions/internal_handler.AllowedToolsWarningsDoc" }, "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgent" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.AllowedToolsWarningsDoc": { "type": "object", "properties": { "dropped": { "type": "array", "items": { "type": "string" } }, "kept_unknown": { "type": "array", "items": { "type": "string" } } } }, "internal_handler.ApplyDefaultStorageQuotaToAllTenantsResponse": { "type": "object", "properties": { "affected": { "type": "integer" }, "quota_bytes": { "type": "integer" }, "quota_gb": { "type": "integer" } } }, "internal_handler.AutoFixResponse": { "type": "object", "properties": { "fixed": { "type": "integer" }, "message": { "type": "string" } } }, "internal_handler.BatchDeleteKnowledgeRequest": { "type": "object", "required": [ "ids", "kb_id" ], "properties": { "ids": { "description": "Documents to delete.", "type": "array", "items": { "type": "string" }, "x-agent": "knowledge_ids", "x-agent-maximum": "20" }, "kb_id": { "description": "Knowledge base the documents belong to.", "type": "string", "x-agent": "knowledge_base_id" } } }, "internal_handler.BatchDownloadKnowledgeRequest": { "type": "object", "required": [ "ids" ], "properties": { "ids": { "type": "array", "maxItems": 200, "minItems": 1, "items": { "type": "string" } } } }, "internal_handler.ClearResponse": { "type": "object", "properties": { "removed": { "type": "integer" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.CopyKnowledgeBaseRequest": { "type": "object", "required": [ "source_id" ], "properties": { "source_id": { "type": "string" }, "target_id": { "type": "string" }, "task_id": { "type": "string" } } }, "internal_handler.CopyKnowledgeBaseResponse": { "type": "object", "properties": { "message": { "type": "string" }, "source_id": { "type": "string" }, "target_id": { "type": "string" }, "task_id": { "type": "string" } } }, "internal_handler.CopyModelRequest": { "type": "object", "required": [ "display_name" ], "properties": { "display_name": { "type": "string" } } }, "internal_handler.CreateAgentRequest": { "type": "object", "required": [ "name" ], "properties": { "avatar": { "type": "string" }, "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgentConfig" }, "description": { "description": "What the agent is for", "type": "string", "x-agent": true }, "name": { "description": "Agent name", "type": "string", "x-agent": true } } }, "internal_handler.CreateKnowledgeFromURLRequest": { "type": "object", "required": [ "url" ], "properties": { "channel": { "type": "string" }, "enable_multimodel": { "type": "boolean" }, "file_name": { "type": "string" }, "file_type": { "type": "string" }, "process_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeProcessOverrides" }, "tag_ids": { "type": "array", "items": { "type": "string" } }, "title": { "description": "Title of the document; defaults to the fetched one.", "type": "string", "x-agent": true }, "url": { "description": "Page or file URL to import.", "type": "string", "x-agent": true } } }, "internal_handler.CreateModelRequest": { "type": "object", "required": [ "name", "parameters", "source", "type" ], "properties": { "description": { "type": "string" }, "display_name": { "type": "string" }, "name": { "type": "string" }, "parameters": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelParameters" }, "source": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelSource" }, "type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelType" } } }, "internal_handler.CreateStoreRequest": { "type": "object", "required": [ "connection_config", "engine_type", "name" ], "properties": { "connection_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ConnectionConfig" }, "engine_type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngineType" }, "index_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.IndexConfig" }, "name": { "type": "string" } } }, "internal_handler.CreateSystemUserResponse": { "type": "object", "properties": { "generated_password": { "description": "GeneratedPassword is the plaintext password when the server\nauto-generated one. Absent when the caller supplied the password.", "type": "string" }, "user": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo" } } }, "internal_handler.CreateTagRequest": { "type": "object", "required": [ "name" ], "properties": { "color": { "type": "string" }, "name": { "description": "Tag name, unique in this knowledge base", "type": "string", "x-agent": true }, "sort_order": { "type": "integer" } } }, "internal_handler.CurrentUserCapabilities": { "type": "object", "properties": { "auto_accept_invitation": { "type": "boolean" }, "can_create_tenant": { "type": "boolean" } } }, "internal_handler.CurrentUserData": { "type": "object", "properties": { "capabilities": { "$ref": "#/definitions/internal_handler.CurrentUserCapabilities" }, "memberships": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Membership" } }, "preference_defaults": { "$ref": "#/definitions/internal_handler.PreferenceDefaults" }, "tenant": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.TenantResponse" }, "tenant_required": { "type": "boolean" }, "user": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo" } } }, "internal_handler.DataMessageResponse": { "type": "object", "properties": { "data": {}, "message": { "type": "string" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.DataResponse": { "type": "object", "properties": { "data": {}, "success": { "type": "boolean", "example": true } } }, "internal_handler.DeleteTagRequest": { "type": "object", "properties": { "exclude_ids": { "description": "Chunk seq_ids to exclude from deletion", "type": "array", "items": { "type": "integer" } } } }, "internal_handler.DeploymentCapabilitiesData": { "type": "object", "properties": { "capabilities": { "type": "object", "additionalProperties": { "$ref": "#/definitions/internal_handler.DeploymentCapability" } }, "edition": { "type": "string" } } }, "internal_handler.DeploymentCapability": { "type": "object", "properties": { "reason": { "type": "string" }, "supported": { "type": "boolean" } } }, "internal_handler.DownloadTask": { "type": "object", "properties": { "endTime": { "type": "string" }, "id": { "type": "string" }, "message": { "type": "string" }, "modelName": { "type": "string" }, "progress": { "type": "number" }, "startTime": { "type": "string" }, "status": { "description": "pending, downloading, completed, failed", "type": "string" } } }, "internal_handler.DuplicateKnowledgeBaseData": { "type": "object", "properties": { "knowledge_base": { "$ref": "#/definitions/internal_handler.KnowledgeBaseView" }, "message": { "type": "string" }, "source_id": { "type": "string" }, "target_id": { "type": "string" } } }, "internal_handler.EnsureMessageSuggestionsRequest": { "type": "object", "properties": { "regenerate": { "type": "boolean" } } }, "internal_handler.EvaluationRequest": { "type": "object", "properties": { "chat_id": { "description": "ID of chat model to use", "type": "string" }, "dataset_id": { "description": "ID of dataset to evaluate", "type": "string" }, "knowledge_base_id": { "description": "ID of knowledge base to use", "type": "string" }, "rerank_id": { "description": "ID of rerank model to use", "type": "string" } } }, "internal_handler.ExportResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryItem" } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" }, "truncated": { "type": "boolean" } } }, "internal_handler.FAQEntryPage": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntry" } }, "page": { "type": "integer" }, "page_size": { "type": "integer" }, "total": { "type": "integer" } } }, "internal_handler.FabriTagResponse": { "type": "object", "properties": { "tags": { "type": "array", "items": { "type": "string" } } } }, "internal_handler.FabriTextRequest": { "type": "object", "required": [ "model_id" ], "properties": { "model_id": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } } } }, "internal_handler.FabriTextResponse": { "type": "object", "properties": { "text": { "type": "string" } } }, "internal_handler.FolderMoveData": { "type": "object", "properties": { "folder_path": { "type": "string", "x-agent": true }, "moved_count": { "type": "integer", "x-agent": true } } }, "internal_handler.GetAuthConfigResponse": { "type": "object", "properties": { "complex_password_enabled": { "type": "boolean" }, "registration_mode": { "type": "string" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.GetDeploymentCapabilitiesResponse": { "type": "object", "properties": { "code": { "type": "integer" }, "data": { "$ref": "#/definitions/internal_handler.DeploymentCapabilitiesData" }, "msg": { "type": "string" } } }, "internal_handler.GetStorageEngineStatusResponse": { "type": "object", "properties": { "allowed_providers": { "type": "array", "items": { "type": "string" } }, "engines": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.StorageEngineStatusItem" } }, "minio_env_available": { "type": "boolean" } } }, "internal_handler.GetSystemInfoResponse": { "type": "object", "properties": { "build_time": { "type": "string" }, "commit_id": { "type": "string" }, "db_migration_error": { "description": "DBMigrationError carries the human-readable error message recorded when\nthe most recent startup migration attempt failed. Empty when migrations\nsucceeded; non-empty values let the frontend surface a troubleshooting\nbanner instead of silently hiding the DB version row (see issue #1319).", "type": "string" }, "db_version": { "type": "string" }, "edition": { "type": "string" }, "go_version": { "type": "string" }, "graph_database_engine": { "type": "string" }, "keyword_index_engine": { "type": "string" }, "minio_enabled": { "type": "boolean" }, "started_at": { "description": "StartedAt is the server process boot time (RFC3339, UTC).", "type": "string" }, "uptime_seconds": { "description": "UptimeSeconds is seconds elapsed since process start.", "type": "integer" }, "vector_store_engine": { "type": "string" }, "version": { "type": "string" } } }, "internal_handler.HybridSearchResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SearchResult" } }, "meta": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrievalMeta" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.ImageAttrSchemaData": { "type": "object", "properties": { "attributes": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AttrSpec" } }, "default_actions": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageActionsConfig" }, "prompt": { "type": "string" }, "version": { "type": "string" } } }, "internal_handler.InitializationRequest": { "type": "object", "required": [ "documentSplitting", "embedding", "llm" ], "properties": { "documentSplitting": { "type": "object", "required": [ "chunkSize", "separators" ], "properties": { "chunkOverlap": { "type": "integer", "minimum": 0 }, "chunkSize": { "type": "integer", "maximum": 10000, "minimum": 100 }, "separators": { "type": "array", "minItems": 1, "items": { "type": "string" } } } }, "embedding": { "type": "object", "required": [ "modelName", "source" ], "properties": { "apiKey": { "type": "string" }, "baseUrl": { "type": "string" }, "dimension": { "description": "添加embedding维度字段", "type": "integer" }, "modelName": { "type": "string" }, "source": { "type": "string" } } }, "llm": { "type": "object", "required": [ "modelName", "source" ], "properties": { "apiKey": { "type": "string" }, "baseUrl": { "type": "string" }, "modelName": { "type": "string" }, "source": { "type": "string" } } }, "multimodal": { "type": "object", "properties": { "cos": { "type": "object", "properties": { "appId": { "type": "string" }, "bucketName": { "type": "string" }, "pathPrefix": { "type": "string" }, "region": { "type": "string" }, "secretId": { "type": "string" }, "secretKey": { "type": "string" } } }, "enabled": { "type": "boolean" }, "minio": { "type": "object", "properties": { "bucketName": { "type": "string" }, "pathPrefix": { "type": "string" } } }, "storageType": { "type": "string" }, "vlm": { "type": "object", "properties": { "apiKey": { "type": "string" }, "baseUrl": { "type": "string" }, "interfaceType": { "description": "\"ollama\" or \"openai\"", "type": "string" }, "modelName": { "type": "string" } } } } }, "nodeExtract": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "nodes": { "type": "array", "items": { "type": "object", "properties": { "attributes": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" } } } }, "relations": { "type": "array", "items": { "type": "object", "properties": { "node1": { "type": "string" }, "node2": { "type": "string" }, "type": { "type": "string" } } } }, "tags": { "type": "array", "items": { "type": "string" } }, "text": { "type": "string" } } }, "questionGeneration": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "questionCount": { "type": "integer" } } }, "rerank": { "type": "object", "properties": { "apiKey": { "type": "string" }, "baseUrl": { "type": "string" }, "enabled": { "type": "boolean" }, "modelName": { "type": "string" } } } } }, "internal_handler.KBModelConfigRequest": { "type": "object", "required": [ "llmModelId" ], "properties": { "asr_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ASRConfig" }, "documentSplitting": { "description": "文档分块配置", "type": "object", "properties": { "childChunkSize": { "type": "integer" }, "chunkOverlap": { "type": "integer" }, "chunkSize": { "type": "integer" }, "enableParentChild": { "type": "boolean" }, "languages": { "type": "array", "items": { "type": "string" } }, "parentChunkSize": { "type": "integer" }, "parserEngineRules": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule" } }, "separators": { "type": "array", "items": { "type": "string" } }, "strategy": { "description": "Strategy / TokenLimit / Languages use pointer types so the\nhandler can distinguish \"field absent in payload\" (no change)\nfrom \"field present with empty/zero value\" (clear / disable).\nWithout that distinction, users could set strategy=\"auto\" once\nbut never reset it back to legacy / unset.", "type": "string" }, "tableMetadataInstructions": { "type": "string" }, "tokenLimit": { "type": "integer" } } }, "embeddingModelId": { "description": "optional when RAG indexing is disabled", "type": "string" }, "llmModelId": { "type": "string" }, "multimodal": { "description": "多模态配置(仅模型相关;存储引擎在 storageProvider 中配置)", "type": "object", "properties": { "enabled": { "type": "boolean" } } }, "nodeExtract": { "description": "知识图谱配置", "type": "object", "properties": { "customInstructions": { "type": "string" }, "enabled": { "type": "boolean" }, "nodes": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.GraphNode" } }, "relations": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.GraphRelation" } }, "tags": { "type": "array", "items": { "type": "string" } }, "text": { "type": "string" } } }, "questionGeneration": { "description": "问题生成配置", "type": "object", "properties": { "customInstructions": { "type": "string" }, "enabled": { "type": "boolean" }, "questionCount": { "type": "integer" } } }, "storageBackendId": { "type": "string" }, "storageProvider": { "description": "存储引擎选择(\"local\" | \"minio\" | \"cos\"),影响文档上传与文档内图片存储,参数从全局设置读取", "type": "string" }, "vlm_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig" } } }, "internal_handler.KnowledgeBaseView": { "type": "object", "required": [ "name" ], "properties": { "asr_config": { "description": "ASR config (Automatic Speech Recognition)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ASRConfig" } ], "x-agent": true, "x-agent-detail": true }, "auto_tag_config": { "description": "AutoTagConfig controls asynchronous association of existing tags after parsing.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AutoTagConfig" } ], "x-agent": true, "x-agent-detail": true }, "capabilities": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KBCapabilities" }, "chunk_count": { "description": "Chunk count (not stored in database, calculated on query)", "type": "integer", "x-agent": true, "x-agent-response": true }, "chunking_config": { "description": "Chunking configuration", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkingConfig" } ], "x-agent": true, "x-agent-detail": true }, "created_at": { "description": "Creation time of the knowledge base", "type": "string" }, "creator_id": { "description": "CreatorID records the user ID of whoever originally created the KB.\nUsed by the workspace-level RBAC middleware to let Contributors edit\ntheir own KBs without granting them access to everyone else's.\nNullable for backward compatibility with rows created before the\nRBAC migration backfilled the column to the workspace Owner.", "type": "string" }, "creator_name": { "description": "CreatorName 是 CreatorID 对应用户的展示名(username / email 等),\n仅在列表场景由 handler 批量回填,不落库;为空表示创建者无法解析(用户已删除、\nCreatorID 为空的老数据等)。前端用它在卡片来源徽章上做 mine vs workspace 的二分。", "type": "string" }, "deleted_at": { "description": "Deletion time of the knowledge base", "allOf": [ { "$ref": "#/definitions/gorm.DeletedAt" } ] }, "description": { "description": "Description of the knowledge base", "type": "string", "x-agent": true }, "embedding_model_id": { "description": "ID of the embedding model. model.list returns the ids. Cannot change after the knowledge base has documents.", "type": "string", "x-agent": "embedding_model_id" }, "extract_config": { "description": "Extract config", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ExtractConfig" } ], "x-agent": true, "x-agent-detail": true }, "faq_config": { "description": "FAQConfig stores FAQ specific configuration such as indexing strategy", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQConfig" } ], "x-agent": true, "x-agent-detail": true }, "generated_profile": { "description": "GeneratedProfile is the machine-generated description: a gist, merged\ntopics, typical questions and the aggregate snapshot they came from. It\nnever overwrites the user-authored Description; both are shown to agents.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfile" } ] }, "id": { "description": "Unique identifier of the knowledge base", "type": "string", "x-agent": "knowledge_base_id", "x-agent-response": true }, "image_processing_config": { "description": "Image processing configuration", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageProcessingConfig" } ], "x-agent": true, "x-agent-detail": true }, "indexing_strategy": { "description": "IndexingStrategy controls which indexing pipelines are active for this knowledge base.\nPipelines: vector search, keyword search, wiki generation, knowledge graph extraction.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.IndexingStrategy" } ], "x-agent": true, "x-agent-response": true }, "is_pinned": { "description": "IsPinned and PinnedAt are computed per-caller from user_kb_pins\n(see migration 000050). They used to be stored on the row itself,\nwhich made pinning a workspace-wide ordering decision gated behind\nthe kb-edit RBAC guard. The columns are still present in legacy\nschemas for rollback safety but are no longer read or written by\nthe application — both fields are tagged `gorm:\"-\"` so GORM\nignores them on every CRUD call and the list handler stamps them\nafter enriching with the caller's pin set.", "type": "boolean" }, "is_processing": { "description": "IsProcessing indicates if there is a processing import task (for FAQ type knowledge bases)", "type": "boolean", "x-agent": true, "x-agent-response": true }, "is_temporary": { "description": "Whether this knowledge base is temporary (ephemeral) and should be hidden from UI", "type": "boolean" }, "knowledge_count": { "description": "Knowledge count (not stored in database, calculated on query)", "type": "integer", "x-agent": true, "x-agent-response": true }, "my_permission": { "description": "MyPermission is the caller's role on a knowledge base shared from\nanother workspace; GET /knowledge-bases/{id} sets it.", "type": "string", "enum": [ "admin", "editor", "viewer" ], "x-agent": true }, "name": { "description": "Name of the knowledge base", "type": "string", "x-agent": true, "x-agent-required": true }, "pinned_at": { "description": "PinnedAt records when the current caller pinned this knowledge\nbase; nil when they have not.", "type": "string" }, "processing_count": { "description": "ProcessingCount indicates the number of knowledge items being processed (for document type knowledge bases)", "type": "integer", "x-agent": true, "x-agent-response": true }, "profile_config": { "description": "ProfileConfig controls automatic generation of the knowledge-base\ndescription from per-document profiles (document knowledge bases only).", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfileConfig" } ], "x-agent": true, "x-agent-detail": true }, "question_generation_config": { "description": "QuestionGenerationConfig stores question generation configuration for document knowledge bases", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig" } ], "x-agent": true, "x-agent-detail": true }, "share_count": { "description": "ShareCount indicates the number of organizations this knowledge base is shared with (not stored in database)", "type": "integer" }, "storage_backend_id": { "description": "StorageBackendID binds this KB to one concrete storage instance. The\nlegacy provider field remains readable during migration only.", "type": "string", "x-agent": "storage_backend_id" }, "storage_config": { "description": "Deprecated: legacy COS config column. Kept for backward compatibility with old data.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageConfig" } ] }, "storage_provider_config": { "description": "Storage provider config (new): only stores provider selection; credentials from workspace StorageEngineConfig", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageProviderConfig" } ] }, "summary_model_id": { "description": "Summary model ID. model.list returns the ids. Used for summaries, and as the default for auto-tagging and the AI description.", "type": "string", "x-agent": "summary_model_id" }, "tenant_id": { "description": "Workspace ID", "type": "integer" }, "type": { "description": "Type of the knowledge base: document, faq or wiki. Empty means document.", "type": "string", "enum": [ "document", "faq", "wiki" ], "x-agent": true }, "updated_at": { "description": "Last updated time of the knowledge base", "type": "string", "x-agent": true, "x-agent-response": true }, "vector_store_engine_type": { "type": "string" }, "vector_store_id": { "description": "VectorStoreID references the VectorStore this knowledge base is bound to.\nWhen nil, the KB falls back to the workspace's effective engines derived from\nthe RETRIEVE_DRIVER environment variable (env store flow).\nThis field is set once at creation time and must not be modified afterwards;\nenforcement lives at the GORM layer (`\u003c-:create`) plus the service-layer\nKB update path, which omits this field from its update DTO.", "type": "string", "x-agent": "vector_store_id" }, "vector_store_name": { "type": "string" }, "vector_store_source": { "type": "string" }, "vector_store_status": { "type": "string" }, "vlm_config": { "description": "VLM config", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig" } ], "x-agent": true, "x-agent-detail": true }, "wiki_config": { "description": "WikiConfig stores wiki-specific configuration (only for wiki type knowledge bases)", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiConfig" } ], "x-agent": true, "x-agent-detail": true } } }, "internal_handler.KnowledgeSearchKnowledgeResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" } }, "has_more": { "type": "boolean" }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" } } }, "internal_handler.KnowledgeSpanError": { "type": "object", "properties": { "code": { "type": "string", "x-agent": "error_code" }, "error_code": { "type": "string" }, "error_message": { "type": "string" }, "finished_at": { "type": "string" }, "message": { "type": "string", "x-agent": "error_message" }, "name": { "type": "string" }, "stage": { "type": "string", "x-agent": "failed_stage" } } }, "internal_handler.KnowledgeSpansData": { "type": "object", "properties": { "attempt": { "description": "Attempt is the attempt the trace describes; equals CurrentAttempt.", "type": "integer", "x-agent": true }, "current_attempt": { "type": "integer" }, "current_stage": { "description": "CurrentStage is the stage running now, or the last one that ran.", "type": "string", "x-agent": true }, "knowledge_id": { "type": "string", "x-agent": true }, "last_activity_at": { "description": "LastActivityAt is set while the parse is in flight.", "type": "string", "x-agent": true }, "last_error": { "allOf": [ { "$ref": "#/definitions/internal_handler.KnowledgeSpanError" } ], "x-agent": true }, "latest_attempt": { "type": "integer", "x-agent": true }, "parse_status": { "type": "string", "x-agent": true }, "stall_state": { "description": "StallState is types.StallStateQueued or types.StallStateStalled when an\nin-flight parse has gone quiet.", "type": "string", "x-agent": true }, "trace": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SpanTreeNode" } } }, "internal_handler.KnowledgeTagBatchRequest": { "type": "object", "properties": { "kb_id": { "description": "Knowledge base the documents belong to.", "type": "string", "x-agent": "knowledge_base_id", "x-agent-required": true }, "knowledge_ids": { "description": "Documents that receive the same tags. Mutually exclusive with updates.", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-maximum": "20", "x-agent-required": true }, "tag_ids": { "description": "Tags to set on every listed document. An empty list clears them.", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-maximum": "50", "x-agent-required": true }, "updates": { "description": "Map of knowledge id to the tag ids that replace its current tags.", "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } } } }, "internal_handler.ListAgentsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgent" } }, "disabled_own_agent_ids": { "type": "array", "items": { "type": "string" } }, "success": { "type": "boolean", "example": true } } }, "internal_handler.ListAllUsersResponse": { "type": "object", "properties": { "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "users": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo" } } } }, "internal_handler.ListDocumentsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryDocView" } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" } } }, "internal_handler.ListItemsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryItem" } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" } } }, "internal_handler.ListOrganizationSharedAgentsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationSharedAgentItem" } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" } } }, "internal_handler.ListOrganizationSharedKnowledgeBasesResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "object", "additionalProperties": {} } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" } } }, "internal_handler.ListParserEnginesResponse": { "type": "object", "properties": { "code": { "type": "integer" }, "connected": { "type": "boolean" }, "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineInfo" } }, "docreader_addr": { "type": "string" }, "docreader_transport": { "type": "string" }, "msg": { "type": "string" } } }, "internal_handler.ListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageBackend" } }, "default_storage_backend_id": { "type": "string" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.ListSharedAgentsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SharedAgentInfo" } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" } } }, "internal_handler.ListSharedKnowledgeBasesResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.SharedKnowledgeBaseRow" } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer", "x-agent": true } } }, "internal_handler.ListSkillsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.SkillInfoResponse" } }, "skills_available": { "type": "boolean", "x-agent": true }, "success": { "type": "boolean", "example": true } } }, "internal_handler.ListSystemAdminsResponse": { "type": "object", "properties": { "admins": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo" } }, "total": { "type": "integer" } } }, "internal_handler.ListTopicsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryTopicView" } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" } } }, "internal_handler.MessageResponse": { "type": "object", "properties": { "message": { "type": "string" }, "success": { "type": "boolean", "x-agent": true, "example": true } } }, "internal_handler.ModelCatalogEntryDTO": { "type": "object", "properties": { "api": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.API" }, "context_window": { "type": "integer" }, "cost": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models.ModelCost" }, "dimension": { "type": "integer" }, "id": { "type": "string" }, "input": { "type": "array", "items": { "type": "string" } }, "max_output_tokens": { "type": "integer" }, "name": { "type": "string" }, "reasoning": { "type": "boolean" }, "source": { "description": "Source is the vendor page these facts were read from, so the editor can\nsend an operator to the documentation for this exact model.", "type": "string" }, "thinking_levels": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.ReasoningEffort" } }, "type": { "type": "string" } } }, "internal_handler.ModelProviderDTO": { "type": "object", "properties": { "api": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.API" }, "auth": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_providers.AuthStyle" }, "credentialLabels": { "description": "CredentialLabels rename the primary credential input for the model\ntypes that do not take a plain API key (signed rerank APIs).", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_providers.CredentialLabel" } }, "defaultUrls": { "type": "object", "additionalProperties": { "type": "string" } }, "description": { "type": "string" }, "descriptions": { "type": "object", "additionalProperties": { "type": "string" } }, "extraFields": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_providers.ExtraField" } }, "icon": { "description": "Icon is a data: URI (image/svg+xml;base64) ready for \u003cimg src\u003e.", "type": "string" }, "label": { "type": "string" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "modelTypes": { "type": "array", "items": { "type": "string" } }, "models": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.ModelCatalogEntryDTO" } }, "order": { "type": "integer" }, "requiresAuth": { "type": "boolean" }, "thinking": { "$ref": "#/definitions/internal_handler.ProviderThinkingDTO" }, "value": { "type": "string" }, "website": { "type": "string" } } }, "internal_handler.ModelTestRequest": { "type": "object", "required": [ "modelName" ], "properties": { "apiKey": { "type": "string" }, "appSecret": { "description": "AppSecret 用于 LKEAP / Volcengine Rerank 等需要第二段密钥的场景(对应模型 Parameters.AppSecret)。", "type": "string" }, "baseUrl": { "type": "string" }, "customHeaders": { "type": "object", "additionalProperties": { "type": "string" } }, "dimension": { "type": "integer" }, "extraConfig": { "type": "object", "additionalProperties": { "type": "string" } }, "interfaceType": { "type": "string" }, "modelId": { "description": "ModelID, when set, instructs the handler to substitute any missing\nsecrets (APIKey, AppSecret via ExtraConfig) from the stored model\nrecord before assembling the test client. This lets the \"Test\nconnection\" button work on existing models without making the\nfrontend reload — and ship — the plaintext API key. Other fields\n(BaseURL, ModelName, etc.) on this request still override the\nstored values, so a user can validate a new endpoint against the\nexisting credentials in one click.", "type": "string" }, "modelName": { "type": "string" }, "provider": { "type": "string" }, "source": { "description": "为空时按需默认为 \"remote\"", "type": "string" }, "spec": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelSpecOverride" }, "supportsDimensionOverride": { "type": "boolean" } } }, "internal_handler.MoveKnowledgeRequest": { "type": "object", "required": [ "knowledge_ids", "mode", "source_kb_id", "target_kb_id" ], "properties": { "knowledge_ids": { "description": "Documents to move.", "type": "array", "minItems": 1, "items": { "type": "string" }, "x-agent": true, "x-agent-maximum": "20" }, "mode": { "description": "reuse_vectors keeps the embeddings; reparse processes the documents again.", "type": "string", "enum": [ "reuse_vectors", "reparse" ], "x-agent": true }, "source_kb_id": { "description": "Knowledge base the documents are in now.", "type": "string", "x-agent": "source_knowledge_base_id" }, "target_kb_id": { "description": "Knowledge base to move them to.", "type": "string", "x-agent": "knowledge_base_id" } } }, "internal_handler.MoveKnowledgeResponse": { "type": "object", "properties": { "knowledge_count": { "type": "integer", "x-agent": true }, "message": { "type": "string" }, "source_kb_id": { "type": "string" }, "target_kb_id": { "type": "string" }, "task_id": { "type": "string", "x-agent": true } } }, "internal_handler.MoveKnowledgeToFolderRequest": { "type": "object", "required": [ "kb_id", "knowledge_ids" ], "properties": { "folder_path": { "description": "Target folder path; empty (allowed) means the knowledge base top level.", "type": "string", "x-agent": true }, "kb_id": { "description": "Knowledge base the documents belong to.", "type": "string", "x-agent": "knowledge_base_id" }, "knowledge_ids": { "description": "Documents to move.", "type": "array", "items": { "type": "string" }, "x-agent": true } } }, "internal_handler.PageResponse": { "type": "object", "properties": { "data": {}, "page": { "type": "integer", "x-agent": true }, "page_size": { "type": "integer", "x-agent": true }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer", "x-agent": true } } }, "internal_handler.PatchAgentRequest": { "type": "object", "properties": { "agent_mode": { "description": "Running mode: quick-answer is RAG; smart-reasoning calls tools, MCP and skills", "type": "string", "enum": [ "quick-answer", "smart-reasoning" ], "x-agent": true }, "description": { "description": "What the agent is for", "type": "string", "x-agent": true }, "kb_selection_mode": { "description": "Knowledge bases searched: all, selected (knowledge_bases) or none", "type": "string", "enum": [ "all", "selected", "none" ], "x-agent": true }, "knowledge_bases": { "description": "Selected knowledge bases, replacing the current ones; without\nkb_selection_mode it also switches the mode to selected", "type": "array", "items": { "type": "string" }, "x-agent": "knowledge_base_ids", "x-agent-maximum": "50" }, "mcp_selection_mode": { "description": "MCP services used: all, selected (mcp_services) or none", "type": "string", "enum": [ "all", "selected", "none" ], "x-agent": true }, "mcp_services": { "description": "Selected MCP services, replacing the current ones; without\nmcp_selection_mode it also switches the mode to selected", "type": "array", "items": { "type": "string" }, "x-agent": "mcp_service_ids", "x-agent-maximum": "50" }, "model_id": { "description": "Chat model the agent answers with", "type": "string", "x-agent": true }, "multi_turn_enabled": { "description": "Whether earlier turns are kept in the conversation context", "type": "boolean", "x-agent": true }, "name": { "description": "Agent name", "type": "string", "x-agent": true }, "selected_skills": { "description": "Selected skill names, replacing the current ones; without\nskills_selection_mode it also switches the mode to selected", "type": "array", "items": { "type": "string" }, "x-agent": true, "x-agent-maximum": "50" }, "skills_selection_mode": { "description": "Skills used: all, selected (selected_skills) or none", "type": "string", "enum": [ "all", "selected", "none" ], "x-agent": true }, "system_prompt": { "description": "The whole system prompt", "type": "string", "x-agent": true, "x-agent-max-bytes": "32000" }, "web_search_enabled": { "description": "Whether the agent may search the web", "type": "boolean", "x-agent": true } } }, "internal_handler.PatchKnowledgeBaseRequest": { "type": "object", "properties": { "asr_config": { "description": "Speech transcription.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ASRConfig" } ] }, "auto_tag_config": { "description": "Automatic tagging.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AutoTagConfig" } ] }, "chunking_config": { "description": "Chunking settings. Only the fields present are changed.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkingConfig" } ] }, "description": { "description": "New description. Omit to keep it; an empty string clears it.", "type": "string", "x-agent": true }, "embedding_model_id": { "description": "Embedding model. Cannot change after the knowledge base has documents.", "type": "string", "x-agent": "embedding_model_id" }, "extract_config": { "description": "Graph extraction. Node types stay in the knowledge base editor.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ExtractConfig" } ] }, "faq_config": { "description": "FAQ indexing. Only for an FAQ knowledge base.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.FAQConfig" } ] }, "image_processing_config": { "description": "Image description settings.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ImageProcessingConfig" } ] }, "indexing_strategy": { "description": "Indexing pipelines. A flag left out stays as it is.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.IndexingStrategy" } ] }, "name": { "description": "New name. Omit to keep the current one.", "type": "string", "x-agent": true }, "profile_config": { "description": "AI description of the knowledge base.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseProfileConfig" } ] }, "question_generation_config": { "description": "Generated questions for each chunk.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig" } ] }, "storage_backend_id": { "description": "Storage instance to bind. Omit to keep the current one.", "type": "string", "x-agent": "storage_backend_id" }, "summary_model_id": { "description": "Summary model. model.list returns the ids.", "type": "string", "x-agent": "summary_model_id" }, "vlm_config": { "description": "Image captions.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig" } ] }, "wiki_config": { "description": "Wiki page settings.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WikiConfig" } ] } } }, "internal_handler.PlaceholderGroups": { "type": "object", "properties": { "agent_system_prompt": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PromptPlaceholder" } }, "all": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PromptPlaceholder" } }, "context_template": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PromptPlaceholder" } }, "fallback_prompt": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PromptPlaceholder" } }, "rewrite_prompt": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PromptPlaceholder" } }, "rewrite_system_prompt": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PromptPlaceholder" } }, "system_prompt": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PromptPlaceholder" } } } }, "internal_handler.PreferenceDefaults": { "type": "object", "properties": { "browser_search_instructions": { "type": "string" } } }, "internal_handler.PreviewChunkResult": { "type": "object", "properties": { "content": { "type": "string" }, "context_header": { "type": "string" }, "end": { "type": "integer" }, "seq": { "type": "integer" }, "size_chars": { "type": "integer" }, "size_tokens_approx": { "type": "integer" }, "start": { "type": "integer" } } }, "internal_handler.PreviewChunkingPayload": { "type": "object", "properties": { "child_chunk_size": { "type": "integer" }, "chunk_overlap": { "type": "integer" }, "chunk_size": { "type": "integer" }, "enable_parent_child": { "type": "boolean" }, "languages": { "type": "array", "items": { "type": "string" } }, "parent_chunk_size": { "type": "integer" }, "separators": { "type": "array", "items": { "type": "string" } }, "strategy": { "type": "string" }, "token_limit": { "type": "integer" } } }, "internal_handler.PreviewChunkingRequest": { "type": "object", "properties": { "chunking_config": { "$ref": "#/definitions/internal_handler.PreviewChunkingPayload" }, "text": { "type": "string" } } }, "internal_handler.PreviewChunkingResponse": { "type": "object", "properties": { "chunks": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.PreviewChunkResult" } }, "profile": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.DocProfile" }, "rejected": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.TierRejection" } }, "selected_tier": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.StrategyTier" }, "stats": { "$ref": "#/definitions/internal_handler.PreviewChunkingStats" }, "tier_chain": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.StrategyTier" } } } }, "internal_handler.PreviewChunkingStats": { "type": "object", "properties": { "avg_chars": { "type": "integer" }, "count": { "type": "integer" }, "max_chars": { "type": "integer" }, "min_chars": { "type": "integer" }, "stddev_chars": { "type": "integer" }, "truncated_to": { "description": "TruncatedTo, when set, is the original chunk count before the\nresponse was truncated to previewMaxChunks for transport.", "type": "integer" } } }, "internal_handler.PromoteUserToSystemAdminRequest": { "type": "object", "properties": { "email": { "type": "string" }, "user_id": { "type": "string" } } }, "internal_handler.ProviderThinkingDTO": { "type": "object", "properties": { "format": { "type": "string" }, "levels": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_api.ReasoningEffort" } } } }, "internal_handler.PurgeArchivedRuntimeTasksResponse": { "type": "object", "properties": { "deleted": { "type": "integer" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.RefreshTokenResponse": { "type": "object", "properties": { "access_token": { "type": "string" }, "message": { "type": "string" }, "refresh_token": { "type": "string" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.RemoteModelCheckRequest": { "type": "object", "required": [ "modelName" ], "properties": { "apiKey": { "type": "string" }, "appSecret": { "description": "AppSecret 用于 LKEAP / Volcengine Rerank 等需要第二段密钥的场景(对应模型 Parameters.AppSecret)。", "type": "string" }, "baseUrl": { "type": "string" }, "customHeaders": { "type": "object", "additionalProperties": { "type": "string" } }, "dimension": { "type": "integer" }, "extraConfig": { "type": "object", "additionalProperties": { "type": "string" } }, "interfaceType": { "type": "string" }, "modelId": { "description": "ModelID, when set, instructs the handler to substitute any missing\nsecrets (APIKey, AppSecret via ExtraConfig) from the stored model\nrecord before assembling the test client. This lets the \"Test\nconnection\" button work on existing models without making the\nfrontend reload — and ship — the plaintext API key. Other fields\n(BaseURL, ModelName, etc.) on this request still override the\nstored values, so a user can validate a new endpoint against the\nexisting credentials in one click.", "type": "string" }, "modelName": { "type": "string" }, "provider": { "type": "string" }, "source": { "description": "为空时按需默认为 \"remote\"", "type": "string" }, "spec": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelSpecOverride" }, "supportsDimensionOverride": { "type": "boolean" } } }, "internal_handler.RenameKnowledgeFolderRequest": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "Current folder path.", "type": "string", "x-agent": "from_path" }, "to": { "description": "New folder path.", "type": "string", "x-agent": "to_path" } } }, "internal_handler.ReparseKnowledgeRequest": { "type": "object", "properties": { "process_config": { "description": "ProcessConfig overrides the processing options stored at upload time.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeProcessOverrides" } ] } } }, "internal_handler.ResetUserPasswordRequest": { "type": "object", "required": [ "email", "new_password" ], "properties": { "email": { "type": "string" }, "new_password": { "type": "string" } } }, "internal_handler.ResetUserPasswordResponse": { "type": "object", "properties": { "message": { "type": "string" } } }, "internal_handler.RevokeSystemAdminRequest": { "type": "object", "required": [ "user_id" ], "properties": { "user_id": { "type": "string" } } }, "internal_handler.RuntimeQueuesResponse": { "type": "object", "properties": { "available": { "type": "boolean" }, "model_limiter_available": { "type": "boolean" }, "models": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_models_limiter.RuntimeStat" } }, "parse_concurrency": { "description": "compatibility alias for upstream_concurrency", "type": "integer" }, "pools": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.RuntimeWorkerPool" } }, "queues": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QueueStat" } }, "timestamp": { "type": "integer" }, "upstream_concurrency": { "type": "integer" }, "wiki_concurrency": { "description": "compatibility field", "type": "integer" } } }, "internal_handler.RuntimeTasksResponse": { "type": "object", "properties": { "available": { "type": "boolean" }, "has_more": { "type": "boolean" }, "next_cursor": { "type": "string" }, "page_size": { "type": "integer" }, "tasks": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RuntimeTaskInfo" } } } }, "internal_handler.RuntimeWorkerPool": { "description": "Return every row in the system_settings table (system-scope, not workspace-scoped). SystemAdmin only.", "type": "object", "properties": { "active": { "description": "live workers assigned to this pool", "type": "integer" }, "cluster_capacity": { "description": "sum of live server concurrency", "type": "integer" }, "concurrency": { "description": "configured per instance", "type": "integer" }, "instances": { "description": "live asynq server heartbeats", "type": "integer" }, "name": { "type": "string" }, "queue_count": { "type": "integer" }, "utilization": { "description": "Active / ClusterCapacity", "type": "number" } } }, "internal_handler.SandboxCheckItem": { "type": "object", "properties": { "latency_ms": { "type": "integer" }, "message": { "description": "Message carries free-form provider detail for an executed probe.", "type": "string" }, "name": { "type": "string" }, "ok": { "type": "boolean" }, "reason": { "description": "Reason is a stable code explaining why a probe was skipped. It exists so\nthe UI can phrase the skip in the operator's language instead of echoing\na server-side sentence.", "type": "string" } } }, "internal_handler.SandboxCheckRequest": { "type": "object", "properties": { "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantSandboxConfig" }, "config_id": { "description": "ConfigID lets an edit form test stored credentials while overriding only\nthe fields the admin changed in the drawer.", "type": "string" }, "deep": { "description": "Deep additionally runs a throwaway script. For remote backends this also\ncreates and destroys one sandbox, which is the only way to validate the\ntemplate ID, data plane, in-sandbox execution, and outbound egress. It may\nconsume real sandbox time, so it is opt-in.", "type": "boolean" } } }, "internal_handler.SandboxCheckResponse": { "type": "object", "properties": { "capabilities": { "type": "object", "additionalProperties": { "type": "boolean" } }, "checks": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.SandboxCheckItem" } }, "ok": { "type": "boolean" }, "provider": { "type": "string" } } }, "internal_handler.SearchMessagesRequest": { "type": "object", "required": [ "query" ], "properties": { "limit": { "description": "Maximum number of results to return (default: 20)", "type": "integer" }, "mode": { "description": "Search mode: \"keyword\", \"vector\", \"hybrid\" (default: \"hybrid\")", "type": "string" }, "query": { "description": "Query text for search", "type": "string" }, "session_ids": { "description": "Filter by specific session IDs (optional)", "type": "array", "items": { "type": "string" } } } }, "internal_handler.SearchOrganizationsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SearchableOrganizationItem" } }, "success": { "type": "boolean", "example": true }, "total": { "type": "integer" } } }, "internal_handler.SearchWikiRequest": { "type": "object", "required": [ "query" ], "properties": { "knowledge_base_id": { "type": "string" }, "knowledge_base_ids": { "type": "array", "items": { "type": "string" } }, "limit": { "type": "integer" }, "query": { "type": "string" } } }, "internal_handler.SetUserStatusRequest": { "type": "object", "required": [ "is_active", "user_id" ], "properties": { "is_active": { "type": "boolean" }, "user_id": { "type": "string" } } }, "internal_handler.SetUserStatusResponse": { "type": "object", "properties": { "is_active": { "type": "boolean" }, "message": { "type": "string" }, "user": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo" } } }, "internal_handler.SharedKnowledgeBaseRow": { "type": "object", "properties": { "knowledge_base": { "allOf": [ { "$ref": "#/definitions/internal_handler.KnowledgeBaseView" } ], "x-agent": true }, "org_name": { "type": "string", "x-agent": true }, "organization_id": { "type": "string" }, "permission": { "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole" } ], "x-agent": true }, "share_id": { "type": "string" }, "shared_at": { "type": "string" }, "source_tenant_id": { "type": "integer" } } }, "internal_handler.SkillInfoResponse": { "type": "object", "properties": { "description": { "type": "string", "x-agent": true }, "name": { "type": "string", "x-agent": true } } }, "internal_handler.StorageCheckRequest": { "type": "object", "properties": { "cos": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.COSEngineConfig" }, "ks3": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KS3EngineConfig" }, "minio": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.MinIOEngineConfig" }, "obs": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OBSEngineConfig" }, "oss": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.OSSEngineConfig" }, "provider": { "description": "\"minio\", \"cos\", \"tos\", \"s3\", \"oss\", \"ks3\", \"obs\"", "type": "string" }, "s3": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.S3EngineConfig" }, "tos": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TOSEngineConfig" } } }, "internal_handler.StorageCheckResponse": { "type": "object", "properties": { "bucket_created": { "type": "boolean" }, "message": { "type": "string" }, "ok": { "type": "boolean" } } }, "internal_handler.StorageEngineStatusItem": { "type": "object", "properties": { "allowed": { "type": "boolean" }, "available": { "description": "whether the engine can be used", "type": "boolean" }, "description": { "description": "short description for UI", "type": "string" }, "name": { "description": "\"local\", \"minio\", \"cos\", \"tos\", \"s3\", \"oss\", \"ks3\", \"obs\"", "type": "string" } } }, "internal_handler.SubmittedTaskData": { "type": "object", "properties": { "deleted_count": { "type": "integer", "x-agent": true }, "reparse_count": { "type": "integer", "x-agent": true }, "task_id": { "type": "string" } } }, "internal_handler.SubmittedTaskResponse": { "type": "object", "properties": { "data": { "$ref": "#/definitions/internal_handler.SubmittedTaskData" }, "message": { "type": "string" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.SuccessErrorResponse": { "type": "object", "properties": { "error": { "type": "string" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.SuccessResponse": { "type": "object", "properties": { "success": { "type": "boolean", "x-agent": true, "example": true } } }, "internal_handler.SuggestedQuestionsData": { "type": "object", "properties": { "questions": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SuggestedQuestion" } } } }, "internal_handler.SuggestionEventRequest": { "type": "object", "required": [ "event_type", "suggestion_set_id" ], "properties": { "event_type": { "type": "string" }, "question_id": { "type": "string" }, "suggestion_set_id": { "type": "string" } } }, "internal_handler.TagPageResult": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeTagWithStats" } }, "page": { "type": "integer", "x-agent": true }, "page_size": { "type": "integer", "x-agent": true }, "total": { "type": "integer", "x-agent": true } } }, "internal_handler.TaskIDData": { "type": "object", "properties": { "task_id": { "type": "string", "x-agent": true } } }, "internal_handler.TenantListData": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.TenantResponse" } } } }, "internal_handler.TenantSearchData": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_handler_dto.TenantResponse" } }, "page": { "type": "integer" }, "page_size": { "type": "integer" }, "total": { "type": "integer" } } }, "internal_handler.TestProviderRequest": { "type": "object", "required": [ "provider" ], "properties": { "parameters": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderParameters" }, "provider": { "type": "string" } } }, "internal_handler.TestStoreByIDResponse": { "type": "object", "properties": { "error": { "type": "string" }, "success": { "type": "boolean", "example": true }, "version": { "type": "string" } } }, "internal_handler.TestStoreRawResponse": { "type": "object", "properties": { "error": { "type": "string" }, "success": { "type": "boolean", "example": true }, "version": { "type": "string" } } }, "internal_handler.TestStoreRequest": { "type": "object", "required": [ "connection_config", "engine_type" ], "properties": { "connection_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ConnectionConfig" }, "engine_type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngineType" } } }, "internal_handler.TextRelationExtractionRequest": { "type": "object", "required": [ "model_id", "tags", "text" ], "properties": { "model_id": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } }, "text": { "type": "string" } } }, "internal_handler.TextRelationExtractionResponse": { "type": "object", "properties": { "nodes": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.GraphNode" } }, "relations": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.GraphRelation" } } } }, "internal_handler.UpdateAgentRequest": { "type": "object", "properties": { "avatar": { "description": "Avatar travels as a pointer so an omitted field can be told apart from\nan explicit clear: nil keeps the stored avatar, a pointer to \"\" wipes\nit. As a plain string the two cases were indistinguishable, so a caller\nthat PUT only a config silently zeroed the avatar and still got a 200.", "type": "string" }, "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgentConfig" }, "description": { "type": "string" }, "name": { "type": "string" } } }, "internal_handler.UpdateChunkRequest": { "type": "object", "properties": { "content": { "type": "string" }, "expected_revision": { "type": "integer" }, "is_enabled": { "type": "boolean" } } }, "internal_handler.UpdateChunkResponse": { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Chunk" }, "description": { "type": "string" }, "success": { "type": "boolean", "example": true }, "summary_status": { "type": "string" } } }, "internal_handler.UpdateIMChannelResponse": { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_im.IMChannel" } } }, "internal_handler.UpdateKnowledgeBaseRequest": { "type": "object", "required": [ "name" ], "properties": { "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseConfig" }, "description": { "type": "string" }, "name": { "type": "string" }, "vlm_config": { "description": "VLMConfig updates the knowledge base's multimodal (vision) config.\nOptional: nil means \"no change\", mirroring how CreateKnowledgeBase\naccepts a top-level vlm_config.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig" } ] } } }, "internal_handler.UpdateKnowledgeRequest": { "type": "object", "properties": { "custom_metadata": { "type": "object" }, "description": { "description": "New summary; omit to keep it, empty clears it.", "type": "string", "x-agent": true }, "title": { "description": "New title; omit to keep it.", "type": "string", "x-agent": true } } }, "internal_handler.UpdateKnowledgeResponse": { "type": "object", "properties": { "data": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Knowledge" }, "message": { "type": "string" }, "success": { "type": "boolean", "example": true } } }, "internal_handler.UpdateModelRequest": { "type": "object", "properties": { "description": { "type": "string" }, "display_name": { "type": "string" }, "name": { "type": "string" }, "parameters": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelParameters" }, "source": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelSource" }, "type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.ModelType" } } }, "internal_handler.UpdateProviderRequest": { "type": "object", "properties": { "description": { "type": "string" }, "is_default": { "type": "boolean" }, "name": { "type": "string" }, "parameters": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderParameters" } } }, "internal_handler.UpdateStoreRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" } } }, "internal_handler.UpdateSystemSettingRequest": { "type": "object", "properties": { "value": { "description": "Value is intentionally `any` (decoded as float64 / string / bool /\netc. by the JSON unmarshaller). Service.encodeForType normalises\nthese against the registry's declared type and rejects mismatches." } } }, "internal_handler.UpdateTagRequest": { "type": "object", "properties": { "color": { "type": "string" }, "name": { "description": "New name. Omit to keep the current one.", "type": "string", "x-agent": true }, "sort_order": { "type": "integer" } } }, "internal_handler.ValidateTokenResponse": { "type": "object", "properties": { "message": { "type": "string" }, "success": { "type": "boolean", "example": true }, "user": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo" } } }, "internal_handler.WikiErrorResponse": { "type": "object", "properties": { "error": { "type": "string" } } }, "internal_handler.WikiMessageResponse": { "type": "object", "properties": { "message": { "type": "string", "x-agent": true } } }, "internal_handler.WikiSearchHit": { "type": "object", "properties": { "aliases": { "type": "array", "items": { "type": "string" } }, "id": { "type": "string" }, "knowledge_base_id": { "type": "string" }, "match_snippet": { "type": "string" }, "page_type": { "type": "string" }, "slug": { "type": "string" }, "summary": { "type": "string" }, "title": { "type": "string" } } }, "internal_handler.acceptInvitationByTokenRequest": { "type": "object", "required": [ "token" ], "properties": { "token": { "type": "string" } } }, "internal_handler.addMemberRequest": { "type": "object", "required": [ "email", "role" ], "properties": { "email": { "type": "string" }, "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole" } } }, "internal_handler.addSimilarQuestionsRequest": { "type": "object", "required": [ "similar_questions" ], "properties": { "similar_questions": { "description": "Phrasings to add to the entry.", "type": "array", "minItems": 1, "items": { "type": "string" }, "x-agent": true } } }, "internal_handler.apiPrincipalConfigRequest": { "type": "object", "properties": { "direct_header_name": { "type": "string" }, "hmac_secret": { "type": "string" }, "mode": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.APIPrincipalMode" }, "require_direct_header": { "type": "boolean" }, "signed_token_header_name": { "type": "string" } } }, "internal_handler.apiPrincipalConfigResponse": { "type": "object", "properties": { "direct_header_name": { "type": "string" }, "has_hmac_secret": { "description": "HasHMACSecret reports whether a signing secret is configured. The\nplaintext secret is NEVER returned — clients only learn presence.", "type": "boolean" }, "mode": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.APIPrincipalMode" }, "require_direct_header": { "type": "boolean" }, "signed_token_header_name": { "type": "string" } } }, "internal_handler.apiPrincipalTestTokenRequest": { "type": "object", "properties": { "expires_in_seconds": { "type": "integer" }, "external_user_id": { "type": "string" } } }, "internal_handler.apiPrincipalTestTokenResponse": { "type": "object", "properties": { "expires_at_unix": { "type": "integer" }, "expires_in_seconds": { "type": "integer" }, "external_user_id": { "type": "string" }, "header_name": { "type": "string" }, "token": { "type": "string" } } }, "internal_handler.auditLogListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AuditLog" } }, "next_cursor": { "description": "NextCursor is the id of the last entry on this page, 0 when it is empty.", "type": "integer", "x-agent": true }, "success": { "type": "boolean" } } }, "internal_handler.batchReparseKnowledgeRequest": { "type": "object", "required": [ "ids", "kb_id" ], "properties": { "ids": { "description": "Documents to reparse.", "type": "array", "items": { "type": "string" }, "x-agent": "knowledge_ids" }, "kb_id": { "description": "Knowledge base the documents belong to.", "type": "string", "x-agent": "knowledge_base_id" }, "process_config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeProcessOverrides" } } }, "internal_handler.createInvitationRequest": { "type": "object", "required": [ "email", "role" ], "properties": { "email": { "type": "string" }, "message": { "type": "string" }, "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole" } } }, "internal_handler.createInviteLinkRequest": { "type": "object", "required": [ "role" ], "properties": { "message": { "type": "string" }, "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole" } } }, "internal_handler.createTenantRequest": { "type": "object", "required": [ "name" ], "properties": { "description": { "type": "string", "maxLength": 512 }, "name": { "type": "string", "maxLength": 128, "minLength": 1 } } }, "internal_handler.faqDeleteRequest": { "type": "object", "required": [ "ids" ], "properties": { "ids": { "description": "Entries to delete (entry_id).", "type": "array", "minItems": 1, "items": { "type": "integer" }, "x-agent": "entry_ids", "x-agent-maximum": "20" } } }, "internal_handler.imageListRequestBody": { "type": "object", "properties": { "attr_filters": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } }, "attr_rules": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": { "type": "string" } } }, "is_enabled": { "type": "boolean" }, "keyword": { "type": "string" }, "knowledge_ids": { "type": "array", "items": { "type": "string" } }, "page": { "description": "Page", "type": "integer", "minimum": 1 }, "page_size": { "description": "Page size", "type": "integer", "maximum": 1000, "minimum": 1 }, "search_in": { "type": "array", "items": { "type": "string" } }, "sort_by": { "type": "string" }, "sort_order": { "type": "string" } } }, "internal_handler.invitationLookupRequest": { "type": "object", "required": [ "token" ], "properties": { "token": { "type": "string" } } }, "internal_handler.invitationLookupResponse": { "type": "object", "properties": { "expires_at": { "type": "string" }, "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole" }, "tenant_id": { "type": "integer" }, "tenant_name": { "type": "string" } } }, "internal_handler.meEnvVarRequest": { "type": "object", "properties": { "name": { "type": "string" }, "sandbox_config_id": { "type": "string" }, "skill_id": { "type": "string" }, "value": { "description": "Value is unused by the delete endpoints. Clearing a value is a delete\nrather than a write of \"\", so a member always has one unambiguous way to\nrevoke.", "type": "string" } } }, "internal_handler.platformAPIKeyCreateRequest": { "type": "object", "properties": { "capabilities": { "type": "array", "items": { "type": "string" } }, "expires_at_unix": { "type": "integer" }, "name": { "type": "string" } } }, "internal_handler.registerByInviteRequest": { "type": "object", "required": [ "email", "password", "token", "username" ], "properties": { "email": { "type": "string" }, "password": { "type": "string", "minLength": 6 }, "token": { "type": "string" }, "username": { "type": "string" } } }, "internal_handler.resolveAncestorsRequest": { "type": "object", "properties": { "resource_ids": { "type": "array", "items": { "type": "string" } } } }, "internal_handler.sandboxConfigRequest": { "type": "object", "required": [ "name" ], "properties": { "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantSandboxConfig" }, "description": { "type": "string" }, "name": { "type": "string" } } }, "internal_handler.sandboxConfigResponse": { "type": "object", "properties": { "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantSandboxConfig" }, "created_at": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "sandbox_type": { "type": "string" }, "updated_at": { "type": "string" } } }, "internal_handler.skillEnvResponse": { "type": "object", "properties": { "description": { "type": "string" }, "is_set": { "type": "boolean" }, "name": { "type": "string" }, "required": { "type": "boolean" } } }, "internal_handler.skillPatchRequest": { "type": "object", "properties": { "enabled": { "description": "Enabled is a pointer because its absence is not a request to disable the\nskill; a body may carry envs instead.", "type": "boolean" }, "envs": { "description": "Envs is a pointer to a map because \"sent an empty object\" and \"did not\nmention envs\" are different requests: the first clears what it names,\nthe second must leave every stored value alone.", "type": "object", "additionalProperties": { "type": "string" } } } }, "internal_handler.skillResponse": { "type": "object", "properties": { "bundle_sha256": { "type": "string" }, "created_at": { "type": "string" }, "description": { "type": "string" }, "enabled": { "type": "boolean" }, "envs": { "type": "array", "items": { "$ref": "#/definitions/internal_handler.skillEnvResponse" } }, "error": { "type": "string" }, "id": { "type": "string" }, "install_message_id": { "type": "string" }, "install_session_id": { "type": "string" }, "installed_snapshot_id": { "type": "string" }, "name": { "type": "string" }, "served": { "description": "Served is the previous version that keeps running while this install\nis in flight or after it failed.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_application_service.SkillServedInfo" } ] }, "status": { "type": "string" }, "updated_at": { "type": "string" }, "version": { "type": "string" } } }, "internal_handler.skillSourceRequest": { "type": "object", "properties": { "source": { "description": "Source is exactly one of: \"@owner/slug\" or a slash-free slug (ClawHub),\na github.com / gitlab.com / skills.sh / clawhub / skillhub page URL, a\nClawHub skills-sh catalog page or \"skills-sh:owner/repo/slug\" locator, or\na direct zip/SKILL.md URL. Bare \"owner/slug\" is rejected: it is both a\nClawHub id and a GitHub repo. The fetch carries no credential.", "type": "string" } } }, "internal_handler.storageBackendRequest": { "type": "object", "required": [ "name", "provider" ], "properties": { "config": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.StorageBackendConfig" }, "name": { "type": "string" }, "provider": { "type": "string" }, "status": { "type": "string" } } }, "internal_handler.tenantAPIKeyCreateResponse": { "type": "object", "properties": { "api_key": { "type": "string" }, "capabilities": { "type": "array", "items": { "type": "string" } }, "created_at": { "type": "string" }, "expires_at": { "type": "string" }, "full_access": { "type": "boolean" }, "id": { "type": "integer" }, "knowledge_base_ids": { "type": "array", "items": { "type": "string" } }, "last_used_at": { "type": "string" }, "name": { "type": "string" }, "scope_type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.APIKeyScopeType" }, "token": { "type": "string" } } }, "internal_handler.tenantAPIKeyResponse": { "type": "object", "properties": { "api_key": { "type": "string" }, "capabilities": { "type": "array", "items": { "type": "string" } }, "created_at": { "type": "string" }, "expires_at": { "type": "string" }, "full_access": { "type": "boolean" }, "id": { "type": "integer" }, "knowledge_base_ids": { "type": "array", "items": { "type": "string" } }, "last_used_at": { "type": "string" }, "name": { "type": "string" }, "scope_type": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.APIKeyScopeType" } } }, "internal_handler.updateLastFAQImportResultDisplayStatusRequest": { "type": "object", "required": [ "display_status" ], "properties": { "display_status": { "type": "string", "enum": [ "open", "close" ] } } }, "internal_handler.updateMemberRoleRequest": { "type": "object", "required": [ "role" ], "properties": { "role": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole" } } }, "internal_handler.updateMyPreferencesRequest": { "type": "object", "properties": { "browser_search_instructions": { "type": "string", "maxLength": 4000 }, "last_active_tenant_id": { "description": "LastActiveTenantID lets clients persist \"after a fresh login,\ndrop me back into this workspace\" across devices. The SPA sends\nthis after every tenant switch; POST /auth/switch-tenant records\nthe same preference server-side. Send a positive workspace id to\nset / replace, or 0 to clear. Membership is validated at next\nlogin, not here. Nil = field omitted from the PATCH and stays\nuntouched.", "type": "integer" } } }, "internal_handler_session.AttachmentUpload": { "type": "object", "properties": { "data": { "description": "Base64-encoded file content", "type": "string" }, "file_name": { "description": "Original filename", "type": "string" }, "file_size": { "description": "File size in bytes", "type": "integer" } } }, "internal_handler_session.CreateKnowledgeQARequest": { "type": "object", "properties": { "agent_enabled": { "description": "Whether agent mode is enabled for this request", "type": "boolean" }, "agent_id": { "description": "Selected custom agent ID (backend resolves shared agent and its workspace from share relation)", "type": "string" }, "agent_source_tenant_id": { "description": "Optional disambiguator; backend still verifies the share relation", "type": "integer" }, "assistant_access": { "description": "AssistantAccess is the WeKnora assistant access level: read_only,\nconfirm or auto_write. The workspace ceiling caps it; other agents\nignore it.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.AssistantAccessLevel" } ] }, "attachment_ids": { "description": "Pre-uploaded session-scoped document IDs", "type": "array", "items": { "type": "string" } }, "attachment_uploads": { "description": "Attached files (documents, audio, etc.)", "type": "array", "items": { "$ref": "#/definitions/internal_handler_session.AttachmentUpload" } }, "channel": { "description": "Source channel: \"web\", \"api\", \"im\", etc.", "type": "string" }, "disable_title": { "description": "Whether to disable auto title generation", "type": "boolean" }, "images": { "description": "Attached images for multimodal chat", "type": "array", "items": { "$ref": "#/definitions/internal_handler_session.ImageAttachment" } }, "knowledge_base_ids": { "description": "Selected knowledge base ID for this request", "type": "array", "items": { "type": "string" } }, "knowledge_ids": { "description": "Selected knowledge ID for this request", "type": "array", "items": { "type": "string" } }, "local_browser_enabled": { "description": "Browser source", "type": "boolean" }, "mcp_service_ids": { "description": "Per-request MCP services selected via @mention", "type": "array", "items": { "type": "string" } }, "mentioned_items": { "description": "@mentioned knowledge bases and files", "type": "array", "items": { "$ref": "#/definitions/internal_handler_session.MentionedItemRequest" } }, "page_context": { "description": "PageContext is the WeKnora page the user has open (agent mode only).", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.PageContext" } ] }, "query": { "description": "Query text; may be empty only when an image or file is attached", "type": "string" }, "question_origin": { "description": "QuestionOrigin is the knowledge source of a picked suggested question.", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionOrigin" } ] }, "reasoning_effort": { "description": "ReasoningEffort overrides thinking for this request; empty inherits the agent configuration.", "type": "string" }, "skill_names": { "description": "Per-request Skills selected via @mention", "type": "array", "items": { "type": "string" } }, "suggestion_attribution": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.SuggestionAttribution" }, "summary_model_id": { "description": "Optional summary model ID for this request (overrides session default)", "type": "string" }, "tag_ids": { "description": "@mentioned tag IDs (display/debug; scoped via MentionedItems)", "type": "array", "items": { "type": "string" } }, "web_search_enabled": { "description": "Whether web search is enabled for this request", "type": "boolean" } } }, "internal_handler_session.CreateSessionRequest": { "type": "object", "properties": { "description": { "description": "Description for the session (optional)", "type": "string" }, "kind": { "type": "string", "enum": [ "", "assistant" ] }, "project_dir": { "description": "ProjectDir is an optional Lite host-sandbox binding. When set it must\nbe an absolute path already present in the user-approved ProjectDirs\nlist. Empty means the session gets an auto-allocated workspace.", "type": "string" }, "title": { "description": "Title for the session (optional)", "type": "string" } } }, "internal_handler_session.ForkSessionRequest": { "type": "object", "required": [ "message_id" ], "properties": { "message_id": { "description": "MessageID is the message to branch at. A user message copies history\nstrictly before it (the client prefills that question). An assistant\nmessage copies history through that answer so the branch continues after it.", "type": "string" }, "title": { "description": "Title is optional. Empty falls back to the source title plus a suffix.", "type": "string" } } }, "internal_handler_session.GenerateTitleRequest": { "type": "object", "required": [ "messages" ], "properties": { "messages": { "description": "Messages to use as context for title generation", "type": "array", "items": { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.Message" } } } }, "internal_handler_session.ImageAttachment": { "type": "object", "properties": { "caption": { "description": "VLM analysis result (context-aware, single call)", "type": "string" }, "data": { "description": "base64 data URI from frontend (data:image/png;base64,...)", "type": "string" }, "url": { "description": "serving URL after saving to storage", "type": "string" } } }, "internal_handler_session.MentionedItemRequest": { "type": "object", "properties": { "id": { "type": "string" }, "kb_id": { "description": "Parent knowledge base for file/tag mentions", "type": "string" }, "kb_name": { "description": "Display name for parent KB", "type": "string" }, "kb_type": { "description": "\"document\" or \"faq\" (only for kb type)", "type": "string" }, "name": { "type": "string" }, "service_id": { "description": "Parent MCP service for MCP tool mentions", "type": "string" }, "skill_name": { "description": "Preloaded agent skill name", "type": "string" }, "type": { "description": "\"kb\", \"file\", \"tag\", \"mcp\", \"skill\"", "type": "string" } } }, "internal_handler_session.RewindSessionRequest": { "type": "object", "required": [ "message_id" ], "properties": { "message_id": { "description": "MessageID is the message to rewind to. A user message deletes itself and\neverything after (the client prefills that question). An assistant\nmessage keeps itself and deletes everything after.", "type": "string" } } }, "internal_handler_session.SearchKnowledgeRequest": { "type": "object", "required": [ "query" ], "properties": { "disable_keywords_match": { "description": "Vector recall only", "type": "boolean" }, "disable_vector_match": { "description": "Keyword recall only", "type": "boolean" }, "keyword_threshold": { "description": "Minimum keyword score", "type": "number" }, "knowledge_base_id": { "description": "Single knowledge base ID (for backward compatibility)", "type": "string" }, "knowledge_base_ids": { "description": "IDs of knowledge bases to search (multi-KB support)", "type": "array", "items": { "type": "string" } }, "knowledge_ids": { "description": "IDs of specific knowledge (files) to search", "type": "array", "items": { "type": "string" } }, "match_count": { "description": "Number of results to return", "type": "integer" }, "mentioned_items": { "description": "Optional scoped tag mentions", "type": "array", "items": { "$ref": "#/definitions/internal_handler_session.MentionedItemRequest" } }, "query": { "description": "Query text to search for", "type": "string" }, "rerank": { "description": "Rerank override", "allOf": [ { "$ref": "#/definitions/github_com_Tencent_WeKnora_internal_types.RerankOptions" } ] }, "tag_ids": { "description": "Tag IDs for filtering within a single KB", "type": "array", "items": { "type": "string" } }, "vector_threshold": { "description": "Optional overrides of the tenant retrieval config. Omitted fields keep it.", "type": "number" } } }, "internal_handler_session.SteerMessageRequest": { "type": "object", "required": [ "query" ], "properties": { "channel": { "type": "string" }, "delivery": { "description": "Delivery is \"after\" (default) or \"inject\". See the constants above.", "type": "string" }, "expected_assistant_message_id": { "description": "Optional for older clients. New clients pin delivery to the run they see\nand supply a stable ID so a consume event may precede the HTTP response.", "type": "string" }, "mentioned_items": { "type": "array", "items": { "$ref": "#/definitions/internal_handler_session.MentionedItemRequest" } }, "query": { "type": "string" }, "steer_id": { "type": "string" } } }, "internal_handler_session.StopSessionRequest": { "type": "object", "required": [ "message_id" ], "properties": { "message_id": { "type": "string" } } }, "internal_handler_session.batchDeleteRequest": { "type": "object", "properties": { "delete_all": { "type": "boolean" }, "ids": { "type": "array", "items": { "type": "string" } } } } }, "securityDefinitions": { "ApiKeyAuth": { "description": "API Key 认证:空间 Key 固定访问所属空间;平台 Key 调用空间接口时需同时传 X-Tenant-ID", "type": "apiKey", "name": "X-API-Key", "in": "header" }, "Bearer": { "description": "用户登录认证:输入 Bearer {token} 格式的 JWT 令牌", "type": "apiKey", "name": "Authorization", "in": "header" } } }