AI Slop Code Risk Monitor

hicccc77/WeFlow

SlopCodeMonitor badge for hicccc77/WeFlow Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

WeFlow - 一个本地的微信聊天记录导出和年度报告应用

2.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for hicccc77/WeFlow, a TypeScript project with 15,671 GitHub stars. SynthScan examined 264,816 lines of code across 415 source files, recording 527 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 2.7 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

2.7
Adjusted Signal
2.7
Raw Pattern Score
100%
Time Factor
2026-10-28
Last Push
15.7K
Stars
TypeScript
Language
264.8K
Lines of Code
415
Files
527
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 7.4/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 418 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

Are imports declared and package/API names verified? 8 finding(s).

Agent Over-Engineering Ratio 12.3/100 · LOW

Are wrappers, guards, and repeated structures necessary? 506 finding(s).

PR Review Velocity Impact 13.0/100 · LOW

Which changes need focused human review? 527 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 1MEDIUM 102LOW 424

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 527 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers405 hits · 386 pts
SeverityFileLineSnippetContext
LOWelectron/main.ts109function agentMemoryConversationRoleText(messages: unknown, role: 'user' | 'assistant'): string {CODE
LOWelectron/main.ts120function recentAgentMemoryExchanges(limit = 64): AgentMemoryConversationExchange[] {CODE
LOWelectron/main.ts1435function createErrorReferenceWindow(query?: string, requestedParent?: BrowserWindow | null): BrowserWindow {CODE
LOWelectron/main.ts1660function createChatHistoryPayloadWindow(payloadId: string) {CODE
LOWelectron/main.ts1668function createChatHistoryRouteWindow(route: string) {CODE
LOWelectron/main.ts1829function reloadMainWindowAfterOnboarding() {CODE
LOWelectron/transcribeWorker.ts91function richTranscribePostProcess(text: string): string {CODE
LOWelectron/windows/notificationWindow.ts46export function setNotificationNavigateHandler(CODE
LOWelectron/windows/notificationWindow.ts184export function destroyNotificationWindow() {CODE
LOWelectron/windows/notificationWindow.ts381async function showViaSystemNotification(data: any) {CODE
LOWelectron/windows/notificationWindow.ts419function nextNotificationDeliveryId() {CODE
LOWelectron/windows/notificationWindow.ts504export async function registerNotificationHandlers() {CODE
LOWelectron/assets/wasm/wasm_video_decode.js979function updateGlobalBufferAndViews(buf) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js1268 function receiveInstantiationResult(result) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js1688 function simpleReadValueFromPointer(pointer) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js1751 function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js1981 function shallowCopyInternalPointer(o) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js1993 function throwInstanceAlreadyDeleted(obj) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js2198 function constNoSmartPtrRawPointerToWireType(destructors, handle) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js2293 function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js2349 function getInheritedInstanceCount() {CODE
LOWelectron/assets/wasm/wasm_video_decode.js2353 function getLiveInheritedInstances() {CODE
LOWelectron/assets/wasm/wasm_video_decode.js3258 function floatReadValueFromPointer(name, shift) {CODE
LOWelectron/assets/wasm/wasm_video_decode.js3306 function integerReadValueFromPointer(name, shift, signed) {CODE
LOWelectron/services/agentModelLedService.ts393function isAgentVoiceModelRequiredError(error: unknown): boolean {CODE
LOWelectron/services/agentModelLedService.ts398function agentDirectSessionPageHeader(displayName: string, startAt: string, endAt: string, pageId: string): string {CODE
LOWelectron/services/agentModelLedService.ts413function compactAgentTimelineEventPreview(CODE
LOWelectron/services/agentModelLedService.ts529function summarizeAgentActivityRows(rows: AgentActivityDateRow[]) {CODE
LOWelectron/services/agentModelLedService.ts641function repairSerializedStructuredValue(CODE
LOWelectron/services/agentModelLedService.ts858function compactToolOutputForStorage(toolName: string, output: unknown): unknown {CODE
LOWelectron/services/agentModelLedService.ts862function compactToolInputForStorage(toolName: string, input: unknown): unknown {CODE
LOWelectron/services/agentModelLedService.ts876function compactConversationMessages(messages: unknown): UIMessage[] {CODE
LOWelectron/services/agentModelLedService.ts1126function compactActivitySummaryForWorkspace(value: unknown): unknown {CODE
LOWelectron/services/agentModelLedService.ts1152function compactTimelineNavigationForReconnaissance(CODE
LOWelectron/services/agentModelLedService.ts1262function compactFocusedTimelineNavigation(value: unknown): Array<Record<string, unknown>> {CODE
LOWelectron/services/agentModelLedService.ts1307function compactReconnaissanceActivitySummary(value: unknown): unknown {CODE
LOWelectron/services/agentModelLedService.ts1333function summarizeToolOutputForWorkspace(toolName: string, output: unknown): unknown {CODE
LOWelectron/services/agentModelLedService.ts1613function compactPersistedConversationManifestForWorkspace(CODE
LOWelectron/services/agentModelLedService.ts1659function compactPersistedTimelineNavigationForWorkspace(output: unknown): unknown {CODE
LOWelectron/services/agentModelLedService.ts1692function summarizeAcknowledgedToolOutputForWorkspace(toolName: string, output: unknown): unknown {CODE
LOWelectron/services/agentModelLedService.ts1744function compactExactRawReuseResult(toolName: string, output: unknown): unknown {CODE
LOWelectron/services/agentMemoryRuntimeGuidance.ts10export function mergeAgentRuntimeMemoryEntries(CODE
LOWelectron/services/agentMemoryRuntimeGuidance.ts25export function agentRuntimeMemoryGuidance(entries: AgentRuntimeMemoryEntry[]): string {CODE
LOWelectron/services/agentTitleService.ts32export function normalizeGeneratedAgentTitle(value: unknown): string | null {CODE
LOWelectron/services/openAICompatibleFetch.ts33function createToolCallStreamState(): ToolCallStreamState {CODE
LOWelectron/services/openAICompatibleFetch.ts241export function normalizeOpenAICompatibleChunk(CODE
LOWelectron/services/openAICompatibleFetch.ts320function createTextDecoderTransform(): TransformStream<Uint8Array, string> {CODE
LOWelectron/services/openAICompatibleFetch.ts501export function createOpenAICompatibleFetch(CODE
LOWelectron/services/agentRetryPolicy.ts24export function isAgentProviderPoolExhaustedError(error: unknown): boolean {CODE
LOW⚡electron/services/agentRetryPolicy.ts67export function isAgentNetworkRetryExhaustedError(error: unknown): error is AgentNetworkRetryExhaustedError {CODE
LOW⚡electron/services/agentRetryPolicy.ts72export function isAgentRetryExhaustedError(error: unknown): error is AgentNetworkRetryExhaustedError | AgentModelRetryExCODE
LOW⚡electron/services/agentRetryPolicy.ts77export function isAgentConcurrencyLimitError(error: unknown): boolean {CODE
LOW⚡electron/services/agentRetryPolicy.ts92export function isRetryableAgentTransportError(error: unknown): boolean {CODE
LOW⚡electron/services/agentRetryPolicy.ts98export function agentTransportRetryDelayMs(error: unknown, attempt: number): number {CODE
LOW⚡electron/services/agentRetryPolicy.ts105export async function waitForAgentTransportRetry(delayMs: number, signal?: AbortSignal): Promise<void> {CODE
LOWelectron/services/agentWebSearchPolicy.ts9export function explicitlyRequestsWebSearch(value: unknown): boolean {CODE
LOWelectron/services/agentWebSearchPolicy.ts19export function shouldRequireAgentWebSearch(CODE
LOWelectron/services/agentMemoryQuality.ts43export function inspectAutomaticMemoryEntry(entry: AgentMemoryQualityEntry): AgentMemoryQualityIssue[] {CODE
LOWelectron/services/agentTextRedaction.ts33export function normalizeAgentSensitiveText(value: string): string {CODE
LOWelectron/services/agentTextRedaction.ts76export function findChineseMobileCandidates(value: string): AgentSensitiveTextMatch[] {CODE
345 more matches not shown…
Decorative Section Separators101 hits · 312 pts
SeverityFileLineSnippetContext
MEDIUMelectron/services/insightService.ts34// ─── 常量 ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts88// ─── 类型 ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts134// ─── 日志 ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts158// ─── 工具函数 ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts405// ─── InsightService 主类 ──────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts457 // ── 公开 API ────────────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts1058 // ── 私有方法 ────────────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts1371 // ── 沉默联系人扫描 ──────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts1460 // ── 活跃会话分析 ────────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts1580 // ── 核心见解生成 ────────────────────────────────────────────────────────────COMMENT
MEDIUMelectron/services/insightService.ts1611 // ── 构建 prompt ────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/stores/exportTaskStore.ts13// ─── Types ───────────────────────────────────────────────────COMMENT
MEDIUMsrc/stores/exportTaskStore.ts51// ─── Store ───────────────────────────────────────────────────COMMENT
MEDIUMsrc/pages/ChatPage.scss2644// ═══════════════════════════════════════════COMMENT
MEDIUMsrc/pages/ChatPage.scss2646// ═══════════════════════════════════════════COMMENT
MEDIUMsrc/pages/Export/types.ts10// ─── Tabs & Enums ────────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts58// ─── Export Options ──────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts82// ─── Session ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts94// ─── Task Progress ───────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts133// ─── Export Task ──────────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts169// ─── Export Dialog ────────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts181// ─── Session Detail ──────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts211// ─── Session Metrics ─────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts257// ─── Session Load Trace ──────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts273// ─── Contacts Loading ────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/types.ts295// ─── Automation Draft (for the create/edit form) ─────────────COMMENT
MEDIUMsrc/pages/Export/types.ts320// ─── Re-exports for convenience ──────────────────────────────COMMENT
MEDIUMsrc/pages/Export/constants.ts18// ─── Content type labels ─────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/constants.ts32// ─── Conversation tab labels ─────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/constants.ts41// ─── Export format options ────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/constants.ts56// ─── Display name options ────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/constants.ts70// ─── Write layout options ────────────────────────────────────COMMENT
MEDIUM⚡src/pages/Export/constants.ts90// ─── File size presets ───────────────────────────────────────COMMENT
MEDIUM⚡src/pages/Export/constants.ts95// ─── Default txt export columns ──────────────────────────────COMMENT
MEDIUM⚡src/pages/Export/constants.ts99// ─── Background task labels ──────────────────────────────────COMMENT
MEDIUM⚡src/pages/Export/constants.ts121// ─── Conversation tab sort priority ──────────────────────────COMMENT
MEDIUM⚡src/pages/Export/constants.ts130// ─── Default sort config ─────────────────────────────────────COMMENT
MEDIUM⚡src/pages/Export/constants.ts134// ─── Timing constants ────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/constants.ts155// ─── Default export options ──────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/constants.ts182// ─── Empty progress factory ──────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/ExportPage.scss13// ─── Top panel ───────────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/ExportPage.scss20// ─── Body (session list + bottom task panel) ─────────────────COMMENT
MEDIUMsrc/pages/Export/ExportPage.scss49// ─── Selection Action Bar ────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/ExportPage.scss108// ─── Global Settings Modal ───────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/performance.ts10// ─── Stage resolution ────────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/performance.ts19// ─── Performance object factories ────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/performance.ts36// ─── Session name resolution ─────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/performance.ts46// ─── Apply progress to performance ──────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/performance.ts96// ─── Finalize performance on task completion ─────────────────COMMENT
MEDIUMsrc/pages/Export/utils/performance.ts145// ─── Top N slowest sessions ──────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/progress.ts8// ─── Progress comparison ─────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/progress.ts30// ─── Progress normalization ──────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/progress.ts45// ─── Progress payload signature (for dedup) ──────────────────COMMENT
MEDIUMsrc/pages/Export/utils/progress.ts68// ─── Task status helpers ─────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/progress.ts107// ─── Background task progress parsing ────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/progress.ts128// ─── Task scope helpers ──────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/progress.ts142// ─── Task open directory resolution ──────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/avatar.ts10// ─── URL normalization ───────────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/avatar.ts27// ─── Contact map from caches ─────────────────────────────────COMMENT
MEDIUMsrc/pages/Export/utils/avatar.ts45// ─── Avatar cache compaction ─────────────────────────────────COMMENT
41 more matches not shown…
Over-Commented Block10 hits · 10 pts
SeverityFileLineSnippetContext
LOWelectron/main.ts61COMMENT
LOWelectron/windows/notificationWindow.ts701 // Enforce max-height if needed, or trust rendererCOMMENT
LOWelectron/assets/wasm/wasm_video_decode.js1COMMENT
LOWelectron/assets/wasm/wasm_video_decode.js781 str += String.fromCharCode(codeUnit);COMMENT
LOWelectron/assets/wasm/wasm_video_decode.js841 str += String.fromCharCode(utf32);COMMENT
LOWelectron/assets/wasm/wasm_video_decode.js1081 var al = a & 0xffff;COMMENT
LOWelectron/assets/wasm/wasm_video_decode.js2941 // Track whether the return value was handled by any promise handlers.COMMENT
LOWelectron/assets/wasm/wasm_video_decode.js3001 function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) {COMMENT
LOWelectron/assets/wasm/wasm_video_decode.js3681 }COMMENT
LOWsrc/components/LiquidGlass/glassStreamRenderer.ts1// 视频流模式的 WebGL 玻璃渲染器:替代「<video> 元素 + CSS blur/saturate + SVG 位移滤镜」管线。COMMENT
Fake / Example Data8 hits · 8 pts
SeverityFileLineSnippetContext
LOWelectron/services/insightService.ts656 return id && !id.endsWith('@chatroom') && !id.toLowerCase().includes('placeholder') && this.isSessionAllowed(id)CODE
LOWelectron/services/insightService.ts1429 if (sessionId.toLowerCase().includes('placeholder')) continueCODE
LOWelectron/services/insightService.ts1494 if (!sessionId || sessionId.toLowerCase().includes('placeholder')) continueCODE
LOWelectron/services/insightService.ts1542 if (!id || id.toLowerCase().includes('placeholder')) return falseCODE
LOWsrc/pages/ResourcesPage.tsx571 : <div className="placeholder"><ImageIcon size={30} /></div>CODE
LOWsrc/pages/ResourcesPage.tsx575 : <div className="placeholder">CODE
LOWsrc/pages/SettingsPage.tsx4556 if (!id || id.toLowerCase().includes('placeholder')) return falseCODE
LOWsrc/pages/GroupAnalyticsPage.tsx1621 <div className="placeholder">CODE
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHelectron/windows/notificationWindow.ts713 // For now, let's just set the size as requested.COMMENT
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMpackage-lock.json18130 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",CODE
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWelectron/assets/wasm/wasm_video_decode.js9// We need to check if Module already exists (e.g. case 3 above).COMMENT