Download video and audio from 1000+ sites, transcribe locally with speaker labels, and summarize, translate, or chat with your media using your preferred AI provider.
This report summarizes scanner evidence for nexmoe/VidBee, a TypeScript project with 11,025 GitHub stars. SynthScan examined 204,755 lines of code across 905 source files, recording 191 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.3 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 147 finding(s).
Are imports declared and package/API names verified? 14 finding(s).
Are wrappers, guards, and repeated structures necessary? 142 finding(s).
Which changes need focused human review? 191 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 191 distinct pattern matches across 6 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/ui/src/components/agent-chat-composer.tsx | 91 | export function measureComposerDraftHeights( | CODE |
| LOW | packages/ui/src/components/ui/download-transfer.tsx | 15 | export function downloadTransferKeyframes(from: DOMRect, to: DOMRect): Keyframe[] { | CODE |
| LOW | …/ui/src/components/ui/download-record-context-menu.tsx | 40 | export function DownloadRecordContextMenuItems({ | CODE |
| LOW | packages/ui/src/components/ui/fluid-hover-highlight.tsx | 83 | export function resolveHighlightTransition( | CODE |
| LOW | packages/ui/src/hooks/use-fluid-hover.ts | 542 | export function useRegisterFluidHoverItem( | CODE |
| LOW | packages/transcription/src/executor.ts | 67 | export async function removeTranscriptionWorkDir(workDir: string): Promise<void> { | CODE |
| LOW | packages/transcription/src/errors.ts | 30 | export function classifyTranscriptionFailure(err: unknown): ClassifiedError { | CODE |
| LOW | packages/transcription/src/enqueue.ts | 41 | export function listTranscriptionChildren(queue: TaskQueueAPI, downloadTaskId: string): Task[] { | CODE |
| LOW | packages/downloader-core/src/yt-dlp-progress.ts | 41 | export function parseYtDlpProgressPayload(payload: YtDlpProgressPayload): ParsedYtDlpProgress { | CODE |
| LOW | apps/desktop/scripts/setup-dev-binaries.js | 470 | function hasRequiredMacArchitectures(filePath, expectedArchitectures) { | CODE |
| LOW | apps/desktop/scripts/setup-dev-binaries.js | 511 | function resolveMacExtractedBinary(extractDir, expectedInnerPath, binaryName) { | CODE |
| LOW | apps/desktop/scripts/setup-dev-binaries.js | 525 | async function resolveMacFfmpegDownloadUrl(ffmpegConfig) { | CODE |
| LOW | …/src/renderer/src/components/settings/AccountPanel.tsx | 46 | function authenticationErrorMessage(error: unknown, fallback: string): string { | CODE |
| LOW | …rc/components/transcript/TranscriptPlaybackStandby.tsx | 24 | export function TranscriptPlaybackStandby({ | CODE |
| LOW | …rc/components/transcript/TranscriptPlaybackBarView.tsx | 80 | export function TranscriptPlaybackBarView({ | CODE |
| LOW | …rc/components/transcript/TranscriptAgentMessageRow.tsx | 60 | export function observeAgentMessageRenders(probe: ((messageId: string) => void) | null): void { | CODE |
| LOW | …rc/components/transcript/TranscriptPromptShareCard.tsx | 32 | export function TranscriptPromptShareCard({ | CODE |
| LOW | …rc/components/transcript/TranscriptPlaylistPopover.tsx | 327 | export function TranscriptPlaylistPopover(): ReactNode { | CODE |
| LOW | …c/components/transcript/TranscriptShareImageDialog.tsx | 11 | export function TranscriptShareImageDialog({ | CODE |
| LOW | …r/src/components/transcript/TranscriptModelsBanner.tsx | 11 | export function TranscriptModelsBannerView({ status }: { status: TranscriptModelPrepStatus }) { | CODE |
| LOW | …c/components/transcript/TranscriptCaptionShareCard.tsx | 27 | export function TranscriptCaptionShareCard({ | CODE |
| LOW | …rc/components/transcript/TranscriptShareCardChrome.tsx | 68 | export function TranscriptShareCardChrome({ | CODE |
| LOW | …c/components/transcript/TranscriptProgressThinking.tsx | 35 | export function TranscriptProgressThinking({ | CODE |
| LOW | …rer/src/components/transcript/TranscriptPromptPane.tsx | 90 | export function resetArmedPromptIdentities(): void { | CODE |
| LOW | …components/download/DownloadRecordContextMenuItems.tsx | 12 | export function DownloadRecordContextMenuItems( | CODE |
| LOW | …src/components/download/DownloadHistoryVirtualList.tsx | 49 | export function DownloadHistoryVirtualList({ | CODE |
| LOW | …/renderer/src/hooks/use-extension-cookie-connection.ts | 12 | function sameExtensionCookieConnection( | CODE |
| LOW | …/renderer/src/hooks/use-extension-cookie-connection.ts | 30 | export function useExtensionCookieConnection( | CODE |
| LOW | …esktop/src/renderer/src/lib/transcript-playlist-fly.ts | 115 | function readPlaylistFlyDestination(target: HTMLElement): PlaylistFlyBox { | CODE |
| LOW | …esktop/src/renderer/src/lib/transcript-playlist-fly.ts | 236 | function prefersPlaylistFlyReducedMotion(): boolean { | CODE |
| LOW | …/desktop/src/renderer/src/lib/desktop-value-cohorts.ts | 10 | export function createDesktopValueCohorts( | CODE |
| LOW | …s/desktop/src/renderer/src/lib/desktop-value-events.ts | 29 | export function createDesktopValueTracker(send: EventSink, now: () => number = Date.now) { | CODE |
| LOW | …/desktop/src/renderer/src/store/transcript-playback.ts | 75 | export function playbackClockPublishBucket(seconds: number): number { | CODE |
| LOW | …/desktop/src/renderer/src/store/transcript-playback.ts | 88 | export function shouldPublishPlaybackClock( | CODE |
| LOW | apps/desktop/src/renderer/src/store/agent-tasks.ts | 63 | export function applyAgentCatalogActivity( | CODE |
| LOW | apps/desktop/src/renderer/src/store/agent-tasks.ts | 85 | export function mergeAgentHistoryActivity( | CODE |
| LOW | apps/desktop/src/renderer/src/store/agent-tasks.ts | 114 | export function groupAgentTasksByDownload(map: AgentTaskMap): Record<string, AgentTaskActivity[]> { | CODE |
| LOW | apps/desktop/src/shared/extension-transcript.ts | 90 | export function classifyCaptionExtractError(stderr: string): ExtensionTranscriptErrorCode { | CODE |
| LOW | apps/desktop/src/shared/agent-history.ts | 22 | export function sanitizeAgentConversationTitle(value: string): string { | CODE |
| LOW | apps/desktop/src/shared/agent-errors.ts | 84 | export function agentFailureFromCloudReason(envelope: { | CODE |
| LOW | apps/desktop/src/shared/extension-overview-reuse.ts | 27 | export function isReusableOverviewSnapshot(snapshot: AiPromptRunSnapshot): boolean { | CODE |
| LOW | apps/desktop/src/shared/extension-overview-reuse.ts | 42 | export function snapshotFromOverviewThread(thread: AgentThread): AiPromptRunSnapshot | null { | CODE |
| LOW | apps/desktop/src/shared/extension-overview-reuse.ts | 96 | export function findDownloadIdForSourceUrl( | CODE |
| LOW | apps/desktop/src/shared/extension-overview-reuse.ts | 121 | export function resolveExtensionOverviewTarget(input: { | CODE |
| LOW | apps/desktop/src/shared/agent-markdown.ts | 159 | export function bindArticleImageArtifacts( | CODE |
| LOW | apps/desktop/src/shared/telemetry/desktop-analytics.ts | 35 | export function isDesktopAnalyticsDocument(candidate: string, rendererEntry: string): boolean { | CODE |
| LOW | apps/desktop/src/main/index.ts | 678 | function setupRendererErrorHandling(window: BrowserWindow): void { | CODE |
| LOW | apps/desktop/src/main/mcp/subscription-tools.ts | 42 | export function createMcpSubscriptionTools() { | CODE |
| LOW | apps/desktop/src/main/mcp/server.ts | 84 | export function getDesktopMcpCapabilities(): DesktopMcpCapabilityGroup[] { | CODE |
| LOW | apps/desktop/src/main/lib/agent-artifacts.ts | 33 | export function registerAgentArtifactProtocol(): void { | CODE |
| LOW | apps/desktop/src/main/lib/ytdlp-kernel-model.ts | 58 | export function resolveKernelRelativePath(kernelRoot: string, relativePath: string): string { | CODE |
| LOW | apps/desktop/src/main/lib/markdown-export.ts | 12 | export async function markdownWithEmbeddedImages( | CODE |
| LOW | apps/desktop/src/main/lib/agent-model-profile.ts | 235 | export function expandTruncatedOutputBudget(input: { | CODE |
| LOW | apps/desktop/src/main/lib/agent-cloud-request.ts | 43 | export function createCloudAgentRequestManager( | CODE |
| LOW | apps/desktop/src/main/lib/extension-chat-actions.ts | 144 | export async function executeExtensionChatAction( | CODE |
| LOW | apps/desktop/src/main/lib/extension-cookies.ts | 84 | export function getExtensionCookieConnection(): ExtensionCookieConnection { | CODE |
| LOW | apps/desktop/src/main/lib/extension-cookies.ts | 108 | export function setExtensionCookieSourceOrder(sourceIds: string[]): ExtensionCookieConnection { | CODE |
| LOW | apps/desktop/src/main/lib/extension-cookies.ts | 137 | export async function applyExtensionCookieSettings( | CODE |
| LOW | apps/desktop/src/main/lib/desktop-analytics-window.ts | 4 | export function registerDesktopAnalyticsWindow(window: object): void { | CODE |
| LOW | apps/desktop/src/main/lib/ai-skill-auto-run.ts | 11 | export function runAutoSkillsForTranscript(snapshot: TranscriptSnapshot): void { | CODE |
| 52 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 49 | // ─── Shared collapsible parts ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 294 | // ─── ThinkingSteps (root) ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 388 | // ─── ThinkingStepsHeader ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 415 | // ─── ThinkingStepsContent ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 440 | // ─── ThinkingStep ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 582 | // ─── ThinkingStepDetails (nested collapsible) ─────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 631 | // ─── ThinkingStepSources ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 652 | // ─── ThinkingStepSource ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 680 | // ─── ThinkingStepImage ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/thinking-steps.tsx | 730 | // ─── Exports ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/hooks/use-merge-split.tsx | 107 | // ── Merge / split boundary animation ───────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/hooks/use-proximity-hover.ts | 230 | // ── 2-D grid path ────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/task-queue/src/schemas.ts | 135 | // ───────────── API I/O schemas ───────────── | COMMENT |
| MEDIUM | packages/task-queue/src/scheduler/scheduler.ts | 80 | // ─────────────── Public API ─────────────── | COMMENT |
| MEDIUM | packages/task-queue/src/scheduler/scheduler.ts | 241 | // ─────────────── Internals ─────────────── | COMMENT |
| MEDIUM | packages/task-queue/src/api/index.ts | 209 | // ───────────── Lifecycle ───────────── | COMMENT |
| MEDIUM | packages/task-queue/src/api/index.ts | 363 | // ───────────── RPC surface ───────────── | COMMENT |
| MEDIUM | packages/task-queue/src/api/index.ts | 833 | // ───────────── Internal: dispatch + executor wiring ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/local-api.ts | 90 | // ───────────── Automation token ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/local-api.ts | 122 | // ───────────── JSON body reader ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/local-api.ts | 151 | // ───────────── Automation /events SSE ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/local-api.ts | 208 | // ───────────── Automation request dispatch ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/local-api.ts | 427 | // ───────────── Top-level request handler ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/lib/download-facade.ts | 222 | // ───────────── Stateless metadata ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/lib/download-facade.ts | 236 | // ───────────── Queue control ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/lib/download-facade.ts | 498 | // ───────────── Read-only ───────────── | COMMENT |
| MEDIUM | apps/desktop/src/main/lib/download-facade.ts | 520 | // ───────────── Lifecycle (no-ops; the kernel handles persistence + recovery) ───────────── | COMMENT |
| MEDIUM | apps/cli/src/transport/automation-client.ts | 95 | // ───────────── Handshake ───────────── | COMMENT |
| MEDIUM | apps/cli/src/transport/automation-client.ts | 141 | // ───────────── ContractClient ───────────── | COMMENT |
| MEDIUM | apps/cli/src/transport/automation-client.ts | 213 | // ───────────── Internals ───────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/skills/release-pro-max/SKILL.md | 35 | ### Step 1: Detect Project Configuration | COMMENT |
| LOW | .agents/skills/release-pro-max/SKILL.md | 74 | ### Step 2: Analyze Changes Since Last Tag | COMMENT |
| LOW | .agents/skills/release-pro-max/SKILL.md | 104 | ### Step 3: Determine Version Bump | COMMENT |
| LOW | .agents/skills/release-pro-max/SKILL.md | 114 | ### Step 4: Generate Multi-language Changelogs | COMMENT |
| LOW | .agents/skills/release-pro-max/SKILL.md | 229 | ### Step 5: Group Changes by Skill/Module | COMMENT |
| LOW | .agents/skills/release-pro-max/SKILL.md | 255 | ### Step 6: Commit Each Skill/Module Separately | COMMENT |
| LOW | .agents/skills/release-pro-max/SKILL.md | 294 | ### Step 7: Generate Changelog and Update Version | COMMENT |
| LOW | .agents/skills/release-pro-max/SKILL.md | 312 | ### Step 8: User Confirmation | COMMENT |
| LOW | .agents/skills/release-pro-max/SKILL.md | 343 | ### Step 9: Create Release Commit and Tag | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 35 | ### Step 1: Detect Project Configuration | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 74 | ### Step 2: Analyze Changes Since Last Tag | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 104 | ### Step 3: Determine Version Bump | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 114 | ### Step 4: Generate Multi-language Changelogs | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 229 | ### Step 5: Group Changes by Skill/Module | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 255 | ### Step 6: Commit Each Skill/Module Separately | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 294 | ### Step 7: Generate Changelog and Update Version | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 312 | ### Step 8: User Confirmation | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 343 | ### Step 9: Create Release Commit and Tag | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 35 | ### Step 1: Detect Project Configuration | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 74 | ### Step 2: Analyze Changes Since Last Tag | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 104 | ### Step 3: Determine Version Bump | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 114 | ### Step 4: Generate Multi-language Changelogs | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 229 | ### Step 5: Group Changes by Skill/Module | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 255 | ### Step 6: Commit Each Skill/Module Separately | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 294 | ### Step 7: Generate Changelog and Update Version | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 312 | ### Step 8: User Confirmation | COMMENT |
| LOW | …/.agents/skills/nexmoe-best-practices-release/SKILL.md | 343 | ### Step 9: Create Release Commit and Tag | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/i18n/src/locales/zh.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/tr.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/ja.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/de.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/ru.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/pt.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/en.json | 1823 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/it.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/fr.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/ko.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/zh-TW.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/id.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/es.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| LOW | packages/i18n/src/locales/ar.json | 1817 | "placeholder": "Ask a follow-up about this video…", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/cli-install.sh | 1 | #!/usr/bin/env sh | COMMENT |
| LOW | scripts/Formula/vidbee.rb | 1 | # Homebrew formula for @vidbee/cli. | COMMENT |
| LOW | packages/ui/src/components/ui/combobox.tsx | 41 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | packages/ui/src/components/ui/command-menu.tsx | 41 | import { | COMMENT |
| LOW | packages/ui/src/components/ui/command-menu.tsx | 101 | } | COMMENT |
| LOW | packages/ui/src/hooks/use-merge-split.tsx | 101 | .sort((a, b) => a.start - b.start); | COMMENT |
| LOW | packages/downloader-core/src/yt-dlp-args.ts | 621 | // GitHub issue #370: Twitch `rechat` 404s abort the VOD. GitHub issue #196: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/build.yml | 85 | # Check if all required secrets are present | COMMENT |