Automate browser based workflows with AI
This report presents the forensic synthetic code analysis of Skyvern-AI/skyvern, a Python project with 22,222 GitHub stars. SynthScan v2.0 examined 974,004 lines of code across 3890 source files, recording 23292 pattern matches distributed across 26 syntactic categories. The overall adjusted score of 25.4 places this repository in the Moderate 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 23292 distinct pattern matches across 26 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 |
|---|---|---|---|---|
| LOW | skyvern-frontend/src/util/timeFormat.ts | 85 | function localTimeFormatWithShortDate(time: string): string { | CODE |
| LOW | skyvern-frontend/src/util/googleSheetsUrl.ts | 11 | export function extractSpreadsheetIdFromUrl(input: string): string | null { | CODE |
| LOW | skyvern-frontend/src/util/dashboardLoadStateActive.ts | 2 | function isDashboardLoadStateActive({ | CODE |
| LOW | skyvern-frontend/src/util/geoData.ts | 153 | export function geoTargetToProxyLocationInput( | CODE |
| LOW | skyvern-frontend/src/util/lazyWithReload.ts | 75 | export function installChunkLoadErrorHandler(): void { | CODE |
| LOW | skyvern-frontend/src/util/tson.ts | 112 | function replaceBracesOutsideQuotes(input: string): string { | CODE |
| LOW | skyvern-frontend/src/util/translationCrashGuard.ts | 3 | export function installTranslationCrashGuard(): void { | CODE |
| LOW | skyvern-frontend/src/util/lazyWithReload.test.ts | 10 | function dispatchUnhandledRejection(reason: unknown): void { | CODE |
| LOW | skyvern-frontend/src/util/caretPosition.ts | 47 | function getTextareaCaretCoordinates( | CODE |
| LOW | skyvern-frontend/src/util/recordBrowserTelemetry.ts | 17 | export function markRecordBrowserProcessed(blockCount: number): void { | CODE |
| LOW | skyvern-frontend/src/util/recordBrowserTelemetry.ts | 27 | export function captureRecordBrowserUndoAfterRecordingIfRecent( | CODE |
| LOW | …ontend/src/util/onboarding/credentialSetupTelemetry.ts | 23 | function credentialSetupCtaClicked( | CODE |
| LOW | skyvern-frontend/src/util/onboarding/rolloutGating.ts | 26 | function isFirstFailedRunRecoveryEligible(args: { | CODE |
| LOW | …ntend/src/components/ParameterAutocompleteDropdown.tsx | 37 | function ParameterAutocompleteDropdown({ | CODE |
| LOW | …frontend/src/components/WorkflowBlockInputTextarea.tsx | 31 | function WorkflowBlockInputTextarea(props: Props) { | CODE |
| LOW | …rc/components/AzureClientSecretCredentialTokenForm.tsx | 39 | export function AzureClientSecretCredentialTokenForm({ | CODE |
| LOW | …vern-frontend/src/components/browserStreamClipboard.ts | 43 | async function handleVncClipboardPasteShortcut( | CODE |
| LOW | …d/src/components/CustomCredentialServiceConfigForm.tsx | 42 | export function CustomCredentialServiceConfigForm({ onSuccess }: Props = {}) { | CODE |
| LOW | …-frontend/src/components/TriggerTypeFilterDropdown.tsx | 40 | function TriggerTypeFilterDropdown({ values, onChange }: Props) { | CODE |
| LOW | skyvern-frontend/src/components/SelectionCheckbox.tsx | 66 | function SelectionHeaderCheckboxCell({ | CODE |
| LOW | …frontend/src/components/GlobalNotificationListener.tsx | 36 | function GlobalNotificationListener() { | CODE |
| LOW | …rontend/src/components/GoogleOAuthClientConfigForm.tsx | 44 | export function GoogleOAuthClientConfigForm({ onSuccess }: Props = {}) { | CODE |
| LOW | …/DataSchemaInputGroup/WorkflowDataSchemaInputGroup.tsx | 41 | function WorkflowDataSchemaInputGroup({ | CODE |
| LOW | …rn-frontend/src/hooks/useShouldNotifyWhenClosingTab.ts | 3 | function useShouldNotifyWhenClosingTab(shouldNotify: boolean) { | CODE |
| LOW | …rn-frontend/src/hooks/useClearOrganizationAuthToken.ts | 15 | export function useClearOrganizationAuthToken({ | CODE |
| LOW | …yvern-frontend/src/hooks/useRecordingElapsedSeconds.ts | 11 | export function useRecordingElapsedSeconds(): number { | CODE |
| LOW | …frontend/src/hooks/useCustomCredentialServiceConfig.ts | 14 | export function useCustomCredentialServiceConfig() { | CODE |
| LOW | …rn-frontend/src/hooks/useAzureClientCredentialToken.ts | 12 | export function useAzureClientCredentialToken() { | CODE |
| LOW | …yvern-frontend/src/hooks/useLocalStorageFormDefault.ts | 11 | export function useLocalStorageFormDefault( | CODE |
| LOW | skyvern-frontend/src/hooks/useSpeechToText.ts | 52 | function getSpeechRecognitionConstructor(): | CODE |
| LOW | skyvern-frontend/src/hooks/useSpeechToText.ts | 61 | export function isSpeechRecognitionSupported(): boolean { | CODE |
| LOW | skyvern-frontend/src/hooks/useSpeechToText.ts | 166 | function microphonePermissionErrorMessage(error: unknown): string { | CODE |
| LOW | skyvern-frontend/src/hooks/useSpeechToText.ts | 178 | async function requestMicrophonePermission(): Promise<void> { | CODE |
| LOW | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 23 | function safePostCredentialsInvalidate( | CODE |
| LOW | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 36 | function broadcastCredentialsChanged() { | CODE |
| LOW | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 40 | export function normalizeMicrosoftOAuthScopes( | CODE |
| LOW⚡ | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 55 | export function normalizeMicrosoftScopeSegment(scope: string): string { | CODE |
| LOW⚡ | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 60 | export function getMicrosoftOAuthCredentialScopesGranted( | CODE |
| LOW⚡ | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 70 | export function getMicrosoftOAuthCredentialScopesRequested( | CODE |
| LOW⚡ | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 76 | export function isMicrosoftOAuthCredentialActive( | CODE |
| LOW⚡ | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 85 | export function hasMicrosoftOAuthCredentialScopes( | CODE |
| LOW | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 99 | export function matchesMicrosoftOAuthIntegrationScopes( | CODE |
| LOW | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 113 | export function getDefaultMicrosoftOAuthCredentialId( | CODE |
| LOW | …ern-frontend/src/hooks/useMicrosoftOAuthCredentials.ts | 128 | export function useMicrosoftOAuthCredentials({ | CODE |
| LOW | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 28 | export function safePostCredentialsInvalidate( | CODE |
| LOW | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 41 | function broadcastCredentialsChanged() { | CODE |
| LOW | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 45 | export function normalizeGoogleOAuthScopes( | CODE |
| LOW⚡ | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 60 | export function getGoogleOAuthCredentialScopesGranted( | CODE |
| LOW⚡ | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 70 | export function getGoogleOAuthCredentialScopesRequested( | CODE |
| LOW⚡ | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 76 | export function isGoogleOAuthCredentialActive( | CODE |
| LOW⚡ | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 85 | export function hasGoogleOAuthCredentialScopes( | CODE |
| LOW⚡ | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 93 | export function matchesGoogleOAuthIntegrationScopes( | CODE |
| LOW | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 107 | export function getDefaultGoogleOAuthCredentialId( | CODE |
| LOW | skyvern-frontend/src/hooks/useGoogleOAuthCredentials.ts | 122 | export function useGoogleOAuthCredentials({ | CODE |
| LOW | skyvern-frontend/src/hooks/useAnalyticsDashboardFlag.ts | 7 | export function useAnalyticsDashboardFlag(): boolean | undefined { | CODE |
| LOW | skyvern-frontend/src/hooks/useRuntimeConfig.ts | 16 | function normalizeBrowserStreamingMode( | CODE |
| LOW | skyvern-frontend/src/hooks/useWorkflowsDirectoryTree.ts | 8 | export function useWorkflowsDirectoryTree(): boolean { | CODE |
| LOW | …yvern-frontend/src/hooks/useCreateGoogleSpreadsheet.ts | 9 | export function useCreateGoogleSpreadsheet() { | CODE |
| LOW | skyvern-frontend/src/api/QueryClient.ts | 7 | function retryTransientNetworkFailures( | CODE |
| LOW | skyvern-frontend/src/api/AxiosClient.ts | 94 | function removeHeaderForAllClients(header: string) { | CODE |
| 15854 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | entrypoint-skyvern.sh | 5 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | entrypoint-skyvern.sh | 8 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker-compose.yml | 50 | # ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker-compose.yml | 61 | # ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker-compose.yml | 84 | # ========================= | COMMENT |
| MEDIUM | docker-compose.yml | 86 | # ========================= | COMMENT |
| MEDIUM | k8s/charts/skyvern-ui/values.yaml | 13 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | k8s/charts/skyvern-ui/values.yaml | 21 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 112 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 114 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 257 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 259 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 301 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 303 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 360 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 362 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 372 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 374 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 386 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 388 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 441 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 443 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 453 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 455 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 475 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 477 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 532 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 534 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_copilot_non_retriable_nav.py | 58 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_copilot_non_retriable_nav.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_auto_completion_location.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_auto_completion_location.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_auto_completion_location.py | 98 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_auto_completion_location.py | 100 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_auto_completion_location.py | 367 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_auto_completion_location.py | 369 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_auto_completion_location.py | 423 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_auto_completion_location.py | 425 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 72 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 148 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 150 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 292 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 294 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 513 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 515 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_cached_artifact_bundling.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_cached_artifact_bundling.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_cached_artifact_bundling.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_cached_artifact_bundling.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_cached_artifact_bundling.py | 299 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_cached_artifact_bundling.py | 301 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_cached_artifact_bundling.py | 431 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_cached_artifact_bundling.py | 433 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_watchdog.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_watchdog.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_watchdog.py | 354 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_watchdog.py | 360 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_watchdog.py | 448 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_watchdog.py | 453 | # --------------------------------------------------------------------------- | COMMENT |
| 708 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_copilot_non_retriable_nav.py | 10 | CODE | |
| LOW | …_real_browser_manager_publisher_self_stops_on_close.py | 7 | CODE | |
| LOW | …sts/unit/test_workflow_definition_version_inference.py | 9 | CODE | |
| LOW | tests/unit/test_verifier_goal_unwrap.py | 9 | CODE | |
| LOW | tests/unit/test_copilot_token_accounting.py | 3 | CODE | |
| LOW | tests/unit/test_normal_select_deterministic.py | 1 | CODE | |
| LOW | tests/unit/test_webhook_delivery_retry.py | 3 | CODE | |
| LOW | tests/unit/test_quickstart_server_extra.py | 1 | CODE | |
| LOW | tests/unit/test_masked_prompt.py | 1 | CODE | |
| LOW | tests/unit/test_copilot_scout_act_observe.py | 6 | CODE | |
| LOW | tests/unit/test_auto_completion_location.py | 7 | CODE | |
| LOW | tests/unit/test_init_command.py | 1 | CODE | |
| LOW | tests/unit/test_browser_session_download_artifacts.py | 18 | CODE | |
| LOW | tests/unit/test_copilot_run_output_content_gate.py | 7 | CODE | |
| LOW | tests/unit/test_workflow_run_parameter_batching.py | 8 | CODE | |
| LOW | tests/unit/test_parameter_reference_guard.py | 3 | CODE | |
| LOW | …ts/unit/test_copilot_tools_credential_id_misbinding.py | 1 | CODE | |
| LOW | tests/unit/test_copilot_code_block_persist_seam.py | 6 | CODE | |
| LOW | tests/unit/test_run_recording_clips.py | 1 | CODE | |
| LOW | tests/unit/test_copilot_diagnosis_repair_contract.py | 1 | CODE | |
| LOW | tests/unit/test_qa_skill_content.py | 1 | CODE | |
| LOW | tests/unit/test_copilot_secret_scrub.py | 6 | CODE | |
| LOW | …it/test_browser_artifacts_remote_browser_session_id.py | 8 | CODE | |
| LOW | tests/unit/test_downloaded_files_artifact_urls.py | 3 | CODE | |
| LOW | tests/unit/test_copilot_hooks.py | 3 | CODE | |
| LOW | tests/unit/test_ngrok_helpers.py | 1 | CODE | |
| LOW | tests/unit/test_run_sdk_action_failures.py | 1 | CODE | |
| LOW | tests/unit/test_copilot_watchdog.py | 27 | CODE | |
| LOW | tests/unit/test_workflow_copilot_route_helpers.py | 11 | CODE | |
| LOW | tests/unit/test_copilot_enforcement_pruning.py | 9 | CODE | |
| LOW | tests/unit/test_mcp_workflow_route_prefixes.py | 16 | CODE | |
| LOW | tests/unit/test_select_option_blocking_overlay.py | 12 | CODE | |
| LOW | tests/unit/test_real_browser_state_on_close_hook.py | 7 | CODE | |
| LOW | tests/unit/test_copilot_narrative_activity.py | 1 | CODE | |
| LOW | tests/unit/test_otp_service.py | 3 | CODE | |
| LOW | …sts/unit/test_workflow_system_prompt_llm_forwarding.py | 11 | CODE | |
| LOW | tests/unit/test_browser_session_recording_artifacts.py | 13 | CODE | |
| LOW | tests/unit/test_copilot_result_evidence.py | 1 | CODE | |
| LOW | tests/unit/test_browser_profile_key.py | 1 | CODE | |
| LOW | tests/unit/test_extract_information_retry_bypass.py | 9 | CODE | |
| LOW | tests/unit/test_cli_no_args_help.py | 9 | CODE | |
| LOW | tests/unit/test_browser_recording_interpretation.py | 1 | CODE | |
| LOW | tests/unit/test_quickstart_browser_install.py | 1 | CODE | |
| LOW | tests/unit/test_copilot_agent_blocker_renderer.py | 1 | CODE | |
| LOW | tests/unit/test_mcp_page_errors.py | 3 | CODE | |
| LOW | tests/unit/fake_workflow_run_context.py | 8 | CODE | |
| LOW | tests/unit/test_workflow_schedule_service.py | 1 | CODE | |
| LOW | tests/unit/_mcp_browser_fakes.py | 1 | CODE | |
| LOW | tests/unit/test_task_v2_navigate_extracted_data.py | 7 | CODE | |
| LOW | tests/unit/test_event_source_stream_disconnect.py | 12 | CODE | |
| LOW | tests/unit/test_emerging_elements_prompt_scope.py | 7 | CODE | |
| LOW | tests/unit/test_complete_verify_span.py | 14 | CODE | |
| LOW | tests/unit/test_files_resolve_local_or_download.py | 1 | CODE | |
| LOW | tests/unit/test_copilot_credential_pause.py | 20 | CODE | |
| LOW | tests/unit/test_copilot_tracing_setup.py | 9 | CODE | |
| LOW | tests/unit/test_copilot_turn_intent_tool_gate.py | 1 | CODE | |
| LOW | tests/unit/test_worker_cdp_frame_publisher.py | 1 | CODE | |
| LOW | tests/unit/test_session_cookies.py | 1 | CODE | |
| LOW | tests/unit/test_extract_information_wpid_fallback.py | 11 | CODE | |
| LOW | tests/unit/test_copilot_turn_ownership.py | 1 | CODE | |
| 2513 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | run_streaming.py | 26 | except Exception: | CODE |
| LOW | run_streaming.py | 53 | except Exception: | CODE |
| LOW | run_streaming.py | 73 | except Exception: | CODE |
| LOW | tests/unit/test_copilot_code_block_persist_seam.py | 2996 | except Exception: | CODE |
| LOW | tests/unit/test_copilot_code_block_persist_seam.py | 5860 | except Exception: | CODE |
| LOW | tests/unit/test_copilot_code_block_persist_seam.py | 5928 | except Exception: | CODE |
| LOW | tests/unit/test_copilot_code_block_persist_seam.py | 6000 | except Exception: | CODE |
| LOW | tests/unit/test_credential_rotation.py | 656 | except Exception as exc: | STRING |
| LOW | tests/unit/test_scrape_frame_decision.py | 36 | except Exception: | CODE |
| MEDIUM | tests/unit/test_scrape_frame_decision.py | 30 | def _has_playwright_browser() -> bool: | CODE |
| LOW | tests/unit/test_iframe_mcp_e2e.py | 32 | except Exception: | CODE |
| LOW | tests/unit/test_iframe_mcp_e2e.py | 144 | except Exception: | CODE |
| LOW | tests/unit/test_get_scripts_query.py | 75 | except Exception: | CODE |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 792 | except Exception: | CODE |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 861 | except Exception: | CODE |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 878 | except Exception: | CODE |
| LOW | …unit/test_copilot_code_artifact_metadata_violations.py | 708 | except Exception: | CODE |
| LOW | tests/unit/test_code_block_sandbox.py | 1280 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/unit/test_iframe_e2e.py | 31 | except Exception: | CODE |
| LOW | tests/unit/test_agent_step_artifact_tracker.py | 42 | except Exception: | CODE |
| LOW⚡ | tests/unit/test_pdf_download_fixes.py | 191 | except Exception: | CODE |
| LOW | tests/unit/test_pdf_download_fixes.py | 129 | except Exception: | CODE |
| LOW | tests/unit/test_pdf_download_fixes.py | 161 | except Exception: | CODE |
| LOW | tests/unit/test_workflow_service_cancel.py | 495 | except Exception: | CODE |
| LOW | tests/unit/test_saved_session_proxy_pin.py | 265 | except Exception as exc: | CODE |
| LOW | tests/unit/test_missing_starter_url.py | 387 | except Exception: | CODE |
| LOW | tests/unit/test_llm_response_parsing.py | 21 | except Exception: | CODE |
| MEDIUM | tests/unit/test_llm_response_parsing.py | 17 | def test_coerce_response_to_dict_variants(response, expected): | CODE |
| MEDIUM | tests/unit/test_copilot_composition_evidence.py | 2856 | def _has_playwright_browser() -> bool: | CODE |
| LOW | tests/unit/test_copilot_composition_evidence.py | 2862 | except Exception: | STRING |
| MEDIUM | tests/unit/test_script_reviewer_terminate.py | 182 | def block_fn(page, context): | CODE |
| MEDIUM | tests/unit/test_script_reviewer_terminate.py | 195 | def block_fn(page, context): | CODE |
| MEDIUM | tests/unit/test_script_reviewer_terminate.py | 213 | def block_fn(page, context): | CODE |
| LOW⚡ | tests/unit/test_script_reviewer_terminate.py | 185 | except Exception: | CODE |
| LOW⚡ | tests/unit/test_script_reviewer_terminate.py | 205 | except Exception: | CODE |
| LOW⚡ | tests/unit/test_script_reviewer_terminate.py | 216 | except Exception: | CODE |
| LOW | …sts/unit/workflow/test_block_browser_state_recovery.py | 30 | except Exception: | CODE |
| LOW | …sts/unit/workflow/test_block_browser_state_recovery.py | 265 | except Exception: | CODE |
| LOW | tests/unit/embedded/test_tab_management_e2e.py | 25 | except Exception: | CODE |
| LOW | tests/unit/embedded/test_tab_management_e2e.py | 55 | except Exception: | CODE |
| MEDIUM | tests/unit/embedded/test_tab_management_e2e.py | 19 | def _has_playwright_browser() -> bool: | CODE |
| LOW | tests/unit/embedded/test_embedded_e2e.py | 29 | except Exception: | CODE |
| LOW | tests/unit_tests/test_alembic_loop.py | 35 | except Exception as e: | CODE |
| LOW | tests/sdk/python_sdk/conftest.py | 98 | except Exception: | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 63 | print(f"Error listing sessions: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 78 | print(f"Error parsing response: {session}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 79 | print(f"Error: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 82 | print(f"Error creating session: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 94 | print(f"Error getting session: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 104 | print(f"Error closing sessions: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 183 | print(f"Error parsing response: {task}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 184 | print(f"Error: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 187 | print(f"Error creating task: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 215 | print(f"Error parsing response: {workflow_run}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 216 | print(f"Error: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 219 | print(f"Error creating workflow run: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 247 | print(f"Error parsing response: {cruise}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 248 | print(f"Error: {str(e)}") | CODE |
| MEDIUM⚡ | scripts/test_persistent_browsers.py | 251 | print(f"Error creating cruise: {str(e)}") | CODE |
| MEDIUM | scripts/test_persistent_browsers.py | 37 | print(f"Error details: {json.dumps(error_detail, indent=2)}") | CODE |
| 1655 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | entrypoint-skyvernui.sh | 31 | # (YOUR_API_KEY) can leak through if users skip configuration. Keep these | COMMENT |
| HIGH | entrypoint-skyvernui.sh | 43 | && [ "$VITE_SKYVERN_API_KEY" != "YOUR_API_KEY" ]; then | CODE |
| HIGH | README.md | 227 | skyvern = Skyvern(api_key="your-api-key") | CODE |
| HIGH | README.md | 245 | const skyvern = new Skyvern({ apiKey: "your-api-key" }); | CODE |
| HIGH⚡ | README.md | 291 | api_key="YOUR_API_KEY", | CODE |
| HIGH | README.md | 323 | skyvern = Skyvern(api_key="your-api-key") | CODE |
| HIGH | skyvern-frontend/src/util/env.test.ts | 69 | const { getRuntimeApiKey } = await loadEnv("YOUR_API_KEY"); | CODE |
| HIGH | skyvern-frontend/src/util/env.ts | 88 | candidate === "YOUR_API_KEY" || candidate?.endsWith("_PLACEHOLDER__"); | CODE |
| HIGH | …yvern-frontend/src/routes/tasks/detail/TaskDetails.tsx | 300 | "x-api-key": apiCredential ?? "<your-api-key>", | CODE |
| HIGH | …frontend/src/routes/tasks/create/CreateNewTaskForm.tsx | 763 | "x-api-key": apiCredential ?? "<your-api-key>", | CODE |
| HIGH | …ern-frontend/src/routes/tasks/create/SavedTaskForm.tsx | 775 | "x-api-key": apiCredential ?? "<your-api-key>", | CODE |
| HIGH | …vern-frontend/src/routes/workflows/RunWorkflowForm.tsx | 698 | "x-api-key": apiCredential ?? "<your-api-key>", | CODE |
| HIGH | skyvern-frontend/src/routes/workflows/WorkflowRun.tsx | 622 | "x-api-key": apiCredential ?? "<your-api-key>", | CODE |
| HIGH | …/src/routes/workflows/studio/runview/RunPaneHeader.tsx | 237 | "x-api-key": apiCredential ?? "<your-api-key>", | CODE |
| HIGH | …ws/editor/nodes/HttpRequestNode/QuickHeadersDialog.tsx | 50 | { name: "X-API-Key", value: "YOUR_API_KEY", description: "API key header" }, | CODE |
| HIGH | tests/unit/test_cli_doctor.py | 14 | (frontend / ".env.example").write_text("VITE_SKYVERN_API_KEY=YOUR_API_KEY\n") | CODE |
| HIGH | docs/skill.md | 44 | client = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH | docs/skill.md | 55 | const client = new Skyvern({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH | docs/skill.md | 65 | -H "x-api-key: YOUR_API_KEY" \ | CODE |
| HIGH | docs/skill.md | 137 | claude mcp add skyvern-cloud -- npx @anthropic-ai/skyvern-mcp@latest --skyvern-api-key YOUR_API_KEY | CODE |
| HIGH | docs/skill.md | 146 | "args": ["@anthropic-ai/skyvern-mcp@latest", "--skyvern-api-key", "YOUR_API_KEY"] | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 566 | "code": "\nfrom skyvern import Skyvern\n\n# Create a workflow in JSON format\nworkflow_definition = {\n | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 570 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 3117 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\n# Create a blank br | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 3121 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4097 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.creat | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4101 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.creat | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4105 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4109 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4881 | "code": "# Login with password saved in Skyvern\nfrom skyvern import Skyvern\n\nskyvern = Skyvern(api_ke | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4885 | "code": "# Login with password saved in Bitwarden\nfrom skyvern import Skyvern\n\nskyvern = Skyvern(api_ | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4889 | "code": "# Login with password saved in 1Password\nfrom skyvern import Skyvern\n\nskyvern = Skyvern(api_ | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4893 | "code": "// Login with password saved in Skyvern\nimport { SkyvernClient } from \"@skyvern/client\";\n\n | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4897 | "code": "// Login with password saved in Bitwarden\nimport { SkyvernClient } from \"@skyvern/client\";\n | CODE |
| HIGH⚡ | docs/api-reference/openapi.json | 4901 | "code": "// Login with password saved in 1Password\nimport { SkyvernClient } from \"@skyvern/client\";\n | CODE |
| HIGH | docs/api-reference/openapi.json | 95 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.run_t | CODE |
| HIGH | docs/api-reference/openapi.json | 99 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 215 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.run_w | CODE |
| HIGH | docs/api-reference/openapi.json | 219 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 321 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nrun = await skyvern | CODE |
| HIGH | docs/api-reference/openapi.json | 325 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 397 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.cance | CODE |
| HIGH | docs/api-reference/openapi.json | 401 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 474 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.bulk_ | CODE |
| HIGH | docs/api-reference/openapi.json | 478 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 799 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nworkflows = await s | CODE |
| HIGH | docs/api-reference/openapi.json | 803 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 887 | "code": "\nfrom skyvern import Skyvern\n\nupdated_workflow_definition = {\n \"title\": \"Updated Cont | CODE |
| HIGH | docs/api-reference/openapi.json | 891 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 966 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.delet | CODE |
| HIGH | docs/api-reference/openapi.json | 970 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 2730 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.retry | CODE |
| HIGH | docs/api-reference/openapi.json | 2734 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 2822 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\n# Get timeline for | CODE |
| HIGH | docs/api-reference/openapi.json | 2826 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 3260 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nbrowser_profiles = | CODE |
| HIGH | docs/api-reference/openapi.json | 3264 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 3344 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nbrowser_profile = a | CODE |
| HIGH | docs/api-reference/openapi.json | 3348 | "code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKe | CODE |
| HIGH | docs/api-reference/openapi.json | 3439 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nbrowser_profile = a | CODE |
| 298 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/unit/test_mcp_workflow_create_defaults.py | 64 | """When the user explicitly sets run_with to null, it stays null.""" | STRING |
| HIGH⚡ | tests/unit/test_cdp_connection.py | 49 | assert parse_default_cdp_connect_headers('{"x-api-key": "secret", "x-bad": 42, "x-null": null}') == { | CODE |
| HIGH | tests/unit/test_mcp_workflow_tools.py | 310 | """MCP workflow creation must strip ANY hallucinated llm_key and default to Skyvern Optimized (null).""" | STRING |
| HIGH | tests/unit/test_script_reviewer_extract.py | 171 | '"agency_program": {"param": null, "action": "fill"}}' | CODE |
| HIGH | tests/unit/test_should_run_script.py | 6 | run_with is always "agent" or "code" (never null). When run_with="agent" and | STRING |
| HIGH⚡ | tests/unit/test_lean_html.py | 203 | "javascript:void(undefined)", | CODE |
| HIGH⚡ | tests/unit/test_lean_html.py | 204 | "javascript:void(null)", | CODE |
| HIGH⚡ | tests/unit/test_lean_html.py | 197 | """`javascript:void(0)`, `javascript:`, `javascript:void(undefined)` etc. | STRING |
| HIGH | tests/unit/workflow/test_dag_engine.py | 599 | # Before the fix, execution stalled at validate (next=null). | COMMENT |
| HIGH⚡ | tests/unit/workflow/test_dag_engine.py | 489 | outer_cond (next=merge) → branch → nav → inner_cond (next=null) | STRING |
| HIGH⚡ | tests/unit/workflow/test_dag_engine.py | 490 | inner_cond → branch → loop_block → validate (next=null) | STRING |
| HIGH | tests/unit/workflow/test_dag_engine.py | 320 | block_29 → inner_cond (next=null) | STRING |
| HIGH | tests/unit_tests/test_schema_validator.py | 273 | # When data is null, it should remain null (valid for nullable type) | COMMENT |
| HIGH | tests/unit_tests/test_schema_validator.py | 288 | # When data is an object (not null), missing required fields should be filled | COMMENT |
| HIGH | tests/unit_tests/test_schema_validator.py | 310 | # When data is null, it should remain null | COMMENT |
| HIGH | tests/unit_tests/test_schema_validator.py | 328 | # When data is an array (not null), items should be validated | COMMENT |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 2351 | if (t && t.length > 3 && t.length < 300 && el.offsetWidth > 0) { | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 2354 | errs.push(t.substring(0, 100)); | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3156 | && style.opacity !== '0' && el.offsetWidth > 0 && el.offsetHeight > 0; | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3164 | const required = el.required || el.getAttribute('aria-required') === 'true'; | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3186 | const label = el.name || el.id || el.getAttribute('aria-label') || tag; | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3187 | results.push({required: true, hasValue: value.trim().length > 0, label: label}); | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3248 | && style.opacity !== '0' && el.offsetWidth > 0 && el.offsetHeight > 0; | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3265 | return el.name || el.id || null; | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3265 | return el.name || el.id || null; | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3289 | return lbl || checked.value || 'selected'; | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3297 | return el.files && el.files.length > 0 | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3319 | results.push({ | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3321 | type: type || tag, | STRING |
| HIGH⚡ | skyvern/webeye/transient_page_observer.py | 152 | return rect.width > 0 && rect.height > 0; | STRING |
| HIGH⚡ | skyvern/webeye/transient_page_observer.py | 158 | let text = element instanceof HTMLElement && typeof element.innerText === "string" | STRING |
| HIGH⚡ | skyvern/webeye/transient_page_observer.py | 167 | tag: element.tagName || null, | STRING |
| HIGH⚡ | skyvern/webeye/transient_page_observer.py | 167 | tag: element.tagName || null, | STRING |
| HIGH | skyvern/webeye/transient_page_observer.py | 181 | observer.observe(document.documentElement || document.body, { | STRING |
| HIGH | skyvern/webeye/utils/page.py | 376 | if (maxSizeBytes != null && blob.size > maxSizeBytes) { | CODE |
| HIGH | skyvern/webeye/utils/page.py | 1256 | return rect.width > 0 && rect.height > 0; | CODE |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 1574 | return { index: null, label: null, value: normalize(select?.value) }; | CODE |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 1576 | const option = select.options[select.selectedIndex] ?? null; | CODE |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 1579 | label: option ? normalize(option.textContent) : null, | CODE |
| HIGH | skyvern/webeye/actions/handler.py | 2539 | " window.__skyvernScrolledElementId = null; return v === id; }", | CODE |
| HIGH | skyvern/webeye/actions/handler.py | 6487 | nestedChoice: nestedChoice != null, | CODE |
| HIGH | skyvern/webeye/actions/handler.py | 6508 | if (normalized.startsWith(prefix)) parts.push(normalized.slice(prefix.length).trim()); | CODE |
| HIGH | skyvern/webeye/actions/handler.py | 6537 | scopeCandidates.reduce((closest, el) => (!closest || closest.contains(el) ? el : closest), null) | CODE |
| HIGH | skyvern/webeye/actions/handler.py | 6537 | scopeCandidates.reduce((closest, el) => (!closest || closest.contains(el) ? el : closest), null) | CODE |
| HIGH | skyvern/webeye/actions/handler.py | 6554 | if (allowAriaSelectedOptionTokens && activeId) { | CODE |
| HIGH | skyvern/webeye/actions/handler.py | 6556 | if (active && active.getAttribute("aria-selected") === "true") { | CODE |
| HIGH | skyvern/webeye/actions/handler.py | 6576 | if (!el || seen.has(el) || !scopeRoot.contains(el)) continue; | CODE |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 2473 | if (!element) return null; | STRING |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 2477 | if (element && element.nodeType === 1) { | STRING |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 2484 | return null; | STRING |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 2486 | return null; | STRING |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 4933 | viewport_width: window.innerWidth || root.clientWidth || 0, | STRING |
| HIGH⚡ | skyvern/webeye/actions/handler.py | 4934 | viewport_height: window.innerHeight || root.clientHeight || 0, | STRING |
| HIGH | skyvern/library/skyvern.py | 224 | (pip install playwright && playwright install chromium). | STRING |
| HIGH | skyvern/utils/lean_html.py | 72 | remains (pure no-ops like `javascript:`, `javascript:void(undefined)`). | STRING |
| HIGH | skyvern/cli/schedule_command.py | 225 | clear_parameters: bool = typer.Option(False, "--clear-parameters", help="Clear parameters (set to null)."), | CODE |
| HIGH | skyvern/cli/run_commands.py | 279 | "[cyan]git clone https://github.com/skyvern-ai/skyvern.git && cd skyvern[/cyan]", | CODE |
| HIGH | skyvern/cli/doctor.py | 1126 | const key = envKey && envKey !== "YOUR_API_KEY" ? envKey : generatedKey; | CODE |
| HIGH | skyvern/cli/quickstart.py | 948 | "[cyan]git clone https://github.com/skyvern-ai/skyvern.git && cd skyvern[/cyan]", | CODE |
| HIGH⚡ | skyvern/cli/core/browser_ops.py | 594 | if (element.labels && element.labels.length) { | CODE |
| 157 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/test_copilot_session_injection.py | 0 | title: count example.com topic alpha results workflow_definition: blocks: - block_type: navigation label: search_topic_a | STRING |
| HIGH | tests/unit/test_copilot_agent_helpers.py | 0 | title: count example.com topic alpha results workflow_definition: blocks: - block_type: navigation label: search_topic_a | STRING |
| HIGH | tests/unit/test_copilot_frontier.py | 0 | title: count example.com topic alpha results workflow_definition: blocks: - block_type: navigation label: search_topic_a | STRING |
| HIGH | tests/unit/test_copilot_session_injection.py | 0 | title: count example.com sample beta results workflow_definition: blocks: - block_type: navigation label: search_sample_ | STRING |
| HIGH | tests/unit/test_copilot_agent_helpers.py | 0 | title: count example.com sample beta results workflow_definition: blocks: - block_type: navigation label: search_sample_ | STRING |
| HIGH | tests/unit/test_copilot_frontier.py | 0 | title: count example.com sample beta results workflow_definition: blocks: - block_type: navigation label: search_sample_ | STRING |
| HIGH | tests/unit/test_iframe_mcp_e2e.py | 0 | check that playwright's chromium binary exists for the current installed version. | STRING |
| HIGH | tests/unit/test_iframe_e2e.py | 0 | check that playwright's chromium binary exists for the current installed version. | STRING |
| HIGH | …sts/unit/workflow/test_block_browser_state_recovery.py | 0 | check that playwright's chromium binary exists for the current installed version. | STRING |
| HIGH | tests/unit/embedded/test_embedded_e2e.py | 0 | check that playwright's chromium binary exists for the current installed version. | STRING |
| HIGH | skyvern/schemas/docs/doc_strings.py | 0 | geographic proxy location to route the browser traffic through. this is only available in skyvern cloud. available geota | STRING |
| HIGH | skyvern/client/types/workflow_run_request_output.py | 0 | geographic proxy location to route the browser traffic through. this is only available in skyvern cloud. available geota | STRING |
| HIGH | skyvern/client/types/task_run_request_output.py | 0 | geographic proxy location to route the browser traffic through. this is only available in skyvern cloud. available geota | STRING |
| HIGH | skyvern/schemas/docs/doc_strings.py | 0 | identifier for the totp/2fa/mfa code when the code is pushed to skyvern. refer to https://www.skyvern.com/docs/credentia | STRING |
| HIGH | skyvern/client/types/workflow_run_request_output.py | 0 | identifier for the totp/2fa/mfa code when the code is pushed to skyvern. refer to https://www.skyvern.com/docs/credentia | STRING |
| HIGH | skyvern/client/types/task_run_request_output.py | 0 | identifier for the totp/2fa/mfa code when the code is pushed to skyvern. refer to https://www.skyvern.com/docs/credentia | STRING |
| HIGH | skyvern/schemas/docs/doc_strings.py | 0 | url that serves totp/2fa/mfa codes for skyvern to use during the workflow run. refer to https://www.skyvern.com/docs/cre | STRING |
| HIGH | skyvern/client/types/workflow_run_request_output.py | 0 | url that serves totp/2fa/mfa codes for skyvern to use during the workflow run. refer to https://www.skyvern.com/docs/cre | STRING |
| HIGH | skyvern/client/types/task_run_request_output.py | 0 | url that serves totp/2fa/mfa codes for skyvern to use during the workflow run. refer to https://www.skyvern.com/docs/cre | STRING |
| HIGH | skyvern/forge/sdk/schemas/task_v2.py | 0 | if the `block` has a `model` defined, then return the mapped llm_key for it. otherwise return `none`. | STRING |
| HIGH | skyvern/forge/sdk/schemas/tasks.py | 0 | if the `block` has a `model` defined, then return the mapped llm_key for it. otherwise return `none`. | STRING |
| HIGH | skyvern/forge/sdk/workflow/models/block.py | 0 | if the `block` has a `model` defined, then return the mapped llm_key for it. otherwise return `none`. | STRING |
| HIGH | skyvern/client/types/google_sheets_read_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/text_prompt_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/send_email_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/conditional_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/file_parser_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/while_loop_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/url_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/print_page_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/action_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/navigation_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/pdf_parser_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/for_loop_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/google_sheets_write_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/human_interaction_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/task_v2block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/file_upload_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/download_to_s3block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/task_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/validation_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/upload_to_s3block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/login_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/http_request_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/wait_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/code_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/file_download_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/extraction_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/workflow_trigger_block_yaml.py | 0 | author-facing identifier; must be unique per workflow. | STRING |
| HIGH | skyvern/client/types/google_sheets_read_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/text_prompt_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/send_email_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/conditional_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/file_parser_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/while_loop_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/url_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/print_page_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/action_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/navigation_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| HIGH | skyvern/client/types/pdf_parser_block_yaml.py | 0 | optional pointer to the label of the next block. when omitted, it will default to sequential order. see [[s-4bnl]]. | STRING |
| 74 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | run_streaming.py | 18 | CODE | |
| LOW | tests/unit/test_budget_preflight.py | 10 | CODE | |
| LOW | tests/unit/test_copilot_turn_intent_tool_gate.py | 758 | CODE | |
| LOW | tests/unit/test_scrape_default_no_overlay.py | 57 | CODE | |
| LOW | tests/unit/test_scrape_default_no_overlay.py | 74 | CODE | |
| LOW | tests/unit/test_iframe_mcp_e2e.py | 96 | CODE | |
| LOW | tests/unit/test_video_utils.py | 128 | CODE | |
| LOW | tests/unit/test_video_utils.py | 206 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 44 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 99 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 129 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 170 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 206 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 242 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 287 | CODE | |
| LOW | tests/unit/test_code_block_sandbox.py | 646 | CODE | |
| LOW | tests/unit/test_error_detection_integration.py | 65 | CODE | |
| LOW | tests/unit/test_error_detection_integration.py | 365 | CODE | |
| LOW | tests/unit/test_error_detection_integration.py | 409 | CODE | |
| LOW | tests/unit/test_error_detection_integration.py | 448 | CODE | |
| LOW | tests/unit/test_error_detection_integration.py | 522 | CODE | |
| LOW | tests/unit/test_animation_wait_attrs.py | 16 | CODE | |
| LOW | tests/unit/test_domutils_scroll_helpers_gating.py | 28 | CODE | |
| LOW | tests/unit/test_domutils_scroll_helpers_gating.py | 56 | CODE | |
| LOW | tests/unit/test_domutils_scroll_helpers_gating.py | 96 | CODE | |
| LOW | tests/unit/test_vertex_cache_model_extraction.py | 44 | CODE | |
| LOW | …sts/unit/workflow/test_block_browser_state_recovery.py | 237 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 149 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 172 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 195 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 228 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 257 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 282 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 408 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 433 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 460 | CODE | |
| LOW | tests/unit/workflow/test_file_parser_error_code.py | 491 | CODE | |
| LOW | tests/smoke_tests/test_prompts.py | 54 | CODE | |
| LOW | scripts/test_persistent_browsers.py | 286 | CODE | |
| LOW | scripts/profile_workflow_run.py | 45 | CODE | |
| LOW | evaluation/core/utils.py | 23 | CODE | |
| LOW | evaluation/script/eval_webvoyager_task_v2.py | 75 | CODE | |
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 180 | CODE | |
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 402 | CODE | |
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 793 | CODE | |
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 837 | CODE | |
| LOW | skyvern/core/script_generations/script_validators.py | 38 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 300 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 466 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 577 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 647 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 891 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 1067 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 1589 | CODE | |
| LOW | …vern/core/script_generations/script_block_extractor.py | 116 | CODE | |
| LOW | …vern/core/script_generations/script_block_extractor.py | 180 | CODE | |
| LOW | …vern/core/script_generations/script_block_extractor.py | 226 | CODE | |
| LOW | …vern/core/script_generations/script_block_extractor.py | 262 | CODE | |
| LOW | skyvern/core/script_generations/fuzzy_matcher.py | 26 | CODE | |
| LOW | skyvern/core/script_generations/generate_script.py | 215 | CODE | |
| 493 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 17 | totp_identifier: "user@example.com", | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 38 | totp_identifier: "user@example.com", | CODE |
| LOW | …rn-frontend/src/components/BitwardenCredentialForm.tsx | 113 | placeholder="user@example.com" | CODE |
| LOW | …yvern-frontend/src/routes/tasks/data/sampleTaskData.ts | 86 | name: "John Doe", | CODE |
| LOW | …yvern-frontend/src/routes/tasks/data/sampleTaskData.ts | 104 | name: "John Doe", | CODE |
| LOW | skyvern-frontend/src/routes/tasks/create/PromptBox.tsx | 62 | prompt: `Go to https://jobs.lever.co/leverdemo-8/45d39614-464a-4b62-a5cd-8683ce4fb80a/apply, fill out the job applic | CODE |
| LOW | skyvern-frontend/src/routes/tasks/create/PromptBox.tsx | 80 | prompt: `Go to https://canadahvac.com/contact-hvac-canada. Fill out the contact us form and submit it. Your goal is | CODE |
| LOW | …kflows/workflowRun/blockDetail/BlockInspector.test.tsx | 140 | text: "user@example.com", | CODE |
| LOW | …kflows/workflowRun/blockDetail/BlockInspector.test.tsx | 148 | expect(screen.getByText("user@example.com")).toBeDefined(); | CODE |
| LOW | …lows/editor/nodes/HttpRequestNode/CurlImportDialog.tsx | 50 | -d '{"name": "John Doe", "email": "john@example.com"}'`, | CODE |
| LOW | …lows/editor/nodes/HttpRequestNode/CurlImportDialog.tsx | 56 | -d '{"name": "Jane Doe"}'`, | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 89 | username: "user@example.com", | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 188 | target: { value: "user@example.com" }, | CODE |
| LOW | …rontend/src/routes/credentials/CredentialItem.test.tsx | 51 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 38 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 473 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 486 | return next.totp_identifier === "user@example.com"; | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 501 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 533 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 551 | next.totp_identifier === "user@example.com" | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 578 | username: "user@example.com", | CODE |
| LOW | …ontend/src/routes/credentials/CredentialsList.test.tsx | 36 | credential: { username: "user@example.com", totp_type: "none" }, | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 48 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 114 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 131 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 144 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 157 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 190 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 229 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 260 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 286 | username="user@example.com", | CODE |
| LOW | tests/unit/test_credential_totp_code.py | 303 | username="user@example.com", | CODE |
| LOW⚡ | tests/unit/test_auto_completion_location.py | 511 | # LLM should be called because "No results" doesn't contain "123 Main St" | COMMENT |
| LOW⚡ | tests/unit/test_auto_completion_location.py | 34 | _TASK = make_task(_NOW, _ORG, navigation_payload={"address": "123 Main St"}) | CODE |
| LOW⚡ | tests/unit/test_auto_completion_location.py | 357 | text="123 Main St", | CODE |
| LOW⚡ | tests/unit/test_auto_completion_location.py | 504 | text="123 Main St", | CODE |
| LOW | tests/unit/test_auto_completion_location.py | 128 | text="123 Main St", | CODE |
| LOW | tests/unit/test_auto_completion_location.py | 172 | text="123 Main St", # Double spaces - should still match after normalization | CODE |
| LOW | tests/unit/test_auto_completion_location.py | 222 | text="123 Main St", | CODE |
| LOW | tests/unit/test_auto_completion_location.py | 307 | text="123 Main St", | CODE |
| LOW | tests/unit/test_auto_completion_location.py | 386 | text="123 Main St", | CODE |
| LOW | tests/unit/test_auto_completion_location.py | 553 | text="123 Main St", | CODE |
| LOW | tests/unit/test_copilot_code_block_persist_seam.py | 1586 | locations = [{{"address": "123 Main St"}}] | CODE |
| LOW | tests/unit/test_script_reviewer_validators.py | 70 | {"email": "user@example.com", "password": "secret123"}, | CODE |
| LOW | tests/unit/test_script_reviewer_validators.py | 117 | {"website_url": "https://portal.vendor.com/login", "email": "user@example.com"}, | CODE |
| LOW | tests/unit/test_script_reviewer_validators.py | 777 | "value=context.parameters['fake_key']", | STRING |
| LOW | tests/unit/test_script_reviewer_validators.py | 780 | ("fake_key", "!self-output"), | STRING |
| LOW | tests/unit/test_script_reviewer_validators.py | 811 | "# context.parameters['fake_key']\n" | STRING |
| LOW⚡ | tests/unit/test_otp_service.py | 123 | "totp_identifier": "user@example.com", | CODE |
| LOW⚡ | tests/unit/test_otp_service.py | 132 | token.token = "fake-token" | CODE |
| LOW | tests/unit/test_otp_service.py | 503 | "fake-token", | CODE |
| LOW⚡ | tests/unit/test_script_skyvern_page.py | 1782 | script_page, "dynamic_field_map", new=AsyncMock(side_effect=[{0: "x@y.com"}, {}, {0: "555-0100"}]) | CODE |
| LOW⚡ | tests/unit/test_script_skyvern_page.py | 1788 | pages_filled = await script_page.fill_multipage_form({"email": "x@y.com", "phone": "555-0100"}) | CODE |
| LOW⚡ | tests/unit/test_script_skyvern_page.py | 2124 | result = await script_page.fill("#username", "user@example.com", mode="direct") | CODE |
| LOW⚡ | tests/unit/test_script_skyvern_page.py | 2126 | assert result == "user@example.com" | CODE |
| LOW⚡ | tests/unit/test_script_skyvern_page.py | 2130 | fill_index = locator.calls.index(("fill", "user@example.com")) | CODE |
| LOW⚡ | tests/unit/test_script_skyvern_page.py | 2144 | await script_page.fill("#username", "user@example.com", mode="direct") | CODE |
| LOW | tests/unit/test_totp_identifier_fallback.py | 24 | totp_identifier="user@example.com", | CODE |
| LOW | tests/unit/test_totp_identifier_fallback.py | 73 | assert context.get_credential_totp_identifier("credential_param") == "user@example.com" | CODE |
| LOW | tests/unit/test_totp_identifier_fallback.py | 131 | username="user@example.com", | CODE |
| 227 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_script_skyvern_page.py | 130 | # Create a mock page first, then set page to None after construction | COMMENT |
| MEDIUM | tests/unit/test_download_file_action_handler.py | 419 | # Create a read-only directory to simulate write failure | COMMENT |
| MEDIUM | tests/unit/test_forloop_script_generation.py | 208 | # Create a mock CodeGenInput with ForLoop block | COMMENT |
| MEDIUM | tests/unit/test_aiohttp_helper.py | 899 | # Create a temporary file for testing | COMMENT |
| MEDIUM | tests/unit/test_aiohttp_helper.py | 953 | # Create a temporary file for testing | COMMENT |
| MEDIUM | tests/unit/test_aiohttp_helper.py | 1080 | # Create a temporary file for testing | COMMENT |
| MEDIUM⚡ | tests/unit/test_http_block_raw_filter.py | 344 | # Create a real context to test the method | COMMENT |
| MEDIUM⚡ | tests/unit/test_local_file_path_validation.py | 83 | # Create a symlink inside the sandbox that points to /etc/passwd | COMMENT |
| MEDIUM | tests/unit/test_vertex_cache_model_extraction.py | 114 | # Create a mock router config that matches the real GEMINI_3_0_FLASH_WITH_FALLBACK | COMMENT |
| MEDIUM | tests/unit/test_aws_client_ttl.py | 202 | # Create a stream that raises on seek | COMMENT |
| MEDIUM⚡ | tests/unit/workflow/test_file_parser_block.py | 109 | # Create a minimal valid PDF file | COMMENT |
| MEDIUM | tests/unit/embedded/test_sqlite_server_mode.py | 406 | # Create a client with a bad setting that will cause validation error | COMMENT |
| MEDIUM | tests/unit_tests/test_file_parser_block.py | 25 | # Create a mock OutputParameter with all required fields | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_file_parser_block.py | 88 | # Create a mock OutputParameter | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_file_parser_block.py | 151 | # Create a binary file that's definitely not CSV | COMMENT |
| MEDIUM | tests/unit_tests/test_file_parser_block.py | 233 | # Create a DataFrame with NaN, NaT, and timestamp values | COMMENT |
| MEDIUM | tests/unit_tests/test_schema_validator.py | 455 | # Create a schema that will fail Draft202012Validator.check_schema | COMMENT |
| MEDIUM | tests/sdk/python_sdk/conftest.py | 57 | # Create a handler class that serves from the specific directory | COMMENT |
| MEDIUM⚡ | docs/api-reference/openapi.json | 566 | "code": "\nfrom skyvern import Skyvern\n\n# Create a workflow in JSON format\nworkflow_definition = {\n | CODE |
| MEDIUM⚡ | docs/api-reference/openapi.json | 3117 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\n# Create a blank br | CODE |
| MEDIUM⚡ | fern/openapi/skyvern_openapi.json | 568 | "code": "\nfrom skyvern import Skyvern\n\n# Create a workflow in JSON format\nworkflow_definition = {\n | CODE |
| MEDIUM⚡ | fern/openapi/skyvern_openapi.json | 2310 | "code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\n# Create a blank br | CODE |
| MEDIUM | skyvern/core/script_generations/real_skyvern_page_ai.py | 835 | # Create the episode now so v3's agent can attach decisions to it. | COMMENT |
| MEDIUM | skyvern/core/script_generations/generate_script.py | 2728 | # Create the for loop target (current_value) | COMMENT |
| MEDIUM | skyvern/core/script_generations/generate_script.py | 2751 | # Create the async for loop | COMMENT |
| MEDIUM | skyvern/core/script_generations/generate_script.py | 3698 | # Create a requires_agent entry (no code, no run_signature) | COMMENT |
| MEDIUM | skyvern/core/script_generations/generate_script.py | 3843 | # Create a temporary module to convert the start block content to a function | COMMENT |
| MEDIUM⚡ | skyvern/webeye/actions/handler.py | 4374 | # Create a TerminateAction and execute it | COMMENT |
| MEDIUM | skyvern/webeye/actions/handler.py | 3791 | # This function is deprecated in 'extract-actions' prompt. Downloads are handled by the click action handler now. | COMMENT |
| MEDIUM | skyvern/library/skyvern_browser.py | 32 | # Create a new page | STRING |
| MEDIUM | skyvern/cli/mcp_tools/prompts.py | 884 | # Create a new comment | COMMENT |
| MEDIUM | skyvern/forge/sdk/log_artifacts.py | 85 | # This function is called from ``update_workflow_run`` in the DB layer, which | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 1462 | # Create the workflow run and set skyvern context | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 4334 | # Create the browser with the saved profile and navigate | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 8408 | # Create a new version of the SAME script_id instead of a new script | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/models/block.py | 2231 | # Create a temporary output parameter using the current block's workflow_id | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/models/block.py | 2594 | # Create a failure block result for this iteration | COMMENT |
| MEDIUM | skyvern/forge/sdk/api/llm/config_registry.py | 1536 | # Create a GCP service account WITH the Vertex AI API access enabled | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/agent_protocol.py | 5302 | # Create a new timeline with processed children | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/credentials.py | 820 | # Create a temporary credential | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/credentials.py | 2479 | # Create the new token | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/credentials.py | 2736 | # Create the new Azure token | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/credentials.py | 2842 | # Create the new configuration | COMMENT |
| MEDIUM⚡ | skyvern/forge/sdk/routes/code_samples.py | 910 | # Create a blank browser profile for future runs | COMMENT |
| MEDIUM⚡ | skyvern/forge/sdk/routes/code_samples.py | 916 | # Create a browser profile from a persistent browser session | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/code_samples.py | 277 | # Create a workflow in JSON format | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/scripts.py | 584 | # Create a new version of the script | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/scripts.py | 1400 | # Create a new script version with the updated blocks | COMMENT |
| MEDIUM | skyvern/services/workflow_script_service.py | 1884 | # Create a new script version | COMMENT |
| MEDIUM | skyvern/services/workflow_script_service.py | 2053 | # Create the workflow script mapping for cache lookup | COMMENT |
| MEDIUM | skyvern/services/workflow_script_service.py | 2181 | # Create a new script version | COMMENT |
| MEDIUM | skyvern/services/task_v2_service.py | 242 | # Create a dedicated termination thought for UI visibility | COMMENT |
| MEDIUM | skyvern/services/script_service.py | 1642 | # Create a new script version | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | skyvern/core/script_generations/skyvern_page.py | 346 | Click an element using a CSS selector, AI-powered prompt matching, or both. This method supports three modes: | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 553 | Fill an input field using a CSS selector, AI-powered prompt matching, or both. This method supports three modes | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 705 | Fill an autocomplete input by typing a value and clicking the matching dropdown option. Handles widgets like Go | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 1262 | Select an option from a dropdown using a CSS selector, AI-powered prompt matching, or both. This method support | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 1420 | Extract structured data from the page using AI. Args: prompt: Natural language description of what | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 1468 | Validate the current page state using AI. Args: prompt: Validation criteria or condition to check | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 1511 | Classify the current page state against named options using a tiered cascade. This method uses a three-tier app | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3396 | Activate the AI agent from the CURRENT page position to achieve a goal. Instead of re-running the entire block | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3439 | Send a prompt to the LLM and get a response based on the provided schema. This method allows you to interact wi | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3510 | Get a Playwright locator using a CSS selector, AI-powered prompt, or both. This method extends Playwright's loc | STRING |
| HIGH | skyvern/library/skyvern_browser_page_agent.py | 356 | Run a workflow in the context of this page and wait for it to finish. Args: workflow_id: ID of the | STRING |
| HIGH | skyvern/cli/core/browser_launcher.py | 230 | Launch Chrome with CDP enabled and wait for it to be ready. Args: port: The port for Chrome's CDP server. | STRING |
| HIGH | skyvern/cli/core/browser_launcher.py | 294 | Wait for Chrome's CDP server to be ready and return the WebSocket URL. Args: port: CDP port to poll. | STRING |
| HIGH | skyvern/schemas/workflows.py | 188 | Sanitizes parameter keys and collects the key mapping. Args: parameters: List of parameter dictionaries | STRING |
| HIGH | skyvern/forge/sdk/core/curl_converter.py | 11 | Parse a curl command into HTTP request parameters using curlparser library. Args: curl_command: The cu | STRING |
| HIGH | skyvern/forge/sdk/utils/pdf_parser.py | 29 | Extract text from a PDF file with fallback support. This function attempts to parse the PDF using pypdf first. | STRING |
| HIGH | skyvern/forge/sdk/utils/pdf_parser.py | 149 | Validate that a file is a readable PDF. This function attempts to validate the PDF using pypdf first. If that | STRING |
| HIGH | skyvern/forge/sdk/workflow/context_manager.py | 602 | Extract vault_id and item_id from the credential_id. This method handles the legacy format vault_id:ite | STRING |
| HIGH | skyvern/forge/sdk/workflow/models/block.py | 9890 | Resolve a dotted/bracket access path on a nested value. Examples: _resolve_nested_path({"a": {"b": 1}} | STRING |
| HIGH | skyvern/forge/sdk/workflow/models/block.py | 10027 | Extract the evaluations array from LLM output. ExtractionBlock wraps output in 'extracted_information', so we | STRING |
| HIGH | skyvern/forge/sdk/db/repositories/artifacts.py | 160 | Return artifacts associated with a run. Args: run_id: The ID of the run to get artifacts for | STRING |
| HIGH | skyvern/forge/sdk/api/azure.py | 62 | Create or update a secret in Azure Key Vault. Args: secret_name: The name of the secret to create o | STRING |
| HIGH | skyvern/forge/sdk/api/azure.py | 78 | Delete a secret from Azure Key Vault. Args: secret_name: The name of the secret to delete | STRING |
| HIGH | skyvern/forge/sdk/api/custom_credential_client.py | 170 | Create a credential using the custom API. Args: name: Name of the credential c | STRING |
| HIGH | skyvern/forge/sdk/api/custom_credential_client.py | 254 | Get a credential using the custom API. Args: credential_id: ID of the credential to retrie | STRING |
| HIGH | skyvern/forge/sdk/api/llm/api_handler_factory.py | 1136 | Custom LLM API handler that utilizes the LiteLLM router and fallbacks to OpenAI GPT-4 Vision. | STRING |
| HIGH | skyvern/forge/sdk/routes/agent_protocol.py | 3954 | Get all artifacts for an entity (step, task, workflow_run). Args: entity_type: Type of entity to fetch | STRING |
| HIGH | skyvern/forge/sdk/routes/webhooks.py | 216 | Return the replay payload preview for a completed run. Args: run_id (str): Identifier of the run to preview | STRING |
| HIGH | skyvern/forge/sdk/routes/webhooks.py | 270 | Replay a completed run's webhook to the stored or override URL. Args: run_id (str): Identifier of the run w | STRING |
| HIGH | …services/credential/custom_credential_vault_service.py | 39 | Get or create a CustomCredentialAPIClient for the given organization. Args: organization_i | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | README.md | 274 | #### Step 1: Enable remote debugging in Chrome | COMMENT |
| LOW⚡ | README.md | 283 | #### Step 2: Connect Skyvern | COMMENT |
| LOW⚡ | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1058 | // Step 1: Remove inline {{ deleted_block_output }} references from all nodes | COMMENT |
| LOW⚡ | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1065 | // Step 2: Remove from parameterKeys arrays and handle special cases | COMMENT |
| LOW⚡ | …end/src/routes/workflows/editor/workflowEditorUtils.ts | 3851 | // Step 1: Update inline {{ old_output }} references to {{ new_output }} | COMMENT |
| LOW⚡ | …end/src/routes/workflows/editor/workflowEditorUtils.ts | 3858 | // Step 2: Update parameterKeys arrays and the label of the renamed node | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 80 | // Step 1: Remove inline {{ parameter.key }} references | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 85 | // Step 2: Remove from parameterKeys arrays | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 280 | // Step 1: Update inline {{ old_key }} references to {{ new_key }} | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 285 | // Step 2: Update parameterKeys arrays | COMMENT |
| LOW | tests/unit/test_workflow_schema_field_preservation.py | 374 | # Step 1: Build existing field assignments | STRING |
| LOW | tests/unit/test_workflow_schema_field_preservation.py | 386 | # Step 2: SKY-8965 Phase 2 — deterministic picker preserves existing | STRING |
| LOW⚡ | tests/unit/workflow/test_browser_session_id_template.py | 244 | # Step 1: Register context (like initialize_workflow_run_context does) | COMMENT |
| LOW⚡ | tests/unit/workflow/test_browser_session_id_template.py | 254 | # Step 2: Simulate auto_create_browser_session_if_needed returning a session, | COMMENT |
| LOW⚡ | tests/unit/workflow/test_browser_session_id_template.py | 260 | # Step 3: Verify template rendering (as _execute_workflow_blocks would) | COMMENT |
| LOW | …ions/2025_10_30_1414-541870962332_add_folders_table.py | 24 | # Step 1: Create folders table | COMMENT |
| LOW | …ions/2025_10_30_1414-541870962332_add_folders_table.py | 56 | # Step 2: Add folder_id to workflows table | COMMENT |
| LOW⚡ | …ions/2025_10_30_1414-541870962332_add_folders_table.py | 81 | # Step 1: Remove folder_id from workflows table (must be done before dropping folders table) | COMMENT |
| LOW⚡ | …ions/2025_10_30_1414-541870962332_add_folders_table.py | 86 | # Step 2: Drop folders table | COMMENT |
| LOW | skills/skyvern/SKILL.md | 11 | ## Step 1: Classify Your Task (ALWAYS do this first) | COMMENT |
| LOW | skills/skyvern/SKILL.md | 25 | ## Step 2: Apply These Decision Rules | COMMENT |
| LOW | skills/skyvern/SKILL.md | 34 | ## Step 3: Create a Session | COMMENT |
| LOW | skills/skyvern/SKILL.md | 52 | ## Step 4: Execute by Classification | COMMENT |
| LOW | skills/skyvern/SKILL.md | 138 | ## Step 5: Verify | COMMENT |
| LOW | skills/skyvern/SKILL.md | 148 | ## Step 6: Error Recovery | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 3981 | # Step 1: Get or create ScriptBlock record for this revision | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 4014 | # Step 2: Create or update ScriptFile with content deduplication | COMMENT |
| LOW⚡ | skyvern/webeye/utils/dom.py | 1109 | # Step 1: Use native element.scrollIntoView() which handles both window scrolling | COMMENT |
| LOW⚡ | skyvern/webeye/utils/dom.py | 1150 | # Step 2: Playwright actionability confirmation. After Step 1, the element should | COMMENT |
| LOW⚡ | skyvern/cli/browser.py | 252 | # Step 1: Check if debugging is already enabled | COMMENT |
| LOW⚡ | skyvern/cli/browser.py | 266 | # Step 2: Guide the user to enable Chrome remote debugging. | COMMENT |
| LOW⚡ | skyvern/cli/browser.py | 274 | # Step 3: Auto-discover the debugging server with retries | COMMENT |
| LOW | skyvern/cli/browser.py | 293 | # Step 4: Fallback — ask for manual URL | COMMENT |
| LOW⚡ | skyvern/cli/setup_commands.py | 1013 | # Step 1: Credentials | COMMENT |
| LOW⚡ | skyvern/cli/setup_commands.py | 1022 | # Step 2: Detect tools | COMMENT |
| LOW | skyvern/cli/setup_commands.py | 1069 | # Step 3: Configure detected tools | COMMENT |
| LOW | skyvern/cli/skills/qa/SKILL.md | 35 | ## Step 1: Understand the Changes | COMMENT |
| LOW | skyvern/cli/skills/qa/SKILL.md | 67 | ## Step 2: Classify the Diff | COMMENT |
| LOW | skyvern/cli/skills/qa/SKILL.md | 83 | ## Step 3: Choose the Validation Strategy | COMMENT |
| LOW | skyvern/cli/skills/qa/SKILL.md | 335 | ## Step 5: Report Results | COMMENT |
| LOW | skyvern/cli/skills/qa/SKILL.md | 369 | ## Step 6: Post Evidence to PR | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 47 | ## Step 1: Understand the Changes | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 79 | ## Step 2: Classify the Diff | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 95 | ## Step 3: Choose the Validation Strategy | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 159 | ## Step 4: Start the App | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 178 | ## Step 5: Generate Smoke Test Cases | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 212 | ## Step 6: Run Tests via Browser Tools | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 312 | ## Step 7: Report Results | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 360 | ## Step 8: Post to PR | COMMENT |
| LOW | skyvern/cli/skills/skyvern/SKILL.md | 11 | ## Step 1: Classify Your Task (ALWAYS do this first) | COMMENT |
| LOW | skyvern/cli/skills/skyvern/SKILL.md | 25 | ## Step 2: Apply These Decision Rules | COMMENT |
| LOW | skyvern/cli/skills/skyvern/SKILL.md | 34 | ## Step 3: Create a Session | COMMENT |
| LOW | skyvern/cli/skills/skyvern/SKILL.md | 52 | ## Step 4: Execute by Classification | COMMENT |
| LOW | skyvern/cli/skills/skyvern/SKILL.md | 138 | ## Step 5: Verify | COMMENT |
| LOW | skyvern/cli/skills/skyvern/SKILL.md | 148 | ## Step 6: Error Recovery | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 159 | ### Step 1: Create and run | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 163 | ### Step 2: Check status | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 170 | ### Step 3: Fix and re-run | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 249 | ## Step 1: Read the Error | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 846 | ## Step 5: Post Evidence to PR | COMMENT |
| 25 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/fake_workflow_run_context.py | 42 | def update_block_metadata(self, label: str, metadata: dict[str, Any]) -> None: | CODE |
| LOW⚡ | tests/unit/fake_workflow_run_context.py | 51 | def set_value(self, key: str, value: Any) -> None: | CODE |
| LOW | tests/unit/test_block_description_caching.py | 53 | def _setup_mocks(mock_app: MagicMock) -> None: | CODE |
| LOW⚡ | tests/unit/test_cdp_connection_retry.py | 19 | def _set_budget(monkeypatch: pytest.MonkeyPatch, attempts: int, backoff: list[float]) -> None: | CODE |
| LOW | tests/unit/test_quickstart_command.py | 26 | def _set_home(monkeypatch, home: Path) -> None: | CODE |
| LOW | …test_real_browser_state_discards_orphaned_tab_video.py | 61 | async def _set_working_page(page: MagicMock | None, index: int = 0) -> None: | CODE |
| LOW | …test_real_browser_state_discards_orphaned_tab_video.py | 122 | async def _set_working_page(page: MagicMock | None, index: int = 0) -> None: | CODE |
| LOW | …unit/test_copilot_code_artifact_metadata_violations.py | 905 | def set_attributes(self, fields: dict) -> None: | STRING |
| LOW | tests/unit/test_copilot_completion_verification.py | 3057 | def _set_workflow_labels(ctx: CopilotContext, *labels: str) -> None: | STRING |
| LOW⚡ | tests/unit/test_pdf_download_fixes.py | 471 | def _setup_context(self) -> None: | CODE |
| LOW | tests/unit/test_artifact_url_expiry_org_config.py | 410 | __all__ = [ | CODE |
| LOW⚡ | tests/unit/test_collapse_fanout_gates.py | 63 | def _set_provider(monkeypatch: pytest.MonkeyPatch, provider: FakeExperimentationProvider) -> None: | CODE |
| LOW | tests/unit/test_copilot_frontier.py | 1305 | def _set_failure_ctx(ctx: CopilotContext, definition: _FakeDefinition, reason: str) -> None: | STRING |
| LOW | tests/unit/test_feature_flag_resolution_logging.py | 68 | def _set_context() -> None: | CODE |
| LOW | tests/unit/test_feature_flag_resolution_logging.py | 81 | def _set_logger(monkeypatch: pytest.MonkeyPatch, logger: CaptureLogger) -> None: | CODE |
| LOW | tests/unit/workflow/test_dag_engine.py | 79 | def update_block_metadata(self, label: str, metadata: dict) -> None: | CODE |
| LOW⚡ | tests/unit/workflow/test_code_block_escalation.py | 177 | async def _update_workflow_run_block(**kwargs: object) -> None: | CODE |
| LOW | scripts/patch_generated_client.py | 77 | FORWARD_REFS_OLD = """def update_forward_refs(model: Type["Model"], **localns: Any) -> None: | CODE |
| LOW | scripts/patch_generated_client.py | 83 | FORWARD_REFS_NEW = """def update_forward_refs(model: Type["Model"], **localns: Any) -> None: | CODE |
| LOW | skyvern/__init__.py | 52 | __all__ = ["__version__", *_base_lazy_imports, *_server_lazy_imports] | CODE |
| LOW | skyvern/settings_manager.py | 13 | def set_settings(settings: Settings) -> None: | CODE |
| LOW⚡ | skyvern/core/script_generations/script_skyvern_page.py | 1115 | async def _update_step_output_before_complete(self, context: skyvern_context.SkyvernContext) -> None: | CODE |
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 1171 | def set_run_context(self, run_context: RunContext) -> None: | CODE |
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 1179 | def set_cached_fn(self, cache_key: str, fn: Callable) -> None: | CODE |
| LOW | skyvern/experimentation/__init__.py | 5 | __all__ = ["WaitConfig", "get_wait_config_from_experiment", "WAIT_VARIANTS"] | CODE |
| LOW | skyvern/webeye/browser_state.py | 56 | async def set_working_page(self, page: Page | None, index: int = 0) -> None: ... | CODE |
| LOW | skyvern/webeye/browser_state.py | 58 | async def set_active_page(self, page: Page) -> None: ... | CODE |
| LOW | skyvern/webeye/dialog_handler.py | 118 | def set_dialog_handler(browser_context: BrowserContext) -> None: | CODE |
| LOW | skyvern/webeye/real_browser_state.py | 339 | async def set_working_page(self, page: Page | None, index: int = 0) -> None: | CODE |
| LOW | skyvern/webeye/real_browser_state.py | 345 | async def set_active_page(self, page: Page) -> None: | CODE |
| LOW | skyvern/webeye/browser_factory.py | 134 | def set_browser_console_log(browser_context: BrowserContext, browser_artifacts: BrowserArtifacts) -> None: | CODE |
| LOW | skyvern/webeye/browser_factory.py | 161 | def set_popup_video_listener(browser_context: BrowserContext, browser_artifacts: BrowserArtifacts) -> None: | CODE |
| LOW | skyvern/webeye/cdp_download_interceptor.py | 345 | def set_download_dir(self, download_dir: str) -> None: | CODE |
| LOW | skyvern/webeye/real_browser_manager.py | 541 | def set_video_artifact_for_task(self, task: Task, artifacts: list[VideoArtifact]) -> None: | CODE |
| LOW | skyvern/webeye/browser_manager.py | 65 | def set_video_artifact_for_task(self, task: Task, artifacts: list[VideoArtifact]) -> None: ... | CODE |
| LOW | skyvern/webeye/scraper/scraper.py | 715 | def set_element_tree_trimmed(self, element_tree_trimmed: list[dict]) -> None: | CODE |
| LOW | skyvern/webeye/utils/page.py | 1003 | async def _set_enriched_element_tree_flag(self) -> None: | STRING |
| LOW | skyvern/webeye/actions/actions.py | 183 | def set_has_mini_agent(self) -> None: | CODE |
| LOW | skyvern/library/__init__.py | 8 | __all__ = ["Skyvern"] | CODE |
| LOW | skyvern/cli/__init__.py | 3 | __all__ = [ | CODE |
| LOW | skyvern/cli/llm_setup.py | 90 | def set_env_var(key: str, value: str) -> None: | CODE |
| LOW | skyvern/cli/init_command.py | 408 | def set_env_var(key: str, value: str) -> None: | CODE |
| LOW | skyvern/cli/core/session_manager.py | 278 | def set_current_session(state: SessionState) -> None: | CODE |
| LOW | skyvern/cli/core/session_manager.py | 299 | def set_stateless_http_mode(enabled: bool) -> None: | CODE |
| LOW | skyvern/cli/core/__init__.py | 36 | __all__ = [ | CODE |
| LOW | skyvern/cli/core/result.py | 44 | def set_concise_responses(enabled: bool) -> None: | CODE |
| LOW | skyvern/cli/core/unified_server.py | 59 | def _setup_routes(self) -> None: | CODE |
| LOW | skyvern/cli/mcp_tools/origin_middleware.py | 134 | __all__ = ["MCP_LOOPBACK_HOSTS", "MCP_ORIGIN_HOSTS", "OriginValidationMiddleware", "is_allowed_origin"] | CODE |
| LOW⚡ | skyvern/cli/mcp_tools/_common.py | 70 | __all__ = [ | CODE |
| LOW | skyvern/cli/mcp_tools/__init__.py | 516 | __all__ = [ | STRING |
| LOW | skyvern/cli/mcp_tools/response.py | 199 | __all__ = [ | CODE |
| LOW | skyvern/cli/mcp_tools/_session.py | 26 | __all__ = [ | CODE |
| LOW | skyvern/cli/mcp_tools/_client.py | 11 | __all__ = ["get_skyvern"] | CODE |
| LOW | skyvern/cli/mcp_tools/schedule.py | 568 | __all__ = [ | CODE |
| LOW | skyvern/cli/mcp_tools/code_block.py | 182 | __all__ = ["skyvern_code_block_lint", "skyvern_code_block_synthesize"] | CODE |
| LOW | skyvern/schemas/llm.py | 6 | __all__ = [ | CODE |
| LOW | skyvern/forge/__init__.py | 14 | def set_app(self, inst: ForgeApp) -> None: | CODE |
| LOW | skyvern/forge/__init__.py | 38 | def set_force_app_instance(inst: ForgeApp) -> None: | CODE |
| LOW⚡ | skyvern/forge/agent_functions.py | 1173 | async def set_workflow_schedule_enabled(self, backend_schedule_id: str, enabled: bool) -> None: | CODE |
| LOW | skyvern/forge/sdk/settings_manager.py | 3 | __all__ = ["SettingsManager"] | CODE |
| 66 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_cached_script_deploy_service.py | 81 | CODE | |
| LOW | …sts/unit/test_chain_click_blocked_anchor_navigation.py | 304 | CODE | |
| LOW | tests/unit/test_llm_handler_parity_characterization.py | 236 | CODE | |
| LOW | tests/unit/test_llm_handler_parity_characterization.py | 285 | CODE | |
| LOW | tests/unit/test_schedule_mcp_tools.py | 27 | CODE | |
| LOW | tests/unit/test_copilot_failure_tracking.py | 32 | CODE | |
| LOW | tests/unit/copilot_test_helpers.py | 163 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page_ai.py | 36 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 300 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 1587 | CODE | |
| LOW | skyvern/core/script_generations/generate_script.py | 3175 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page.py | 539 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page.py | 656 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page.py | 1003 | CODE | |
| LOW | skyvern/webeye/browser_state.py | 23 | CODE | |
| LOW | skyvern/webeye/browser_state.py | 40 | CODE | |
| LOW | skyvern/webeye/browser_state.py | 68 | CODE | |
| LOW | skyvern/webeye/browser_state.py | 101 | CODE | |
| LOW | skyvern/webeye/persistent_sessions_manager.py | 92 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 149 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 350 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 448 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 560 | CODE | |
| LOW | skyvern/webeye/default_persistent_sessions_manager.py | 342 | CODE | |
| LOW | skyvern/webeye/real_browser_manager.py | 187 | CODE | |
| LOW | skyvern/webeye/scraper/scraper.py | 190 | CODE | |
| LOW | skyvern/webeye/scraper/scraper.py | 386 | CODE | |
| LOW | skyvern/webeye/actions/handler.py | 6262 | CODE | |
| LOW | skyvern/library/skyvern.py | 294 | CODE | |
| LOW | skyvern/library/skyvern.py | 351 | CODE | |
| LOW | skyvern/library/skyvern.py | 407 | CODE | |
| LOW | skyvern/library/embedded_server_factory.py | 127 | CODE | |
| LOW | skyvern/library/skyvern_browser_page_agent.py | 42 | CODE | |
| LOW | skyvern/library/skyvern_browser_page_agent.py | 108 | CODE | |
| LOW | skyvern/library/skyvern_browser_page_agent.py | 123 | CODE | |
| LOW | skyvern/library/skyvern_browser_page_agent.py | 155 | CODE | |
| LOW | skyvern/library/skyvern_browser_page_agent.py | 172 | CODE | |
| LOW | skyvern/library/skyvern_browser_page_agent.py | 289 | CODE | |
| LOW | skyvern/library/skyvern_browser_page_agent.py | 343 | CODE | |
| LOW | skyvern/library/skyvern_browser_page_ai.py | 79 | CODE | |
| LOW | skyvern/cli/credentials.py | 59 | CODE | |
| LOW | skyvern/cli/schedule_command.py | 181 | CODE | |
| LOW | skyvern/cli/schedule_command.py | 214 | CODE | |
| LOW | skyvern/cli/setup_commands.py | 1184 | CODE | |
| LOW | skyvern/cli/setup_commands.py | 1226 | CODE | |
| LOW | skyvern/cli/setup_commands.py | 1274 | CODE | |
| LOW | skyvern/cli/setup_commands.py | 1300 | CODE | |
| LOW | skyvern/cli/setup_commands.py | 1339 | CODE | |
| LOW | skyvern/cli/setup_commands.py | 1455 | CODE | |
| LOW | skyvern/cli/workflow.py | 271 | CODE | |
| LOW | skyvern/cli/init_command.py | 328 | CODE | |
| LOW | skyvern/cli/init_command.py | 346 | CODE | |
| LOW | skyvern/cli/init_command.py | 363 | CODE | |
| LOW | skyvern/cli/quickstart.py | 764 | CODE | |
| LOW | skyvern/cli/commands/browser.py | 470 | CODE | |
| LOW | skyvern/cli/commands/browser.py | 682 | CODE | |
| LOW | skyvern/cli/commands/browser.py | 781 | CODE | |
| LOW | skyvern/cli/commands/browser.py | 911 | CODE | |
| LOW | skyvern/cli/commands/browser.py | 1014 | CODE | |
| LOW | skyvern/cli/commands/browser.py | 1180 | CODE | |
| 109 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_workflow_schema_field_preservation.py | 30 | # Check if real LLM tests should run (set RUN_LLM_TESTS=1 to enable) | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 285 | # Check if this task has existing field names to preserve | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 3605 | # Check if already cached (for progressive caching) | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 3675 | # Check if the reviewer has already provided code for this block | COMMENT |
| LOW | skyvern/core/script_generations/skyvern_page.py | 903 | # Check if the value persisted | COMMENT |
| LOW | skyvern/experimentation/wait_config.py | 170 | # Check if user is in the experiment | COMMENT |
| LOW | skyvern/webeye/browser_factory.py | 952 | # Check if Chrome is already running | COMMENT |
| LOW | skyvern/webeye/scraper/scraped_page.py | 122 | # Check if the element is self-closing | COMMENT |
| LOW⚡ | skyvern/webeye/actions/handler.py | 4364 | # Check if we should terminate instead of complete | COMMENT |
| LOW | skyvern/webeye/actions/handler.py | 2886 | # Check if cached TOTP has expired | COMMENT |
| LOW | skyvern/cli/doctor.py | 291 | # Check if any tools are even installed (binary on PATH or config dir exists) | COMMENT |
| LOW | skyvern/cli/quickstart.py | 929 | # Check if Docker Compose option was explicitly requested or offer choice | COMMENT |
| LOW | skyvern/cli/commands/browser.py | 1530 | # Check if Chrome process is still alive | COMMENT |
| LOW | skyvern/cli/commands/browser.py | 1616 | # Check if ngrok is installed | COMMENT |
| LOW | skyvern/cli/commands/browser.py | 1626 | # Check if ngrok auth token is configured | COMMENT |
| LOW | skyvern/cli/commands/browser.py | 1650 | # Check if ngrok died (e.g. bad auth token, port conflict) | COMMENT |
| LOW | skyvern/forge/agent.py | 2063 | # Check if Skyvern already returned a complete action, if so, don't run user goal check | COMMENT |
| LOW | skyvern/forge/agent.py | 2254 | # Check if the src is a data URI with base64 encoded PDF | COMMENT |
| LOW | skyvern/forge/agent.py | 3105 | # Check if we should use the termination-aware prompt (experiment) | COMMENT |
| LOW | skyvern/forge/agent.py | 3240 | # Check if we should terminate instead of complete | COMMENT |
| LOW | skyvern/forge/agent.py | 3564 | # Check if we have pre-scraped data from parallel verification optimization | COMMENT |
| LOW | skyvern/forge/agent.py | 4121 | # Check if prompt caching is enabled for extract-action | COMMENT |
| LOW | skyvern/forge/agent.py | 4450 | # Check if inputs are close together or have similar attributes | COMMENT |
| LOW | skyvern/forge/agent.py | 4510 | # Check if we have multiple consecutive single-digit INPUT_TEXT actions | COMMENT |
| LOW | skyvern/forge/agent.py | 5756 | # Check if this is an LLM provider error | COMMENT |
| LOW | skyvern/forge/agent.py | 5814 | # Check if we have LLM errors even if the summarization failed | COMMENT |
| LOW | skyvern/forge/agent.py | 5883 | # Check if this is an LLM provider error | COMMENT |
| LOW | skyvern/forge/agent.py | 5961 | # Check if we have LLM errors even if the summarization failed | COMMENT |
| LOW | skyvern/forge/agent.py | 6104 | # Check if parallel verification should be used | COMMENT |
| LOW | skyvern/forge/sdk/models.py | 124 | # Check if there is a successful complete action | COMMENT |
| LOW | skyvern/forge/sdk/models.py | 160 | # Check if there is a successful terminate action | COMMENT |
| LOW | skyvern/forge/sdk/forge_log.py | 347 | # Check if it's a subclass of known exception types | COMMENT |
| LOW | skyvern/forge/sdk/forge_log.py | 396 | # Check if exception is a subclass of transient exceptions | COMMENT |
| LOW | skyvern/forge/sdk/forge_log.py | 403 | # Check if exception is a subclass of bug exceptions | COMMENT |
| LOW | …rn/forge/sdk/workflow/workflow_definition_converter.py | 112 | # Check if user's trying to manually create an output parameter | COMMENT |
| LOW | …rn/forge/sdk/workflow/workflow_definition_converter.py | 125 | # Check if any parameter keys collide with automatically created output parameter keys | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 2621 | # Check if there's a related workflow script that should be used instead. | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 2682 | # Check if there's a finally block configured | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 4086 | # Check if this block is designated as requires_agent by the script reviewer. | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 4094 | # Check if this block has never been cached (e.g. from an unexecuted | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 5913 | # Check if this workflow/org should use browser sessions (anti-bot detection mitigation) | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 8569 | # Check if the script is pinned — skip auto-review for pinned scripts. | COMMENT |
| LOW | skyvern/forge/sdk/workflow/context_manager.py | 615 | # Check if it's in the format vault_id:item_id | COMMENT |
| LOW | skyvern/forge/sdk/workflow/context_manager.py | 835 | # Check if item is None | COMMENT |
| LOW⚡ | skyvern/forge/sdk/workflow/models/block.py | 9134 | # Check if file_path is a URL or managed storage URI | COMMENT |
| LOW⚡ | skyvern/forge/sdk/workflow/models/block.py | 9142 | # Check if file is in allowed directories | COMMENT |
| LOW⚡ | skyvern/forge/sdk/workflow/models/block.py | 9152 | # Check if file is within any allowed directory | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 1957 | # Check if this looks like a parameter path (contains dots and/or _output) | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 6642 | # Check if the recipient is a parameter and get its value | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 6720 | # Check if the filename has an extension | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 8395 | # Check if timeout_seconds has elapsed | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 8904 | # Check if url is a parameter | COMMENT |
| LOW | skyvern/forge/sdk/db/repositories/folders.py | 174 | # Check if folder exists | COMMENT |
| LOW | skyvern/forge/sdk/api/files.py | 202 | # Check if URL is a Google Drive link | COMMENT |
| LOW | skyvern/forge/sdk/api/files.py | 210 | # Check if URL is a cloud storage URI handled by the configured storage backend. | COMMENT |
| LOW | skyvern/forge/sdk/api/files.py | 233 | # Check if URL is a file:// URI | COMMENT |
| LOW⚡ | skyvern/forge/sdk/api/llm/schema_validator.py | 75 | # Check if null is allowed in the schema type | COMMENT |
| LOW | skyvern/forge/sdk/api/llm/api_handler_factory.py | 1283 | # Check if this is an OpenAI model | COMMENT |
| LOW | skyvern/forge/sdk/api/llm/api_handler_factory.py | 2045 | # Check if this is an OpenAI model | COMMENT |
| LOW | skyvern/forge/sdk/api/llm/utils.py | 326 | # Check if the next non-whitespace character is a JSON structure character | COMMENT |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/unit/test_script_skyvern_page.py | 971 | assert "654321" not in script_page._ai.ai_input_text.await_args.kwargs.values() | CODE |
| CRITICAL | tests/unit/test_script_skyvern_page.py | 1191 | assert "654321" not in script_page._ai.ai_input_text.await_args.kwargs.values() | CODE |
| CRITICAL⚡ | tests/unit/test_copilot_probable_site_block.py | 364 | assert "configure a proxy" in exc_info.value.halt.blocker_signal.user_facing_reason.lower() | STRING |
| CRITICAL | tests/unit/webeye/test_main_world_eval.py | 87 | page.context.new_cdp_session.return_value.detach.assert_awaited_once() | CODE |
| CRITICAL⚡ | tests/smoke_tests/test_prompts.py | 159 | # response = await openai_client.client.chat.completions.with_raw_response.create(**llm_request) | COMMENT |
| CRITICAL | tests/smoke_tests/test_prompts.py | 188 | # response = await openai_client.client.chat.completions.with_raw_response.create(**llm_request) | COMMENT |
| CRITICAL | tests/smoke_tests/test_prompts.py | 214 | # response = await openai_client.client.chat.completions.with_raw_response.create(**llm_request) | COMMENT |
| CRITICAL | skyvern/forge/sdk/api/real_azure.py | 8 | from azure.core.exceptions import ResourceNotFoundError | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1058 | // Step 1: Remove inline {{ deleted_block_output }} references from all nodes | COMMENT |
| LOW⚡ | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1065 | // Step 2: Remove from parameterKeys arrays and handle special cases | COMMENT |
| LOW⚡ | …end/src/routes/workflows/editor/workflowEditorUtils.ts | 3851 | // Step 1: Update inline {{ old_output }} references to {{ new_output }} | COMMENT |
| LOW⚡ | …end/src/routes/workflows/editor/workflowEditorUtils.ts | 3858 | // Step 2: Update parameterKeys arrays and the label of the renamed node | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 80 | // Step 1: Remove inline {{ parameter.key }} references | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 85 | // Step 2: Remove from parameterKeys arrays | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 280 | // Step 1: Update inline {{ old_key }} references to {{ new_key }} | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 285 | // Step 2: Update parameterKeys arrays | COMMENT |
| LOW | tests/unit/test_workflow_schema_field_preservation.py | 374 | # Step 1: Build existing field assignments | STRING |
| LOW | tests/unit/test_workflow_schema_field_preservation.py | 386 | # Step 2: SKY-8965 Phase 2 — deterministic picker preserves existing | STRING |
| LOW⚡ | tests/unit/workflow/test_browser_session_id_template.py | 244 | # Step 1: Register context (like initialize_workflow_run_context does) | COMMENT |
| LOW⚡ | tests/unit/workflow/test_browser_session_id_template.py | 254 | # Step 2: Simulate auto_create_browser_session_if_needed returning a session, | COMMENT |
| LOW⚡ | tests/unit/workflow/test_browser_session_id_template.py | 260 | # Step 3: Verify template rendering (as _execute_workflow_blocks would) | COMMENT |
| LOW | …ions/2025_10_30_1414-541870962332_add_folders_table.py | 24 | # Step 1: Create folders table | COMMENT |
| LOW | …ions/2025_10_30_1414-541870962332_add_folders_table.py | 56 | # Step 2: Add folder_id to workflows table | COMMENT |
| LOW⚡ | …ions/2025_10_30_1414-541870962332_add_folders_table.py | 81 | # Step 1: Remove folder_id from workflows table (must be done before dropping folders table) | COMMENT |
| LOW⚡ | …ions/2025_10_30_1414-541870962332_add_folders_table.py | 86 | # Step 2: Drop folders table | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 3981 | # Step 1: Get or create ScriptBlock record for this revision | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 4014 | # Step 2: Create or update ScriptFile with content deduplication | COMMENT |
| LOW⚡ | skyvern/webeye/utils/dom.py | 1109 | # Step 1: Use native element.scrollIntoView() which handles both window scrolling | COMMENT |
| LOW⚡ | skyvern/webeye/utils/dom.py | 1150 | # Step 2: Playwright actionability confirmation. After Step 1, the element should | COMMENT |
| LOW⚡ | skyvern/cli/browser.py | 252 | # Step 1: Check if debugging is already enabled | COMMENT |
| LOW⚡ | skyvern/cli/browser.py | 266 | # Step 2: Guide the user to enable Chrome remote debugging. | COMMENT |
| LOW⚡ | skyvern/cli/browser.py | 274 | # Step 3: Auto-discover the debugging server with retries | COMMENT |
| LOW | skyvern/cli/browser.py | 293 | # Step 4: Fallback — ask for manual URL | COMMENT |
| LOW⚡ | skyvern/cli/setup_commands.py | 1013 | # Step 1: Credentials | COMMENT |
| LOW⚡ | skyvern/cli/setup_commands.py | 1022 | # Step 2: Detect tools | COMMENT |
| LOW | skyvern/cli/setup_commands.py | 1069 | # Step 3: Configure detected tools | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 159 | ### Step 1: Create and run | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 163 | ### Step 2: Check status | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 170 | ### Step 3: Fix and re-run | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 249 | ## Step 1: Read the Error | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 846 | ## Step 5: Post Evidence to PR | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 184 | ### Step 4: Verify output | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 267 | ## Step 2: Diagnose the Pattern | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 309 | ## Step 3: Fix and Re-run | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 323 | ## Step 4: Escalation | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 519 | ## Step 1: Understand the Changes | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 564 | ## Step 2: Choose the Validation Strategy | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 814 | ## Step 4: Report Results | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 1008 | ## Step 1: Understand the Changes | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 1030 | ## Step 2: Choose the Validation Strategy | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 1083 | ## Step 4: Report Results | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 1113 | ## Step 5: Remote / Stateless Constraints | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 277 | # Step 1: Sanitize all block labels and collect the mapping | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 284 | # Step 2: Sanitize all parameter keys and collect the mapping | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 377 | # Step 5: Update parameter_keys arrays in blocks | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 383 | # Step 6: Update finally_block_label if it references an old label | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 389 | # Step 7: Update next_block_label in all blocks | COMMENT |
| LOW | skyvern/schemas/workflows.py | 301 | # Step 3: Update all block label references | COMMENT |
| LOW | skyvern/schemas/workflows.py | 340 | # Step 4: Update all parameter key references | COMMENT |
| LOW | skyvern/forge/sdk/copilot/tools/__init__.py | 699 | # Step 1: Update the workflow | COMMENT |
| LOW | skyvern/forge/sdk/copilot/tools/__init__.py | 755 | # Step 2: Compute frontier and run the blocks. | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 1930 | # If the loop_data is a dict, we need to check if the key exists in the loop_data | COMMENT |
| LOW⚡ | skyvern/forge/sdk/services/bitwarden.py | 673 | # Step 4: Log out | COMMENT |
| LOW | skyvern/forge/sdk/services/bitwarden.py | 761 | # Step 3: Retrieve the items | COMMENT |
| LOW | skyvern/forge/sdk/services/bitwarden.py | 815 | # Step 4: Log out | COMMENT |
| LOW | skyvern/forge/sdk/services/bitwarden.py | 923 | # Step 3: Get the item | COMMENT |
| LOW | skyvern/forge/sdk/services/bitwarden.py | 979 | # Step 4: Log out | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …rn-frontend/src/util/onboarding/OnboardingTelemetry.ts | 143 | // -- Error events (rollback guardrails) -- | COMMENT |
| MEDIUM | …nit/test_action_to_stmt_credential_totp_inheritance.py | 77 | # `totp_identifier=` explicitly on the block. Mirrors the agentic | COMMENT |
| MEDIUM | …nit/test_action_to_stmt_credential_totp_inheritance.py | 206 | # agentic walk over `block.get_all_parameters(...)`. | COMMENT |
| MEDIUM | …nit/test_action_to_stmt_credential_totp_inheritance.py | 232 | # Block has no credential parameter bound — matches the agentic case | COMMENT |
| MEDIUM | tests/unit/test_copilot_build_phase.py | 69 | # with an empty-blocks scaffold workflow flips `has_workflow=True` | COMMENT |
| MEDIUM⚡ | tests/unit/test_validation_evidence_router_prompts.py | 141 | # invites it to hallucinate visual evidence. The no-page branch must not | COMMENT |
| MEDIUM⚡ | tests/unit/test_mcp_workflow_tools.py | 291 | # Prove the exact Slack scenario: MCP agent hallucinates various model strings | COMMENT |
| MEDIUM | tests/unit/test_domutils_scroll_helpers_gating.py | 123 | # And the helper that orchestrates the scroll loop defaults to False. | COMMENT |
| MEDIUM⚡ | tests/unit/test_copilot_composition_evidence.py | 1653 | # The first goto_url is the scaffold the agent scouts from — never gated. | STRING |
| MEDIUM | skills/skyvern/references/prompt-writing.md | 23 | ## Reliability guardrails | COMMENT |
| MEDIUM | skyvern/webeye/actions/parse_actions.py | 126 | # LLM sometimes hallucinates and returns element id for non-web actions such as WAIT, TERMINATE, COMPLETE etc. | COMMENT |
| MEDIUM | skyvern/cli/skills/skyvern/references/prompt-writing.md | 23 | ## Reliability guardrails | COMMENT |
| MEDIUM | skyvern/forge/failure_classifier.py | 219 | # LLM reasoning error (wrong action, hallucination) | COMMENT |
| MEDIUM | skyvern/forge/agent.py | 237 | # Exception types that indicate an LLM-specific step failure (context window, provider errors). | COMMENT |
| MEDIUM | skyvern/forge/agent.py | 798 | # 1. CUA executes only one action step by step -- it's pretty less likely to have a hallucination for completion | COMMENT |
| MEDIUM | skyvern/forge/agent.py | 5863 | # LLM-specific failure (e.g. context window exceeded) | COMMENT |
| MEDIUM | skyvern/forge/agent_functions.py | 1591 | # from element attributes to make sure this won't increase hallucination | COMMENT |
| MEDIUM | skyvern/forge/sdk/core/skyvern_context.py | 171 | # v3 agentic reviewer — per-run cumulative budget. Initialized at workflow | COMMENT |
| MEDIUM | skyvern/forge/sdk/copilot/request_policy.py | 84 | # Gates guardrails.py's deferred-draft tool authority — narrower than the prompt set below. | COMMENT |
| MEDIUM | skyvern/forge/sdk/copilot/composition_evidence.py | 472 | # entrypoint scaffold — ungated so the agent can record it and scout from it. | COMMENT |
| MEDIUM | skyvern/forge/sdk/copilot/credential_pause.py | 242 | # (guardrails.py) skips the run for a skip_test-deferred credential, same as it | COMMENT |
| MEDIUM⚡ | skyvern/forge/sdk/copilot/code_block_preflight.py | 396 | # The wrapper scaffolding is static and valid, so any SyntaxError is in the supplied code — | COMMENT |
| MEDIUM⚡ | skyvern/forge/sdk/copilot/tools/guardrails.py | 57 | # Agents SDK guardrails may hand us either raw JSON or an already parsed mapping. | COMMENT |
| MEDIUM | skyvern/forge/sdk/copilot/tools/workflow_update.py | 6886 | # prepended extraction scaffolding; that shape is handled by preserve_submitted_extraction. | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/models/block.py | 4040 | # pre-copilot code blocks must never gain agentic recovery from the toggle alone. | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/models/block.py | 4546 | # "context" is a skyvern-defined field to reduce LLM hallucination | COMMENT |
| MEDIUM | skyvern/services/script_reviewer_v3/skills/validate.py | 211 | # agent doesn't hallucinate methods. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | entrypoint-skyvernui.sh | 21 | VITE_ARTIFACT_API_BASE_URL="${VITE_ARTIFACT_API_BASE_URL:-http://localhost:9090}" | COMMENT |
| LOW | conftest.py | 1 | from skyvern.forge.sdk.forge_log import setup_logger | COMMENT |
| LOW | pytest.ini | 1 | [pytest] | COMMENT |
| LOW | alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | alembic.ini | 21 | # string value is passed to dateutil.tz.gettz() | COMMENT |
| LOW | alembic.ini | 41 | # The path separator used here should be the separator specified by "version_path_separator" below. | COMMENT |
| LOW | alembic.ini | 61 | # output_encoding = utf-8 | COMMENT |
| LOW | pyproject.toml | 261 | COMMENT | |
| LOW | docker-compose.yml | 41 | - ./downloads:/data/downloads | COMMENT |
| LOW | docker-compose.yml | 81 | # - BROWSER_TYPE=cdp-connect | COMMENT |
| LOW | docker-compose.yml | 101 | # - LLM_KEY=GEMINI_3.0_FLASH | COMMENT |
| LOW | docker-compose.yml | 121 | # - LLM_KEY=OLLAMA | COMMENT |
| LOW | docker-compose.yml | 181 | - VITE_BROWSER_STREAMING_MODE=${VITE_BROWSER_STREAMING_MODE:-cdp} | COMMENT |
| LOW | docker-compose.yml | 201 | # image: vaultwarden/server:latest-alpine | COMMENT |
| LOW | docker-compose.yml | 221 | # # API credentials for vaultwarden | COMMENT |
| LOW | docker-compose.yml | 241 | # - ~/bitwarden-cli-config:/app/.config | COMMENT |
| LOW | skyvern-frontend/src/components/ui/css-vars.test.ts | 1 | import { describe, expect, it } from "vitest"; | COMMENT |
| LOW | …rontend/src/routes/workflows/copilot/narrativeState.ts | 161 | terminal: "response" | "error" | null; | COMMENT |
| LOW | …rontend/src/routes/workflows/copilot/narrativeState.ts | 181 | draftingSignaledAt: number | null; | COMMENT |
| LOW | …es/workflows/workflowRun/resizableTimelineSplitMath.ts | 1 | export const TIMELINE_SPLIT_STORAGE_KEY = "skyvern.runView.timelineSplit"; | COMMENT |
| LOW | …rontend/src/routes/workflows/components/CodeEditor.tsx | 81 | ...restProps | COMMENT |
| LOW | …utes/workflows/components/tagging/TagFilterControl.tsx | 41 | type Props = { | COMMENT |
| LOW | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 401 | // step. The canvas-only consumers that use FlowRenderer without the | COMMENT |
| LOW | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1401 | () => buildDragAnnouncements(nodes), | COMMENT |
| LOW | …ern-frontend/src/routes/workflows/editor/Workspace.tsx | 901 | // workflows when the parent route doesn't key by workflowPermanentId | COMMENT |
| LOW | …s/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx | 81 | /> | COMMENT |
| LOW | …s/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx | 181 | // ), | COMMENT |
| LOW | …editor/panels/BlockConfigForm/Taskv2BlockForm.test.tsx | 321 | // mutating the fixture, so the wrapper's `value` snapshot never moves | COMMENT |
| LOW | …/workflows/editor/collapse/scheduleCollapseRelayout.ts | 1 | // A container block (loop / conditional) drives a canvas re-layout whenever | COMMENT |
| LOW | …s/editor/collapse/applyDescendantCollapseVisibility.ts | 21 | .conditionalBranchId; | COMMENT |
| LOW | …utes/workflows/editor/collapse/useNodeCollapseStore.ts | 21 | toggleBlock: (workflowId: string, blockLabel: string) => void; | COMMENT |
| LOW | …utes/workflows/editor/collapse/useNodeCollapseStore.ts | 161 | // `<WorkflowScopeContext.Provider>` wrap is obvious during development, | COMMENT |
| LOW | …rc/routes/workflows/editor/hooks/useWorkflowHistory.ts | 221 | // independent of React's render/batch cycle. Fires synchronously | COMMENT |
| LOW | …rc/routes/workflows/editor/hooks/useWorkflowHistory.ts | 361 | // persisted state - mark dirty so the leave-page warning fires | COMMENT |
| LOW | …rc/routes/workflows/editor/hooks/useWorkflowHistory.ts | 381 | // History navigation is unsafe while an internal update is in | COMMENT |
| LOW | …ditor/hooks/useResolveDefaultGoogleSheetsCredential.ts | 81 | // the fill is silently unsaved and a later Run reads the stale credential_id | COMMENT |
| LOW | …utes/workflows/editor/selection/selectedRingClasses.ts | 1 | // Shared visual treatment for "this canvas element is the active selection." | COMMENT |
| LOW | …end/src/routes/workflows/editor/sortable/scope.test.ts | 321 | const keys = scopes.map(getScopeKey); | COMMENT |
| LOW | …n-frontend/src/routes/credentials/CredentialsModal.tsx | 1021 | COMMENT | |
| LOW | skyvern-frontend/src/store/useRecordingStore.ts | 561 | COMMENT | |
| LOW | k8s/charts/skyvern-ui/values.yaml | 1 | # Default values for skyvern-ui. | COMMENT |
| LOW | tests/unit/test_copilot_cancel_helpers.py | 161 | # _trusted_post_drain_status | COMMENT |
| LOW | tests/unit/workflow/test_reorder_graph_validation.py | 81 | COMMENT | |
| LOW | tests/smoke_tests/test_prompts.py | 141 | COMMENT | |
| LOW | tests/smoke_tests/test_prompts.py | 161 | # parse_response(chat_completion) | COMMENT |
| LOW | tests/smoke_tests/test_prompts.py | 181 | # screenshot4 = encode_image("tests/smoke_tests/data/geico_closest_coverage/geico_closest_coverage_prompt_ss4.png") | COMMENT |
| LOW | tests/smoke_tests/test_prompts.py | 201 | # elements=get_file("tests/smoke_tests/data/workable_yes_or_no/element_tree.json"), | COMMENT |
| LOW | scripts/test-install.sh | 1 | #!/bin/sh | COMMENT |
| LOW | skyvern/config.py | 201 | # Off preserves the historical implicit residential default for anti-bot-sensitive traffic. | COMMENT |
| LOW | skyvern/config.py | 301 | # local profile directory. Leave empty to use the in-repo template. | COMMENT |
| LOW | skyvern/config.py | 721 | # list means no redirect_uri may be supplied at all (the route layer rejects | COMMENT |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 1281 | context = skyvern_context.current() | COMMENT |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 1361 | # and double-count the call as both a hit/miss and a `lookup_error` | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 881 | value=_value(semantic), | COMMENT |
| LOW | …/core/script_generations/deterministic_field_naming.py | 61 | description: str | None = None | COMMENT |
| LOW | skyvern/webeye/scraper/scraped_page.py | 501 | # Defensive: callers today rebuild before reading, but future direct | COMMENT |
| LOW | skyvern/webeye/actions/handler.py | 8041 | current_url=scraped_page_refreshed.url, | COMMENT |
| LOW | skyvern/webeye/actions/handler.py | 8061 | # failure can't re-enter the except block and double-count the call as | COMMENT |
| LOW | skyvern/schemas/runs.py | 361 | # pins the forward-compat guarantee (unknown keys silently dropped). | COMMENT |
| LOW | skyvern/forge/sdk/core/skyvern_context.py | 201 | # preventing repeated injection loops when the captcha solver succeeds but the page doesn't change | COMMENT |
| 33 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/unit/test_cdp_connection_retry.py | 192 | """An invalid runtime override falls back to the settings field default (the robust | STRING |
| MEDIUM | tests/smoke_tests/test_prompts.py | 48 | EXTRACTED_INFORMATION_SCHEMA = """{'additionalProperties': False, 'properties': {'quotes': {'items': {'additionalPropert | CODE |
| MEDIUM⚡ | tests/smoke_tests/test_prompts.py | 169 | # navigation_goal="Navigate through the website until you generate an auto insurance quote. Only stay on the\nst | COMMENT |
| MEDIUM⚡ | tests/smoke_tests/test_prompts.py | 173 | # data_extraction_goal='Extract all quote information in JSON format including the premium amount, the timeframe | COMMENT |
| MEDIUM⚡ | skyvern/cli/lazy.py | 108 | # Click-version-robust group base | COMMENT |
| LOW | skyvern/forge/agent.py | 1088 | # TODO (kerem): keep the task object uptodate at all times so that clean_up_task can just use it | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 6956 | # soft-deleted (e.g. eval harness teardown fired while the orphan | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 7336 | # harness tears down a workflow while the run is still executing in | COMMENT |
| MEDIUM | skyvern/forge/sdk/db/repositories/scripts.py | 951 | # Join on both script_id and organization_id to leverage uc_org_script_version index. | COMMENT |
| LOW | skyvern/client/core/serialization.py | 180 | # then we can just pass the value through as is | COMMENT |
| LOW | skyvern/services/script_service.py | 3304 | # Invariant: loop_output_values was just set to [] above (step 5 setup). | COMMENT |
| MEDIUM | skyvern/services/browser_recording/service.py | 217 | # Base64, but Python's standard decoder is usually robust enough to | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | skyvern-ts/client/src/library/SkyvernBrowserPage.ts | 142 | // If the original selector doesn't work, try to click the element with the AI generated selector | COMMENT |
| HIGH | evaluation/results/webvoyager-Allrecipes.md | 36 | | 33 | Allrecipes--33 | completed | Find a recipe for a low-carb breakfast on Allrecipes with at least 25 rev | CODE |
| HIGH | skyvern/core/script_generations/script_skyvern_page.py | 1061 | # AI-generated cached scripts still get LLM verification. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 772 | def helper(): | CODE |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 781 | def helper(): | CODE |
| LOW | …unit/test_copilot_code_artifact_metadata_violations.py | 693 | def helper(): | CODE |
| LOW⚡ | tests/unit/test_copilot_code_block_synthesis.py | 1832 | "async def helper():\n" | STRING |
| LOW⚡ | tests/unit/test_copilot_code_block_synthesis.py | 1844 | "async def helper():\n" | STRING |
| LOW⚡ | tests/unit/test_copilot_code_block_synthesis.py | 1915 | "async def helper():\n" | STRING |
| LOW⚡ | tests/unit/test_copilot_code_block_synthesis.py | 1927 | "async def helper():\n" | STRING |
| LOW⚡ | skyvern/webeye/actions/handler.py | 915 | async def helper(element_dict: dict, frame: Page | Frame) -> bool: | CODE |
| LOW⚡ | skyvern/webeye/actions/handler.py | 941 | async def helper(element_dict: dict, frame: Page | Frame) -> bool: | CODE |
| LOW | skyvern/library/skyvern.py | 294 | async def run_task( | CODE |
| LOW | skyvern/library/skyvern_browser_page_agent.py | 42 | async def run_task( | CODE |
| LOW | skyvern/cli/commands/browser.py | 1180 | def run_task( | CODE |
| LOW | skyvern/forge/sdk/api/aws.py | 502 | async def run_task( | CODE |
| LOW | skyvern/forge/sdk/executor/background_task_executor.py | 24 | async def execute_task( | CODE |
| LOW | skyvern/forge/sdk/executor/async_executor.py | 11 | async def execute_task( | CODE |
| LOW | skyvern/forge/sdk/routes/agent_protocol.py | 250 | async def run_task( | CODE |
| LOW | skyvern/client/client.py | 155 | def run_task( | CODE |
| LOW | skyvern/client/client.py | 3382 | async def run_task( | CODE |
| LOW | skyvern/client/raw_client.py | 79 | def run_task( | CODE |
| LOW | skyvern/client/raw_client.py | 4698 | async def run_task( | CODE |
| LOW | skyvern/services/task_v1_service.py | 106 | async def run_task( | CODE |
| LOW | skyvern/services/script_service.py | 1868 | async def run_task( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker-compose.yml | 139 | # If you are looking to integrate Skyvern with a password manager (eg Bitwarden), you can use the following environm | COMMENT |
| MEDIUM | docker-compose.yml | 148 | # If you are looking to integrate Skyvern with 1Password, you can use the following environment variables. | COMMENT |
| MEDIUM | docker-compose.yml | 210 | # - 127.0.0.1:11002:80 # you can replace the 11002 with your preferred port | COMMENT |
| LOW | skyvern/forge/sdk/core/aiohttp_helper.py | 326 | # TODO: make sure to test this out | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_copilot_streaming_adapter.py | 289 | CODE | |
| MEDIUM | skyvern/forge/sdk/routes/scripts.py | 720 | CODE | |
| MEDIUM | skyvern/services/script_service.py | 1602 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 1014 | # TODO: add validation here. if it doesn't pass the validation criteria: | COMMENT |
| LOW | skyvern/webeye/cdp_download_interceptor.py | 377 | # TODO: implement proper filename dedup (e.g., content hash or UUID suffix) | COMMENT |
| LOW | skyvern/forge/agent_functions.py | 467 | # TODO: implement a fallback solution for "too large" case, maybe convert by screenshot | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-install.sh | 4 | # Usage: | COMMENT |