Repository Analysis

NanmiCoder/cc-haha

Claude Code 泄露源码 - 本地可运行版本,新增跨平台桌面端软件补齐Computer Use(附带核心模块解析)

5.3 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of NanmiCoder/cc-haha, a TypeScript project with 13,390 GitHub stars. SynthScan v2.0 examined 848,487 lines of code across 3268 source files, recording 3536 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 5.3 places this repository in the Low AI signal 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).

5.3
Adjusted Score
5.3
Raw Score
100%
Time Factor
2026-07-14
Last Push
13.4K
Stars
TypeScript
Language
848.5K
Lines of Code
3.3K
Files
3.5K
Pattern Hits
2026-07-14
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

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.

CRITICAL 6HIGH 4MEDIUM 493LOW 3033

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 3536 distinct pattern matches across 17 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.

Hyper-Verbose Identifiers2424 hits · 2377 pts
SeverityFileLineSnippetContext
LOWruntime/mac_helper.py193def send_keystroke_via_osascript(character: str, modifiers: list[str] | None = None) -> None:CODE
LOWruntime/mac_helper.py264def ensure_screen_recording_permission() -> None:CODE
LOWruntime/mac_helper.py507def detect_screen_recording_permission() -> bool | None:CODE
LOWruntime/mac_helper.py555def detect_accessibility_permission() -> bool:CODE
LOWruntime/test_helpers.py77 def test_common_keys_present_in_both(self):CODE
LOWruntime/test_helpers.py138 def test_both_helpers_same_commands(self):CODE
LOWruntime/test_helpers.py147 def test_expected_commands_exist(self):CODE
LOWruntime/test_helpers.py167 def test_unknown_command_returns_error(self):CODE
LOWruntime/test_helpers.py197 def test_json_output_function_exists(self):CODE
LOWruntime/test_helpers.py223 def test_check_permissions_always_granted(self):CODE
LOWruntime/test_helpers.py253 def test_check_permissions_uses_ax_api_instead_of_system_events(self):CODE
LOWruntime/test_helpers.py259 self.assertIn("def detect_accessibility_permission()", source)CODE
LOWruntime/test_helpers.py275 def test_clipboard_shortcuts_use_osascript_path(self):CODE
LOWruntime/test_helpers.py310 def test_input_functions_identical(self):CODE
LOWdesktop/electron/ipc/capabilities.ts130export function validateElectronIpcPayload(channel: ElectronIpcChannel, payload: unknown): boolean {CODE
LOWdesktop/electron/ipc/previewMessage.ts34function isSelectionScreenshotKind(value: unknown): value is 'full' | 'viewport' | 'element' | 'region' {CODE
LOWdesktop/electron/ipc/previewMessage.ts85export function shouldForwardPreviewMessage(input: {CODE
LOWdesktop/electron/services/dialogs.ts4export function toElectronOpenDialogOptions(options: DialogOpenOptions = {}): OpenDialogOptions {CODE
LOWdesktop/electron/services/dialogs.ts16export function toElectronSaveDialogOptions(options: DialogSaveOptions = {}): SaveDialogOptions {CODE
LOWdesktop/electron/services/windows.ts41export function hasMeaningfulIntersection(CODE
LOWdesktop/electron/services/windows.ts56export function isWindowStateVisibleOnAnyDisplay(CODE
LOWdesktop/electron/services/windows.ts70export function clampWindowStateToVisibleWorkArea(CODE
LOWdesktop/electron/services/windows.ts157export function windowChromeOptionsForPlatform(CODE
LOWdesktop/electron/services/windows.ts233export function refreshWindowsDragHitTest(CODE
LOWdesktop/electron/services/updateSmoke.ts101export function createUpdateSmokeUpdaterFromEnv(env: UpdateSmokeEnv): ElectronUpdaterLike | null {CODE
LOWdesktop/electron/services/notifications.ts15export function validateNotificationOptions(value: unknown): value is DesktopNotificationOptions {CODE
LOWdesktop/electron/services/notifications.ts26export function notificationPermissionState(CODE
LOWdesktop/electron/services/notifications.ts32export function requestNotificationPermission(CODE
LOWdesktop/electron/services/keychain.ts14export function installMacOsChromiumKeychainPromptGuard(CODE
LOWdesktop/electron/services/notificationSmoke.ts58export function parseNotificationSmokeDelay(value: string | undefined): number {CODE
LOWdesktop/electron/services/notificationSmoke.ts65function shouldTriggerSyntheticAction(value: string | undefined): boolean {CODE
LOWdesktop/electron/services/notificationSmoke.ts69export function appendNotificationSmokeLog(logPath: string, event: NotificationSmokeLogEvent) {CODE
LOWdesktop/electron/services/notificationSmoke.ts74export function logNotificationSmokeRendererAck(env: NodeJS.ProcessEnv, payload: unknown): boolean {CODE
LOWdesktop/electron/services/notificationSmoke.ts85export function scheduleNotificationSmoke({CODE
LOWdesktop/electron/services/menu.ts12export function buildApplicationMenuTemplate(CODE
LOWdesktop/electron/services/appIdentity.ts10export function applyWindowsAppUserModelId(CODE
LOWdesktop/electron/services/updater.ts52export function updaterSessionProxyConfig(proxy: string | null): UpdaterSessionProxyConfig {CODE
LOWdesktop/electron/services/updater.ts69function isMissingUpdateMetadataError(error: unknown): boolean {CODE
LOWdesktop/electron/services/previewLifecycle.ts32export function installPreviewCleanupOnRendererNavigation(CODE
LOWdesktop/electron/services/shell.ts83export function normalizeSystemSettingsUrl(target: string): string {CODE
LOWdesktop/electron/services/singleInstance.ts4export function acquireSingleInstanceLock(CODE
LOWdesktop/electron/services/previewSession.ts6export function createPreviewSessionPartition(): string {CODE
LOWdesktop/electron/services/previewSession.ts23export function configureLocalServerRequestAuth(CODE
LOWdesktop/electron/services/previewSession.ts43export function configurePreviewSessionPermissions(CODE
LOWdesktop/electron/services/terminal.ts122export function desktopTerminalSettingsPath(CODE
LOWdesktop/electron/services/terminal.ts130export function normalizeTerminalBashPath(CODE
LOWdesktop/electron/services/terminal.ts163export function resolveDesktopTerminalShell(CODE
LOWdesktop/electron/services/terminal.ts239export function readDesktopTerminalConfig(CODE
LOWdesktop/electron/services/terminal.ts300function ensureNodePtyHelpersExecutable(moduleDir: string): void {CODE
LOWdesktop/electron/services/terminal.ts389function stripMacosDownloadAttributes(moduleDir: string): void {CODE
LOWdesktop/electron/services/sidecarManager.ts82async function reserveLocalPortCandidate(bindHost: string): Promise<number> {CODE
LOWdesktop/electron/services/sidecarManager.ts153export function electronHostDiagnosticsFile(CODE
LOWdesktop/electron/services/sidecarManager.ts368export function proxyUrlFromElectronProxyRules(rules: string | undefined): string | undefined {CODE
LOWdesktop/electron/services/sidecarManager.ts436export function windowsPowerShellOverride(CODE
LOWdesktop/electron/services/appMode.ts60function resolveWithExistingAncestor(inputPath: string): string {CODE
LOWdesktop/electron/services/appMode.ts96export function determineStartupPortableDir(CODE
LOWdesktop/electron/services/preview.ts106export function snapPreviewBoundsToScaleFactor(bounds: PreviewBounds, scaleFactor: unknown): PreviewBounds {CODE
LOWdesktop/electron/services/navigationGuards.ts38export function isAllowedMainWindowNavigationUrl(url: string): boolean {CODE
LOWdesktop/electron/services/navigationGuards.ts58export function installMainWindowNavigationGuards(CODE
LOWdesktop/electron/services/navigationGuards.ts79export function installPreviewNavigationGuards(CODE
2364 more matches not shown…
Decorative Section Separators474 hits · 1362 pts
SeverityFileLineSnippetContext
MEDIUMruntime/win_helper.py269# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py271# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py545# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py547# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py40# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py42# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py100# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py102# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py121# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py123# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py178# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py180# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py223# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py225# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py566# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py568# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py579# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py581# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py631# ---------------------------------------------------------------------------COMMENT
MEDIUMruntime/win_helper.py633# ---------------------------------------------------------------------------COMMENT
MEDIUMdesktop/src/types/chat.ts6// ─── Client → Server ──────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/types/chat.ts80// ─── Server → Client ──────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/types/chat.ts279// ─── UI Message model (rendered in MessageList) ───────────────────COMMENT
MEDIUMdesktop/src/stores/chatStore.ts2817// ─── History mapping helpers ─────────COMMENT
MEDIUM…top/src/components/chat/CurrentTurnChangeCard.test.tsx6// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…top/src/components/chat/CurrentTurnChangeCard.test.tsx8// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…top/src/components/chat/CurrentTurnChangeCard.test.tsx84// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…top/src/components/chat/CurrentTurnChangeCard.test.tsx86// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…top/src/components/chat/CurrentTurnChangeCard.test.tsx91// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…top/src/components/chat/CurrentTurnChangeCard.test.tsx93// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…top/src/components/chat/CurrentTurnChangeCard.test.tsx128// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…top/src/components/chat/CurrentTurnChangeCard.test.tsx130// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/lib/openWithItems.test.ts5// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/lib/openWithItems.test.ts7// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/lib/openWithItems.test.ts50// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/lib/openWithItems.test.ts52// ──────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/lib/openWithItems.ts3// ─── File-type description ────────────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/lib/openWithItems.ts34// ─── Open-with items ──────────────────────────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts102 // ─── Title Bar ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts107 // ─── Open Project ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts112 // ─── Open With ─────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1520 // ─── Ask User Question ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1530 // ─── Thinking Block ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1534 // ─── Tool Calls ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1729 // ─── Model Selector ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1734 // ─── Directory Picker ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1743 // ─── File Search ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts4 // ─── Common ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts25 // ─── Sidebar ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts125 // ─── Assistant Output Targets ──────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts133 // ─── Workspace Panel ───────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts207 // ─── Status Bar ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts213 // ─── Settings ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1221 // ─── Empty Session ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1237 // ─── Repository Launch Controls ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1253 // ─── Chat Input ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1470 // ─── Streaming Indicator ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1475 // ─── Permission Dialog ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1498 // ─── Computer Use Approval ──────────────────────────────────────COMMENT
MEDIUMdesktop/src/i18n/locales/zh-TW.ts1564 // ─── Tool Group Verbs ──────────────────────────────────────COMMENT
414 more matches not shown…
Over-Commented Block459 hits · 442 pts
SeverityFileLineSnippetContext
LOWdesktop/scripts/install-macos-unsigned.sh1#!/usr/bin/env bashCOMMENT
LOWdesktop/src-tauri/src/lib.rs1721 // 历史用途:此前 sidecar launcher 用 dynamic file:// import 加载磁盘上COMMENT
LOWdesktop/src-tauri/src/main.rs1// Prevents additional console window on Windows in releaseCOMMENT
LOWsrc/main.tsx1// These side-effects must run before all other imports:COMMENT
LOWsrc/main.tsx1041 // kairosEnabled is computed once here and reused at theCOMMENT
LOWsrc/main.tsx1601 // chicago MCP: guarded Computer Use (app allowlist + frontmost gate +COMMENT
LOWsrc/main.tsx1961 // lets tools inject if they want to, but turning it on by defaultCOMMENT
LOWsrc/main.tsx1981 // interceptor) and picks up any plugin-contributed env after pluginCOMMENT
LOWsrc/main.tsx2001 // runs during the ~280ms overlap window before the contextCOMMENT
LOWsrc/main.tsx2021COMMENT
LOWsrc/main.tsx2561 }COMMENT
LOWsrc/main.tsx2621 // MCP connect + plugin init + print.ts import below. loadInitialMessagesCOMMENT
LOWsrc/main.tsx2761 // Await all MCP configs for regular print-mode sessions — they'reCOMMENT
LOWsrc/QueryEngine.ts441 // an assistant/user/compact_boundary message — which doesn't happen untilCOMMENT
LOWsrc/query.ts281 transition: undefined,COMMENT
LOWsrc/query.ts421 )COMMENT
LOWsrc/query.ts601 // validated to be under the threshold, and tokenCountWithEstimation would useCOMMENT
LOWsrc/query.ts1081 isPromptTooLongMessage(lastMessage)COMMENT
LOWsrc/query.ts1561 // covers those. If all task types move to 'next', this branch could go.COMMENT
LOWsrc/ink/output.ts741 nextCode <= 0x7eCOMMENT
LOWsrc/ink/dom.ts41 // Used to skip empty renders during React 19's effect double-invoke in test modeCOMMENT
LOWsrc/ink/dom.ts61 // naturally cancels (pure accumulator, no target tracking).COMMENT
LOWsrc/ink/render-node-to-output.ts721 // padding) begins. Exposed via ScrollBoxHandle.getViewportTop() soCOMMENT
LOWsrc/ink/render-node-to-output.ts741 node.pendingScrollDelta = undefinedCOMMENT
LOWsrc/ink/render-node-to-output.ts761 // transiently SHRINK scrollHeight (tail unmount + stale heightCacheCOMMENT
LOWsrc/ink/render-node-to-output.ts801 // startup) the probe has resolved — same timing guarantee theCOMMENT
LOWsrc/ink/render-node-to-output.ts881 } else {COMMENT
LOWsrc/ink/render-node-to-output.ts961 // 1. Dirty children — their content changed, blitted pixels areCOMMENT
LOWsrc/ink/render-node-to-output.ts981 // check cached.y−delta === screenY reduces to delta === deltaCOMMENT
LOWsrc/ink/render-node-to-output.ts1101 boxBackgroundColor,COMMENT
LOWsrc/ink/render-node-to-output.ts1221 nodeCache.set(node, rect)COMMENT
LOWsrc/ink/render-node-to-output.ts1241// Without this, a spinner inside a ScrollBox dirties the wrapper on everyCOMMENT
LOWsrc/ink/searchHighlight.ts41 const rowOff = row * wCOMMENT
LOWsrc/ink/ink.tsx121 // pass in onRender can read it and App.tsx can update it from mouseCOMMENT
LOWsrc/ink/ink.tsx141 private readonly selectionListeners = new Set<() => void>();COMMENT
LOWsrc/ink/ink.tsx161 // INSIDE the BSU/ESU block so clear+paint is atomic. Writing ERASE_SCREENCOMMENT
LOWsrc/ink/ink.tsx461 // captureScrolledRows reads the rows that are about to scroll outCOMMENT
LOWsrc/ink/ink.tsx481 // captureScrolledRows and shift* are a pair: capture grabs rows aboutCOMMENT
LOWsrc/ink/ink.tsx501 // the footer endpoint pins the selection, text scrolls away underCOMMENT
LOWsrc/ink/ink.tsx521 // so the diff picks up selection as ordinary cell changes andCOMMENT
LOWsrc/ink/ink.tsx561 // cells at sibling boundaries that per-node damage tracking misses.COMMENT
LOWsrc/ink/ink.tsx621 });COMMENT
LOWsrc/ink/ink.tsx641 // After resize, prepend ERASE_SCREEN too. The diff only writes cellsCOMMENT
LOWsrc/ink/ink.tsx741 writeDiffToTerminal(this.terminal, optimized, this.altScreenActive && !SYNC_OUTPUT_SUPPORTED);COMMENT
LOWsrc/ink/ink.tsx1481 // We unconditionally send all disable sequences because terminal detectionCOMMENT
LOWsrc/ink/parse-keypress.ts21// Modifier is optional - when absent, defaults to 1 (no modifiers)COMMENT
LOWsrc/ink/parse-keypress.ts41// eslint-disable-next-line no-control-regexCOMMENT
LOWsrc/ink/parse-keypress.ts261 pasteBuffer += token.valueCOMMENT
LOWsrc/ink/log-update.ts141 // Resizing is a rare enough event that it's not practically a big issue.COMMENT
LOWsrc/ink/log-update.ts181 CURSOR_HOME,COMMENT
LOWsrc/ink/renderer.ts81 }COMMENT
LOWsrc/ink/components/App.tsx41 readonly exitOnCtrlC: boolean;COMMENT
LOWsrc/ink/components/App.tsx61 // time. Returns the URL or undefined. The browser-open is deferred byCOMMENT
LOWsrc/ink/components/App.tsx121 readonly PASTE_TIMEOUT = 500; // Longer timeout for paste operationsCOMMENT
LOWsrc/ink/components/App.tsx221 if (isEnabled) {COMMENT
LOWsrc/ink/components/App.tsx281COMMENT
LOWsrc/ink/components/App.tsx601 // isDragging=true and leave drag-to-scroll's timer running until theCOMMENT
LOWsrc/ink/components/App.tsx621 // highlight. The anchor check guards against an orphaned release (noCOMMENT
LOWsrc/ink/components/ScrollBox.tsx201 // every render (which re-registers the ref = churn).COMMENT
LOWsrc/ink/hooks/use-terminal-viewport.ts41 // Runs on every render because yoga layout values can changeCOMMENT
399 more matches not shown…
Verbosity Indicators46 hits · 83 pts
SeverityFileLineSnippetContext
LOWdesktop/src/stores/chatStore.ts3816 // Step 1: Collect Agent tool_use blocks → map agent name to toolUseIdCOMMENT
LOWdesktop/src/stores/chatStore.ts3836 // Step 2: Extract <teammate-message> content by teammate_idCOMMENT
LOWdesktop/src/stores/chatStore.ts3866 // Step 3: Correlate and build notificationsCOMMENT
LOWsrc/tasks/LocalShellTask/LocalShellTask.tsx294 // Step 1: Get the task and shell command from current stateCOMMENT
LOWsrc/tools/BashTool/sedEditParser.ts277 // Step 1: Protect literal backslashes (\\) first - in both BRE and ERE, \\ is literal backslashCOMMENT
LOWsrc/tools/BashTool/sedEditParser.ts279 // Step 2: Replace escaped metacharacters with placeholders (these should become unescaped in JS)COMMENT
LOWsrc/tools/BashTool/sedEditParser.ts285 // Step 3: Escape unescaped metacharacters (these are literal in BRE)COMMENT
LOWsrc/tools/BashTool/sedEditParser.ts291 // Step 4: Replace placeholders with their JS equivalentsCOMMENT
LOWsrc/server/api/computer-use.ts327 // Step 1: Check pythonCOMMENT
LOWsrc/server/api/computer-use.ts357 // Step 2: Extract runtime files to ~/.claude/.runtime/COMMENT
LOWsrc/server/api/computer-use.ts370 // Step 3: Create venvCOMMENT
LOWsrc/server/api/computer-use.ts410 // Step 4: Ensure pipCOMMENT
LOWsrc/server/api/computer-use.ts431 // Step 5: Install requirementsCOMMENT
LOWsrc/server/services/sessionService.ts1651 // Step 1: Try matching the transcript model name directly (current behavior)COMMENT
LOWsrc/server/services/sessionService.ts1663 // Step 2: Prefer the model this session actually launched with. SomeCOMMENT
LOWsrc/server/services/sessionService.ts1679 // Step 3: If transcript model name didn't match, try matching withCOMMENT
LOWsrc/server/services/sessionService.ts1723 // Step 1: Try matching the transcript model name directlyCOMMENT
LOWsrc/server/services/sessionService.ts1733 // Step 2: Fallback to provider configured model names.COMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts753 // Step 1: Migrate to single file format (consolidates V1/V2 files, cleans up legacy cache)COMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts756 // Step 2: Sync enabledPlugins from settings.json to installed_plugins.jsonCOMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts764 // Step 3: Initialize in-memory session stateCOMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts1183 // Step 2: Start with existing data (or start empty if no file exists)COMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts1192 // Step 3: Update V2 scopes based on settings.json (settings is source of truth)COMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts1148 // Step 1: Build a map of pluginId -> scope from all settings.json filesCOMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts1312 // Step 4: Save to single file (V2 format)COMMENT
LOWsrc/utils/plugins/pluginLoader.ts1360 // Step 1: Load or create the plugin manifestCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1365 // Step 2: Create the base plugin objectCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1376 // Step 3: Auto-detect optional directories in parallelCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1532 // Step 4: Register agents directory if detectedCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1616 // Step 5: Load hooks configurationCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1764 // Step 6: Load plugin settingsCOMMENT
LOWsrc/utils/permissions/permissionSetup.ts993 // We need to check if base tools were explicitly provided (not just empty default)COMMENT
LOWsrc/components/MarkdownTable.tsx107 // Step 1: Get minimum (longest word) and ideal (full content) widthsCOMMENT
LOWsrc/components/MarkdownTable.tsx123 // Step 2: Calculate available spaceCOMMENT
LOWsrc/components/MarkdownTable.tsx130 // Step 3: Calculate column widths that fit available spaceCOMMENT
LOWsrc/components/MarkdownTable.tsx158 // Step 4: Calculate max row lines to determine if vertical format is neededCOMMENT
LOWsrc/components/StructuredDiff/Fallback.tsx353 // Step 1: Transform lines to line objects with type informationCOMMENT
LOWsrc/components/StructuredDiff/Fallback.tsx356 // Step 2: Group adjacent add/remove lines for word-level diffingCOMMENT
LOWsrc/components/StructuredDiff/Fallback.tsx359 // Step 3: Number the diff linesCOMMENT
LOWsrc/components/StructuredDiff/Fallback.tsx368 // Step 4: Render formattingCOMMENT
LOWsrc/skills/bundled/skillify.ts40### Step 1: Analyze the SessionCOMMENT
LOWsrc/skills/bundled/skillify.ts52### Step 2: Interview the UserCOMMENT
LOWsrc/skills/bundled/skillify.ts90### Step 3: Write the SKILL.mdCOMMENT
LOWsrc/skills/bundled/skillify.ts148### Step 4: Confirm and SaveCOMMENT
LOWsrc/services/compact/sessionMemoryCompact.ts242 // Step 1: Handle tool_use/tool_result pairsCOMMENT
LOWsrc/services/compact/sessionMemoryCompact.ts288 // Step 2: Handle thinking blocks that share message.id with kept assistant messagesCOMMENT
Structural Annotation Overuse45 hits · 82 pts
SeverityFileLineSnippetContext
LOWdesktop/src/stores/chatStore.ts3816 // Step 1: Collect Agent tool_use blocks → map agent name to toolUseIdCOMMENT
LOWdesktop/src/stores/chatStore.ts3836 // Step 2: Extract <teammate-message> content by teammate_idCOMMENT
LOWdesktop/src/stores/chatStore.ts3866 // Step 3: Correlate and build notificationsCOMMENT
LOWsrc/tasks/LocalShellTask/LocalShellTask.tsx294 // Step 1: Get the task and shell command from current stateCOMMENT
LOWsrc/tools/BashTool/sedEditParser.ts277 // Step 1: Protect literal backslashes (\\) first - in both BRE and ERE, \\ is literal backslashCOMMENT
LOWsrc/tools/BashTool/sedEditParser.ts279 // Step 2: Replace escaped metacharacters with placeholders (these should become unescaped in JS)COMMENT
LOWsrc/tools/BashTool/sedEditParser.ts285 // Step 3: Escape unescaped metacharacters (these are literal in BRE)COMMENT
LOWsrc/tools/BashTool/sedEditParser.ts291 // Step 4: Replace placeholders with their JS equivalentsCOMMENT
LOWsrc/server/api/computer-use.ts327 // Step 1: Check pythonCOMMENT
LOWsrc/server/api/computer-use.ts357 // Step 2: Extract runtime files to ~/.claude/.runtime/COMMENT
LOWsrc/server/api/computer-use.ts370 // Step 3: Create venvCOMMENT
LOWsrc/server/api/computer-use.ts410 // Step 4: Ensure pipCOMMENT
LOWsrc/server/api/computer-use.ts431 // Step 5: Install requirementsCOMMENT
LOWsrc/server/services/sessionService.ts1651 // Step 1: Try matching the transcript model name directly (current behavior)COMMENT
LOWsrc/server/services/sessionService.ts1663 // Step 2: Prefer the model this session actually launched with. SomeCOMMENT
LOWsrc/server/services/sessionService.ts1679 // Step 3: If transcript model name didn't match, try matching withCOMMENT
LOWsrc/server/services/sessionService.ts1723 // Step 1: Try matching the transcript model name directlyCOMMENT
LOWsrc/server/services/sessionService.ts1733 // Step 2: Fallback to provider configured model names.COMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts753 // Step 1: Migrate to single file format (consolidates V1/V2 files, cleans up legacy cache)COMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts756 // Step 2: Sync enabledPlugins from settings.json to installed_plugins.jsonCOMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts764 // Step 3: Initialize in-memory session stateCOMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts1183 // Step 2: Start with existing data (or start empty if no file exists)COMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts1192 // Step 3: Update V2 scopes based on settings.json (settings is source of truth)COMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts1148 // Step 1: Build a map of pluginId -> scope from all settings.json filesCOMMENT
LOWsrc/utils/plugins/installedPluginsManager.ts1312 // Step 4: Save to single file (V2 format)COMMENT
LOWsrc/utils/plugins/pluginLoader.ts1360 // Step 1: Load or create the plugin manifestCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1365 // Step 2: Create the base plugin objectCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1376 // Step 3: Auto-detect optional directories in parallelCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1532 // Step 4: Register agents directory if detectedCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1616 // Step 5: Load hooks configurationCOMMENT
LOWsrc/utils/plugins/pluginLoader.ts1764 // Step 6: Load plugin settingsCOMMENT
LOWsrc/components/MarkdownTable.tsx107 // Step 1: Get minimum (longest word) and ideal (full content) widthsCOMMENT
LOWsrc/components/MarkdownTable.tsx123 // Step 2: Calculate available spaceCOMMENT
LOWsrc/components/MarkdownTable.tsx130 // Step 3: Calculate column widths that fit available spaceCOMMENT
LOWsrc/components/MarkdownTable.tsx158 // Step 4: Calculate max row lines to determine if vertical format is neededCOMMENT
LOWsrc/components/StructuredDiff/Fallback.tsx353 // Step 1: Transform lines to line objects with type informationCOMMENT
LOWsrc/components/StructuredDiff/Fallback.tsx356 // Step 2: Group adjacent add/remove lines for word-level diffingCOMMENT
LOWsrc/components/StructuredDiff/Fallback.tsx359 // Step 3: Number the diff linesCOMMENT
LOWsrc/components/StructuredDiff/Fallback.tsx368 // Step 4: Render formattingCOMMENT
LOWsrc/skills/bundled/skillify.ts40### Step 1: Analyze the SessionCOMMENT
LOWsrc/skills/bundled/skillify.ts52### Step 2: Interview the UserCOMMENT
LOWsrc/skills/bundled/skillify.ts90### Step 3: Write the SKILL.mdCOMMENT
LOWsrc/skills/bundled/skillify.ts148### Step 4: Confirm and SaveCOMMENT
LOWsrc/services/compact/sessionMemoryCompact.ts242 // Step 1: Handle tool_use/tool_result pairsCOMMENT
LOWsrc/services/compact/sessionMemoryCompact.ts288 // Step 2: Handle thinking blocks that share message.id with kept assistant messagesCOMMENT
Hallucination Indicators6 hits · 60 pts
SeverityFileLineSnippetContext
CRITICALadapters/feishu/streaming-card.ts220 this.deps.larkClient.im.message.create({CODE
CRITICALadapters/feishu/streaming-card.ts355 this.deps.larkClient.im.message.patch({CODE
CRITICALadapters/feishu/streaming-card.ts369 this.deps.larkClient.im.message.patch({CODE
CRITICALadapters/feishu/streaming-card.ts424 this.deps.larkClient.im.message.patch({CODE
CRITICALadapters/feishu/streaming-card.ts577 this.deps.larkClient.im.message.patch({CODE
CRITICALsrc/tools/AgentTool/UI.tsx839 const toolResultBlock = lastToolResult.data.message.message.content.find(c => c.type === 'tool_result');CODE
Modern AI Meta-Vocabulary12 hits · 33 pts
SeverityFileLineSnippetContext
MEDIUMdocs/en/agent/01-usage-guide.md6<a href="#1-what-is-the-multi-agent-system">Multi-Agent System</a> · <a href="#2-six-built-in-agents">Six Built-in AgentCODE
MEDIUMrelease-notes/v0.4.3.md58- #830:尊重自定义 provider context window。CODE
MEDIUMsrc/main.tsx3319 // of a remote assistant session. The agentic loop runs remotely; thisCOMMENT
MEDIUMsrc/query.ts198 // budget for the whole agentic turn; `remaining` is computed per iterationCOMMENT
MEDIUMsrc/tools/AgentTool/loadAgentsDir.ts118 maxTurns?: number // Maximum number of agentic turns before stoppingCODE
MEDIUMsrc/utils/betas.ts410 // excluded by getAllModelBetas() since non-agentic Haiku calls don't need them.COMMENT
MEDIUMsrc/utils/attachments.ts1049 // During proactive agentic loops, task-notification commands would otherwiseCOMMENT
MEDIUMsrc/utils/attachments.ts1283 // long agentic sessions, where this accumulated 60-105× per session.COMMENT
MEDIUMsrc/services/api/claude.ts746 // (query.ts decrements across the agentic loop).COMMENT
MEDIUMsrc/services/api/claude.ts1172 // non-agentic queries (compact, side_question, extract_memories, etc.)COMMENT
MEDIUMsrc/services/api/claude.ts1508 // per-call so non-agentic queries keep their own stable header set.COMMENT
MEDIUMsrc/services/api/claude.ts1542 // Only latch from agentic queries so a classifier call doesn't flip theCOMMENT
Fake / Example Data25 hits · 26 pts
SeverityFileLineSnippetContext
LOW…ktop/scripts/e2e-deepseek-thinking-ui-agent-browser.sh192 .find((node) => node.getAttribute('placeholder') === placeholder);CODE
LOW…ktop/scripts/e2e-deepseek-thinking-ui-agent-browser.sh279 .find((node) => node.getAttribute('placeholder') === placeholder);CODE
LOW…ktop/scripts/e2e-deepseek-thinking-ui-agent-browser.sh285 .filter((node) => node.getAttribute('placeholder') === '与主模型相同');CODE
LOWdesktop/src/stores/hahaOpenAIOAuthStore.test.ts60 email: 'user@example.com',CODE
LOWdesktop/src/stores/hahaOpenAIOAuthStore.test.ts73 email: 'user@example.com',CODE
LOWdesktop/src/stores/hahaOpenAIOAuthStore.test.ts85 email: 'user@example.com',CODE
LOWdesktop/src/__tests__/pages.test.tsx277 expect(textarea).toHaveAttribute('placeholder', 'Ask anything...')CODE
LOWsrc/server/__tests__/haha-grok-oauth-service.test.ts70 email: 'user@example.com',CODE
LOWsrc/server/__tests__/haha-grok-oauth-service.test.ts80 email: 'user@example.com',CODE
LOWsrc/server/__tests__/haha-grok-oauth-api.test.ts41 email: 'user@example.com',CODE
LOWsrc/server/__tests__/haha-grok-oauth-api.test.ts49 expect(statusText).toContain('user@example.com')CODE
LOWsrc/server/__tests__/providers.test.ts482 email: 'user@example.com',CODE
LOWsrc/server/services/diagnosticsShare.test.ts81 email: 'user@example.com',CODE
LOWsrc/server/services/diagnosticsShare.test.ts105 'user@example.com',CODE
LOWsrc/utils/plugins/pluginLoader.ts1117 * "name": "John Doe",COMMENT
LOWsrc/utils/plugins/marketplaceManager.ts1244 * "owner": { "name": "John Doe", "email": "john@example.com" },COMMENT
LOWsrc/utils/mcp/elicitationValidation.ts24 example: 'user@example.com',CODE
LOWsrc/utils/__tests__/tokens.test.ts24 content: [{ type: 'text', text: 'placeholder' }],CODE
LOWsrc/skills/bundled/loremIpsum.ts273 // Just dump the lorem ipsum text into the conversationCOMMENT
LOWsrc/services/openaiAuth/storage.test.ts90 email: 'user@example.com',CODE
LOWsrc/services/openaiAuth/storage.test.ts103 email: 'user@example.com',CODE
LOWsrc/services/openaiAuth/fetch.test.ts29 email: 'user@example.com',CODE
LOWsrc/services/openaiAuth/fetch.ts22export const OPENAI_OAUTH_DUMMY_KEY = 'openai-oauth-dummy-key'CODE
LOWsrc/services/grokAuth/storage.test.ts35 email: 'user@example.com',CODE
LOWsrc/services/grokAuth/fetch.ts12export const GROK_OAUTH_DUMMY_KEY = 'grok-oauth-dummy-key'CODE
Synthetic Comment Markers3 hits · 20 pts
SeverityFileLineSnippetContext
HIGHsrc/server/services/sessionService.ts1437 // 3. Look for AI-generated title (written by titleService)COMMENT
HIGHsrc/utils/claudeInChrome/setup.ts320REM Generated by Claude Code - do not edit manuallyCODE
HIGHsrc/utils/claudeInChrome/setup.ts325# Generated by Claude Code - do not edit manuallyCOMMENT
Excessive Try-Catch Wrapping21 hits · 20 pts
SeverityFileLineSnippetContext
LOWruntime/win_helper.py265 except Exception:CODE
LOWruntime/win_helper.py277 except Exception:CODE
LOWruntime/win_helper.py541 except Exception:CODE
LOWruntime/win_helper.py553 except Exception:CODE
LOWruntime/win_helper.py159 except Exception:CODE
LOWruntime/win_helper.py239 except Exception:CODE
LOWruntime/win_helper.py405 except Exception:CODE
LOWruntime/win_helper.py430 except Exception:CODE
LOWruntime/win_helper.py763 except Exception as exc:CODE
LOWruntime/mac_helper.py219 except Exception:CODE
LOWruntime/mac_helper.py365 except Exception:CODE
LOWruntime/mac_helper.py371 except Exception:CODE
LOWruntime/mac_helper.py382 except Exception:CODE
LOWruntime/mac_helper.py522 except Exception:CODE
LOWruntime/mac_helper.py530 except Exception:CODE
LOWruntime/mac_helper.py570 except Exception:CODE
LOWruntime/mac_helper.py769 except Exception as exc:CODE
LOWdocs/features/computer-use-architecture.md410 except Exception as e:CODE
MEDIUMdocs/features/computer-use-architecture.md406def main():CODE
LOWdocs/en/features/computer-use-architecture.md407 except Exception as e:CODE
MEDIUMdocs/en/features/computer-use-architecture.md403def main():CODE
AI Slop Vocabulary5 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMpackage-lock.json7481 "resolved": "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.3.tgz",CODE
MEDIUMsrc/tools/PowerShellTool/commandSemantics.ts71 // robocopy.exe: Windows native robust file copyCOMMENT
MEDIUMsrc/utils/swarm/backends/PaneBackendExecutor.ts341 // A more robust check would query the backend for pane existenceCOMMENT
MEDIUMsrc/utils/powershell/parser.ts1068 // and extracting .Redirections) is both simpler and more robust: it catchesCOMMENT
MEDIUMsrc/hooks/useVoiceIntegration.tsx176 // the gap is seamless once transcript text arrives.COMMENT
Deep Nesting7 hits · 6 pts
SeverityFileLineSnippetContext
LOWruntime/win_helper.py281CODE
LOWruntime/win_helper.py434CODE
LOWruntime/win_helper.py478CODE
LOWruntime/mac_helper.py350CODE
LOWruntime/mac_helper.py448CODE
LOWruntime/mac_helper.py608CODE
LOWruntime/test_helpers.py33CODE
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHsrc/tools/TodoWriteTool/prompt.ts100print("Hello World")CODE
Unused Imports5 hits · 4 pts
SeverityFileLineSnippetContext
LOWruntime/win_helper.py7CODE
LOWruntime/mac_helper.py2CODE
LOWruntime/test_helpers.py12CODE
LOWruntime/test_helpers.py19CODE
LOWruntime/test_helpers.py19CODE
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWruntime/test_helpers.py35 # Read the file and extract just the KEY_MAP dictCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWdesktop/scripts/install-macos-unsigned.sh15# Usage:COMMENT
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/utils/hooks.ts1211 // TODO: Add tests for EPIPE handling.COMMENT