basePath: /api/v1 definitions: github_com_Tencent_WeKnora_internal_application_service.WikiLintIssue: properties: auto_fixable: type: boolean description: type: string page_slug: type: string severity: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_application_service.WikiLintIssueSeverity' target_slug: description: |- TargetSlug identifies the other page involved in the issue (e.g. the broken link target, or the entity slug for a missing cross-ref). It is the structured field used by AutoFix instead of parsing Description. type: string type: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_application_service.WikiLintIssueType' type: object github_com_Tencent_WeKnora_internal_application_service.WikiLintIssueSeverity: enum: - info - warning - error type: string x-enum-varnames: - SeverityInfo - SeverityWarning - SeverityError github_com_Tencent_WeKnora_internal_application_service.WikiLintIssueType: enum: - orphan_page - broken_link - stale_ref - missing_cross_ref - empty_content - duplicate_slug type: string x-enum-varnames: - LintIssueOrphanPage - LintIssueBrokenLink - LintIssueStaleRef - LintIssueMissingCrossRef - LintIssueEmptyContent - LintIssueDuplicateSlug github_com_Tencent_WeKnora_internal_application_service.WikiLintReport: properties: health_score: description: 0-100 type: integer issues: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_application_service.WikiLintIssue' type: array knowledge_base_id: type: string stats: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiStats' summary: type: string type: object github_com_Tencent_WeKnora_internal_datasource.ConnectorMetadata: properties: auth_type: description: '"oauth2", "api_key", "token", etc.' type: string capabilities: description: '"incremental", "webhook", "deletion_sync", etc.' items: type: string type: array description: type: string icon: type: string name: type: string priority: description: Priority order for UI display (lower = higher priority) type: integer type: type: string type: object github_com_Tencent_WeKnora_internal_errors.AppError: properties: code: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.ErrorCode' details: {} message: type: string type: object github_com_Tencent_WeKnora_internal_errors.ErrorCode: 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 type: integer 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_infrastructure_chunker.DocProfile: 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) items: type: string type: array 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: additionalProperties: type: integer description: Markdown structure type: object 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 type: object github_com_Tencent_WeKnora_internal_infrastructure_chunker.StrategyTier: enum: - heading - heuristic - legacy type: string x-enum-varnames: - TierHeading - TierHeuristic - TierLegacy github_com_Tencent_WeKnora_internal_infrastructure_chunker.TierRejection: properties: reason: type: string tier: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.StrategyTier' type: object github_com_Tencent_WeKnora_internal_models_limiter.RuntimeStat: properties: active: type: integer limit: type: integer model_id: type: string name: type: string waiting: type: integer type: object github_com_Tencent_WeKnora_internal_types.APIPrincipalMode: enum: - tenant - direct_header - signed_token type: string x-enum-varnames: - APIPrincipalModeTenant - APIPrincipalModeDirect - APIPrincipalModeSignedToken github_com_Tencent_WeKnora_internal_types.ASRConfig: properties: enabled: type: boolean language: description: 'optional: language hint for transcription' type: string model_id: type: string type: object github_com_Tencent_WeKnora_internal_types.AdminCreateUserRequest: properties: email: type: string password: type: string username: maxLength: 50 minLength: 2 type: string required: - email - username type: object github_com_Tencent_WeKnora_internal_types.AgentStep: properties: iteration: description: Iteration number (0-indexed) type: integer reasoning_content: description: |- ReasoningContent stores the OpenAI-protocol reasoning_content emitted by the model in this round. Persisted on AgentStep so cross-turn replay can put it back on the assistant message — required by MiMo / DeepSeek V3.2+ thinking mode, ignored by providers that don't recognize the field. 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) items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ToolCall' type: array type: object github_com_Tencent_WeKnora_internal_types.AnswerStrategy: enum: - all - random type: string x-enum-varnames: - AnswerStrategyAll - AnswerStrategyRandom github_com_Tencent_WeKnora_internal_types.AuditAction: 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 type: string 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: properties: action: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.AuditAction' actor_role: type: string actor_user_id: type: string created_at: type: string details: items: type: integer type: array id: type: integer outcome: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.AuditOutcome' request_method: type: string request_path: type: string scope_id: type: string scope_type: type: string target_id: type: string target_type: type: string target_user_id: type: string tenant_id: type: integer type: object github_com_Tencent_WeKnora_internal_types.AuditOutcome: enum: - success - accepted - denied - failed - partial - canceled type: string x-enum-varnames: - AuditOutcomeSuccess - AuditOutcomeAccepted - AuditOutcomeDenied - AuditOutcomeFailed - AuditOutcomePartial - AuditOutcomeCanceled github_com_Tencent_WeKnora_internal_types.AutoTagConfig: properties: enabled: type: boolean max_tags: type: integer model_id: type: string skip_if_tagged: description: |- SkipIfTagged leaves documents that already carry tags untouched, so a deliberate manual classification is not diluted by model guesses. It is a pointer because the default is true: rows written before this field existed decode to nil and must not silently flip to "always append". type: boolean type: object github_com_Tencent_WeKnora_internal_types.COSEngineConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.ChatHistoryConfig: properties: embedding_model_id: description: |- EmbeddingModelID is the ID of the embedding model used for vectorizing chat messages. Once 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. This is set internally when the feature is first enabled; users should not set this directly. type: string type: object github_com_Tencent_WeKnora_internal_types.ChunkingConfig: properties: child_chunk_size: description: |- ChildChunkSize is the size of child chunks used for embedding (default: 384). Only used when EnableParentChild is true. type: integer chunk_overlap: description: Chunk overlap type: integer chunk_size: description: Chunk size type: integer enable_parent_child: description: |- EnableParentChild enables two-level parent-child chunking strategy. When enabled, large parent chunks provide context while small child chunks are used for vector matching. Retrieval matches on child but returns parent content. type: boolean languages: description: |- Languages hints the heuristic patterns. Empty = auto-detect from content. Examples: ["de"], ["en", "zh"]. items: type: string type: array parent_chunk_size: description: |- ParentChunkSize is the size of parent chunks (default: 4096). Only used when EnableParentChild is true. type: integer parser_engine_rules: description: |- ParserEngineRules configures which parser engine to use for each file type. When empty, DefaultParserEngine is used (builtin/simple routing, except types that only a specific engine can parse: ppt/pptx fall back to markitdown). A linked anydoc binding is preferred for every type it converts. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule' type: array separators: description: Separators items: type: string type: array strategy: description: |- Strategy selects the adaptive chunking tier. Empty / "legacy" preserves the historical recursive splitter; "auto" lets a profiler pick between heading-aware, heuristic and recursive tiers; "heading" / "heuristic" / "recursive" pin the tier explicitly. type: string table_metadata_instructions: description: |- TableMetadataInstructions contains optional business guidance used when generating searchable summaries for CSV/Excel tables. The system-owned output contract remains fixed; these instructions only add domain context. type: string token_limit: description: |- TokenLimit caps chunk size in approximate tokens. 0 = use ChunkSize as a character count. type: integer type: object github_com_Tencent_WeKnora_internal_types.ConnectionConfig: 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 (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). Addr is reused for the MySQL protocol "host:9030"; HTTPPort + the host of Addr together form the FE HTTP endpoint used by Stream Load. type: integer insecure_skip_verify: description: |- InsecureSkipVerify disables TLS certificate verification when talking to the backing store over HTTPS. Defaults to false (secure). Set to true ONLY for self-signed development clusters; production deployments should provide trusted certificates via the system CA pool. Cross-driver applicable but currently only the OpenSearch driver (Phase 3) reads this field. Note: this differs from the Qdrant-specific UseTLS below, which *enables* TLS on gRPC connections — InsecureSkipVerify only controls *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"). Auto-populated by TestConnection on successful connectivity check. type: string type: object github_com_Tencent_WeKnora_internal_types.ContextCompressionStrategy: enum: - sliding_window - smart type: string x-enum-varnames: - ContextCompressionSlidingWindow - ContextCompressionSmart github_com_Tencent_WeKnora_internal_types.ContextConfig: properties: compression_strategy: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ContextCompressionStrategy' description: 'Compression strategy: "sliding_window" or "smart"' max_tokens: description: Maximum tokens allowed in LLM context type: integer recent_message_count: description: |- For sliding_window: number of messages to keep For smart: number of recent messages to keep uncompressed type: integer summarize_threshold: description: 'Summarize threshold: number of messages before summarization' type: integer type: object github_com_Tencent_WeKnora_internal_types.CreateOrganizationRequest: properties: avatar: description: optional avatar URL maxLength: 512 type: string description: maxLength: 1000 type: string 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: maxLength: 255 minLength: 1 type: string required: - name type: object github_com_Tencent_WeKnora_internal_types.CredentialsConfig: properties: weknoracloud: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WeKnoraCloudCredentials' type: object github_com_Tencent_WeKnora_internal_types.CubeEgressRule: 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 needs Host or SNI: the target has to reach CubeEgress for it to answer with 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. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.CubeHeaderInject' type: array methods: items: type: string type: array name: type: string path: type: string scheme: type: string sni: type: string type: object github_com_Tencent_WeKnora_internal_types.CubeHeaderInject: properties: format: type: string header: type: string secret: type: string type: object github_com_Tencent_WeKnora_internal_types.CubeSandboxConfig: 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. items: type: string type: array http_timeout_sec: description: |- HTTPTimeoutSec bounds each HTTP call to the sandbox control plane. 0 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 type: object github_com_Tencent_WeKnora_internal_types.CustomAgentConfig: properties: agent_mode: description: |- ===== Basic Settings ===== Agent mode: "quick-answer" for RAG mode, "smart-reasoning" for ReAct agent mode type: string agent_type: description: |- AgentType is a preset category under smart-reasoning mode that pre-fills system prompt, allowed tools and recommended KB compatibility. Valid values: "rag-qa", "wiki-qa", "hybrid-rag-wiki", "custom". Empty / unknown values are treated as "custom" (no preset applied). Ignored for quick-answer mode. type: string allowed_tools: description: Allowed tools (only for agent type) items: type: string type: array 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 / scanned documents (PDF/PPT whose pages are images). Disabled by default because it materially increases parse latency; only triggers when the extracted 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 document this agent sends to the VLM for OCR. 0 falls back to the global default (WEKNORA_CHAT_ATTACHMENT_OCR_MAX_PAGES). More pages means higher coverage but slower parsing and more VLM cost. type: integer attachment_parse_wait_timeout_sec: description: |- AttachmentParseWaitTimeoutSec bounds, in seconds, how long a chat turn waits for this agent's still-parsing attachments before proceeding with only the finished ones. 0 falls back to the global default (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 ===== ChatParserEngineRules selects parser engines for session-scoped chat attachments by file type. Takes precedence over the tenant-level ParserEngineConfig.ChatParserEngineRules; an explicit per-request parser_engine still overrides both. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule' type: array citation_enabled: description: |- Whether final answers include knowledge/web source citations. Nil defaults to true so 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. If set and ContextTemplate is empty, the template content will be resolved at startup. type: string data_analysis_enabled: description: |- ===== Data Analysis Settings ===== Whether to run the legacy in-pipeline DuckDB SQL data-analysis stage when the retrieved chunks include CSV/Excel files. This issues an extra LLM call to generate a SQL query and is disabled by default because most quick-answer / RAG-style agents do not want the added latency. type: boolean embedding_top_k: description: |- ===== Retrieval Strategy Settings (for both modes) ===== Embedding/Vector retrieval top K type: integer enable_query_expansion: description: |- ===== Advanced Settings (mainly for normal mode) ===== Whether 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 > this value, use FAQ answer directly type: number faq_priority_enabled: description: |- ===== FAQ Strategy Settings ===== Whether 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 type: integer image_storage_provider: description: |- Storage provider for image uploads: "local", "minio", "cos", "tos", "s3", "oss", "ks3". Empty means use the global/workspace default provider. type: string image_upload_enabled: description: |- ===== Image Upload / Multimodal Settings ===== Whether image upload is enabled for this agent (default: false) type: boolean intent_prompts: additionalProperties: type: string description: |- IntentPrompts holds per-intent system prompt overrides for non-retrieval intents (greeting, chitchat, etc.). Empty values fall back to templates under config/prompt_templates/intent_prompts.yaml. type: object kb_selection_mode: description: |- ===== Knowledge Base Settings ===== Knowledge base selection mode: "all" = all KBs, "selected" = specific KBs, "none" = no KB type: string keyword_threshold: description: Keyword retrieval threshold type: number knowledge_bases: description: Associated knowledge base IDs (only used when KBSelectionMode is "selected") items: type: string type: array 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. Smart-reasoning ReAct rounds send this value as-is (zero becomes DefaultMaxCompletionTokens at call time: 4096, or 24576 with a sandbox). type: integer max_iterations: description: |- ===== Agent Mode Settings ===== Maximum iterations for the ReAct loop. Zero is unset (filled with a default). A negative value is unlimited: the loop runs until the model stops, 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 authorization before skipping. <=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 mcp_services: description: Selected MCP service IDs (only used when MCPSelectionMode is "selected") items: type: string type: array memory_enabled: description: |- Whether this agent may read the user's long-term memory. Nil inherits the workspace setting; false opts a single agent out of memory even when the workspace has it on. There is no "on" that overrides the workspace. type: boolean model_id: description: |- ===== Model Settings ===== Model ID to use for conversations type: string multi_turn_enabled: description: |- ===== Multi-turn Conversation Settings ===== Whether multi-turn conversation is enabled type: boolean query_understand_model_id: description: |- Dedicated chat model ID for the query-understanding (rewrite + intent) step. When empty, the main conversation ModelID is used as a fallback. type: string question_suggestions: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionSuggestionConfig' description: |- ===== Conversation Question Suggestions ===== QuestionSuggestions owns both the static/knowledge-backed prompts shown before the first user turn and the contextual follow-up questions shown after a completed assistant answer. 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) When true, knowledge base retrieval only happens if user explicitly mentions KB/files with @ When 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 ===== SandboxConfigID selects which workspace sandbox config this agent's skill scripts run on. Empty means sandbox execution is disabled. This references the LOGICAL config, never a specific revision: keeping the indirection here is what would let credential rotation happen without re-pointing every agent (see the spec's §4.8). type: string selected_skills: description: Selected skill names (only used when SkillsSelectionMode is "selected") items: type: string type: array skills_selection_mode: description: |- ===== Skills Settings (only for smart-reasoning mode) ===== Skills selection mode: "all" = all preloaded skills, "selected" = specific skills, "none" = no skills type: string supported_file_types: description: |- ===== File Type Restriction Settings ===== Supported file types for this agent (e.g., ["csv", "xlsx", "xls"]) Empty means all file types are supported When set, only files with matching extensions can be used with this agent items: type: string type: array system_prompt: description: System prompt for the agent (unified prompt, uses web_search_status placeholder for dynamic behavior) type: string system_prompt_id: description: |- SystemPromptID references a template ID in prompt_templates/ YAML files. If set and SystemPrompt is empty, the template content will be resolved at startup. 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 ===== Whether web search is enabled type: boolean web_search_max_results: description: Maximum web search results type: integer web_search_provider_id: description: |- WebSearchProviderID references a specific WebSearchProviderEntity. If empty, the workspace's default provider (is_default=true) is used. type: string type: object github_com_Tencent_WeKnora_internal_types.DataSource: properties: config: description: |- Encrypted configuration (API credentials, tokens, etc.) Stored as JSON with AES-256-GCM encryption items: type: integer type: array conflict_strategy: description: 'Conflict resolution strategy: overwrite or skip' type: string created_at: description: Creation timestamp type: string deleted_at: allOf: - $ref: '#/definitions/gorm.DeletedAt' description: Soft delete timestamp 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) items: type: integer type: array last_sync_result: description: Summary of last sync result items: type: integer type: array latest_sync_log: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SyncLog' description: Latest sync log (not stored in DB, populated on query) 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 type: object github_com_Tencent_WeKnora_internal_types.DockerSandboxConfig: properties: cpu_limit: description: |- CPULimit is the number of CPU cores one sandbox may use. 0 uses the built-in default. type: number host: description: |- Host is the daemon endpoint in DOCKER_HOST form. Empty means the local unix 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 is reclaimed. The daemon has no idle timeout of its own, so this is what stops 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 "none" for no egress. Nothing else is accepted — host and container: modes share another namespace outright, and a named network is usually the deployment's own compose network, which would put the sandbox next to Postgres and Redis. type: string pids_limit: description: |- PidsLimit caps how many processes one sandbox may run. 0 uses the built-in default. type: integer runtime: description: |- Runtime selects an alternative OCI runtime such as "runsc" (gVisor). Empty uses the daemon default. type: string tls_cert_path: description: |- TLSCertPath is a directory on the WeKnora host containing ca.pem, cert.pem and key.pem. Required when Host is a TCP endpoint. type: string type: object github_com_Tencent_WeKnora_internal_types.E2BHostRule: properties: headers: additionalProperties: type: string description: |- Headers values are credentials and are encrypted at rest; names stay readable so operators can see which headers are injected. type: object host: type: string type: object github_com_Tencent_WeKnora_internal_types.E2BSandboxConfig: 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. 0 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 "-." through public DNS and TLS, so it needs no value here. Self-hosted E2B-compatible control planes usually serve every sandbox from one gateway address and expect the sandbox authority in the Host header; setting this makes WeKnora dial the gateway directly instead of requiring wildcard DNS and a certificate for the sandbox domain. An "http://" gateway also downgrades the data-plane scheme, which the E2B SDK otherwise pins to https. type: string sandbox_domain: type: string template_id: type: string type: object github_com_Tencent_WeKnora_internal_types.EmbeddingParameters: properties: dimension: type: integer supports_dimension_override: type: boolean truncate_prompt_tokens: type: integer type: object github_com_Tencent_WeKnora_internal_types.ExtractConfig: properties: custom_instructions: description: |- CustomInstructions adds domain-specific extraction guidance while the system keeps ownership of the structured graph output protocol. type: string enabled: type: boolean nodes: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.GraphNode' type: array relations: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.GraphRelation' type: array tags: items: type: string type: array text: type: string type: object github_com_Tencent_WeKnora_internal_types.FAQBatchUpsertPayload: properties: dry_run: description: 仅验证,不实际导入 type: boolean entries: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryPayload' type: array knowledge_id: type: string mode: enum: - append - replace type: string task_id: description: 可选,如果不传则自动生成UUID type: string required: - entries type: object github_com_Tencent_WeKnora_internal_types.FAQConfig: properties: index_mode: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQIndexMode' question_index_mode: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQQuestionIndexMode' type: object github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsBatchUpdate: properties: by_id: additionalProperties: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsUpdate' description: ByID 按条目ID更新,key为条目ID (seq_id) type: object by_tag: additionalProperties: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsUpdate' description: ByTag 按Tag批量更新,key为TagID (seq_id) type: object exclude_ids: description: ExcludeIDs 在ByTag操作中需要排除的ID列表 (seq_id) items: type: integer type: array type: object github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsUpdate: properties: is_enabled: type: boolean is_recommended: type: boolean tag_id: type: integer type: object github_com_Tencent_WeKnora_internal_types.FAQEntryPayload: properties: answer_strategy: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.AnswerStrategy' answers: items: type: string type: array id: description: ID 可选,用于数据迁移时指定 seq_id(必须小于自增起始值 100000000) type: integer is_enabled: type: boolean is_recommended: type: boolean negative_questions: items: type: string type: array similar_questions: items: type: string type: array standard_question: type: string tag_id: type: integer tag_name: type: string required: - standard_question type: object github_com_Tencent_WeKnora_internal_types.FAQIndexMode: enum: - question_only - question_answer type: string x-enum-varnames: - FAQIndexModeQuestionOnly - FAQIndexModeQuestionAnswer github_com_Tencent_WeKnora_internal_types.FAQQuestionIndexMode: enum: - combined - separate type: string x-enum-varnames: - FAQQuestionIndexModeCombined - FAQQuestionIndexModeSeparate github_com_Tencent_WeKnora_internal_types.FAQSearchRequest: properties: first_priority_tag_ids: description: 第一优先级标签ID列表,限定命中范围,优先级最高 items: type: integer type: array match_count: type: integer only_recommended: description: 是否仅返回推荐的条目 type: boolean query_text: type: string second_priority_tag_ids: description: 第二优先级标签ID列表,限定命中范围,优先级低于第一优先级 items: type: integer type: array vector_threshold: type: number required: - query_text type: object github_com_Tencent_WeKnora_internal_types.FollowUpSuggestionConfig: properties: additional_instruction: type: string allow_regenerate: type: boolean categories: items: type: string type: array 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 type: object github_com_Tencent_WeKnora_internal_types.GraphNode: properties: attributes: items: type: string type: array chunks: items: type: string type: array name: type: string type: object github_com_Tencent_WeKnora_internal_types.GraphRelation: properties: node1: type: string node2: type: string type: type: string type: object github_com_Tencent_WeKnora_internal_types.ImageProcessingConfig: properties: model_id: description: Model ID type: string type: object github_com_Tencent_WeKnora_internal_types.IndexConfig: 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 --- All omitempty so other engines' serialized IndexConfig is unchanged. Zero / 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 type: object github_com_Tencent_WeKnora_internal_types.IndexingStrategy: properties: graph_enabled: description: GraphEnabled enables knowledge graph entity/relation extraction type: boolean keyword_enabled: description: KeywordEnabled enables keyword-based (BM25) search type: boolean vector_enabled: description: VectorEnabled enables semantic vector embedding and search type: boolean wiki_enabled: description: WikiEnabled enables automatic wiki page generation from documents type: boolean type: object github_com_Tencent_WeKnora_internal_types.InviteMemberRequest: properties: representative_user_id: description: |- RepresentativeUserID identifies the user attached to the OTM row for display/audit. Optional: when unset, the handler picks a stable default (the user from the legacy UserID field, or the workspace's owner). type: string role: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole' description: 'Role to assign: admin/editor/viewer' 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 TenantID, the handler resolves the user's TenantID and uses this user as the representative. type: string required: - role type: object github_com_Tencent_WeKnora_internal_types.JoinByOrganizationIDRequest: properties: message: description: Optional message for join request maxLength: 500 type: string organization_id: type: string role: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole' description: 'Optional: requested role (admin/editor/viewer); default viewer' required: - organization_id type: object github_com_Tencent_WeKnora_internal_types.JoinOrganizationRequest: properties: invite_code: maxLength: 32 minLength: 8 type: string required: - invite_code type: object github_com_Tencent_WeKnora_internal_types.KBCloneTaskStatus: enum: - pending - processing - completed - failed type: string x-enum-varnames: - KBCloneStatusPending - KBCloneStatusProcessing - KBCloneStatusCompleted - KBCloneStatusFailed github_com_Tencent_WeKnora_internal_types.KS3EngineConfig: properties: access_key: type: string bucket_name: type: string endpoint: type: string path_prefix: type: string region: type: string secret_key: type: string type: object github_com_Tencent_WeKnora_internal_types.KnowledgeBase: properties: asr_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ASRConfig' description: ASR config (Automatic Speech Recognition) auto_tag_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.AutoTagConfig' description: AutoTagConfig controls asynchronous association of existing tags after parsing. chunk_count: description: Chunk count (not stored in database, calculated on query) type: integer chunking_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkingConfig' description: Chunking configuration 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. Used by the workspace-level RBAC middleware to let Contributors edit their own KBs without granting them access to everyone else's. Nullable for backward compatibility with rows created before the RBAC migration backfilled the column to the workspace Owner. type: string creator_name: description: |- CreatorName 是 CreatorID 对应用户的展示名(username / email 等), 仅在列表场景由 handler 批量回填,不落库;为空表示创建者无法解析(用户已删除、 CreatorID 为空的老数据等)。前端用它在卡片来源徽章上做 mine vs workspace 的二分。 type: string deleted_at: allOf: - $ref: '#/definitions/gorm.DeletedAt' description: Deletion time of the knowledge base description: description: Description of the knowledge base type: string embedding_model_id: description: ID of the embedding model type: string extract_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ExtractConfig' description: Extract config faq_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQConfig' description: FAQConfig stores FAQ specific configuration such as indexing strategy id: description: Unique identifier of the knowledge base type: string image_processing_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ImageProcessingConfig' description: Image processing configuration indexing_strategy: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.IndexingStrategy' description: |- IndexingStrategy controls which indexing pipelines are active for this knowledge base. Pipelines: vector search, keyword search, wiki generation, knowledge graph extraction. is_pinned: description: |- IsPinned and PinnedAt are computed per-caller from user_kb_pins (see migration 000050). They used to be stored on the row itself, which made pinning a workspace-wide ordering decision gated behind the kb-edit RBAC guard. The columns are still present in legacy schemas for rollback safety but are no longer read or written by the application — both fields are tagged `gorm:"-"` so GORM ignores them on every CRUD call and the list handler stamps them after 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 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 name: description: Name of the knowledge base type: string pinned_at: description: |- PinnedAt records when the current caller pinned this knowledge base; 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 question_generation_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig' description: QuestionGenerationConfig stores question generation configuration for document knowledge bases 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 legacy provider field remains readable during migration only. type: string storage_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.StorageConfig' description: 'Deprecated: legacy COS config column. Kept for backward compatibility with old data.' storage_provider_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.StorageProviderConfig' description: 'Storage provider config (new): only stores provider selection; credentials from workspace StorageEngineConfig' summary_model_id: description: Summary model ID type: string tenant_id: description: Workspace ID type: integer type: description: Type of the knowledge base (document, faq, etc.) type: string updated_at: description: Last updated time of the knowledge base type: string vector_store_id: description: |- VectorStoreID references the VectorStore this knowledge base is bound to. When nil, the KB falls back to the workspace's effective engines derived from the RETRIEVE_DRIVER environment variable (env store flow). This field is set once at creation time and must not be modified afterwards; enforcement lives at the GORM layer (`<-:create`) plus the service-layer KB update path, which omits this field from its update DTO. type: string vlm_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig' description: VLM config wiki_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiConfig' description: WikiConfig stores wiki-specific configuration (only for wiki type knowledge bases) type: object github_com_Tencent_WeKnora_internal_types.KnowledgeBaseConfig: properties: auto_tag_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.AutoTagConfig' description: AutoTagConfig controls optional automatic association of existing KB tags. chunking_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ChunkingConfig' description: Chunking configuration faq_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQConfig' description: FAQ configuration (only for FAQ type knowledge bases) image_processing_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ImageProcessingConfig' description: Image processing configuration indexing_strategy: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.IndexingStrategy' description: |- IndexingStrategy controls which indexing pipelines are active. nil means "no change" when updating (preserves existing strategy). wiki_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiConfig' description: Wiki configuration (only for wiki-enabled knowledge bases) type: object github_com_Tencent_WeKnora_internal_types.KnowledgeBaseShareResponse: 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 type: object github_com_Tencent_WeKnora_internal_types.KnowledgeMoveProgress: properties: created_at: description: 任务创建时间 type: integer error: description: 错误信息 type: string failed: description: 失败数 type: integer message: description: 状态消息 type: string processed: description: 已处理数 type: integer progress: description: 0-100 type: integer source_kb_id: type: string status: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.KBCloneTaskStatus' target_kb_id: type: string task_id: type: string total: description: 总知识数 type: integer updated_at: description: 最后更新时间 type: integer type: object github_com_Tencent_WeKnora_internal_types.KnowledgeProcessOverrides: 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 parser_engine_overrides: additionalProperties: type: string description: |- ParserEngineOverrides passes key-value configuration to docreader parsers (e.g. pdf_force_scanned=true). Merged with workspace-level overrides in the parse pipeline; per-upload values take priority on conflict. type: object parser_engine_rules: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule' type: array question_generation_config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig' vlm_config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig' type: object github_com_Tencent_WeKnora_internal_types.ListMembersResponse: properties: members: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationMemberResponse' type: array total: type: integer type: object github_com_Tencent_WeKnora_internal_types.ListOrganizationsResponse: properties: organizations: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrganizationResponse' type: array resource_counts: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ResourceCountsByOrgResponse' description: 各空间内知识库/智能体数量,供列表侧栏展示 total: type: integer type: object github_com_Tencent_WeKnora_internal_types.ListSharesResponse: properties: shares: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseShareResponse' type: array total: type: integer type: object github_com_Tencent_WeKnora_internal_types.LocalEngineConfig: properties: path_prefix: type: string type: object github_com_Tencent_WeKnora_internal_types.LoginRequest: properties: email: type: string password: minLength: 6 type: string required: - email - password type: object github_com_Tencent_WeKnora_internal_types.LoginResponse: properties: active_tenant: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.Tenant' description: |- ActiveTenant is the workspace whose ID is encoded in the issued JWT; future requests are scoped to it until the client calls /auth/switch-tenant. Defaults to the user's home workspace on a fresh login. memberships: description: |- Memberships lists every workspace the user can authenticate into, along with their role in each. Always populated (length 1 for users who only belong to their home workspace) so frontends can render a workspace switcher without a follow-up request. Serialised without omitempty so the field is always present as a JSON array (possibly empty) — the "always populated" contract relies on the server side guaranteeing a non-nil slice. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.Membership' type: array message: type: string refresh_token: type: string success: type: boolean token: type: string user: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.User' type: object github_com_Tencent_WeKnora_internal_types.MCPAdvancedConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.MCPAuthConfig: properties: api_key: type: string api_key_header: description: |- APIKeyHeader is the header name that carries APIKey when AuthType is api_key. Empty defaults to "X-API-Key". This is non-secret structural config (the secret is APIKey), so it is not encrypted and is safe to echo back in responses. It lets services that expect the key in a different header (e.g. the raw token directly in "Authorization") work without resorting to plaintext custom headers. type: string auth_server_metadata_url: description: |- AuthServerMetadataURL optionally pins the OAuth authorization server metadata URL. When empty, the server is discovered automatically from the MCP URL (RFC 9728 / RFC 8414). type: string auth_type: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MCPAuthType' description: |- AuthType selects the authentication strategy. Empty ("") is treated as none for backward compatibility with rows that pre-date this field. custom_headers: additionalProperties: type: string type: object scopes: description: Scopes are the OAuth scopes requested during authorization. Optional. items: type: string type: array token: type: string type: object github_com_Tencent_WeKnora_internal_types.MCPAuthType: enum: - "" - api_key - bearer - oauth type: string x-enum-varnames: - MCPAuthNone - MCPAuthAPIKey - MCPAuthBearer - MCPAuthOAuth github_com_Tencent_WeKnora_internal_types.MCPEnvVars: additionalProperties: type: string type: object github_com_Tencent_WeKnora_internal_types.MCPHeaders: additionalProperties: type: string type: object github_com_Tencent_WeKnora_internal_types.MCPService: 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: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MCPEnvVars' description: Environment variables for stdio 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: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MCPStdioConfig' description: Required for stdio transport 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 type: object github_com_Tencent_WeKnora_internal_types.MCPStdioConfig: properties: args: description: Command arguments array items: type: string type: array command: description: 'Command: "uvx" or "npx"' type: string type: object github_com_Tencent_WeKnora_internal_types.MCPTransportType: enum: - sse - http-streamable - stdio type: string 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: properties: channel: type: string content: type: string process_config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeProcessOverrides' status: type: string tag_ids: items: type: string type: array title: type: string type: object github_com_Tencent_WeKnora_internal_types.MatchType: enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 type: integer 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.Membership: properties: role: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole' tenant_id: type: integer tenant_name: type: string type: object github_com_Tencent_WeKnora_internal_types.MemoryConfig: properties: embedding_model_id: description: |- EmbeddingModelID is the single model used to score memory against a question. It is pinned per workspace: knowledge bases each have their own embedding model, and grabbing whichever one happens to be listed first would mix incomparable vector spaces. Blank means semantic recall is off and matching stays lexical. type: string enabled: description: |- Enabled defaults to false. Memory retains user statements across sessions, 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 distillation runs. Waiting lets one model call cover the several messages a user usually sends in a row. 0 means the default. type: integer extract_instructions: description: |- ExtractInstructions are workspace-specific rules appended to the distillation prompt, for policies the product cannot guess ("never record customer 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 the same person, and exists purely to bound cost. It never drops a turn: a turn arriving inside the interval is queued and picked up by the next run. 0 means the default. type: integer extract_model_id: description: |- ExtractModelID is the model used by the background extraction task. Empty means "use the model the conversation itself used", which is what the settings UI promises, so the extraction task must never fail merely because this is blank. type: string interest_threshold: description: |- InterestThreshold is how many separate conversations must touch a topic before it becomes a stored interest. 0 means the default. Setting it to 1 records 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 per-document ranking — rather than only being appended to the answer prompt. 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 when an embedding model is reachable. Lexical matching alone cannot find a memory the user has re-worded, which is most of them: "回答直接给结论" and "别铺垫那么多" share no tokens. The cost is one embedding call per turn, bounded and degraded to lexical on failure, so the feature never becomes a reason a chat is slow. type: boolean write_mode: description: WriteMode is MemoryWriteExplicitOnly or MemoryWriteAuto. type: string type: object github_com_Tencent_WeKnora_internal_types.MentionedItem: 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 type: object github_com_Tencent_WeKnora_internal_types.Message: 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 session'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) This contains the detailed reasoning process and tool calls made by the agent Stored for user history display, but NOT included in LLM context to avoid redundancy items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.AgentStep' type: array artifacts: description: |- Skill-generated files produced during this assistant turn (assistant messages only). Populated by ArtifactCollector after the sandbox finishes, referenced by the artifact download endpoint. Empty for user messages and turns without skills. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MessageArtifact' type: array attachments: description: Attached files (documents, audio, etc., for user messages) items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MessageAttachment' type: array 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: allOf: - $ref: '#/definitions/gorm.DeletedAt' description: Soft delete timestamp id: description: Unique identifier for the message type: string images: description: Attached images with OCR/Caption text (for user messages) items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MessageImage' type: array 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 Used 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 items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SearchResult' type: array mentioned_items: description: |- Mentioned knowledge bases and files (for user messages) Stores the @mentioned items when user sends a message items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MentionedItem' type: array model_id: description: |- ModelID is the requested/effective chat model binding captured for this turn. It is useful for reproducibility and suggestion generation. type: string request_id: description: Request identifier for tracking API requests type: string role: description: 'Message role: "user", "assistant", "system"' type: string session_id: description: ID of the session this message belongs to type: string updated_at: description: Last update timestamp type: string usage: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.TokenUsage' description: |- LLM token usage aggregated across every round of the turn that produced this assistant message. Persisted so history reads can attribute cost after the live stream is gone; NULL (nil) for user messages and pre-feature rows. used_memories: description: |- UsedMemories records which long-term memories were injected into this answer, so the chat UI can show them and let the user delete one on the spot. Persisted rather than only streamed so reopening a conversation still explains what the answer saw. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.UsedMemory' type: array type: object github_com_Tencent_WeKnora_internal_types.MessageArtifact: properties: created_at: description: When WeKnora persisted the blob 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 type: object github_com_Tencent_WeKnora_internal_types.MessageAttachment: 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 type: object github_com_Tencent_WeKnora_internal_types.MessageImage: properties: caption: type: string url: type: string type: object github_com_Tencent_WeKnora_internal_types.MinIOEngineConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.ModelParameters: 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 MaxOutputTokens the most it emits in one response. Both are provider facts the agent cannot discover but has to act on: the context window is what decides when conversation history gets compacted, and assuming a window larger than the real one means compaction never fires and the provider rejects the request mid-conversation instead. 0 means unknown, which falls back to DefaultMaxContextTokens. type: integer custom_headers: additionalProperties: type: string description: |- CustomHeaders 允许在调用远程模型 API 时附加自定义 HTTP 请求头, 用途类似 Python OpenAI SDK 的 extra_headers 参数, 常见场景包括透传企业网关鉴权信息、追踪 ID、路由标识等。 保留字段(Authorization、api-key、Content-Type、Accept 等)会在运行期被忽略以避免破坏签名/鉴权流程。 type: object embedding_parameters: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.EmbeddingParameters' extra_config: additionalProperties: type: string description: Provider-specific configuration type: object interface_type: type: string max_concurrency: description: |- MaxConcurrency caps concurrent in-flight BACKGROUND (ingestion / enrichment) calls to THIS specific model, keyed by model ID and shared across all replicas. 0 (the default) means "fall back to the process-wide model.max_concurrency". Interactive user-facing calls are never 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 supports_vision: description: Whether the model accepts image/multimodal input type: boolean type: object github_com_Tencent_WeKnora_internal_types.ModelSource: enum: - local - remote - aliyun - zhipu - volcengine - deepseek - hunyuan - minimax - openai - gemini - mimo - siliconflow - jina - openrouter - litellm - requesty - nvidia - novita - azure_openai type: string 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.ModelType: enum: - Embedding - Rerank - KnowledgeQA - VLLM - ASR type: string 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.OBSEngineConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.OIDCAuthURLResponse: properties: authorization_url: type: string provider_display_name: type: string state: type: string success: type: boolean type: object github_com_Tencent_WeKnora_internal_types.OIDCConfigResponse: properties: enabled: type: boolean provider_display_name: type: string success: type: boolean type: object github_com_Tencent_WeKnora_internal_types.OSSEngineConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.OrgMemberRole: enum: - admin - editor - viewer type: string x-enum-varnames: - OrgRoleAdmin - OrgRoleEditor - OrgRoleViewer github_com_Tencent_WeKnora_internal_types.OrganizationMemberResponse: 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 type: object github_com_Tencent_WeKnora_internal_types.OrganizationResponse: 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 (Plan 3, migration 000046). Frontend uses this to identify the "owner row" in the workspace-keyed members list — comparing member.tenant_id against owner_tenant_id is the post-Plan-3 equivalent 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 type: object github_com_Tencent_WeKnora_internal_types.ParserEngineConfig: properties: chat_parser_engine_rules: description: |- ChatParserEngineRules selects parser engines for session-scoped chat documents. Knowledge bases keep their own rules in ChunkingConfig. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule' type: array 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 before 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: MinerU 自建解析参数 type: string mineru_parse_method: 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 type: object github_com_Tencent_WeKnora_internal_types.ParserEngineRule: properties: engine: type: string file_types: items: type: string type: array xlsx_first_row_as_header: description: |- XLSXFirstRowAsHeader restores row-1 column context for flat XLSX tables. nil preserves the parser default; an explicit false disables the mode. type: boolean type: object github_com_Tencent_WeKnora_internal_types.PromptCacheStatus: enum: - unsupported - unreported - miss - hit type: string x-enum-varnames: - PromptCacheStatusUnsupported - PromptCacheStatusUnreported - PromptCacheStatusMiss - PromptCacheStatusHit github_com_Tencent_WeKnora_internal_types.QuestionGenerationConfig: properties: custom_instructions: description: |- CustomInstructions describes the intended audience or question style. It is appended to the stable system question-generation template. type: string enabled: type: boolean question_count: description: 'Number of questions to generate per chunk (default: 3, max: 10)' type: integer type: object github_com_Tencent_WeKnora_internal_types.QuestionSuggestionConfig: properties: follow_ups: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FollowUpSuggestionConfig' starters: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.StarterSuggestionConfig' type: object github_com_Tencent_WeKnora_internal_types.QueueStat: 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 + scheduled + retry + aggregating + archived). type: integer weight: description: Weight is the queue's scheduling weight inside its pool. type: integer type: object github_com_Tencent_WeKnora_internal_types.RegisterRequest: properties: email: type: string password: minLength: 6 type: string username: maxLength: 50 minLength: 2 type: string required: - email - password - username type: object github_com_Tencent_WeKnora_internal_types.RegisterResponse: 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' type: object github_com_Tencent_WeKnora_internal_types.RequestRoleUpgradeRequest: properties: message: description: Optional message explaining the reason maxLength: 500 type: string requested_role: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole' description: The role user wants to upgrade to required: - requested_role type: object github_com_Tencent_WeKnora_internal_types.Resource: 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: additionalProperties: true description: Additional metadata type: object 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 type: object github_com_Tencent_WeKnora_internal_types.ResourceCountsByOrgResponse: properties: agents: properties: by_organization: additionalProperties: type: integer type: object type: object knowledge_bases: properties: by_organization: additionalProperties: type: integer type: object type: object type: object github_com_Tencent_WeKnora_internal_types.RetrievalConfig: 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 flatten the curve, reducing the bias towards top-1 results. Default: 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. RRFVectorWeight + RRFKeywordWeight should usually sum to 1.0 but the math works 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 type: object github_com_Tencent_WeKnora_internal_types.RetrieverEngineParams: properties: retriever_engine_type: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngineType' description: Retriever engine type retriever_type: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverType' description: Retriever type type: object github_com_Tencent_WeKnora_internal_types.RetrieverEngineType: enum: - postgres - elasticsearch - infinity - elasticfaiss - qdrant - milvus - weaviate - doris - sqlite - tencent_vectordb - opensearch type: string x-enum-varnames: - PostgresRetrieverEngineType - ElasticsearchRetrieverEngineType - InfinityRetrieverEngineType - ElasticFaissRetrieverEngineType - QdrantRetrieverEngineType - MilvusRetrieverEngineType - WeaviateRetrieverEngineType - DorisRetrieverEngineType - SQLiteRetrieverEngineType - TencentVectorDBRetrieverEngineType - OpenSearchRetrieverEngineType github_com_Tencent_WeKnora_internal_types.RetrieverEngines: properties: engines: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngineParams' type: array type: object github_com_Tencent_WeKnora_internal_types.RetrieverType: enum: - keywords - vector - websearch type: string 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: properties: approved: type: boolean message: maxLength: 500 type: string role: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole' description: 'Optional: role to assign when approving; overrides applicant''s requested role' type: object github_com_Tencent_WeKnora_internal_types.RuntimeTaskAction: enum: - cancel - run_now - delete type: string x-enum-varnames: - RuntimeTaskActionCancel - RuntimeTaskActionRunNow - RuntimeTaskActionDelete github_com_Tencent_WeKnora_internal_types.RuntimeTaskInfo: properties: allowed_actions: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RuntimeTaskAction' type: array 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 type: object github_com_Tencent_WeKnora_internal_types.RuntimeTaskState: enum: - pending - active - scheduled - retry - archived - completed type: string x-enum-varnames: - RuntimeTaskPending - RuntimeTaskActive - RuntimeTaskScheduled - RuntimeTaskRetry - RuntimeTaskArchived - RuntimeTaskCompleted github_com_Tencent_WeKnora_internal_types.S3EngineConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.SandboxNetworkPolicy: properties: allow_out: description: |- AllowOut accepts IPv4, IPv4 CIDR, a DNS name, or a single-label wildcard such as "*.example.com". Domain entries are only meaningful together with a deny-all; see ValidateSandboxNetworkPolicy. items: type: string type: array allow_public_inbound: description: |- AllowPublicInbound exposes the sandbox's public URL without a credential. false requires every inbound request to carry the per-sandbox traffic access token. type: boolean cube_rules: description: |- CubeRules are validated whenever present and consumed only by the Cube provider adapter. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.CubeEgressRule' type: array deny_egress_by_default: description: |- DenyEgressByDefault installs a 0.0.0.0/0 deny-all, after which only AllowOut (and L7 rule targets) can reach the network. false allows public egress, which is what skill installs need. type: boolean deny_out: description: |- DenyOut accepts IPv4 and IPv4 CIDR only. Neither provider can deny a domain: denial is a pure longest-prefix match on the destination IP. items: type: string type: array e2b_host_rules: description: |- E2BHostRules are validated whenever present and consumed only by the E2B provider adapter. items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.E2BHostRule' type: array type: object github_com_Tencent_WeKnora_internal_types.SearchParams: 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, allowing a single retrieval call to span multiple KBs that share the same embedding model. When empty, HybridSearch uses its own id parameter. items: type: string type: array knowledge_ids: items: type: string type: array match_count: type: integer only_recommended: type: boolean query_embedding: items: type: number type: array query_text: description: |- QueryText is required unless query_embedding is provided, keyword matching is disabled, and vector matching remains enabled. type: string scope_tag_ids: items: type: string type: array skip_context_enrichment: description: |- SkipContextEnrichment skips fetching parent, nearby, and relation chunks in processSearchResults. Used by the chat pipeline where context assembly is handled separately in the merge stage. type: boolean tag_ids: description: Tag IDs for filtering (used for FAQ priority filtering) items: type: string type: array vector_threshold: type: number type: object github_com_Tencent_WeKnora_internal_types.SearchResult: properties: chunk_index: description: Chunk index type: integer chunk_metadata: description: ChunkMetadata stores chunk-level metadata (e.g., generated questions) items: type: integer type: array 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 Used for file type knowledge, contains the original file name type: string knowledge_id: description: Knowledge ID type: string knowledge_source: description: |- Knowledge source Used to indicate the source of the knowledge, such as "url" type: string knowledge_title: description: Knowledge title type: string match_type: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MatchType' description: Match type matched_content: description: |- MatchedContent is the actual content that was matched in vector search For FAQ: this is the matched question text (standard or similar question) type: string metadata: additionalProperties: type: string description: Metadata type: object parent_chunk_id: description: 父 Chunk ID type: string score: description: Score type: number seq: description: Seq type: integer start_at: description: Start at type: integer sub_chunk_id: description: SubChunkIndex items: type: string type: array type: object github_com_Tencent_WeKnora_internal_types.Session: properties: created_at: type: string deleted_at: $ref: '#/definitions/gorm.DeletedAt' description: description: Description type: string id: description: ID type: string im_platform: description: |- IMPlatform is the originating IM platform (e.g. "feishu", "wecom") when this session is bound to an IM channel. It is not stored on the sessions table (it lives in im_channel_sessions) and is populated on read so the Web 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 last_request_state: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SessionLastRequestState' description: |- LastRequestState records the input-bar state used the last time this session sent a question (agent, model, KB scope, web search, MCPs). Persisted on every successful POST to /knowledge-chat or /agent-chat so that reopening the session can restore the original request context to the chat UI. Stored in the legacy sessions.agent_config JSONB column to avoid a new migration; the shape used today is `SessionLastRequestState`. 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 sandbox was created on. Empty means no live sandbox; SandboxConfigIDGlobalDefault means the deployment-wide default config. This is an ephemeral pin that dies with the sandbox, not a permanent owner: sessions outlive sandboxes by months, so treating it as permanent 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 external-user principals, and embed visitor principals all use this column. type: string type: object github_com_Tencent_WeKnora_internal_types.SessionLastRequestState: properties: agent_enabled: type: boolean agent_id: type: string knowledge_base_ids: items: type: string type: array knowledge_ids: items: type: string type: array mcp_service_ids: items: type: string type: array mentioned_items: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MentionedItem' type: array model_id: type: string skill_names: items: type: string type: array tag_ids: items: type: string type: array web_search_enabled: type: boolean type: object github_com_Tencent_WeKnora_internal_types.ShareKnowledgeBaseRequest: properties: organization_id: type: string permission: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole' required: - organization_id - permission type: object github_com_Tencent_WeKnora_internal_types.SkillImageConfig: properties: base_template_id: description: |- BaseTemplateID is the template this chain was originally built from; the 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 and troubleshooting. type: integer owner_fingerprint: description: |- OwnerFingerprint identifies the provider account that owns the snapshot. Snapshots are invisible across accounts, so a mismatch means "fall back to the base template" rather than "fail". type: string snapshot_id: description: SnapshotID is the currently effective snapshot; empty = base template. type: string type: object github_com_Tencent_WeKnora_internal_types.StarterSuggestionConfig: properties: count: type: integer enabled: type: boolean items: items: type: string type: array mode: type: string type: object github_com_Tencent_WeKnora_internal_types.StorageBackendConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.StorageConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.StorageEngineConfig: 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' type: object github_com_Tencent_WeKnora_internal_types.StorageProviderConfig: properties: provider: description: '"local", "minio", "cos", "tos", "s3", "oss", "ks3", "obs"' type: string type: object github_com_Tencent_WeKnora_internal_types.SubmitJoinRequestRequest: properties: invite_code: maxLength: 32 minLength: 8 type: string message: maxLength: 500 type: string role: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole' description: 'Optional: role the applicant requests (admin/editor/viewer); default viewer' required: - invite_code type: object github_com_Tencent_WeKnora_internal_types.SuggestionAttribution: properties: question_id: type: string suggestion_set_id: type: string type: object github_com_Tencent_WeKnora_internal_types.SyncLog: 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) items: type: integer type: array 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 type: object github_com_Tencent_WeKnora_internal_types.SystemSetting: properties: category: description: |- Category groups settings in the management UI ("limits", "agent", "auth", ...). Free-form string so adding a new category is a data-only change. type: string created_at: type: string description: type: string enum: description: |- Enum is populated by the service layer (NOT persisted) from the in-code registry. Empty/nil means "free-form input"; non-empty means the UI should render a select with these options. Tagged `gorm:"-"` so GORM never tries to read/write the column. items: type: string type: array id: type: integer is_secret: description: |- IsSecret reserves UI affordances for P3 (mask + reveal-with-confirm). In P1 every row is is_secret=false; service Update accepts the column 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 (the user's UUID) at handler time — username when available, otherwise email. Empty for virtual rows that were never persisted (LastModifiedBy=""). Not stored: derived per request so renaming a user reflects on the next reload without a backfill job. type: string requires_restart: description: |- RequiresRestart reserves UI affordances for P3 (banner "this change won't take effect until the next restart"). In P1 the only seeded key is per-request, so always false. type: boolean updated_at: type: string value: items: type: integer type: array value_type: description: |- ValueType is one of "int", "string", "bool". Service layer rejects updates whose payload type does not match; UI uses it to pick InputNumber vs Input vs Switch. type: string type: object github_com_Tencent_WeKnora_internal_types.TOSEngineConfig: 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 type: object github_com_Tencent_WeKnora_internal_types.Tenant: properties: business: description: Business type: string chat_history_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ChatHistoryConfig' description: 'Chat history config: knowledge base configuration for indexing and searching chat messages via vector search' context_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ContextConfig' description: Global Context configuration for this workspace (default for all sessions) created_at: description: Creation time type: string credentials: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.CredentialsConfig' description: 'Credentials config: third-party provider credentials (e.g. WeKnoraCloud AppID/AppSecret)' default_storage_backend_id: description: DefaultStorageBackendID is the workspace default concrete storage instance. type: string deleted_at: allOf: - $ref: '#/definitions/gorm.DeletedAt' description: Deletion time description: description: Description type: string id: description: ID type: integer memory_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MemoryConfig' description: 'Memory config: workspace switch for cross-session long-term memory' name: description: Name type: string parser_engine_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineConfig' description: Parser engine config overrides (MinerU endpoint, API key, etc.). Used when parsing documents; overrides env. retrieval_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RetrievalConfig' description: 'Retrieval config: global search/retrieval parameters shared by knowledge search and message search' retriever_engines: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngines' description: Retriever engines status: description: Status type: string storage_engine_config: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.StorageEngineConfig' description: 'Storage engine config: parameters for Local, MinIO, COS. Used for document/file storage and docreader.' 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: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchConfig' description: Global WebSearch configuration for this workspace type: object github_com_Tencent_WeKnora_internal_types.TenantRole: enum: - owner - admin - contributor - viewer type: string x-enum-varnames: - TenantRoleOwner - TenantRoleAdmin - TenantRoleContributor - TenantRoleViewer github_com_Tencent_WeKnora_internal_types.TenantSandboxConfig: properties: allow_private_endpoints: description: |- AllowPrivateEndpoints permits this workspace config to reach RFC1918 or loopback cluster endpoints. Link-local/cloud-metadata addresses remain blocked. 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 program's built-in default. type: integer docker: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.DockerSandboxConfig' e2b: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.E2BSandboxConfig' env_vars: additionalProperties: type: string description: "EnvVars are additional environment variables injected into every\nsandbox created for this tenant. \U0001F512 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 network: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SandboxNetworkPolicy' description: |- Network is the outbound/inbound network policy applied to every sandbox created from this config — chat sessions, skill installs and deep connectivity probes alike. nil and the zero value mean the same thing: outbound egress allowed, inbound public access closed. sandbox_type: description: SandboxType is cube, e2b, or docker; disabled is the hidden policy row. type: string skill_image: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SkillImageConfig' description: |- SkillImage points at the snapshot that carries this config's installed skills. Empty means "use the base template". Written only by the skill install/remove path: MergeSandboxConfigForUpdate ignores client values so a settings-form save cannot wipe or plant the pointer. skill_rollout: description: |- SkillRollout decides whether sessions that already hold a sandbox of this config rebuild after a skill install or removal. Empty and SkillRolloutNextTurn rebuild on the next chat turn. SkillRolloutNewSession leaves those sandboxes on the previous image; only sessions that start afterwards boot the new snapshot. type: string volume_mount: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.VolumeMountConfig' description: |- VolumeMount configures an optional shared volume mounted into every sandbox created for this tenant. Currently used for tenant-installed skills, but the configuration itself is skill-agnostic and can serve any volume-mount use case (shared datasets, pre-installed toolchains, etc.). type: object github_com_Tencent_WeKnora_internal_types.TokenUsage: 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 wire for compatibility with existing API consumers. type: integer completion_tokens: type: integer prompt_tokens: type: integer total_tokens: type: integer type: object github_com_Tencent_WeKnora_internal_types.ToolCall: properties: args: additionalProperties: true description: Tool arguments type: object 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: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ToolCallMetadata' description: Provider-specific tool-call state for replay reflection: description: Agent's reflection on this tool call result (if enabled) type: string result: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ToolResult' description: Execution result (contains Output) type: object github_com_Tencent_WeKnora_internal_types.ToolCallMetadata: additionalProperties: items: type: integer type: array type: object github_com_Tencent_WeKnora_internal_types.ToolResult: properties: data: additionalProperties: true description: Structured data for programmatic use type: object error: description: Error message if execution failed type: string images: description: Base64 data URIs from tool (e.g. MCP image content) items: type: string type: array output: description: Human-readable output type: string success: description: Whether the tool executed successfully type: boolean type: object github_com_Tencent_WeKnora_internal_types.UpdateMemberRoleRequest: properties: role: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole' required: - role type: object github_com_Tencent_WeKnora_internal_types.UpdateOrganizationRequest: properties: avatar: description: optional avatar URL maxLength: 512 type: string description: maxLength: 1000 type: string invite_code_validity_days: description: 0=never, 1, 7, 30 type: integer member_limit: description: max members; 0=unlimited type: integer name: maxLength: 255 minLength: 1 type: string require_approval: type: boolean searchable: description: open for search so others can discover and join type: boolean type: object github_com_Tencent_WeKnora_internal_types.UpdateSharePermissionRequest: properties: permission: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OrgMemberRole' required: - permission type: object github_com_Tencent_WeKnora_internal_types.UsedMemory: properties: content: type: string id: type: string kind: type: string type: object github_com_Tencent_WeKnora_internal_types.User: 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: allOf: - $ref: '#/definitions/gorm.DeletedAt' description: Deletion time of the user 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: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.UserPreferences' description: |- Per-user UI/feature preferences. Stored as JSON (jsonb on Postgres, TEXT on SQLite) via the driver.Valuer / sql.Scanner methods on UserPreferences. tenant: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.Tenant' description: Association relationship, not stored in the database 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 type: object github_com_Tencent_WeKnora_internal_types.UserInfo: 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 type: object github_com_Tencent_WeKnora_internal_types.UserPreferences: properties: last_active_tenant_id: description: |- LastActiveTenantID remembers the last workspace the user actively switched into, so a fresh login (new device, cleared browser, new refresh token) lands them back in that workspace instead of always bouncing to their home workspace. Written by the SPA's preferences PUT and by service-level SwitchTenant (including when switching home, which stores the home ID). Login / RefreshToken validate that the workspace still exists and the user still has an active membership (or CanAccessAllTenants) before honouring this preference; an invalid pointer is best-effort cleared and the user falls back to home. Refresh JWT claims have no tenant_id, so RefreshToken re-resolves from this field. nil = no preference (use user.TenantID, i.e. home) *0 = "clear preference" sentinel for the partial-update endpoint (UpdateUserPreferences turns this into nil). Otherwise treat a stored *0 the same as nil. *N = preferred workspace id. type: integer oidc_only_login: description: |- OidcOnlyLogin is set server-side when an account is auto-provisioned via OIDC with a random password the user never received. The profile UI hides self-service password rotation until the user sets a known password via ChangePassword (which clears this flag). type: boolean type: object github_com_Tencent_WeKnora_internal_types.VLMConfig: properties: api_key: description: API Key type: string base_url: description: Base URL type: string custom_instructions: description: |- CustomInstructions adds KB-specific image interpretation guidance without replacing the system-owned OCR and Markdown output contract. type: string description_language: description: |- DescriptionLanguage controls the language used for generated image captions. Empty means follow the document/request language. type: string enabled: type: boolean interface_type: description: 'Interface Type: "ollama" or "openai"' type: string model_id: type: string model_name: description: |- 兼容老版本 Model Name type: string type: object github_com_Tencent_WeKnora_internal_types.VolumeMountConfig: 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. Default: /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 EnsureVolume / CreateVolume succeeds. type: string volume_name: description: |- VolumeName is the human-readable volume name, e.g. "weknora-tenant--skills". type: string volume_owner_fingerprint: description: |- VolumeOwnerFingerprint = sha256(provider + APIKey + APIURL). Used to detect when the tenant switched to a different backend or API key, at which point the volume is no longer reachable and must be recreated. type: string type: object github_com_Tencent_WeKnora_internal_types.WeKnoraCloudCredentials: properties: app_id: type: string app_secret: type: string type: object github_com_Tencent_WeKnora_internal_types.WebSearchConfig: properties: api_key: description: 'Deprecated: Use WebSearchProviderEntity.Parameters.APIKey instead.' type: string blacklist: description: 黑名单规则列表 items: type: string type: array 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 type: object github_com_Tencent_WeKnora_internal_types.WebSearchProviderEntity: 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: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderParameters' description: Provider-specific parameters (API key, engine ID, etc.) stored as encrypted JSON provider: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderType' description: 'Provider type: bing, google, duckduckgo, tavily' tenant_id: description: Workspace ID for scoping type: integer updated_at: type: string type: object github_com_Tencent_WeKnora_internal_types.WebSearchProviderParameters: 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). Validated 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: additionalProperties: type: string description: Provider-specific extra configuration for future extensibility type: object proxy_url: description: |- Optional HTTP/HTTPS proxy URL for outbound search requests (e.g. http://host:port); validated with utils.ValidateURLForSSRF. Does not replace the search API endpoint; only tunnels traffic to the official APIs. type: string type: object github_com_Tencent_WeKnora_internal_types.WebSearchProviderType: enum: - bing - google - duckduckgo - tavily - ollama - baidu - searxng - keenable - zhipu - exa - metaso type: string x-enum-varnames: - WebSearchProviderTypeBing - WebSearchProviderTypeGoogle - WebSearchProviderTypeDuckDuckGo - WebSearchProviderTypeTavily - WebSearchProviderTypeOllama - WebSearchProviderTypeBaidu - WebSearchProviderTypeSearxng - WebSearchProviderTypeKeenable - WebSearchProviderTypeZhipu - WebSearchProviderTypeExa - WebSearchProviderTypeMetaso github_com_Tencent_WeKnora_internal_types.WikiConfig: properties: content_instructions: description: |- ContentInstructions controls tone, structure and emphasis for generated summary/entity/index prose. Citation and merge rules remain system-owned. type: string extraction_granularity: allOf: - $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiExtractionGranularity' description: |- ExtractionGranularity controls how many candidate slugs Pass 0 extracts per document. Empty / unknown value is treated as WikiExtractionStandard. extraction_instructions: description: |- ExtractionInstructions tells candidate extraction which domain concepts to emphasize without replacing the stable JSON/citation protocol. type: string ingest_batch_size: description: |- IngestBatchSize controls how many pending ops a single batch claims and processes before scheduling a follow-up. 0 falls back to the hard-coded default (5). Larger batches amortize per-batch setup and let more docs share the batch-internal Map/Reduce fan-out; smaller batches spread a KB's backlog across more concurrent batches (finer scheduling grain). type: integer ingest_map_parallel: description: |- IngestMapParallel sets the errgroup limit for the Map phase (per-document extraction + summary + chunk citation) WITHIN one batch. 0 falls back to 10. Bound by the LLM provider's concurrency limit and the worker's outbound HTTP pool. Remember it multiplies with the number of concurrent batches (IngestMaxInflight). type: integer ingest_max_inflight: description: |- IngestMaxInflight caps how many ingest batches for THIS KB may run concurrently in the shared wiki worker pool (standard/Redis mode only). 0 falls back to the hard-coded default (4). Since Phase 3 removed the exclusive per-KB lock, one KB's backlog could otherwise monopolize the whole pool during a bulk import and starve other KBs; this knob trades a single KB's peak throughput for cross-KB fairness. Set it >= the wiki pool size to effectively disable the cap. type: integer ingest_reduce_parallel: description: |- IngestReduceParallel sets the errgroup limit for the Reduce phase (per-slug page write) WITHIN one batch. 0 falls back to 10. Bound by the same LLM concurrency / HTTP pool considerations as the Map phase, plus DB connection pool size. Same multiplier caveat as IngestMapParallel. type: integer max_pages_per_ingest: description: MaxPagesPerIngest limits pages created/updated per ingest operation (0 = no limit) type: integer synthesis_model_id: description: SynthesisModelID is the LLM model ID used for wiki page generation and updates type: string type: object github_com_Tencent_WeKnora_internal_types.WikiExtractionGranularity: enum: - focused - standard - exhaustive type: string x-enum-varnames: - WikiExtractionFocused - WikiExtractionStandard - WikiExtractionExhaustive github_com_Tencent_WeKnora_internal_types.WikiFolder: properties: created_at: type: string deleted_at: $ref: '#/definitions/gorm.DeletedAt' depth: type: integer id: type: string knowledge_base_id: type: string name: type: string parent_id: type: string path: type: string sort_order: type: integer tenant_id: type: integer updated_at: type: string type: object github_com_Tencent_WeKnora_internal_types.WikiFolderCreateRequest: properties: name: type: string parent_id: type: string type: object github_com_Tencent_WeKnora_internal_types.WikiFolderListResponse: properties: folders: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolderNode' type: array parent_id: type: string type: object github_com_Tencent_WeKnora_internal_types.WikiFolderNode: properties: created_at: type: string deleted_at: $ref: '#/definitions/gorm.DeletedAt' depth: type: integer has_children: type: boolean id: type: string knowledge_base_id: type: string name: type: string page_count: type: integer parent_id: type: string path: type: string sort_order: type: integer tenant_id: type: integer updated_at: type: string type: object github_com_Tencent_WeKnora_internal_types.WikiFolderUpdateRequest: properties: move_parent: type: boolean name: type: string parent_id: type: string type: object github_com_Tencent_WeKnora_internal_types.WikiGraphData: properties: edges: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiGraphEdge' type: array meta: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiGraphMeta' nodes: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiGraphNode' type: array type: object github_com_Tencent_WeKnora_internal_types.WikiGraphEdge: properties: source: description: source slug type: string target: description: target slug type: string type: object github_com_Tencent_WeKnora_internal_types.WikiGraphMeta: 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 < Total (after filters) type: boolean type: object github_com_Tencent_WeKnora_internal_types.WikiGraphNode: properties: familiar: description: |- Familiar is true when this page was built from a document this person keeps citing in answers. It is a personal overlay, not a property of the 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 type: object github_com_Tencent_WeKnora_internal_types.WikiIndexEntry: properties: category_path: items: type: string type: array depth: type: integer parent_slug: type: string slug: type: string sort_order: type: integer summary: type: string title: type: string wiki_path: type: string type: object github_com_Tencent_WeKnora_internal_types.WikiIndexGroup: properties: items: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiIndexEntry' type: array next_cursor: type: string total: type: integer type: type: string type: object github_com_Tencent_WeKnora_internal_types.WikiIndexResponse: properties: groups: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiIndexGroup' type: array intro: type: string version: type: integer type: object github_com_Tencent_WeKnora_internal_types.WikiPage: properties: aliases: description: Alternate names, abbreviations, acronyms or translated names items: type: string type: array category_path: description: |- CategoryPath is the directory breadcrumb that groups this page in the wiki browser, e.g. ["AI", "LLM 应用", "RAG"]. Derived cache of the folder chain identified by FolderID. items: type: string type: array chunk_refs: description: |- ChunkRefs records the specific source-document chunks this page was built from — one UUID per cited chunk. Populated during ingest from the chunk-citation pass; refreshed wholesale whenever the page is re-materialized. Empty for summary pages (they are document-level synopses and don't carry chunk-level citations). Use this when you need to surface the underlying evidence for a wiki page, or to retract citations when a source document is deleted. items: type: string type: array content: description: Full markdown content type: string created_at: description: Creation time type: string deleted_at: allOf: - $ref: '#/definitions/gorm.DeletedAt' description: Soft delete 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 directory tree — a reference to wiki_folders.id ("" = wiki root). The CategoryPath / WikiPath / Depth fields below are denormalized caches recomputed from this folder's chain on every write so list/index/search queries don't have to join wiki_folders. type: string id: description: Unique identifier (UUID) type: string in_links: description: Slugs of pages that link TO this page (backlinks) items: type: string type: array knowledge_base_id: description: Knowledge base this page belongs to type: string last_edit_source: description: |- LastEditSource records who authored the CURRENT version: pipeline | agent | user | revert. Empty for legacy rows (treated as pipeline). When the version is superseded this value travels into the revision snapshot, 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 version (empty for background pipeline writes). type: string out_links: description: Slugs of pages this page links to (outbound links) items: type: string type: array page_metadata: description: Arbitrary metadata (tags, categories, dates, etc.) items: type: integer type: array page_type: description: 'Page type: summary, entity, concept, index, synthesis, comparison' type: string parent_slug: description: |- ParentSlug optionally points at the wiki page that should act as this page's semantic parent in the directory tree. The parent may be empty when the page is grouped only by FolderID. type: string slug: description: |- URL-friendly slug for addressing, e.g. "entity/acme-corp", "concept/rag" Unique within a knowledge base type: string sort_order: description: |- SortOrder allows generated or manually edited pages to control sibling ordering before falling back to title. type: integer source_refs: description: |- References to source knowledge IDs that contributed to this page. Format matches the legacy "|" convention used across the ingest pipeline, so retract / display code can split on `|` to recover the title. Document-level granularity. items: type: string type: array status: description: 'Page status: draft, published, archived' type: string summary: description: One-line summary for index listing type: string tenant_id: description: Workspace ID for multi-workspace isolation type: integer title: description: Human-readable title type: string updated_at: description: Last update time type: string version: description: |- Version number. Incremented only when a user-visible content field (title, content, summary, page_type, status) actually changes; pure bookkeeping writes (link maintenance, same-content re-ingest, status sync from background jobs) leave it untouched so it can be used as a real "the page was edited" signal. type: integer wiki_path: description: |- WikiPath is a normalized, sortable path derived from page_type, category_path, and title. It keeps large directory listings cheap to sort. type: string type: object github_com_Tencent_WeKnora_internal_types.WikiPageIssue: properties: created_at: type: string deleted_at: $ref: '#/definitions/gorm.DeletedAt' description: type: string id: type: string issue_type: type: string knowledge_base_id: type: string reported_by: type: string slug: type: string status: type: string suspected_knowledge_ids: items: type: string type: array tenant_id: type: integer updated_at: type: string type: object github_com_Tencent_WeKnora_internal_types.WikiPageListResponse: properties: page: type: integer page_size: type: integer pages: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage' type: array total: type: integer total_pages: type: integer type: object github_com_Tencent_WeKnora_internal_types.WikiPageMoveRequest: properties: folder_id: type: string slug: type: string required: - slug type: object github_com_Tencent_WeKnora_internal_types.WikiPageRevertRequest: properties: slug: type: string version: type: integer required: - slug - version type: object github_com_Tencent_WeKnora_internal_types.WikiPageRevision: properties: aliases: items: type: string type: array content: type: string created_at: type: string edit_source: description: Author of THIS version (same semantics as WikiPage.LastEditSource). type: string edited_at: description: When this version was authored (the page's updated_at while current). type: string 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 tenant_id: type: integer title: type: string version: type: integer type: object github_com_Tencent_WeKnora_internal_types.WikiPageRevisionListResponse: properties: current_version: type: integer revisions: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageRevision' type: array total: type: integer type: object github_com_Tencent_WeKnora_internal_types.WikiPageUpdateRequest: properties: aliases: items: type: string type: array 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 > 0 the update is rejected with a conflict if the stored version differs (someone else edited the page since the client loaded it). 0 skips the check (legacy clients). type: integer type: object github_com_Tencent_WeKnora_internal_types.WikiStats: properties: is_active: description: whether wiki ingestion is currently running type: boolean orphan_count: description: pages with no inbound links type: integer pages_by_type: additionalProperties: format: int64 type: integer type: object pending_issues: description: number of pending wiki issues type: integer pending_tasks: description: number of documents waiting to be ingested type: integer recent_updates: description: last N updated pages items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage' type: array total_links: type: integer total_pages: type: integer type: object gorm.DeletedAt: properties: time: type: string valid: description: Valid is true if Time is not NULL type: boolean type: object internal_handler.AddFavoriteRequest: properties: id: type: string type: type: string type: object internal_handler.BatchDeleteKnowledgeRequest: properties: ids: items: type: string type: array kb_id: type: string required: - ids - kb_id type: object internal_handler.CopyKnowledgeBaseRequest: properties: source_id: type: string target_id: type: string task_id: type: string required: - source_id type: object internal_handler.CreateAgentRequest: properties: avatar: type: string config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgentConfig' description: type: string name: type: string required: - name type: object internal_handler.CreateModelRequest: 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' required: - name - parameters - source - type type: object internal_handler.CreateStoreRequest: 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 required: - connection_config - engine_type - name type: object internal_handler.CreateSystemUserResponse: properties: generated_password: description: |- GeneratedPassword is the plaintext password when the server auto-generated one. Absent when the caller supplied the password. type: string user: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo' type: object internal_handler.DeleteTagRequest: properties: exclude_ids: description: Chunk seq_ids to exclude from deletion items: type: integer type: array type: object internal_handler.EnsureMessageSuggestionsRequest: properties: regenerate: type: boolean type: object internal_handler.EvaluationRequest: 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 type: object internal_handler.FabriTextRequest: properties: model_id: type: string tags: items: type: string type: array required: - model_id type: object internal_handler.GetStorageEngineStatusResponse: properties: allowed_providers: items: type: string type: array engines: items: $ref: '#/definitions/internal_handler.StorageEngineStatusItem' type: array minio_env_available: type: boolean type: object internal_handler.GetSystemInfoResponse: properties: build_time: type: string commit_id: type: string db_migration_error: description: |- DBMigrationError carries the human-readable error message recorded when the most recent startup migration attempt failed. Empty when migrations succeeded; non-empty values let the frontend surface a troubleshooting banner 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 type: object internal_handler.InitializationRequest: properties: documentSplitting: properties: chunkOverlap: minimum: 0 type: integer chunkSize: maximum: 10000 minimum: 100 type: integer separators: items: type: string minItems: 1 type: array required: - chunkSize - separators type: object embedding: properties: apiKey: type: string baseUrl: type: string dimension: description: 添加embedding维度字段 type: integer modelName: type: string source: type: string required: - modelName - source type: object llm: properties: apiKey: type: string baseUrl: type: string modelName: type: string source: type: string required: - modelName - source type: object multimodal: properties: cos: properties: appId: type: string bucketName: type: string pathPrefix: type: string region: type: string secretId: type: string secretKey: type: string type: object enabled: type: boolean minio: properties: bucketName: type: string pathPrefix: type: string type: object storageType: type: string vlm: properties: apiKey: type: string baseUrl: type: string interfaceType: description: '"ollama" or "openai"' type: string modelName: type: string type: object type: object nodeExtract: properties: enabled: type: boolean nodes: items: properties: attributes: items: type: string type: array name: type: string type: object type: array relations: items: properties: node1: type: string node2: type: string type: type: string type: object type: array tags: items: type: string type: array text: type: string type: object questionGeneration: properties: enabled: type: boolean questionCount: type: integer type: object rerank: properties: apiKey: type: string baseUrl: type: string enabled: type: boolean modelName: type: string type: object required: - documentSplitting - embedding - llm type: object internal_handler.KBModelConfigRequest: properties: asr_config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ASRConfig' documentSplitting: description: 文档分块配置 properties: childChunkSize: type: integer chunkOverlap: type: integer chunkSize: type: integer enableParentChild: type: boolean languages: items: type: string type: array parentChunkSize: type: integer parserEngineRules: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ParserEngineRule' type: array separators: items: type: string type: array strategy: description: |- Strategy / TokenLimit / Languages use pointer types so the handler can distinguish "field absent in payload" (no change) from "field present with empty/zero value" (clear / disable). Without that distinction, users could set strategy="auto" once but never reset it back to legacy / unset. type: string tableMetadataInstructions: type: string tokenLimit: type: integer type: object embeddingModelId: description: optional when RAG indexing is disabled type: string llmModelId: type: string multimodal: description: 多模态配置(仅模型相关;存储引擎在 storageProvider 中配置) properties: enabled: type: boolean type: object nodeExtract: description: 知识图谱配置 properties: customInstructions: type: string enabled: type: boolean nodes: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.GraphNode' type: array relations: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.GraphRelation' type: array tags: items: type: string type: array text: type: string type: object questionGeneration: description: 问题生成配置 properties: customInstructions: type: string enabled: type: boolean questionCount: type: integer type: object storageBackendId: type: string storageProvider: description: 存储引擎选择("local" | "minio" | "cos"),影响文档上传与文档内图片存储,参数从全局设置读取 type: string vlm_config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.VLMConfig' required: - llmModelId type: object internal_handler.ListSystemAdminsResponse: properties: admins: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo' type: array total: type: integer type: object internal_handler.ModelTestRequest: properties: apiKey: type: string appSecret: description: AppSecret 用于 LKEAP / Volcengine Rerank 等需要第二段密钥的场景(对应模型 Parameters.AppSecret)。 type: string baseUrl: type: string customHeaders: additionalProperties: type: string type: object dimension: type: integer extraConfig: additionalProperties: type: string type: object interfaceType: type: string modelId: description: |- ModelID, when set, instructs the handler to substitute any missing secrets (APIKey, AppSecret via ExtraConfig) from the stored model record before assembling the test client. This lets the "Test connection" button work on existing models without making the frontend reload — and ship — the plaintext API key. Other fields (BaseURL, ModelName, etc.) on this request still override the stored values, so a user can validate a new endpoint against the existing credentials in one click. type: string modelName: type: string provider: type: string source: description: 为空时按需默认为 "remote" type: string supportsDimensionOverride: type: boolean required: - modelName type: object internal_handler.MoveKnowledgeRequest: properties: knowledge_ids: items: type: string minItems: 1 type: array mode: enum: - reuse_vectors - reparse type: string source_kb_id: type: string target_kb_id: type: string required: - knowledge_ids - mode - source_kb_id - target_kb_id type: object internal_handler.MoveKnowledgeResponse: properties: knowledge_count: type: integer message: type: string source_kb_id: type: string target_kb_id: type: string task_id: type: string type: object internal_handler.MoveKnowledgeToFolderRequest: properties: folder_path: description: |- FolderPath is the destination folder; the empty string is the knowledge base top level. It is deliberately not `binding:"required"` so documents can be moved back out of every folder. type: string kb_id: type: string knowledge_ids: items: type: string type: array required: - kb_id - knowledge_ids type: object internal_handler.PreviewChunkResult: 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 type: object internal_handler.PreviewChunkingPayload: properties: child_chunk_size: type: integer chunk_overlap: type: integer chunk_size: type: integer enable_parent_child: type: boolean languages: items: type: string type: array parent_chunk_size: type: integer separators: items: type: string type: array strategy: type: string token_limit: type: integer type: object internal_handler.PreviewChunkingRequest: properties: chunking_config: $ref: '#/definitions/internal_handler.PreviewChunkingPayload' text: type: string type: object internal_handler.PreviewChunkingResponse: properties: chunks: items: $ref: '#/definitions/internal_handler.PreviewChunkResult' type: array profile: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.DocProfile' rejected: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.TierRejection' type: array selected_tier: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.StrategyTier' stats: $ref: '#/definitions/internal_handler.PreviewChunkingStats' tier_chain: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_infrastructure_chunker.StrategyTier' type: array type: object internal_handler.PreviewChunkingStats: 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 response was truncated to previewMaxChunks for transport. type: integer type: object internal_handler.PromoteUserToSystemAdminRequest: properties: email: type: string user_id: type: string type: object internal_handler.RemoteModelCheckRequest: properties: apiKey: type: string appSecret: description: AppSecret 用于 LKEAP / Volcengine Rerank 等需要第二段密钥的场景(对应模型 Parameters.AppSecret)。 type: string baseUrl: type: string customHeaders: additionalProperties: type: string type: object dimension: type: integer extraConfig: additionalProperties: type: string type: object interfaceType: type: string modelId: description: |- ModelID, when set, instructs the handler to substitute any missing secrets (APIKey, AppSecret via ExtraConfig) from the stored model record before assembling the test client. This lets the "Test connection" button work on existing models without making the frontend reload — and ship — the plaintext API key. Other fields (BaseURL, ModelName, etc.) on this request still override the stored values, so a user can validate a new endpoint against the existing credentials in one click. type: string modelName: type: string provider: type: string source: description: 为空时按需默认为 "remote" type: string supportsDimensionOverride: type: boolean required: - modelName type: object internal_handler.RenameKnowledgeFolderRequest: properties: from: type: string to: type: string required: - from - to type: object internal_handler.ResetUserPasswordRequest: properties: email: type: string new_password: type: string required: - email - new_password type: object internal_handler.RevokeSystemAdminRequest: properties: user_id: type: string required: - user_id type: object internal_handler.RuntimeQueuesResponse: properties: available: type: boolean model_limiter_available: type: boolean models: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_models_limiter.RuntimeStat' type: array parse_concurrency: description: compatibility alias for upstream_concurrency type: integer pools: items: $ref: '#/definitions/internal_handler.RuntimeWorkerPool' type: array queues: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.QueueStat' type: array timestamp: type: integer upstream_concurrency: type: integer wiki_concurrency: description: compatibility field type: integer type: object internal_handler.RuntimeTasksResponse: properties: available: type: boolean has_more: type: boolean next_cursor: type: string page_size: type: integer tasks: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RuntimeTaskInfo' type: array type: object internal_handler.RuntimeWorkerPool: description: Return every row in the system_settings table (system-scope, not workspace-scoped). SystemAdmin only. 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 type: object internal_handler.SandboxCheckItem: 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 the UI can phrase the skip in the operator's language instead of echoing a server-side sentence. type: string type: object internal_handler.SandboxCheckRequest: 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 the fields the admin changed in the drawer. type: string deep: description: |- Deep additionally runs a throwaway script. For remote backends this also creates and destroys one sandbox, which is the only way to validate the template ID, data plane, in-sandbox execution, and outbound egress. It may consume real sandbox time, so it is opt-in. type: boolean type: object internal_handler.SandboxCheckResponse: properties: capabilities: additionalProperties: type: boolean type: object checks: items: $ref: '#/definitions/internal_handler.SandboxCheckItem' type: array ok: type: boolean provider: type: string type: object internal_handler.SearchMessagesRequest: 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) items: type: string type: array required: - query type: object internal_handler.StorageCheckRequest: 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' type: object internal_handler.StorageCheckResponse: properties: bucket_created: type: boolean message: type: string ok: type: boolean type: object internal_handler.StorageEngineStatusItem: 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 type: object internal_handler.SuggestionEventRequest: properties: event_type: type: string question_id: type: string suggestion_set_id: type: string required: - event_type - suggestion_set_id type: object internal_handler.TestProviderRequest: properties: parameters: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderParameters' provider: type: string required: - provider type: object internal_handler.TestStoreRequest: properties: connection_config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ConnectionConfig' engine_type: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RetrieverEngineType' required: - connection_config - engine_type type: object internal_handler.TextRelationExtractionRequest: properties: model_id: type: string tags: items: type: string type: array text: type: string required: - model_id - tags - text type: object internal_handler.UpdateAgentRequest: properties: avatar: type: string config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.CustomAgentConfig' description: type: string name: type: string type: object internal_handler.UpdateChunkRequest: properties: content: type: string expected_revision: type: integer is_enabled: type: boolean type: object internal_handler.UpdateKnowledgeBaseRequest: properties: config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBaseConfig' description: type: string name: type: string required: - name type: object internal_handler.UpdateKnowledgeRequest: properties: custom_metadata: items: type: integer type: array description: type: string title: type: string type: object internal_handler.UpdateModelRequest: 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' type: object internal_handler.UpdateProviderRequest: properties: description: type: string is_default: type: boolean name: type: string parameters: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderParameters' type: object internal_handler.UpdateStoreRequest: properties: name: type: string required: - name type: object internal_handler.UpdateSystemSettingRequest: properties: value: description: |- Value is intentionally `any` (decoded as float64 / string / bool / etc. by the JSON unmarshaller). Service.encodeForType normalises these against the registry's declared type and rejects mismatches. type: object internal_handler.acceptInvitationByTokenRequest: properties: token: type: string required: - token type: object internal_handler.addMemberRequest: properties: email: type: string role: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole' required: - email - role type: object internal_handler.addSimilarQuestionsRequest: properties: similar_questions: items: type: string minItems: 1 type: array required: - similar_questions type: object internal_handler.apiPrincipalConfigRequest: 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 type: object internal_handler.apiPrincipalTestTokenRequest: properties: expires_in_seconds: type: integer external_user_id: type: string type: object internal_handler.auditLogListResponse: properties: data: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.AuditLog' type: array next_cursor: type: integer success: type: boolean type: object internal_handler.batchReparseKnowledgeRequest: properties: ids: items: type: string type: array kb_id: type: string process_config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeProcessOverrides' required: - ids - kb_id type: object internal_handler.createInvitationRequest: properties: email: type: string message: type: string role: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole' required: - email - role type: object internal_handler.createInviteLinkRequest: properties: message: type: string role: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole' required: - role type: object internal_handler.createTenantRequest: properties: description: maxLength: 512 type: string name: maxLength: 128 minLength: 1 type: string required: - name type: object internal_handler.invitationLookupRequest: properties: token: type: string required: - token type: object internal_handler.invitationLookupResponse: properties: expires_at: type: string role: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole' tenant_id: type: integer tenant_name: type: string type: object internal_handler.meEnvVarRequest: 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 rather than a write of "", so a member always has one unambiguous way to revoke. type: string type: object internal_handler.platformAPIKeyCreateRequest: properties: capabilities: items: type: string type: array expires_at_unix: type: integer name: type: string type: object internal_handler.registerByInviteRequest: properties: email: type: string password: minLength: 6 type: string token: type: string username: type: string required: - email - password - token - username type: object internal_handler.resolveAncestorsRequest: properties: resource_ids: items: type: string type: array type: object internal_handler.sandboxConfigRequest: properties: config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.TenantSandboxConfig' description: type: string name: type: string required: - name type: object internal_handler.skillPatchRequest: properties: enabled: description: |- Enabled is a pointer because its absence is not a request to disable the skill; a body may carry envs instead. type: boolean envs: additionalProperties: type: string description: |- Envs is a pointer to a map because "sent an empty object" and "did not mention envs" are different requests: the first clears what it names, the second must leave every stored value alone. type: object type: object internal_handler.skillSourceRequest: properties: source: description: |- Source is exactly one of: "@owner/slug" or a slash-free slug (ClawHub), a github.com / gitlab.com / skills.sh / clawhub / skillhub page URL, a ClawHub skills-sh catalog page or "skills-sh:owner/repo/slug" locator, or a direct zip/SKILL.md URL. Bare "owner/slug" is rejected: it is both a ClawHub id and a GitHub repo. The fetch carries no credential. type: string type: object internal_handler.storageBackendRequest: properties: config: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.StorageBackendConfig' name: type: string provider: type: string status: type: string required: - name - provider type: object internal_handler.updateLastFAQImportResultDisplayStatusRequest: properties: display_status: enum: - open - close type: string required: - display_status type: object internal_handler.updateMemberRoleRequest: properties: role: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.TenantRole' required: - role type: object internal_handler.updateMyPreferencesRequest: properties: last_active_tenant_id: description: |- LastActiveTenantID lets clients persist "after a fresh login, drop me back into this workspace" across devices. The SPA sends this after every tenant switch; POST /auth/switch-tenant records the same preference server-side. Send a positive workspace id to set / replace, or 0 to clear. Membership is validated at next login, not here. Nil = field omitted from the PATCH and stays untouched. type: integer type: object internal_handler_session.AttachmentUpload: 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 type: object internal_handler_session.CreateKnowledgeQARequest: 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 attachment_ids: description: Pre-uploaded session-scoped document IDs items: type: string type: array attachment_uploads: description: Attached files (documents, audio, etc.) items: $ref: '#/definitions/internal_handler_session.AttachmentUpload' type: array 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 items: $ref: '#/definitions/internal_handler_session.ImageAttachment' type: array knowledge_base_ids: description: Selected knowledge base ID for this request items: type: string type: array knowledge_ids: description: Selected knowledge ID for this request items: type: string type: array mcp_service_ids: description: Per-request MCP services selected via @mention items: type: string type: array mentioned_items: description: '@mentioned knowledge bases and files' items: $ref: '#/definitions/internal_handler_session.MentionedItemRequest' type: array query: description: Query text for knowledge base search type: string skill_names: description: Per-request Skills selected via @mention items: type: string type: array 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)' items: type: string type: array web_search_enabled: description: Whether web search is enabled for this request type: boolean required: - query type: object internal_handler_session.CreateSessionRequest: properties: description: description: Description for the session (optional) type: string title: description: Title for the session (optional) type: string type: object internal_handler_session.GenerateTitleRequest: properties: messages: description: Messages to use as context for title generation items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.Message' type: array required: - messages type: object internal_handler_session.ImageAttachment: 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 type: object internal_handler_session.MentionedItemRequest: 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 type: object internal_handler_session.SearchKnowledgeRequest: properties: 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) items: type: string type: array knowledge_ids: description: IDs of specific knowledge (files) to search items: type: string type: array mentioned_items: description: Optional scoped tag mentions items: $ref: '#/definitions/internal_handler_session.MentionedItemRequest' type: array query: description: Query text to search for type: string tag_ids: description: Tag IDs for filtering within a single KB items: type: string type: array required: - query type: object internal_handler_session.StopSessionRequest: properties: message_id: type: string required: - message_id type: object internal_handler_session.batchDeleteRequest: properties: delete_all: type: boolean ids: items: type: string type: array type: object info: contact: name: WeKnora Github url: https://github.com/Tencent/WeKnora description: WeKnora 知识库管理系统 API 文档 termsOfService: http://swagger.io/terms/ title: WeKnora API version: "1.0" paths: /agent-chat/{session_id}: post: consumes: - application/json description: 基于Agent的智能问答,支持多轮对话和SSE流式响应 parameters: - description: 会话ID in: path name: session_id required: true type: string - description: 问答请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler_session.CreateKnowledgeQARequest' - default: handle description: 文件引用形式,public 返回可加载直链 enum: - handle - public in: query name: resource_urls type: string produces: - text/event-stream responses: "200": description: 问答结果(SSE流) schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Agent问答 tags: - 问答 /agent/mcp-oauth-resolutions/{pending_id}: post: consumes: - application/json description: 用户在对话中完成 OAuth 授权后调用,校验令牌存在后恢复被暂停的 Agent 工具调用 parameters: - description: 待授权 ID in: path name: pending_id required: true type: string - description: '{service_id: string}' in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "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' security: - Bearer: [] summary: 完成对话内 MCP OAuth 授权 tags: - MCP服务 /agent/mcp-oauth-resolutions/{pending_id}/cancel: post: description: 用户主动跳过 OAuth 授权,解除 Agent 阻塞 parameters: - description: 待授权 ID in: path name: pending_id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "404": description: Not Found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 跳过对话内 MCP OAuth 授权 tags: - MCP服务 /agent/tool-approvals/{pending_id}: post: consumes: - application/json description: 用户审批通过或驳回一次工具调用(用于 Agent 阻塞等待审批的场景) parameters: - description: 待审批记录 ID in: path name: pending_id required: true type: string - description: '{decision: \' in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: 审批结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 待审批记录不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 处理 MCP 工具调用待审批请求 tags: - MCP服务 /agents: get: consumes: - application/json description: 获取当前空间的所有智能体(包括内置智能体) produces: - application/json responses: "200": description: 智能体列表 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取智能体列表 tags: - 智能体 post: consumes: - application/json description: 创建新的自定义智能体 parameters: - description: 智能体信息 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.CreateAgentRequest' produces: - application/json responses: "201": description: 创建的智能体 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 创建智能体 tags: - 智能体 /agents/{id}: delete: consumes: - application/json description: 删除指定的智能体 parameters: - description: 智能体ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "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' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除智能体 tags: - 智能体 get: consumes: - application/json description: 根据ID获取智能体详情 parameters: - description: 智能体ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 智能体详情 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 智能体不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取智能体详情 tags: - 智能体 put: consumes: - application/json description: 更新智能体的名称、描述和配置 parameters: - description: 智能体ID in: path name: id required: true type: string - description: 更新请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.UpdateAgentRequest' produces: - application/json responses: "200": description: 更新后的智能体 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 无法修改内置智能体 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新智能体 tags: - 智能体 /agents/{id}/copy: post: consumes: - application/json description: 复制指定的智能体 parameters: - description: 智能体ID in: path name: id required: true type: string produces: - application/json responses: "201": description: 复制成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 智能体不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 复制智能体 tags: - 智能体 /agents/{id}/shares/{share_id}: delete: description: 从智能体的共享列表中移除指定共享关系 parameters: - description: 智能体 ID in: path name: id required: true type: string - description: 共享记录 ID in: path name: share_id required: true type: string produces: - application/json responses: "200": description: 'success: true' schema: additionalProperties: true type: object "403": description: 无权限 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 取消智能体共享 tags: - 组织 /agents/{id}/suggested-questions: get: consumes: - application/json description: 基于智能体关联的知识库,返回推荐问题供用户快捷提问 parameters: - description: 智能体ID in: path name: id required: true type: string - description: 知识库ID列表(逗号分隔),覆盖智能体默认配置 in: query name: knowledge_base_ids type: string - description: 知识ID列表(逗号分隔),限定到具体文档 in: query name: knowledge_ids type: string - description: 带知识库归属的标签范围(JSON) in: query name: tag_scopes type: string - description: 返回数量上限(未传时使用智能体配置的开场问题数量,最大30) in: query name: limit type: integer produces: - application/json responses: "200": description: 推荐问题列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 智能体不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取推荐问题 tags: - 智能体 /agents/placeholders: get: consumes: - application/json description: 获取所有可用的提示词占位符定义,按字段类型分组 produces: - application/json responses: "200": description: 占位符定义 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取占位符定义 tags: - 智能体 /agents/type-presets: get: consumes: - application/json description: 返回所有 smart-reasoning 下可用的智能体类型预设(RAG/Wiki/Hybrid/Custom),用于编辑器自动填充系统提示词、工具和 KB 兼容性 produces: - application/json responses: "200": description: 预设列表 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取智能体类型预设列表 tags: - 智能体 /api/v1/knowledge/{id}/spans: get: consumes: - application/json description: 返回该知识在解析流水线的 trace tree(root → stage → subspan):每段状态、耗时、input/output、错误码、langfuse_trace_id。支持 ?attempt=N 查看历史尝试;不传则返回最新尝试。前端用于渲染时间线 + 多模态/embedding 子节点 + 一键跳转 Langfuse。 parameters: - description: 知识ID in: path name: id required: true type: string - description: 指定尝试号;省略=最新 in: query name: attempt type: integer produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object summary: 获取知识文档解析的 Span 树(含历史尝试) tags: - 知识管理 /auth/auto-setup: post: consumes: - application/json description: Lite 版专用:首次启动时自动创建默认用户和空间并返回令牌,后续启动直接签发令牌,免除手动注册/登录流程 produces: - application/json 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' summary: 自动初始化(Lite 桌面版) tags: - 认证 /auth/change-password: post: consumes: - application/json description: 修改当前用户的登录密码。新密码须满足 8–32 位且同时包含字母与数字;开启复杂密码后还需包含大小写与特殊字符。成功后所有会话被撤销,需重新登录。 parameters: - description: 密码修改请求 in: body name: request required: true schema: properties: new_password: type: string old_password: type: string type: object produces: - application/json responses: "200": description: 修改成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 修改密码 tags: - 认证 /auth/config: get: consumes: - application/json description: 返回当前部署的注册模式与密码复杂度开关,供前端决定是否展示注册入口以及密码校验规则 produces: - application/json responses: "200": description: 认证配置 schema: additionalProperties: true type: object summary: 获取认证配置 tags: - 认证 /auth/invitations/lookup: post: consumes: - application/json description: |- 根据邀请链接中的 token 返回邀请上下文(空间名 / 角色 / 过期时间), 供注册页展示。无认证;token 无效或被撤销返回 410。 使用 POST + body 而非 GET + path,避免 token 落入访问日志 / 浏览器历史 / tracing。 parameters: - description: 邀请 token in: body name: request required: true schema: $ref: '#/definitions/internal_handler.invitationLookupRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_handler.invitationLookupResponse' "410": description: 链接无效或已撤销 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' summary: 解析共享邀请链接 token tags: - 认证 /auth/login: post: consumes: - application/json description: 用户登录并获取访问令牌 parameters: - description: 登录请求参数 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.LoginRequest' produces: - application/json 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' summary: 用户登录 tags: - 认证 /auth/logout: post: consumes: - application/json description: 撤销当前访问令牌并登出 produces: - application/json responses: "200": description: 登出成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 用户登出 tags: - 认证 /auth/me: get: consumes: - application/json description: 获取当前登录用户的详细信息 produces: - application/json responses: "200": description: 用户信息 schema: additionalProperties: true type: object "401": description: 未授权 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 获取当前用户信息 tags: - 认证 /auth/me/preferences: put: consumes: - application/json description: |- 按 PATCH 语义合并用户偏好(仅覆盖请求体里出现的字段,其余字段保持不变), 数据存放在 users.preferences (JSON),跨设备/浏览器自动同步。 parameters: - description: Preferences patch in: body name: request required: true schema: $ref: '#/definitions/internal_handler.updateMyPreferencesRequest' produces: - application/json responses: "200": description: 更新后的偏好 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: 未授权 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 更新当前用户的个性化设置 tags: - 认证 /auth/oidc/callback: get: consumes: - application/json description: 接收OIDC provider回调并由后端完成code交换,随后重定向回前端登录页 parameters: - description: OIDC授权码 in: query name: code type: string - description: OIDC状态 in: query name: state type: string - description: OIDC错误码 in: query name: error type: string produces: - application/json responses: "302": description: Found summary: OIDC登录重定向回调 tags: - 认证 /auth/oidc/config: get: consumes: - application/json description: 返回OIDC是否启用以及provider展示名称,供前端决定是否展示OIDC登录入口 produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.OIDCConfigResponse' summary: 获取OIDC登录配置 tags: - 认证 /auth/oidc/start: get: description: |- 与 /auth/oidc/url 不同,此端点直接 302 重定向到 OIDC Provider 的授权页, 无需前端 JS 介入。适用于外部平台(如企业门户)直接给出一个链接即可 触发 OIDC 授权码流程,借助 IdP 的 SSO session 实现免再次输密码。 responses: "302": description: Found summary: 发起 OIDC 登录(直接 302) tags: - 认证 /auth/oidc/url: get: consumes: - application/json description: 根据后端OIDC配置生成第三方登录跳转地址 parameters: - description: OIDC回调地址 in: query name: redirect_uri required: true type: string produces: - application/json 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' summary: 获取OIDC授权地址 tags: - 认证 /auth/refresh: post: consumes: - application/json description: 使用刷新令牌获取新的访问令牌 parameters: - description: 刷新令牌 in: body name: request required: true schema: properties: refreshToken: type: string type: object produces: - application/json responses: "200": description: 新令牌 schema: additionalProperties: true type: object "401": description: 令牌无效 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' summary: 刷新令牌 tags: - 认证 /auth/register: post: consumes: - application/json description: 注册新用户账号 parameters: - description: 注册请求参数 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RegisterRequest' produces: - application/json 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' summary: 用户注册 tags: - 认证 /auth/register-by-invite: post: consumes: - application/json description: |- 通过 Owner 生成的共享邀请链接 token 完成注册,绕过 invite_only 模式拦截。 注册者自填邮箱(与 token 不绑定);注册成功后自动加入对应空间。 parameters: - description: 邀请注册请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.registerByInviteRequest' produces: - application/json 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' "409": description: 邮箱已注册 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "410": description: 链接无效或已撤销 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' summary: 使用共享链接注册 tags: - 认证 /auth/switch-tenant: post: consumes: - application/json description: |- 为当前用户在目标空间重新签发访问令牌;要求该用户在目标空间存在 active 成员关系(跨租户超级用户除外)。 成功换签会把目标空间写入「最近活跃租户」偏好,下次登录与 refresh 都落在该空间(refresh JWT 不含 tenant_id)。 该偏好是账号级的:一次换签会改变该用户所有设备的下次登录/refresh 落点。偏好写入失败则整次换签失败,不会发出新 token。 parameters: - description: 切换请求 in: body name: request required: true schema: properties: refresh_token: type: string tenant_id: type: integer type: object produces: - application/json 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' security: - Bearer: [] summary: 切换激活空间 tags: - 认证 /auth/validate: get: consumes: - application/json description: 验证访问令牌是否有效 produces: - application/json responses: "200": description: 令牌有效 schema: additionalProperties: true type: object "401": description: 令牌无效 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 验证令牌 tags: - 认证 /chunker/preview: post: consumes: - application/json description: 对提交的文本运行自适应分块器并返回分块预览,不写入数据库不生成 embedding。文本最大 64k 字符 parameters: - description: '{text, chunking_config}' in: body name: request required: true schema: $ref: '#/definitions/internal_handler.PreviewChunkingRequest' produces: - application/json responses: "200": description: 分块结果 schema: $ref: '#/definitions/internal_handler.PreviewChunkingResponse' "400": description: 请求参数错误 schema: additionalProperties: true type: object "413": description: 文本超过预览限制 schema: additionalProperties: true type: object "504": description: 分块超时 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 预览分块结果 tags: - 分块 /chunks/{knowledge_id}: delete: consumes: - application/json description: 删除指定知识下的所有分块 parameters: - description: 知识ID in: path name: knowledge_id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除知识下所有分块 tags: - 分块管理 get: consumes: - application/json description: 获取指定知识下的所有分块列表,支持分页 parameters: - description: 知识ID in: path name: knowledge_id required: true type: string - default: 1 description: 页码 in: query name: page type: integer - default: 10 description: 每页数量 in: query name: page_size type: integer produces: - application/json responses: "200": description: 分块列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识分块列表 tags: - 分块管理 /chunks/{knowledge_id}/{id}: delete: consumes: - application/json description: 删除指定的分块 parameters: - description: 知识ID in: path name: knowledge_id required: true type: string - description: 分块ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 分块不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除分块 tags: - 分块管理 put: consumes: - application/json description: 更新指定分块的内容和属性 parameters: - description: 知识ID in: path name: knowledge_id required: true type: string - description: 分块ID in: path name: id required: true type: string - description: 更新请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.UpdateChunkRequest' produces: - application/json responses: "200": description: 更新后的分块 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 分块不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新分块 tags: - 分块管理 /chunks/by-id/{id}: get: consumes: - application/json description: 仅通过分块ID获取分块详情(不需要knowledge_id);支持共享知识库下的分块访问 parameters: - description: 分块ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 分块详情 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 分块不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 通过ID获取分块 tags: - 分块管理 /chunks/by-id/{id}/questions: delete: consumes: - application/json description: 删除分块中生成的问题 parameters: - description: 分块ID in: path name: id required: true type: string - description: 问题ID in: body name: request required: true schema: properties: question_id: type: string type: object produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 分块不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除生成的问题 tags: - 分块管理 /datasource: get: description: List all data sources for a specific knowledge base parameters: - description: Knowledge base ID in: query name: kb_id required: true type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource' type: array "400": description: Bad Request schema: additionalProperties: type: string type: object summary: List data sources for a knowledge base tags: - DataSource post: consumes: - application/json description: Create a new data source configuration for a knowledge base parameters: - description: Data source configuration in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource' "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Create a new data source tags: - DataSource /datasource/{id}: delete: description: Delete a data source (soft delete) parameters: - description: Data source ID in: path name: id required: true type: string responses: "204": description: No Content "404": description: Not Found schema: additionalProperties: type: string type: object summary: Delete a data source tags: - DataSource get: description: Retrieve a data source configuration by ID parameters: - description: Data source ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource' "404": description: Not Found schema: additionalProperties: type: string type: object summary: Get a data source by ID tags: - DataSource put: consumes: - application/json description: Update an existing data source configuration parameters: - description: Data source ID in: path name: id required: true type: string - description: Updated configuration in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.DataSource' "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Update a data source tags: - DataSource /datasource/{id}/logs: get: description: Retrieve sync history for a data source parameters: - description: Data source ID in: path name: id required: true type: string - description: 'Limit (default: 10)' in: query name: limit type: integer - description: 'Offset (default: 0)' in: query name: offset type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SyncLog' type: array "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Get sync logs tags: - DataSource /datasource/{id}/pause: post: description: Pause a data source's scheduled syncs parameters: - description: Data source ID in: path name: id required: true type: string responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Pause data source tags: - DataSource /datasource/{id}/resource-ancestors: post: consumes: - application/json 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. parameters: - description: Data source ID in: path name: id required: true type: string - description: Resource IDs to resolve in: body name: request required: true schema: $ref: '#/definitions/internal_handler.resolveAncestorsRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: items: type: string type: array type: object "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Resolve resource ancestors tags: - DataSource /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). parameters: - description: Data source ID in: path name: id required: true type: string - description: Parent resource ExternalID; empty lists the top level in: query name: parent_id type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.Resource' type: array "400": description: Bad Request schema: additionalProperties: type: string type: object summary: List available resources in data source tags: - DataSource /datasource/{id}/resume: post: description: Resume a paused data source parameters: - description: Data source ID in: path name: id required: true type: string responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Resume data source tags: - DataSource /datasource/{id}/sync: post: description: Trigger an immediate sync for a data source parameters: - description: Data source ID in: path name: id required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SyncLog' "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Trigger immediate sync tags: - DataSource /datasource/{id}/validate: post: description: Validate the connection to an external data source parameters: - description: Data source ID in: path name: id required: true type: string responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Test data source connection tags: - DataSource /datasource/logs/{log_id}: get: description: Retrieve a specific sync log entry parameters: - description: Sync log ID in: path name: log_id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SyncLog' "404": description: Not Found schema: additionalProperties: type: string type: object summary: Get specific sync log tags: - DataSource /datasource/types: get: description: Get list of available data source connectors produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_datasource.ConnectorMetadata' type: array summary: Get available connectors tags: - DataSource /datasource/validate-credentials: post: consumes: - application/json description: Validate connectivity to an external data source using type + credentials parameters: - description: type and credentials in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: additionalProperties: type: string type: object summary: Test connection with raw credentials (no persistence) tags: - DataSource /evaluation/: get: consumes: - application/json description: 根据任务ID获取评估结果 parameters: - description: 评估任务ID in: query name: task_id required: true type: string produces: - application/json responses: "200": description: 评估结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取评估结果 tags: - 评估 post: consumes: - application/json description: 对知识库进行评估测试 parameters: - description: 评估请求参数 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.EvaluationRequest' produces: - application/json responses: "200": description: 评估任务 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 执行评估 tags: - 评估 /faq/import/progress/{task_id}: get: consumes: - application/json description: 获取FAQ导入任务的进度 parameters: - description: 任务ID in: path name: task_id required: true type: string produces: - application/json responses: "200": description: 导入进度 schema: additionalProperties: true type: object "404": description: 任务不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取FAQ导入进度 tags: - FAQ管理 /im-channels/{id}: delete: description: 删除指定 IM 渠道 parameters: - description: 渠道 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 'success: true' schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: additionalProperties: true type: object "404": description: 渠道不存在 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 删除 IM 渠道 tags: - IM 渠道 put: consumes: - application/json description: 更新指定 IM 渠道的名称、模式、知识库、凭证或启用状态 parameters: - description: 渠道 ID in: path name: id required: true type: string - description: 更新字段(name/mode/output_mode/knowledge_base_id/credentials/enabled) in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: 更新后的渠道 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: additionalProperties: true type: object "404": description: 渠道不存在 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 更新 IM 渠道 tags: - IM 渠道 /im-channels/{id}/toggle: post: description: 切换指定 IM 渠道的启用状态 parameters: - description: 渠道 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 更新后的渠道 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: additionalProperties: true type: object "404": description: 渠道不存在 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 启用/停用 IM 渠道 tags: - IM 渠道 /im/callback/{channel_id}: get: consumes: - application/json description: 接收各 IM 平台的事件回调;走平台自身签名校验,不使用 API Key parameters: - description: 渠道 ID in: path name: channel_id required: true type: string produces: - application/json responses: "200": description: 处理结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: additionalProperties: true type: object "401": description: 签名校验失败 schema: additionalProperties: true type: object summary: IM 平台回调 tags: - IM 回调 post: consumes: - application/json description: 接收各 IM 平台的事件回调;走平台自身签名校验,不使用 API Key parameters: - description: 渠道 ID in: path name: channel_id required: true type: string produces: - application/json responses: "200": description: 处理结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: additionalProperties: true type: object "401": description: 签名校验失败 schema: additionalProperties: true type: object summary: IM 平台回调 tags: - IM 回调 /initialization/asr/check: post: consumes: - application/json description: 检查ASR(语音识别)模型连接是否正常,通过发送一段静默音频测试 /v1/audio/transcriptions 端点 parameters: - description: ASR检查请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.ModelTestRequest' produces: - application/json responses: "200": description: 检查结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 检查ASR模型 tags: - 初始化 /initialization/config/{kbId}: get: consumes: - application/json description: 根据知识库ID获取当前配置信息 parameters: - description: 知识库ID in: path name: kbId required: true type: string produces: - application/json responses: "200": description: 配置信息 schema: additionalProperties: true type: object "404": description: 知识库不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识库配置 tags: - 初始化 put: consumes: - application/json description: 根据知识库ID更新模型和分块配置 parameters: - description: 知识库ID in: path name: kbId required: true type: string - description: 配置请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.KBModelConfigRequest' produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 知识库不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新知识库配置 tags: - 初始化 /initialization/embedding/test: post: consumes: - application/json description: 测试Embedding接口是否可用并返回向量维度 parameters: - description: Embedding测试请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.ModelTestRequest' produces: - application/json responses: "200": description: 测试结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 测试Embedding模型 tags: - 初始化 /initialization/extract/fabri-tag: post: consumes: - application/json description: 随机生成一组标签 produces: - application/json responses: "200": description: 生成的标签 schema: additionalProperties: true type: object summary: 生成随机标签 tags: - 初始化 /initialization/extract/fabri-text: post: consumes: - application/json description: 根据标签生成示例文本 parameters: - description: 生成请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.FabriTextRequest' produces: - application/json responses: "200": description: 生成的文本 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 生成示例文本 tags: - 初始化 /initialization/extract/text-relation: post: consumes: - application/json description: 从文本中提取实体和关系 parameters: - description: 提取请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.TextRelationExtractionRequest' produces: - application/json responses: "200": description: 提取结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 提取文本关系 tags: - 初始化 /initialization/initialize/{kbId}: post: consumes: - application/json description: 根据知识库ID执行完整配置更新 parameters: - description: 知识库ID in: path name: kbId required: true type: string - description: 初始化请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.InitializationRequest' produces: - application/json responses: "200": description: 初始化成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 初始化知识库配置 tags: - 初始化 /initialization/multimodal/test: post: consumes: - multipart/form-data description: 上传图片测试多模态处理功能 parameters: - description: 测试图片 in: formData name: image required: true type: file - description: VLM模型名称 in: formData name: vlm_model required: true type: string - description: VLM Base URL in: formData name: vlm_base_url required: true type: string - description: VLM API Key in: formData name: vlm_api_key type: string - description: VLM接口类型 in: formData name: vlm_interface_type type: string - description: 存储类型(cos/minio) in: formData name: storage_type required: true type: string produces: - application/json responses: "200": description: 测试结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 测试多模态功能 tags: - 初始化 /initialization/ollama/download/progress/{taskId}: get: consumes: - application/json description: 获取Ollama模型下载任务的进度 parameters: - description: 任务ID in: path name: taskId required: true type: string produces: - application/json responses: "200": description: 下载进度 schema: additionalProperties: true type: object "404": description: 任务不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取下载进度 tags: - 初始化 /initialization/ollama/download/tasks: get: consumes: - application/json description: 列出所有Ollama模型下载任务 produces: - application/json responses: "200": description: 任务列表 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 列出下载任务 tags: - 初始化 /initialization/ollama/models: get: consumes: - application/json description: 列出已安装的Ollama模型 produces: - application/json responses: "200": description: 模型列表 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 列出Ollama模型 tags: - 初始化 /initialization/ollama/models/check: post: consumes: - application/json description: 检查指定的Ollama模型是否已安装 parameters: - description: 模型名称列表 in: body name: request required: true schema: properties: models: items: type: string type: array type: object produces: - application/json responses: "200": description: 模型状态 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 检查Ollama模型状态 tags: - 初始化 /initialization/ollama/models/download: post: consumes: - application/json description: 异步下载指定的Ollama模型 parameters: - description: 模型名称 in: body name: request required: true schema: properties: modelName: type: string type: object produces: - application/json responses: "200": description: 下载任务信息 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 下载Ollama模型 tags: - 初始化 /initialization/ollama/status: get: consumes: - application/json description: 检查Ollama服务是否可用 produces: - application/json responses: "200": description: Ollama状态 schema: additionalProperties: true type: object summary: 检查Ollama服务状态 tags: - 初始化 /initialization/remote/check: post: consumes: - application/json description: 检查远程API模型连接是否正常 parameters: - description: 模型检查请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.RemoteModelCheckRequest' produces: - application/json responses: "200": description: 检查结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 检查远程模型 tags: - 初始化 /initialization/rerank/check: post: consumes: - application/json description: 检查Rerank模型连接和功能是否正常 parameters: - description: Rerank检查请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.ModelTestRequest' produces: - application/json responses: "200": description: 检查结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 检查Rerank模型 tags: - 初始化 /knowledge-bases: get: consumes: - application/json description: 获取当前空间的所有知识库;或当传入 agent_id(共享智能体)时,校验权限后返回该智能体配置的知识库范围(用于 @ 提及) parameters: - description: 共享智能体 ID(传入时返回该智能体可用的知识库) in: query name: agent_id type: string produces: - application/json responses: "200": description: 知识库列表 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识库列表 tags: - 知识库 post: consumes: - application/json description: 创建新的知识库 parameters: - description: 知识库信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeBase' produces: - application/json responses: "201": description: 创建的知识库 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 创建知识库 tags: - 知识库 /knowledge-bases/{id}: delete: consumes: - application/json description: 删除指定的知识库及其所有内容 parameters: - description: 知识库ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除知识库 tags: - 知识库 get: consumes: - application/json description: 根据ID获取知识库详情。当使用共享智能体时,可传 agent_id 以校验该智能体是否有权访问该知识库。 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 共享智能体 ID(用于校验智能体是否有权访问该知识库) in: query name: agent_id type: string produces: - application/json responses: "200": description: 知识库详情 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 知识库不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识库详情 tags: - 知识库 put: consumes: - application/json description: 更新知识库的名称、描述和配置 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 更新请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.UpdateKnowledgeBaseRequest' produces: - application/json responses: "200": description: 更新后的知识库 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新知识库 tags: - 知识库 /knowledge-bases/{id}/activity: get: description: 返回知识库的重要变更与后台任务入口。仅知识库创建者或所属空间管理员可读,共享空间不可读。 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 游标:返回 id 小于此值的记录 in: query name: after_id type: integer - description: 页大小,1-100,默认 50 in: query name: limit type: integer - description: 按 action 精确过滤 in: query name: action type: string - description: 按 outcome 精确过滤 in: query name: outcome type: string - description: 按 actor_user_id 精确过滤 in: query name: actor type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_handler.auditLogListResponse' "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 获取知识库活动记录 tags: - 知识库 /knowledge-bases/{id}/duplicate: post: consumes: - application/json description: 创建一个只包含设置的新知识库副本,不复制知识、FAQ 内容、分块、索引、Wiki 页面、分享或置顶状态 parameters: - description: 源知识库 ID in: path name: id required: true type: string produces: - application/json responses: "201": description: 创建后的知识库副本 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 创建知识库副本 tags: - 知识库 /knowledge-bases/{id}/faq/entries: delete: consumes: - application/json description: 批量删除指定的FAQ条目 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 要删除的FAQ ID列表(seq_id) in: body name: request required: true schema: properties: ids: items: type: integer type: array type: object produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量删除FAQ条目 tags: - FAQ管理 get: consumes: - application/json description: 获取知识库下的FAQ条目列表,支持分页和筛选 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 页码 in: query name: page type: integer - description: 每页数量 in: query name: page_size type: integer - description: 标签ID筛选(seq_id),兼容旧版单标签 in: query name: tag_id type: integer - description: 标签UUID筛选,逗号分隔(OR语义) in: query name: tag_ids type: string - description: 关键词搜索 in: query name: keyword type: string - description: '搜索字段: standard_question(标准问题), similar_questions(相似问法), answers(答案), 默认搜索全部' in: query name: search_field type: string - description: '排序方式: asc(按更新时间正序), 默认按更新时间倒序' in: query name: sort_order type: string produces: - application/json responses: "200": description: FAQ列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取FAQ条目列表 tags: - FAQ管理 post: consumes: - application/json description: |- 异步批量更新或插入FAQ条目。支持 dry_run 模式(设置 dry_run=true),异步验证不实际导入。 dry_run 模式是异步操作,返回 task_id,通过 /faq/import/progress/{task_id} 查询进度和结果。 验证内容包括:1) 条目基本格式 2) 重复问题(批次内和知识库已有) 3) 内容安全检查。 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 批量操作请求 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQBatchUpsertPayload' produces: - application/json responses: "200": description: 任务ID schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量更新/插入FAQ条目 tags: - FAQ管理 /knowledge-bases/{id}/faq/entries/{entry_id}: get: consumes: - application/json description: 根据ID获取单个FAQ条目的详情 parameters: - description: 知识库ID in: path name: id required: true type: string - description: FAQ条目ID(seq_id) in: path name: entry_id required: true type: integer produces: - application/json responses: "200": description: FAQ条目详情 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 条目不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取FAQ条目详情 tags: - FAQ管理 put: consumes: - application/json description: 更新指定的FAQ条目 parameters: - description: 知识库ID in: path name: id required: true type: string - description: FAQ条目ID(seq_id) in: path name: entry_id required: true type: integer - description: FAQ条目 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryPayload' produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新FAQ条目 tags: - FAQ管理 /knowledge-bases/{id}/faq/entries/{entry_id}/similar-questions: post: consumes: - application/json description: 向指定的FAQ条目添加相似问题 parameters: - description: 知识库ID in: path name: id required: true type: string - description: FAQ条目ID(seq_id) in: path name: entry_id required: true type: integer - description: 相似问列表 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.addSimilarQuestionsRequest' produces: - application/json responses: "200": description: 更新后的FAQ条目 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 条目不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 添加相似问 tags: - FAQ管理 /knowledge-bases/{id}/faq/entries/export: get: consumes: - application/json description: 将所有FAQ条目导出为 CSV(默认)或 JSON。?format=json 返回与 FAQEntryPayload 结构兼容的数组。 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 导出格式:csv(默认)或 json in: query name: format type: string produces: - text/csv - application/json responses: "200": description: 导出文件 schema: type: file "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 导出FAQ条目 tags: - FAQ管理 /knowledge-bases/{id}/faq/entries/fields: put: consumes: - application/json description: 批量更新FAQ条目的多个字段(is_enabled, is_recommended, tag_id) parameters: - description: 知识库ID in: path name: id required: true type: string - description: 字段更新请求 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryFieldsBatchUpdate' produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量更新FAQ字段 tags: - FAQ管理 /knowledge-bases/{id}/faq/entries/tags: put: consumes: - application/json description: 批量更新FAQ条目的标签 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 标签更新请求 in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量更新FAQ标签 tags: - FAQ管理 /knowledge-bases/{id}/faq/entry: post: consumes: - application/json description: 同步创建单个FAQ条目 parameters: - description: 知识库ID in: path name: id required: true type: string - description: FAQ条目 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQEntryPayload' produces: - application/json responses: "200": description: 创建的FAQ条目 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 创建单个FAQ条目 tags: - FAQ管理 /knowledge-bases/{id}/faq/import/last-result/display: put: consumes: - application/json description: 更新FAQ知识库导入结果统计卡片的显示或隐藏状态 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 状态更新请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.updateLastFAQImportResultDisplayStatusRequest' produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 知识库不存在或无导入记录 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新FAQ最后一次导入结果显示状态 tags: - FAQ管理 /knowledge-bases/{id}/faq/search: post: consumes: - application/json description: 使用混合搜索在FAQ中搜索,支持两级优先级标签召回:first_priority_tag_ids优先级最高,second_priority_tag_ids次之 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 搜索请求 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.FAQSearchRequest' produces: - application/json responses: "200": description: 搜索结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 搜索FAQ tags: - FAQ管理 /knowledge-bases/{id}/hybrid-search: get: consumes: - application/json description: 在知识库中执行向量和关键词混合搜索。推荐使用 POST;GET 携带 JSON 请求体仍受支持(兼容旧客户端)。 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 搜索参数 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SearchParams' - default: handle description: 文件引用形式,public 返回可加载直链 enum: - handle - public in: query name: resource_urls type: string produces: - application/json responses: "200": description: 搜索结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 混合搜索 tags: - 知识库 post: consumes: - application/json description: 在知识库中执行向量和关键词混合搜索。推荐使用 POST;GET 携带 JSON 请求体仍受支持(兼容旧客户端)。 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 搜索参数 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SearchParams' - default: handle description: 文件引用形式,public 返回可加载直链 enum: - handle - public in: query name: resource_urls type: string produces: - application/json responses: "200": description: 搜索结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 混合搜索 tags: - 知识库 /knowledge-bases/{id}/knowledge: delete: consumes: - application/json description: 删除知识库下的所有知识条目(异步任务)。知识库本身保留,仅清空其中的内容 parameters: - description: 知识库ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 清空任务已提交 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 清空知识库内容 tags: - 知识管理 get: consumes: - application/json description: 获取知识库下的知识列表,支持分页和筛选 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 页码 in: query name: page type: integer - description: 每页数量 in: query name: page_size type: integer - description: 标签ID筛选,逗号分隔(OR语义) in: query name: tag_ids type: string - description: 关键词搜索 in: query name: keyword type: string - description: 文件类型筛选 in: query name: file_type type: string - description: 解析状态筛选 (pending/processing/completed/failed) in: query name: parse_status type: string - description: 来源/渠道筛选 (web/api/feishu/notion/yuque/wechat/...,或 manual/url 按 type 过滤) in: query name: source type: string - description: 更新时间起点,RFC3339 格式 in: query name: start_time type: string - description: 更新时间终点,RFC3339 格式 in: query name: end_time type: string - description: 文件夹路径筛选,空字符串表示知识库根目录;不传该参数则不按文件夹过滤 in: query name: folder_path type: string - description: 为 true 时同时返回子文件夹内的文档 in: query name: folder_recursive type: boolean produces: - application/json responses: "200": description: 知识列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识列表 tags: - 知识管理 /knowledge-bases/{id}/knowledge/file: post: consumes: - multipart/form-data description: 上传文件并创建知识条目 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 上传的文件 in: formData name: file required: true type: file - description: 自定义文件名 in: formData name: fileName type: string - description: 元数据JSON in: formData name: metadata type: string - description: 启用多模态处理 in: formData name: enable_multimodel type: boolean - description: 分类ID列表,逗号分隔 in: formData name: tag_ids type: string - description: 处理配置JSON(KnowledgeProcessOverrides) in: formData name: process_config type: string produces: - application/json responses: "200": description: 创建的知识 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "409": description: 文件重复 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 从文件创建知识 tags: - 知识管理 /knowledge-bases/{id}/knowledge/folders: get: consumes: - application/json description: 返回知识库内由文件夹上传形成的目录树,包含每个文件夹的直接文档数与含子目录的总数 parameters: - description: 知识库ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 目录树 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识库文件夹目录树 tags: - 知识管理 put: consumes: - application/json description: 把一个文件夹及其所有子目录改到新路径。目标路径已存在时两个文件夹合并;不能移动到自身子目录下 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 重命名请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.RenameKnowledgeFolderRequest' produces: - application/json responses: "200": description: 重命名成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 重命名或移动文件夹 tags: - 知识管理 /knowledge-bases/{id}/knowledge/manual: post: consumes: - application/json description: 手工录入Markdown格式的知识内容 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 手工知识内容 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ManualKnowledgePayload' produces: - application/json responses: "200": description: 创建的知识 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 手工创建知识 tags: - 知识管理 /knowledge-bases/{id}/knowledge/url: post: consumes: - application/json description: 从指定URL抓取内容并创建知识条目。当提供 file_name/file_type 或 URL 路径含已知文件扩展名时,自动切换为文件下载模式 parameters: - description: 知识库ID in: path name: id required: true type: string - description: URL请求 in: body name: request required: true schema: properties: enable_multimodel: type: boolean file_name: type: string file_type: type: string tag_ids: items: type: string type: array title: type: string url: type: string type: object produces: - application/json responses: "201": description: 创建的知识 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "409": description: URL重复 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 从URL创建知识 tags: - 知识管理 /knowledge-bases/{id}/move-targets: get: description: 返回与源知识库 Type 一致、EmbeddingModelID 一致、非临时且不是自身的目标知识库列表 parameters: - description: 源知识库 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 可移动目标列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 知识库不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取可移动目标知识库列表 tags: - 知识库 /knowledge-bases/{id}/pin: put: consumes: - application/json description: 切换知识库的置顶状态 parameters: - description: 知识库ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 更新后的知识库 schema: additionalProperties: true type: object "404": description: 知识库不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 置顶/取消置顶知识库 tags: - 知识库 /knowledge-bases/{id}/shares: get: description: 获取知识库的所有共享记录 parameters: - description: 知识库ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ListSharesResponse' security: - Bearer: [] summary: 获取知识库的共享列表 tags: - 知识库共享 post: consumes: - application/json description: 将知识库共享到指定组织 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 共享信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ShareKnowledgeBaseRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 共享知识库到组织 tags: - 知识库共享 /knowledge-bases/{id}/shares/{share_id}: delete: description: 取消知识库的共享 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 共享记录ID in: path name: share_id required: true type: string responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 取消共享 tags: - 知识库共享 put: consumes: - application/json description: 更新知识库共享的权限级别 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 共享记录ID in: path name: share_id required: true type: string - description: 权限信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.UpdateSharePermissionRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 更新共享权限 tags: - 知识库共享 /knowledge-bases/{id}/tags: get: consumes: - application/json description: 获取知识库下的所有标签及统计信息 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 页码 in: query name: page type: integer - description: 每页数量 in: query name: page_size type: integer - description: 关键词搜索 in: query name: keyword type: string produces: - application/json responses: "200": description: 标签列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取标签列表 tags: - 标签管理 post: consumes: - application/json description: 在知识库下创建新标签 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 标签信息 in: body name: request required: true schema: properties: color: type: string name: type: string sort_order: type: integer type: object produces: - application/json responses: "200": description: 创建的标签 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 创建标签 tags: - 标签管理 /knowledge-bases/{id}/tags/{tag_id}: delete: consumes: - application/json description: 删除标签,可使用force=true强制删除被引用的标签,content_only=true仅删除标签下的内容而保留标签本身 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 标签ID (UUID或seq_id) in: path name: tag_id required: true type: string - description: 强制删除 in: query name: force type: boolean - description: 仅删除内容,保留标签 in: query name: content_only type: boolean - description: 删除选项 in: body name: body schema: $ref: '#/definitions/internal_handler.DeleteTagRequest' produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除标签 tags: - 标签管理 put: consumes: - application/json description: 更新标签信息 parameters: - description: 知识库ID in: path name: id required: true type: string - description: 标签ID (UUID或seq_id) in: path name: tag_id required: true type: string - description: 标签更新信息 in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: 更新后的标签 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新标签 tags: - 标签管理 /knowledge-bases/copy: post: consumes: - application/json description: 将一个知识库的内容复制到另一个知识库(异步任务) parameters: - description: 复制请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.CopyKnowledgeBaseRequest' produces: - application/json responses: "200": description: 任务ID schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 复制知识库 tags: - 知识库 /knowledge-bases/copy/progress/{task_id}: get: consumes: - application/json description: 获取知识库复制任务的进度 parameters: - description: 任务ID in: path name: task_id required: true type: string produces: - application/json responses: "200": description: 进度信息 schema: additionalProperties: true type: object "404": description: 任务不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识库复制进度 tags: - 知识库 /knowledge-chat/{session_id}: post: consumes: - application/json description: 基于知识库的问答(使用LLM总结),支持SSE流式响应 parameters: - description: 会话ID in: path name: session_id required: true type: string - description: 问答请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler_session.CreateKnowledgeQARequest' - default: handle description: 文件引用形式,public 返回可加载直链 enum: - handle - public in: query name: resource_urls type: string produces: - text/event-stream responses: "200": description: 问答结果(SSE流) schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 知识问答 tags: - 问答 /knowledge-search: post: consumes: - application/json description: 在知识库中搜索(不使用LLM总结) parameters: - description: 搜索请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler_session.SearchKnowledgeRequest' - default: handle description: 文件引用形式,public 返回可加载直链 enum: - handle - public in: query name: resource_urls type: string produces: - application/json responses: "200": description: 搜索结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 知识搜索 tags: - 问答 /knowledge/{id}: delete: consumes: - application/json description: |- 根据ID异步删除知识条目。请求会被入队到与批量删除相同的异步管道(asynq); 接口返回 200 仅表示任务已提交(响应 data.task_id 为任务 ID),实际删除由后台 worker 完成。 parameters: - description: 知识ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 任务已提交,返回 task_id schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除知识 tags: - 知识管理 get: consumes: - application/json description: 根据ID获取知识条目详情 parameters: - description: 知识ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 知识详情 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 知识不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识详情 tags: - 知识管理 put: consumes: - application/json description: 部分更新知识条目(标题/描述/自定义元数据);未传字段保持不变,显式传空 description 可清空摘要 parameters: - description: 知识ID in: path name: id required: true type: string - description: 更新字段(均可选) in: body name: request required: true schema: $ref: '#/definitions/internal_handler.UpdateKnowledgeRequest' produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新知识 tags: - 知识管理 /knowledge/{id}/cancel-parse: post: consumes: - application/json description: 取消进行中的知识解析任务。当前已写入的 chunk / 索引保留,可通过 reparse 接口重新触发解析。已完成 / 已失败 / 删除中的知识不支持取消。 parameters: - description: 知识ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 取消已提交 schema: additionalProperties: true type: object "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' security: - Bearer: [] - ApiKeyAuth: [] summary: 取消知识解析 tags: - 知识管理 /knowledge/{id}/download: get: consumes: - application/json description: 下载知识条目关联的原始文件 parameters: - description: 知识ID in: path name: id required: true type: string produces: - application/octet-stream responses: "200": description: 文件内容 schema: type: file "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 下载知识文件 tags: - 知识管理 /knowledge/{id}/preview: get: consumes: - application/json description: 返回知识条目关联的原始文件,Content-Type 根据文件类型设置,用于浏览器内嵌预览 parameters: - description: 知识ID in: path name: id required: true type: string produces: - application/pdf - image/jpeg - image/png - text/plain responses: "200": description: 文件内容 schema: type: file "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 预览知识文件 tags: - 知识管理 /knowledge/{id}/reparse: post: consumes: - application/json description: 删除知识中现有的文档内容并重新解析,使用异步任务方式处理 parameters: - description: 知识ID in: path name: id required: true type: string - description: 可选的处理配置覆盖:{\ in: body name: body schema: type: object produces: - application/json responses: "200": description: 重新解析任务已提交 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 重新解析知识 tags: - 知识管理 /knowledge/batch: get: consumes: - application/json description: 根据ID列表批量获取知识条目。可选 kb_id:指定时按该知识库校验权限并用于共享知识库的空间解析;可选 agent_id:使用共享智能体时传此参数,后端按智能体所属空间查询(用于刷新后恢复共享知识库下的文件) parameters: - collectionFormat: csv description: 知识ID列表 in: query items: type: string name: ids required: true type: array - description: 可选,知识库ID(用于共享知识库时指定范围) in: query name: kb_id type: string - description: 可选,共享智能体ID(用于按智能体空间批量拉取文件详情) in: query name: agent_id type: string produces: - application/json responses: "200": description: 知识列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量获取知识 tags: - 知识管理 /knowledge/batch-delete: post: consumes: - application/json description: 按 ID 列表批量删除单个知识库下的多个知识条目 parameters: - description: 批量删除请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.BatchDeleteKnowledgeRequest' produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量删除知识 tags: - 知识管理 /knowledge/batch-reparse: post: consumes: - application/json description: 按 ID 列表批量重新解析单个知识库下的多个知识条目 parameters: - description: 批量重解析请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.batchReparseKnowledgeRequest' produces: - application/json responses: "200": description: 任务已提交 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量重新解析知识 tags: - 知识管理 /knowledge/folder: post: consumes: - application/json description: 批量修改知识条目所属文件夹。文件夹由路径推导而来,因此目标路径不存在时会自动创建;空路径表示知识库顶层。仅调整归类,不会重新解析文档 parameters: - description: 移动请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.MoveKnowledgeToFolderRequest' produces: - application/json responses: "200": description: 移动成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 移动知识到文件夹 tags: - 知识管理 /knowledge/image/{id}/{chunk_id}: put: consumes: - application/json description: 更新知识分块的图像信息 parameters: - description: 知识ID in: path name: id required: true type: string - description: 分块ID in: path name: chunk_id required: true type: string - description: 图像信息 in: body name: request required: true schema: properties: image_info: type: string type: object produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新图像信息 tags: - 知识管理 /knowledge/manual/{id}: put: consumes: - application/json description: 更新手工录入的Markdown知识内容 parameters: - description: 知识ID in: path name: id required: true type: string - description: 手工知识内容 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ManualKnowledgePayload' produces: - application/json responses: "200": description: 更新后的知识 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新手工知识 tags: - 知识管理 /knowledge/move: post: consumes: - application/json description: 将一条或多条知识从源知识库移动到目标知识库(异步),返回任务 ID 用于查询进度 parameters: - description: '{source_kb_id, target_kb_id, knowledge_ids}' in: body name: request required: true schema: $ref: '#/definitions/internal_handler.MoveKnowledgeRequest' produces: - application/json responses: "200": description: 任务信息 schema: $ref: '#/definitions/internal_handler.MoveKnowledgeResponse' "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 移动知识到其他知识库 tags: - 知识 /knowledge/move/progress/{task_id}: get: description: 按任务 ID 查询移动进度 parameters: - description: 移动任务 ID in: path name: task_id required: true type: string produces: - application/json responses: "200": description: 进度信息 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.KnowledgeMoveProgress' "404": description: 任务不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取知识移动进度 tags: - 知识 /knowledge/search: get: consumes: - application/json 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. parameters: - description: Keyword to search in: query name: keyword type: string - description: Offset for pagination (minimum 0) in: query minimum: 0 name: offset type: integer - description: Limit for pagination (default 20, maximum 100) in: query maximum: 100 minimum: 1 name: limit type: integer - description: Comma-separated file extensions to filter (e.g., csv,xlsx) in: query name: file_types type: string - description: Shared agent ID (search within agent's KB scope) in: query name: agent_id type: string - description: Return recent files when keyword is empty in: query name: recent type: boolean produces: - application/json responses: "200": description: Search results schema: additionalProperties: true type: object "400": description: Invalid request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Search knowledge tags: - Knowledge /knowledge/tags: put: consumes: - application/json description: 批量更新知识条目的标签。可选 kb_id:指定时按该知识库校验编辑权限并用于共享知识库的空间解析 parameters: - description: 标签更新请求(updates 必填,kb_id 可选) in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量更新知识标签 tags: - 知识管理 /knowledgebase/{kb_id}/wiki/auto-fix: post: description: Automatically fix fixable wiki issues (broken links, etc.) parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: Auto-fix wiki issues tags: - Wiki /knowledgebase/{kb_id}/wiki/folders: get: 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. parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Parent folder id (empty = root) in: query name: parent_id type: string produces: - application/json 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' security: - Bearer: [] summary: List wiki folders tags: - Wiki post: consumes: - application/json description: Create a new (initially empty) directory node under parent_id parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Folder data in: body name: folder required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolderCreateRequest' produces: - application/json 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' security: - Bearer: [] summary: Create a wiki folder tags: - Wiki /knowledgebase/{kb_id}/wiki/folders/{folder_id}: delete: description: Delete a folder that has no pages and no child folders parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Folder ID in: path name: folder_id required: true type: string 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' security: - Bearer: [] summary: Delete an empty wiki folder tags: - Wiki put: consumes: - application/json description: Rename and/or reparent a folder; the whole subtree's paths and the affected pages' cached paths are recomputed parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Folder ID in: path name: folder_id required: true type: string - description: Folder update in: body name: folder required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiFolderUpdateRequest' produces: - application/json 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' security: - Bearer: [] summary: Rename or move a wiki folder tags: - Wiki /knowledgebase/{kb_id}/wiki/graph: get: description: |- Returns a slice of the wiki link graph for visualization. Supports `mode=overview` (top-N most-connected pages, default) and `mode=ego` (BFS neighborhood of a center slug) to keep response size tractable for knowledge bases with tens of thousands of pages. parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: overview (default) | ego in: query name: mode type: string - description: Center slug for ego mode in: query name: center type: string - description: Ego BFS depth (1-3, default 1) in: query name: depth type: integer - description: Comma-separated page_type allow-list in: query name: types type: string - description: Max nodes to return (default 500, max 2000) in: query name: limit type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiGraphData' security: - Bearer: [] summary: Get wiki link graph tags: - Wiki /knowledgebase/{kb_id}/wiki/index: get: description: |- Returns the wiki index as intro text plus per-type paginated directory groups. The heavy directory markdown that used to live in wiki_pages.content was replaced with this structured response so a KB with tens of thousands of pages no longer materializes megabytes of TEXT on every index open. parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: 'Comma-separated page types (default: all content types)' in: query name: types type: string - description: Per-group window size, 1-200 (default 50) in: query name: limit type: integer - description: Opaque offset cursor from previous response in: query name: cursor type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiIndexResponse' security: - Bearer: [] summary: Get wiki index view tags: - Wiki /knowledgebase/{kb_id}/wiki/issues: get: description: List issues flagged on wiki pages with optional filtering parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Filter by page slug in: query name: slug type: string - description: Filter by status (pending, ignored, resolved) in: query name: status type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageIssue' type: array security: - Bearer: [] summary: List wiki page issues tags: - Wiki /knowledgebase/{kb_id}/wiki/issues/{issue_id}/status: put: consumes: - application/json description: Update the status of a flagged wiki page issue parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Issue ID in: path name: issue_id required: true type: string - description: 'New status {''status'': ''ignored''}' in: body name: status required: true schema: type: object produces: - application/json responses: "200": description: OK schema: additionalProperties: type: string type: object "400": description: Bad Request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: Update wiki page issue status tags: - Wiki /knowledgebase/{kb_id}/wiki/lint: get: description: Perform a comprehensive health check on the wiki parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_application_service.WikiLintReport' security: - Bearer: [] summary: Run wiki lint tags: - Wiki /knowledgebase/{kb_id}/wiki/move-page: put: consumes: - application/json 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 parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Move target in: body name: move required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageMoveRequest' produces: - application/json 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' security: - Bearer: [] summary: Move a wiki page into a folder tags: - Wiki /knowledgebase/{kb_id}/wiki/pages: get: description: List wiki pages with optional filtering and pagination parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Filter by page type; comma-separated for multiple (e.g. entity,concept) in: query name: page_type type: string - description: Filter by status in: query name: status type: string - description: Full-text search in: query name: query type: string - description: Page number in: query name: page type: integer - description: Page size in: query name: page_size type: integer - description: Sort field in: query name: sort_by type: string - description: Sort order (asc/desc) in: query name: sort_order type: string produces: - application/json 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' security: - Bearer: [] summary: List wiki pages tags: - Wiki post: consumes: - application/json description: Create a new wiki page in the knowledge base parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Wiki page data in: body name: page required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage' produces: - application/json 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' security: - Bearer: [] summary: Create a wiki page tags: - Wiki /knowledgebase/{kb_id}/wiki/pages/{slug}: delete: description: Soft-delete a wiki page by slug parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Page slug in: path name: slug required: true type: string responses: "204": description: No Content "404": description: Not Found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: Delete a wiki page tags: - Wiki get: description: Retrieve a wiki page by its slug parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Page slug in: path name: slug required: true type: string produces: - application/json 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' security: - Bearer: [] summary: Get a wiki page by slug tags: - Wiki put: consumes: - application/json description: |- Partially update a wiki page by slug. Absent fields keep their stored value. When `version` is > 0 it acts as an optimistic-lock guard: a mismatch with the stored version returns 409 together with the current version so the client can reload and re-apply. parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Page slug in: path name: slug required: true type: string - description: Fields to update in: body name: page required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageUpdateRequest' produces: - application/json 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' security: - Bearer: [] summary: Update a wiki page tags: - Wiki /knowledgebase/{kb_id}/wiki/rebuild-links: post: description: Re-parse all pages and rebuild bidirectional link references parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string responses: "200": description: OK schema: additionalProperties: type: string type: object security: - Bearer: [] summary: Rebuild wiki links tags: - Wiki /knowledgebase/{kb_id}/wiki/revert: post: consumes: - application/json description: |- Rolls the page (slug in the body, like move-page) back to the content of the given stored revision. Applied as a regular edit: the pre-revert state is snapshotted and the version advances. parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Revert target in: body name: revert required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPageRevertRequest' produces: - application/json 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' security: - Bearer: [] summary: Revert a wiki page to an earlier revision tags: - Wiki /knowledgebase/{kb_id}/wiki/revisions/{slug}: get: description: |- Returns the stored historical snapshots for a page, newest first (content omitted), plus the current version. Passing `version` returns that single snapshot with full content. parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Page slug in: path name: slug required: true type: string - description: Return this single revision with content in: query name: version type: integer - description: Page size (default 50, max 200) in: query name: limit type: integer - description: Offset into the newest-first list in: query name: offset type: integer produces: - application/json 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' security: - Bearer: [] summary: List wiki page revisions tags: - Wiki /knowledgebase/{kb_id}/wiki/search: get: description: Full-text search over wiki pages parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string - description: Search query in: query name: q required: true type: string - description: Max results (default 10) in: query name: limit type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiPage' type: array security: - Bearer: [] summary: Search wiki pages tags: - Wiki /knowledgebase/{kb_id}/wiki/stats: get: description: Returns aggregate statistics about the wiki parameters: - description: Knowledge base ID in: path name: kb_id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WikiStats' security: - Bearer: [] summary: Get wiki statistics tags: - Wiki /mcp-services: get: consumes: - application/json description: 获取当前空间的所有MCP服务 produces: - application/json responses: "200": description: MCP服务列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取MCP服务列表 tags: - MCP服务 post: consumes: - application/json description: 创建新的MCP服务配置 parameters: - description: MCP服务配置 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.MCPService' produces: - application/json responses: "200": description: 创建的MCP服务 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 创建MCP服务 tags: - MCP服务 /mcp-services/{id}: delete: consumes: - application/json description: 删除指定的MCP服务 parameters: - description: MCP服务ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除MCP服务 tags: - MCP服务 get: consumes: - application/json description: 根据ID获取MCP服务详情 parameters: - description: MCP服务ID in: path name: id required: true type: string produces: - application/json responses: "200": description: MCP服务详情 schema: additionalProperties: true type: object "404": description: 服务不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取MCP服务详情 tags: - MCP服务 put: consumes: - application/json description: 更新MCP服务配置 parameters: - description: MCP服务ID in: path name: id required: true type: string - description: 更新字段 in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: 更新后的MCP服务 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新MCP服务 tags: - MCP服务 /mcp-services/{id}/credentials: put: consumes: - application/json description: 为指定字段写入新凭据;省略的字段保留原值;空字符串视为 no-op(如需删除请用 DELETE) parameters: - description: MCP 服务 ID in: path name: id required: true type: string - description: '{api_key?: string, token?: string}' in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: 写入后的凭据状态 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 服务不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 设置 MCP 服务凭据 tags: - MCP服务 /mcp-services/{id}/credentials/{field}: delete: description: 删除指定字段的存储凭据;删除已为空的字段是幂等的 parameters: - description: MCP 服务 ID in: path name: id required: true type: string - description: 字段名(api_key | token) in: path name: field required: true type: string produces: - application/json 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' security: - Bearer: [] - ApiKeyAuth: [] summary: 移除 MCP 服务的单个凭据字段 tags: - MCP服务 /mcp-services/{id}/oauth/authorize-url: post: consumes: - application/json description: 对使用 OAuth 的 MCP 服务执行发现与动态客户端注册,返回浏览器应跳转的授权地址(当前用户维度) parameters: - description: MCP 服务 ID in: path name: id required: true type: string - description: '{redirect_uri: string, frontend_redirect?: string}' in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: '{authorization_url: string, authorization_attempt: string}' schema: additionalProperties: true type: object "400": description: Bad Request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 发起 MCP OAuth 授权 tags: - MCP服务 /mcp-services/{id}/oauth/status: get: description: 返回当前用户的 OAuth Token 生命周期状态;传 authorization_attempt 时只检查本次授权流程 parameters: - description: MCP 服务 ID in: path name: id required: true type: string - description: 本次授权尝试 ID;传入后不会接受历史 Token in: query name: authorization_attempt type: string produces: - application/json responses: "200": description: '{authorized: bool, state: string, refresh_available: bool, expires_at?: string}' schema: additionalProperties: true type: object security: - Bearer: [] summary: 查询 MCP OAuth 授权状态 tags: - MCP服务 /mcp-services/{id}/oauth/token: delete: description: 删除当前用户对指定 MCP 服务的 OAuth 令牌 parameters: - description: MCP 服务 ID in: path name: id required: true type: string produces: - application/json responses: "204": description: No Content security: - Bearer: [] summary: 撤销 MCP OAuth 授权 tags: - MCP服务 /mcp-services/{id}/resources: get: consumes: - application/json description: 获取MCP服务提供的资源列表 parameters: - description: MCP服务ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 资源列表 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取MCP服务资源列表 tags: - MCP服务 /mcp-services/{id}/test: post: consumes: - application/json description: 测试MCP服务是否可以正常连接 parameters: - description: MCP服务ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 测试结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 测试MCP服务连接 tags: - MCP服务 /mcp-services/{id}/tool-approvals/{tool_name}: put: consumes: - application/json description: 为指定 MCP 服务下的某个工具设置/更新审批要求 parameters: - description: MCP 服务 ID in: path name: id required: true type: string - description: 工具名 in: path name: tool_name required: true type: string - description: '{require_approval: bool}' in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: 更新结果 schema: additionalProperties: true type: object "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' security: - Bearer: [] - ApiKeyAuth: [] summary: 设置 MCP 工具人工审批策略 tags: - MCP服务 /mcp-services/{id}/tools: get: consumes: - application/json description: 获取MCP服务提供的工具列表 parameters: - description: MCP服务ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 工具列表 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取MCP服务工具列表 tags: - MCP服务 /mcp-services/oauth/callback: get: description: 接收授权服务器回调并完成 code 交换,随后重定向回前端 parameters: - description: 授权码 in: query name: code type: string - description: 状态参数 in: query name: state type: string - description: 授权错误码 in: query name: error type: string responses: "302": description: Found summary: MCP OAuth 回调 tags: - MCP服务 /me/env-vars: get: 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 responses: "200": description: One group per sandbox config schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - Bearer: [] summary: List my environment variables tags: - Me /me/env-vars/sandbox: delete: consumes: - application/json description: Remove the caller's own value for one variable on a sandbox config. parameters: - description: Sandbox config and variable name in: body name: request required: true schema: $ref: '#/definitions/internal_handler.meEnvVarRequest' produces: - application/json responses: "200": description: Deleted schema: additionalProperties: true type: object "404": description: Not set schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: Delete one of my sandbox environment variables tags: - Me put: consumes: - application/json 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. parameters: - description: Sandbox config, variable name and value in: body name: request required: true schema: $ref: '#/definitions/internal_handler.meEnvVarRequest' produces: - application/json responses: "200": description: Stored schema: additionalProperties: true type: object "400": description: Invalid request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: Set one of my sandbox environment variables tags: - Me /me/env-vars/skill: delete: consumes: - application/json description: Remove the caller's own value. The workspace-wide value, if there is one, applies again afterwards. parameters: - description: Skill and variable name in: body name: request required: true schema: $ref: '#/definitions/internal_handler.meEnvVarRequest' produces: - application/json responses: "200": description: Deleted schema: additionalProperties: true type: object "404": description: Not set schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: Delete one of my skill credentials tags: - Me put: consumes: - application/json 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. parameters: - description: Skill, variable name and value in: body name: request required: true schema: $ref: '#/definitions/internal_handler.meEnvVarRequest' produces: - application/json responses: "200": description: Stored schema: additionalProperties: true type: object "400": description: Invalid request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: Set one of my skill credentials tags: - Me /me/invitations: get: description: 返回当前登录用户的待接受邀请(默认仅 pending),用于头像入口和 /invitations 收件箱页。 parameters: - description: 是否包含已处理 / 已过期等终止态行(默认 false) in: query name: include_terminal type: boolean produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 列出我的待接受邀请 tags: - 我的邀请 /me/invitations/{inv_id}/accept: post: description: 当前登录用户接受一条 pending 邀请;服务端会同时写入 tenant_members 行。 parameters: - description: 邀请 ID in: path name: inv_id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 接受邀请 tags: - 我的邀请 /me/invitations/{inv_id}/decline: post: description: 当前登录用户拒绝一条 pending 邀请;不创建 tenant_members 行。 parameters: - description: 邀请 ID in: path name: inv_id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 拒绝邀请 tags: - 我的邀请 /me/invitations/accept-by-token: post: consumes: - application/json description: 已登录用户用共享邀请链接 token 加入空间,不创建新账号;对已是成员的用户幂等。 parameters: - description: 邀请 token in: body name: request required: true schema: $ref: '#/definitions/internal_handler.acceptInvitationByTokenRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "410": description: 链接无效或已撤销 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 通过共享链接加入空间 tags: - 我的邀请 /me/invitations/pending-count: get: description: 轻量级 endpoint,返回当前登录用户的 pending 邀请数,用于头像旁的角标轮询。 produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 获取我的待处理邀请数 tags: - 我的邀请 /memory/consolidate: post: description: 合并意思接近的条目、归档到期事项,不等待每日后台整理 produces: - application/json responses: "200": description: 整理结果 schema: additionalProperties: true type: object security: - Bearer: [] summary: 立刻整理我的记忆 tags: - 长期记忆 /memory/documents: get: description: 返回当前用户回答里反复引用的文档,次数未达习惯门槛的不展示 parameters: - default: 50 description: 每页条数 in: query name: limit type: integer - description: 偏移量 in: query name: offset type: integer produces: - application/json responses: "200": description: 文档列表 schema: additionalProperties: true type: object security: - Bearer: [] summary: 列出常用资料 tags: - 长期记忆 /memory/documents/{id}: delete: description: 删除一条文档亲和度计数,之后检索不再因为这份文档而加权 parameters: - description: 亲和度 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object security: - Bearer: [] summary: 停止用某份文档做个性化检索 tags: - 长期记忆 /memory/export: get: description: 以 JSON 导出当前用户的全部记忆 produces: - application/json responses: "200": description: 记忆导出 schema: additionalProperties: true type: object security: - Bearer: [] summary: 导出我的记忆 tags: - 长期记忆 /memory/items: delete: description: 永久删除当前用户的全部记忆 produces: - application/json responses: "200": description: 清空成功 schema: additionalProperties: true type: object security: - Bearer: [] summary: 清空我的记忆 tags: - 长期记忆 get: description: 分页返回当前用户的记忆条目,可按状态过滤 parameters: - description: 状态过滤 enum: - active - superseded - archived - pending in: query name: status type: string - default: 50 description: 每页条数 in: query name: limit type: integer - description: 偏移量 in: query name: offset type: integer produces: - application/json responses: "200": description: 记忆列表 schema: additionalProperties: true type: object security: - Bearer: [] summary: 列出我的记忆 tags: - 长期记忆 post: consumes: - application/json description: 手动添加一条长期记忆 parameters: - description: 记忆内容 in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: 新增的记忆 schema: additionalProperties: true type: object security: - Bearer: [] summary: 新增一条记忆 tags: - 长期记忆 /memory/items/{id}: delete: description: 永久删除一条记忆 parameters: - description: 记忆ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object security: - Bearer: [] summary: 删除一条记忆 tags: - 长期记忆 put: consumes: - application/json description: 修改记忆内容与重要度,修改后该条记忆不会被后台抽取覆盖 parameters: - description: 记忆ID in: path name: id required: true type: string - description: 记忆内容 in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: 更新后的记忆 schema: additionalProperties: true type: object security: - Bearer: [] summary: 修改一条记忆 tags: - 长期记忆 /memory/items/{id}/confirm: post: description: 接受系统推断的记忆,使其开始生效 parameters: - description: 记忆 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 确认成功 schema: additionalProperties: true type: object security: - Bearer: [] summary: 确认一条推断出的记忆 tags: - 长期记忆 /memory/items/{id}/reject: post: description: 拒绝系统推断的记忆,并记住这次拒绝 parameters: - description: 记忆 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 否决成功 schema: additionalProperties: true type: object security: - Bearer: [] summary: 否决一条推断出的记忆 tags: - 长期记忆 /memory/settings: get: description: 返回合并后的记忆开关状态(空间级 + 个人级)与记忆条数 produces: - application/json responses: "200": description: 记忆设置 schema: additionalProperties: true type: object security: - Bearer: [] summary: 获取我的记忆设置 tags: - 长期记忆 put: consumes: - application/json description: 开启或关闭当前用户自己的长期记忆 parameters: - description: 设置 in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: 更新后的设置 schema: additionalProperties: true type: object security: - Bearer: [] summary: 更新我的记忆设置 tags: - 长期记忆 /memory/topics: get: description: 返回已计数、尚未提升为长期关注的主题,以及距离阈值还差几次 parameters: - default: 50 description: 每页条数 in: query name: limit type: integer - description: 偏移量 in: query name: offset type: integer produces: - application/json responses: "200": description: 主题列表 schema: additionalProperties: true type: object security: - Bearer: [] summary: 列出正在观察的主题 tags: - 长期记忆 /memory/topics/{id}: delete: description: 删除尚未提升的主题计数,并记住这次拒绝,之后不会再自动记为长期关注 parameters: - description: 主题 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object security: - Bearer: [] summary: 停止跟踪一个主题 tags: - 长期记忆 /memory/topics/{id}/promote: post: description: 不等待剩余次数,把正在观察的主题提升为一条长期关注记忆 parameters: - description: 主题 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 新增的记忆 schema: additionalProperties: true type: object security: - Bearer: [] summary: 立即记为长期关注 tags: - 长期记忆 /messages/{session_id}/{id}: delete: consumes: - application/json description: 从会话中删除指定消息 parameters: - description: 会话ID in: path name: session_id required: true type: string - description: 消息ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除消息 tags: - 消息 /messages/{session_id}/load: get: consumes: - application/json description: 加载会话的消息历史,支持分页和时间筛选 parameters: - description: 会话ID in: path name: session_id required: true type: string - default: 20 description: 返回数量 in: query name: limit type: integer - description: 在此时间之前的消息(RFC3339Nano格式) in: query name: before_time type: string - default: handle description: 文件引用形式,public 返回可加载直链 enum: - handle - public in: query name: resource_urls type: string produces: - application/json responses: "200": description: 消息列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 加载消息历史 tags: - 消息 /messages/chat-history-stats: get: consumes: - application/json description: 获取聊天历史知识库的统计信息(已索引消息数、知识库大小等) produces: - application/json responses: "200": description: 统计信息 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取聊天历史知识库统计 tags: - 消息 /messages/search: post: consumes: - application/json description: 通过关键词和/或向量相似度搜索历史对话记录,支持关键词、向量、混合三种模式 parameters: - description: 搜索请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.SearchMessagesRequest' produces: - application/json responses: "200": description: 搜索结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 搜索历史对话 tags: - 消息 /models: get: consumes: - application/json description: 获取当前空间的所有模型 produces: - application/json responses: "200": description: 模型列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取模型列表 tags: - 模型管理 post: consumes: - application/json description: 创建新的模型配置 parameters: - description: 模型信息 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.CreateModelRequest' produces: - application/json responses: "201": description: 创建的模型 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 创建模型 tags: - 模型管理 /models/{id}: delete: consumes: - application/json description: 删除指定的模型 parameters: - description: 模型ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 模型仍被知识库、智能体或长期记忆引用 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 模型不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除模型 tags: - 模型管理 get: consumes: - application/json description: 根据ID获取模型详情 parameters: - description: 模型ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 模型详情 schema: additionalProperties: true type: object "404": description: 模型不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取模型详情 tags: - 模型管理 put: consumes: - application/json description: 更新模型配置信息 parameters: - description: 模型ID in: path name: id required: true type: string - description: 更新信息 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.UpdateModelRequest' produces: - application/json responses: "200": description: 更新后的模型 schema: additionalProperties: true type: object "404": description: 模型不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新模型 tags: - 模型管理 /models/providers: get: consumes: - application/json description: 根据模型类型获取支持的厂商列表及配置信息 parameters: - description: 模型类型 (chat, embedding, rerank, vllm) in: query name: model_type type: string produces: - application/json responses: "200": description: 厂商列表 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取模型厂商列表 tags: - 模型管理 /models/weknoracloud/status: get: description: 检查当前空间的 WeKnoraCloud 凭证是否完好;needs_reinit=true 表示需要重新保存 produces: - application/json responses: "200": description: 凭证状态 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 检查 WeKnoraCloud 凭证状态 tags: - WeKnoraCloud /organizations: get: description: 获取当前空间所属的所有组织,并附带各空间内知识库/智能体数量 produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ListOrganizationsResponse' security: - Bearer: [] summary: 获取我的组织列表 tags: - 组织管理 post: consumes: - application/json description: 创建新的组织,创建者自动成为管理员 parameters: - description: 组织信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.CreateOrganizationRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object "400": description: Bad Request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 创建组织 tags: - 组织管理 /organizations/{id}: delete: description: 删除组织(仅组织创建者可操作) parameters: - description: 组织ID in: path name: id required: true type: string responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 删除组织 tags: - 组织管理 get: description: 根据ID获取组织详情 parameters: - description: 组织ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "404": description: Not Found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 获取组织详情 tags: - 组织管理 put: consumes: - application/json description: 更新组织信息(需要管理员权限) parameters: - description: 组织ID in: path name: id required: true type: string - description: 更新信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.UpdateOrganizationRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 更新组织 tags: - 组织管理 /organizations/{id}/agent-shares: get: description: 返回所有被共享到指定组织的智能体(含我的有效权限) parameters: - description: 组织 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 智能体共享列表 + total schema: additionalProperties: true type: object "403": description: 非组织成员 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取共享到本组织的智能体 tags: - 组织 /organizations/{id}/invite: post: consumes: - application/json description: 管理员直接添加用户为组织成员 parameters: - description: 组织ID in: path name: id required: true type: string - description: 邀请信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.InviteMemberRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "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' security: - Bearer: [] summary: 邀请成员 tags: - 组织管理 /organizations/{id}/invite-code: post: description: 生成新的组织邀请码(需要管理员权限) parameters: - description: 组织ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 生成邀请码 tags: - 组织管理 /organizations/{id}/join-requests: get: description: 获取组织的待审核加入申请(仅管理员) parameters: - description: 组织ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 获取待审核加入申请列表 tags: - 组织管理 /organizations/{id}/join-requests/{request_id}/review: put: consumes: - application/json description: 通过或拒绝加入申请(仅管理员) parameters: - description: 组织ID in: path name: id required: true type: string - description: 申请ID in: path name: request_id required: true type: string - description: 审核结果 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ReviewJoinRequestRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 审核加入申请 tags: - 组织管理 /organizations/{id}/leave: post: description: 退出指定组织 parameters: - description: 组织ID in: path name: id required: true type: string responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 退出组织 tags: - 组织管理 /organizations/{id}/members: get: description: 获取组织的所有成员(按空间) parameters: - description: 组织ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ListMembersResponse' security: - Bearer: [] summary: 获取组织成员列表 tags: - 组织管理 /organizations/{id}/members/{tenant_id}: delete: description: 从组织中移除成员空间(需要管理员权限) parameters: - description: 组织ID in: path name: id required: true type: string - description: 成员空间ID in: path name: tenant_id required: true type: string responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 移除成员 tags: - 组织管理 put: consumes: - application/json description: 更新组织成员(空间)的角色(需要管理员权限) parameters: - description: 组织ID in: path name: id required: true type: string - description: 成员空间ID in: path name: tenant_id required: true type: string - description: 角色信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.UpdateMemberRoleRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 更新成员角色 tags: - 组织管理 /organizations/{id}/request-upgrade: post: consumes: - application/json description: 现有成员申请更高权限 parameters: - description: 组织ID in: path name: id required: true type: string - description: 申请信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.RequestRoleUpgradeRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 申请权限升级 tags: - 组织管理 /organizations/{id}/search-tenants: get: description: 按空间名搜索可邀请的空间(排除已加入的空间)用于邀请加入组织;按空间去重 parameters: - description: 组织ID in: path name: id required: true type: string - description: 搜索关键词(空间名) in: query name: q required: true type: string - default: 10 description: 返回数量限制 in: query name: limit type: integer produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 搜索可邀请的空间 tags: - 组织管理 /organizations/{id}/search-users: get: deprecated: true responses: {} /organizations/{id}/shared-agents: get: description: 获取指定空间下所有共享智能体,包含他人共享的与我共享的,用于列表页空间视角 parameters: - description: 组织ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 获取空间内全部智能体(含我共享的) tags: - 组织管理 /organizations/{id}/shared-knowledge-bases: get: description: 获取指定空间下所有共享知识库,包含直接共享的与通过共享智能体可见的,用于列表页空间视角 parameters: - description: 组织ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 获取空间内全部知识库(含我共享的、含智能体携带的) tags: - 组织管理 /organizations/{id}/shares: get: description: 获取共享到指定组织的所有知识库 parameters: - description: 组织ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.ListSharesResponse' security: - Bearer: [] summary: 获取组织的共享知识库列表 tags: - 组织管理 /organizations/join: post: consumes: - application/json description: 使用邀请码加入组织 parameters: - description: 邀请码 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.JoinOrganizationRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "404": description: Not Found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 通过邀请码加入组织 tags: - 组织管理 /organizations/join-by-id: post: consumes: - application/json description: 加入已开放可被搜索的空间,无需邀请码 parameters: - description: 空间 ID in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.JoinByOrganizationIDRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "403": description: Forbidden schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 通过空间 ID 加入(可搜索空间) tags: - 组织管理 /organizations/join-request: post: consumes: - application/json description: 对需要审核的组织提交加入申请 parameters: - description: 申请信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SubmitJoinRequestRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 提交加入申请 tags: - 组织管理 /organizations/preview/{code}: get: description: 通过邀请码获取组织基本信息(不加入) parameters: - description: 邀请码 in: path name: code required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "404": description: Not Found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 通过邀请码预览组织 tags: - 组织管理 /organizations/search: get: description: 搜索已开放可被搜索的空间,用于发现并加入 parameters: - description: 搜索关键词(空间名称或描述) in: query name: q type: string - default: 20 description: 返回数量限制 in: query name: limit type: integer produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 搜索可加入的空间 tags: - 组织管理 /sandbox-configs: get: description: List workspace sandbox backend configs with credentials masked. produces: - application/json responses: "200": description: Sandbox configs and defaults schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: List sandbox configs tags: - SandboxConfig post: consumes: - application/json description: Create a named workspace sandbox backend config. Credentials are masked in the response. parameters: - description: Sandbox backend config in: body name: request required: true schema: $ref: '#/definitions/internal_handler.sandboxConfigRequest' produces: - application/json responses: "201": description: Created sandbox config schema: additionalProperties: true type: object "400": description: Invalid request or validation failure schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Create sandbox config tags: - SandboxConfig /sandbox-configs/{id}: delete: description: Soft-delete a sandbox backend config. force=true only overrides unverifiable provider inventory, never confirmed live sandboxes. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Force delete when inventory is unverifiable in: query name: force type: boolean produces: - application/json responses: "200": description: Deletion success schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "409": description: Live sandboxes or unverifiable inventory schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Delete sandbox config tags: - SandboxConfig get: description: Retrieve a workspace sandbox backend config with credentials masked. parameters: - description: Sandbox config ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Sandbox config schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Sandbox config not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Get sandbox config tags: - SandboxConfig put: consumes: - application/json description: Update a sandbox backend config. Identity-field changes are refused while the config owns live or paused sandboxes. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Updated sandbox config in: body name: request required: true schema: $ref: '#/definitions/internal_handler.sandboxConfigRequest' produces: - application/json responses: "200": description: Updated sandbox config schema: additionalProperties: true type: object "400": description: Invalid request or validation failure schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Sandbox config not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "409": description: Live sandboxes or unverifiable inventory schema: additionalProperties: true type: object "423": description: Sandbox config is being modified by another request schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Update sandbox config tags: - SandboxConfig /sandbox-configs/{id}/sandboxes: get: description: Return live/paused sandbox inventory and affected agent names for one config. parameters: - description: Sandbox config ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Sandbox inventory schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Inspect sandbox config inventory tags: - SandboxConfig /sandbox-configs/{id}/skills: get: description: List the agent skills installed onto one sandbox config's image. parameters: - description: Sandbox config ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Installed skills schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Sandbox config not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: List installed skills tags: - SandboxConfig post: consumes: - application/json - multipart/form-data description: |- Install a skill onto this sandbox config's image. Send a zip as multipart form field "file", or JSON {"source":"..."} to pull a public skill. source is one of: "@owner/slug" or a slash-free slug (ClawHub), a github.com / gitlab.com / skills.sh / clawhub / skillhub URL, a ClawHub skills-sh catalog page (https://clawhub.ai/skills-sh/owner/repo/slug), a skills-sh:owner/repo/slug locator, or a direct zip/SKILL.md URL. Bare "owner/slug" is rejected as ambiguous. The source must be readable anonymously. The install boots a sandbox and runs for minutes, so the request is only accepted; follow it via the install-events stream. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill bundle (zip) in: formData name: file type: file - description: Install from a registry, git host, or archive URL in: body name: request schema: $ref: '#/definitions/internal_handler.skillSourceRequest' produces: - application/json responses: "202": description: Install accepted schema: additionalProperties: true type: object "400": description: Missing, oversized or invalid bundle or source schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Sandbox config not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Install a skill tags: - SandboxConfig /sandbox-configs/{id}/skills/{skillId}: delete: description: |- Remove a skill from the config's image. The removal rebuilds the image and runs for minutes, so it is only accepted; follow it via the install-events stream. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string produces: - application/json responses: "202": description: Removal accepted schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Skill not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Remove an installed skill tags: - SandboxConfig get: description: Retrieve one installed skill of a sandbox config. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string produces: - application/json responses: "200": description: Installed skill schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Skill not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Get an installed skill tags: - SandboxConfig patch: consumes: - application/json 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. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string - description: Fields to update in: body name: request required: true schema: $ref: '#/definitions/internal_handler.skillPatchRequest' produces: - application/json responses: "200": description: Updated skill schema: additionalProperties: true type: object "400": description: Invalid request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Skill not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Update an installed skill tags: - SandboxConfig /sandbox-configs/{id}/skills/{skillId}/files: get: description: List files in the stored skill bundle without starting a sandbox. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string produces: - application/json responses: "200": description: Skill files schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Skill or files not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: List files of an installed skill tags: - SandboxConfig /sandbox-configs/{id}/skills/{skillId}/files/content: get: description: Read one skill file as UTF-8, a small base64 image, or binary. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string - description: Skill-root-relative file path in: query name: path required: true type: string produces: - application/json responses: "200": description: Skill file schema: additionalProperties: true type: object "400": description: Invalid path schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Skill or file not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Read one file of an installed skill tags: - SandboxConfig /sandbox-configs/{id}/skills/{skillId}/install-events: get: description: |- Server-sent progress for one install or removal. The stream always terminates: with the run's own terminal event, with one derived from the durable status, or with a "detached" frame when it stops following a run that is still going. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string produces: - text/event-stream responses: "200": description: SSE stream of progress events schema: type: string "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Skill not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Follow an install or removal tags: - SandboxConfig /sandbox-configs/{id}/skills/{skillId}/reinstall: post: description: Retry a failed install from the stored archive; does not re-upload. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string produces: - application/json responses: "202": description: Reinstall accepted schema: additionalProperties: true type: object "400": description: The stored archive is gone schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Skill not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Retry a skill install tags: - SandboxConfig /sandbox-configs/{id}/skills/{skillId}/stop: post: 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. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string produces: - application/json responses: "200": description: Stopped skill schema: additionalProperties: true type: object "400": description: Skill is not installing schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Skill not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Stop a skill install tags: - SandboxConfig /sandbox-configs/{id}/skills/{skillId}/transcript: get: description: |- Server-sent replay of everything the installer agent did — the prompt it was given, its thinking, the commands it ran and their output — followed live while the install is still running. Frames are the same shape the chat stream uses, so a console renders an install with the components it renders a chat turn with. 404 once the event log has expired; the durable message history is the fallback. parameters: - description: Sandbox config ID in: path name: id required: true type: string - description: Skill ID in: path name: skillId required: true type: string produces: - text/event-stream 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: additionalProperties: true type: object "404": description: Skill or transcript not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Follow an install's agent transcript tags: - SandboxConfig /sessions: get: consumes: - application/json description: 获取当前空间的会话列表,支持分页、关键字搜索、按来源/Agent 筛选 parameters: - description: 页码 in: query name: page type: integer - description: 每页数量 in: query name: page_size type: integer - description: 标题模糊搜索 in: query name: keyword type: string - description: 来源过滤:web / embed / api / feishu / wechat / slack / ...(api、embed、IM 渠道需 Admin+) in: query name: source type: string - description: 按 Agent 过滤(仅对 IM 会话生效) in: query name: agent_id type: string produces: - application/json responses: "200": description: 会话列表 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取会话列表 tags: - 会话 post: consumes: - application/json description: 创建新的对话会话 parameters: - description: 会话创建请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler_session.CreateSessionRequest' produces: - application/json responses: "201": description: 创建的会话 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 创建会话 tags: - 会话 /sessions/{id}: delete: consumes: - application/json description: 删除指定的会话 parameters: - description: 会话ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "404": description: 会话不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 删除会话 tags: - 会话 get: consumes: - application/json description: 根据ID获取会话详情 parameters: - description: 会话ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 会话详情 schema: additionalProperties: true type: object "404": description: 会话不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取会话详情 tags: - 会话 put: consumes: - application/json description: 更新会话属性 parameters: - description: 会话ID in: path name: id required: true type: string - description: 会话信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.Session' produces: - application/json responses: "200": description: 更新后的会话 schema: additionalProperties: true type: object "404": description: 会话不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新会话 tags: - 会话 /sessions/{id}/messages: delete: consumes: - application/json description: 删除会话中的所有消息,同时清除 LLM 上下文和聊天历史知识库条目。会话本身保留。 parameters: - description: 会话ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 清空成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 会话不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 清空会话消息 tags: - 会话 /sessions/{id}/pin: delete: description: 取消指定会话的置顶 parameters: - description: 会话ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 取消置顶成功 schema: additionalProperties: true type: object "404": description: 会话不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 取消置顶会话 tags: - 会话 /sessions/{session_id}/artifacts: get: description: 返回本会话中所有 assistant 消息产生的技能产物元数据(不含 URL) parameters: - description: 会话ID in: path name: session_id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "404": description: Not Found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 列出会话生成的产物文件 tags: - 会话 /sessions/{session_id}/messages/{message_id}/artifacts: get: responses: {} /sessions/{session_id}/messages/{message_id}/artifacts/{index}/download: get: responses: {} /sessions/{session_id}/messages/{message_id}/suggestions: get: parameters: - description: 会话 ID in: path name: session_id required: true type: string - description: 助手消息 ID in: path name: message_id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取回答后推荐问题 tags: - 会话 post: consumes: - application/json description: 对已完成的助手消息异步生成或重新生成推荐问题;相同配置快照会复用持久化结果 parameters: - description: 会话 ID in: path name: session_id required: true type: string - description: 助手消息 ID in: path name: message_id required: true type: string - description: 生成选项 in: body name: request schema: $ref: '#/definitions/internal_handler.EnsureMessageSuggestionsRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "202": description: Accepted schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 确保生成回答后推荐问题 tags: - 会话 /sessions/{session_id}/pin: post: description: 将指定会话置顶(用户维度) parameters: - description: 会话ID in: path name: session_id required: true type: string produces: - application/json responses: "200": description: 置顶成功 schema: additionalProperties: true type: object "404": description: 会话不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 置顶会话 tags: - 会话 /sessions/{session_id}/stop: post: consumes: - application/json description: 停止当前正在进行的生成任务 parameters: - description: 会话ID in: path name: session_id required: true type: string - description: 停止请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler_session.StopSessionRequest' produces: - application/json responses: "200": description: 停止成功 schema: additionalProperties: true type: object "404": description: 会话或消息不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 停止生成 tags: - 问答 /sessions/{session_id}/suggestion-events: post: consumes: - application/json description: 记录曝光、点击或关闭事件 parameters: - description: 会话 ID in: path name: session_id required: true type: string - description: 事件 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.SuggestionEventRequest' responses: "204": description: No Content security: - Bearer: [] - ApiKeyAuth: [] summary: 上报推荐问题事件 tags: - 会话 /sessions/{session_id}/title: post: consumes: - application/json description: 根据消息内容自动生成会话标题 parameters: - description: 会话ID in: path name: session_id required: true type: string - description: 生成请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler_session.GenerateTitleRequest' produces: - application/json responses: "200": description: 生成的标题 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 生成会话标题 tags: - 会话 /sessions/batch: delete: consumes: - application/json description: 根据ID列表批量删除对话会话,或设置 delete_all=true 删除当前空间的所有会话 parameters: - description: 批量删除请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler_session.batchDeleteRequest' produces: - application/json responses: "200": description: 删除结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 批量删除会话 tags: - 会话 /sessions/continue-stream/{session_id}: get: consumes: - application/json description: 继续获取正在进行的流式响应 parameters: - description: 会话ID in: path name: session_id required: true type: string - description: 消息ID in: query name: message_id required: true type: string - default: handle description: 文件引用形式,public 返回可加载直链 enum: - handle - public in: query name: resource_urls type: string produces: - text/event-stream responses: "200": description: 流式响应 schema: additionalProperties: true type: object "404": description: 会话或消息不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 继续流式响应 tags: - 问答 /shared-agents: get: description: 返回所有共享给当前用户所在组织的智能体 produces: - application/json responses: "200": description: 智能体列表 + total schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取我可访问的共享智能体 tags: - 组织 /shared-knowledge-bases: get: description: 获取通过组织共享给当前用户的所有知识库 produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 获取共享给我的知识库列表 tags: - 知识库共享 /skills: get: consumes: - application/json description: 返回指定沙箱配置镜像内、智能体实际能调用的已安装技能(ready 且启用)。不传 sandbox_config_id 时列表为空。 parameters: - description: Sandbox config ID in: query name: sandbox_config_id type: string produces: - application/json responses: "200": description: Skills列表 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取当前沙箱配置上可执行的 Skills tags: - Skills /skills/catalog: get: description: Returns every skill definition in this workspace and which sandbox configs it is installed on. produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: List workspace skills tags: - Skills post: consumes: - application/json - multipart/form-data description: Records a skill without installing it. Send a zip as multipart field "file", or JSON {"source":"..."}. produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object summary: Add a skill to the workspace catalog tags: - Skills /skills/catalog/{id}: delete: description: Refused while any sandbox still has an installation of this skill. parameters: - description: Catalog skill ID in: path name: id required: true type: string responses: "200": description: OK schema: additionalProperties: true type: object summary: Delete a catalog skill tags: - Skills /skills/catalog/{id}/files: get: description: Lists the stored catalog bundle. Files belong to the skill definition, not a sandbox install. parameters: - description: Catalog skill ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object summary: List files of a catalog skill tags: - Skills /skills/catalog/{id}/files/content: get: parameters: - description: Catalog skill ID in: path name: id required: true type: string - description: Skill-root-relative file path in: query name: path required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object summary: Read one file of a catalog skill tags: - Skills /skills/catalog/{id}/install: post: consumes: - application/json description: Runs the existing snapshot install onto each named sandbox config. parameters: - description: Catalog skill ID in: path name: id required: true type: string produces: - application/json responses: "202": description: Accepted schema: additionalProperties: true type: object summary: Install a catalog skill onto sandboxes tags: - Skills /storage-backends: get: 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 responses: "200": description: List of storage backends and default_storage_backend_id schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: List storage backends tags: - StorageBackend post: consumes: - application/json 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. parameters: - description: Storage backend configuration in: body name: request required: true schema: $ref: '#/definitions/internal_handler.storageBackendRequest' produces: - application/json responses: "201": description: Created storage backend schema: additionalProperties: true type: object "400": description: Invalid request, validation, or connectivity test failure schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "409": description: A storage backend with this name already exists schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Create storage backend tags: - StorageBackend /storage-backends/{id}: delete: 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. parameters: - description: Storage backend ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Deletion success schema: additionalProperties: true type: object "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: additionalProperties: true type: object "404": description: Storage backend not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Delete storage backend tags: - StorageBackend get: description: Retrieve a single storage backend by ID for the current workspace. Credentials are masked. parameters: - description: Storage backend ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Storage backend details schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Storage backend not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Get storage backend tags: - StorageBackend put: consumes: - application/json 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. parameters: - description: Storage backend ID in: path name: id required: true type: string - description: Updated storage backend fields in: body name: request required: true schema: $ref: '#/definitions/internal_handler.storageBackendRequest' produces: - application/json responses: "200": description: Updated storage backend schema: additionalProperties: true type: object "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: additionalProperties: true type: object "404": description: Storage backend not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Update storage backend tags: - StorageBackend /storage-backends/{id}/default: put: 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. parameters: - description: Storage backend ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Default set successfully schema: additionalProperties: true type: object "400": description: Backend is not active schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Storage backend not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Set default storage backend tags: - StorageBackend /storage-backends/{id}/test: post: 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). parameters: - description: Storage backend ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Connectivity test result (success, error) schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Storage backend not found schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Test storage backend by ID tags: - StorageBackend /storage-backends/test: post: consumes: - application/json 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). parameters: - description: Storage backend configuration to test in: body name: request required: true schema: $ref: '#/definitions/internal_handler.storageBackendRequest' produces: - application/json responses: "200": description: Connectivity test result (success, error) schema: additionalProperties: true type: object "400": description: Invalid request or validation error schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Test storage backend with raw config tags: - StorageBackend /storage-backends/types: get: 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 responses: "200": description: List of allowed storage provider types schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: List allowed storage provider types tags: - StorageBackend /system/admin/api-keys: get: description: Lists non-workspace API keys. Full tokens are always masked. Human SystemAdmin only. produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: List platform API keys tags: - System Admin post: consumes: - application/json description: Creates a capability-scoped key that may target any workspace through X-Tenant-ID. The plaintext token is returned once. Human SystemAdmin only. parameters: - description: Platform API key in: body name: request required: true schema: $ref: '#/definitions/internal_handler.platformAPIKeyCreateRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object security: - Bearer: [] summary: Create a platform API key tags: - System Admin /system/admin/api-keys/{key_id}: delete: description: Immediately revokes a platform API key. Human SystemAdmin only. parameters: - description: API key ID in: path name: key_id required: true type: integer produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: Revoke a platform API key tags: - System Admin /system/admin/audit-log: get: description: 返回 system-scope(tenant_id=0)的审计事件,覆盖 system.setting_changed / system.admin_promoted / system.admin_revoked 等 SystemAdmin 操作。按 id 倒序的游标分页。 parameters: - description: 游标:返回 id 小于此值的记录(默认从最新开始) in: query name: after_id type: integer - description: 页大小,1-100,默认 50 in: query name: limit type: integer - description: 按 action 精确过滤(如 system.setting_changed) in: query name: action type: string - description: 按 outcome 精确过滤(success / denied) in: query name: outcome type: string - description: 按 actor_user_id 精确过滤 in: query name: actor type: string produces: - application/json 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' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取平台审计日志 tags: - 审计日志 /system/admin/list: get: description: |- Retrieve a paginated list of users with system administrator privileges (SystemAdmin only). Supports `offset` (default 0) and `limit` (default 50, max 200) query parameters. Walks the partial-friendly idx_users_is_system_admin index. parameters: - default: 0 description: Page offset in: query name: offset type: integer - default: 50 description: Page size (max 200) in: query name: limit type: integer produces: - application/json responses: "200": description: System admins retrieved successfully schema: $ref: '#/definitions/internal_handler.ListSystemAdminsResponse' "403": description: 'Forbidden: not a system admin' schema: additionalProperties: true type: object summary: List all system administrators tags: - System Admin /system/admin/promote: post: consumes: - application/json description: |- Grant system administrator privileges to a user (SystemAdmin only). Idempotent: re-promoting an existing system admin returns 200 with no DB write. Identify the user by email (preferred for human operators) or user_id (UUID, for API clients). parameters: - description: User promotion request in: body name: request required: true schema: $ref: '#/definitions/internal_handler.PromoteUserToSystemAdminRequest' produces: - application/json responses: "200": description: User promoted successfully schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.UserInfo' "400": description: Bad request schema: additionalProperties: true type: object "403": description: 'Forbidden: not a system admin' schema: additionalProperties: true type: object "404": description: User not found schema: additionalProperties: true type: object summary: Promote a user to system administrator tags: - System Admin /system/admin/revoke: post: consumes: - application/json description: |- Remove system administrator privileges from a user (SystemAdmin only). Two safety guards: the caller cannot revoke their own privileges, and revoking the last remaining system admin is rejected — both prevent a SystemAdmin from accidentally locking the platform out of system-level administration. Idempotent on already-non-admin users. parameters: - description: User revocation request in: body name: request required: true schema: $ref: '#/definitions/internal_handler.RevokeSystemAdminRequest' produces: - application/json 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: additionalProperties: true type: object "403": description: 'Forbidden: not a system admin' schema: additionalProperties: true type: object "404": description: User not found schema: additionalProperties: true type: object summary: Revoke system administrator privileges from a user tags: - System Admin /system/admin/runtime/queues: get: description: 返回各 asynq 队列的实时深度(pending/active/scheduled/retry 等)与 worker 并发配置,仅系统管理员可见 produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_handler.RuntimeQueuesResponse' summary: 获取解析任务队列运行时状态 tags: - 系统管理 /system/admin/runtime/queues/{queue}/archived: delete: parameters: - description: Queue name in: path name: queue required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object summary: Purge all archived tasks in a queue tags: - System Admin /system/admin/runtime/queues/{queue}/tasks: get: parameters: - description: Queue name in: path name: queue required: true type: string - description: Task state enum: - pending - active - scheduled - retry - archived - completed in: query name: state required: true type: string - description: Opaque continuation cursor in: query name: cursor type: string - default: 20 description: Page size in: query name: page_size type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_handler.RuntimeTasksResponse' summary: List runtime queue tasks by state tags: - System Admin /system/admin/runtime/queues/{queue}/tasks/{task_id}/actions/{action}: post: parameters: - description: Queue name in: path name: queue required: true type: string - description: Task ID in: path name: task_id required: true type: string - description: Action enum: - cancel - run_now - delete in: path name: action required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: type: boolean type: object summary: Run a safe runtime task action tags: - System Admin /system/admin/settings/{key}: delete: description: |- Removes the DB override for :key so the 3-tier resolver falls back to the environment variable (when configured) or the in-code default. Idempotent — resetting a key that was never persisted returns 200. parameters: - description: Setting key in: path name: key required: true type: string responses: "200": description: Reset acknowledged schema: additionalProperties: true type: object "400": description: Unknown key schema: additionalProperties: true type: object "500": description: DB write failed schema: additionalProperties: true type: object summary: Reset a system setting to ENV / built-in default tags: - System Admin get: description: |- Returns the row matching :key. 404 when the key is unknown to the registry; 200 with the row when known. parameters: - description: Setting key (e.g. file.max_size_mb) in: path name: key required: true type: string produces: - application/json responses: "200": description: the setting row schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.SystemSetting' "400": description: Unknown key schema: additionalProperties: true type: object "404": description: Key registered but DB row absent schema: additionalProperties: true type: object summary: Get a single system setting by key tags: - System Admin put: consumes: - application/json description: |- Persist a new value for :key. Service validates the rawValue against the registry's declared value_type and rejects mismatches with 400. SystemAdmin only. Emits an audit row (action=system.setting_changed) on success. parameters: - description: Setting key in: path name: key required: true type: string - description: New value in: body name: request required: true schema: $ref: '#/definitions/internal_handler.UpdateSystemSettingRequest' produces: - application/json 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: additionalProperties: true type: object "403": description: 'Forbidden: not a system admin' schema: additionalProperties: true type: object summary: Update a system setting value tags: - System Admin /system/admin/tenants/apply-default-storage-quota: post: description: |- Reads the current value of `tenant.default_storage_quota_gb` (3-tier resolver: DB > ENV > default) and writes that many GiB into storage_quota for every row in tenants. Bypasses the per-workspace PUT whitelist, which forbids storage_quota edits by Owners. SystemAdmin only. Idempotent — running twice with the same setting is a no-op. produces: - application/json responses: "200": description: '{ affected: int64, quota_bytes: int64 }' schema: additionalProperties: true type: object "500": description: DB write failed schema: additionalProperties: true type: object summary: Apply the default storage quota to every existing workspace tags: - System Admin /system/admin/users/create: post: consumes: - application/json description: |- Provision a new local user account (SystemAdmin only). When `password` is omitted or null, a cryptographically random password is generated (OIDC-style crypto/rand + base64url) and returned once in the response body. Any provided value, including empty string, is policy-checked. Tenant provisioning follows the shared auth.default_tenant_mode policy. parameters: - description: User creation request in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.AdminCreateUserRequest' produces: - application/json 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: additionalProperties: true type: object "403": description: 'Forbidden: not a system admin' schema: additionalProperties: true type: object "409": description: Email and username refer to conflicting identities schema: additionalProperties: true type: object "500": description: Internal error schema: additionalProperties: true type: object summary: Create a new user (SystemAdmin) tags: - System Admin /system/admin/users/reset-password: post: consumes: - application/json description: |- Replace another user's local password and revoke all of their existing sessions (SystemAdmin only). A system administrator cannot reset their own password through this endpoint; self-service password change still requires the old password. parameters: - description: Password reset request in: body name: request required: true schema: $ref: '#/definitions/internal_handler.ResetUserPasswordRequest' produces: - application/json responses: "200": description: Password reset successfully schema: additionalProperties: true type: object "400": description: Invalid request, weak password, or self reset schema: additionalProperties: true type: object "403": description: 'Forbidden: not a system admin' schema: additionalProperties: true type: object "404": description: User not found schema: additionalProperties: true type: object summary: Reset another user's password tags: - System Admin /system/capabilities: get: description: 返回当前部署版本及实际注册的后端路由所对应的功能能力;仅 supported=false 表示入口应隐藏 produces: - application/json responses: "200": description: 标准 code/msg/data 包装,data 为 DeploymentCapabilitiesData schema: additionalProperties: true type: object summary: 获取部署能力清单 tags: - 系统 /system/docreader/reconnect: post: consumes: - application/json parameters: - description: DocReader 地址 in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: OK summary: 重连文档解析服务 tags: - 系统 /system/info: get: consumes: - application/json description: 获取系统版本、构建信息和引擎配置 produces: - application/json responses: "200": description: 系统信息 schema: $ref: '#/definitions/internal_handler.GetSystemInfoResponse' summary: 获取系统信息 tags: - 系统 /system/parser-engines: get: produces: - application/json responses: "200": description: 解析引擎列表 schema: additionalProperties: true type: object summary: 列出可用的文档解析引擎 tags: - 系统 /system/parser-engines/check: post: consumes: - application/json parameters: - description: 解析引擎配置(与保存接口同结构) in: body name: body required: true schema: type: object produces: - application/json responses: "200": description: OK summary: 使用当前参数检测解析引擎可用性 tags: - 系统 /system/sandbox-check: post: consumes: - application/json description: 使用当前填写的参数测试沙箱后端,不保存配置;deep=true 会执行临时脚本,远端后端还会创建并销毁一个沙箱 parameters: - description: 沙箱配置 in: body name: body required: true schema: $ref: '#/definitions/internal_handler.SandboxCheckRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_handler.SandboxCheckResponse' summary: 测试沙箱连通性 tags: - 系统 /system/storage-engine-check: post: consumes: - application/json description: 使用当前填写的参数测试 MinIO/COS 连通性,不保存配置 parameters: - description: 存储引擎配置 in: body name: body required: true schema: $ref: '#/definitions/internal_handler.StorageCheckRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_handler.StorageCheckResponse' summary: 测试存储引擎连通性 tags: - 系统 /system/storage-engine-status: get: description: 返回 Local、MinIO、COS 各存储引擎的可用状态及说明,供全局设置与知识库选择使用 produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_handler.GetStorageEngineStatusResponse' summary: 获取存储引擎状态 tags: - 系统 /tenants: get: consumes: - application/json description: 获取当前用户可访问的空间列表 produces: - application/json responses: "200": description: 空间列表 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 获取空间列表 tags: - 空间管理 post: consumes: - application/json description: |- 创建新的空间。任意已登录用户均可调用以建立自己的新工作区, 调用方会被自动设为该空间的 Owner。跨空间超管仍可像以前一样 通过本接口创建任意空间。 当 tenant.auto_create_api_key(或 WEKNORA_TENANT_AUTO_CREATE_API_KEY) 开启时,会自动创建一个 full_access API Key,并在响应体的 data.api_key 字段返回其明文 token。 parameters: - description: 空间信息 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.createTenantRequest' produces: - application/json responses: "201": description: 创建的空间(可选含 api_key) schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 创建空间 tags: - 空间管理 /tenants/{id}: delete: consumes: - application/json description: 删除指定的空间 parameters: - description: 空间ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: 删除成功 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 删除空间 tags: - 空间管理 get: consumes: - application/json description: 根据ID获取空间详情 parameters: - description: 空间ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: 空间详情 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "404": description: 空间不存在 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取空间详情 tags: - 空间管理 put: consumes: - application/json description: 更新空间信息 parameters: - description: 空间ID in: path name: id required: true type: integer - description: 空间信息 in: body name: request required: true schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.Tenant' produces: - application/json responses: "200": description: 更新后的空间 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 更新空间 tags: - 空间管理 /tenants/{id}/api-principal-config: get: consumes: - application/json description: 返回 X-API-Key 请求如何映射为终端 Principal 的配置(Owner) parameters: - description: 空间ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: API principal 配置 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 获取空间 API Key 用户身份配置 tags: - 空间管理 put: consumes: - application/json description: 配置 X-API-Key 请求如何映射为终端 Principal(Owner) parameters: - description: 空间ID in: path name: id required: true type: integer - description: API principal 配置 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.apiPrincipalConfigRequest' produces: - application/json responses: "200": description: 更新后的配置 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 更新空间 API Key 用户身份配置 tags: - 空间管理 /tenants/{id}/api-principal-test-token: post: consumes: - application/json description: 使用空间已保存的 HMAC 密钥签发短期外部用户 JWT(Owner) parameters: - description: 空间ID in: path name: id required: true type: integer - description: 测试 Token 参数 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.apiPrincipalTestTokenRequest' produces: - application/json responses: "200": description: 短期 JWT schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 生成 API Playground 测试 JWT tags: - 空间管理 /tenants/{id}/audit-log: get: description: 返回该空间最近的审计事件,按 id 倒序。游标分页:将上次响应的 next_cursor 作为下一次请求的 after_id。 parameters: - description: 空间ID in: path name: id required: true type: string - description: 游标:返回 id 小于此值的记录(默认从最新开始) in: query name: after_id type: integer - description: 页大小,1-100,默认 50 in: query name: limit type: integer - description: 按 action 精确过滤(如 rbac.member_added / rbac.access_denied) in: query name: action type: string - description: 按 outcome 精确过滤(success / denied) in: query name: outcome type: string - description: 按 actor_user_id 精确过滤 in: query name: actor type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/internal_handler.auditLogListResponse' "400": description: Bad Request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取空间审计日志 tags: - 审计日志 /tenants/{id}/invitations: get: description: 按空间列出待接受 / 历史邀请。query include_terminal=true 时附带 accepted/declined/revoked/expired。 parameters: - description: 空间 ID in: path name: id required: true type: string - description: 是否包含终止态行(默认 false) in: query name: include_terminal type: boolean - default: 1 description: 页码(从 1 起) in: query name: page type: integer - default: 20 description: 每页数量 in: query name: page_size type: integer produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 列出空间邀请 tags: - 空间邀请 post: consumes: - application/json description: Owner 通过邮箱邀请已注册用户加入空间。开启 tenant.auto_accept_invitation 后被邀请人立即自动加入(响应为成员结构),否则需在 /me/invitations 接受后成为成员。 parameters: - description: 空间 ID in: path name: id required: true type: string - description: 邀请请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.createInvitationRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object security: - Bearer: [] summary: 发出空间邀请 tags: - 空间邀请 /tenants/{id}/invitations/{inv_id}: delete: description: Owner 取消一条还在 pending 的邀请;已 accepted/declined/revoked/expired 的行不可再撤销。 parameters: - description: 空间 ID in: path name: id required: true type: string - description: 邀请 ID in: path name: inv_id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 撤销待接受邀请 tags: - 空间邀请 /tenants/{id}/invite-links: post: consumes: - application/json description: |- 生成一条多次使用的共享邀请链接:谁拿到链接谁就能注册并加入当前空间。 链接持续有效,直到过期或被撤销。 parameters: - description: 空间 ID in: path name: id required: true type: string - description: 共享链接配置 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.createInviteLinkRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object security: - Bearer: [] summary: 生成共享邀请链接 tags: - 空间邀请 /tenants/{id}/leave: post: description: 调用方主动退出当前空间。等价于以自己的 user_id 调 RemoveMember, parameters: - description: 空间 ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 退出当前空间 tags: - 空间成员 /tenants/{id}/members: get: description: 分页返回当前空间内 active 成员(含每位成员的角色、邮箱、头像);支持 q 按邮箱/用户名筛选 parameters: - description: 空间 ID in: path name: id required: true type: string - description: 按邮箱/用户名模糊筛选 in: query name: q type: string - default: 1 description: 页码(从 1 起) in: query name: page type: integer - default: 20 description: 每页数量(最大 100) in: query name: page_size type: integer produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 列出空间成员 tags: - 空间成员 post: consumes: - application/json parameters: - description: 空间 ID in: path name: id required: true type: string - description: 邀请请求 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.addMemberRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object security: - Bearer: [] summary: 直接添加空间成员(直加路径) tags: - 空间成员 /tenants/{id}/members/{user_id}: delete: description: Owner 将某位成员从当前空间中移除(软删除 tenant_members 行);不能移除最后一位 Owner parameters: - description: 空间 ID in: path name: id required: true type: string - description: 用户 ID in: path name: user_id required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 移除空间成员 tags: - 空间成员 put: consumes: - application/json description: Owner 修改某位成员在当前空间内的角色;不能将最后一位 Owner 降级 parameters: - description: 空间 ID in: path name: id required: true type: string - description: 用户 ID in: path name: user_id required: true type: string - description: 目标角色 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.updateMemberRoleRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object security: - Bearer: [] summary: 修改空间成员角色 tags: - 空间成员 /tenants/all: get: consumes: - application/json description: 获取系统中所有空间(需要跨空间访问权限) produces: - application/json responses: "200": description: 所有空间列表 schema: additionalProperties: true type: object "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] summary: 获取所有空间列表 tags: - 空间管理 /tenants/kv/{key}: get: consumes: - application/json description: 获取空间级别的KV配置(支持web-search-config、prompt-templates、parser-engine-config、storage-engine-config、chat-history-config、retrieval-config) parameters: - description: 配置键名 in: path name: key required: true type: string produces: - application/json responses: "200": description: 配置值 schema: additionalProperties: true type: object "400": description: 不支持的键 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取空间KV配置 tags: - 空间管理 put: consumes: - application/json description: 更新空间级别的KV配置(支持web-search-config、parser-engine-config、storage-engine-config、chat-history-config、retrieval-config) parameters: - description: 配置键名 in: path name: key required: true type: string - description: 配置值 in: body name: request required: true schema: type: object produces: - application/json responses: "200": description: 更新成功 schema: additionalProperties: true type: object "400": description: 不支持的键 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 更新空间KV配置 tags: - 空间管理 /tenants/kv/prompt-templates: get: consumes: - application/json description: 获取系统配置的提示词模板列表 produces: - application/json responses: "200": description: 提示词模板配置 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取提示词模板 tags: - 空间管理 /tenants/kv/web-search-config: get: consumes: - application/json description: 获取空间的网络搜索配置 produces: - application/json responses: "200": description: 网络搜索配置 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 获取空间网络搜索配置 tags: - 空间管理 /tenants/search: get: consumes: - application/json description: 分页搜索空间(需要跨空间访问权限) parameters: - description: 搜索关键词 in: query name: keyword type: string - description: 空间ID筛选 in: query name: tenant_id type: integer - default: 1 description: 页码 in: query name: page type: integer - default: 20 description: 每页数量 in: query name: page_size type: integer produces: - application/json responses: "200": description: 搜索结果 schema: additionalProperties: true type: object "403": description: 权限不足 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: 搜索空间 tags: - 空间管理 /user/favorites: get: description: Lists this user's starred resources in the current workspace for a given type parameters: - description: Resource type (kb | agent) in: query name: type required: true type: string responses: "200": description: OK schema: additionalProperties: true type: object summary: List my favorites tags: - User post: parameters: - description: Type + id in: body name: body required: true schema: $ref: '#/definitions/internal_handler.AddFavoriteRequest' responses: "200": description: OK schema: additionalProperties: true type: object summary: Star a resource tags: - User /user/favorites/{type}/{id}: delete: parameters: - description: Resource type in: path name: type required: true type: string - description: Resource id in: path name: id required: true type: string responses: "200": description: OK schema: additionalProperties: true type: object summary: Unstar a resource tags: - User /vector-stores: get: description: List all vector stores for the current workspace, including environment-configured and user-created stores produces: - application/json responses: "200": description: List of vector stores (env + DB) schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: List vector stores tags: - VectorStore post: consumes: - application/json description: Create a new vector store configuration for the current workspace parameters: - description: Vector store configuration in: body name: request required: true schema: $ref: '#/definitions/internal_handler.CreateStoreRequest' produces: - application/json responses: "201": description: Created vector store schema: additionalProperties: true type: object "400": description: Invalid request or validation error schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object "409": description: Duplicate endpoint and index schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' security: - Bearer: [] - ApiKeyAuth: [] summary: Create vector store tags: - VectorStore /vector-stores/{id}: delete: description: Soft-delete a vector store. Env stores cannot be deleted. parameters: - description: Vector store ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Deletion success schema: additionalProperties: true type: object "400": description: Env store cannot be deleted schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Vector store not found schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Delete vector store tags: - VectorStore get: description: Retrieve a single vector store by ID. Supports both DB stores and env stores (__env_* IDs) parameters: - description: Vector store ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Vector store details schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Vector store not found schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Get vector store tags: - VectorStore put: consumes: - application/json description: Update a vector store (name only). Engine type, connection config, and index config are immutable. Env stores cannot be modified. parameters: - description: Vector store ID in: path name: id required: true type: string - description: Updated fields in: body name: request required: true schema: $ref: '#/definitions/internal_handler.UpdateStoreRequest' produces: - application/json responses: "200": description: Updated vector store schema: additionalProperties: true type: object "400": description: Env store or validation error schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Vector store not found schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Update vector store tags: - VectorStore /vector-stores/{id}/test: post: 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. parameters: - description: Vector store ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Connection test result (success, version) schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Vector store not found schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Test vector store connection by ID tags: - VectorStore /vector-stores/test: post: consumes: - application/json description: Test connectivity using provided credentials without persisting. Returns detected server version. parameters: - description: Engine type and connection config in: body name: request required: true schema: $ref: '#/definitions/internal_handler.TestStoreRequest' produces: - application/json responses: "200": description: Connection test result (success, version) schema: additionalProperties: true type: object "400": description: Invalid request schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_errors.AppError' "401": description: Unauthorized schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: Test vector store connection with raw credentials tags: - VectorStore /vector-stores/types: get: description: Return supported engine types with connection and index field schemas for UI form generation produces: - application/json responses: "200": description: List of engine types with config schemas schema: additionalProperties: true type: object summary: List vector store types tags: - VectorStore /web-search-providers/{id}: delete: description: 删除指定 provider 配置 parameters: - description: Provider ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 'success: true' schema: additionalProperties: true type: object "404": description: Provider 不存在 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 删除网络搜索 Provider tags: - 网络搜索 get: description: 根据 ID 获取指定 provider 配置 parameters: - description: Provider ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Provider 详情 schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderEntity' "404": description: Provider 不存在 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取网络搜索 Provider 详情 tags: - 网络搜索 put: consumes: - application/json description: 更新指定 provider 的名称/描述/参数/是否默认 parameters: - description: Provider ID in: path name: id required: true type: string - description: 更新字段 in: body name: request required: true schema: $ref: '#/definitions/internal_handler.UpdateProviderRequest' produces: - application/json responses: "200": description: 更新后的 Provider schema: $ref: '#/definitions/github_com_Tencent_WeKnora_internal_types.WebSearchProviderEntity' "400": description: 请求参数错误 schema: additionalProperties: true type: object "404": description: Provider 不存在 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 更新网络搜索 Provider tags: - 网络搜索 /web-search-providers/{id}/test: post: description: 使用数据库中已保存的凭证测试连通性 parameters: - description: Provider ID in: path name: id required: true type: string produces: - application/json responses: "200": description: 测试结果 schema: additionalProperties: true type: object "404": description: Provider 不存在 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 测试已保存的 Provider tags: - 网络搜索 /web-search-providers/test: post: consumes: - application/json description: 使用前端表单中尚未保存的凭证测试连通性,用于"测试连接"按钮 parameters: - description: '{provider, parameters}' in: body name: request required: true schema: $ref: '#/definitions/internal_handler.TestProviderRequest' produces: - application/json responses: "200": description: 测试结果 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 使用原始凭证测试 Provider(不落库) tags: - 网络搜索 /web-search-providers/types: get: description: 返回 UI 表单需要的 provider 类型及参数定义 produces: - application/json responses: "200": description: provider 类型列表 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取网络搜索 Provider 类型元数据 tags: - 网络搜索 /web-search/providers: get: description: 返回所有已注册的网络搜索 provider(含元数据) produces: - application/json responses: "200": description: provider 列表 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取可用网络搜索 Provider 列表 tags: - 网络搜索 /wechat/qrcode: post: description: 申请一个用于扫码登录绑定的微信二维码(无请求体) produces: - application/json responses: "200": description: 二维码信息(qrcode_url + qrcode 标识) schema: additionalProperties: true type: object "500": description: 二维码生成失败 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 获取微信扫码登录二维码 tags: - IM 渠道 /wechat/qrcode/status: post: consumes: - application/json description: 查询指定二维码是否已被扫描/确认/过期;confirmed 时返回凭证 parameters: - description: '{qrcode: string}' in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: 扫码状态 schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: additionalProperties: true type: object "500": description: 服务器错误 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 轮询微信二维码状态 tags: - IM 渠道 /weknoracloud/credentials: post: consumes: - application/json description: 保存 APPID/APPSECRET 到当前空间配置(不自动创建模型) parameters: - description: '{app_id, app_secret}' in: body name: request required: true schema: additionalProperties: true type: object produces: - application/json responses: "200": description: 'success: true' schema: additionalProperties: true type: object "400": description: 请求参数错误 schema: additionalProperties: true type: object security: - Bearer: [] - ApiKeyAuth: [] summary: 保存 WeKnoraCloud 凭证 tags: - WeKnoraCloud securityDefinitions: ApiKeyAuth: description: API Key 认证:空间 Key 固定访问所属空间;平台 Key 调用空间接口时需同时传 X-Tenant-ID in: header name: X-API-Key type: apiKey Bearer: description: 用户登录认证:输入 Bearer {token} 格式的 JWT 令牌 in: header name: Authorization type: apiKey swagger: "2.0"