Repository Analysis

fathah/hermes-desktop

Desktop Companion for Hermes Agent

5.7 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of fathah/hermes-desktop, a TypeScript project with 14,063 GitHub stars. SynthScan v2.0 examined 200,565 lines of code across 851 source files, recording 552 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 5.7 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

5.7
Adjusted Score
5.7
Raw Score
100%
Time Factor
2026-08-24
Last Push
14.1K
Stars
TypeScript
Language
200.6K
Lines of Code
851
Files
552
Pattern Hits
2026-08-29
Scan Date
0.07
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

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.

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 58MEDIUM 185LOW 309

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 552 distinct pattern matches across 13 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.

Decorative Section Separators166 hits · 496 pts
SeverityFileLineSnippetContext
MEDIUMtests/installer-utils.test.ts38// ─── readLogs (test the logic, not the import) ─────────COMMENT
MEDIUMtests/installer-utils.test.ts71// ─── MCP server YAML parsing ───────────────────────────COMMENT
MEDIUMtests/installer-utils.test.ts164// ─── Memory provider discovery logic ────────────────────COMMENT
MEDIUMtests/installer-utils.test.ts237// ─── OAuth credential discovery ─────────────────COMMENT
MEDIUMtests/installer-utils.test.ts313// ─── OpenClaw detector ─────────────────────────────────COMMENT
MEDIUMtests/installer-utils.test.ts354// ─── Backward compatibility checks ─────────────────────COMMENT
MEDIUMtests/buildUserContent.test.ts63// ── helpers ──────────────────────────────────────────────COMMENT
MEDIUMtests/buildUserContent.test.ts112// ── tests ────────────────────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts16// ─── PROVIDERS ──────────────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts91// ─── GATEWAY_PLATFORMS ──────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts148// ─── GATEWAY_SECTIONS ───────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts188// ─── SETTINGS_SECTIONS ──────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts224// ─── Static constants ───────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts254// ─── providerRouteForEnvKey ─────────────────────────────COMMENT
MEDIUMtests/sse-parser.test.ts8// ─── parseSseBlock ──────────────────────────────────────COMMENT
MEDIUMtests/sse-parser.test.ts45// ─── processCustomEvent ─────────────────────────────────COMMENT
MEDIUMtests/sse-parser.test.ts163// ─── processSseData ─────────────────────────────────────COMMENT
MEDIUMtests/ipc-handlers.test.ts62// ─── New feature handlers registered ────────────────────COMMENT
MEDIUMtests/ipc-handlers.test.ts91// ─── Legacy handlers still present ──────────────────────COMMENT
MEDIUMtests/validation.test.ts191 // ── Nous Portal (issue #367) ─────────────────────────────────COMMENT
MEDIUMtests/validation.test.ts191 // ── Nous Portal (issue #367) ─────────────────────────────────COMMENT
MEDIUMtests/preload-api-surface.test.ts66// ─── New APIs exist ─────────────────────────────────────COMMENT
MEDIUMtests/preload-api-surface.test.ts137// ─── Legacy APIs still present ──────────────────────────COMMENT
MEDIUMtests/preload-api-surface.test.ts240// ─── IPC channel consistency ────────────────────────────COMMENT
MEDIUMscripts/verify-369-wsl-drift.js36 // ── A. Run audit, look for drift issues ─────────────────────COMMENT
MEDIUMscripts/verify-369-wsl-drift.js61 // ── B. Auto-fix the first autoFixable drift ────────────────COMMENT
MEDIUMscripts/verify-369-wsl-drift.js86 // ── C. Confirm Windows-side .env now has the value ──────────COMMENT
MEDIUMscripts/verify-369-wsl-drift.js97 // ── D. Re-run audit — the same drift should be gone ────────COMMENT
MEDIUMsrc/renderer/src/constants.ts1// ── Shared Types ────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts35// ── Providers ───────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts652// ── Theme ───────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts701// ── Font ────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts731// ── Settings API Key Sections ───────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts1001// ── Gateway Sections ────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts1337// ── Install ─────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.test.ts19// ── helpers ──────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.test.ts49// ── processFiles ─────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.test.ts202// ── filesFromClipboard ───────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.ts63// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.ts65// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx100 // ── initial render ──────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx114 // ── open / close ────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx162 // ── model list rendering ────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx210 // ── model selection ─────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx232 // ── search / filtering ──────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx290 // ── provider rail ───────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx306 // ── configure providers/models footer ───────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx324 // ── edge cases ──────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts26 // ── Explicit MEDIA: tokens ─────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts65 // ── Whole-line bare paths ──────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts95 // ── Inline bare paths (mid-sentence) ───────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts239 // ── False-positive guards ──────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts362 // ── Misc ───────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/trips.ts37// ── Tuning ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts61// ── Partition between work area (west) and rest room (east) ────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts89// ── Desks (work area, west of the partition) ───────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts98// ── CEO executive desk ─────────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts113// ── CEO glass corner office (south-west of the work area) ──────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts291// ── Rest room (east of the partition) ──────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/Office3D.tsx249 // ── Developer building-mover ──────────────────────────────────────────────COMMENT
106 more matches not shown…
Cross-Language Confusion (JS/TS)57 hits · 312 pts
SeverityFileLineSnippetContext
HIGHscripts/repro-session-proliferation.js48print(json.dumps({"total": total, "rows": rows}))CODE
HIGHscripts/repro-long-conversation.js42print(json.dumps({"total": total, "rows": rows}))CODE
HIGHscripts/repro-gateway-restart-midchat.js43print(json.dumps({"rows": rows}))CODE
HIGHscripts/repro-gateway-restart-v2.js32print(json.dumps({"rows": rows}))CODE
HIGHsrc/main/ssh-docker.ts170 return FalseCODE
HIGHsrc/main/ssh-docker.ts177 return TrueCODE
HIGHsrc/main/ssh-docker.ts178 return FalseCODE
HIGHsrc/main/ssh-docker.ts139elif os.path.exists(home):CODE
HIGHsrc/main/ssh-docker.ts214print(json.dumps({CODE
HIGHsrc/main/ssh-docker.ts311 print(json.dumps({"ok": False, "error": msg}))CODE
HIGHsrc/main/ssh-docker.ts352print(json.dumps({"ok": True, "dataHome": data_home, "execUser": exec_user, "cliPath": cli_path}))CODE
HIGHsrc/main/ssh-docker.ts390 print(json.dumps({"ok": False, "error": msg, "warnings": warnings}))CODE
HIGHsrc/main/ssh-docker.ts421elif os.path.isdir(home):CODE
HIGHsrc/main/ssh-docker.ts426elif os.path.exists(home):CODE
HIGHsrc/main/ssh-docker.ts483print(json.dumps({"ok": True, "version": version.stdout.strip(), "warnings": warnings}))CODE
HIGHsrc/main/ssh-remote.ts485 print(json.dumps({"totalSessions": 0, "totalMessages": 0}))CODE
HIGHsrc/main/ssh-remote.ts491 print(json.dumps({"totalSessions": s, "totalMessages": m}))CODE
HIGHsrc/main/ssh-remote.ts493 print(json.dumps({"totalSessions": 0, "totalMessages": 0}))CODE
HIGHsrc/main/ssh-remote.ts1592 print(json.dumps({"data_url": None})); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1597 print(json.dumps({"data_url": None})); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1600 print(json.dumps({"data_url": None})); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1604 print(json.dumps({"data_url": None})); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1605 print(json.dumps({"data_url": "data:%s;base64,%s" % (mime, base64.b64encode(data).decode("ascii"))}))CODE
HIGHsrc/main/ssh-remote.ts1607 print(json.dumps({"data_url": None}))CODE
HIGHsrc/main/ssh-remote.ts1705 print(json.dumps(result))CODE
HIGHsrc/main/ssh-remote.ts1707 print("[]")CODE
HIGHsrc/main/ssh-remote.ts1884 if not os.path.exists(pid_file): return FalseCODE
HIGHsrc/main/ssh-remote.ts1895 return TrueCODE
HIGHsrc/main/ssh-remote.ts1897 return FalseCODE
HIGHsrc/main/ssh-remote.ts2280 return NoneCODE
HIGHsrc/main/ssh-remote.ts2286 return NoneCODE
HIGHsrc/main/ssh-remote.ts2294 return NoneCODE
HIGHsrc/main/ssh-remote.ts2688 print(response.status)CODE
HIGHsrc/main/ssh-remote.ts2690 print(0)CODE
HIGHsrc/main/ssh-remote.ts177elif raw.startswith("$HOME/"):CODE
HIGHsrc/main/ssh-remote.ts187print(json.dumps(rows))CODE
HIGHsrc/main/ssh-remote.ts292print(json.dumps(skills))CODE
HIGHsrc/main/ssh-remote.ts1019 return FalseCODE
HIGHsrc/main/ssh-remote.ts1039print(json.dumps(result))CODE
HIGHsrc/main/ssh-remote.ts1388 print("[]"); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1404print(json.dumps(result))CODE
HIGHsrc/main/ssh-remote.ts1436 print("[]"); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1540print(json.dumps(items))CODE
HIGHsrc/main/ssh-remote.ts1682 print("[]"); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1924print(json.dumps(profiles))CODE
HIGHsrc/main/ssh-remote.ts2361 print(current)CODE
HIGHsrc/main/ssh-remote.ts2365 print(port)CODE
HIGHsrc/main/ssh-remote.ts2606print(sock.getsockname()[1])CODE
HIGHsrc/main/ssh-remote.ts3469print(json.dumps(result))CODE
HIGHsrc/main/hermes-agent-compat.ts82 return NoneCODE
HIGHsrc/main/hermes-agent-compat.ts86 return NoneCODE
HIGHsrc/main/hermes-agent-compat.ts130 return NoneCODE
HIGHsrc/main/hermes-agent-compat.ts141 return NoneCODE
HIGHsrc/main/hermes-agent-compat.ts486 print(json.dumps({CODE
HIGHsrc/main/hermes-agent-compat.ts524elif re.search(r"\bembedded_chat\s*:\s*bool\s*=\s*True\b", source):CODE
HIGHsrc/main/hermes-agent-compat.ts527elif re.search(r"(\bembedded_chat\s*:\s*bool\s*=\s*)False\b", source):CODE
HIGHsrc/main/hermes-agent-compat.ts573print(json.dumps({CODE
Hyper-Verbose Identifiers236 hits · 230 pts
SeverityFileLineSnippetContext
LOWAGENTS.md71def test_rejects_expired_tokens():CODE
LOWAGENTS.md75def test_handles_missing_password():CODE
LOWCLAUDE.md71def test_rejects_expired_tokens():CODE
LOWCLAUDE.md75def test_handles_missing_password():CODE
LOWtests/connection-config-security.test.ts10async function loadConnectionConfigModule(): Promise<CODE
LOWtests/remote-history.test.ts30function extractLocalRecoveryFunction(): string {CODE
LOWtests/remote-history.test.ts32 "async function sendMessageViaBestApiWithLocalRecovery(",CODE
LOWtests/remote-history.test.ts148 "async function sendMessageViaBestApiWithLocalRecovery(",CODE
LOWtests/ipc-handlers.test.ts29function extractPreloadInvokeChannels(src: string): string[] {CODE
LOWtests/hermes-agent-compat.test.ts137def hermes_one_get_model_library():CODE
LOW.agents/skills/lat-md/SKILL.md141def test_rejects_expired_tokens():CODE
LOW.claude/skills/lat-md/SKILL.md141def test_rejects_expired_tokens():CODE
LOWscripts/drive-live-regression-suite.js77function assertNoDuplicateRenderedImages(state, label) {CODE
LOWsrc/renderer/src/App.tsx189 function handleDismissVerifyWarning(): void {CODE
LOWsrc/renderer/src/utils/analytics.ts48function getOrCreateAnonymousId(): string {CODE
LOWsrc/renderer/src/screens/Settings/ConfigHealth.tsx45function publishConfigHealthReport(report: Report): void {CODE
LOWsrc/renderer/src/screens/Chat/mediaUtils.ts201function markdownDestinationRanges(content: string): Array<[number, number]> {CODE
LOWsrc/renderer/src/screens/Chat/chatNotifications.ts2export function shouldPlayCompletionSound(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts171function toolEventFromGatewayEvent(event: DashboardStreamEvent): ChatToolEvent {CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts547function hasReasoningSinceLastUser(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts560function addCompletionReasoningFallback(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts592function completeAssistantWithFinalText(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts641export function applyDashboardStreamEvent(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts149function normalizeBubbleContentForMatch(s: string): string {CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts159function buildDbAssistantSplitSequences(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts248function isSyntheticLiveToolMessage(m: ChatMessage): boolean {CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts262function consumeCanonicalToolMatch(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts282function mergeDbMetadataIntoStreamed(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts338function compactOrphanDuplicateUserRuns(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts398function anchorUnmatchedUsersBeforeConsumedTurnRows(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts468function hasUniqueCurrentUserContent(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts506function findNextOutputAnchorIndex(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts522function hasEquivalentAssistantError(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts552export function preserveLocalAssistantErrors(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts639function firstDbIndexMatchingActiveTurnOutput(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts660function findPreviousLocalErrorIndex(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts910function dropLossyStreamedReasoning(CODE
LOWsrc/renderer/src/screens/Chat/dashboardGatewayClient.ts48export function normalizeDashboardNotification(CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts7function toolProgressToNameAndPreview(progress: string): {CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts28export function liveToolEventFromProgress(progress: string): ChatToolEvent {CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts91function findLatestRunningSyntheticToolIndex(CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts110function findLatestRunningSyntheticToolByNameIndex(CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts167function upsertToolResultAfterCall(CODE
LOW…enderer/src/screens/Chat/slash/virtualSlashCommands.ts31export function createSlashCommandVirtualLayout(CODE
LOW…enderer/src/screens/Chat/slash/virtualSlashCommands.ts73export function getVisibleSlashCommandRows(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts139export function dashboardChatEnabledFromEnv(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts145export function dashboardChatEnabledForConnection(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts160export function dashboardShouldPersistLocalOverlays(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts166export function isDashboardSessionNotFoundError(err: unknown): boolean {CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts171export function isDashboardSlashWorkerExitError(err: unknown): boolean {CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts176export async function submitDashboardPromptWithRecovery(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts225export async function ensureDashboardRuntimeSession(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts299function builtInProviderForCustomBaseUrl(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts369export function dashboardDataUrlForTextAttachment(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts379function dashboardAttachmentUnsupportedError(err: unknown): boolean {CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts384export function dashboardPromptTextForAttachments(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts412export function dashboardPromptTextWithAttachmentRefs(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts419export async function syncDashboardAttachmentsForSubmit(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts501export function resolveDashboardProviderForModel(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts780export function dashboardSeedMessagesFromTranscript(CODE
176 more matches not shown…
Over-Commented Block43 hits · 38 pts
SeverityFileLineSnippetContext
LOWtests/install-gate-providers.test.ts101 });COMMENT
LOWtests/ssh-remote-paths.test.ts1import { describe, expect, it } from "vitest";COMMENT
LOWtests/config-value-paths.test.ts1import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";COMMENT
LOW.agents/skills/typescript-expert/SKILL.md201COMMENT
LOW…ills/typescript-expert/references/tsconfig-strict.json41 "baseUrl": ".",COMMENT
LOWsrc/renderer/src/constants.ts361 // OpenAI-compatible endpoint, so it isn't labelled just "Local".COMMENT
LOWsrc/renderer/src/constants.ts521// providers route as `provider: "custom"` + explicit `baseUrl` (host-derives theCOMMENT
LOWsrc/renderer/src/screens/Chat/attachmentUtils.ts61}COMMENT
LOWsrc/renderer/src/screens/Chat/attachmentUtils.ts181 const probeCtx = probeCanvas.getContext("2d");COMMENT
LOWsrc/renderer/src/screens/Chat/attachmentUtils.ts221 // Phase 1 — lossy formats: step quality down from 0.85 to 0.5COMMENT
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts801 // `onChatError`). Preserve those tail-of-stream additions so theCOMMENT
LOWsrc/renderer/src/screens/Office/RepInteractionPanel.tsx181 // the panel can stay mounted while the tab is hidden and the user changes theCOMMENT
LOWsrc/renderer/src/screens/Office/RepInteractionPanel.tsx241 // The panel stays mounted while the Office selection changes (e.g. clickingCOMMENT
LOWsrc/renderer/src/screens/Office/office3d/layout.ts101// grid which fills the rows to the north, with surrounding decorCOMMENT
LOWsrc/renderer/src/screens/Office/office3d/Office3D.tsx241COMMENT
LOW…/renderer/src/screens/Office/office3d/core/cityPlan.ts21// ── Office entrance (south wall doorway) ──────────────────────────────────COMMENT
LOWsrc/renderer/src/screens/Providers/Providers.tsx241 // blurring the API key input lost their typed key — config.yamlCOMMENT
LOWsrc/renderer/src/screens/Providers/Providers.tsx301 // typing in the Model field still feels responsive.COMMENT
LOWsrc/main/remote-skills.ts1import { getApiUrl, getRemoteAuthHeader } from "./hermes";COMMENT
LOWsrc/main/profiles.ts381 }COMMENT
LOWsrc/main/ssh-docker.ts21// remote file read/write (config, .env, sessions, logs, profiles) seesCOMMENT
LOWsrc/main/yaml-path.ts1// Tiny indentation-aware YAML reader that resolves a dotted key path againstCOMMENT
LOWsrc/main/config-health.ts521 }COMMENT
LOWsrc/main/ssh-remote.ts2501 }COMMENT
LOWsrc/main/ssh-remote.ts3341// That wrapper does `sudo -u hermes <venv>/bin/hermes "$@"`, and the sudoersCOMMENT
LOWsrc/main/default-models.ts61 // qwen/qwen3-32b, qwen/qwen3-8b, Qwen/Qwen3-Coder, qwen/qwen3-coder-next,COMMENT
LOWsrc/main/agent-sync.ts21} from "../shared/agent-sync";COMMENT
LOWsrc/main/installer.ts41// data. install.ps1's default is %LOCALAPPDATA%\hermes, but someCOMMENT
LOWsrc/main/hermes.ts1241 const bodyObj: Record<string, unknown> = {COMMENT
LOWsrc/main/hermes.ts1261 const bodyBuf = Buffer.from(body, "utf-8");COMMENT
LOWsrc/main/hermes.ts2441COMMENT
LOWsrc/main/hermes.ts3081 // process.env > .env > provider.COMMENT
LOWsrc/main/hermes.ts3101 // The result is a divergence: the desktop happily sendsCOMMENT
LOWsrc/main/hermes.ts3161 const key = profileKey(profile);COMMENT
LOWsrc/main/gpu-fallback.ts21function shouldHonorPersistedGpuFlag(): boolean {COMMENT
LOWsrc/main/models.ts321 // required for dual-engine compat: upstream-main'sCOMMENT
LOWsrc/main/config.ts961 // runtime-provider resolver reads it to pick the transport forCOMMENT
LOWsrc/main/config.ts981 content = upsertBlockChild(content, "model", "provider", provider);COMMENT
LOWsrc/main/config.ts1441// The Python hermes gateway (gateway/config.py) decides which messagingCOMMENT
LOWsrc/main/secrets/securityInvariants.test.ts101 // INV-3: list() and get() AGREE on membership. If a key is enumerated byCOMMENT
LOWsrc/main/secrets/index.ts201 const provider = getSecretsProvider(profile);COMMENT
LOWsrc/main/secrets/commandProvider.ts81 // env-shaped line falls through to the bare-value branch, because a bareCOMMENT
LOWsrc/main/secrets/getSpawnFloor.test.ts1import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";COMMENT
Modern AI Meta-Vocabulary16 hits · 37 pts
SeverityFileLineSnippetContext
MEDIUMAGENTS.md36- **Section ids**: `lat.md/path/to/file#Heading#SubHeading` — full form uses project-root-relative path (e.g. `lat.md/teCODE
MEDIUMCLAUDE.md36- **Section ids**: `lat.md/path/to/file#Heading#SubHeading` — full form uses project-root-relative path (e.g. `lat.md/teCODE
MEDIUMlat.md/provider-setup.md154[[src/renderer/src/components/ProviderKeysSection.tsx#ProviderModelsManager]] renders below the key field in the config CODE
MEDIUMlat.md/model-context.md1# Model context windowCOMMENT
MEDIUM.agents/skills/lat-md/SKILL.md64Examples: `lat.md/tests/search#RAG Replay Tests`, `cli#init`, `parser#Wiki Links`.CODE
MEDIUM.agents/skills/hermes-agent/SKILL.md20 - 5.2 [Tool Orchestration (model_tools.py)](#52-tool-orchestration-model_toolspy)CODE
MEDIUM.agents/skills/hermes-agent/SKILL.md164├── model_tools.py # Tool orchestration, _discover_tools(), handle_function_call()CODE
MEDIUM.agents/skills/hermes-agent/SKILL.md1262├── autonomous-ai-agents/ # Multi-agent orchestrationCODE
MEDIUM.claude/skills/lat-md/SKILL.md64Examples: `lat.md/tests/search#RAG Replay Tests`, `cli#init`, `parser#Wiki Links`.CODE
MEDIUM.claude/skills/hermes-agent/SKILL.md20 - 5.2 [Tool Orchestration (model_tools.py)](#52-tool-orchestration-model_toolspy)CODE
MEDIUM.claude/skills/hermes-agent/SKILL.md164├── model_tools.py # Tool orchestration, _discover_tools(), handle_function_call()CODE
MEDIUM.claude/skills/hermes-agent/SKILL.md1262├── autonomous-ai-agents/ # Multi-agent orchestrationCODE
MEDIUMsrc/main/agent-config-providers.test.ts120 // The agent's config scaffold writes `providers: {}` (inline empty dict).COMMENT
MEDIUMsrc/main/model-discovery.ts623// @lat: [[model-context#Model context window#Gauge resolution order]]COMMENT
MEDIUMsrc/main/config.ts949// @lat: [[model-context#Model context window#Storage and propagation]]COMMENT
MEDIUMsrc/main/agent-config-providers.ts219 // The agent's config scaffold writes an inline empty dict (`providers: {}`),COMMENT
Excessive Try-Catch Wrapping23 hits · 20 pts
SeverityFileLineSnippetContext
LOW…ents/skills/typescript-expert/scripts/ts_diagnostic.py18 except Exception as e:CODE
MEDIUMsrc/main/ssh-docker.ts119def run(args, timeout=8):CODE
LOWsrc/main/ssh-docker.ts165 except Exception:CODE
LOWsrc/main/ssh-docker.ts124 except Exception:CODE
LOWsrc/main/ssh-docker.ts143 except Exception:CODE
LOWsrc/main/ssh-docker.ts402 except Exception:CODE
LOWsrc/main/ssh-docker.ts444 except Exception:CODE
LOWsrc/main/ssh-docker.ts477 except Exception as exc:CODE
LOWsrc/main/ssh-remote.ts1606except Exception:CODE
LOWsrc/main/ssh-remote.ts1706except Exception as e:CODE
LOWsrc/main/ssh-remote.ts1892 except Exception:CODE
LOWsrc/main/ssh-remote.ts2689except Exception:CODE
LOWsrc/main/ssh-remote.ts385 except Exception:CODE
LOWsrc/main/ssh-remote.ts1014 except Exception:CODE
LOWsrc/main/ssh-remote.ts1450 except Exception:CODE
LOWsrc/main/ssh-remote.ts1476 except Exception:CODE
LOWsrc/main/ssh-remote.ts1493 except Exception:CODE
LOWsrc/main/ssh-remote.ts1507 except Exception:CODE
MEDIUMsrc/main/hermes-agent-compat.ts126def _hermes_one_current_model_row():CODE
LOWsrc/main/hermes-agent-compat.ts129 except Exception:CODE
LOWsrc/main/hermes-agent-compat.ts102 except Exception:CODE
LOWsrc/main/hermes-agent-compat.ts470except Exception:CODE
LOWsrc/main/hermes-agent-compat.ts571except Exception:CODE
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHsrc/main/ssh-remote.test.ts73 expect(isUsableApiServerKey("your-api-key")).toBe(false);CODE
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/main/claw3d.ts706 // Step 1: Clone (or pull if already cloned)COMMENT
LOWsrc/main/claw3d.ts775 // Step 2: npm installCOMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/main/claw3d.ts706 // Step 1: Clone (or pull if already cloned)COMMENT
LOWsrc/main/claw3d.ts775 // Step 2: npm installCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/main/gpu-fallback.ts37// because the GPU process still attempts to initialize. The robust fix is toCOMMENT
Unused Imports2 hits · 2 pts
SeverityFileLineSnippetContext
LOW…ents/skills/typescript-expert/scripts/ts_diagnostic.py8CODE
LOW…ents/skills/typescript-expert/scripts/ts_diagnostic.py9CODE
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWscripts/probe-selectors.js21 const placeholder = el.getAttribute("placeholder");CODE
LOWscripts/repro-edit-model-emptykey.js61 placeholder: el.getAttribute("placeholder"),CODE
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…ents/skills/typescript-expert/scripts/ts_diagnostic.py74CODE