YC (S26) | AI that knows what you've seen, said, or heard. Records everything you do, say, hear 24/7, local, private, secure. Connect to OpenClaw, Hermes agent and 100+ apps
This report presents the forensic synthetic code analysis of screenpipe/screenpipe, a Rust project with 19,825 GitHub stars. SynthScan v2.0 examined 676,846 lines of code across 1968 source files, recording 2458 pattern matches distributed across 20 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2458 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …s/screenpipe-core/assets/extensions/context-pruning.ts | 59 | // ── single-message clamp (issue #3852) ──────────────────────────────── | COMMENT |
| MEDIUM | …s/screenpipe-core/assets/extensions/context-pruning.ts | 59 | // ── single-message clamp (issue #3852) ──────────────────────────────── | COMMENT |
| MEDIUM | …s/screenpipe-core/assets/extensions/context-pruning.ts | 165 | // ── 1. Feedback on oversized tool results ────────────────────────── | COMMENT |
| MEDIUM | …s/screenpipe-core/assets/extensions/context-pruning.ts | 223 | // ── 2 + 3. Prune old tool results AND clamp oversized messages ───── | COMMENT |
| MEDIUM⚡ | crates/screenpipe-core/assets/extensions/sub-agent.ts | 27 | // ── Constants ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/screenpipe-core/assets/extensions/sub-agent.ts | 33 | // ── State ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/screenpipe-core/assets/extensions/sub-agent.ts | 39 | // ── Cleanup ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-core/assets/extensions/sub-agent.ts | 52 | // ── Read pipe permissions for sub-agent inheritance ────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-core/assets/extensions/sub-agent.ts | 66 | // ── Sub-agent spawner ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-core/assets/extensions/sub-agent.ts | 126 | // ── Extension entry point ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-core/src/sync/mod.rs | 25 | //! ┌─────────────┴─────────────┐ | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/drm_detector.rs | 772 | // ── pre_capture_drm_check unit tests ────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/drm_detector.rs | 821 | // ── live integration tests ────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/drm_detector.rs | 979 | // ── check_and_update_drm_state tests ───────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/calendar_speaker_id.rs | 37 | // ── Pure decision logic ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/calendar_speaker_id.rs | 510 | // ── Background task ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/calendar_speaker_id.rs | 737 | // ── Tests ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/calendar_speaker_id.rs | 760 | // ── names_match tests ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/calendar_speaker_id.rs | 847 | // ── find_other_attendee tests ───────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/calendar_speaker_id.rs | 914 | // ── decide_speaker_names tests ──────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/calendar_speaker_id.rs | 1143 | // ── Rule 4: Process-of-elimination tests ────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/calendar_speaker_id.rs | 1243 | // ── deduplicate_speaker_by_name integration tests ───────────────────── | COMMENT |
| MEDIUM⚡ | crates/screenpipe-engine/src/focus_aware_controller.rs | 14 | //! ┌────────┐ lost focus ┌──────┐ cold_cutoff ┌──────┐ | COMMENT |
| MEDIUM⚡ | crates/screenpipe-engine/src/focus_aware_controller.rs | 15 | //! │ Active │────────────────►│ Warm │───────────────►│ Cold │ | COMMENT |
| MEDIUM⚡ | crates/screenpipe-engine/src/focus_aware_controller.rs | 16 | //! └────────┘ < warm_cutoff └──────┘ └──────┘ | COMMENT |
| MEDIUM⚡ | crates/screenpipe-engine/src/focus_aware_controller.rs | 19 | //! └──────────────┴───────────────────────────────────┘ | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/focus_aware_controller.rs | 310 | // ── Test helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/power/profile.rs | 69 | // ── Vision: event-driven capture ──────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/power/profile.rs | 81 | // ── Vision: adaptive FPS ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/power/profile.rs | 85 | // ── Audio ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/power/profile.rs | 98 | // ── Capture pause ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/power/profile.rs | 104 | // ── Video encoding ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/power/monitor.rs | 95 | // ─── macOS ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/power/monitor.rs | 203 | // ─── Windows ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/power/monitor.rs | 238 | // ─── Linux ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 24 | // ── Silent-wedge watchdog (#3939) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 24 | // ── Silent-wedge watchdog (#3939) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 59 | // ── Gone-silent / dead-loop watchdog ──────────────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 291 | // ── DRM pause handling ────────────────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 347 | // ── Schedule pause handling ───────────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 393 | // ── Normal monitor polling ────────────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 435 | // ── Capture stall watchdog (#3939) ────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 435 | // ── Capture stall watchdog (#3939) ────────────────────────────── | COMMENT |
| MEDIUM | …creenpipe-engine/src/vision_manager/monitor_watcher.rs | 774 | // ── vision_capture_silent (gone-silent / never-produced) ──────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 23 | // ── audio-gated scan cadence tests ───────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 65 | // ── ignoredMeetingApps filter tests ──────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 138 | // ── Webex messaging-vs-meeting discrimination (#4145/#4337) ────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 138 | // ── Webex messaging-vs-meeting discrimination (#4145/#4337) ────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 310 | // ── AttrNeeds tests ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 435 | // ── Profile tests ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 568 | // ── Signal matching tests ────────────────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 1068 | // ── State machine tests ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 1467 | // ── Edge case tests ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 1943 | // ── Multiple results tests ───────────────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 1961 | // ── Zoom menu bar signal tests ──────────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 2063 | // ── WindowTitle signal tests ────────────────────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 2193 | // ── Zoom false positive prevention tests ──────────────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 2311 | // ── Google Meet false positive prevention tests ───────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 2592 | // ── browser_title_matches_pattern + Google Meet on Windows ───────────────── | COMMENT |
| MEDIUM | …screenpipe-engine/src/meeting_watcher/ui_scan/tests.rs | 2952 | // ── role_matches cross-platform tolerance ────────────────────────────────── | COMMENT |
| 517 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lefthook.yml | 1 | # screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/assets/extensions/mcp-bridge.ts | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | …s/screenpipe-core/assets/extensions/context-pruning.ts | 41 | // to retry with narrower filters (smaller limit, shorter time range, | COMMENT |
| LOW | …ates/screenpipe-core/assets/extensions/orphan-guard.ts | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/assets/extensions/sub-agent.ts | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/src/strings.rs | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/src/video.rs | 21 | } | COMMENT |
| LOW | crates/screenpipe-core/src/permissions.rs | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/src/permissions.rs | 121 | )) | COMMENT |
| LOW | crates/screenpipe-core/src/window_pattern.rs | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/src/window_pattern.rs | 21 | //! ``` | COMMENT |
| LOW | crates/screenpipe-core/src/window_pattern.rs | 101 | COMMENT | |
| LOW | crates/screenpipe-core/src/thread_priority.rs | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/src/thread_priority.rs | 21 | //! - Never wrap sections that hold locks other Normal-priority threads block | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 21 | const PI_NAMESPACE_DIR: &str = "@earendil-works"; | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 241 | /// Only auto — if the gateway is down, nothing works anyway. | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 361 | /// Install or wipe the `screenpipe-team` enterprise-admin skill in | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 401 | Ok(()) | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 521 | Ok(()) | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 541 | "render-html-report", | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 821 | provider | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 1121 | /// requested model straight through to pi, which then sent it to the | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 1241 | /// (`["auto"]`) produced by [`fallback_cloud_models`] when the gateway's | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 2001 | } | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 2061 | COMMENT | |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 2681 | /// (not node). On both platforms we resolve the actual JS entry point and | COMMENT |
| LOW | crates/screenpipe-core/src/agents/pi.rs | 2821 | /// After the agent process has exited and been reaped, kill any lingering | COMMENT |
| LOW | crates/screenpipe-core/src/agents/bash_env.rs | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/src/agents/bash_env.rs | 21 | //! model effort, no prompt changes, no new system-prompt lines. | COMMENT |
| LOW | crates/screenpipe-core/src/agents/bash_env.rs | 41 | /// substrings in command arguments. If none match, `curl` runs unchanged. | COMMENT |
| LOW | crates/screenpipe-core/src/agents/bash_env.rs | 121 | COMMENT | |
| LOW | crates/screenpipe-core/src/agents/bash_env.rs | 201 | #[test] | COMMENT |
| LOW | crates/screenpipe-core/src/agents/mod.rs | 121 | _ => return false, | COMMENT |
| LOW | crates/screenpipe-core/src/agents/mod.rs | 201 | /// Returns `true` when the agent binary is installed and ready. | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/trajectory.rs | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/preset_fallback.rs | 1 | // screenpipe — AI that knows everything you've seen, said, or heard | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 41 | COMMENT | |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 61 | /// Event trigger configuration for a pipe. | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 81 | /// Plain-language custom triggers (future: matched via embedding similarity). | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 101 | /// | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 121 | pub kind: String, | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 141 | /// title: "Digital Clone Profile" | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 161 | #[derive(Debug, Clone, Serialize, Deserialize)] | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 181 | /// When set, overrides `model` and `provider` at runtime. | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 201 | /// ```yaml | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 221 | COMMENT | |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 241 | pub source_hash: Option<String>, | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 261 | COMMENT | |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 301 | /// monthly recurrences that cron can't. See `next_fire`/`should_run_config`. | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 381 | } | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 401 | /// days: "Mon-Fri" | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 561 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 1881 | /// Args: (pipe_name, execution_id, success, duration_secs, error_type) | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 2001 | /// Currently running pipe PIDs. | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 2021 | /// Optional persistence store (None in CLI mode). | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 2441 | result.push(status); | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 5521 | /// `pipe.md` without clobbering the user's other edits. `install_builtin_pipes` | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 5601 | COMMENT | |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 5721 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | crates/screenpipe-core/src/pipes/mod.rs | 6021 | Some(ParsedSchedule::Once(run_at)) => { | COMMENT |
| 1246 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …npipe-core/assets/extensions/screenpipe-permissions.ts | 150 | function hasContentTypeRestrictions(): boolean { | CODE |
| LOW | …s/screenpipe-core/assets/extensions/context-pruning.ts | 75 | export function resolveContextWindowTokens(ctx: any): number { | CODE |
| LOW | ee/desktop/lib/app-update-policy.ts | 42 | export function normalizeEnterpriseAppUpdatePolicy(value: unknown): EnterpriseAppUpdatePolicy { | CODE |
| LOW | ee/desktop/lib/app-update-policy.ts | 64 | export function describeEnterpriseUpdateMode(policy: EnterpriseAppUpdatePolicy): string { | CODE |
| LOW | ee/sdk/tauri/index.js | 59 | function createScreenpipeTauriClient(options = {}) { | CODE |
| LOW | ee/sdk/tauri/index.d.ts | 112 | export function createScreenpipeTauriClient( | CODE |
| LOW | ee/sdk/electron/preload.js | 21 | function createScreenpipeRendererApi(ipcRenderer, channels) { | CODE |
| LOW | ee/sdk/electron/preload.d.ts | 44 | export function createScreenpipeRendererApi( | CODE |
| LOW | scripts/memory-leak/test_leak_hunt.py | 18 | def test_default_search_pressure_never_includes_frames(self) -> None: | CODE |
| LOW | scripts/memory-leak/test_leak_hunt.py | 23 | def test_opt_in_frame_pressure_uses_small_limits(self) -> None: | CODE |
| LOW | scripts/memory-leak/test_leak_hunt.py | 49 | def test_recursive_descendants_are_included(self) -> None: | CODE |
| LOW | scripts/memory-leak/test_leak_hunt.py | 65 | def test_root_selection_uses_whole_tree_memory(self) -> None: | CODE |
| LOW | scripts/memory-leak/test_leak_hunt.py | 81 | def test_explicit_pid_selects_requested_tree(self) -> None: | CODE |
| LOW⚡ | scripts/memory-leak/leak_probe.py | 422 | def phase_search_all_q_no_frames(self, deadline: float) -> tuple[int, int, int]: | CODE |
| LOW⚡ | scripts/memory-leak/leak_probe.py | 432 | def phase_search_ocr_no_frames(self, deadline: float) -> tuple[int, int, int]: | CODE |
| LOW⚡ | scripts/memory-leak/leak_probe.py | 441 | def phase_search_audio_no_frames(self, deadline: float) -> tuple[int, int, int]: | CODE |
| LOW⚡ | scripts/memory-leak/leak_probe.py | 450 | def phase_search_recent_no_frames(self, deadline: float) -> tuple[int, int, int]: | CODE |
| LOW | scripts/memory-leak/leak_probe.py | 499 | def phase_timeline_live_today(self, deadline: float) -> tuple[int, int, int]: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 613 | def build_search_fanout_params(include_frame_images: bool) -> dict[str, Any]: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 782 | def scenario_memory_artifact_lists(client: ApiClient, state: SharedState, duration_sec: float, concurrency: int) -> None | CODE |
| LOW | …i-gateway/src/test/maas-nameless-toolcall.unit.test.ts | 16 | function noNamelessAssistantToolCalls(formatted: any[]) { | CODE |
| LOW | …es/ai-gateway/src/test/transcription-cost.unit.test.ts | 21 | function estimateTranscriptionCost(contentLength: number): { | CODE |
| LOW | packages/ai-gateway/src/providers/vertex-maas.ts | 65 | export async function parseVertexMaasJsonResponse(response: Response, model: string): Promise<any> { | CODE |
| LOW | packages/ai-gateway/src/providers/vertex-maas.ts | 124 | export function promoteReasoningToContent(result: any): void { | CODE |
| LOW | packages/ai-gateway/src/providers/anthropic.ts | 42 | function anthropicStopReasonToOpenAI(reason: unknown): string { | CODE |
| LOW | packages/ai-gateway/src/utils/model-policy.ts | 8 | export function isGooglePolicyBlockedModel(model: string | null | undefined): boolean { | CODE |
| LOW | packages/ai-gateway/src/utils/auth.ts | 143 | async function validateSubscriptionWithId(env: Env, token: string): Promise<{ isValid: boolean; userId?: string }> { | CODE |
| LOW | …ages/ai-gateway/src/handlers/realtime-transcription.ts | 39 | export async function handleRealtimeTranscriptionUpgrade( | CODE |
| LOW | …ages/ai-gateway/src/handlers/realtime-transcription.ts | 144 | async function connectDeepgramLiveWithRetry( | CODE |
| LOW | …ages/ai-gateway/src/handlers/realtime-transcription.ts | 181 | function isRetryableDeepgramLiveUpgradeStatus(status: number): boolean { | CODE |
| LOW | …ages/ai-gateway/src/handlers/realtime-transcription.ts | 236 | function translateLegacyClientMessage(data: string | ArrayBuffer | Blob): string | ArrayBuffer | null { | CODE |
| LOW | …ages/ai-gateway/src/handlers/realtime-transcription.ts | 258 | function translateLegacyDeepgramMessage( | CODE |
| LOW | packages/ai-gateway/src/handlers/transcription.ts | 72 | export function getTranscriptionLanguages(request: Request, fallback: string[] = []): string[] { | CODE |
| LOW | packages/ai-gateway/src/handlers/transcription.ts | 100 | async function handleDeepgramTranscription( | CODE |
| LOW | packages/ai-gateway/src/handlers/transcription.ts | 134 | async function handleGoogleTranscription(request: Request, env: Env): Promise<Response> { | CODE |
| LOW | packages/ai-gateway/src/services/transcription-ab.ts | 278 | function availableFallbackProviders(primary: TranscriptionProvider, env: Env): TranscriptionProvider[] { | CODE |
| LOW | packages/browser-extension/src/options.ts | 104 | async function openScreenpipeForApproval(): Promise<boolean> { | CODE |
| LOW | apps/screenpipe-app-tauri/app/layout.tsx | 36 | function isChatFocusedRecentSwitcherRoute( | CODE |
| LOW | …s/screenpipe-app-tauri/app/notification-panel/page.tsx | 71 | function notificationClipboardText(payload: NotificationPayload): string { | CODE |
| LOW | apps/screenpipe-app-tauri/components/pipe-store.tsx | 183 | function getPipeInstallDescription(pipe: { permissions?: PipePermissions; author_verified?: boolean | null }): string { | CODE |
| LOW | apps/screenpipe-app-tauri/components/pipe-store.tsx | 257 | function buildForkPipeDisplayLabel(pipeTitle: string): string { | CODE |
| LOW | apps/screenpipe-app-tauri/components/pipe-store.tsx | 262 | function buildPublishPipeDisplayLabel(pipeName: string): string { | CODE |
| LOW | …/screenpipe-app-tauri/components/notification-bell.tsx | 134 | function notificationClipboardText(entry: NotificationEntry): string { | CODE |
| LOW | …/screenpipe-app-tauri/components/notification-bell.tsx | 138 | function buildNotificationDisplayLabel(title: string): string { | CODE |
| LOW | apps/screenpipe-app-tauri/components/markdown.tsx | 12 | export function createScreenpipeUrlTransform(allowedHosts: readonly string[]) { | CODE |
| LOW | apps/screenpipe-app-tauri/components/markdown.tsx | 33 | export function screenpipeViewerPathFromHref(href: string): string | null { | CODE |
| LOW | apps/screenpipe-app-tauri/components/markdown.tsx | 64 | export function resolveLocalPathFromMarkdownUrl(url: string): string | null { | CODE |
| LOW | apps/screenpipe-app-tauri/components/markdown.tsx | 123 | function rewriteLocalMediaLinksForChat(text: string): string { | CODE |
| LOW | apps/screenpipe-app-tauri/components/markdown.tsx | 135 | export function rewriteLocalMarkdownLinksForChat(text: string): string { | CODE |
| LOW | apps/screenpipe-app-tauri/components/markdown.tsx | 160 | function normalizeMarkdownChildren(children: Options["children"]): Options["children"] { | CODE |
| LOW | apps/screenpipe-app-tauri/components/markdown.tsx | 167 | export function createMediaAwareMarkdownComponents( | CODE |
| LOW | …pp-tauri/components/post-install-connections-modal.tsx | 59 | export function PostInstallConnectionsModal({ | CODE |
| LOW | …eenpipe-app-tauri/components/selectable-text-layer.tsx | 48 | export function clearSelectableLayerSelection(): void { | CODE |
| LOW | apps/screenpipe-app-tauri/components/chat-sidebar.tsx | 1115 | export function CollapsedChatSidebarButton({ | CODE |
| LOW | …pipe-app-tauri/components/settings/account-section.tsx | 59 | function hasExistingStripeSubscriptionPlan(plan: string | null | undefined): boolean { | CODE |
| LOW | …pipe-app-tauri/components/settings/settings-search.tsx | 343 | export function useSettingsIndexDriftCheck( | CODE |
| LOW | …-app-tauri/components/settings/connections-section.tsx | 194 | async function detectInstalledConnectionIds(): Promise<Set<string>> { | CODE |
| LOW | …-app-tauri/components/settings/connections-section.tsx | 1783 | function ObsidianMemorySyncSubsection() { | CODE |
| LOW | …-app-tauri/components/settings/connections-section.tsx | 3464 | export function isMcpOAuthProviderTileConnected( | CODE |
| LOW | …ipe-app-tauri/components/settings/setting-previews.tsx | 263 | export function CloudMediaAnalysisPreview() { | CODE |
| 245 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/screenpipe-core/assets/pipes/automate-my-work/pipe.md | 28 | ## Step 1: Inventory existing coverage (one read-only API call) | COMMENT |
| LOW | …/screenpipe-core/assets/pipes/automate-my-work/pipe.md | 32 | ## Step 2: Understand the user's work (at most 6 API calls total, last 24h) | COMMENT |
| LOW | …/screenpipe-core/assets/pipes/automate-my-work/pipe.md | 43 | ## Step 3: Creation gate — complete before writing any pipe | COMMENT |
| LOW | …/screenpipe-core/assets/pipes/automate-my-work/pipe.md | 53 | ## Step 4: Decide whether to create 0–3 pipes | COMMENT |
| LOW | …/screenpipe-core/assets/pipes/automate-my-work/pipe.md | 64 | ## Step 5: Create only candidates marked CREATE | COMMENT |
| LOW | …screenpipe-core/assets/pipes/ai-prompt-journal/pipe.md | 28 | ## Step 1: Find AI tool frames | COMMENT |
| LOW | …screenpipe-core/assets/pipes/ai-prompt-journal/pipe.md | 71 | ## Step 2: Extract conversation text | COMMENT |
| LOW | …screenpipe-core/assets/pipes/ai-prompt-journal/pipe.md | 112 | ## Step 3: Identify user prompts vs AI responses | COMMENT |
| LOW | …screenpipe-core/assets/pipes/ai-prompt-journal/pipe.md | 139 | ## Step 4: Classify each prompt | COMMENT |
| LOW | …screenpipe-core/assets/pipes/ai-prompt-journal/pipe.md | 147 | ## Step 5: Save to journal | COMMENT |
| LOW | …screenpipe-core/assets/pipes/ai-prompt-journal/pipe.md | 188 | ## Step 6: Notification | COMMENT |
| LOW | crates/screenpipe-engine/src/snapshot_compaction.rs | 218 | // Step 1: Probe first valid JPEG to get dimensions for rawvideo input | COMMENT |
| LOW | crates/screenpipe-engine/src/snapshot_compaction.rs | 319 | // Step 2: Create video_chunk and update frame pointers in one transaction | COMMENT |
| LOW | crates/screenpipe-engine/src/snapshot_compaction.rs | 338 | // Step 3: Delete source JPEGs (safe — DB already points to MP4) | COMMENT |
| LOW | crates/screenpipe-engine/src/archive.rs | 872 | // Step 1: Upload media files (MP4s + snapshots) before metadata | COMMENT |
| LOW | crates/screenpipe-engine/src/archive.rs | 902 | // Step 2: Upload metadata in chunks: [watermark, cutoff] | COMMENT |
| LOW⚡ | crates/screenpipe-engine/src/bin/screenpipe-engine.rs | 1152 | // Step 1: prewarm-pending upgrade is universal. | COMMENT |
| LOW⚡ | crates/screenpipe-engine/src/bin/screenpipe-engine.rs | 1155 | // Step 2: auto-start only for Always mode AND only if the | COMMENT |
| LOW | …screenpipe-engine/src/meeting_watcher/ui_scan/macos.rs | 593 | // Step 1: find running meeting apps | COMMENT |
| LOW | …screenpipe-engine/src/meeting_watcher/ui_scan/macos.rs | 658 | // Step 2: scan for call controls | COMMENT |
| LOW | …reenpipe-engine/src/meeting_watcher/ui_scan/windows.rs | 724 | // Step 1: find running meeting apps (includes Zoom) | COMMENT |
| LOW | …reenpipe-engine/src/meeting_watcher/ui_scan/windows.rs | 735 | // Step 2: scan each found app for call controls | COMMENT |
| LOW | …reenpipe-engine/src/meeting_watcher/ui_scan/windows.rs | 754 | // Step 3: check specifically for Zoom processes | COMMENT |
| LOW⚡ | crates/screenpipe-db/tests/ui_events_batch_test.rs | 139 | // Step 1: row starts with frame_id = NULL. | COMMENT |
| LOW⚡ | crates/screenpipe-db/tests/ui_events_batch_test.rs | 148 | // Step 2: linker UPDATE populates it. | COMMENT |
| LOW | crates/screenpipe-db/tests/ui_events_batch_test.rs | 160 | // Step 3: a spurious duplicate UPDATE with a DIFFERENT frame_id | COMMENT |
| LOW⚡ | crates/screenpipe-audio/tests/onnx_model_test.rs | 159 | // Step 1: Initialize SileroVad (first ONNX model loaded) | COMMENT |
| LOW⚡ | crates/screenpipe-audio/tests/onnx_model_test.rs | 165 | // Step 2: Download/load embedding model | COMMENT |
| LOW⚡ | crates/screenpipe-audio/tests/onnx_model_test.rs | 172 | // Step 3: Download/load segmentation model | COMMENT |
| LOW⚡ | crates/screenpipe-screen/tests/url_timing_test.rs | 173 | // Step 1: SCK screenshot (instant) | COMMENT |
| LOW⚡ | crates/screenpipe-screen/tests/url_timing_test.rs | 176 | // Step 2: AppleScript round-trip (simulated ~107ms) | COMMENT |
| LOW⚡ | docs/EVENT_DRIVEN_CAPTURE_SPEC.md | 226 | ### Step 1: DB migration + snapshot write path | COMMENT |
| LOW⚡ | docs/EVENT_DRIVEN_CAPTURE_SPEC.md | 232 | ### Step 2: Paired capture function | COMMENT |
| LOW⚡ | docs/EVENT_DRIVEN_CAPTURE_SPEC.md | 237 | ### Step 3: Event trigger system | COMMENT |
| LOW⚡ | docs/EVENT_DRIVEN_CAPTURE_SPEC.md | 243 | ### Step 4: New capture loop | COMMENT |
| LOW⚡ | docs/EVENT_DRIVEN_CAPTURE_SPEC.md | 249 | ### Step 5: Search + timeline integration | COMMENT |
| LOW⚡ | docs/EVENT_DRIVEN_CAPTURE_SPEC.md | 254 | ### Step 6: Cleanup | COMMENT |
| LOW | scripts/update-openapi.sh | 35 | # Step 1: Fix oasgen quirk — path params need `required: true` per OpenAPI 3.0 | COMMENT |
| LOW | scripts/update-openapi.sh | 52 | # Step 2: Fix empty title/version | COMMENT |
| LOW | scripts/update-openapi.sh | 66 | # Step 3: Enrich with tags, summaries, descriptions (requires PyYAML) | COMMENT |
| LOW | packages/browser-extension/src/options.ts | 149 | // Step 1: liveness. | COMMENT |
| LOW | packages/browser-extension/src/options.ts | 162 | // Step 2: auth probe. | COMMENT |
| LOW | …enpipe-app-tauri/components/settings/usage-section.tsx | 151 | // Step 1: Load cache instantly | COMMENT |
| LOW | …enpipe-app-tauri/components/settings/usage-section.tsx | 164 | // Step 2: Incremental update | COMMENT |
| LOW | …creenpipe-app-tauri/components/settings/ai-presets.tsx | 724 | // Step 2: Auth check | COMMENT |
| LOW | …creenpipe-app-tauri/components/settings/ai-presets.tsx | 751 | // Step 3: Parse models (skip for openai-chatgpt when /v1/models returned 403) | COMMENT |
| LOW | …creenpipe-app-tauri/components/settings/ai-presets.tsx | 791 | // Step 4: Test chat completion (or Codex Responses API for ChatGPT OAuth) | COMMENT |
| LOW | …onents/settings/hooks/use-transcription-diagnostics.ts | 77 | // Step 1: Endpoint connectivity — try root URL or /v1/models | COMMENT |
| LOW | …onents/settings/hooks/use-transcription-diagnostics.ts | 160 | // Step 4: Test transcription with a short silent WAV | COMMENT |
| LOW | …/screenpipe-app-tauri/src-tauri/src/enterprise_sync.rs | 326 | // Step 1: ask /search for the most recent OCR frames. We request a | COMMENT |
| LOW | …/screenpipe-app-tauri/src-tauri/src/enterprise_sync.rs | 367 | // Step 2: fetch the frame's image bytes. A non-success status is | COMMENT |
| LOW | …/screenpipe-app-tauri/src-tauri/src/enterprise_sync.rs | 387 | // Step 3: decode → resize 320×180 → JPEG @ Q60 → base64. | COMMENT |
| LOW⚡ | apps/screenpipe-app-tauri/lib/summary-templates.ts | 70 | ## Step 1: Inventory existing coverage (one read-only API call) | COMMENT |
| LOW⚡ | apps/screenpipe-app-tauri/lib/summary-templates.ts | 74 | ## Step 2: Understand the user's work (at most 6 API calls total, last 24h) | COMMENT |
| LOW⚡ | apps/screenpipe-app-tauri/lib/summary-templates.ts | 85 | ## Step 3: Creation gate — complete before writing any pipe | COMMENT |
| LOW⚡ | apps/screenpipe-app-tauri/lib/summary-templates.ts | 95 | ## Step 4: Decide whether to create 0–3 pipes | COMMENT |
| LOW | apps/screenpipe-app-tauri/lib/summary-templates.ts | 106 | ## Step 5: Create only candidates marked CREATE | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/notification-toggle.ts | 115 | // Step 1: Remove the deny rule line | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/notification-toggle.ts | 118 | // Step 2: Remove empty "deny:" blocks | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/notification-toggle.ts | 121 | // Step 3: Remove empty "permissions:" blocks | COMMENT |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/screenpipe-engine/src/snapshot_compaction.rs | 218 | // Step 1: Probe first valid JPEG to get dimensions for rawvideo input | COMMENT |
| LOW | crates/screenpipe-engine/src/snapshot_compaction.rs | 319 | // Step 2: Create video_chunk and update frame pointers in one transaction | COMMENT |
| LOW | crates/screenpipe-engine/src/snapshot_compaction.rs | 338 | // Step 3: Delete source JPEGs (safe — DB already points to MP4) | COMMENT |
| LOW | crates/screenpipe-engine/src/archive.rs | 872 | // Step 1: Upload media files (MP4s + snapshots) before metadata | COMMENT |
| LOW | crates/screenpipe-engine/src/archive.rs | 902 | // Step 2: Upload metadata in chunks: [watermark, cutoff] | COMMENT |
| LOW⚡ | crates/screenpipe-engine/src/bin/screenpipe-engine.rs | 1152 | // Step 1: prewarm-pending upgrade is universal. | COMMENT |
| LOW⚡ | crates/screenpipe-engine/src/bin/screenpipe-engine.rs | 1155 | // Step 2: auto-start only for Always mode AND only if the | COMMENT |
| LOW | …screenpipe-engine/src/meeting_watcher/ui_scan/macos.rs | 593 | // Step 1: find running meeting apps | COMMENT |
| LOW | …screenpipe-engine/src/meeting_watcher/ui_scan/macos.rs | 658 | // Step 2: scan for call controls | COMMENT |
| LOW | …reenpipe-engine/src/meeting_watcher/ui_scan/windows.rs | 724 | // Step 1: find running meeting apps (includes Zoom) | COMMENT |
| LOW | …reenpipe-engine/src/meeting_watcher/ui_scan/windows.rs | 735 | // Step 2: scan each found app for call controls | COMMENT |
| LOW | …reenpipe-engine/src/meeting_watcher/ui_scan/windows.rs | 754 | // Step 3: check specifically for Zoom processes | COMMENT |
| LOW⚡ | crates/screenpipe-db/tests/ui_events_batch_test.rs | 139 | // Step 1: row starts with frame_id = NULL. | COMMENT |
| LOW⚡ | crates/screenpipe-db/tests/ui_events_batch_test.rs | 148 | // Step 2: linker UPDATE populates it. | COMMENT |
| LOW | crates/screenpipe-db/tests/ui_events_batch_test.rs | 160 | // Step 3: a spurious duplicate UPDATE with a DIFFERENT frame_id | COMMENT |
| LOW⚡ | crates/screenpipe-audio/tests/onnx_model_test.rs | 159 | // Step 1: Initialize SileroVad (first ONNX model loaded) | COMMENT |
| LOW⚡ | crates/screenpipe-audio/tests/onnx_model_test.rs | 165 | // Step 2: Download/load embedding model | COMMENT |
| LOW⚡ | crates/screenpipe-audio/tests/onnx_model_test.rs | 172 | // Step 3: Download/load segmentation model | COMMENT |
| LOW⚡ | crates/screenpipe-screen/tests/url_timing_test.rs | 173 | // Step 1: SCK screenshot (instant) | COMMENT |
| LOW⚡ | crates/screenpipe-screen/tests/url_timing_test.rs | 176 | // Step 2: AppleScript round-trip (simulated ~107ms) | COMMENT |
| LOW | scripts/update-openapi.sh | 35 | # Step 1: Fix oasgen quirk — path params need `required: true` per OpenAPI 3.0 | COMMENT |
| LOW | scripts/update-openapi.sh | 52 | # Step 2: Fix empty title/version | COMMENT |
| LOW | scripts/update-openapi.sh | 66 | # Step 3: Enrich with tags, summaries, descriptions (requires PyYAML) | COMMENT |
| LOW | packages/browser-extension/src/options.ts | 149 | // Step 1: liveness. | COMMENT |
| LOW | packages/browser-extension/src/options.ts | 162 | // Step 2: auth probe. | COMMENT |
| LOW | …enpipe-app-tauri/components/settings/usage-section.tsx | 151 | // Step 1: Load cache instantly | COMMENT |
| LOW | …enpipe-app-tauri/components/settings/usage-section.tsx | 164 | // Step 2: Incremental update | COMMENT |
| LOW | …creenpipe-app-tauri/components/settings/ai-presets.tsx | 724 | // Step 2: Auth check | COMMENT |
| LOW | …creenpipe-app-tauri/components/settings/ai-presets.tsx | 751 | // Step 3: Parse models (skip for openai-chatgpt when /v1/models returned 403) | COMMENT |
| LOW | …creenpipe-app-tauri/components/settings/ai-presets.tsx | 791 | // Step 4: Test chat completion (or Codex Responses API for ChatGPT OAuth) | COMMENT |
| LOW | …onents/settings/hooks/use-transcription-diagnostics.ts | 77 | // Step 1: Endpoint connectivity — try root URL or /v1/models | COMMENT |
| LOW | …onents/settings/hooks/use-transcription-diagnostics.ts | 160 | // Step 4: Test transcription with a short silent WAV | COMMENT |
| LOW | …/screenpipe-app-tauri/src-tauri/src/enterprise_sync.rs | 326 | // Step 1: ask /search for the most recent OCR frames. We request a | COMMENT |
| LOW | …/screenpipe-app-tauri/src-tauri/src/enterprise_sync.rs | 367 | // Step 2: fetch the frame's image bytes. A non-success status is | COMMENT |
| LOW | …/screenpipe-app-tauri/src-tauri/src/enterprise_sync.rs | 387 | // Step 3: decode → resize 320×180 → JPEG @ Q60 → base64. | COMMENT |
| LOW⚡ | apps/screenpipe-app-tauri/lib/summary-templates.ts | 70 | ## Step 1: Inventory existing coverage (one read-only API call) | COMMENT |
| LOW⚡ | apps/screenpipe-app-tauri/lib/summary-templates.ts | 74 | ## Step 2: Understand the user's work (at most 6 API calls total, last 24h) | COMMENT |
| LOW⚡ | apps/screenpipe-app-tauri/lib/summary-templates.ts | 85 | ## Step 3: Creation gate — complete before writing any pipe | COMMENT |
| LOW⚡ | apps/screenpipe-app-tauri/lib/summary-templates.ts | 95 | ## Step 4: Decide whether to create 0–3 pipes | COMMENT |
| LOW | apps/screenpipe-app-tauri/lib/summary-templates.ts | 106 | ## Step 5: Create only candidates marked CREATE | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/notification-toggle.ts | 115 | // Step 1: Remove the deny rule line | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/notification-toggle.ts | 118 | // Step 2: Remove empty "deny:" blocks | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/notification-toggle.ts | 121 | // Step 3: Remove empty "permissions:" blocks | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/chat-test-body.test.ts | 136 | // Step 1: send with max_tokens | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/chat-test-body.test.ts | 140 | // Step 2: endpoint rejects | COMMENT |
| LOW⚡ | …/screenpipe-app-tauri/lib/utils/chat-test-body.test.ts | 144 | // Step 3: retry with max_completion_tokens | COMMENT |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 189 | // Step 1: admin creates team and key | COMMENT |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 192 | // Step 2: admin pushes config (encrypted) | COMMENT |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 200 | // Step 3: admin wraps key with passphrase | COMMENT |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 204 | // Step 4: admin uploads wrapped blob to server (POST /api/team/key-claim) | COMMENT |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 208 | // Step 5: invite link contains NO key material | COMMENT |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 216 | // Step 6: member fetches wrapped blob from server (GET /api/team/key-claim/:token) | COMMENT |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 219 | // Step 7: member unwraps with passphrase (shared out-of-band) | COMMENT |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 227 | // Step 8: member decrypts configs | COMMENT |
| LOW | …/screenpipe-app-tauri/lib/hooks/use-frame-text-data.ts | 150 | // Step 1: GET — check if text position data already exists in DB | COMMENT |
| LOW | …/screenpipe-app-tauri/lib/hooks/use-frame-text-data.ts | 176 | // Step 2: No bounding boxes — schedule on-demand OCR after dwell delay. | COMMENT |
| LOW⚡ | …auri/lib/hooks/__tests__/timeline-reconnection.test.ts | 330 | // Step 1: WebSocket disconnects | COMMENT |
| LOW⚡ | …auri/lib/hooks/__tests__/timeline-reconnection.test.ts | 335 | // Step 2: Reconnection initiated - should reset state | COMMENT |
| LOW⚡ | …auri/lib/hooks/__tests__/timeline-reconnection.test.ts | 345 | // Step 3: WebSocket connects | COMMENT |
| LOW⚡ | …auri/lib/hooks/__tests__/timeline-reconnection.test.ts | 350 | // Step 4: Request sent (should work because sentRequests is empty) | COMMENT |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/screenpipe-engine/src/connections_api.rs | 3798 | creds.insert("email".into(), json!("user@example.com")); | CODE |
| LOW | crates/screenpipe-engine/src/connections_api.rs | 3802 | assert_eq!(user, "user@example.com"); | CODE |
| LOW | crates/screenpipe-engine/src/connections_api.rs | 3832 | creds.insert("email".into(), json!("user@example.com")); | CODE |
| LOW | …ates/screenpipe-engine/src/browser_scripts/snapshot.js | 119 | return el.getAttribute('placeholder') || labelText(el) || el.getAttribute('name') || ty || 'input'; | CODE |
| LOW | …ates/screenpipe-engine/src/browser_scripts/snapshot.js | 121 | if (formTags.has(tag)) return el.getAttribute('placeholder') || labelText(el) || el.getAttribute('name') || tag; | CODE |
| LOW | crates/screenpipe-engine/src/routes/frames.rs | 560 | "placeholder", | CODE |
| LOW | crates/screenpipe-db/benches/new_db_benchmark.rs | 26 | ("Long", "This is a long piece of text that simulates a more realistic OCR result. It contains multiple paragrap | CODE |
| LOW | crates/screenpipe-db/benches/new_db_benchmark.rs | 26 | ("Long", "This is a long piece of text that simulates a more realistic OCR result. It contains multiple paragrap | CODE |
| LOW | crates/screenpipe-db/src/db/frames.rs | 540 | props.insert("placeholder".into(), serde_json::Value::String(v.clone())); | CODE |
| LOW | crates/screenpipe-connect/src/oauth.rs | 1471 | let got = load_oauth_json(Some(&store), id, Some("user@example.com")).await; | CODE |
| LOW | crates/screenpipe-redact/src/tree_json.rs | 71 | "placeholder", | CODE |
| LOW | crates/screenpipe-redact/src/tree_json.rs | 402 | "placeholder":"{s}", | CODE |
| LOW | crates/screenpipe-redact/src/adapters/regex.rs | 2261 | &"lorem ipsum dolor sit amet ".repeat(40), | CODE |
| LOW | crates/screenpipe-redact/src/adapters/regex.rs | 2261 | &"lorem ipsum dolor sit amet ".repeat(40), | CODE |
| LOW | crates/screenpipe-redact/src/worker/columns.rs | 235 | "placeholder", | CODE |
| LOW | crates/screenpipe-capture/src/paired_capture.rs | 1249 | let json = r#"[{"text":"user@example.com","x":"0","y":"0"},{"text":"safe text","x":"1","y":"1"},{"text":"key: sk | CODE |
| LOW | crates/screenpipe-capture/src/paired_capture.rs | 1252 | !result.contains("user@example.com"), | CODE |
| LOW | ee/sdk/examples/electron-app/renderer.js | 16 | const placeholder = $('placeholder'); | CODE |
| LOW | ee/sdk/examples/electron-app/index.html | 124 | <span class="placeholder" id="placeholder">preview appears here</span> | CODE |
| LOW | packages/ai-gateway/src/test/openai-models.unit.test.ts | 72 | const ids = await listedModelIds({ OPENAI_API_KEY: 'placeholder' }); | CODE |
| LOW | packages/ai-gateway/src/test/openai-models.unit.test.ts | 152 | createProvider('gpt-5.5', env({ OPENAI_API_KEY: 'placeholder' })); | CODE |
| LOW⚡ | packages/ai-gateway/src/test/flex-tier.unit.test.ts | 87 | provider.vertexProvider.getAccessToken = async () => 'fake-token'; | CODE |
| LOW⚡ | packages/ai-gateway/src/test/flex-tier.unit.test.ts | 91 | expect(headers['Authorization']).toBe('Bearer fake-token'); | CODE |
| LOW⚡ | packages/ai-gateway/src/test/flex-tier.unit.test.ts | 96 | provider.vertexProvider.getAccessToken = async () => 'fake-token'; | CODE |
| LOW | packages/ai-gateway/src/providers/index.ts | 80 | return !['placeholder', 'changeme', 'change-me', 'todo', 'none', 'null', 'undefined'].includes(lower); | CODE |
| LOW | packages/ai-gateway/src/utils/auth.test.ts | 219 | email: 'test@test.com', | CODE |
| LOW | packages/ai-gateway/src/utils/auth.test.ts | 231 | email: 'test@test.com', | CODE |
| LOW | packages/ai-gateway/src/utils/auth.test.ts | 242 | email: 'test@test.com', | CODE |
| LOW | packages/ai-gateway/src/utils/auth.test.ts | 246 | expect(resolvedUserId).toBe('test@test.com'); | CODE |
| LOW | packages/ai-gateway/src/handlers/models.ts | 58 | return !['placeholder', 'changeme', 'change-me', 'todo', 'none', 'null', 'undefined'].includes(lower); | CODE |
| LOW | packages/ai-gateway/src/services/usage-tracker.test.ts | 406 | email: 'test@test.com', | CODE |
| LOW | apps/screenpipe-app-tauri/src-tauri/src/auth_token.rs | 246 | || (crate::config::is_e2e_mode() && value.starts_with("e2e-fake-token-")) | CODE |
| LOW | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 37 | name: "Acme Corp", | CODE |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 49 | body: JSON.stringify({ name: "Acme Corp" }), | CODE |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 55 | expect(JSON.parse(req.options.body)).toEqual({ name: "Acme Corp" }); | CODE |
| LOW⚡ | …pipe-app-tauri/lib/__tests__/team-api-contract.test.ts | 64 | name: "Acme Corp", | CODE |
| LOW | …-app-tauri/e2e/specs/meeting-note-bottom-click.spec.ts | 37 | lines.push(`note body line ${i} — lorem ipsum dolor sit amet`); | CODE |
| LOW | …-app-tauri/e2e/specs/meeting-note-bottom-click.spec.ts | 37 | lines.push(`note body line ${i} — lorem ipsum dolor sit amet`); | CODE |
| LOW | …-tauri/e2e/specs/zz-account-stale-subscription.spec.ts | 55 | const FAKE_TOKEN = "e2e-fake-token-stale-subscription"; | CODE |
| LOW | …pe-app-tauri/e2e/specs/zz-app-entitlement-gate.spec.ts | 27 | const FAKE_DENIED_TOKEN = 'e2e-fake-token-cloud-sub-app-denied'; | CODE |
| LOW | …app-tauri/e2e/specs/zz-audio-fallback-reverify.spec.ts | 44 | const FAKE_TOKEN = "e2e-fake-token-reverify"; | CODE |
| LOW | …enpipe-app-tauri/e2e/specs/zz-logout-resurrect.spec.ts | 51 | const FAKE_TOKEN = "e2e-fake-token-logout-resurrect"; | CODE |
| LOW | …uri/e2e/specs/zz-account-basic-upgrade-billing.spec.ts | 19 | const FAKE_TOKEN = "e2e-fake-token-basic-upgrade"; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/screenpipe-engine/src/resource_monitor.rs | 117 | /// Growth the *fit* predicts over the window — robust to endpoint noise, | COMMENT |
| MEDIUM | crates/screenpipe-engine/src/focus_tracker/darwin.rs | 19 | //! is robust, permission-free, and correct in the common case — users glance | COMMENT |
| MEDIUM | …eenpipe-engine/src/meeting_watcher/ui_scan/pipeline.rs | 100 | // (30s) provides enough buffer. A more robust approach would be to store the PID | COMMENT |
| MEDIUM | …eenpipe-engine/src/meeting_watcher/ui_scan/pipeline.rs | 103 | // TODO: Store PID in MeetingState for robust browser tab-switch handling. | COMMENT |
| MEDIUM | …ates/screenpipe-db/tests/output_audio_liveness_test.rs | 200 | // the test robust against sub-second skew between Rust's Utc::now() at | COMMENT |
| MEDIUM | crates/screenpipe-screen/src/frame_comparison.rs | 64 | /// Histogram is faster and robust for detecting significant changes. | COMMENT |
| MEDIUM | crates/screenpipe-redact/src/image/frame_redactor.rs | 9 | //! for an OCR-robust outcome — re-running OCR on the redacted output | COMMENT |
| MEDIUM | packages/ai-gateway/src/providers/openai.ts | 114 | // blowing up — much more robust than chasing the prefix allowlist as | COMMENT |
| MEDIUM | .github/workflows/sync-skills.yml | 60 | # PAT pattern adds maintenance pain (PATs expire). A PR is robust | COMMENT |
| MEDIUM | apps/screenpipe-app-tauri/src-tauri/Cargo.toml | 336 | # Maximum-speed local builds for updater e2e harness — no optimization, fastest compile. | COMMENT |
| MEDIUM | …ps/screenpipe-app-tauri/src-tauri/src/owned_browser.rs | 731 | // into the panel — a seamless handoff. | COMMENT |
| MEDIUM | …ps/screenpipe-app-tauri/lib/owned-browser-ownership.ts | 85 | // (robust to a lagging `conversationId` state or a non-matching spawn id). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/screenpipe-engine/src/routes/artifacts.rs | 815 | /// GET /artifacts — unified listing of AI-generated artifacts. | COMMENT |
| HIGH | apps/screenpipe-app-tauri/src-tauri/src/suggestions.rs | 1665 | /// Store AI-generated tags on recent frames using the existing tags + vision_tags tables. | COMMENT |
| HIGH | apps/screenpipe-app-tauri/lib/chat-storage.ts | 399 | // (each window generated its own). One copy usually wins the AI-generated | COMMENT |
| HIGH | …tauri/lib/hooks/__tests__/timeline-store-logic.test.ts | 288 | // Mark as requested | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ee/sdk/Cargo.toml | 39 | # All orchestration lives here. The Tauri plugin | COMMENT |
| MEDIUM | ee/sdk/tauri/rust/Cargo.toml | 18 | # The pure-Rust recorder orchestration. Calling it in-process is what | COMMENT |
| MEDIUM | .claude/skills/screenpipe-api/SKILL.md | 417 | # Mark speaker as hallucination (false detection) | COMMENT |
| MEDIUM | docs/VISION_PIPELINE_SPEC.md | 89 | ### 3.2 Target Pipeline (decoupled, event-driven) | COMMENT |
| MEDIUM | …ps/screenpipe-app-tauri/components/standalone-chat.tsx | 1233 | // chat with an agentic loop (≥2 assistant messages with citations between | COMMENT |
| MEDIUM | …ents/chat/standalone/hooks/use-pi-foreground-events.ts | 821 | // tiers at a few dozen requests/minute; a single agentic run can trip | COMMENT |
| MEDIUM | apps/screenpipe-app-tauri/lib/source-citations.ts | 58 | // pipe-run chats where the whole transcript is one agentic loop and showing | COMMENT |
| MEDIUM | apps/screenpipe-app-tauri/lib/source-citations.ts | 96 | // assistant of that turn — that's the agentic-loop pattern (Pi looping | COMMENT |
| MEDIUM | …npipe-app-tauri/lib/__tests__/source-citations.test.ts | 593 | readState, // repeated step in the agentic loop | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/screenpipe-screen/tests/custom_ocr_test.rs | 50 | except Exception as e: | CODE |
| LOW | scripts/memory-leak/leak_probe.py | 335 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_probe.py | 365 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_probe.py | 382 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 104 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 150 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 159 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 259 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 269 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 285 | except Exception as exc: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 542 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 545 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 556 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 578 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 694 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 753 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 870 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 875 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 1010 | except Exception: | CODE |
| LOW | scripts/memory-leak/leak_hunt.py | 1105 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/screenpipe-screen/tests/custom_ocr_test.rs | 11 | # Create a simple FastAPI server (app.py) that uses EasyOCR to process images: | COMMENT |
| MEDIUM | .devcontainer/scripts/postCreateCommand.sh | 3 | # Define the alias | COMMENT |
| MEDIUM | .github/workflows/release-enterprise.yml | 870 | # Create an unsigned component package first so the package receipt | COMMENT |
| MEDIUM | .github/workflows/release-cli.yml | 560 | # Create a symlink so the linker can find it. | COMMENT |
| MEDIUM | .github/workflows/release-app.yml | 441 | # Create a symlink so the linker finds it, and set OPENBLAS_PATH with lib/ subdir. | COMMENT |
| MEDIUM | .github/scripts/install_dependencies.sh | 6 | # Create a symlink so the linker finds it, and set OPENBLAS_PATH with lib/ subdir. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/screenpipe-engine/src/server.rs | 1263 | r#"{"error":"unauthorized: API access requires authentication. Pass `Authorizati | CODE |
| HIGH | …pe-app-tauri/components/rewind/ai-presets-selector.tsx | 694 | placeholder="your-api-key" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/enrich-openapi.py | 497 | CODE | |
| LOW | scripts/memory-leak/leak_probe.py | 147 | CODE | |
| LOW | scripts/memory-leak/leak_probe.py | 370 | CODE | |
| LOW | scripts/memory-leak/leak_hunt.py | 371 | CODE | |
| LOW | scripts/memory-leak/leak_hunt.py | 564 | CODE | |
| LOW | scripts/memory-leak/leak_hunt.py | 686 | CODE | |
| LOW | scripts/memory-leak/leak_hunt.py | 745 | CODE | |
| LOW | scripts/memory-leak/leak_hunt.py | 825 | CODE | |
| LOW | scripts/memory-leak/leak_hunt.py | 1088 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/release-app.yml | 1120 | # Check if it's a transient signing/bundling failure (worth retrying) | COMMENT |
| LOW | .github/scripts/purge_crabnebula.sh | 8 | # Check if the CN_API_KEY is set or throw an error | COMMENT |
| LOW | .github/scripts/purge_crabnebula.sh | 23 | # Check if current_version is empty | COMMENT |
| LOW | .github/scripts/purge_crabnebula.sh | 34 | # Check if we got valid numbers | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/screenpipe-audio/tests/accuracy_test.rs | 39 | r#"bro - got some good stuff from screenpipe here's the lowdown on your day, you productivity ninja: absolut | CODE |
| LOW | crates/screenpipe-audio/examples/bench_quality2.rs | 439 | reference: r#"bro - got some good stuff from screenpipe here's the lowdown on your day, you productivity nin | CODE |
| LOW | crates/screenpipe-audio/examples/bench_quality.rs | 255 | reference: r#"bro - got some good stuff from screenpipe here's the lowdown on your day, you productivity nin | CODE |
| MEDIUM | …ipe-app-tauri/src-tauri/gen/schemas/acl-manifests.json | 1 | {"autostart":{"default_permission":{"identifier":"default","description":"This permission set configures if your\napplic | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/memory-leak/leak_probe.py | 16 | CODE | |
| LOW | scripts/memory-leak/leak_probe.py | 30 | CODE | |
| LOW | scripts/memory-leak/leak_hunt.py | 13 | CODE | |
| LOW | scripts/memory-leak/leak_hunt.py | 20 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/ai-gateway/test-vertex-local.sh | 4 | # Usage: | COMMENT |
| LOW | packages/ai-gateway/scripts/deploy.sh | 16 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/ai-gateway/src/handlers/voice-ws.ts | 1 | // TODO: implement | COMMENT |
| LOW | apps/screenpipe-app-tauri/src-tauri/src/tray.rs | 783 | // TODO: implement safely once we can reliably identify our NSStatusItem. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/memory-leak/leak_hunt.py | 51 | def set_scenario(self, name: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/ai-gateway/src/index.ts | 29 | export async function handleRequest(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> { | CODE |