This report summarizes scanner evidence for lukilabs/craft-agents-oss, a TypeScript project with 7,301 GitHub stars. SynthScan examined 450,021 lines of code across 2157 source files, recording 1007 pattern matches distributed across 20 syntactic categories. The legacy adjusted pattern signal is 3.4 (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? 755 finding(s).
Are imports declared and package/API names verified? 39 finding(s).
Are wrappers, guards, and repeated structures necessary? 775 finding(s).
Which changes need focused human review? 1007 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 1007 distinct pattern matches across 20 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 | scripts/electron-dev.ts | 51 | async function ensureBundledUvForCurrentPlatform(): Promise<void> { | CODE |
| LOW | …es/ui/src/components/ui/AnimatedCollapsibleContent.tsx | 16 | export function AnimatedCollapsibleContent({ isOpen, children, className }: AnimatedCollapsibleContentProps) { | CODE |
| LOW | packages/ui/src/components/ui/StyledDropdown.tsx | 28 | export function mirrorHoverToOpenStateClasses(className?: string): string | undefined { | CODE |
| LOW | …ges/ui/src/components/ui/IslandFollowUpContentView.tsx | 44 | export function IslandFollowUpContentView({ | CODE |
| LOW | packages/ui/src/components/ui/Island.tsx | 158 | function installGlobalScrollBlockers(): () => void { | CODE |
| LOW | packages/ui/src/components/chat/turn-utils.ts | 183 | export function shouldShowThinkingIndicator(phase: TurnPhase, isBuffering: boolean): boolean { | CODE |
| LOW | packages/ui/src/components/chat/turn-utils.ts | 297 | function extractTodosFromActivities(activities: ActivityItem[]): TodoItem[] | undefined { | CODE |
| LOW | packages/ui/src/components/chat/follow-up-helpers.ts | 12 | export function extractAnnotationSelectedText(annotation: AnnotationV1, messageContent: string): string { | CODE |
| LOW | packages/ui/src/components/chat/TurnCard.tsx | 459 | function createAnnotationIndexBadge(index: number): HTMLSpanElement { | CODE |
| LOW | packages/ui/src/components/chat/turn/tool-display.ts | 54 | export function computeEditWriteDiffStats( | CODE |
| LOW | packages/ui/src/components/chat/turn/tool-display.ts | 215 | function extractActionFromDisplayName(iconName: string, llmName: string): string { | CODE |
| LOW | packages/ui/src/components/markdown/diff-normalize.ts | 51 | function containsUnifiedFileBreakCandidate(lines: string[]): boolean { | CODE |
| LOW | …ages/ui/src/components/markdown/annotation-resolver.ts | 32 | function normalizeWhitespaceWithMap(input: string): NormalizedText { | CODE |
| LOW | …es/ui/src/components/markdown/TiptapMarkdownEditor.tsx | 69 | export function preprocessMarkdownForOfficial(markdown: string): string { | CODE |
| LOW | …es/ui/src/components/markdown/TiptapMarkdownEditor.tsx | 96 | export function postprocessMarkdownFromOfficial(markdown: string): string { | CODE |
| LOW | …es/ui/src/components/markdown/TiptapMarkdownEditor.tsx | 175 | async function handleDroppedOrPastedFiles( | CODE |
| LOW | packages/ui/src/components/markdown/link-target.ts | 54 | export function resolveMarkdownLinkTarget(target: string): ResolvedMarkdownLinkTarget { | CODE |
| LOW | packages/ui/src/components/markdown/link-target.ts | 72 | export function classifyMarkdownLinkTarget(target: string): 'file' | 'url' { | CODE |
| LOW | …/ui/src/components/markdown/MarkdownDatatableBlock.tsx | 172 | function computeNumericGranularities(values: number[], type: 'number' | 'currency' | 'percent'): GranularityOption[] { | CODE |
| LOW | …/ui/src/components/markdown/MarkdownDatatableBlock.tsx | 222 | function computeGranularityOptions(data: DatatableData): Map<string, GranularityOption[]> { | CODE |
| LOW | packages/ui/src/components/markdown/mermaid-source.ts | 51 | export function getFirstMermaidDiagramLine(code: string): string | null { | CODE |
| LOW | packages/ui/src/components/markdown/TiptapSlashMenu.ts | 148 | function insertRichBlockAndOpenEditor( | CODE |
| LOW | packages/ui/src/components/markdown/TiptapSlashMenu.ts | 168 | function findLastCodeLanguageInDoc(editor: Editor): string | null { | CODE |
| LOW | packages/ui/src/components/markdown/TiptapSlashMenu.ts | 182 | function resolvePreferredCodeLanguage(editor: Editor): string { | CODE |
| LOW | packages/ui/src/components/markdown/TiptapSlashMenu.ts | 203 | function insertCodeBlockWithPlaceholder(editor: Editor, insertPos?: number) { | CODE |
| LOW | …src/components/markdown/CollapsibleMarkdownContext.tsx | 32 | export function CollapsibleMarkdownProvider({ children }: CollapsibleMarkdownProviderProps) { | CODE |
| LOW | …ui/src/components/annotations/interaction-selectors.ts | 3 | export function getAnnotationInteractionSourceKey(state: AnnotationInteractionState, messageId?: string): string { | CODE |
| LOW | …ui/src/components/annotations/interaction-selectors.ts | 17 | export function getAnnotationInteractionAnchor(state: AnnotationInteractionState): { x: number; y: number } | null { | CODE |
| LOW | …ents/annotations/use-annotation-island-presentation.ts | 33 | export function decideAnnotationIslandPresentation( | CODE |
| LOW | …ents/annotations/use-annotation-island-presentation.ts | 44 | export function useAnnotationIslandPresentation({ | CODE |
| LOW | …i/src/components/annotations/annotation-host-config.ts | 21 | export function shouldRenderAnnotationIslandInPortal(host: AnnotationHost): boolean { | CODE |
| LOW | packages/ui/src/components/annotations/island-motion.ts | 31 | export function getDefaultIslandWidthEstimate(): number { | CODE |
| LOW | packages/ui/src/components/annotations/island-motion.ts | 35 | export function buildSelectionEntryTransition(from: PointerSnapshot | null, to: PointerSnapshot | null): IslandTransitio | CODE |
| LOW | packages/ui/src/components/annotations/island-motion.ts | 64 | export function buildAnnotationChipEntryTransition(): IslandTransitionConfig { | CODE |
| LOW | …s/annotations/use-annotation-interaction-controller.ts | 21 | export function useAnnotationInteractionController() { | CODE |
| LOW | packages/ui/src/components/annotations/block-markers.ts | 4 | export function clearBlockAnnotationMarkers(root: HTMLElement): void { | CODE |
| LOW | packages/ui/src/components/annotations/block-markers.ts | 13 | export function applyBlockAnnotationMarker(root: HTMLElement, annotation: AnnotationV1): void { | CODE |
| LOW | …es/ui/src/components/annotations/interaction-policy.ts | 16 | export function getAnnotationChipInteraction(annotation?: AnnotationV1 | null): AnnotationChipInteraction { | CODE |
| LOW⚡ | …es/ui/src/components/annotations/interaction-policy.ts | 28 | export function isAnnotationChipClickable(annotation?: AnnotationV1 | null): boolean { | CODE |
| LOW⚡ | …es/ui/src/components/annotations/interaction-policy.ts | 32 | export function getAnnotationChipOpenMode(): 'view' { | CODE |
| LOW⚡ | …es/ui/src/components/annotations/interaction-policy.ts | 41 | export function shouldIgnoreSelectionMouseUpTarget(target: EventTarget | null): boolean { | CODE |
| LOW | …kages/ui/src/components/annotations/annotation-core.ts | 18 | export function hasExistingTextRangeAnnotation( | CODE |
| LOW | …kages/ui/src/components/annotations/annotation-core.ts | 32 | export function createSelectionPreviewAnnotation( | CODE |
| LOW | …kages/ui/src/components/annotations/annotation-core.ts | 66 | export function createTextSelectionAnnotation( | CODE |
| LOW | …ui/src/components/annotations/island-dismiss-policy.ts | 9 | export function resolveIslandOutsideDismissAction({ | CODE |
| LOW | …rc/components/annotations/interaction-state-machine.ts | 47 | export function annotationInteractionReducer( | CODE |
| LOW | …/components/annotations/annotation-overlay-geometry.ts | 31 | export function computeAnnotationOverlayGeometry({ | CODE |
| LOW | …ges/ui/src/components/annotations/selection-restore.ts | 8 | export function restoreDomSelectionFromOffsets( | CODE |
| LOW | …ges/ui/src/components/annotations/selection-restore.ts | 37 | export function scheduleDomSelectionRestore( | CODE |
| LOW | …kages/ui/src/components/annotations/follow-up-state.ts | 25 | export function getAnnotationFollowUpState(annotation: AnnotationV1): AnnotationFollowUpState { | CODE |
| LOW | …kages/ui/src/components/annotations/follow-up-state.ts | 50 | export function formatAnnotationFollowUpTooltipText(annotation: AnnotationV1, maxLength = 180): string { | CODE |
| LOW | …components/annotations/use-annotation-island-events.ts | 41 | export function useAnnotationIslandEvents({ | CODE |
| LOW | …src/components/overlay/AnnotatableMarkdownDocument.tsx | 63 | export function AnnotatableMarkdownDocument({ | CODE |
| LOW | …src/components/overlay/FullscreenOverlayBaseHeader.tsx | 193 | export function FullscreenOverlayBaseHeader({ | CODE |
| LOW | …omponents/overlay/DocumentFormattedMarkdownOverlay.tsx | 61 | export function DocumentFormattedMarkdownOverlay({ | CODE |
| LOW | …es/ui/src/components/overlay/FullscreenOverlayBase.tsx | 88 | export function handleFullscreenEscapeWithStack(): boolean { | CODE |
| LOW | packages/ui/src/lib/dismissible-layer-bridge.ts | 37 | export function setDismissibleLayerBridge(bridge: DismissibleLayerBridge | null): void { | CODE |
| LOW | packages/ui/src/lib/dismissible-layer-bridge.ts | 41 | export function getDismissibleLayerBridge(): DismissibleLayerBridge | null { | CODE |
| LOW | packages/session-tools-core/src/validation.ts | 121 | export function validateJsonFileHasFields( | CODE |
| LOW | packages/session-tools-core/src/validation.ts | 307 | function getFirstMermaidDiagramLine(code: string): string { | CODE |
| 502 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/install-server.sh | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/install-server.sh | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-server.sh | 38 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-server.sh | 40 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-server.sh | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-server.sh | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-server.sh | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-server.sh | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-server.sh | 71 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/install-server.sh | 73 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/docker-smoke-test.sh | 2 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | scripts/docker-smoke-test.sh | 15 | # ============================================================================= | COMMENT |
| MEDIUM | packages/ui/src/components/ui/StyledDropdown.tsx | 96 | // ── Content ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/StyledDropdown.tsx | 127 | // ── Item ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/StyledDropdown.tsx | 153 | // ── Separator ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/StyledDropdown.tsx | 167 | // ── Sub-menu trigger ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/StyledDropdown.tsx | 189 | // ── Sub-menu content ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/ui/StyledDropdown.tsx | 217 | // ── Shortcut ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownJsonBlock.tsx | 25 | // ── Themes (same as JSONPreviewOverlay) ──────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownJsonBlock.tsx | 41 | // ── Deep parse helper (same as JSONPreviewOverlay) ───────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownJsonBlock.tsx | 78 | // ── Error boundary ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownJsonBlock.tsx | 108 | // ── Helpers ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownJsonBlock.tsx | 115 | // ── Main component ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/ui/src/components/markdown/MarkdownDatatableBlock.tsx | 58 | // ── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/ui/src/components/markdown/MarkdownDatatableBlock.tsx | 82 | // ── Cell formatting ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/ui/src/components/markdown/MarkdownDatatableBlock.tsx | 129 | // ── Sort icon ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/ui/src/components/markdown/MarkdownDatatableBlock.tsx | 148 | // ── Grouping granularity ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/ui/src/components/markdown/MarkdownDatatableBlock.tsx | 283 | // ── Error boundary ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/ui/src/components/markdown/MarkdownDatatableBlock.tsx | 300 | // ── Main component ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownDiffBlock.tsx | 27 | // ── Custom element + theme registration (same as ShikiDiffViewer) ────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownDiffBlock.tsx | 44 | // ── Helpers ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownDiffBlock.tsx | 55 | // ── Error boundary ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownDiffBlock.tsx | 85 | // ── Theme bridge ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownDiffBlock.tsx | 116 | // ── Main component ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/src/components/markdown/PreviewBlockChrome.tsx | 25 | // ── Frame + header ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/src/components/markdown/PreviewBlockChrome.tsx | 90 | // ── States ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/src/components/markdown/PreviewBlockChrome.tsx | 115 | // ── Fade ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/src/components/markdown/PreviewBlockChrome.tsx | 133 | // ── Item navigator ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …i/src/components/markdown/MarkdownSpreadsheetBlock.tsx | 42 | // ── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …i/src/components/markdown/MarkdownSpreadsheetBlock.tsx | 65 | // ── Cell formatting ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …i/src/components/markdown/MarkdownSpreadsheetBlock.tsx | 103 | // ── Error boundary ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …i/src/components/markdown/MarkdownSpreadsheetBlock.tsx | 120 | // ── Main component ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownHtmlBlock.tsx | 47 | // ── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownHtmlBlock.tsx | 60 | // ── Error boundary ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownHtmlBlock.tsx | 77 | // ── HTML preprocessing ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/ui/src/components/markdown/MarkdownHtmlBlock.tsx | 96 | // ── Main component ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/markdown/table-export.ts | 10 | // ── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/markdown/table-export.ts | 18 | // ── Markdown ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/markdown/table-export.ts | 35 | // ── CSV (RFC 4180) ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/markdown/table-export.ts | 55 | // ── XLSX ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/src/components/markdown/table-export.ts | 101 | // ── XLSX Styles ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ckages/ui/src/components/markdown/MarkdownPdfBlock.tsx | 53 | // ── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ckages/ui/src/components/markdown/MarkdownPdfBlock.tsx | 66 | // ── Error boundary ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ckages/ui/src/components/markdown/MarkdownPdfBlock.tsx | 83 | // ── Main component ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/ui/src/components/overlay/MultiDiffPreviewOverlay.tsx | 164 | // ── Fade-in reveal ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/src/config/theme-roles.ts | 15 | // ───────────────────────── color math ───────────────────────── | COMMENT |
| MEDIUM | packages/shared/src/config/theme-roles.ts | 307 | // ───────────────────────── role tables ───────────────────────── | COMMENT |
| MEDIUM | packages/shared/src/agent/claude-agent.ts | 503 | // ── WS2 persistent streaming-input query state (flag ON only) ───────────── | COMMENT |
| MEDIUM | packages/shared/src/agent/claude-agent.ts | 1585 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | packages/shared/src/agent/claude-agent.ts | 1587 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| 95 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/build-server.ts | 813 | // Step 1: Clean | COMMENT |
| LOW⚡ | scripts/build-server.ts | 820 | // Step 2: Download Bun runtime | COMMENT |
| LOW⚡ | scripts/build-server.ts | 824 | // Step 3: Download uv | COMMENT |
| LOW⚡ | scripts/build-server.ts | 828 | // Step 4: Build the Pi agent server subprocess | COMMENT |
| LOW⚡ | scripts/build-server.ts | 847 | // Step 5: Assemble resources | COMMENT |
| LOW⚡ | scripts/build-server.ts | 851 | // Step 6: Copy production node_modules | COMMENT |
| LOW⚡ | scripts/build-server.ts | 855 | // Step 7: Copy workspace packages | COMMENT |
| LOW⚡ | scripts/build-server.ts | 860 | // Step 8: Create entry scripts + Docker files | COMMENT |
| LOW | packages/shared/src/auth/github-copilot.ts | 257 | // Step 1: request a device + user code pair | COMMENT |
| LOW | packages/shared/src/auth/github-copilot.ts | 294 | // Step 2: poll for the GitHub access token until authorized or expired | COMMENT |
| LOW⚡ | packages/shared/src/auth/github-copilot.ts | 366 | // Step 3: trade the GitHub token for Copilot API credentials | COMMENT |
| LOW⚡ | packages/shared/src/auth/github-copilot.ts | 370 | // Step 4: accept policies for gated models so they actually show up in the | COMMENT |
| LOW⚡ | packages/shared/src/utils/logo.ts | 350 | // Step 1: Try full domain first (e.g., mail.google.com) | COMMENT |
| LOW⚡ | packages/shared/src/utils/logo.ts | 358 | // Step 2: Try root domain (e.g., google.com) | COMMENT |
| LOW⚡ | packages/shared/src/utils/logo.ts | 364 | // Step 3: Fall back to Google Favicon V2 API (uses full domain for better results) | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 227 | // Step 1: Strip only CR/LF (standard base64 line wrapping per RFC 2045). | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 231 | // Step 2: Strict charset — detect alphabet variant. | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 238 | // Step 3: Normalize to standard alphabet for decoding | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 243 | // Step 4: Auto-pad to make length divisible by 4 | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 248 | // Step 5: Decode | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 257 | // Step 6: Canonical roundtrip — re-encode and compare to padded input. | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 261 | // Step 7: Binary-likeness check (unchanged) | COMMENT |
| LOW⚡ | packages/shared/src/agent/mode-manager.ts | 1181 | // Step 3: Use bash AST-based validation | COMMENT |
| LOW⚡ | packages/shared/src/agent/mode-manager.ts | 1190 | // Step 3: Convert AST rejection reason to BashRejectionReason | COMMENT |
| LOW | packages/shared/src/agent/mode-manager.ts | 1139 | // Step 1: Check for dangerous control characters (before parsing) | COMMENT |
| LOW | packages/shared/src/agent/mode-manager.ts | 1151 | // Step 2: Determine if this is a PowerShell command | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 180 | // Step 1: Permission mode check | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 257 | // Step 2: Source blocking | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 324 | // Step 3: Prerequisite check | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 419 | // Step 4: call_llm interception | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 447 | // Step 5: Input transforms | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 747 | // Step 6: Ask-mode prompt decision | COMMENT |
| LOW⚡ | …ckages/shared/src/agent/backend/internal/drivers/pi.ts | 40 | // Step 1: Exchange GitHub OAuth token → Copilot API token | COMMENT |
| LOW⚡ | …ckages/shared/src/agent/backend/internal/drivers/pi.ts | 44 | // Step 2: Extract base URL from token | COMMENT |
| LOW⚡ | …ckages/shared/src/agent/backend/internal/drivers/pi.ts | 52 | // Step 3: GET /models | COMMENT |
| LOW | …hared/src/agent/__tests__/claude-event-adapter.test.ts | 858 | // Step 1: tool_start via stream event | COMMENT |
| LOW | …hared/src/agent/__tests__/claude-event-adapter.test.ts | 869 | // Step 2: assistant message confirms tool (deduped) | COMMENT |
| LOW | …hared/src/agent/__tests__/claude-event-adapter.test.ts | 881 | // Step 3: user message with tool result | COMMENT |
| LOW⚡ | …ed/src/sources/__tests__/token-refresh-manager.test.ts | 569 | // Step 1: getSourcesNeedingRefresh includes the expired source | COMMENT |
| LOW⚡ | …ed/src/sources/__tests__/token-refresh-manager.test.ts | 573 | // Step 2: refreshSources refreshes and restores auth state | COMMENT |
| LOW⚡ | …ed/src/sources/__tests__/token-refresh-manager.test.ts | 578 | // Step 3: Verify auth state is restored | COMMENT |
| LOW | packages/server-core/src/services/image-utils.ts | 128 | // Step 1: Compute target dimensions if resize needed | COMMENT |
| LOW | packages/server-core/src/services/image-utils.ts | 140 | // Step 2: Encode — try preferred format first | COMMENT |
| LOW | packages/server-core/src/services/image-utils.ts | 176 | // Step 5: Give up | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1306 | // Step 1: Store attachments and get persistent metadata | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1348 | // Step 2: Create processed attachments for Claude | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1377 | // Step 3: Extract badges from mentions (sources/skills) with embedded icons | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1419 | // Step 5: Create user message with StoredAttachments (for UI display) | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1445 | // Step 6: Send to Claude with processed attachments + stored attachments for persistence | COMMENT |
| LOW⚡ | …/electron/src/main/__tests__/sessions-sanitize.test.ts | 176 | // Step 1: badge substitution (as done in sessions.ts) | COMMENT |
| LOW⚡ | …/electron/src/main/__tests__/sessions-sanitize.test.ts | 183 | // Step 2: sanitize remaining mentions | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/build-server.ts | 813 | // Step 1: Clean | COMMENT |
| LOW⚡ | scripts/build-server.ts | 820 | // Step 2: Download Bun runtime | COMMENT |
| LOW⚡ | scripts/build-server.ts | 824 | // Step 3: Download uv | COMMENT |
| LOW⚡ | scripts/build-server.ts | 828 | // Step 4: Build the Pi agent server subprocess | COMMENT |
| LOW⚡ | scripts/build-server.ts | 847 | // Step 5: Assemble resources | COMMENT |
| LOW⚡ | scripts/build-server.ts | 851 | // Step 6: Copy production node_modules | COMMENT |
| LOW⚡ | scripts/build-server.ts | 855 | // Step 7: Copy workspace packages | COMMENT |
| LOW⚡ | scripts/build-server.ts | 860 | // Step 8: Create entry scripts + Docker files | COMMENT |
| LOW | packages/shared/src/auth/github-copilot.ts | 257 | // Step 1: request a device + user code pair | COMMENT |
| LOW | packages/shared/src/auth/github-copilot.ts | 294 | // Step 2: poll for the GitHub access token until authorized or expired | COMMENT |
| LOW⚡ | packages/shared/src/auth/github-copilot.ts | 366 | // Step 3: trade the GitHub token for Copilot API credentials | COMMENT |
| LOW⚡ | packages/shared/src/auth/github-copilot.ts | 370 | // Step 4: accept policies for gated models so they actually show up in the | COMMENT |
| LOW⚡ | packages/shared/src/utils/logo.ts | 350 | // Step 1: Try full domain first (e.g., mail.google.com) | COMMENT |
| LOW⚡ | packages/shared/src/utils/logo.ts | 358 | // Step 2: Try root domain (e.g., google.com) | COMMENT |
| LOW⚡ | packages/shared/src/utils/logo.ts | 364 | // Step 3: Fall back to Google Favicon V2 API (uses full domain for better results) | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 227 | // Step 1: Strip only CR/LF (standard base64 line wrapping per RFC 2045). | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 231 | // Step 2: Strict charset — detect alphabet variant. | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 238 | // Step 3: Normalize to standard alphabet for decoding | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 243 | // Step 4: Auto-pad to make length divisible by 4 | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 248 | // Step 5: Decode | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 257 | // Step 6: Canonical roundtrip — re-encode and compare to padded input. | COMMENT |
| LOW⚡ | packages/shared/src/utils/binary-detection.ts | 261 | // Step 7: Binary-likeness check (unchanged) | COMMENT |
| LOW⚡ | packages/shared/src/agent/mode-manager.ts | 1181 | // Step 3: Use bash AST-based validation | COMMENT |
| LOW⚡ | packages/shared/src/agent/mode-manager.ts | 1190 | // Step 3: Convert AST rejection reason to BashRejectionReason | COMMENT |
| LOW | packages/shared/src/agent/mode-manager.ts | 1139 | // Step 1: Check for dangerous control characters (before parsing) | COMMENT |
| LOW | packages/shared/src/agent/mode-manager.ts | 1151 | // Step 2: Determine if this is a PowerShell command | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 180 | // Step 1: Permission mode check | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 257 | // Step 2: Source blocking | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 324 | // Step 3: Prerequisite check | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 419 | // Step 4: call_llm interception | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 447 | // Step 5: Input transforms | COMMENT |
| LOW | …c/agent/core/__tests__/pre-tool-use-checks.isolated.ts | 747 | // Step 6: Ask-mode prompt decision | COMMENT |
| LOW⚡ | …ckages/shared/src/agent/backend/internal/drivers/pi.ts | 40 | // Step 1: Exchange GitHub OAuth token → Copilot API token | COMMENT |
| LOW⚡ | …ckages/shared/src/agent/backend/internal/drivers/pi.ts | 44 | // Step 2: Extract base URL from token | COMMENT |
| LOW⚡ | …ckages/shared/src/agent/backend/internal/drivers/pi.ts | 52 | // Step 3: GET /models | COMMENT |
| LOW | …hared/src/agent/__tests__/claude-event-adapter.test.ts | 858 | // Step 1: tool_start via stream event | COMMENT |
| LOW | …hared/src/agent/__tests__/claude-event-adapter.test.ts | 869 | // Step 2: assistant message confirms tool (deduped) | COMMENT |
| LOW | …hared/src/agent/__tests__/claude-event-adapter.test.ts | 881 | // Step 3: user message with tool result | COMMENT |
| LOW⚡ | …ed/src/sources/__tests__/token-refresh-manager.test.ts | 569 | // Step 1: getSourcesNeedingRefresh includes the expired source | COMMENT |
| LOW⚡ | …ed/src/sources/__tests__/token-refresh-manager.test.ts | 573 | // Step 2: refreshSources refreshes and restores auth state | COMMENT |
| LOW⚡ | …ed/src/sources/__tests__/token-refresh-manager.test.ts | 578 | // Step 3: Verify auth state is restored | COMMENT |
| LOW | packages/server-core/src/services/image-utils.ts | 128 | // Step 1: Compute target dimensions if resize needed | COMMENT |
| LOW | packages/server-core/src/services/image-utils.ts | 140 | // Step 2: Encode — try preferred format first | COMMENT |
| LOW | packages/server-core/src/services/image-utils.ts | 176 | // Step 5: Give up | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1306 | // Step 1: Store attachments and get persistent metadata | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1348 | // Step 2: Create processed attachments for Claude | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1377 | // Step 3: Extract badges from mentions (sources/skills) with embedded icons | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1419 | // Step 5: Create user message with StoredAttachments (for UI display) | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 1445 | // Step 6: Send to Claude with processed attachments + stored attachments for persistence | COMMENT |
| LOW⚡ | …/electron/src/main/__tests__/sessions-sanitize.test.ts | 176 | // Step 1: badge substitution (as done in sessions.ts) | COMMENT |
| LOW⚡ | …/electron/src/main/__tests__/sessions-sanitize.test.ts | 183 | // Step 2: sanitize remaining mentions | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 177 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 232 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 250 | except Exception: | CODE |
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 272 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 309 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 369 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/docx_tool.py | 152 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/docx_tool.py | 204 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/docx_tool.py | 284 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/docx_tool.py | 322 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/docx_tool.py | 384 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/markitdown_cli.py | 116 | except Exception: | CODE |
| LOW | apps/electron/resources/scripts/markitdown_cli.py | 126 | except Exception as e: | CODE |
| LOW⚡ | apps/electron/resources/scripts/pdf_tool.py | 698 | except Exception as e: | CODE |
| LOW⚡ | apps/electron/resources/scripts/pdf_tool.py | 969 | except Exception as e: | CODE |
| LOW⚡ | apps/electron/resources/scripts/pdf_tool.py | 1175 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 452 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 493 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 549 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 580 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 614 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 637 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 674 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 739 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 781 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 810 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 842 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 871 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 913 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 992 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1012 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1131 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1212 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1235 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1266 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1315 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/doc_diff.py | 66 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/doc_diff.py | 227 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/ical_tool.py | 167 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/ical_tool.py | 275 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/ical_tool.py | 366 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 125 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 155 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 172 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 206 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 243 | except Exception: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 245 | except Exception: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 257 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 313 | except Exception: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 327 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/img_tool.py | 370 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pptx_tool.py | 109 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pptx_tool.py | 295 | except Exception as e: | CODE |
| LOW | apps/electron/resources/scripts/pptx_tool.py | 358 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bunfig.toml | 1 | preload = ["./packages/shared/src/unified-network-interceptor.ts"] | COMMENT |
| LOW | scripts/install-server.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/docker-smoke-test.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/electron-build-main.ts | 301 | "--platform=node", | COMMENT |
| LOW | …es/ui/src/components/markdown/MarkdownMermaidBlock.tsx | 21 | // | COMMENT |
| LOW | packages/ui/src/components/markdown/Markdown.tsx | 181 | ) | COMMENT |
| LOW | packages/ui/src/components/markdown/table-export.ts | 101 | // ── XLSX Styles ────────────────────────────────────────────────────────────── | COMMENT |
| LOW | packages/core/src/types/message.ts | 281 | annotations?: AnnotationV1[]; | COMMENT |
| LOW | packages/shared/src/unified-network-interceptor.ts | 1001 | // - index-dropping relays send argument-delta chunks without `tc.index`. | COMMENT |
| LOW | packages/shared/src/agent/base-agent.ts | 201 | protected pathProcessor: PathProcessor; | COMMENT |
| LOW | packages/shared/src/agent/base-agent.ts | 221 | // when a model directly calls an unknown tool on an inactive source. | COMMENT |
| LOW | packages/shared/src/agent/tool-matching.ts | 281 | // Detect background tasks/shells from results. Only the session's own agent: a subagent's | COMMENT |
| LOW | packages/shared/src/agent/tool-matching.ts | 421 | // | COMMENT |
| LOW | packages/shared/src/agent/claude-agent.ts | 1201 | // without the [1m] suffix): every call re-reads the whole context. Subagents inherit it. | COMMENT |
| LOW | packages/shared/src/agent/claude-agent.ts | 1241 | // - non-Claude models disable thinking entirely | COMMENT |
| LOW | packages/shared/src/agent/claude-agent.ts | 1641 | forkSession: true, | COMMENT |
| LOW | packages/shared/src/agent/pi-agent.ts | 2241 | images: images.length > 0 ? images : undefined, | COMMENT |
| LOW | packages/shared/src/agent/backend/pi/event-adapter.ts | 121 | // Track last usage for emitting with complete event | COMMENT |
| LOW | packages/shared/src/agent/backend/pi/event-adapter.ts | 141 | private fallbackTimerId: ReturnType<typeof setTimeout> | null = null; | COMMENT |
| LOW | …es/shared/src/agent/__tests__/pi-event-adapter.test.ts | 1201 | expect(finalEvents[0].turnId).toMatch(/^pi-turn-1/); | COMMENT |
| LOW | packages/pi-agent-server/src/index.ts | 621 | // Build tools: coding tools + web tools wrapped with permission hooks + proxy tools. | COMMENT |
| LOW | packages/pi-agent-server/src/index.ts | 641 | }; | COMMENT |
| LOW | packages/pi-agent-server/src/index.ts | 1241 | send({ type: 'event', event: { type: 'context_usage', ...payload } }); | COMMENT |
| LOW | packages/server-core/src/tasks/TaskRunner.ts | 141 | /** Sum of each child's (input + output) tokens observed at completion. */ | COMMENT |
| LOW | …er-core/src/sessions/sendmessage-oauth-refresh.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it } from 'bun:test' | COMMENT |
| LOW | …r-core/src/sessions/refresh-connection-runtime.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it, jest } from 'bun:test' | COMMENT |
| LOW | packages/server-core/src/sessions/SessionManager.ts | 801 | // Tasks Conductor: id of the run that spawned this child session (child nodes only) | COMMENT |
| LOW | packages/server-core/src/sessions/SessionManager.ts | 901 | authRetryAttempted?: boolean | COMMENT |
| LOW | packages/server-core/src/sessions/SessionManager.ts | 921 | // ~/.claude/projects/{cwd-hash}/ directory to find the parent's session file. | COMMENT |
| LOW | packages/server-core/src/sessions/SessionManager.ts | 6601 | // `midStreamBehavior` (resolved via {@link resolveMidStreamBehavior}, | COMMENT |
| LOW | …c/sessions/execute-prompt-automation-test-mode.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it } from 'bun:test' | COMMENT |
| LOW | packages/server-core/src/sources/build-servers.ts | 61 | // API renew endpoint — non-OAuth token refresh | COMMENT |
| LOW | packages/server-core/src/handlers/rpc/tasks.ts | 261 | // | COMMENT |
| LOW | packages/server-core/src/handlers/rpc/sessions.ts | 201 | return sessionManager.deleteSession(sessionId) | COMMENT |
| LOW | apps/webui/src/adapter/web-api.ts | 261 | } | COMMENT |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1 | # /// script | COMMENT |
| LOW | apps/electron/scripts/build-dmg.sh | 121 | cp "$TEMP_DIR/${BUN_DOWNLOAD}/bun" "$ELECTRON_DIR/vendor/bun/" | COMMENT |
| LOW | apps/electron/src/renderer/App.tsx | 841 | // - During streaming (atom.isProcessing = true): Atom is source of truth | COMMENT |
| LOW | apps/electron/src/renderer/main.tsx | 21 | // the language we just restored from localStorage. The main-process IPC handler | COMMENT |
| LOW | …s/electron/src/renderer/contexts/NavigationContext.tsx | 1241 | navigate(routes.view.allSessions(sessionId)) | COMMENT |
| LOW | …lectron/src/renderer/components/app-shell/AppShell.tsx | 1601 | } | COMMENT |
| LOW | …ctron/src/renderer/event-processor/handlers/session.ts | 581 | // | COMMENT |
| LOW | apps/electron/src/main/index.ts | 1 | // Load user's shell environment first (before other imports that may use env) | COMMENT |
| LOW | apps/electron/src/main/handlers/browser.ts | 181 | } | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/ui/src/components/markdown/linkify.ts | 230 | // (e.g., AI-generated `[commit](https://github.com/...)` → `\`commit\``) | COMMENT |
| HIGH | packages/server-core/src/sessions/SessionManager.ts | 737 | // Session name (user-defined or AI-generated) | COMMENT |
| HIGH | apps/electron/src/renderer/atoms/sessions.ts | 104 | // Include plan messages as final responses (they're AI-generated content) | COMMENT |
| HIGH | apps/electron/src/renderer/utils/session.ts | 124 | // Include plan messages as final responses (they're AI-generated content) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/shared/src/projects/__tests__/storage.test.ts | 75 | const body = 'TOP-OF-MEMORY ' + 'lorem ipsum dolor sit amet '.repeat(74) + ' BOTTOM-OF-MEMORY'; | CODE |
| LOW | packages/shared/src/projects/__tests__/storage.test.ts | 75 | const body = 'TOP-OF-MEMORY ' + 'lorem ipsum dolor sit amet '.repeat(74) + ' BOTTOM-OF-MEMORY'; | CODE |
| LOW | …ages/shared/src/utils/__tests__/large-response.test.ts | 72 | const eightKTokenText = ('lorem ipsum dolor sit amet ').repeat(1185).slice(0, 32_000); | CODE |
| LOW | …ages/shared/src/utils/__tests__/large-response.test.ts | 72 | const eightKTokenText = ('lorem ipsum dolor sit amet ').repeat(1185).slice(0, 32_000); | CODE |
| LOW | …ages/shared/src/utils/__tests__/large-response.test.ts | 138 | const eightKTokenText = ('lorem ipsum dolor sit amet ').repeat(1185).slice(0, 32_000); | CODE |
| LOW | …ages/shared/src/utils/__tests__/large-response.test.ts | 138 | const eightKTokenText = ('lorem ipsum dolor sit amet ').repeat(1185).slice(0, 32_000); | CODE |
| LOW | …ages/shared/src/utils/__tests__/large-response.test.ts | 239 | ('Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + | CODE |
| LOW | …ages/shared/src/utils/__tests__/large-response.test.ts | 239 | ('Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + | CODE |
| LOW | …kages/shared/src/agent/__tests__/browser-tools.test.ts | 535 | expect(result.content[0].text).toContain('Filled element @e2 with "user@example.com"') | CODE |
| LOW | …red/src/agent/__tests__/browser-tool-redaction.test.ts | 40 | 'Filled element @e1 with "user@example.com"', | CODE |
| LOW | …/shared/src/sources/__tests__/multi-header-e2e.test.ts | 235 | 'X-Auth-Email': 'user@example.com', | CODE |
| LOW | …/shared/src/sources/__tests__/multi-header-e2e.test.ts | 242 | expect(headers['X-Auth-Email']).toBe('user@example.com'); | CODE |
| LOW | …shared/src/sources/__tests__/multi-header-auth.test.ts | 192 | 'X-Auth-Email': 'user@example.com', | CODE |
| LOW | …shared/src/sources/__tests__/multi-header-auth.test.ts | 203 | expect(headers['X-Auth-Email']).toBe('user@example.com'); | CODE |
| LOW | …r-core/src/sessions/browser-password-redaction.test.ts | 43 | await result(claudeResult('Filled element @e1 with "user@example.com"\nFilled password field @e2 (7 characters)\nCli | CODE |
| LOW | …r-core/src/sessions/browser-password-redaction.test.ts | 65 | await result(claudeResult('Filled element @e1 with "user@example.com"')) | CODE |
| LOW | apps/electron/resources/docs/data-tables.md | 35 | { "name": "Acme Corp", "revenue": 4200000, "growth": 0.152, "active": true, "tier": "Enterprise" }, | CODE |
| LOW | apps/electron/resources/docs/data-tables.md | 65 | | `text` | Any string | Plain text | `"John Doe"` | John Doe | | CODE |
| LOW | …tron/src/renderer/playground/registry/edit-popover.tsx | 427 | name: 'placeholder', | CODE |
| LOW | …lectron/src/renderer/playground/registry/turn-card.tsx | 1683 | name: 'Acme Corp', | CODE |
| LOW | …electron/src/renderer/playground/registry/messages.tsx | 473 | email: 'user@example.com', | CODE |
| LOW | …electron/src/renderer/playground/registry/messages.tsx | 860 | email: 'user@example.com', | CODE |
| LOW | apps/electron/src/renderer/playground/registry/chat.tsx | 1414 | name: 'placeholder', | CODE |
| LOW | …n/src/renderer/utils/__tests__/auth-validation.test.ts | 229 | expect(validateBasicAuthCredentials('user@example.com', 'pass', true)).toBe(true) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 69 | CODE | |
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 124 | CODE | |
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 188 | CODE | |
| LOW | apps/electron/resources/scripts/xlsx_tool.py | 320 | CODE | |
| LOW | apps/electron/resources/scripts/docx_tool.py | 88 | CODE | |
| LOW | apps/electron/resources/scripts/docx_tool.py | 161 | CODE | |
| LOW | apps/electron/resources/scripts/docx_tool.py | 295 | CODE | |
| LOW | apps/electron/resources/scripts/docx_tool.py | 358 | CODE | |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 71 | CODE | |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 465 | CODE | |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 647 | CODE | |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 684 | CODE | |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1022 | CODE | |
| LOW | apps/electron/resources/scripts/pdf_tool.py | 1244 | CODE | |
| LOW | apps/electron/resources/scripts/doc_diff.py | 86 | CODE | |
| LOW | apps/electron/resources/scripts/doc_diff.py | 125 | CODE | |
| LOW | apps/electron/resources/scripts/ical_tool.py | 123 | CODE | |
| LOW | apps/electron/resources/scripts/ical_tool.py | 176 | CODE | |
| LOW | apps/electron/resources/scripts/ical_tool.py | 286 | CODE | |
| LOW | apps/electron/resources/scripts/img_tool.py | 82 | CODE | |
| LOW | apps/electron/resources/scripts/img_tool.py | 214 | CODE | |
| LOW | apps/electron/resources/scripts/img_tool.py | 270 | CODE | |
| LOW | apps/electron/resources/scripts/pptx_tool.py | 44 | CODE | |
| LOW | apps/electron/resources/scripts/pptx_tool.py | 165 | CODE | |
| LOW | apps/electron/resources/scripts/pptx_tool.py | 251 | CODE | |
| LOW | apps/electron/resources/scripts/pptx_tool.py | 305 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | apps/electron/resources/scripts/docx_tool.py | 372 | except (ValueError, IndexError): | CODE |
| HIGH | apps/electron/resources/scripts/markitdown_cli.py | 116 | except Exception: | CODE |
| HIGH | apps/electron/resources/scripts/pdf_tool.py | 160 | except ValueError: | CODE |
| HIGH | apps/electron/resources/scripts/img_tool.py | 245 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …ectron/src/main/__tests__/browser-pane-manager.test.ts | 810 | const sendCallsAfterShow = instance.window.webContents.send.mock.calls.slice(sendsBeforeShow) | CODE |
| CRITICAL | …ectron/src/main/__tests__/browser-pane-manager.test.ts | 841 | const sendCallsAfterFinishLoad = instance.window.webContents.send.mock.calls.slice(sendsBeforeFinishLoad) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/messaging-gateway/src/pairing.test.ts | 70 | // Internal access is ugly but cheaper than a fake-clock scaffold. | COMMENT |
| MEDIUM | …ron/src/transport/__tests__/channel-map-parity.test.ts | 39 | // Compile-time guardrails: if these fail, CHANNEL_MAP and ElectronAPI drifted. | COMMENT |
| MEDIUM | apps/electron/src/shared/route-parser.ts | 209 | // Automations navigator - supports type filters (scheduled, event, agentic) | COMMENT |
| MEDIUM | apps/electron/src/shared/route-parser.ts | 215 | // Check for type filter: automations/scheduled, automations/event, automations/agentic | COMMENT |
| MEDIUM | apps/electron/src/shared/route-parser.ts | 328 | // Build base from filter (automations, automations/scheduled, automations/event, automations/agentic) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | apps/electron/resources/docs/sources.md | 390 | "BRAVE_API_KEY": "your-api-key" | CODE |
| HIGH | …lectron/src/renderer/playground/registry/turn-card.tsx | 1752 | Authorization: Bearer YOUR_API_KEY | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ectron/resources/scripts/tests/test_pptx_tool_smoke.py | 1 | CODE | |
| LOW | …electron/resources/scripts/tests/_tool_test_harness.py | 1 | CODE | |
| LOW | …ectron/resources/scripts/tests/test_docx_tool_smoke.py | 1 | CODE | |
| LOW | …lectron/resources/scripts/tests/test_doc_diff_smoke.py | 1 | CODE | |
| LOW | …ctron/resources/scripts/tests/test_markitdown_smoke.py | 1 | CODE | |
| LOW | …lectron/resources/scripts/tests/test_pdf_tool_smoke.py | 8 | CODE | |
| LOW | …lectron/resources/scripts/tests/test_pdf_tool_smoke.py | 15 | CODE | |
| LOW | …ectron/resources/scripts/tests/test_xlsx_tool_smoke.py | 1 | CODE | |
| LOW | …ectron/resources/scripts/tests/test_ical_tool_smoke.py | 1 | CODE | |
| LOW | …lectron/resources/scripts/tests/test_img_tool_smoke.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/shared/src/agent/mode-manager.ts | 1932 | // Check plans folder with robust path containment (prevents sibling-prefix bypasses) | COMMENT |
| MEDIUM | packages/shared/src/agent/mode-manager.ts | 1938 | // Check data folder with robust path containment | COMMENT |
| MEDIUM | apps/electron/src/renderer/App.tsx | 847 | // This is simpler and more robust than checking event types - we just ask | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/docker-smoke-test.sh | 53 | # Check if container is still running | COMMENT |
| LOW | scripts/install-app.sh | 39 | # Check if yq is available (optional, for YAML parsing) | COMMENT |
| LOW | scripts/install-app.sh | 88 | # Check if we're entering a new file entry | COMMENT |
| LOW | scripts/install-app.sh | 118 | # Check if we're entering a new file entry | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …lectron/src/renderer/playground/registry/turn-card.tsx | 1345 | elif model_type == "gradient_boosting": | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/install-server.sh | 4 | # Usage: | COMMENT |
| LOW⚡ | scripts/docker-smoke-test.sh | 8 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | apps/electron/resources/scripts/pdf_tool.py | 897 | # Create a single-page image PDF and merge into output | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ed/src/utils/__tests__/binary-detection-base64.test.ts | 26 | function processData(items: string[]): Map<string, number> { | CODE |
| LOW | packages/server-core/src/webui/node-adapter.ts | 33 | async function handleRequest( | CODE |