Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.
This report presents the forensic synthetic code analysis of Tencent/WeKnora, a Go project with 18,267 GitHub stars. SynthScan v2.0 examined 627,212 lines of code across 2019 source files, recording 1646 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 3.5 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1646 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.yml | 41 | # Optional: mount custom skills directory (allows adding skills without rebuilding image) | COMMENT |
| LOW | docker-compose.yml | 161 | - TENANT_AES_KEY=${TENANT_AES_KEY:-} | COMMENT |
| LOW | docker-compose.yml | 561 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | cmd/server/bootstrap.go | 21 | // may be promoted to system administrator when the deployment has no | COMMENT |
| LOW | cmd/server/bootstrap.go | 61 | // not abort startup — bootstrap is best-effort. | COMMENT |
| LOW | cmd/server/main.go | 1 | // Package main is the main package for the WeKnora server | COMMENT |
| LOW | frontend/src/composables/useResourcePins.ts | 1 | // useResourcePins – per-(user, tenant) favorites + per-user recents for | COMMENT |
| LOW | frontend/src/composables/useListUrlState.ts | 1 | // useListUrlState keeps a list view's filter state (sidebar scope, creator | COMMENT |
| LOW | frontend/src/composables/useFont.ts | 1 | import { ref } from 'vue' | COMMENT |
| LOW | frontend/src/composables/useFont.ts | 21 | // system sans, PingFang, and Helvetica are all visually close enough | COMMENT |
| LOW | frontend/src/composables/useFont.ts | 221 | } | COMMENT |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 101 | // *Windows only* | COMMENT |
| LOW | frontend/src/stores/auth.ts | 41 | const allTenants = ref<TenantInfoFromAPI[]>([]) | COMMENT |
| LOW | frontend/src/stores/auth.ts | 101 | }) | COMMENT |
| LOW | frontend/src/stores/auth.ts | 121 | }) | COMMENT |
| LOW | frontend/src/utils/workspaceNotifyContent.ts | 1 | // Shared content renderer for the post-login and post-tenant-switch | COMMENT |
| LOW | frontend/src/utils/loginNotify.ts | 1 | // Rich "you're now in {workspace} as {role}" notification for the | COMMENT |
| LOW | frontend/src/utils/finalAnswer.ts | 1 | // finalAnswer.ts | COMMENT |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 101 | const selectedAttempt = ref<number | undefined>(undefined) | COMMENT |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 121 | // row.key). Auto-expand checks this set so deeper subspans that the | COMMENT |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 141 | // | COMMENT |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 201 | // finalizing is the post-process fan-out window — subspans | COMMENT |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 281 | // to wikiIngestDelay. At that exact moment parse_status is already | COMMENT |
| LOW | …ntend/src/components/knowledge-processing-timeline.vue | 301 | if (!last) return false | COMMENT |
| LOW | frontend/src/components/css/chat-markdown.less | 1 | @import './chat-hljs.less'; | COMMENT |
| LOW | …tend/src/components/credentials/CredentialResource.vue | 181 | // Local view state per field. Source of truth is props.meta, but we track | COMMENT |
| LOW | frontend/src/api/mcp-service.ts | 181 | await del(`/api/v1/mcp-services/${serviceId}/credentials/${field}`) | COMMENT |
| LOW | frontend/src/api/knowledge-base/index.ts | 21 | return get(qs ? `/api/v1/knowledge-bases?${qs}` : '/api/v1/knowledge-bases'); | COMMENT |
| LOW | frontend/src/views/agent/AgentList.vue | 1401 | // 根据 agent 数据形态判分组:filteredAgents 元素带 isMine;sortedMineAgents | COMMENT |
| LOW | frontend/src/views/knowledge/kbListMerge.ts | 1 | // Pure helpers backing the "All" scope of the knowledge-base list. | COMMENT |
| LOW | frontend/src/views/knowledge/KnowledgeBase.vue | 241 | COMMENT | |
| LOW | frontend/src/views/knowledge/KnowledgeBaseList.vue | 921 | // 分组标题正好插在过渡处;其他角色看不到标题,纯排序变化也无害。 | COMMENT |
| LOW | frontend/src/views/knowledge/KnowledgeBaseList.vue | 1061 | function isSharedKbEditable(perm: string | undefined): boolean { | COMMENT |
| LOW | frontend/src/views/knowledge/KnowledgeBaseList.vue | 1101 | // 重新赋一个新的 Set 是为了让 ref 的 .value 身份变化触发模板重渲染; | COMMENT |
| LOW | frontend/src/views/knowledge/KnowledgeBaseList.vue | 1341 | // Viewer cannot click into them for a KB they don't own. The server | COMMENT |
| LOW | frontend/src/views/knowledge/KnowledgeBaseList.vue | 1361 | return authStore.hasRole('contributor') && kb.isMine !== false | COMMENT |
| LOW | …nd/src/views/knowledge/settings/KBChunkingSettings.vue | 221 | file_types: string[] | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 761 | // them on demand: | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 821 | const touchedDirectories = ref<Set<string>>(new Set()) | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 861 | COMMENT | |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1041 | const graphDrawerVisible = ref(false) | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1061 | // Entity and concept pages look and behave alike, so the sidebar merges all | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1161 | COMMENT | |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1181 | // can bloom to pull them in. This is the main signal for the dashed | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1301 | return count | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 1781 | const WIKI_PAGE_ITEM_HEIGHT = 100 | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2421 | // group types) — a bounded response regardless of KB size. Sections are | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2501 | if (entry.summary) { | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2881 | graphLoading.value = false | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 3041 | // parallel would hammer the backend and most responses would compete for | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 3781 | // Single-click behaviour + keyboard-modifier shortcuts to skip the | COMMENT |
| LOW | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 4341 | // On a 4万-page wiki, the current render contains at most GRAPH_OVERVIEW_LIMIT | COMMENT |
| LOW | …end/src/views/knowledge/components/FAQEntryManager.vue | 1021 | // means we reached this KB through a shared space, so the user's local tenant | COMMENT |
| LOW | config/agent_type_presets.yaml | 1 | # Agent Type Presets for Smart-Reasoning Mode | COMMENT |
| LOW | config/agent_type_presets.yaml | 21 | # | COMMENT |
| LOW | config/agent_type_presets.yaml | 121 | - "grep_chunks" | COMMENT |
| LOW | config/agent_type_presets.yaml | 161 | # `thinking` / `todo_write` are opt-in for data-analysis too. Enable | COMMENT |
| LOW | docreader/splitter/header_hook.py | 41 | # 初始化表头Hook配置(提供默认配置:支持Markdown表格、代码块) | COMMENT |
| LOW | docreader/utils/__init__.py | 1 | # | COMMENT |
| LOW | docreader/parser/pdf_parser.py | 81 | _LOW_TEXT_IMAGE_RATIO = 0.1 | COMMENT |
| 718 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/vite.config.ts | 55 | function resolveVueOfficePptxEntry(): string { | CODE |
| LOW | frontend/src/composables/preferenceStorage.ts | 81 | export function migratePreferencesIntoUser(): void { | CODE |
| LOW | frontend/src/composables/useChatReferencesDrawer.ts | 27 | export function provideChatReferencesDrawer(): ChatReferencesDrawerContext { | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.d.ts | 12 | export function GetDesktopHTTPBindPublicSetting():Promise<boolean>; | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.d.ts | 14 | export function GetDesktopHTTPPortSetting():Promise<number>; | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.d.ts | 16 | export function GetDesktopListenPublicActive():Promise<boolean>; | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.d.ts | 18 | export function SetDesktopHTTPBindPublicSetting(arg1:boolean):Promise<void>; | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.d.ts | 20 | export function SetDesktopHTTPPortSetting(arg1:number):Promise<void>; | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.js | 21 | export function GetDesktopHTTPBindPublicSetting() { | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.js | 25 | export function GetDesktopHTTPPortSetting() { | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.js | 29 | export function GetDesktopListenPublicActive() { | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.js | 33 | export function SetDesktopHTTPBindPublicSetting(arg1) { | CODE |
| LOW⚡ | frontend/src/wailsjs/go/main/App.js | 37 | export function SetDesktopHTTPPortSetting(arg1) { | CODE |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 103 | export function WindowSetSystemDefaultTheme(): void; | CODE |
| LOW | frontend/src/wailsjs/runtime/runtime.d.ts | 203 | export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 290 | export function RequestNotificationAuthorization(): Promise<boolean>; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 294 | export function CheckNotificationAuthorization(): Promise<boolean>; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 302 | export function SendNotificationWithActions(options: NotificationOptions): Promise<void>; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 306 | export function RegisterNotificationCategory(category: NotificationCategory): Promise<void>; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 310 | export function RemoveNotificationCategory(categoryId: string): Promise<void>; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 314 | export function RemoveAllPendingNotifications(): Promise<void>; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 318 | export function RemovePendingNotification(identifier: string): Promise<void>; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 322 | export function RemoveAllDeliveredNotifications(): Promise<void>; | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.d.ts | 326 | export function RemoveDeliveredNotification(identifier: string): Promise<void>; | CODE |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 76 | export function WindowSetSystemDefaultTheme() { | CODE |
| LOW | frontend/src/wailsjs/runtime/runtime.js | 164 | export function WindowSetBackgroundColour(R, G, B, A) { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 256 | export function RequestNotificationAuthorization() { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 260 | export function CheckNotificationAuthorization() { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 268 | export function SendNotificationWithActions(options) { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 272 | export function RegisterNotificationCategory(category) { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 276 | export function RemoveNotificationCategory(categoryId) { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 280 | export function RemoveAllPendingNotifications() { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 284 | export function RemovePendingNotification(identifier) { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 288 | export function RemoveAllDeliveredNotifications() { | CODE |
| LOW⚡ | frontend/src/wailsjs/runtime/runtime.js | 292 | export function RemoveDeliveredNotification(identifier) { | CODE |
| LOW | frontend/src/stores/editorResources.ts | 122 | async function ensureTenantRetrievalConfig(force = false): Promise<void> { | CODE |
| LOW | frontend/src/stores/chatResources.ts | 69 | async function fetchKnowledgeBasesForList( | CODE |
| LOW | frontend/src/stores/chatResources.ts | 189 | async function ensureAgentKnowledgeBases(agentId: string, force = false): Promise<any[]> { | CODE |
| LOW | frontend/src/stores/chatResources.ts | 239 | function invalidateKnowledgeBaseDetail(kbId?: string) { | CODE |
| LOW | frontend/src/stores/organization.ts | 368 | async function fetchSharedKnowledgeBases(options?: { force?: boolean }) { | CODE |
| LOW | frontend/src/stores/auth.ts | 16 | function clearSessionResourceCaches() { | CODE |
| LOW | frontend/src/utils/agentWebSearch.ts | 9 | export function resolveAgentWebSearchProviderId( | CODE |
| LOW | frontend/src/utils/agent-readiness.ts | 14 | export function agentHasConfiguredChatModel( | CODE |
| LOW | frontend/src/utils/agent-readiness.ts | 45 | export function getAgentNotReadyReasonKeys( | CODE |
| LOW | frontend/src/utils/agent-readiness.ts | 79 | export function resolveAgentNotReadySection(reasons: AgentNotReadyReasonKey[]): string { | CODE |
| LOW | frontend/src/utils/agent-readiness.ts | 90 | export function resolveAgentNotReadyHighlight( | CODE |
| LOW | frontend/src/utils/workspaceNotifyContent.ts | 73 | export function renderWorkspaceNotifyContent( | CODE |
| LOW | frontend/src/utils/tenantModelReadiness.ts | 14 | export function evaluateTenantModelReadiness(models: ModelConfig[]): TenantModelReadiness { | CODE |
| LOW | frontend/src/utils/tenantModelReadiness.ts | 29 | export async function fetchTenantModelReadiness(): Promise<TenantModelReadiness> { | CODE |
| LOW | frontend/src/utils/referenceSources.ts | 281 | export function resolveReferenceHighlightKey( | CODE |
| LOW | frontend/src/utils/markdownEnhancements.ts | 162 | export function highlightCodeBlocksInContainer(root: HTMLElement | null | undefined): void { | CODE |
| LOW | frontend/src/utils/markdownEnhancements.ts | 183 | export function refreshMarkdownEnhancements(root: HTMLElement | null | undefined): void { | CODE |
| LOW | frontend/src/utils/markdownEnhancements.ts | 189 | export function attachMarkdownEnhancementListeners( | CODE |
| LOW | frontend/src/utils/knowledgeProcessingStatus.ts | 11 | export function parseStatusToTimelineStatus(status?: string): string { | CODE |
| LOW | frontend/src/utils/knowledgeProcessingStatus.ts | 29 | export function resolveTimelineHeaderStatus(input: TimelineStatusInput): string { | CODE |
| LOW | frontend/src/utils/citationMarkdown.ts | 18 | export function stripIncompleteCitationTag(content: string): string { | CODE |
| LOW | frontend/src/utils/citationMarkdown.ts | 204 | export function extractCitationHtmlPlaceholders( | CODE |
| LOW⚡ | frontend/src/utils/citationMarkdown.ts | 222 | export function restoreCitationHtmlPlaceholders(html: string, htmlSnippets: string[]): string { | CODE |
| LOW⚡ | frontend/src/utils/citationMarkdown.ts | 230 | function isFencedCodeDelimiterLine(line: string): boolean { | CODE |
| LOW⚡ | frontend/src/utils/citationMarkdown.ts | 235 | export function joinCitationTagsToPreviousLine(content: string): string { | CODE |
| 296 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker-compose.dev.yml | 315 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker-compose.dev.yml | 328 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker-compose.yml | 494 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker-compose.yml | 509 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker-compose.yml | 561 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker-compose.yml | 577 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frontend/src/views/knowledge/wiki/WikiBrowser.vue | 2885 | // ─── Bloom: additive neighbor expansion ────────────────────────────────── | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 31 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 34 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | config/agent_type_presets.yaml | 64 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | config/agent_type_presets.yaml | 67 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 95 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 98 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 140 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 145 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 184 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 186 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | mcp-server/weknora_mcp_server.py | 197 | # ── UUID pattern (8-4-4-4-12 hex) ────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/scheduler_test.go | 14 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/scheduler_test.go | 16 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/scheduler_test.go | 165 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/scheduler_test.go | 167 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/client.go | 415 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/client.go | 422 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/client.go | 538 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/client.go | 540 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 25 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 27 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 294 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 296 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 416 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 418 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 603 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 605 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 867 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 869 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 1067 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 1069 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 1174 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 1176 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 1211 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/datasource/connector/feishu/connector_test.go | 1213 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/service.go | 308 | // ── Redis key prefixes ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/service.go | 1018 | // ── WebSocket leader election ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/service.go | 1170 | // ── Cross-instance /stop via StreamManager ─────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/service.go | 1968 | // ── Agent tool call progress formatting ────────────────────────────── | COMMENT |
| MEDIUM | internal/im/service.go | 1972 | // ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/service.go | 2829 | // ── File message handling ────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/service.go | 2834 | // ──────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/qaqueue.go | 292 | // ── Redis global concurrency gate ──────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/qaqueue.go | 354 | // ── Redis global per-user counting ────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/qaqueue.go | 386 | // ── Metrics logging ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/feishu/adapter.go | 580 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/feishu/adapter.go | 582 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/feishu/adapter.go | 654 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/feishu/adapter.go | 665 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/wecom/webhook_adapter.go | 521 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/wecom/webhook_adapter.go | 523 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/wecom/longconn.go | 255 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/im/wecom/longconn.go | 257 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …tend/src/views/integrations/ApiIntegrationSettings.vue | 992 | const apiKeyHeader = ` -H "X-API-Key: ${apiKey.value ? '<API_KEY>' : '<YOUR_API_KEY>'}"` | CODE |
| HIGH | …tend/src/views/integrations/ApiIntegrationSettings.vue | 992 | const apiKeyHeader = ` -H "X-API-Key: ${apiKey.value ? '<API_KEY>' : '<YOUR_API_KEY>'}"` | CODE |
| HIGH | frontend/src/views/integrations/ClawSkillLanding.vue | 136 | return `export WEKNORA_BASE_URL="${base}"\nexport WEKNORA_API_KEY="sk-your-api-key"` | CODE |
| HIGH | mcp-server/PROJECT_SUMMARY.md | 134 | export WEKNORA_API_KEY="your_api_key" | CODE |
| HIGH | mcp-server/EXAMPLES.md | 393 | "WEKNORA_API_KEY": "your_api_key" | CODE |
| HIGH | mcp-server/INSTALL.md | 188 | Environment=WEKNORA_API_KEY=your_api_key | CODE |
| HIGH | docs/BUILTIN_MCP_SERVICES.md | 71 | '{"api_key": "your-api-key"}'::jsonb, -- 认证配置 | CODE |
| HIGH | docs/OIDC认证调用流程.md | 570 | # secret: <YOUR_SECRET_HERE> | COMMENT |
| HIGH | docs/wiki/核心功能/内置MCP服务管理.md | 65 | '{"api_key": "your-api-key"}'::jsonb, | CODE |
| HIGH | docs/wiki/API参考/API文档概览.md | 25 | X-API-Key: your_api_key | CODE |
| HIGH | docs/api/agent.md | 385 | --header 'X-API-Key: your_api_key' | CODE |
| HIGH | docs/api/vector-store.md | 157 | "api_key": "your_api_key", | CODE |
| HIGH | docs/api/model.md | 62 | --header 'X-API-Key: your_api_key' | CODE |
| HIGH | docs/api/model.md | 66 | --header 'X-API-Key: your_api_key' | CODE |
| HIGH | docs/api/model.md | 124 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 142 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 163 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 185 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 208 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 233 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 252 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 271 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 324 | --header 'X-API-Key: your_api_key' | CODE |
| HIGH | docs/api/model.md | 342 | --header 'X-API-Key: your_api_key' | CODE |
| HIGH | docs/api/model.md | 372 | --header 'X-API-Key: your_api_key' \ | CODE |
| HIGH | docs/api/model.md | 401 | --header 'X-API-Key: your_api_key' | CODE |
| HIGH | docs/api/README.md | 35 | X-API-Key: your_api_key | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rc/views/knowledge/settings/DataSourceEditorDialog.vue | 184 | // Step 2: Resources | COMMENT |
| LOW⚡ | config/config.yaml | 54 | ## Step 1: Entity Extraction and Attribute Enrichment | COMMENT |
| LOW⚡ | config/config.yaml | 58 | ## Step 2: Relationship Extraction and Verification | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 132 | # Step 1: Split text by separators recursively | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 134 | # Step 2: Extract protected content positions | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 136 | # Step 3: Merge splits with protected content to ensure integrity | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 142 | # Step 4: Merge splits into final chunks with overlap | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 145 | # Step 5: Validate chunks and test restoration | COMMENT |
| LOW | internal/datasource/CONNECTOR_IMPLEMENTATION_GUIDE.md | 13 | ## Step 1: Create Connector Package Structure | COMMENT |
| LOW | internal/datasource/CONNECTOR_IMPLEMENTATION_GUIDE.md | 24 | ## Step 2: Define Platform Types (types.go) | COMMENT |
| LOW | internal/datasource/CONNECTOR_IMPLEMENTATION_GUIDE.md | 70 | ## Step 3: Implement API Client (client.go) | COMMENT |
| LOW | internal/datasource/CONNECTOR_IMPLEMENTATION_GUIDE.md | 113 | ## Step 4: Implement Connector Interface (connector.go) | COMMENT |
| LOW | internal/datasource/CONNECTOR_IMPLEMENTATION_GUIDE.md | 295 | ## Step 5: Register in Container | COMMENT |
| LOW | internal/datasource/CONNECTOR_IMPLEMENTATION_GUIDE.md | 334 | ## Step 6: Add Connector Type Constant | COMMENT |
| LOW | internal/datasource/CONNECTOR_IMPLEMENTATION_GUIDE.md | 345 | ## Step 7: Add Metadata | COMMENT |
| LOW | internal/datasource/CONNECTOR_IMPLEMENTATION_GUIDE.md | 363 | ## Step 8: Test Your Connector | COMMENT |
| LOW⚡ | internal/datasource/connector/feishu/client.go | 495 | // Step 1: create export task | COMMENT |
| LOW⚡ | internal/datasource/connector/feishu/client.go | 501 | // Step 2: poll until ready (max 60s, every 2s) | COMMENT |
| LOW | internal/datasource/connector/feishu/client.go | 524 | // Step 3: download file using file_token (NOT ticket) | COMMENT |
| LOW⚡ | …rnal/application/repository/knowledge_finalize_test.go | 229 | // Step 2: caller A snapshots the row with counter=5 in memory. | COMMENT |
| LOW⚡ | …rnal/application/repository/knowledge_finalize_test.go | 234 | // Step 3: an enrichment subtask decrements concurrently. | COMMENT |
| LOW⚡ | …rnal/application/repository/knowledge_finalize_test.go | 238 | // Step 4: caller A persists an unrelated change. The in-memory copy | COMMENT |
| LOW⚡ | …rnal/application/repository/knowledge_finalize_test.go | 243 | // Step 5: the live counter is still 4, not clobbered back to 5. | COMMENT |
| LOW⚡ | internal/application/service/message.go | 505 | // Step 1: Keyword search (direct PG ILIKE) | COMMENT |
| LOW⚡ | internal/application/service/message.go | 515 | // Step 2: Vector search via chat history knowledge base (if configured) | COMMENT |
| LOW | internal/application/service/message.go | 528 | // Step 3: Merge results based on mode | COMMENT |
| LOW⚡ | internal/application/service/message.go | 540 | // Step 4: Fetch partner messages (Q&A counterparts) to ensure complete pairs | COMMENT |
| LOW⚡ | internal/application/service/message.go | 543 | // Step 5: Group by request_id to merge Q&A pairs | COMMENT |
| LOW | internal/application/service/knowledgebase.go | 643 | // Step 1: Delete the knowledge base record first (mark as deleted) | COMMENT |
| LOW | internal/application/service/knowledgebase.go | 664 | // Step 2: Enqueue async task for heavy cleanup operations | COMMENT |
| LOW | internal/application/service/knowledgebase.go | 711 | // Step 1: Get all knowledge entries in this knowledge base | COMMENT |
| LOW | internal/application/service/knowledgebase.go | 722 | // Step 2: Delete all knowledge entries and their resources | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 2082 | // Step 2: Update knowledge status and metadata | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 2104 | // Step 3: Trigger async re-parsing based on knowledge type | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 3010 | // Step 2: Store images and update markdown references | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 3040 | // Step 3: Split into chunks using Go chunker | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 3090 | // Step 4: Process chunks (vectorize + index + enqueue async tasks) | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 55 | // Step 1: Select input | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 58 | // Step 2: Initial dedup | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 61 | // Step 3: Inject history references | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 76 | // Step 4: Resolve parent chunks | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 79 | // Step 5: Group by knowledge/chunkType and merge overlapping ranges | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 82 | // Step 6: Populate FAQ answers | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 85 | // Step 7: Expand short contexts | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 91 | // Step 8: Final dedup — catches exact duplicates plus partial content overlaps | COMMENT |
| LOW⚡ | internal/infrastructure/chunker/splitter.go | 287 | // Step 1: Find protected spans | COMMENT |
| LOW⚡ | internal/infrastructure/chunker/splitter.go | 290 | // Step 2: Split non-protected regions by separators, keep protected as atomic units. | COMMENT |
| LOW⚡ | internal/infrastructure/chunker/splitter.go | 295 | // Step 3: Merge units into chunks with overlap | COMMENT |
| LOW⚡ | internal/event/example_test.go | 65 | // Step 1: Query received | COMMENT |
| LOW⚡ | internal/event/example_test.go | 72 | // Step 2: Query rewrite | COMMENT |
| LOW⚡ | internal/event/example_test.go | 79 | // Step 3: Retrieval | COMMENT |
| LOW⚡ | internal/event/example_test.go | 86 | // Step 4: Rerank | COMMENT |
| LOW⚡ | skills/preloaded/doc-coauthoring/SKILL.md | 154 | ### Step 1: Clarifying Questions | COMMENT |
| LOW⚡ | skills/preloaded/doc-coauthoring/SKILL.md | 162 | ### Step 2: Brainstorming | COMMENT |
| LOW⚡ | skills/preloaded/doc-coauthoring/SKILL.md | 170 | ### Step 3: Curation | COMMENT |
| LOW | skills/preloaded/doc-coauthoring/SKILL.md | 182 | ### Step 4: Gap Check | COMMENT |
| LOW | skills/preloaded/doc-coauthoring/SKILL.md | 186 | ### Step 5: Drafting | COMMENT |
| LOW | skills/preloaded/doc-coauthoring/SKILL.md | 205 | ### Step 6: Iterative Refinement | COMMENT |
| LOW⚡ | skills/preloaded/doc-coauthoring/SKILL.md | 255 | ### Step 1: Predict Reader Questions | COMMENT |
| LOW⚡ | skills/preloaded/doc-coauthoring/SKILL.md | 261 | ### Step 2: Test with Sub-Agent | COMMENT |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rc/views/knowledge/settings/DataSourceEditorDialog.vue | 184 | // Step 2: Resources | COMMENT |
| LOW⚡ | config/config.yaml | 54 | ## Step 1: Entity Extraction and Attribute Enrichment | COMMENT |
| LOW⚡ | config/config.yaml | 58 | ## Step 2: Relationship Extraction and Verification | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 132 | # Step 1: Split text by separators recursively | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 134 | # Step 2: Extract protected content positions | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 136 | # Step 3: Merge splits with protected content to ensure integrity | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 142 | # Step 4: Merge splits into final chunks with overlap | COMMENT |
| LOW⚡ | docreader/splitter/splitter.py | 145 | # Step 5: Validate chunks and test restoration | COMMENT |
| LOW⚡ | internal/datasource/connector/feishu/client.go | 495 | // Step 1: create export task | COMMENT |
| LOW⚡ | internal/datasource/connector/feishu/client.go | 501 | // Step 2: poll until ready (max 60s, every 2s) | COMMENT |
| LOW | internal/datasource/connector/feishu/client.go | 524 | // Step 3: download file using file_token (NOT ticket) | COMMENT |
| LOW⚡ | …rnal/application/repository/knowledge_finalize_test.go | 229 | // Step 2: caller A snapshots the row with counter=5 in memory. | COMMENT |
| LOW⚡ | …rnal/application/repository/knowledge_finalize_test.go | 234 | // Step 3: an enrichment subtask decrements concurrently. | COMMENT |
| LOW⚡ | …rnal/application/repository/knowledge_finalize_test.go | 238 | // Step 4: caller A persists an unrelated change. The in-memory copy | COMMENT |
| LOW⚡ | …rnal/application/repository/knowledge_finalize_test.go | 243 | // Step 5: the live counter is still 4, not clobbered back to 5. | COMMENT |
| LOW⚡ | internal/application/service/message.go | 505 | // Step 1: Keyword search (direct PG ILIKE) | COMMENT |
| LOW⚡ | internal/application/service/message.go | 515 | // Step 2: Vector search via chat history knowledge base (if configured) | COMMENT |
| LOW | internal/application/service/message.go | 528 | // Step 3: Merge results based on mode | COMMENT |
| LOW⚡ | internal/application/service/message.go | 540 | // Step 4: Fetch partner messages (Q&A counterparts) to ensure complete pairs | COMMENT |
| LOW⚡ | internal/application/service/message.go | 543 | // Step 5: Group by request_id to merge Q&A pairs | COMMENT |
| LOW | internal/application/service/knowledgebase.go | 643 | // Step 1: Delete the knowledge base record first (mark as deleted) | COMMENT |
| LOW | internal/application/service/knowledgebase.go | 664 | // Step 2: Enqueue async task for heavy cleanup operations | COMMENT |
| LOW | internal/application/service/knowledgebase.go | 711 | // Step 1: Get all knowledge entries in this knowledge base | COMMENT |
| LOW | internal/application/service/knowledgebase.go | 722 | // Step 2: Delete all knowledge entries and their resources | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 2082 | // Step 2: Update knowledge status and metadata | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 2104 | // Step 3: Trigger async re-parsing based on knowledge type | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 3010 | // Step 2: Store images and update markdown references | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 3040 | // Step 3: Split into chunks using Go chunker | COMMENT |
| LOW | internal/application/service/knowledge_process.go | 3090 | // Step 4: Process chunks (vectorize + index + enqueue async tasks) | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 55 | // Step 1: Select input | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 58 | // Step 2: Initial dedup | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 61 | // Step 3: Inject history references | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 76 | // Step 4: Resolve parent chunks | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 79 | // Step 5: Group by knowledge/chunkType and merge overlapping ranges | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 82 | // Step 6: Populate FAQ answers | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 85 | // Step 7: Expand short contexts | COMMENT |
| LOW⚡ | internal/application/service/chat_pipeline/merge.go | 91 | // Step 8: Final dedup — catches exact duplicates plus partial content overlaps | COMMENT |
| LOW⚡ | internal/infrastructure/chunker/splitter.go | 287 | // Step 1: Find protected spans | COMMENT |
| LOW⚡ | internal/infrastructure/chunker/splitter.go | 290 | // Step 2: Split non-protected regions by separators, keep protected as atomic units. | COMMENT |
| LOW⚡ | internal/infrastructure/chunker/splitter.go | 295 | // Step 3: Merge units into chunks with overlap | COMMENT |
| LOW⚡ | internal/event/example_test.go | 65 | // Step 1: Query received | COMMENT |
| LOW⚡ | internal/event/example_test.go | 72 | // Step 2: Query rewrite | COMMENT |
| LOW⚡ | internal/event/example_test.go | 79 | // Step 3: Retrieval | COMMENT |
| LOW⚡ | internal/event/example_test.go | 86 | // Step 4: Rerank | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rerank_server_demo.py | 52 | except Exception as e: | CODE |
| LOW | docreader/config.py | 29 | except Exception: | CODE |
| LOW | docreader/main.py | 89 | except Exception: | CODE |
| LOW | docreader/main.py | 137 | except Exception: | CODE |
| LOW | docreader/main.py | 220 | except Exception as e: | CODE |
| LOW | docreader/main.py | 239 | except Exception as e: | CODE |
| LOW | docreader/splitter/splitter.py | 487 | except Exception as e: | CODE |
| LOW | docreader/splitter/splitter.py | 526 | except Exception as e: | CODE |
| LOW | docreader/utils/__init__.py | 61 | except Exception as e: | CODE |
| LOW | docreader/utils/__init__.py | 81 | except Exception as e: | CODE |
| LOW⚡ | docreader/parser/pdf_parser.py | 609 | except Exception: | CODE |
| LOW⚡ | docreader/parser/pdf_parser.py | 615 | except Exception: | CODE |
| LOW⚡ | docreader/parser/pdf_parser.py | 620 | except Exception: | CODE |
| LOW | docreader/parser/pdf_parser.py | 197 | except Exception: | CODE |
| LOW | docreader/parser/pdf_parser.py | 593 | except Exception: | CODE |
| LOW | docreader/parser/pdf_parser.py | 649 | except Exception: | CODE |
| LOW | docreader/parser/pdf_parser.py | 984 | except Exception: | CODE |
| LOW | docreader/parser/pdf_parser.py | 1105 | except Exception: | CODE |
| LOW | docreader/parser/pdf_parser.py | 1214 | except Exception: | CODE |
| LOW | docreader/parser/pdf_parser.py | 1221 | except Exception: | CODE |
| LOW | docreader/parser/pdf_parser.py | 1365 | except Exception as e: | CODE |
| LOW | docreader/parser/pdf_parser.py | 1421 | except Exception: | CODE |
| LOW | docreader/parser/opendataloader_parser.py | 88 | except Exception as e: | CODE |
| LOW | docreader/parser/markitdown_parser.py | 71 | except Exception: | CODE |
| LOW | docreader/parser/registry.py | 98 | except Exception as e: | CODE |
| LOW⚡ | docreader/parser/docx_parser.py | 337 | except Exception as e: | CODE |
| LOW⚡ | docreader/parser/docx_parser.py | 340 | except Exception as e: | CODE |
| LOW⚡ | docreader/parser/docx_parser.py | 1517 | except Exception as e: | CODE |
| LOW⚡ | docreader/parser/docx_parser.py | 1525 | except Exception as e: | CODE |
| LOW⚡ | docreader/parser/docx_parser.py | 1531 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 135 | except Exception as exc: | CODE |
| LOW | docreader/parser/docx_parser.py | 179 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 205 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 284 | except Exception as backup_error: | CODE |
| LOW | docreader/parser/docx_parser.py | 559 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 581 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 846 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 931 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 1009 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 1027 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 1128 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 1165 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 1286 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 1319 | except Exception as e: | CODE |
| LOW | docreader/parser/docx_parser.py | 1477 | except Exception as blob_error: | CODE |
| LOW | docreader/parser/pptx_media.py | 76 | except Exception as exc: | CODE |
| LOW | docreader/parser/epub_parser.py | 62 | except Exception as e: | CODE |
| LOW | docreader/parser/epub_parser.py | 104 | except Exception as e: | CODE |
| LOW | docreader/parser/epub_parser.py | 127 | except Exception as e: | CODE |
| LOW | docreader/parser/epub_parser.py | 150 | except Exception: | CODE |
| LOW | docreader/parser/epub_parser.py | 166 | except Exception as e: | CODE |
| LOW | docreader/parser/epub_parser.py | 233 | except Exception as e: | CODE |
| LOW | docreader/parser/epub_parser.py | 266 | except Exception as e: | CODE |
| LOW | docreader/parser/chain_parser.py | 62 | except Exception: | CODE |
| LOW | docreader/parser/doc_parser.py | 51 | except Exception as e: | CODE |
| LOW | docreader/parser/doc_parser.py | 127 | except Exception as e: | CODE |
| LOW | docreader/parser/web_parser.py | 94 | except Exception: | CODE |
| LOW | docreader/parser/web_parser.py | 109 | except Exception: | CODE |
| LOW | docreader/parser/web_parser.py | 197 | except Exception as e: | CODE |
| LOW | docreader/parser/web_parser.py | 224 | except Exception as e: | CODE |
| 21 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README_JA.md | 47 | # 💡 WeKnora — ドキュメントを「生きたナレッジ」へ:RAG・Agent 推論・自動 Wiki を統合した LLM ナレッジフレームワーク | COMMENT |
| MEDIUM | README_KO.md | 47 | # 💡 WeKnora — 문서를 살아있는 지식으로: RAG · Agent 추론 · 자동 Wiki 통합 LLM 지식 프레임워크 | COMMENT |
| MEDIUM | README.md | 47 | # 💡 WeKnora — Turn Documents into Living Knowledge with RAG, Agents and Auto-Wiki | COMMENT |
| MEDIUM | README_CN.md | 47 | # 💡 WeKnora — 让文档活起来:RAG、Agent 推理与自动 Wiki 一体化的知识框架 | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 32 | # RAG Q&A — classic evidence-based retrieval over chunk indexes. | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 96 | # Hybrid RAG + Wiki — single agent that orchestrates both indexes. | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 96 | # Hybrid RAG + Wiki — single agent that orchestrates both indexes. | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 130 | # - KB has wiki + chunks → full "wiki-first, RAG-verify" workflow | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 131 | # - KB has only chunks → fallback to pure RAG (see prompt's "Fallback rules") | COMMENT |
| MEDIUM⚡ | config/agent_type_presets.yaml | 175 | # ChunkTypeTableColumn chunks, which are produced by the normal RAG | COMMENT |
| MEDIUM | config/prompt_templates/intent_prompts.yaml | 2 | # Used to override the default RAG system prompt when the query intent | COMMENT |
| MEDIUM | mcp-server/weknora_mcp_server.py | 1230 | # Unlike RAG chat, the agent pipeline allows multi-step reasoning with explicit tool calls. | COMMENT |
| MEDIUM | internal/event/SUMMARY.md | 61 | │ └── main.go # 完整的 RAG 流程演示 | CODE |
| MEDIUM | docs/CHUNKING.md | 68 | #### Token-limit guide per embedding model | COMMENT |
| MEDIUM | cli/README.md | 99 | # 9. Inspect a document's chunks for RAG retrieval debug | COMMENT |
| MEDIUM | cli/cmd/mcp/mcp.go | 4 | // the JSON-RPC 2.0 wire protocol agentic IDEs use to call external tools. | COMMENT |
| MEDIUM | cli/cmd/model/create.go | 132 | // Mode-specific guardrails: a remote model needs a provider to route | COMMENT |
| MEDIUM | cli/skills/weknora-rag-search/SKILL.md | 8 | # WeKnora — retrieval & RAG queries | COMMENT |
| MEDIUM | cli/skills/weknora-rag-search/references/chat.md | 1 | # `chat` and `session ask` — RAG answers and raw streams | COMMENT |
| MEDIUM | skills/preloaded/data-processor/SKILL.md | 108 | ### 分析 RAG 检索结果 | COMMENT |
| MEDIUM | skills/preloaded/openmaic-classroom/SKILL.md | 83 | ### Phase 1.1: RAG 结果 → Requirement 转换(仅适用于场景 2) | COMMENT |
| MEDIUM | …d/openmaic-classroom/references/requirement-builder.md | 25 | ### 模板 2: 基于 RAG 检索结果 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docreader/auth.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/config.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/main.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/splitter/splitter.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/utils/tempfile.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/utils/request.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/utils/request.py | 17 | def set_request_id(request_id: str) -> None: | CODE |
| LOW | docreader/utils/__init__.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/utils/endecode.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/models/document.py | 78 | def set_content(self, content: str) -> None: | CODE |
| LOW | docreader/parser/excel_convert.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/pdf_parser.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/opendataloader_parser.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/ppt_convert.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/markdown_parser.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/markitdown_parser.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/docx2_parser.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/xlsx_merge.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/excel_parser.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/registry.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/docx_parser.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/concurrency.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/__init__.py | 27 | __all__ = [ | CODE |
| LOW | docreader/parser/base_parser.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/parser.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/image_parser.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/pptx_media.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/epub_parser.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/chain_parser.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/doc_parser.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/doc_parser.py | 95 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/web_parser.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | docreader/parser/mhtml_parser.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | mcp-server/__init__.py | 14 | __all__ = ["WeKnoraClient", "run"] | CODE |
| LOW | mcp-server/upload_paths.py | 11 | def set_active_transport(transport: str) -> None: | CODE |
| LOW | mcp-server/weknora_mcp_server.py | 30 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rerank_server_demo.py | 67 | CODE | |
| LOW | docreader/tests/test_excel_parser.py | 18 | CODE | |
| LOW | docreader/tests/test_excel_parser.py | 112 | CODE | |
| LOW | docreader/splitter/splitter.py | 187 | CODE | |
| LOW | docreader/splitter/splitter.py | 424 | CODE | |
| LOW | docreader/splitter/header_hook.py | 143 | CODE | |
| LOW | docreader/utils/request.py | 87 | CODE | |
| LOW | docreader/utils/__init__.py | 46 | CODE | |
| LOW | docreader/utils/__init__.py | 66 | CODE | |
| LOW | docreader/utils/endecode.py | 23 | CODE | |
| LOW | docreader/parser/excel_convert.py | 49 | CODE | |
| LOW | docreader/parser/pdf_parser.py | 528 | CODE | |
| LOW | docreader/parser/pdf_parser.py | 1188 | CODE | |
| LOW | docreader/parser/pdf_parser.py | 1439 | CODE | |
| LOW | docreader/parser/opendataloader_parser.py | 67 | CODE | |
| LOW | docreader/parser/ppt_convert.py | 37 | CODE | |
| LOW | docreader/parser/xlsx_merge.py | 12 | CODE | |
| LOW | docreader/parser/excel_parser.py | 68 | CODE | |
| LOW | docreader/parser/docx_parser.py | 1170 | CODE | |
| LOW | docreader/parser/docx_parser.py | 1325 | CODE | |
| LOW | docreader/parser/docx_parser.py | 1425 | CODE | |
| LOW | docreader/parser/docx_parser.py | 104 | CODE | |
| LOW | docreader/parser/docx_parser.py | 210 | CODE | |
| LOW | docreader/parser/docx_parser.py | 803 | CODE | |
| LOW | docreader/parser/docx_parser.py | 862 | CODE | |
| LOW | docreader/parser/docx_parser.py | 981 | CODE | |
| LOW | docreader/parser/docx_parser.py | 1055 | CODE | |
| LOW | docreader/parser/epub_parser.py | 68 | CODE | |
| LOW | docreader/parser/epub_parser.py | 159 | CODE | |
| LOW | docreader/parser/doc_parser.py | 106 | CODE | |
| LOW | docreader/parser/doc_parser.py | 173 | CODE | |
| LOW | docreader/parser/mhtml_parser.py | 39 | CODE | |
| LOW | docreader/scripts/parse_local.py | 20 | CODE | |
| LOW | dataset/qa_dataset.py | 219 | CODE | |
| LOW | mcp-server/main.py | 108 | CODE | |
| LOW | mcp-server/weknora_mcp_server.py | 1063 | CODE | |
| LOW | mcp-server/weknora_mcp_server.py | 384 | CODE | |
| LOW | …s/preloaded/data-processor/scripts/format_converter.py | 132 | CODE | |
| LOW | skills/preloaded/data-processor/scripts/extract_info.py | 135 | CODE | |
| LOW | skills/preloaded/data-processor/scripts/analyze.py | 166 | CODE | |
| LOW | …oaded/openmaic-classroom/scripts/rag-to-requirement.py | 46 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rerank_server_demo.py | 5 | CODE | |
| LOW | docreader/tests/test_pdf_router.py | 6 | CODE | |
| LOW | docreader/utils/ssrf.py | 7 | CODE | |
| LOW | docreader/parser/excel_convert.py | 3 | CODE | |
| LOW | docreader/parser/opendataloader_parser.py | 11 | CODE | |
| LOW | docreader/parser/ppt_convert.py | 3 | CODE | |
| LOW | docreader/parser/markdown_parser.py | 16 | CODE | |
| LOW | docreader/parser/xlsx_merge.py | 3 | CODE | |
| LOW | docreader/parser/registry.py | 2 | CODE | |
| LOW | docreader/parser/__init__.py | 16 | CODE | |
| LOW | docreader/parser/__init__.py | 17 | CODE | |
| LOW | docreader/parser/__init__.py | 18 | CODE | |
| LOW | docreader/parser/__init__.py | 19 | CODE | |
| LOW | docreader/parser/__init__.py | 20 | CODE | |
| LOW | docreader/parser/__init__.py | 21 | CODE | |
| LOW | docreader/parser/__init__.py | 22 | CODE | |
| LOW | docreader/parser/__init__.py | 23 | CODE | |
| LOW | docreader/parser/__init__.py | 23 | CODE | |
| LOW | docreader/parser/__init__.py | 24 | CODE | |
| LOW | docreader/parser/xlsx_repair.py | 3 | CODE | |
| LOW | docreader/parser/pptx_media.py | 3 | CODE | |
| LOW | docreader/parser/doc_parser.py | 5 | CODE | |
| LOW | mcp-server/test_module.py | 20 | CODE | |
| LOW | mcp-server/test_module.py | 24 | CODE | |
| LOW | mcp-server/test_imports.py | 7 | CODE | |
| LOW | mcp-server/test_imports.py | 14 | CODE | |
| LOW | mcp-server/test_imports.py | 14 | CODE | |
| LOW | mcp-server/test_imports.py | 28 | CODE | |
| LOW | mcp-server/test_imports.py | 33 | CODE | |
| LOW | mcp-server/__init__.py | 12 | CODE | |
| LOW | mcp-server/__init__.py | 12 | CODE | |
| LOW | mcp-server/upload_paths.py | 3 | CODE | |
| LOW | mcp-server/main.py | 30 | CODE | |
| LOW | mcp-server/main.py | 31 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | internal/middleware/access_test.go | 24 | // EnableCrossTenantAccess flag set as requested. EnableRBAC is left at | COMMENT |
| HIGH | internal/types/interfaces/wiki_page.go | 346 | // that do not have AI-generated document questions or recommended FAQ entries. | COMMENT |
| HIGH | internal/application/repository/wiki_page.go | 894 | // the KB has no FAQ entries or AI-generated document questions (typical for | COMMENT |
| HIGH | internal/application/service/custom_agent.go | 707 | // document chunks carry AI-generated questions (question_generation is skipped | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/components/UserMenu.vue | 274 | email: 'user@example.com', | CODE |
| LOW | frontend/src/components/UserMenu.vue | 548 | email: user.email || 'user@example.com', | CODE |
| LOW | frontend/src/i18n/embed.ts | 429 | "placeholder": "直接向模型提问", | CODE |
| LOW | frontend/src/i18n/embed.ts | 905 | "placeholder": "Ask questions directly to the model", | CODE |
| LOW | internal/handler/system_password_reset_test.go | 87 | ID: "admin-user", Username: "admin", Email: "admin@example.com", | CODE |
| LOW | internal/handler/system_password_reset_test.go | 92 | "email": "admin@example.com", "new_password": "FreshPass9", | CODE |
| LOW | internal/middleware/auth_role_test.go | 246 | svc.seedActive("placeholder", 8, types.TenantRoleAdmin) | CODE |
| LOW | internal/datasource/connector/feishu/connector_test.go | 38 | TenantAccessToken: "fake-token", | CODE |
| LOW | internal/datasource/connector/feishu/connector_test.go | 190 | TenantAccessToken: "fake-token", | CODE |
| LOW | internal/agent/prompts_wiki.go | 148 | "name": "Acme Corp", | CODE |
| LOW | internal/agent/prompts_wiki.go | 233 | "name": "Acme Corp", | CODE |
| LOW | internal/agent/prompts_wiki.go | 455 | - "Acme Corp" → "Acme Corporation" (same company, abbreviation) | CODE |
| LOW | internal/models/provider/provider.go | 130 | Placeholder string `json:"placeholder"` | CODE |
| LOW | internal/application/service/wiki_ingest_dedup_test.go | 160 | // filter keeps legitimate merge candidates like "Acme Corp" ↔ "Acme Corporation". | COMMENT |
| LOW | internal/application/service/wiki_ingest_dedup_test.go | 164 | nameGramSets: gramsPerSurface([]string{"Acme Corp"}), | CODE |
| LOW | internal/application/service/wiki_ingest_dedup.go | 35 | // is excluded while "Acme Corp" vs "Acme Corporation" (Jaccard ≈ 0.5) | COMMENT |
| LOW | internal/application/service/wiki_ingest_test.go | 18 | {"Acme Corp", "acme-corp"}, | CODE |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 13 | body := strings.Repeat("Lorem ipsum dolor sit amet consectetur adipiscing elit. ", 4) | CODE |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 13 | body := strings.Repeat("Lorem ipsum dolor sit amet consectetur adipiscing elit. ", 4) | CODE |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 34 | if strings.Contains(c.Content, "## Section B") && strings.Contains(c.Content, "Lorem ipsum") { | CODE |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 73 | body := strings.Repeat("Lorem ipsum dolor sit amet consectetur adipiscing elit. ", 4) | CODE |
| LOW | …ternal/infrastructure/chunker/heading_splitter_test.go | 73 | body := strings.Repeat("Lorem ipsum dolor sit amet consectetur adipiscing elit. ", 4) | CODE |
| LOW | internal/infrastructure/chunker/strategy_test.go | 120 | body := strings.Repeat("Lorem ipsum dolor sit amet. ", 40) | CODE |
| LOW | internal/infrastructure/chunker/strategy_test.go | 120 | body := strings.Repeat("Lorem ipsum dolor sit amet. ", 40) | CODE |
| LOW | docs/api/organization.md | 620 | "email": "admin@example.com", | CODE |
| LOW | cli/acceptance/testdata/wire/auth_status.success.json | 1 | {"ok":true,"data":{"profile":"","auth_source":"profile + keyring","user_id":"usr_abc","email":"user@example.com","tenant | CODE |
| LOW | cli/acceptance/contract/wire_test.go | 238 | resp.Data.User = &sdk.AuthUser{ID: "usr_abc", Email: "user@example.com", TenantID: 42} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docreader/parser/excel_parser.py | 113 | # Create a chunk for this row with position tracking | COMMENT |
| MEDIUM | docreader/parser/docx_parser.py | 373 | # Create an estimated page mapping | COMMENT |
| MEDIUM | docreader/parser/docx_parser.py | 963 | # Create the final text with proper ordering | COMMENT |
| MEDIUM | docreader/parser/docx_parser.py | 1112 | # Create a new image | COMMENT |
| MEDIUM | docreader/parser/docx_parser.py | 1154 | # Create a temporary file | COMMENT |
| MEDIUM | docreader/parser/chain_parser.py | 29 | # Create a custom FirstParser with specific parser classes | STRING |
| MEDIUM | docreader/parser/chain_parser.py | 103 | # Create a custom PipelineParser with specific parser classes | STRING |
| MEDIUM | docreader/parser/doc_parser.py | 201 | # Create a temporary directory to store the converted file | COMMENT |
| MEDIUM | mcp-server/weknora_mcp_server.py | 116 | # Create a persistent session for connection pooling and performance | COMMENT |
| MEDIUM | mcp-server/weknora_mcp_server.py | 1187 | # Create a knowledge-base-bound chat session with strategy configuration. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cmd/desktop/main.go | 40 | // and instead uses robust DOM-traversal via el.closest() plus a Y-position | COMMENT |
| MEDIUM | frontend/package-lock.json | 4464 | "resolved": "https://mirrors.tencent.com/npm/robust-predicates/-/robust-predicates-3.0.3.tgz", | CODE |
| MEDIUM | frontend/src/components/css/chat-timeline-loading.less | 29 | // One full gradient width (background-size is 200%) so the loop is seamless. | COMMENT |
| MEDIUM | internal/searchutil/normalize.go | 11 | // NormalizeKeywordScores normalizes keyword match scores in-place using robust percentile bounds. | COMMENT |
| MEDIUM | …ion/repository/retriever/opensearch/repository_test.go | 215 | // parseMajorMinor — robust semver parsing | COMMENT |
| MEDIUM | cli/cmd/doctor/doctor.go | 288 | // but type-assertion is structurally more robust to scheme renames. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docreader/splitter/splitter.py | 250 | # Check if adding this split would exceed chunk size | COMMENT |
| LOW | docreader/parser/docx_parser.py | 192 | # Check if the generated text is empty | COMMENT |
| LOW | docreader/parser/docx_parser.py | 654 | # Check if the document contains images to optimize processing speed | COMMENT |
| LOW | docreader/parser/docx_parser.py | 878 | # Check if there are images | COMMENT |
| LOW | docreader/parser/docx_parser.py | 944 | if line_data.content_sequence: # Check if we have processed_content | CODE |
| LOW | docreader/parser/doc_parser.py | 148 | # Check if antiword is installed | COMMENT |
| LOW | docreader/parser/doc_parser.py | 186 | # Check if LibreOffice or OpenOffice is installed | COMMENT |
| LOW | docreader/parser/doc_parser.py | 282 | # Check if path is set in environment variable | COMMENT |
| LOW | scripts/migrate.sh | 26 | # Check if migrate tool is installed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | frontend/src/views/agent/AgentEditorModal.vue | 2285 | formData.value.config.question_suggestions.starters.items.splice(index, 1); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docreader/utils/endecode.py | 24 | Convert image to base64 encoded string. This function handles multiple image input formats and converts them to | STRING |
| HIGH | docreader/utils/endecode.py | 79 | Decode a base64 encoded image string back to bytes. This function converts a base64 encoded string representation o | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | config/prompt_templates/agent_system_prompt.yaml | 287 | * **MCP Tools (dynamic):** Any tools whose names do NOT start with `wiki_` and are not the built-in `thinking` / ` | COMMENT |
| 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 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docreader/auth.py | 129 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/preloaded/data-processor/scripts/analyze.py | 94 | CODE |