Claude Code 泄露源码 - 本地可运行版本,新增跨平台桌面端软件补齐Computer Use(附带核心模块解析)
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).
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.
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 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime/mac_helper.py | 193 | def send_keystroke_via_osascript(character: str, modifiers: list[str] | None = None) -> None: | CODE |
| LOW | runtime/mac_helper.py | 264 | def ensure_screen_recording_permission() -> None: | CODE |
| LOW | runtime/mac_helper.py | 507 | def detect_screen_recording_permission() -> bool | None: | CODE |
| LOW | runtime/mac_helper.py | 555 | def detect_accessibility_permission() -> bool: | CODE |
| LOW | runtime/test_helpers.py | 77 | def test_common_keys_present_in_both(self): | CODE |
| LOW | runtime/test_helpers.py | 138 | def test_both_helpers_same_commands(self): | CODE |
| LOW | runtime/test_helpers.py | 147 | def test_expected_commands_exist(self): | CODE |
| LOW | runtime/test_helpers.py | 167 | def test_unknown_command_returns_error(self): | CODE |
| LOW | runtime/test_helpers.py | 197 | def test_json_output_function_exists(self): | CODE |
| LOW | runtime/test_helpers.py | 223 | def test_check_permissions_always_granted(self): | CODE |
| LOW | runtime/test_helpers.py | 253 | def test_check_permissions_uses_ax_api_instead_of_system_events(self): | CODE |
| LOW | runtime/test_helpers.py | 259 | self.assertIn("def detect_accessibility_permission()", source) | CODE |
| LOW | runtime/test_helpers.py | 275 | def test_clipboard_shortcuts_use_osascript_path(self): | CODE |
| LOW | runtime/test_helpers.py | 310 | def test_input_functions_identical(self): | CODE |
| LOW | desktop/electron/ipc/capabilities.ts | 130 | export function validateElectronIpcPayload(channel: ElectronIpcChannel, payload: unknown): boolean { | CODE |
| LOW | desktop/electron/ipc/previewMessage.ts | 34 | function isSelectionScreenshotKind(value: unknown): value is 'full' | 'viewport' | 'element' | 'region' { | CODE |
| LOW | desktop/electron/ipc/previewMessage.ts | 85 | export function shouldForwardPreviewMessage(input: { | CODE |
| LOW | desktop/electron/services/dialogs.ts | 4 | export function toElectronOpenDialogOptions(options: DialogOpenOptions = {}): OpenDialogOptions { | CODE |
| LOW | desktop/electron/services/dialogs.ts | 16 | export function toElectronSaveDialogOptions(options: DialogSaveOptions = {}): SaveDialogOptions { | CODE |
| LOW | desktop/electron/services/windows.ts | 41 | export function hasMeaningfulIntersection( | CODE |
| LOW | desktop/electron/services/windows.ts | 56 | export function isWindowStateVisibleOnAnyDisplay( | CODE |
| LOW | desktop/electron/services/windows.ts | 70 | export function clampWindowStateToVisibleWorkArea( | CODE |
| LOW | desktop/electron/services/windows.ts | 157 | export function windowChromeOptionsForPlatform( | CODE |
| LOW | desktop/electron/services/windows.ts | 233 | export function refreshWindowsDragHitTest( | CODE |
| LOW | desktop/electron/services/updateSmoke.ts | 101 | export function createUpdateSmokeUpdaterFromEnv(env: UpdateSmokeEnv): ElectronUpdaterLike | null { | CODE |
| LOW | desktop/electron/services/notifications.ts | 15 | export function validateNotificationOptions(value: unknown): value is DesktopNotificationOptions { | CODE |
| LOW | desktop/electron/services/notifications.ts | 26 | export function notificationPermissionState( | CODE |
| LOW | desktop/electron/services/notifications.ts | 32 | export function requestNotificationPermission( | CODE |
| LOW | desktop/electron/services/keychain.ts | 14 | export function installMacOsChromiumKeychainPromptGuard( | CODE |
| LOW⚡ | desktop/electron/services/notificationSmoke.ts | 58 | export function parseNotificationSmokeDelay(value: string | undefined): number { | CODE |
| LOW⚡ | desktop/electron/services/notificationSmoke.ts | 65 | function shouldTriggerSyntheticAction(value: string | undefined): boolean { | CODE |
| LOW⚡ | desktop/electron/services/notificationSmoke.ts | 69 | export function appendNotificationSmokeLog(logPath: string, event: NotificationSmokeLogEvent) { | CODE |
| LOW⚡ | desktop/electron/services/notificationSmoke.ts | 74 | export function logNotificationSmokeRendererAck(env: NodeJS.ProcessEnv, payload: unknown): boolean { | CODE |
| LOW | desktop/electron/services/notificationSmoke.ts | 85 | export function scheduleNotificationSmoke({ | CODE |
| LOW | desktop/electron/services/menu.ts | 12 | export function buildApplicationMenuTemplate( | CODE |
| LOW | desktop/electron/services/appIdentity.ts | 10 | export function applyWindowsAppUserModelId( | CODE |
| LOW | desktop/electron/services/updater.ts | 52 | export function updaterSessionProxyConfig(proxy: string | null): UpdaterSessionProxyConfig { | CODE |
| LOW | desktop/electron/services/updater.ts | 69 | function isMissingUpdateMetadataError(error: unknown): boolean { | CODE |
| LOW | desktop/electron/services/previewLifecycle.ts | 32 | export function installPreviewCleanupOnRendererNavigation( | CODE |
| LOW | desktop/electron/services/shell.ts | 83 | export function normalizeSystemSettingsUrl(target: string): string { | CODE |
| LOW | desktop/electron/services/singleInstance.ts | 4 | export function acquireSingleInstanceLock( | CODE |
| LOW | desktop/electron/services/previewSession.ts | 6 | export function createPreviewSessionPartition(): string { | CODE |
| LOW | desktop/electron/services/previewSession.ts | 23 | export function configureLocalServerRequestAuth( | CODE |
| LOW | desktop/electron/services/previewSession.ts | 43 | export function configurePreviewSessionPermissions( | CODE |
| LOW | desktop/electron/services/terminal.ts | 122 | export function desktopTerminalSettingsPath( | CODE |
| LOW | desktop/electron/services/terminal.ts | 130 | export function normalizeTerminalBashPath( | CODE |
| LOW | desktop/electron/services/terminal.ts | 163 | export function resolveDesktopTerminalShell( | CODE |
| LOW | desktop/electron/services/terminal.ts | 239 | export function readDesktopTerminalConfig( | CODE |
| LOW | desktop/electron/services/terminal.ts | 300 | function ensureNodePtyHelpersExecutable(moduleDir: string): void { | CODE |
| LOW | desktop/electron/services/terminal.ts | 389 | function stripMacosDownloadAttributes(moduleDir: string): void { | CODE |
| LOW | desktop/electron/services/sidecarManager.ts | 82 | async function reserveLocalPortCandidate(bindHost: string): Promise<number> { | CODE |
| LOW | desktop/electron/services/sidecarManager.ts | 153 | export function electronHostDiagnosticsFile( | CODE |
| LOW | desktop/electron/services/sidecarManager.ts | 368 | export function proxyUrlFromElectronProxyRules(rules: string | undefined): string | undefined { | CODE |
| LOW | desktop/electron/services/sidecarManager.ts | 436 | export function windowsPowerShellOverride( | CODE |
| LOW | desktop/electron/services/appMode.ts | 60 | function resolveWithExistingAncestor(inputPath: string): string { | CODE |
| LOW | desktop/electron/services/appMode.ts | 96 | export function determineStartupPortableDir( | CODE |
| LOW | desktop/electron/services/preview.ts | 106 | export function snapPreviewBoundsToScaleFactor(bounds: PreviewBounds, scaleFactor: unknown): PreviewBounds { | CODE |
| LOW | desktop/electron/services/navigationGuards.ts | 38 | export function isAllowedMainWindowNavigationUrl(url: string): boolean { | CODE |
| LOW | desktop/electron/services/navigationGuards.ts | 58 | export function installMainWindowNavigationGuards( | CODE |
| LOW | desktop/electron/services/navigationGuards.ts | 79 | export function installPreviewNavigationGuards( | CODE |
| 2364 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | runtime/win_helper.py | 269 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | runtime/win_helper.py | 271 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | runtime/win_helper.py | 545 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | runtime/win_helper.py | 547 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 40 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 42 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 100 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 102 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 123 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 178 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 223 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 225 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 566 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 568 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 579 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 581 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 631 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/win_helper.py | 633 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | desktop/src/types/chat.ts | 6 | // ─── Client → Server ────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/types/chat.ts | 80 | // ─── Server → Client ────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/types/chat.ts | 279 | // ─── UI Message model (rendered in MessageList) ─────────────────── | COMMENT |
| MEDIUM | desktop/src/stores/chatStore.ts | 2817 | // ─── History mapping helpers ───────── | COMMENT |
| MEDIUM | …top/src/components/chat/CurrentTurnChangeCard.test.tsx | 6 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …top/src/components/chat/CurrentTurnChangeCard.test.tsx | 8 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …top/src/components/chat/CurrentTurnChangeCard.test.tsx | 84 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …top/src/components/chat/CurrentTurnChangeCard.test.tsx | 86 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …top/src/components/chat/CurrentTurnChangeCard.test.tsx | 91 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …top/src/components/chat/CurrentTurnChangeCard.test.tsx | 93 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …top/src/components/chat/CurrentTurnChangeCard.test.tsx | 128 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …top/src/components/chat/CurrentTurnChangeCard.test.tsx | 130 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/lib/openWithItems.test.ts | 5 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/lib/openWithItems.test.ts | 7 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/lib/openWithItems.test.ts | 50 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/lib/openWithItems.test.ts | 52 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/lib/openWithItems.ts | 3 | // ─── File-type description ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/lib/openWithItems.ts | 34 | // ─── Open-with items ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 102 | // ─── Title Bar ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 107 | // ─── Open Project ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 112 | // ─── Open With ───────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 1520 | // ─── Ask User Question ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 1530 | // ─── Thinking Block ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 1534 | // ─── Tool Calls ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 1729 | // ─── Model Selector ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 1734 | // ─── Directory Picker ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | desktop/src/i18n/locales/zh-TW.ts | 1743 | // ─── File Search ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 4 | // ─── Common ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 25 | // ─── Sidebar ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 125 | // ─── Assistant Output Targets ────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 133 | // ─── Workspace Panel ─────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 207 | // ─── Status Bar ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 213 | // ─── Settings ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 1221 | // ─── Empty Session ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 1237 | // ─── Repository Launch Controls ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 1253 | // ─── Chat Input ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 1470 | // ─── Streaming Indicator ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 1475 | // ─── Permission Dialog ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 1498 | // ─── Computer Use Approval ────────────────────────────────────── | COMMENT |
| MEDIUM | desktop/src/i18n/locales/zh-TW.ts | 1564 | // ─── Tool Group Verbs ────────────────────────────────────── | COMMENT |
| 414 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | desktop/scripts/install-macos-unsigned.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | desktop/src-tauri/src/lib.rs | 1721 | // 历史用途:此前 sidecar launcher 用 dynamic file:// import 加载磁盘上 | COMMENT |
| LOW | desktop/src-tauri/src/main.rs | 1 | // Prevents additional console window on Windows in release | COMMENT |
| LOW | src/main.tsx | 1 | // These side-effects must run before all other imports: | COMMENT |
| LOW | src/main.tsx | 1041 | // kairosEnabled is computed once here and reused at the | COMMENT |
| LOW | src/main.tsx | 1601 | // chicago MCP: guarded Computer Use (app allowlist + frontmost gate + | COMMENT |
| LOW | src/main.tsx | 1961 | // lets tools inject if they want to, but turning it on by default | COMMENT |
| LOW | src/main.tsx | 1981 | // interceptor) and picks up any plugin-contributed env after plugin | COMMENT |
| LOW | src/main.tsx | 2001 | // runs during the ~280ms overlap window before the context | COMMENT |
| LOW | src/main.tsx | 2021 | COMMENT | |
| LOW | src/main.tsx | 2561 | } | COMMENT |
| LOW | src/main.tsx | 2621 | // MCP connect + plugin init + print.ts import below. loadInitialMessages | COMMENT |
| LOW | src/main.tsx | 2761 | // Await all MCP configs for regular print-mode sessions — they're | COMMENT |
| LOW | src/QueryEngine.ts | 441 | // an assistant/user/compact_boundary message — which doesn't happen until | COMMENT |
| LOW | src/query.ts | 281 | transition: undefined, | COMMENT |
| LOW | src/query.ts | 421 | ) | COMMENT |
| LOW | src/query.ts | 601 | // validated to be under the threshold, and tokenCountWithEstimation would use | COMMENT |
| LOW | src/query.ts | 1081 | isPromptTooLongMessage(lastMessage) | COMMENT |
| LOW | src/query.ts | 1561 | // covers those. If all task types move to 'next', this branch could go. | COMMENT |
| LOW | src/ink/output.ts | 741 | nextCode <= 0x7e | COMMENT |
| LOW | src/ink/dom.ts | 41 | // Used to skip empty renders during React 19's effect double-invoke in test mode | COMMENT |
| LOW | src/ink/dom.ts | 61 | // naturally cancels (pure accumulator, no target tracking). | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 721 | // padding) begins. Exposed via ScrollBoxHandle.getViewportTop() so | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 741 | node.pendingScrollDelta = undefined | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 761 | // transiently SHRINK scrollHeight (tail unmount + stale heightCache | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 801 | // startup) the probe has resolved — same timing guarantee the | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 881 | } else { | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 961 | // 1. Dirty children — their content changed, blitted pixels are | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 981 | // check cached.y−delta === screenY reduces to delta === delta | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1101 | boxBackgroundColor, | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1221 | nodeCache.set(node, rect) | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1241 | // Without this, a spinner inside a ScrollBox dirties the wrapper on every | COMMENT |
| LOW | src/ink/searchHighlight.ts | 41 | const rowOff = row * w | COMMENT |
| LOW | src/ink/ink.tsx | 121 | // pass in onRender can read it and App.tsx can update it from mouse | COMMENT |
| LOW | src/ink/ink.tsx | 141 | private readonly selectionListeners = new Set<() => void>(); | COMMENT |
| LOW | src/ink/ink.tsx | 161 | // INSIDE the BSU/ESU block so clear+paint is atomic. Writing ERASE_SCREEN | COMMENT |
| LOW | src/ink/ink.tsx | 461 | // captureScrolledRows reads the rows that are about to scroll out | COMMENT |
| LOW | src/ink/ink.tsx | 481 | // captureScrolledRows and shift* are a pair: capture grabs rows about | COMMENT |
| LOW | src/ink/ink.tsx | 501 | // the footer endpoint pins the selection, text scrolls away under | COMMENT |
| LOW | src/ink/ink.tsx | 521 | // so the diff picks up selection as ordinary cell changes and | COMMENT |
| LOW | src/ink/ink.tsx | 561 | // cells at sibling boundaries that per-node damage tracking misses. | COMMENT |
| LOW | src/ink/ink.tsx | 621 | }); | COMMENT |
| LOW | src/ink/ink.tsx | 641 | // After resize, prepend ERASE_SCREEN too. The diff only writes cells | COMMENT |
| LOW | src/ink/ink.tsx | 741 | writeDiffToTerminal(this.terminal, optimized, this.altScreenActive && !SYNC_OUTPUT_SUPPORTED); | COMMENT |
| LOW | src/ink/ink.tsx | 1481 | // We unconditionally send all disable sequences because terminal detection | COMMENT |
| LOW | src/ink/parse-keypress.ts | 21 | // Modifier is optional - when absent, defaults to 1 (no modifiers) | COMMENT |
| LOW | src/ink/parse-keypress.ts | 41 | // eslint-disable-next-line no-control-regex | COMMENT |
| LOW | src/ink/parse-keypress.ts | 261 | pasteBuffer += token.value | COMMENT |
| LOW | src/ink/log-update.ts | 141 | // Resizing is a rare enough event that it's not practically a big issue. | COMMENT |
| LOW | src/ink/log-update.ts | 181 | CURSOR_HOME, | COMMENT |
| LOW | src/ink/renderer.ts | 81 | } | COMMENT |
| LOW | src/ink/components/App.tsx | 41 | readonly exitOnCtrlC: boolean; | COMMENT |
| LOW | src/ink/components/App.tsx | 61 | // time. Returns the URL or undefined. The browser-open is deferred by | COMMENT |
| LOW | src/ink/components/App.tsx | 121 | readonly PASTE_TIMEOUT = 500; // Longer timeout for paste operations | COMMENT |
| LOW | src/ink/components/App.tsx | 221 | if (isEnabled) { | COMMENT |
| LOW | src/ink/components/App.tsx | 281 | COMMENT | |
| LOW | src/ink/components/App.tsx | 601 | // isDragging=true and leave drag-to-scroll's timer running until the | COMMENT |
| LOW | src/ink/components/App.tsx | 621 | // highlight. The anchor check guards against an orphaned release (no | COMMENT |
| LOW | src/ink/components/ScrollBox.tsx | 201 | // every render (which re-registers the ref = churn). | COMMENT |
| LOW | src/ink/hooks/use-terminal-viewport.ts | 41 | // Runs on every render because yoga layout values can change | COMMENT |
| 399 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | desktop/src/stores/chatStore.ts | 3816 | // Step 1: Collect Agent tool_use blocks → map agent name to toolUseId | COMMENT |
| LOW | desktop/src/stores/chatStore.ts | 3836 | // Step 2: Extract <teammate-message> content by teammate_id | COMMENT |
| LOW | desktop/src/stores/chatStore.ts | 3866 | // Step 3: Correlate and build notifications | COMMENT |
| LOW | src/tasks/LocalShellTask/LocalShellTask.tsx | 294 | // Step 1: Get the task and shell command from current state | COMMENT |
| LOW⚡ | src/tools/BashTool/sedEditParser.ts | 277 | // Step 1: Protect literal backslashes (\\) first - in both BRE and ERE, \\ is literal backslash | COMMENT |
| LOW⚡ | src/tools/BashTool/sedEditParser.ts | 279 | // Step 2: Replace escaped metacharacters with placeholders (these should become unescaped in JS) | COMMENT |
| LOW⚡ | src/tools/BashTool/sedEditParser.ts | 285 | // Step 3: Escape unescaped metacharacters (these are literal in BRE) | COMMENT |
| LOW⚡ | src/tools/BashTool/sedEditParser.ts | 291 | // Step 4: Replace placeholders with their JS equivalents | COMMENT |
| LOW | src/server/api/computer-use.ts | 327 | // Step 1: Check python | COMMENT |
| LOW | src/server/api/computer-use.ts | 357 | // Step 2: Extract runtime files to ~/.claude/.runtime/ | COMMENT |
| LOW | src/server/api/computer-use.ts | 370 | // Step 3: Create venv | COMMENT |
| LOW | src/server/api/computer-use.ts | 410 | // Step 4: Ensure pip | COMMENT |
| LOW | src/server/api/computer-use.ts | 431 | // Step 5: Install requirements | COMMENT |
| LOW | src/server/services/sessionService.ts | 1651 | // Step 1: Try matching the transcript model name directly (current behavior) | COMMENT |
| LOW | src/server/services/sessionService.ts | 1663 | // Step 2: Prefer the model this session actually launched with. Some | COMMENT |
| LOW | src/server/services/sessionService.ts | 1679 | // Step 3: If transcript model name didn't match, try matching with | COMMENT |
| LOW⚡ | src/server/services/sessionService.ts | 1723 | // Step 1: Try matching the transcript model name directly | COMMENT |
| LOW⚡ | src/server/services/sessionService.ts | 1733 | // Step 2: Fallback to provider configured model names. | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 753 | // Step 1: Migrate to single file format (consolidates V1/V2 files, cleans up legacy cache) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 756 | // Step 2: Sync enabledPlugins from settings.json to installed_plugins.json | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 764 | // Step 3: Initialize in-memory session state | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1183 | // Step 2: Start with existing data (or start empty if no file exists) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1192 | // Step 3: Update V2 scopes based on settings.json (settings is source of truth) | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1148 | // Step 1: Build a map of pluginId -> scope from all settings.json files | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1312 | // Step 4: Save to single file (V2 format) | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1360 | // Step 1: Load or create the plugin manifest | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1365 | // Step 2: Create the base plugin object | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1376 | // Step 3: Auto-detect optional directories in parallel | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1532 | // Step 4: Register agents directory if detected | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1616 | // Step 5: Load hooks configuration | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1764 | // Step 6: Load plugin settings | COMMENT |
| LOW | src/utils/permissions/permissionSetup.ts | 993 | // We need to check if base tools were explicitly provided (not just empty default) | COMMENT |
| LOW | src/components/MarkdownTable.tsx | 107 | // Step 1: Get minimum (longest word) and ideal (full content) widths | COMMENT |
| LOW⚡ | src/components/MarkdownTable.tsx | 123 | // Step 2: Calculate available space | COMMENT |
| LOW⚡ | src/components/MarkdownTable.tsx | 130 | // Step 3: Calculate column widths that fit available space | COMMENT |
| LOW | src/components/MarkdownTable.tsx | 158 | // Step 4: Calculate max row lines to determine if vertical format is needed | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 353 | // Step 1: Transform lines to line objects with type information | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 356 | // Step 2: Group adjacent add/remove lines for word-level diffing | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 359 | // Step 3: Number the diff lines | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 368 | // Step 4: Render formatting | COMMENT |
| LOW | src/skills/bundled/skillify.ts | 40 | ### Step 1: Analyze the Session | COMMENT |
| LOW | src/skills/bundled/skillify.ts | 52 | ### Step 2: Interview the User | COMMENT |
| LOW | src/skills/bundled/skillify.ts | 90 | ### Step 3: Write the SKILL.md | COMMENT |
| LOW | src/skills/bundled/skillify.ts | 148 | ### Step 4: Confirm and Save | COMMENT |
| LOW⚡ | src/services/compact/sessionMemoryCompact.ts | 242 | // Step 1: Handle tool_use/tool_result pairs | COMMENT |
| LOW | src/services/compact/sessionMemoryCompact.ts | 288 | // Step 2: Handle thinking blocks that share message.id with kept assistant messages | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | desktop/src/stores/chatStore.ts | 3816 | // Step 1: Collect Agent tool_use blocks → map agent name to toolUseId | COMMENT |
| LOW | desktop/src/stores/chatStore.ts | 3836 | // Step 2: Extract <teammate-message> content by teammate_id | COMMENT |
| LOW | desktop/src/stores/chatStore.ts | 3866 | // Step 3: Correlate and build notifications | COMMENT |
| LOW | src/tasks/LocalShellTask/LocalShellTask.tsx | 294 | // Step 1: Get the task and shell command from current state | COMMENT |
| LOW⚡ | src/tools/BashTool/sedEditParser.ts | 277 | // Step 1: Protect literal backslashes (\\) first - in both BRE and ERE, \\ is literal backslash | COMMENT |
| LOW⚡ | src/tools/BashTool/sedEditParser.ts | 279 | // Step 2: Replace escaped metacharacters with placeholders (these should become unescaped in JS) | COMMENT |
| LOW⚡ | src/tools/BashTool/sedEditParser.ts | 285 | // Step 3: Escape unescaped metacharacters (these are literal in BRE) | COMMENT |
| LOW⚡ | src/tools/BashTool/sedEditParser.ts | 291 | // Step 4: Replace placeholders with their JS equivalents | COMMENT |
| LOW | src/server/api/computer-use.ts | 327 | // Step 1: Check python | COMMENT |
| LOW | src/server/api/computer-use.ts | 357 | // Step 2: Extract runtime files to ~/.claude/.runtime/ | COMMENT |
| LOW | src/server/api/computer-use.ts | 370 | // Step 3: Create venv | COMMENT |
| LOW | src/server/api/computer-use.ts | 410 | // Step 4: Ensure pip | COMMENT |
| LOW | src/server/api/computer-use.ts | 431 | // Step 5: Install requirements | COMMENT |
| LOW | src/server/services/sessionService.ts | 1651 | // Step 1: Try matching the transcript model name directly (current behavior) | COMMENT |
| LOW | src/server/services/sessionService.ts | 1663 | // Step 2: Prefer the model this session actually launched with. Some | COMMENT |
| LOW | src/server/services/sessionService.ts | 1679 | // Step 3: If transcript model name didn't match, try matching with | COMMENT |
| LOW⚡ | src/server/services/sessionService.ts | 1723 | // Step 1: Try matching the transcript model name directly | COMMENT |
| LOW⚡ | src/server/services/sessionService.ts | 1733 | // Step 2: Fallback to provider configured model names. | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 753 | // Step 1: Migrate to single file format (consolidates V1/V2 files, cleans up legacy cache) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 756 | // Step 2: Sync enabledPlugins from settings.json to installed_plugins.json | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 764 | // Step 3: Initialize in-memory session state | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1183 | // Step 2: Start with existing data (or start empty if no file exists) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1192 | // Step 3: Update V2 scopes based on settings.json (settings is source of truth) | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1148 | // Step 1: Build a map of pluginId -> scope from all settings.json files | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1312 | // Step 4: Save to single file (V2 format) | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1360 | // Step 1: Load or create the plugin manifest | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1365 | // Step 2: Create the base plugin object | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1376 | // Step 3: Auto-detect optional directories in parallel | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1532 | // Step 4: Register agents directory if detected | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1616 | // Step 5: Load hooks configuration | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1764 | // Step 6: Load plugin settings | COMMENT |
| LOW | src/components/MarkdownTable.tsx | 107 | // Step 1: Get minimum (longest word) and ideal (full content) widths | COMMENT |
| LOW⚡ | src/components/MarkdownTable.tsx | 123 | // Step 2: Calculate available space | COMMENT |
| LOW⚡ | src/components/MarkdownTable.tsx | 130 | // Step 3: Calculate column widths that fit available space | COMMENT |
| LOW | src/components/MarkdownTable.tsx | 158 | // Step 4: Calculate max row lines to determine if vertical format is needed | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 353 | // Step 1: Transform lines to line objects with type information | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 356 | // Step 2: Group adjacent add/remove lines for word-level diffing | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 359 | // Step 3: Number the diff lines | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 368 | // Step 4: Render formatting | COMMENT |
| LOW | src/skills/bundled/skillify.ts | 40 | ### Step 1: Analyze the Session | COMMENT |
| LOW | src/skills/bundled/skillify.ts | 52 | ### Step 2: Interview the User | COMMENT |
| LOW | src/skills/bundled/skillify.ts | 90 | ### Step 3: Write the SKILL.md | COMMENT |
| LOW | src/skills/bundled/skillify.ts | 148 | ### Step 4: Confirm and Save | COMMENT |
| LOW⚡ | src/services/compact/sessionMemoryCompact.ts | 242 | // Step 1: Handle tool_use/tool_result pairs | COMMENT |
| LOW | src/services/compact/sessionMemoryCompact.ts | 288 | // Step 2: Handle thinking blocks that share message.id with kept assistant messages | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | adapters/feishu/streaming-card.ts | 220 | this.deps.larkClient.im.message.create({ | CODE |
| CRITICAL | adapters/feishu/streaming-card.ts | 355 | this.deps.larkClient.im.message.patch({ | CODE |
| CRITICAL | adapters/feishu/streaming-card.ts | 369 | this.deps.larkClient.im.message.patch({ | CODE |
| CRITICAL | adapters/feishu/streaming-card.ts | 424 | this.deps.larkClient.im.message.patch({ | CODE |
| CRITICAL | adapters/feishu/streaming-card.ts | 577 | this.deps.larkClient.im.message.patch({ | CODE |
| CRITICAL | src/tools/AgentTool/UI.tsx | 839 | const toolResultBlock = lastToolResult.data.message.message.content.find(c => c.type === 'tool_result'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/en/agent/01-usage-guide.md | 6 | <a href="#1-what-is-the-multi-agent-system">Multi-Agent System</a> · <a href="#2-six-built-in-agents">Six Built-in Agent | CODE |
| MEDIUM | release-notes/v0.4.3.md | 58 | - #830:尊重自定义 provider context window。 | CODE |
| MEDIUM | src/main.tsx | 3319 | // of a remote assistant session. The agentic loop runs remotely; this | COMMENT |
| MEDIUM | src/query.ts | 198 | // budget for the whole agentic turn; `remaining` is computed per iteration | COMMENT |
| MEDIUM | src/tools/AgentTool/loadAgentsDir.ts | 118 | maxTurns?: number // Maximum number of agentic turns before stopping | CODE |
| MEDIUM | src/utils/betas.ts | 410 | // excluded by getAllModelBetas() since non-agentic Haiku calls don't need them. | COMMENT |
| MEDIUM | src/utils/attachments.ts | 1049 | // During proactive agentic loops, task-notification commands would otherwise | COMMENT |
| MEDIUM | src/utils/attachments.ts | 1283 | // long agentic sessions, where this accumulated 60-105× per session. | COMMENT |
| MEDIUM | src/services/api/claude.ts | 746 | // (query.ts decrements across the agentic loop). | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1172 | // non-agentic queries (compact, side_question, extract_memories, etc.) | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1508 | // per-call so non-agentic queries keep their own stable header set. | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1542 | // Only latch from agentic queries so a classifier call doesn't flip the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ktop/scripts/e2e-deepseek-thinking-ui-agent-browser.sh | 192 | .find((node) => node.getAttribute('placeholder') === placeholder); | CODE |
| LOW | …ktop/scripts/e2e-deepseek-thinking-ui-agent-browser.sh | 279 | .find((node) => node.getAttribute('placeholder') === placeholder); | CODE |
| LOW | …ktop/scripts/e2e-deepseek-thinking-ui-agent-browser.sh | 285 | .filter((node) => node.getAttribute('placeholder') === '与主模型相同'); | CODE |
| LOW | desktop/src/stores/hahaOpenAIOAuthStore.test.ts | 60 | email: 'user@example.com', | CODE |
| LOW | desktop/src/stores/hahaOpenAIOAuthStore.test.ts | 73 | email: 'user@example.com', | CODE |
| LOW | desktop/src/stores/hahaOpenAIOAuthStore.test.ts | 85 | email: 'user@example.com', | CODE |
| LOW | desktop/src/__tests__/pages.test.tsx | 277 | expect(textarea).toHaveAttribute('placeholder', 'Ask anything...') | CODE |
| LOW | src/server/__tests__/haha-grok-oauth-service.test.ts | 70 | email: 'user@example.com', | CODE |
| LOW | src/server/__tests__/haha-grok-oauth-service.test.ts | 80 | email: 'user@example.com', | CODE |
| LOW | src/server/__tests__/haha-grok-oauth-api.test.ts | 41 | email: 'user@example.com', | CODE |
| LOW | src/server/__tests__/haha-grok-oauth-api.test.ts | 49 | expect(statusText).toContain('user@example.com') | CODE |
| LOW | src/server/__tests__/providers.test.ts | 482 | email: 'user@example.com', | CODE |
| LOW | src/server/services/diagnosticsShare.test.ts | 81 | email: 'user@example.com', | CODE |
| LOW | src/server/services/diagnosticsShare.test.ts | 105 | 'user@example.com', | CODE |
| LOW | src/utils/plugins/pluginLoader.ts | 1117 | * "name": "John Doe", | COMMENT |
| LOW | src/utils/plugins/marketplaceManager.ts | 1244 | * "owner": { "name": "John Doe", "email": "john@example.com" }, | COMMENT |
| LOW | src/utils/mcp/elicitationValidation.ts | 24 | example: 'user@example.com', | CODE |
| LOW | src/utils/__tests__/tokens.test.ts | 24 | content: [{ type: 'text', text: 'placeholder' }], | CODE |
| LOW | src/skills/bundled/loremIpsum.ts | 273 | // Just dump the lorem ipsum text into the conversation | COMMENT |
| LOW | src/services/openaiAuth/storage.test.ts | 90 | email: 'user@example.com', | CODE |
| LOW | src/services/openaiAuth/storage.test.ts | 103 | email: 'user@example.com', | CODE |
| LOW | src/services/openaiAuth/fetch.test.ts | 29 | email: 'user@example.com', | CODE |
| LOW | src/services/openaiAuth/fetch.ts | 22 | export const OPENAI_OAUTH_DUMMY_KEY = 'openai-oauth-dummy-key' | CODE |
| LOW | src/services/grokAuth/storage.test.ts | 35 | email: 'user@example.com', | CODE |
| LOW | src/services/grokAuth/fetch.ts | 12 | export const GROK_OAUTH_DUMMY_KEY = 'grok-oauth-dummy-key' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/server/services/sessionService.ts | 1437 | // 3. Look for AI-generated title (written by titleService) | COMMENT |
| HIGH | src/utils/claudeInChrome/setup.ts | 320 | REM Generated by Claude Code - do not edit manually | CODE |
| HIGH | src/utils/claudeInChrome/setup.ts | 325 | # Generated by Claude Code - do not edit manually | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | runtime/win_helper.py | 265 | except Exception: | CODE |
| LOW⚡ | runtime/win_helper.py | 277 | except Exception: | CODE |
| LOW⚡ | runtime/win_helper.py | 541 | except Exception: | CODE |
| LOW⚡ | runtime/win_helper.py | 553 | except Exception: | CODE |
| LOW | runtime/win_helper.py | 159 | except Exception: | CODE |
| LOW | runtime/win_helper.py | 239 | except Exception: | CODE |
| LOW | runtime/win_helper.py | 405 | except Exception: | CODE |
| LOW | runtime/win_helper.py | 430 | except Exception: | CODE |
| LOW | runtime/win_helper.py | 763 | except Exception as exc: | CODE |
| LOW | runtime/mac_helper.py | 219 | except Exception: | CODE |
| LOW | runtime/mac_helper.py | 365 | except Exception: | CODE |
| LOW | runtime/mac_helper.py | 371 | except Exception: | CODE |
| LOW | runtime/mac_helper.py | 382 | except Exception: | CODE |
| LOW | runtime/mac_helper.py | 522 | except Exception: | CODE |
| LOW | runtime/mac_helper.py | 530 | except Exception: | CODE |
| LOW | runtime/mac_helper.py | 570 | except Exception: | CODE |
| LOW | runtime/mac_helper.py | 769 | except Exception as exc: | CODE |
| LOW | docs/features/computer-use-architecture.md | 410 | except Exception as e: | CODE |
| MEDIUM | docs/features/computer-use-architecture.md | 406 | def main(): | CODE |
| LOW | docs/en/features/computer-use-architecture.md | 407 | except Exception as e: | CODE |
| MEDIUM | docs/en/features/computer-use-architecture.md | 403 | def main(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | package-lock.json | 7481 | "resolved": "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.3.tgz", | CODE |
| MEDIUM | src/tools/PowerShellTool/commandSemantics.ts | 71 | // robocopy.exe: Windows native robust file copy | COMMENT |
| MEDIUM | src/utils/swarm/backends/PaneBackendExecutor.ts | 341 | // A more robust check would query the backend for pane existence | COMMENT |
| MEDIUM | src/utils/powershell/parser.ts | 1068 | // and extracting .Redirections) is both simpler and more robust: it catches | COMMENT |
| MEDIUM | src/hooks/useVoiceIntegration.tsx | 176 | // the gap is seamless once transcript text arrives. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime/win_helper.py | 281 | CODE | |
| LOW | runtime/win_helper.py | 434 | CODE | |
| LOW | runtime/win_helper.py | 478 | CODE | |
| LOW | runtime/mac_helper.py | 350 | CODE | |
| LOW | runtime/mac_helper.py | 448 | CODE | |
| LOW | runtime/mac_helper.py | 608 | CODE | |
| LOW | runtime/test_helpers.py | 33 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/tools/TodoWriteTool/prompt.ts | 100 | print("Hello World") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime/win_helper.py | 7 | CODE | |
| LOW | runtime/mac_helper.py | 2 | CODE | |
| LOW | runtime/test_helpers.py | 12 | CODE | |
| LOW | runtime/test_helpers.py | 19 | CODE | |
| LOW | runtime/test_helpers.py | 19 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime/test_helpers.py | 35 | # Read the file and extract just the KEY_MAP dict | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | desktop/scripts/install-macos-unsigned.sh | 15 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/utils/hooks.ts | 1211 | // TODO: Add tests for EPIPE handling. | COMMENT |