runs anywhere. uses anything
This report presents the forensic synthetic code analysis of Gitlawb/openclaude, a TypeScript project with 29,979 GitHub stars. SynthScan v2.0 examined 811,343 lines of code across 3109 source files, recording 3569 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 4.9 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 3569 distinct pattern matches across 12 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 | tests/sdk/sdk-preserved-segment.test.ts | 37 | function createCompactTranscriptWithPreservedSegment( | CODE |
| LOW | tests/sdk/permissions.test.ts | 43 | function toolUseContextForPermissionMode(mode: string) { | CODE |
| LOW | tests/sdk/helpers/query-test-doubles.ts | 91 | export function createMinimalConversation(sessionId: string): Array<Record<string, unknown>> { | CODE |
| LOW | tests/sdk/helpers/query-test-doubles.ts | 118 | export function createMultiTurnConversation( | CODE |
| LOW | scripts/provider-recommend.ts | 38 | export function getOpenAIConfigurationState( | CODE |
| LOW | scripts/system-check.test.ts | 369 | function useOpenAICompatibleProvider() { | CODE |
| LOW | scripts/system-check.test.ts | 375 | function useOpenAICompatibleProviderWithoutModel() { | CODE |
| LOW | scripts/no-raw-abort-signal-timeout.test.ts | 45 | function isAllowedDocumentationLine(line: string): boolean { | CODE |
| LOW | scripts/no-raw-abort-signal-timeout.test.ts | 82 | function findRawTimeoutSignalUsages(): Finding[] { | CODE |
| LOW | scripts/externalsValidation.ts | 64 | export function validateIntentionallyBundled( | CODE |
| LOW | scripts/externalsValidation.ts | 146 | export function validateOptionalRuntimeExternals( | CODE |
| LOW⚡ | scripts/system-check.ts | 221 | function formatDuckDuckGoReliabilityDetail(providerMode: string): string { | CODE |
| LOW⚡ | scripts/system-check.ts | 225 | function vertexModelSupportsNativeWebSearch(model: string): boolean { | CODE |
| LOW⚡ | scripts/system-check.ts | 233 | function isCodexResponsesWebSearchEnabledForDoctor(): boolean { | CODE |
| LOW⚡ | scripts/system-check.ts | 241 | function buildNativeWebSearchCheck(): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 366 | function getAutoFirecrawlMissingCredentialDetail(): string | undefined { | CODE |
| LOW⚡ | scripts/system-check.ts | 374 | function appendAutoFirecrawlMissingCredentialDetail(result: CheckResult): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 384 | function isWebSearchApiProviderConfiguredForDoctor(providerName: string): boolean { | CODE |
| LOW⚡ | scripts/system-check.ts | 388 | function buildCustomWebSearchCheck(providerConfigured: boolean): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 457 | function formatWebSearchTimeoutSeconds(): string { | CODE |
| LOW⚡ | scripts/system-check.ts | 461 | function appendWebSearchTimeoutDetail(result: CheckResult): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 469 | function appendWebSearchTimeoutDetails(results: CheckResult[]): CheckResult[] { | CODE |
| LOW | scripts/system-check.ts | 99 | function formatActiveHardCapDetail( | CODE |
| LOW | scripts/system-check.ts | 278 | function buildAutoNativeWebSearchCheck(): CheckResult | undefined { | CODE |
| LOW | scripts/system-check.ts | 312 | function getConfiguredWebSearchApiProviderNames(): string[] { | CODE |
| LOW | scripts/system-check.ts | 319 | function appendConfiguredWebSearchApiProviderDetail(result: CheckResult): CheckResult { | CODE |
| LOW | scripts/system-check.ts | 330 | function hasFirecrawlRunnableConfig(): boolean { | CODE |
| LOW | scripts/system-check.ts | 335 | function buildFirecrawlWebSearchCheck(): CheckResult { | CODE |
| LOW | scripts/system-check.ts | 577 | export function formatReachabilityFailureDetail( | CODE |
| LOW | scripts/system-check.ts | 607 | export function readNodeExecutableVersion( | CODE |
| LOW | scripts/system-check.ts | 677 | export function isCliSandboxRuntimeStubbed(bundleText: string): boolean { | CODE |
| LOW | scripts/system-check.ts | 797 | function getOpenAICompatibleRouteId(baseUrl: string): string { | CODE |
| LOW | scripts/system-check.ts | 805 | function getOpenAICompatibleCredentialContext(baseUrl: string): { | CODE |
| LOW | scripts/system-check.ts | 1131 | async function checkProviderGenerationReadiness(): Promise<CheckResult> { | CODE |
| LOW | scripts/pr-intent-scan.ts | 178 | function hasSuspiciousDownloadIndicators(url: URL): boolean { | CODE |
| LOW | scripts/pr-intent-scan.ts | 246 | function findSensitivePathFindings(line: DiffLine): Finding[] { | CODE |
| LOW⚡ | scripts/no-telemetry-plugin.ts | 33 | export async function checkGlobalInstallPermissions() { return { hasPermissions: false, npmPrefix: null }; } | CODE |
| LOW⚡ | scripts/no-telemetry-plugin.ts | 58 | export async function logPermissionContextForAnts() {} | CODE |
| LOW | scripts/no-telemetry-plugin.ts | 76 | export function getUndercoverInstructions() { return ''; } | CODE |
| LOW | scripts/no-telemetry-plugin.ts | 77 | export function shouldShowUndercoverAutoNotice() { return false; } | CODE |
| LOW | scripts/no-telemetry-plugin.ts | 117 | function escapeForResolvedPathRegex(modulePath: string): string { | CODE |
| LOW | scripts/provider-launch.ts | 84 | async function resolveOllamaDefaultModel( | CODE |
| LOW | scripts/provider-launch.ts | 92 | async function resolveAtomicChatDefaultModel(): Promise<string | null> { | CODE |
| LOW | scripts/provider-launch.ts | 141 | function hasUsableGeminiLaunchAuth(env: NodeJS.ProcessEnv): boolean { | CODE |
| LOW | scripts/provider-launch.ts | 156 | export function hasUsableOpenAILaunchCredential( | CODE |
| LOW | vscode-extension/openclaude-vscode/src/presentation.js | 99 | function buildControlCenterViewModel(status = {}) { | CODE |
| LOW | vscode-extension/openclaude-vscode/src/extension.js | 376 | async function collectControlCenterState() { | CODE |
| LOW | vscode-extension/openclaude-vscode/src/extension.js | 574 | function getPrimaryLaunchActionDetail(status) { | CODE |
| LOW | vscode-extension/openclaude-vscode/src/extension.js | 590 | function getWorkspaceRootActionDetail(status, fallbackDetail) { | CODE |
| LOW | …e-extension/openclaude-vscode/src/chat/chatRenderer.js | 801 | function getOrCreateAssistantEl() { | CODE |
| LOW | …nsion/openclaude-vscode/src/chat/permissionResponse.js | 13 | function buildPermissionControlResult(action, ctx = {}) { | CODE |
| LOW | src/projectOnboardingSteps.ts | 40 | export function isProjectOnboardingComplete(): boolean { | CODE |
| LOW | src/history.ts | 230 | async function resolveStoredPastedContent( | CODE |
| LOW | src/history.ts | 436 | export function clearPendingHistoryEntries(): void { | CODE |
| LOW | src/main.tsx | 363 | function prefetchSystemContextIfSafe(): void { | CODE |
| LOW | src/main.tsx | 390 | function startMemoryMonitorIfNeeded(): void { | CODE |
| LOW | src/Tool.ts | 347 | export function filterToolProgressMessages( | CODE |
| LOW | src/commands.ts | 395 | function withOpenClaudeCommandLocalizationKey(cmd: Command): Command { | CODE |
| LOW | src/commands.ts | 469 | export function meetsAvailabilityRequirement(cmd: Command | null | undefined): boolean { | CODE |
| LOW | src/commands.ts | 575 | export function clearCommandMemoizationCaches(): void { | CODE |
| 2746 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/sdk/query-methods.test.ts | 241 | // setPermissionMode is tested via buildPermissionContext in permissions.test.ts | COMMENT |
| LOW | scripts/generate-sdk-types.ts | 41 | UUIDPlaceholder: 'string', | COMMENT |
| LOW | scripts/stubMarkerGuard.ts | 21 | return fromSrc.replace(/\.(?:[cm]?[jt]sx?)$/, '') | COMMENT |
| LOW | scripts/externals.ts | 81 | '@anthropic-ai/foundry-sdk', | COMMENT |
| LOW | scripts/build.ts | 1001 | // ── Guard: no unexpected missing-module stubs in the shipped CLI bundle ───── | COMMENT |
| LOW | scripts/build.ts | 1021 | if (result?.success) { | COMMENT |
| LOW | src/main.tsx | 1 | // These side-effects must run before all other imports: | COMMENT |
| LOW | src/main.tsx | 901 | COMMENT | |
| LOW | src/main.tsx | 1001 | prompt = undefined; | COMMENT |
| LOW | src/main.tsx | 1021 | // Trust gate: .claude/settings.json is attacker-controllable in an | COMMENT |
| LOW | src/main.tsx | 1461 | // stderr+exit(1) — a throw here becomes a silent unhandled | COMMENT |
| LOW | src/main.tsx | 1921 | if (!effectiveReplayUserMessages && outputFormat === 'stream-json') { | COMMENT |
| LOW | src/main.tsx | 1941 | COMMENT | |
| LOW | src/main.tsx | 2381 | })); | COMMENT |
| LOW | src/main.tsx | 2541 | // This includes potentially dangerous environment variables from untrusted sources | COMMENT |
| LOW | src/QueryEngine.ts | 441 | // src/query.ts (the shared query path used by both REPL and SDK), so they | COMMENT |
| LOW | src/query.ts | 561 | // task_budget.remaining tracking across compaction boundaries. Undefined | COMMENT |
| LOW | src/query.ts | 761 | ? microcompactResult?.compactionInfo?.pendingCacheEdits | COMMENT |
| LOW | src/query.ts | 1081 | COMMENT | |
| LOW | src/query.ts | 1101 | // Widened to walrus so RC can act as fallback when proactive fails. | COMMENT |
| LOW | src/query.ts | 1761 | // drain first (cheap, keeps granular context), then reactive compact | COMMENT |
| LOW | src/query.ts | 2101 | // `options.model` win over the new profile's OPENAI_MODEL. Mirror | COMMENT |
| LOW | src/query.ts | 2681 | // These will be sent as attachments so Claude can respond to them in the current turn. | COMMENT |
| LOW | src/interactiveHelpers.tsx | 241 | const { | COMMENT |
| LOW | src/interactiveHelpers.tsx | 261 | // true; only blocks on a cold/stale-false cache (awaits the same memoized | 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 | 561 | // parent) AND a sibling lands at the same y. Skip rendering — both would | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 661 | output.write(x, y, text, softWrap) | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 761 | // scrollAnchor: scroll so the anchored element's top is at the | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 781 | // previous max, pin to the new max. Scroll away → stop following; | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 841 | let cur = node.scrollTop ?? 0 | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 921 | } | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1001 | COMMENT | |
| LOW | src/ink/render-node-to-output.ts | 1021 | const spaces = ' '.repeat(w) | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1281 | // conservatively disable blit for all. | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1481 | } | 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 | 321 | // Physical cursor position is unknown after the shell took over during | COMMENT |
| LOW | src/ink/ink.tsx | 481 | // before they're overwritten — the text stays copyable until the | COMMENT |
| LOW | src/ink/ink.tsx | 501 | // to scroll off, shift moves the selection endpoint so the same rows | COMMENT |
| LOW | src/ink/ink.tsx | 521 | // the highlight, and getSelectedText reads the CURRENT screen | COMMENT |
| LOW | src/ink/ink.tsx | 541 | // LogUpdate remains a pure diff engine. | COMMENT |
| LOW | src/ink/ink.tsx | 581 | // Selection/highlight overlays write via setCellStyleId which doesn't | COMMENT |
| LOW | src/ink/ink.tsx | 641 | }); | COMMENT |
| LOW | src/ink/ink.tsx | 661 | // After resize, prepend ERASE_SCREEN too. The diff only writes cells | COMMENT |
| LOW | src/ink/ink.tsx | 761 | const skipSyncMarkers = this.altScreenActive ? !SYNC_OUTPUT_SUPPORTED : rewriteMainScreen || shouldSkipMainScreenSyn | COMMENT |
| LOW | src/ink/ink.tsx | 1501 | // so we must reset terminal modes here to prevent escape sequence leakage. | 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/log-update.ts | 161 | // finds only the rows that scrolled IN as diffs. prev.screen is | COMMENT |
| LOW | src/ink/log-update.ts | 201 | // Additionally, the cursor-restore scroll pushes 1 more row into scrollback. | 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 | 561 | /** Exported for testing. Mutates app.props.selection and click/hover state. */ | COMMENT |
| LOW | src/ink/components/App.tsx | 661 | // trackpad jitter during an intended double-click (press→wobble→release | COMMENT |
| 438 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | web/src/data/commands.ts | 61 | // ── sessions & conversations ───────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 78 | // ── context & memory ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 91 | // ── models & providers ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 102 | // ── code review & git ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 112 | // ── tools & integrations ───────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 123 | // ── ui & customization ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 136 | // ── help & diagnostics ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 59 | // ── File absent ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 69 | // ── Valid JSON object ──────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 91 | // ── Malformed / non-object JSON ────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 111 | // ── Cache invalidation ─────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 126 | // ── Security gate ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 136 | // ── All getter variants return default ─────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 147 | // ── Gate helpers route through _getFlagValue ────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 25 | // ─── Auto-updater (phones home to GCS + npm) ────────────────── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 42 | // ─── Plugin fetch telemetry (not the marketplace itself) ─────── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 49 | // ─── Transcript / feedback sharing ───────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 55 | // ─── Internal employee logging (not needed in the external build) ───── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 62 | // ─── Deleted Anthropic-internal modules ─────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 85 | // ── Disabled: require Anthropic infrastructure or missing source ───── | COMMENT |
| MEDIUM⚡ | scripts/build.ts | 103 | // ── Disabled by default, opt-in via runtime env var ───────────────── | COMMENT |
| MEDIUM⚡ | scripts/build.ts | 106 | // ── Enabled: upstream defaults ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/build.ts | 114 | // ── Enabled: new activations ──────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 132 | // ── Pre-process: replace feature() calls with boolean literals ────── | COMMENT |
| MEDIUM | scripts/build.ts | 529 | // ── SDK Bundle Build ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 966 | // ── Validate SDK bundle for React/Ink leakage ────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 989 | // ── Validate external lists ────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 1001 | // ── Guard: no unexpected missing-module stubs in the shipped CLI bundle ───── | COMMENT |
| MEDIUM | src/tools/PowerShellTool/pathValidation.ts | 134 | // ─── Write/create operations ────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/tools/PowerShellTool/pathValidation.ts | 384 | // ─── Read operations ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/tools/BashTool/pathValidation.ts | 1204 | // ─────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/tools/BashTool/pathValidation.ts | 1224 | // ─────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 169 | // ── 1. Create session (POST /v1/code/sessions, no env_id) ─────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 219 | // ── 3. Build v2 transport (SSETransport + CCRClient) ──────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 261 | // ── 4. State ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 314 | // ── 5. JWT refresh scheduler ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 382 | // ── 6. Wire callbacks (extracted so transport-rebuild can re-wire) ────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 533 | // ── 8. 401 recovery (OAuth refresh + rebuild) ─────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 610 | // ── 8. History flush + drain helpers ──────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 662 | // ── 9. Teardown ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 773 | // ── 10. Handle ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 900 | // ─── Session API (v2 /code/sessions, no env) ───────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/initReplBridge.ts | 407 | // ── GrowthBook gate: env-less bridge ────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/initReplBridge.ts | 464 | // ── v1 path: env-based (register/poll/ack/heartbeat) ────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMessaging.ts | 31 | // ─── Type guards ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMessaging.ts | 124 | // ─── Ingress routing ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMessaging.ts | 213 | // ─── Server-initiated control requests ─────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMessaging.ts | 399 | // ─── Result message (for session archival on teardown) ─────────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMessaging.ts | 424 | // ─── BoundedUUIDSet (echo-dedup ring buffer) ───────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMain.ts | 2762 | // ─── Headless bridge (daemon worker) ──────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/providerProfile.test.ts | 2212 | // ── Atomic Chat profile tests ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/providerModels.test.ts | 9 | // ── parseModelList ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/providerModels.test.ts | 88 | // ── getPrimaryModel ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/providerModels.test.ts | 116 | // ── hasMultipleModels ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/terminalPanel.ts | 54 | // ── public API ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/terminalPanel.ts | 60 | // ── tmux helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/terminalPanel.ts | 152 | // ── show shell ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/terminalPanel.ts | 173 | // ── helpers ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/bash/ast.ts | 2043 | // ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/bash/ast.ts | 2052 | // ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| 84 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/sdk/session-functions.test.ts | 316 | // Step 1: Create session with conversation | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 338 | // Step 2: Read messages — should find 2 | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 342 | // Step 3: Rename — should append title entry | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 348 | // Step 4: Tag — should append tag entry | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 354 | // Step 5: Fork — should create new session with remapped UUIDs | COMMENT |
| LOW | tests/sdk/session-functions.test.ts | 376 | // Step 6: Delete original — forked should still exist | COMMENT |
| LOW⚡ | tests/sdk/permissions.test.ts | 876 | // Step 1: Timeout fires first — resolves with deny | COMMENT |
| LOW⚡ | tests/sdk/permissions.test.ts | 881 | // Step 2: Host responds late with allow — must be ignored | COMMENT |
| LOW | src/tasks/LocalShellTask/LocalShellTask.tsx | 294 | // Step 1: Get the task and shell command from current state | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 110 | // Step 3: primitives short-circuit (post-toJSON the value may now be one). | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 113 | // Step 4: arrays — element key is the index as a string. | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 118 | // Step 5: cycle check on the post-toJSON value. | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 715 | // Step 1: Migrate to single file format (consolidates V1/V2 files, cleans up legacy cache) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 718 | // Step 2: Sync enabledPlugins from settings.json to installed_plugins.json | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 726 | // Step 3: Initialize in-memory session state | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1131 | // Step 2: Start with existing data (or start empty if no file exists) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1140 | // Step 3: Update V2 scopes based on settings.json (settings is source of truth) | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1096 | // Step 1: Build a map of pluginId -> scope from all settings.json files | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1260 | // Step 4: Save to single file (V2 format) | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1452 | // Step 1: Load or create the plugin manifest | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1457 | // Step 2: Create the base plugin object | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1468 | // Step 3: Auto-detect optional directories in parallel | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1686 | // Step 4: Process additional agent paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1708 | // Step 5: Process additional skill paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1730 | // Step 6: Process additional output style paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1752 | // Step 7: Load hooks configuration | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1934 | // Step 8: Load plugin settings | COMMENT |
| LOW | src/utils/permissions/permissionSetup.ts | 1053 | // 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/entrypoints/sdk/v2.ts | 692 | // Step 1: Index ALL non-sidechain entries by UUID (user, assistant, system, etc.) | COMMENT |
| LOW | src/entrypoints/sdk/v2.ts | 748 | // Step 2: Only user/assistant entries can be conversation leaves | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 243 | // Step 1: Read entries — compact-aware for large files | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 264 | // Step 2: Index ALL non-sidechain entries by UUID (user, assistant, system, etc.) | COMMENT |
| LOW⚡ | src/entrypoints/sdk/query.ts | 279 | // Step 3: Apply preserved segment relinks if segment exists | COMMENT |
| LOW⚡ | src/entrypoints/sdk/query.ts | 285 | // Step 4: Prune pre-boundary entries (keep only preserved + post-boundary) | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 325 | // Step 5: Select leaf — either upToUuid target, or latest USER/ASSISTANT entry | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 359 | // Step 5: Build conversation chain and strip internal fields | 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 | tests/sdk/session-functions.test.ts | 316 | // Step 1: Create session with conversation | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 338 | // Step 2: Read messages — should find 2 | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 342 | // Step 3: Rename — should append title entry | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 348 | // Step 4: Tag — should append tag entry | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 354 | // Step 5: Fork — should create new session with remapped UUIDs | COMMENT |
| LOW | tests/sdk/session-functions.test.ts | 376 | // Step 6: Delete original — forked should still exist | COMMENT |
| LOW⚡ | tests/sdk/permissions.test.ts | 876 | // Step 1: Timeout fires first — resolves with deny | COMMENT |
| LOW⚡ | tests/sdk/permissions.test.ts | 881 | // Step 2: Host responds late with allow — must be ignored | COMMENT |
| LOW | src/tasks/LocalShellTask/LocalShellTask.tsx | 294 | // Step 1: Get the task and shell command from current state | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 110 | // Step 3: primitives short-circuit (post-toJSON the value may now be one). | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 113 | // Step 4: arrays — element key is the index as a string. | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 118 | // Step 5: cycle check on the post-toJSON value. | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 715 | // Step 1: Migrate to single file format (consolidates V1/V2 files, cleans up legacy cache) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 718 | // Step 2: Sync enabledPlugins from settings.json to installed_plugins.json | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 726 | // Step 3: Initialize in-memory session state | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1131 | // Step 2: Start with existing data (or start empty if no file exists) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1140 | // Step 3: Update V2 scopes based on settings.json (settings is source of truth) | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1096 | // Step 1: Build a map of pluginId -> scope from all settings.json files | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1260 | // Step 4: Save to single file (V2 format) | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1452 | // Step 1: Load or create the plugin manifest | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1457 | // Step 2: Create the base plugin object | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1468 | // Step 3: Auto-detect optional directories in parallel | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1686 | // Step 4: Process additional agent paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1708 | // Step 5: Process additional skill paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1730 | // Step 6: Process additional output style paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1752 | // Step 7: Load hooks configuration | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1934 | // Step 8: 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/entrypoints/sdk/v2.ts | 692 | // Step 1: Index ALL non-sidechain entries by UUID (user, assistant, system, etc.) | COMMENT |
| LOW | src/entrypoints/sdk/v2.ts | 748 | // Step 2: Only user/assistant entries can be conversation leaves | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 243 | // Step 1: Read entries — compact-aware for large files | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 264 | // Step 2: Index ALL non-sidechain entries by UUID (user, assistant, system, etc.) | COMMENT |
| LOW⚡ | src/entrypoints/sdk/query.ts | 279 | // Step 3: Apply preserved segment relinks if segment exists | COMMENT |
| LOW⚡ | src/entrypoints/sdk/query.ts | 285 | // Step 4: Prune pre-boundary entries (keep only preserved + post-boundary) | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 325 | // Step 5: Select leaf — either upToUuid target, or latest USER/ASSISTANT entry | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 359 | // Step 5: Build conversation chain and strip internal fields | 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 |
|---|---|---|---|---|
| MEDIUM | src/main.tsx | 3220 | // of a remote assistant session. The agentic loop runs remotely; this | COMMENT |
| MEDIUM | src/query.ts | 441 | // budget for the whole agentic turn; `remaining` is computed per iteration | COMMENT |
| MEDIUM | src/tools/WebSearchTool/README_SEARCH_PROVIDERS.md | 28 | # Tavily (recommended for AI — fast, RAG-ready) | COMMENT |
| MEDIUM | src/tools/WebSearchTool/providers/custom.ts | 136 | // Security guardrails | COMMENT |
| MEDIUM | src/tools/AgentTool/loadAgentsDir.ts | 122 | maxTurns?: number // Maximum number of agentic turns before stopping | CODE |
| MEDIUM | src/utils/betas.ts | 419 | // excluded by getAllModelBetas() since non-agentic Haiku calls don't need them. | COMMENT |
| MEDIUM | src/utils/attachments.ts | 1123 | // During proactive agentic loops, task-notification commands would otherwise | COMMENT |
| MEDIUM | src/utils/attachments.ts | 1357 | // long agentic sessions, where this accumulated 60-105× per session. | COMMENT |
| MEDIUM | src/services/api/geminiVertexClient.ts | 661 | // this, any agentic prompt (which always declares tools) returns | COMMENT |
| MEDIUM | src/services/api/claude.ts | 730 | // (query.ts decrements across the agentic loop). | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1158 | // non-agentic queries (compact, side_question, extract_memories, etc.) | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1520 | // per-call so non-agentic queries keep their own stable header set. | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1554 | // Only latch from agentic queries so a classifier call doesn't flip the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/assistant/sessionHistory.ts | 94 | // More robust extraction - handle various URL formats | COMMENT |
| MEDIUM | src/tools/PowerShellTool/commandSemantics.ts | 216 | // 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/screens/replFallbackModelProp.test.ts | 111 | // The robust fix: walk the braces explicitly to find the matching | COMMENT |
| MEDIUM | src/hooks/useVoiceIntegration.tsx | 176 | // the gap is seamless once transcript text arrives. | COMMENT |
| MEDIUM | src/services/api/geminiVertexClient.ts | 219 | // everything else is dropped. This is robust against future JSON Schema | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/utils/claudeInChrome/setup.ts | 319 | REM Generated by Claude Code - do not edit manually | CODE |
| HIGH | src/utils/claudeInChrome/setup.ts | 324 | # Generated by Claude Code - do not edit manually | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/tools/AgentTool/UI.tsx | 727 | const toolResultBlock = lastToolResult.data.message.message.content.find(c => c.type === 'tool_result'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/utils/plugins/pluginLoader.ts | 1121 | * "name": "John Doe", | COMMENT |
| LOW | src/utils/plugins/marketplaceManager.ts | 1325 | * "owner": { "name": "John Doe", "email": "john@example.com" }, | COMMENT |
| LOW | src/utils/mcp/elicitationValidation.ts | 24 | example: 'user@example.com', | CODE |
| LOW | src/components/ProviderManager.test.tsx | 982 | mounted.stdin.write('user@example.com') | CODE |
| LOW | src/components/ProviderManager.test.tsx | 1011 | email: 'user@example.com', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/tools/TodoWriteTool/prompt.ts | 100 | print("Hello World") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/utils/hooks.ts | 1390 | // TODO: Add tests for EPIPE handling. | COMMENT |