Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.
1130 matches across 16 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docker-compose.yml | 41 | - ./config/config.yaml:/app/config/config.yaml |
| LOW | docker-compose.yml | 481 | volumes: |
| LOW | docker-compose.yml | 561 | # - redis :复用 WeKnora-redis 的 DB 1(WeKnora 自己用 DB 0) |
| LOW | cmd/server/bootstrap.go | 21 | // may be promoted to system administrator when the deployment has no |
| LOW | cmd/server/main.go | 1 | // Package main is the main package for the WeKnora server |
| LOW | frontend/src/composables/useResourcePins.ts | 1 | // useResourcePins – per-(user, tenant) favorites + per-user recents for |
| LOW | frontend/src/composables/useListUrlState.ts | 1 | // useListUrlState keeps a list view's filter state (sidebar scope, creator |
| LOW | frontend/src/composables/useFont.ts | 1 | import { ref } from 'vue' |
| LOW | frontend/src/composables/useFont.ts | 21 | // system sans, PingFang, and Helvetica are all visually close enough |
| LOW | frontend/src/composables/useFont.ts | 221 | } |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 101 | // *Windows only* |
| LOW | frontend/src/stores/settings.ts | 421 | }, |
| LOW | frontend/src/stores/auth.ts | 101 | // middleware (see internal/middleware/rbac.go). A user who flips this |
| LOW | frontend/src/utils/workspaceNotifyContent.ts | 1 | // Shared content renderer for the post-login and post-tenant-switch |
| LOW | frontend/src/utils/loginNotify.ts | 1 | // Rich "you're now in {workspace} as {role}" notification for the |
| LOW | frontend/src/utils/finalAnswer.ts | 1 | // finalAnswer.ts |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 41 | } |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 101 | const nowTick = ref(Date.now()) |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 121 | // Tracks consecutive fetch failures so the "更新于" caption can surface |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 201 | } |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 301 | // shouldPollNow encodes the per-tick "do I fetch?" decision. Split |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 341 | try { |
| LOW | frontend/src/api/knowledge-base/index.ts | 21 | } |
| LOW | frontend/src/views/settings/Settings.vue | 221 | key: string |
| LOW | …ntend/src/views/chat/components/AgentStreamDisplay.vue | 1101 | // "\n\n" before a tool call (see e.g. qwen3 emitting blank lines between |
| LOW | frontend/src/views/agent/AgentEditorModal.vue | 2041 | return t('agentEditor.agentType.kbMismatch.generic'); |
| LOW | frontend/src/views/agent/AgentEditorModal.vue | 2541 | // 监听知识库启用状态变化: |
| LOW | frontend/src/views/knowledge/KnowledgeBase.vue | 221 | // those as tenant-owned so the role gate applies (Admin+ can manage, |
| LOW | frontend/src/views/knowledge/KnowledgeBase.vue | 241 | // active switcher rather than "how this KB became visible to me". Presence |
| LOW | frontend/src/views/knowledge/KnowledgeBaseList.vue | 1041 | // 是否在共享区展示「可编辑 / 仅查看」二级分组:仅对中间档(contributor / editor) |
| LOW | frontend/src/views/knowledge/KnowledgeBaseList.vue | 1341 | // no authority to use. |
| LOW | …nd/src/views/knowledge/settings/KBChunkingSettings.vue | 221 | file_types: string[] |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 701 | // Per-type pagination state for the sidebar. 4万-page wikis used to load |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 721 | initialized: boolean // true once the first page has been fetched |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 761 | // Log swaps the reader into a dedicated feed view below. |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 941 | } |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1041 | // type-filtered pages, soft-deleted neighbors), NOT pages we can |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1161 | for (const n of data.nodes) { |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1181 | // ego mode, "X / Y 个节点" in overview) |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1301 | // The outer scroll container — the RecycleScroller runs in page-mode and |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1561 | // loadMoreIndexSection. |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1621 | } |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1661 | const label = getTypeLabel(type) |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1701 | } catch (e) { |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2161 | data.nodes = data.nodes.filter(n => !toRemove.has(n.slug)) |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2501 | // Color map for node types |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2741 | // node has neighbors the user hasn't loaded yet. Without this signal |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2901 | } else { |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 3461 | let graphNodeElsRef: { g: SVGGElement; circle: SVGCircleElement; text: SVGTextElement; activeRing: SVGCircleElement; nod |
| LOW | …end/src/views/knowledge/components/FAQEntryManager.vue | 1021 | // role is irrelevant — only the share grant counts. tenant_id comparison |
| LOW | config/agent_type_presets.yaml | 1 | # Agent Type Presets for Smart-Reasoning Mode |
| LOW | config/agent_type_presets.yaml | 21 | # |
| LOW | docreader/splitter/header_hook.py | 41 | # 初始化表头Hook配置(提供默认配置:支持Markdown表格、代码块) |
| LOW | docreader/utils/__init__.py | 1 | # |
| LOW | internal/handler/tenant.go | 21 | // through the REST API endpoints |
| LOW | internal/handler/tenant.go | 41 | // - config: Application configuration |
| LOW | internal/handler/tenant.go | 81 | Name string `json:"name" binding:"required,min=1,max=128"` |
| LOW | internal/handler/tenant.go | 121 | )) |
| LOW | internal/handler/tenant.go | 401 | |
| LOW | internal/handler/tenant.go | 461 | secutils.SanitizeForLog(updatedTenant.Name), |
| 627 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | docker-compose.dev.yml | 312 | # --------------------------------------------------------------------------- |
| MEDIUM | docker-compose.dev.yml | 325 | # --------------------------------------------------------------------------- |
| MEDIUM | docker-compose.yml | 489 | # --------------------------------------------------------------------------- |
| MEDIUM | docker-compose.yml | 504 | # --------------------------------------------------------------------------- |
| MEDIUM | docker-compose.yml | 556 | # --------------------------------------------------------------------------- |
| MEDIUM | docker-compose.yml | 572 | # --------------------------------------------------------------------------- |
| MEDIUM | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2013 | // ─── Bloom: additive neighbor expansion ────────────────────────────────── |
| MEDIUM | config/agent_type_presets.yaml | 31 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 34 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 65 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 68 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 97 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 100 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 143 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 148 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 188 | # -------------------------------------------------------------------------- |
| MEDIUM | config/agent_type_presets.yaml | 190 | # -------------------------------------------------------------------------- |
| MEDIUM | mcp-server/weknora_mcp_server.py | 137 | # ── UUID pattern (8-4-4-4-12 hex) ────────────────────────────────────── |
| MEDIUM | internal/datasource/scheduler_test.go | 14 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/scheduler_test.go | 16 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/scheduler_test.go | 149 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/scheduler_test.go | 151 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/client.go | 317 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/client.go | 324 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/client.go | 440 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/client.go | 442 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 17 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 19 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 232 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 234 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 354 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 356 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 414 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 416 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 638 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 640 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 838 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 840 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 945 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 947 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 982 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 984 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/service.go | 301 | // ── Redis key prefixes ────────────────────────────────────────────────────── |
| MEDIUM | internal/im/service.go | 758 | // ── WebSocket leader election ─────────────────────────────────────────────── |
| MEDIUM | internal/im/service.go | 857 | // ── Cross-instance /stop via StreamManager ─────────────────────────────────── |
| MEDIUM | internal/im/service.go | 1645 | // ── Agent tool call progress formatting ────────────────────────────── |
| MEDIUM | internal/im/service.go | 1649 | // ───────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/service.go | 2363 | // ── File message handling ────────────────────────────────────────────── |
| MEDIUM | internal/im/service.go | 2368 | // ──────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/ratelimit.go | 21 | // ────────────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/ratelimit.go | 23 | // ────────────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/ratelimit.go | 106 | // ────────────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/ratelimit.go | 108 | // ────────────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/qaqueue.go | 292 | // ── Redis global concurrency gate ──────────────────────────────────────────── |
| MEDIUM | internal/im/qaqueue.go | 354 | // ── Redis global per-user counting ────────────────────────────────────────── |
| MEDIUM | internal/im/qaqueue.go | 386 | // ── Metrics logging ───────────────────────────────────────────────────────── |
| MEDIUM | internal/im/feishu/adapter.go | 487 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/feishu/adapter.go | 489 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/feishu/adapter.go | 561 | // ────────────────────────────────────────────────────────────────────── |
| MEDIUM | internal/im/feishu/adapter.go | 572 | // ────────────────────────────────────────────────────────────────────── |
| 42 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | frontend/vite.config.ts | 19 | function resolveVueOfficePptxEntry(): string { |
| LOW | frontend/src/composables/preferenceStorage.ts | 81 | export function migratePreferencesIntoUser(): void { |
| LOW | frontend/src/wailsjs/go/main/App.d.ts | 12 | export function GetDesktopHTTPBindPublicSetting():Promise<boolean>; |
| LOW | frontend/src/wailsjs/go/main/App.d.ts | 14 | export function GetDesktopHTTPPortSetting():Promise<number>; |
| LOW | frontend/src/wailsjs/go/main/App.d.ts | 16 | export function GetDesktopListenPublicActive():Promise<boolean>; |
| LOW | frontend/src/wailsjs/go/main/App.d.ts | 18 | export function SetDesktopHTTPBindPublicSetting(arg1:boolean):Promise<void>; |
| LOW | frontend/src/wailsjs/go/main/App.d.ts | 20 | export function SetDesktopHTTPPortSetting(arg1:number):Promise<void>; |
| LOW | frontend/src/wailsjs/go/main/App.js | 21 | export function GetDesktopHTTPBindPublicSetting() { |
| LOW | frontend/src/wailsjs/go/main/App.js | 25 | export function GetDesktopHTTPPortSetting() { |
| LOW | frontend/src/wailsjs/go/main/App.js | 29 | export function GetDesktopListenPublicActive() { |
| LOW | frontend/src/wailsjs/go/main/App.js | 33 | export function SetDesktopHTTPBindPublicSetting(arg1) { |
| LOW | frontend/src/wailsjs/go/main/App.js | 37 | export function SetDesktopHTTPPortSetting(arg1) { |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 103 | export function WindowSetSystemDefaultTheme(): void; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 203 | export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 290 | export function RequestNotificationAuthorization(): Promise<boolean>; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 294 | export function CheckNotificationAuthorization(): Promise<boolean>; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 302 | export function SendNotificationWithActions(options: NotificationOptions): Promise<void>; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 306 | export function RegisterNotificationCategory(category: NotificationCategory): Promise<void>; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 310 | export function RemoveNotificationCategory(categoryId: string): Promise<void>; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 314 | export function RemoveAllPendingNotifications(): Promise<void>; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 318 | export function RemovePendingNotification(identifier: string): Promise<void>; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 322 | export function RemoveAllDeliveredNotifications(): Promise<void>; |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 326 | export function RemoveDeliveredNotification(identifier: string): Promise<void>; |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 76 | export function WindowSetSystemDefaultTheme() { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 164 | export function WindowSetBackgroundColour(R, G, B, A) { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 256 | export function RequestNotificationAuthorization() { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 260 | export function CheckNotificationAuthorization() { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 268 | export function SendNotificationWithActions(options) { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 272 | export function RegisterNotificationCategory(category) { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 276 | export function RemoveNotificationCategory(categoryId) { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 280 | export function RemoveAllPendingNotifications() { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 284 | export function RemovePendingNotification(identifier) { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 288 | export function RemoveAllDeliveredNotifications() { |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 292 | export function RemoveDeliveredNotification(identifier) { |
| LOW | frontend/src/stores/organization.ts | 348 | async function fetchSharedKnowledgeBases() { |
| LOW | frontend/src/utils/workspaceNotifyContent.ts | 73 | export function renderWorkspaceNotifyContent( |
| LOW | frontend/src/utils/tenantSwitch.ts | 24 | export function navigateAfterTenantSwitch(): void { |
| LOW | frontend/src/utils/tenantSwitch.ts | 49 | export function consumePendingTenantSwitchToast(): PendingTenantSwitchToast | null { |
| LOW | frontend/src/utils/tenantSwitch.ts | 86 | export function persistLastActiveTenantPreference( |
| LOW | frontend/src/utils/tdesign-icon-offline.ts | 39 | export function installTDesignIconOfflineGuard(): void { |
| LOW | frontend/src/utils/security.ts | 118 | function protectProviderImageSrcInHTML(html: string): string { |
| LOW | frontend/src/utils/security.ts | 270 | function getProtectedFileRequestHeaders(): Record<string, string> { |
| LOW | frontend/src/utils/security.ts | 298 | export async function hydrateProtectedFileImages(root: ParentNode | null | undefined): Promise<void> { |
| LOW | frontend/src/utils/tool-capabilities.ts | 208 | export function kbSatisfiesAgentRequirements( |
| LOW | frontend/src/utils/tool-capabilities.ts | 230 | export function kbSatisfiesToolRequirements( |
| LOW | frontend/src/utils/knowledgeTrace.ts | 2 | export function knowledgeSpansPayloadHasTrace( |
| LOW | frontend/src/utils/finalAnswer.ts | 37 | export function unwrapFinalAnswerWrappers(content: string): string { |
| LOW | frontend/src/components/modelEditorSourceState.ts | 5 | export function shouldShowOllamaUnavailableTip( |
| LOW | frontend/src/components/doc-content.vue | 154 | function onTraceDrawerWindowResize() { |
| LOW | frontend/src/api/chat-history.ts | 48 | export function getTenantChatHistoryConfig() { |
| LOW | frontend/src/api/chat-history.ts | 53 | export function updateTenantChatHistoryConfig(config: ChatHistoryConfig) { |
| LOW | frontend/src/api/web-search.ts | 42 | export function updateTenantWebSearchConfig(config: WebSearchConfig) { |
| LOW | frontend/src/api/web-search-provider.ts | 65 | export function listWebSearchProviderTypes(): Promise<WebSearchProviderTypeInfo[]> { |
| LOW | frontend/src/api/web-search-provider.ts | 84 | export async function putWebSearchProviderCredentials( |
| LOW | frontend/src/api/web-search-provider.ts | 92 | export async function deleteWebSearchProviderCredentialField( |
| LOW | frontend/src/api/retrieval.ts | 20 | export function updateTenantRetrievalConfig(config: RetrievalConfig) { |
| LOW | frontend/src/api/organization/index.ts | 428 | export async function searchSearchableOrganizations( |
| LOW | frontend/src/api/organization/index.ts | 633 | export async function listOrganizationSharedKnowledgeBases(orgId: string): Promise<ApiResponse<OrganizationSharedKnowled |
| LOW | frontend/src/api/organization/index.ts | 673 | export async function updateAgentSharePermission(agentId: string, shareId: string, req: UpdateSharePermissionRequest): P |
| LOW | frontend/src/api/organization/index.ts | 703 | export async function listOrganizationSharedAgents(orgId: string): Promise<ApiResponse<OrganizationSharedAgentItem[]>> { |
| 57 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | mcp-server/PROJECT_SUMMARY.md | 134 | export WEKNORA_API_KEY="your_api_key" |
| HIGH | mcp-server/EXAMPLES.md | 393 | "WEKNORA_API_KEY": "your_api_key" |
| HIGH | mcp-server/INSTALL.md | 188 | Environment=WEKNORA_API_KEY=your_api_key |
| HIGH | docs/BUILTIN_MCP_SERVICES.md | 71 | '{"api_key": "your-api-key"}'::jsonb, -- 认证配置 |
| HIGH | docs/OIDC认证调用流程.md | 568 | # secret: <YOUR_SECRET_HERE> |
| HIGH | docs/wiki/核心功能/内置MCP服务管理.md | 65 | '{"api_key": "your-api-key"}'::jsonb, |
| HIGH | docs/wiki/API参考/API文档概览.md | 25 | X-API-Key: your_api_key |
| HIGH | docs/api/agent.md | 385 | --header 'X-API-Key: your_api_key' |
| HIGH | docs/api/vector-store.md | 157 | "api_key": "your_api_key", |
| HIGH | docs/api/model.md | 61 | --header 'X-API-Key: your_api_key' |
| HIGH | docs/api/model.md | 65 | --header 'X-API-Key: your_api_key' |
| HIGH | docs/api/model.md | 123 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 141 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 162 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 184 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 207 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 232 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 251 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 270 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 323 | --header 'X-API-Key: your_api_key' |
| HIGH | docs/api/model.md | 341 | --header 'X-API-Key: your_api_key' |
| HIGH | docs/api/model.md | 371 | --header 'X-API-Key: your_api_key' \ |
| HIGH | docs/api/model.md | 400 | --header 'X-API-Key: your_api_key' |
| HIGH | docs/api/README.md | 35 | X-API-Key: your_api_key |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …rc/views/knowledge/settings/DataSourceEditorDialog.vue | 99 | // Step 2: Resources |
| LOW | config/config.yaml | 54 | ## Step 1: Entity Extraction and Attribute Enrichment |
| LOW | config/config.yaml | 58 | ## Step 2: Relationship Extraction and Verification |
| LOW | docreader/splitter/splitter.py | 131 | # Step 1: Split text by separators recursively |
| LOW | docreader/splitter/splitter.py | 133 | # Step 2: Extract protected content positions |
| LOW | docreader/splitter/splitter.py | 135 | # Step 3: Merge splits with protected content to ensure integrity |
| LOW | docreader/splitter/splitter.py | 141 | # Step 4: Merge splits into final chunks with overlap |
| LOW | docreader/splitter/splitter.py | 144 | # Step 5: Validate chunks and test restoration |
| LOW | internal/datasource/connector/feishu/client.go | 397 | // Step 1: create export task |
| LOW | internal/datasource/connector/feishu/client.go | 403 | // Step 2: poll until ready (max 60s, every 2s) |
| LOW | internal/datasource/connector/feishu/client.go | 426 | // Step 3: download file using file_token (NOT ticket) |
| LOW | …rnal/application/repository/knowledge_finalize_test.go | 215 | // Step 2: caller A snapshots the row with counter=5 in memory. |
| LOW | …rnal/application/repository/knowledge_finalize_test.go | 220 | // Step 3: an enrichment subtask decrements concurrently. |
| LOW | …rnal/application/repository/knowledge_finalize_test.go | 224 | // Step 4: caller A persists an unrelated change. The in-memory copy |
| LOW | …rnal/application/repository/knowledge_finalize_test.go | 229 | // Step 5: the live counter is still 4, not clobbered back to 5. |
| LOW | internal/application/service/message.go | 493 | // Step 1: Keyword search (direct PG ILIKE) |
| LOW | internal/application/service/message.go | 503 | // Step 2: Vector search via chat history knowledge base (if configured) |
| LOW | internal/application/service/message.go | 516 | // Step 3: Merge results based on mode |
| LOW | internal/application/service/message.go | 528 | // Step 4: Fetch partner messages (Q&A counterparts) to ensure complete pairs |
| LOW | internal/application/service/message.go | 531 | // Step 5: Group by request_id to merge Q&A pairs |
| LOW | internal/application/service/knowledgebase.go | 632 | // Step 1: Delete the knowledge base record first (mark as deleted) |
| LOW | internal/application/service/knowledgebase.go | 647 | // Step 2: Enqueue async task for heavy cleanup operations |
| LOW | internal/application/service/knowledgebase.go | 693 | // Step 1: Get all knowledge entries in this knowledge base |
| LOW | internal/application/service/knowledgebase.go | 704 | // Step 2: Delete all knowledge entries and their resources |
| LOW | internal/application/service/knowledge_process.go | 2034 | // Step 2: Update knowledge status and metadata |
| LOW | internal/application/service/knowledge_process.go | 2056 | // Step 3: Trigger async re-parsing based on knowledge type |
| LOW | internal/application/service/knowledge_process.go | 2975 | // Step 2: Store images and update markdown references |
| LOW | internal/application/service/knowledge_process.go | 3005 | // Step 3: Split into chunks using Go chunker |
| LOW | internal/application/service/knowledge_process.go | 3055 | // Step 4: Process chunks (vectorize + index + enqueue async tasks) |
| LOW | internal/application/service/chat_pipeline/merge.go | 55 | // Step 1: Select input |
| LOW | internal/application/service/chat_pipeline/merge.go | 58 | // Step 2: Initial dedup |
| LOW | internal/application/service/chat_pipeline/merge.go | 61 | // Step 3: Inject history references |
| LOW | internal/application/service/chat_pipeline/merge.go | 76 | // Step 4: Resolve parent chunks |
| LOW | internal/application/service/chat_pipeline/merge.go | 79 | // Step 5: Group by knowledge/chunkType and merge overlapping ranges |
| LOW | internal/application/service/chat_pipeline/merge.go | 82 | // Step 6: Populate FAQ answers |
| LOW | internal/application/service/chat_pipeline/merge.go | 85 | // Step 7: Expand short contexts |
| LOW | internal/application/service/chat_pipeline/merge.go | 91 | // Step 8: Final dedup — catches exact duplicates plus partial content overlaps |
| LOW | internal/infrastructure/chunker/splitter.go | 287 | // Step 1: Find protected spans |
| LOW | internal/infrastructure/chunker/splitter.go | 290 | // Step 2: Split non-protected regions by separators, keep protected as atomic units. |
| LOW | internal/infrastructure/chunker/splitter.go | 295 | // Step 3: Merge units into chunks with overlap |
| LOW | internal/event/example_test.go | 65 | // Step 1: Query received |
| LOW | internal/event/example_test.go | 72 | // Step 2: Query rewrite |
| LOW | internal/event/example_test.go | 79 | // Step 3: Retrieval |
| LOW | internal/event/example_test.go | 86 | // Step 4: Rerank |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | rerank_server_demo.py | 52 | except Exception as e: |
| LOW | docreader/config.py | 29 | except Exception: |
| LOW | docreader/main.py | 87 | except Exception: |
| LOW | docreader/main.py | 174 | except Exception as e: |
| LOW | docreader/splitter/splitter.py | 475 | except Exception as e: |
| LOW | docreader/splitter/splitter.py | 514 | except Exception as e: |
| LOW | docreader/utils/__init__.py | 61 | except Exception as e: |
| LOW | docreader/utils/__init__.py | 81 | except Exception as e: |
| LOW | docreader/parser/pdf_parser.py | 93 | except Exception as e: |
| LOW | docreader/parser/registry.py | 92 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 337 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 340 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1517 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1525 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1531 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 135 | except Exception as exc: |
| LOW | docreader/parser/docx_parser.py | 179 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 205 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 284 | except Exception as backup_error: |
| LOW | docreader/parser/docx_parser.py | 559 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 581 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 846 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 931 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1009 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1027 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1128 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1165 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1286 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1319 | except Exception as e: |
| LOW | docreader/parser/docx_parser.py | 1477 | except Exception as blob_error: |
| LOW | docreader/parser/chain_parser.py | 62 | except Exception: |
| LOW | docreader/parser/doc_parser.py | 48 | except Exception as e: |
| LOW | docreader/parser/doc_parser.py | 124 | except Exception as e: |
| LOW | docreader/parser/web_parser.py | 89 | except Exception as e: |
| LOW | docreader/parser/web_parser.py | 106 | except Exception as e: |
| LOW | mcp-server/run.py | 41 | except Exception as e: |
| LOW | mcp-server/test_module.py | 89 | except Exception as e: |
| LOW | mcp-server/test_module.py | 148 | except Exception as e: |
| LOW | mcp-server/test_module.py | 168 | except Exception as e: |
| LOW | mcp-server/test_module.py | 191 | except Exception as e: |
| LOW | mcp-server/test_module.py | 218 | except Exception as e: |
| LOW | mcp-server/test_module.py | 249 | except Exception as e: |
| LOW | mcp-server/main.py | 158 | except Exception as e: |
| LOW | mcp-server/run_server.py | 43 | except Exception as e: |
| LOW | mcp-server/weknora_mcp_server.py | 1204 | except Exception as preflight_err: |
| LOW | mcp-server/weknora_mcp_server.py | 1258 | except Exception as e: |
| LOW | scripts/cloud-image/prepare.sh | 100 | except Exception: |
| LOW | …s/preloaded/data-processor/scripts/format_converter.py | 149 | except Exception as e: |
| LOW | …s/preloaded/data-processor/scripts/format_converter.py | 182 | except Exception as e: |
| LOW | …s/preloaded/data-processor/scripts/format_converter.py | 200 | except Exception as e: |
| LOW | skills/preloaded/data-processor/scripts/extract_info.py | 148 | except Exception as e: |
| LOW | skills/preloaded/data-processor/scripts/extract_info.py | 183 | except Exception as e: |
| LOW | skills/preloaded/data-processor/scripts/analyze.py | 193 | except Exception as e: |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | internal/middleware/access_test.go | 24 | // EnableCrossTenantAccess flag set as requested. EnableRBAC is left at |
| HIGH | internal/types/interfaces/wiki_page.go | 272 | // that do not have AI-generated document questions or recommended FAQ entries. |
| HIGH | internal/application/repository/wiki_page.go | 663 | // the KB has no FAQ entries or AI-generated document questions (typical for |
| HIGH | internal/application/service/custom_agent.go | 620 | // document chunks carry AI-generated questions (question_generation is skipped |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | docreader/parser/excel_parser.py | 90 | # Create a chunk for this row with position tracking |
| MEDIUM | docreader/parser/docx_parser.py | 373 | # Create an estimated page mapping |
| MEDIUM | docreader/parser/docx_parser.py | 963 | # Create the final text with proper ordering |
| MEDIUM | docreader/parser/docx_parser.py | 1112 | # Create a new image |
| MEDIUM | docreader/parser/docx_parser.py | 1154 | # Create a temporary file |
| MEDIUM | docreader/parser/chain_parser.py | 29 | # Create a custom FirstParser with specific parser classes |
| MEDIUM | docreader/parser/chain_parser.py | 103 | # Create a custom PipelineParser with specific parser classes |
| MEDIUM | docreader/parser/doc_parser.py | 191 | # Create a temporary directory to store the converted file |
| MEDIUM | mcp-server/weknora_mcp_server.py | 56 | # Create a persistent session for connection pooling and performance |
| MEDIUM | mcp-server/weknora_mcp_server.py | 1126 | # Create a knowledge-base-bound chat session with strategy configuration. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | rerank_server_demo.py | 5 | |
| LOW | docreader/parser/markdown_parser.py | 16 | |
| LOW | docreader/parser/registry.py | 2 | |
| LOW | docreader/parser/__init__.py | 16 | |
| LOW | docreader/parser/__init__.py | 17 | |
| LOW | docreader/parser/__init__.py | 18 | |
| LOW | docreader/parser/__init__.py | 19 | |
| LOW | docreader/parser/__init__.py | 20 | |
| LOW | docreader/parser/__init__.py | 21 | |
| LOW | docreader/parser/__init__.py | 22 | |
| LOW | docreader/parser/__init__.py | 23 | |
| LOW | docreader/parser/__init__.py | 23 | |
| LOW | docreader/parser/__init__.py | 24 | |
| LOW | mcp-server/test_module.py | 20 | |
| LOW | mcp-server/test_module.py | 24 | |
| LOW | mcp-server/test_imports.py | 7 | |
| LOW | mcp-server/test_imports.py | 14 | |
| LOW | mcp-server/test_imports.py | 14 | |
| LOW | mcp-server/test_imports.py | 28 | |
| LOW | mcp-server/test_imports.py | 33 | |
| LOW | mcp-server/__init__.py | 12 | |
| LOW | mcp-server/__init__.py | 12 | |
| LOW | mcp-server/main.py | 30 | |
| LOW | mcp-server/main.py | 31 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | rerank_server_demo.py | 67 | |
| LOW | docreader/splitter/splitter.py | 186 | |
| LOW | docreader/splitter/splitter.py | 412 | |
| LOW | docreader/utils/request.py | 87 | |
| LOW | docreader/utils/__init__.py | 46 | |
| LOW | docreader/utils/__init__.py | 66 | |
| LOW | docreader/utils/endecode.py | 23 | |
| LOW | docreader/parser/pdf_parser.py | 34 | |
| LOW | docreader/parser/excel_parser.py | 43 | |
| LOW | docreader/parser/docx_parser.py | 1170 | |
| LOW | docreader/parser/docx_parser.py | 1325 | |
| LOW | docreader/parser/docx_parser.py | 1425 | |
| LOW | docreader/parser/docx_parser.py | 104 | |
| LOW | docreader/parser/docx_parser.py | 210 | |
| LOW | docreader/parser/docx_parser.py | 803 | |
| LOW | docreader/parser/docx_parser.py | 862 | |
| LOW | docreader/parser/docx_parser.py | 981 | |
| LOW | docreader/parser/docx_parser.py | 1055 | |
| LOW | docreader/parser/doc_parser.py | 103 | |
| LOW | dataset/qa_dataset.py | 219 | |
| LOW | mcp-server/main.py | 107 | |
| LOW | mcp-server/weknora_mcp_server.py | 1002 | |
| LOW | mcp-server/weknora_mcp_server.py | 323 | |
| LOW | …s/preloaded/data-processor/scripts/format_converter.py | 132 | |
| LOW | skills/preloaded/data-processor/scripts/extract_info.py | 135 | |
| LOW | skills/preloaded/data-processor/scripts/analyze.py | 166 | |
| LOW | …oaded/openmaic-classroom/scripts/rag-to-requirement.py | 46 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | frontend/src/components/UserMenu.vue | 317 | email: 'user@example.com', |
| LOW | frontend/src/components/UserMenu.vue | 665 | email: user.email || 'user@example.com', |
| LOW | internal/agent/prompts_wiki.go | 103 | "name": "Acme Corp", |
| LOW | internal/agent/prompts_wiki.go | 188 | "name": "Acme Corp", |
| LOW | internal/agent/prompts_wiki.go | 403 | - "Acme Corp" → "Acme Corporation" (same company, abbreviation) |
| LOW | internal/application/service/wiki_ingest_dedup_test.go | 160 | // filter keeps legitimate merge candidates like "Acme Corp" ↔ "Acme Corporation". |
| LOW | internal/application/service/wiki_ingest_dedup_test.go | 164 | nameGramSets: gramsPerSurface([]string{"Acme Corp"}), |
| LOW | internal/application/service/wiki_ingest_dedup.go | 35 | // is excluded while "Acme Corp" vs "Acme Corporation" (Jaccard ≈ 0.5) |
| LOW | internal/application/service/wiki_ingest_test.go | 15 | {"Acme Corp", "acme-corp"}, |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 13 | body := strings.Repeat("Lorem ipsum dolor sit amet consectetur adipiscing elit. ", 4) |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 13 | body := strings.Repeat("Lorem ipsum dolor sit amet consectetur adipiscing elit. ", 4) |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 34 | if strings.Contains(c.Content, "## Section B") && strings.Contains(c.Content, "Lorem ipsum") { |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 73 | body := strings.Repeat("Lorem ipsum dolor sit amet consectetur adipiscing elit. ", 4) |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 73 | body := strings.Repeat("Lorem ipsum dolor sit amet consectetur adipiscing elit. ", 4) |
| LOW | internal/infrastructure/chunker/strategy_test.go | 120 | body := strings.Repeat("Lorem ipsum dolor sit amet. ", 40) |
| LOW | internal/infrastructure/chunker/strategy_test.go | 120 | body := strings.Repeat("Lorem ipsum dolor sit amet. ", 40) |
| LOW | docs/api/organization.md | 620 | "email": "admin@example.com", |
| LOW | cli/acceptance/testdata/wire/auth_status.success.json | 1 | {"ok":true,"data":{"profile":"","user_id":"usr_abc","email":"user@example.com","tenant_id":42,"tenant_name":"Acme"}} |
| LOW | cli/acceptance/contract/wire_test.go | 238 | resp.Data.User = &sdk.AuthUser{ID: "usr_abc", Email: "user@example.com", TenantID: 42} |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | cmd/desktop/main.go | 41 | // and instead uses robust DOM-traversal via el.closest() plus a Y-position |
| MEDIUM | frontend/package-lock.json | 4461 | "resolved": "https://mirrors.tencent.com/npm/robust-predicates/-/robust-predicates-3.0.3.tgz", |
| MEDIUM | internal/searchutil/normalize.go | 11 | // NormalizeKeywordScores normalizes keyword match scores in-place using robust percentile bounds. |
| MEDIUM | …ion/repository/retriever/opensearch/repository_test.go | 215 | // parseMajorMinor — robust semver parsing |
| MEDIUM | cli/cmd/doctor/doctor.go | 277 | // but type-assertion is structurally more robust to scheme renames. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docreader/splitter/splitter.py | 239 | # Check if adding this split would exceed chunk size |
| LOW | docreader/parser/docx_parser.py | 192 | # Check if the generated text is empty |
| LOW | docreader/parser/docx_parser.py | 654 | # Check if the document contains images to optimize processing speed |
| LOW | docreader/parser/docx_parser.py | 878 | # Check if there are images |
| LOW | docreader/parser/docx_parser.py | 944 | if line_data.content_sequence: # Check if we have processed_content |
| LOW | docreader/parser/doc_parser.py | 145 | # Check if antiword is installed |
| LOW | docreader/parser/doc_parser.py | 183 | # Check if LibreOffice or OpenOffice is installed |
| LOW | docreader/parser/doc_parser.py | 251 | # Check if path is set in environment variable |
| LOW | scripts/migrate.sh | 26 | # Check if migrate tool is installed |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | docreader/utils/endecode.py | 24 | Convert image to base64 encoded string. This function handles multiple image input formats and converts them to |
| HIGH | docreader/utils/endecode.py | 79 | Decode a base64 encoded image string back to bytes. This function converts a base64 encoded string representation o |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | config/prompt_templates/agent_system_prompt.yaml | 278 | * **MCP Tools (dynamic):** Any tools whose names do NOT start with `wiki_` and are not the built-in `thinking` / ` |
| MEDIUM | config/prompt_templates/fallback.yaml | 75 | content: "Sorry, I'm unable to answer this question at the moment. Please try rephrasing your question, or contact c |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | docreader/auth.py | 129 |