Repository Analysis

binaricat/Netcatty

SSH workspace, SFTP, and terminals in one

2.8 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of binaricat/Netcatty, a TypeScript project with 3,531 GitHub stars. SynthScan v2.0 examined 337,328 lines of code across 1364 source files, recording 835 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 2.8 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).

2.8
Adjusted Score
2.8
Raw Score
100%
Time Factor
2026-07-14
Last Push
3.5K
Stars
TypeScript
Language
337.3K
Lines of Code
1.4K
Files
835
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 0HIGH 6MEDIUM 17LOW 812

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 835 distinct pattern matches across 11 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 Identifiers763 hits · 816 pts
SeverityFileLineSnippetContext
LOWindex.tsx88function TerminalPopupWindowFallback() {CODE
LOWcomponents/terminalPaneVisibility.ts29export function shouldUseTerminalPaneSplitLayout({CODE
LOWcomponents/terminalPaneVisibility.ts52export function shouldMeasureTerminalLayerLayout({CODE
LOWcomponents/terminalPaneVisibility.ts85export function resolveTerminalLayerSurfaceStyle(CODE
LOWcomponents/terminalPaneVisibility.ts136export function parseTerminalPaneSnapshot(snapshot: TerminalPaneSnapshot): {CODE
LOWcomponents/terminalPaneVisibility.ts178export function getTerminalPaneFocusSnapshot({CODE
LOWcomponents/terminalPaneVisibility.ts200export function getTerminalPaneRenderSnapshot(CODE
LOWcomponents/terminalPaneVisibility.ts216export function parseTerminalPaneRenderSnapshot(snapshot: string): {CODE
LOWcomponents/SettingsPage.tsx134const SettingsTerminalTabContainer = React.memo<TerminalTabSettingsProps>(function SettingsTerminalTabContainer({CODE
LOWcomponents/AIChatSidePanelHelpers.ts45function normalizeSdkRuntimeModelCatalog(catalog: SdkRuntimeModelCatalog): SdkRuntimeModelCatalog {CODE
LOWcomponents/AIChatSidePanelHelpers.ts54export function buildSdkRuntimeModelCacheKey(agent: {CODE
LOWcomponents/AIChatSidePanelHelpers.ts66export function createSdkRuntimeModelCache(options: SdkRuntimeModelCacheOptions = {}) {CODE
LOWcomponents/AIChatSidePanelHelpers.ts124export function shouldLoadSdkRuntimeModels(agent?: ExternalAgentConfig): boolean {CODE
LOWcomponents/AIChatSidePanelHelpers.ts132export function shouldAdoptSdkCurrentModel(CODE
LOWcomponents/AIChatSidePanelHelpers.ts143export function normalizeSdkRuntimeModelPresets(CODE
LOWcomponents/AIChatSidePanelHelpers.ts152export function shouldUseStoredAgentModel(CODE
LOWcomponents/ScriptsSidePanel.tsx125export function buildScriptsSidePanelRows({CODE
LOWcomponents/AIChatSidePanel.tsx106function invalidateUserSkillsStatusCache() {CODE
LOWcomponents/AIChatSidePanel.tsx156export function hasAIChatSidePanelRetainedContent(props: Pick<CODE
LOWcomponents/AIChatSidePanel.tsx179export function shouldKeepAIChatSidePanelMounted(props: AIChatSidePanelProps): boolean {CODE
LOWcomponents/AIChatSidePanel.tsx191function shouldDelayAIChatSidePanelActivation(props: AIChatSidePanelProps): boolean {CODE
LOWcomponents/AIChatSidePanel.tsx1289export function aiChatSidePanelPropsAreEqual(CODE
LOWcomponents/TopTabs.tsx79export function shouldKeepHostTreeToggleSurface({CODE
LOWcomponents/TopTabs.tsx89export function resolveWorkspaceSessionTabDropTarget({CODE
LOWcomponents/TerminalPopupPage.tsx38function TerminalPopupWindowControls({ mac, onClose }: { mac: boolean; onClose: () => void }) {CODE
LOWcomponents/TerminalPopupPage.tsx133function TerminalPopupStartupError({CODE
LOWcomponents/TerminalPopupPage.tsx179function resolveHostProtocolFromSourceSession(source: TerminalPopupPayload['sourceSession']): Host['protocol'] {CODE
LOWcomponents/TerminalPopupPage.tsx189function applySourceSessionConnectionOverrides(CODE
LOWcomponents/TerminalPopupPage.tsx228export function resolveTerminalPopupReuseId(config: TerminalPopupPayload): string | undefined {CODE
LOWcomponents/QuickAddSnippetDialog.tsx39export function getQuickAddSnippetInitialCommand(event: Event): string {CODE
LOWcomponents/snippets/SnippetCommandTooltipContent.tsx6export function SnippetCommandTooltipContent({CODE
LOWcomponents/settings/tabs/SettingsAITab.tsx96function getSavedManagedAgentPathInfo(CODE
LOWcomponents/settings/tabs/SettingsAITab.tsx116function getManagedAgentCommandPath(CODE
LOW…mponents/settings/tabs/SettingsFileAssociationsTab.tsx35export default function SettingsFileAssociationsTab() {CODE
LOWcomponents/settings/tabs/ai/ProviderConfigForm.tsx21async function compressIconFileToDataUrl(file: File): Promise<string> {CODE
LOWcomponents/settings/tabs/ai/modelMetadata.ts36function resolveModelContextWindow(model: Record<string, unknown>): number | undefined {CODE
LOWcomponents/settings/tabs/ai/ModelSelector.tsx44export function getModelSuggestionsPresentation({CODE
LOWcomponents/settings/tabs/ai/ModelSelector.tsx82export function getModelSuggestionClassName(isSelected: boolean): string {CODE
LOWcomponents/settings/tabs/ai/types.ts185export function normalizeCodexBridgeError(error: unknown): string {CODE
LOWcomponents/settings/tabs/ai/ExternalMcpCard.tsx135function getPermissionModeLabelKey(mode: string | null | undefined): string {CODE
LOWcomponents/settings/tabs/ai/ExternalMcpCard.tsx148function getPermissionModeToneClass(mode: string | null | undefined): string {CODE
LOWcomponents/settings/tabs/ai/managedAgentState.ts10function getAutoManagedAgentStoredPath(CODE
LOWcomponents/settings/tabs/ai/managedAgentState.ts19export function areExternalAgentListsEqual(CODE
LOWcomponents/settings/tabs/ai/managedAgentState.ts128export function updateCodebuddyManagedEnv(CODE
LOWcomponents/settings/tabs/ai/managedAgentState.ts162export function getInitialManagedAgentPaths(agents: ExternalAgentConfig[]) {CODE
LOWcomponents/top-tabs/useTopTabLifecycleAnimations.ts5export function useTopTabLifecycleAnimations(orderedTabs: string[]) {CODE
LOWcomponents/top-tabs/SessionTabContextMenuContent.tsx19export function SessionTabContextMenuContent({CODE
LOWcomponents/top-tabs/TopTabItems.tsx275export function scrollTopTabIntoComfortView(CODE
LOWcomponents/systemManager/openInteractiveTerminal.ts17function buildCommandPopupSourceSession(CODE
LOWcomponents/systemManager/tmuxActionFocus.ts24export function scheduleDeferredTerminalFocus(onRequestTerminalFocus?: () => void): void {CODE
LOWcomponents/systemManager/TmuxSessionCard.tsx53export async function runConfirmedTmuxDetachAction({CODE
LOWcomponents/systemManager/hooks/useSystemManager.ts15function normalizePollingErrorMessage(error: unknown, t: I18nContextValue['t']): string {CODE
LOWcomponents/systemManager/hooks/useSystemManager.ts87export function useSystemCapabilitiesWarmup(CODE
LOWcomponents/sftp/sftpTabDuplication.ts26export function isSftpTabKeyboardContextMenuShortcut(CODE
LOWcomponents/sftp/sftpTabDuplication.ts33export function isSftpTabKeyboardSelectShortcut(key: string): boolean {CODE
LOWcomponents/sftp/sftpTabDuplication.ts37export function shouldHandleSftpTabKeyboardEvent(CODE
LOWcomponents/sftp/sftpTabDuplication.ts44export function getSftpTabDuplicateRequest(CODE
LOWcomponents/sftp/clipboardUpload.ts33export function resolveSftpClipboardUploadTarget({CODE
LOWcomponents/sftp/clipboardUpload.ts55export function getSftpClipboardSystemTextPaths({CODE
LOWcomponents/sftp/clipboardUpload.ts67export function createDropEntriesFromClipboardFiles(files: ClipboardLocalFile[]): DropEntry[] {CODE
703 more matches not shown…
Decorative Section Separators16 hits · 54 pts
SeverityFileLineSnippetContext
MEDIUMcomponents/sftp/useSftpPaneTreeRows.tsx30 // ── Render visible rows ──────────────────────────────────────────COMMENT
MEDIUMcomponents/sftp/SftpPaneTreeNode.tsx12// ── Simplified TreeNode (no per-node ContextMenu) ────────────────────COMMENT
MEDIUMcomponents/sftp/SftpPaneTreeNode.tsx129// ── Tree paths reducer (unchanged) ──────────────────────────────────COMMENT
MEDIUMcomponents/sftp/hooks/useSftpKeyboardShortcuts.ts76// ── Tree Enter key action store ──────────────────────────────────────COMMENT
MEDIUMcomponents/sftp/hooks/useSftpKeyboardShortcuts.ts109// ── Keyboard selection anchor/focus tracking ────────────────────────COMMENT
MEDIUMcomponents/sftp/hooks/useSftpKeyboardShortcuts.ts508 // ── Arrow Up/Down: move selection ────────────────────────────────COMMENT
MEDIUM.github/workflows/build-et-binaries.yml55 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml57 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml100 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml102 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml120 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml122 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml146 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml148 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml150 # ------------------------------------------------------------------COMMENT
MEDIUM.github/workflows/build-et-binaries.yml152 # ------------------------------------------------------------------COMMENT
Over-Commented Block41 hits · 40 pts
SeverityFileLineSnippetContext
LOWApp.tsx481 }, [buildCurrentSyncPayload]);COMMENT
LOWcomponents/SftpView.tsx161COMMENT
LOWcomponents/Terminal.tsx841 knownCwdRef.current = undefined;COMMENT
LOWcomponents/Terminal.tsx2401 sessionStarters.startSSH(term);COMMENT
LOWcomponents/VaultView.tsx1141 // trailing gap AND a section with a single card (e.g. Pinned) keeps it at oneCOMMENT
LOWcomponents/AIChatSidePanel.types.ts121// -------------------------------------------------------------------COMMENT
LOWcomponents/host-details/AlgorithmOverridesPanel.tsx61 const { t } = useI18n();COMMENT
LOWcomponents/settings/TerminalFontSelect.tsx41 // don't pick a font and then see no visible change. The currentlyCOMMENT
LOWcomponents/cloud-sync/CloudSyncLocalBackupsPanel.tsx81COMMENT
LOWcomponents/cloud-sync/CloudSyncLocalBackupsPanel.tsx141 // Hold the cross-window restore barrier around both the loadCOMMENT
LOWcomponents/terminal/useTerminalEffects.ts1401 e.preventDefault();COMMENT
LOWcomponents/terminal/autocomplete/promptDetector.ts701 continue;COMMENT
LOWcomponents/terminal/autocomplete/promptDetector.ts721 }COMMENT
LOW…nts/terminal/autocomplete/terminalAutocompleteInput.ts101 clearState();COMMENT
LOW…nts/terminal/autocomplete/terminalAutocompleteInput.ts121 // paste keeps it aligned; if the buffer was unreliable (e.g.COMMENT
LOW…nts/terminal/autocomplete/terminalAutocompleteInput.ts141 // cursor sits relative to our append-only buffer. Mark theCOMMENT
LOW…nts/terminal/autocomplete/terminalAutocompleteInput.ts201 // User is typing more — invalidate accepted command fallback since theCOMMENT
LOW…/terminal/autocomplete/terminalAutocompleteKeyEvent.ts81 }COMMENT
LOW…ents/terminal/runtime/createTerminalSessionStarters.ts981 }COMMENT
LOWcomponents/terminal/runtime/createXTermRuntime.ts921 // unconditionally clears the selection on user inputCOMMENT
LOWcomponents/terminal/runtime/terminalDistroDetection.ts41) => {COMMENT
LOWcomponents/ai/externalAgentHistory.test.ts401 // Regression: the previous bound was MAX_DURABLE_SCAN_MESSAGES=200 onCOMMENT
LOWscripts/build-et/build-macos.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/build-et/build-linux.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/build-et/build-linux.sh121# Bootstrap the vendored vcpkg so CMake's vcpkg toolchain can resolve theCOMMENT
LOW.github/workflows/build.yml1name: build-packagesCOMMENT
LOW.github/scripts/bump-homebrew-cask.sh1#!/usr/bin/env bashCOMMENT
LOWapplication/localVaultBackups.ts461 sourceAppVersion: previousVersion,COMMENT
LOWapplication/state/useAutoSync.ts61COMMENT
LOWapplication/state/useAutoSync.ts261 }COMMENT
LOWapplication/state/useAutoSync.ts281 }COMMENT
LOWapplication/state/useAutoSync.ts661 // If the three-way merge introduced any local-only additions that theCOMMENT
LOWapplication/state/useAutoSync.ts821COMMENT
LOWapplication/state/useAutoSync.ts921 // CLOSED. Opening it here would allow a partially-lost localCOMMENT
LOWapplication/state/useSessionState.ts721COMMENT
LOWinfrastructure/config/cjkFonts.ts161 //COMMENT
LOWinfrastructure/config/xtermPerformance.ts101 },COMMENT
LOWinfrastructure/services/syncAnchorDecision.js41 return { remoteChanged: false, reason: 'no-anchor-no-remote' };COMMENT
LOWdomain/models/connection.ts221 sftpFollowTerminalCwd?: boolean; // Overrides global SFTP follow-terminal-directory settingCOMMENT
LOWdomain/models/connection.ts241 // aggressive cloud-friendly keepalive globally while disabling it for aCOMMENT
LOWdomain/models/terminal.ts121 // PasteCOMMENT
Cross-Language Confusion (JS/TS)5 hits · 25 pts
SeverityFileLineSnippetContext
HIGHcomponents/terminal/osc7Setup.ts157 print (bp != "" ? bp : start)CODE
HIGHcomponents/terminal/osc7Setup.ts217 elif [ "$active_shell_pid" != "$login_shell_pid" ]; thenCODE
HIGHcomponents/terminal/osc7Setup.ts348 elif stat -f '%OLp' "$1" >/dev/null 2>&1; thenCODE
HIGHcomponents/terminal/osc7Setup.ts357 elif stat -f '%u:%g' "$1" >/dev/null 2>&1; thenCODE
HIGHcomponents/terminal/osc7Setup.ts497 elif netcatty_osc7_markers_balanced "$config"; thenCODE
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHinfrastructure/services/adapters/GitHubAdapter.ts236 // Increase interval as requestedCOMMENT
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippetContext
LOWcomponents/terminal/runtime/terminalDistroDetection.ts55 // Step 1: try to classify from the SSH server identification stringCOMMENT
LOWcomponents/terminal/runtime/terminalDistroDetection.ts79 // Step 2: unknown or generic OpenSSH/Dropbear — fall back to theCOMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOWcomponents/terminal/runtime/terminalDistroDetection.ts55 // Step 1: try to classify from the SSH server identification stringCOMMENT
LOWcomponents/terminal/runtime/terminalDistroDetection.ts79 // Step 2: unknown or generic OpenSSH/Dropbear — fall back to theCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMlib/localFonts.ts165 // Filter monospace fonts using robust word boundary matchingCOMMENT
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWscripts/generate-app-icon-variants.py182CODE
LOWscripts/generate-app-icon-variants.py202CODE
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWscripts/generate-app-icon-variants.py9CODE
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWdomain/telnetDeepLink.test.ts198 label: "admin@example.com",CODE