Automate browser based workflows with AI
This report summarizes scanner evidence for Skyvern-AI/skyvern, a Python project with 23,181 GitHub stars. SynthScan examined 1,673,638 lines of code across 5057 source files, recording 40982 pattern matches distributed across 27 syntactic categories. The legacy adjusted pattern signal is 25.0 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 31847 finding(s).
Are imports declared and package/API names verified? 4856 finding(s).
Are wrappers, guards, and repeated structures necessary? 34623 finding(s).
Which changes need focused human review? 40982 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 40982 distinct pattern matches across 27 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skyvern-frontend/localServer.js | 33 | function resolveOrganizationApiKey(env = process.env) { | CODE |
| LOW | skyvern-frontend/localServer.js | 46 | function formatApiBaseUrlForLogging(value) { | CODE |
| LOW | skyvern-frontend/localServer.js | 94 | function resolveLocalServerConfiguration({ | CODE |
| LOW | skyvern-frontend/localServer.js | 118 | function createUiSessionNonceManager(secret) { | CODE |
| LOW | skyvern-frontend/localServer.js | 155 | function issueUiSessionNonceCookie(request, response, nonceManager) { | CODE |
| LOW | skyvern-frontend/vite.config.ts | 31 | function resolveOrganizationApiKey(env: UiSessionEnvironment): string | null { | CODE |
| LOW | skyvern-frontend/src/util/timeFormat.ts | 94 | 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/novncGestureCrashGuard.ts | 12 | export function installNoVncGestureCrashGuard(): 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/env.ts | 67 | function setRuntimeCredentialReady(ready: Promise<unknown>): void { | CODE |
| LOW⚡ | skyvern-frontend/src/util/env.ts | 71 | function whenRuntimeCredentialReady(): Promise<unknown> { | CODE |
| LOW⚡ | skyvern-frontend/src/util/env.ts | 75 | function subscribeToRuntimeCredential(listener: () => void): () => void { | CODE |
| LOW⚡ | skyvern-frontend/src/util/env.ts | 82 | function notifyRuntimeCredentialChanged(): void { | CODE |
| LOW | skyvern-frontend/src/util/env.ts | 105 | function getRuntimeApiKeyExpiresAt(): number | null { | CODE |
| LOW | skyvern-frontend/src/util/failureCategoryDisplay.ts | 125 | function getFailureCategoryDisplay({ | 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 | 37 | export function markRecordBrowserProcessed(blockCount: number): void { | CODE |
| LOW | skyvern-frontend/src/util/recordBrowserTelemetry.ts | 48 | export function captureRecordBrowserUndoAfterRecordingIfRecent( | CODE |
| LOW | …yvern-frontend/src/util/onboarding/onboardingReplay.ts | 17 | function isOnboardingReplayRequested(): boolean { | CODE |
| LOW | …rn-frontend/src/util/onboarding/OnboardingTelemetry.ts | 128 | function questionnaireResponseProperties(input: QuestionnaireResponseInput) { | CODE |
| LOW | …rn-frontend/src/util/onboarding/OnboardingTelemetry.ts | 139 | function questionnaireAnswerProperties(answers: QuestionnaireAnswersV1) { | CODE |
| LOW | …ontend/src/util/onboarding/credentialSetupTelemetry.ts | 23 | function credentialSetupCtaClicked( | CODE |
| LOW | …ntend/src/util/onboarding/recoveryGuidanceTelemetry.ts | 107 | function hasRecoveryGuidanceTelemetryContext( | CODE |
| LOW | …ntend/src/util/onboarding/recoveryGuidanceTelemetry.ts | 125 | function isRecoveryGuidanceTelemetryContext( | CODE |
| LOW | …ntend/src/util/onboarding/recoveryGuidanceTelemetry.ts | 131 | function isRecoveryGuidanceRetryNavigation( | CODE |
| LOW | …ntend/src/util/onboarding/recoveryGuidanceTelemetry.ts | 142 | function getRecoveryGuidanceRetryContext( | CODE |
| LOW | …ntend/src/util/onboarding/recoveryGuidanceTelemetry.ts | 156 | function getRecoveryGuidanceRetryNavigation( | CODE |
| LOW | skyvern-frontend/src/util/onboarding/rolloutGating.ts | 26 | function isFirstFailedRunRecoveryEligible(args: { | CODE |
| LOW | …-frontend/src/providers/RuntimeFeatureFlagProvider.tsx | 7 | function RuntimeFeatureFlagProvider({ children }: PropsWithChildren) { | CODE |
| LOW | …ntend/src/components/ParameterAutocompleteDropdown.tsx | 37 | function ParameterAutocompleteDropdown({ | CODE |
| LOW | …frontend/src/components/WorkflowBlockInputTextarea.tsx | 36 | function WorkflowBlockInputTextarea(props: Props) { | CODE |
| LOW | …rc/components/AzureClientSecretCredentialTokenForm.tsx | 39 | export function AzureClientSecretCredentialTokenForm({ | CODE |
| LOW | …vern-frontend/src/components/browserStreamClipboard.ts | 80 | 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 | …rontend/src/components/ConnectedEmailAccountPicker.tsx | 106 | function ConnectedEmailAccountPicker({ | CODE |
| LOW | …ontend/src/components/CredentialFallbackRetryBadge.tsx | 14 | function CredentialFallbackRetryBadge({ retriedFromWorkflowRunId }: Props) { | 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 | 49 | function WorkflowDataSchemaInputGroup({ | CODE |
| LOW | …src/components/onboarding/FirstRunRecoveryGuidance.tsx | 26 | function shouldShowRecoveryGuidance({ | CODE |
| LOW | …frontend/src/hooks/useAnalyticsAnomalyDetectionFlag.ts | 6 | export function useAnalyticsAnomalyDetectionFlag(): boolean | undefined { | CODE |
| LOW | …rn-frontend/src/hooks/useShouldNotifyWhenClosingTab.ts | 3 | function useShouldNotifyWhenClosingTab(shouldNotify: boolean) { | CODE |
| LOW | …rn-frontend/src/hooks/useClearOrganizationAuthToken.ts | 16 | export function useClearOrganizationAuthToken({ | CODE |
| LOW | …yvern-frontend/src/hooks/useRecordingElapsedSeconds.ts | 5 | export function useRecordingElapsedSeconds(): number { | CODE |
| LOW | skyvern-frontend/src/hooks/useWorkflowTaggingEnabled.ts | 16 | function useWorkflowTaggingEnabled(): boolean { | 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 | 168 | function microphonePermissionErrorMessage(error: unknown): string { | CODE |
| LOW | skyvern-frontend/src/hooks/useSpeechToText.ts | 180 | async function requestMicrophonePermission(): Promise<void> { | CODE |
| 30017 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/test_click_desired_state.py | 1936 | " return !!(row && row.getAttribute('aria-selected') === 'true'); }", | CODE |
| HIGH | tests/unit/test_click_desired_state.py | 1949 | " return !!(row && row.classList.contains('app-picked')); }", | CODE |
| HIGH | tests/unit/test_taskv3_loop.py | 11280 | # no resolve_seconds -- absent, not null, so the two are distinguishable in the read. | COMMENT |
| HIGH | tests/unit/test_taskv3_loop.py | 13659 | assert not undefined, f"finish statuses the description does not define exactly once: {undefined}" | CODE |
| HIGH⚡ | tests/unit/test_multi_field_totp.py | 5078 | scope.nodes.push({...makeBox('xxxx'), getAttribute: name => ({type: 'hidden'})[name] ?? null}); | CODE |
| HIGH⚡ | tests/unit/test_multi_field_totp.py | 5078 | scope.nodes.push({...makeBox('xxxx'), getAttribute: name => ({type: 'hidden'})[name] ?? null}); | CODE |
| HIGH⚡ | tests/unit/test_multi_field_totp.py | 5079 | scope.nodes.push({...makeBox('x'), getAttribute: name => ({type: 'text', maxlength: '1', 'aria-hidden': 'tru | CODE |
| HIGH⚡ | tests/unit/test_multi_field_totp.py | 5079 | scope.nodes.push({...makeBox('x'), getAttribute: name => ({type: 'text', maxlength: '1', 'aria-hidden': 'tru | CODE |
| HIGH⚡ | tests/unit/test_multi_field_totp.py | 5080 | scope.nodes.push({...makeBox('x'), display: 'none'}); | CODE |
| HIGH | tests/unit/test_multi_field_totp.py | 617 | if (box.value && boxes[i + 1]) boxes[i + 1].focus(); | CODE |
| HIGH | tests/unit/test_multi_field_totp.py | 992 | pending.push(...node.children); | CODE |
| HIGH | tests/unit/test_multi_field_totp.py | 1007 | siblings.push(input); | CODE |
| HIGH | tests/unit/test_multi_field_totp.py | 5046 | console.debug = value => counts.push(value); | CODE |
| HIGH | tests/unit/test_multi_field_totp.py | 5061 | isConnected: true, value, getAttribute: name => ({type: 'text', maxlength: '1'})[name] ?? null}); | CODE |
| HIGH | tests/unit/test_cdp_download_interceptor.py | 1381 | """A malformed CDP event can carry a non-string ``request.url`` (e.g. null); the redactor must stay | STRING |
| HIGH | tests/unit/test_cdp_download_interceptor.py | 2638 | """A malformed challenge (``authChallenge`` or ``request`` null) must be caught into the attributed | STRING |
| HIGH⚡ | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 752 | # A page defines a non-writable, non-configurable same-name property (null/undefined). Install must | COMMENT |
| HIGH | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 81 | urls.push(url); | CODE |
| HIGH⚡ | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 531 | revokeUndefined: revokeReturn === undefined }; | STRING |
| HIGH⚡ | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 760 | value: v === 'null' ? null : undefined, writable: false, configurable: false, enumerable: true, | STRING |
| HIGH⚡ | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 773 | isNull: window.__skyvernBlobRetention === null, | STRING |
| HIGH⚡ | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 774 | isUndefined: window.__skyvernBlobRetention === undefined, | STRING |
| HIGH | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 576 | stillPresent: !!window.__skyvernBlobRetention && window.__skyvernBlobRetention.note === 'page-owned', | STRING |
| HIGH | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 647 | skyvernDropped: window.__skyvernBlobRetention === undefined, | STRING |
| HIGH | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 710 | dropped: window.__skyvernBlobRetention === undefined, | STRING |
| HIGH | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 737 | dropped: window.__skyvernBlobRetention === undefined, | STRING |
| HIGH | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 804 | dropped: window.__skyvernBlobRetention === undefined, | STRING |
| HIGH⚡ | tests/unit/test_mcp_workflow_create_defaults.py | 452 | """AC3 on create: a legacy block cloned via workflow get (prompt: null) gets neither prompt nor steps.""" | STRING |
| HIGH | tests/unit/test_mcp_workflow_create_defaults.py | 379 | """Blocks without a prompt (missing key or explicit null) are legacy and get no steps.""" | STRING |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 77 | socket.push({"id": frame["id"], "result": {"frameId": "F1"}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 93 | socket.push({"id": second_id, "result": {"value": 2}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 94 | socket.push({"id": first_id, "result": {"value": 1}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 109 | socket.push({"id": socket.sent[0]["id"], "sessionId": "S1", "result": {"root": {}}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 122 | socket.push({"id": socket.sent[0]["id"], "result": {"targetInfos": []}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 133 | socket.push( | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 175 | socket.push({"method": "Target.targetCreated", "params": {"targetInfo": {"targetId": "T1"}}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 176 | socket.push({"method": "Page.loadEventFired", "sessionId": "S1", "params": {"timestamp": 1}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 177 | socket.push({"method": "Page.loadEventFired", "sessionId": "S2", "params": {"timestamp": 2}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 193 | socket.push({"method": "Target.targetCreated", "params": {}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 211 | socket.push({"method": "Target.targetCreated", "params": {"n": 1}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_transport.py | 212 | socket.push({"method": "Target.targetCreated", "params": {"n": 2}}) | CODE |
| HIGH | tests/unit/test_skycdp_transport.py | 154 | socket.push( | CODE |
| HIGH | tests/unit/test_copilot_streaming_adapter.py | 1470 | '"next_block_label": null, ' | CODE |
| HIGH | tests/unit/test_browser_session_address_write.py | 9 | from sqlalchemy import null, select | CODE |
| HIGH | tests/unit/test_paste_text_action.py | 215 | window.observedClipboardWrites.push(text); | STRING |
| HIGH | tests/unit/test_bitwarden_login.py | 460 | # 2025.9.0 spells an empty field as an explicit null, 2026.9.0 leaves the key out. | COMMENT |
| HIGH | tests/unit/test_bitwarden_login.py | 355 | '{"response":null,"statusCode":500}', | CODE |
| HIGH | tests/unit/test_bitwarden_login.py | 358 | '{"serverUrl":null,"lastSync":null,"status":"unlocked"}', | CODE |
| HIGH | tests/unit/test_skycdp_connection_sessions.py | 44 | self._socket.push( | CODE |
| HIGH⚡ | tests/unit/test_skycdp_connection_sessions.py | 57 | self._socket.push({"id": frame_id, "result": {"sessionId": self._next_session_id}}) | CODE |
| HIGH⚡ | tests/unit/test_skycdp_connection_sessions.py | 59 | self._socket.push({"id": frame_id, "result": {}}) | CODE |
| HIGH | tests/unit/test_skycdp_connection_sessions.py | 77 | socket.push( | CODE |
| HIGH | tests/unit/test_skycdp_connection_sessions.py | 134 | socket.push({"method": "Target.detachedFromTarget", "params": {"sessionId": "S-supp"}}) | CODE |
| HIGH | tests/unit/test_skycdp_connection_sessions.py | 211 | socket.push({"method": "Target.targetDestroyed", "params": {"targetId": "T1"}}) | CODE |
| HIGH⚡ | tests/unit/test_cdp_connection.py | 59 | assert parse_default_cdp_connect_headers('{"x-api-key": "secret", "x-bad": 42, "x-null": null}') == { | CODE |
| HIGH⚡ | tests/unit/test_cli_shared_core.py | 26 | "Run `pip install skyvern && skyvern browser serve --tunnel` to bridge " | CODE |
| HIGH | tests/unit/test_copilot_build_test_outcome.py | 378 | # Top-level names are the only answer when a root is undefined, so trimming must not empty them first. | COMMENT |
| HIGH | tests/unit/test_code_block_captcha.py | 1928 | if (callbackName && typeof window[callbackName] === "function") { | CODE |
| HIGH | tests/unit/test_credential_update_params.py | 372 | # SKY-12724 item 1: choosing Auto sends browser_profile_id=null, which must unlink the profile. | COMMENT |
| HIGH⚡ | tests/unit/test_bitwarden_session_cache.py | 415 | 'Syncing failed: {"response":null,"statusCode":401}', | CODE |
| 809 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 | 349 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 351 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 467 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 469 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 481 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 483 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 536 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 538 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 548 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 550 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 553 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_copilot_non_retriable_nav.py | 555 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/unit/test_copilot_non_retriable_nav.py | 255 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/unit/test_copilot_non_retriable_nav.py | 257 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 414 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 416 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 490 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 492 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 660 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 662 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 797 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 799 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 1189 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 1194 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 1270 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 1277 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 1672 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 1679 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 2154 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 2162 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 2244 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_click_desired_state.py | 2248 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_click_desired_state.py | 954 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_click_desired_state.py | 959 | # --------------------------------------------------------------------------- | 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 | 413 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_auto_completion_location.py | 415 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_auto_completion_location.py | 471 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_auto_completion_location.py | 473 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 79 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 212 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 354 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 356 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 540 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_browser_session_download_artifacts.py | 542 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_cached_artifact_bundling.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_cached_artifact_bundling.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| 725 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | run_streaming.py | 27 | except Exception: | CODE |
| LOW | run_streaming.py | 54 | except Exception: | CODE |
| LOW | run_streaming.py | 74 | except Exception: | CODE |
| LOW | run_streaming.py | 84 | except Exception: | CODE |
| MEDIUM | tests/unit/test_click_desired_state.py | 32 | def _has_playwright_browser() -> bool: | CODE |
| LOW | tests/unit/test_click_desired_state.py | 38 | except Exception: | CODE |
| MEDIUM | tests/unit/test_multi_field_totp.py | 96 | def _has_playwright_browser() -> bool: | CODE |
| LOW | tests/unit/test_multi_field_totp.py | 102 | except Exception: | CODE |
| LOW | tests/unit/test_download_popup_lifecycle_e2e.py | 47 | except Exception: | CODE |
| MEDIUM | tests/unit/test_download_popup_lifecycle_e2e.py | 41 | def _deps_available() -> bool: | CODE |
| LOW | tests/unit/test_copilot_requested_output_designation.py | 30 | except Exception: | CODE |
| MEDIUM | tests/unit/test_copilot_requested_output_designation.py | 26 | def _has_playwright_chromium() -> bool: | CODE |
| LOW | …it/test_copilot_generated_browser_page_state_repair.py | 606 | except Exception as exc: | CODE |
| 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 |
| MEDIUM | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 40 | def _has_playwright_browser() -> bool: | CODE |
| LOW | …/unit/test_adopted_session_blob_iframe_recovery_e2e.py | 46 | except Exception: | CODE |
| LOW | tests/unit/test_iframe_mcp_e2e.py | 67 | except Exception: | CODE |
| LOW | tests/unit/test_iframe_mcp_e2e.py | 190 | except Exception: | CODE |
| LOW | tests/unit/test_get_scripts_query.py | 75 | except Exception: | CODE |
| MEDIUM | tests/unit/test_paste_text_action.py | 38 | def _has_playwright_browser() -> bool: | CODE |
| LOW | tests/unit/test_paste_text_action.py | 44 | except Exception: | CODE |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 500 | except Exception: | CODE |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 569 | except Exception: | CODE |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 586 | except Exception: | CODE |
| LOW | …unit/test_copilot_code_artifact_metadata_violations.py | 416 | except Exception: | CODE |
| LOW | tests/unit/test_pre_action_blob_retention_e2e.py | 46 | except Exception: | CODE |
| LOW | tests/unit/test_pre_action_blob_retention_e2e.py | 124 | except Exception: | STRING |
| MEDIUM | tests/unit/test_pre_action_blob_retention_e2e.py | 40 | def _deps_available() -> bool: | CODE |
| MEDIUM | tests/unit/test_code_block_recording.py | 56 | def _has_playwright_chromium() -> bool: | CODE |
| LOW | tests/unit/test_code_block_recording.py | 60 | except Exception: | CODE |
| LOW⚡ | tests/unit/test_code_block_sandbox.py | 248 | except Exception as error: | CODE |
| LOW | tests/unit/test_code_block_sandbox.py | 158 | except Exception: | CODE |
| LOW | tests/unit/test_code_block_sandbox.py | 219 | except Exception as error: | CODE |
| LOW | tests/unit/test_code_block_sandbox.py | 235 | except Exception as error: | CODE |
| LOW | tests/unit/test_code_block_sandbox.py | 2082 | 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 | 691 | except Exception: | CODE |
| LOW | tests/unit/test_download_query_backslash_refetch_e2e.py | 39 | except Exception: | CODE |
| MEDIUM | tests/unit/test_download_query_backslash_refetch_e2e.py | 33 | def _deps_available() -> bool: | CODE |
| LOW | tests/unit/test_saved_session_proxy_pin.py | 295 | except Exception as exc: | CODE |
| MEDIUM | tests/unit/test_copilot_agent_helpers.py | 4818 | def test_recoverable_failure_ignores_a_transient_inherited_from_the_previous_att | CODE |
| LOW | tests/unit/test_copilot_agent_helpers.py | 4858 | except Exception: | STRING |
| LOW | tests/unit/test_code_block_downloads.py | 1078 | except Exception: | CODE |
| LOW | tests/unit/copilot_test_helpers.py | 901 | except Exception: | CODE |
| MEDIUM | tests/unit/copilot_test_helpers.py | 897 | def _has_playwright_browser() -> bool: | CODE |
| LOW | tests/unit/test_download_in_page_fetch_recovery_e2e.py | 36 | except Exception: | CODE |
| MEDIUM | tests/unit/test_download_in_page_fetch_recovery_e2e.py | 29 | def _deps_available() -> bool: | CODE |
| LOW | tests/unit/_workflow_block_engine_fakes.py | 80 | except Exception: | CODE |
| LOW | tests/unit/test_missing_starter_url.py | 448 | except Exception: | CODE |
| LOW | tests/unit/test_task_v2_loop_inline_values.py | 62 | except Exception: | CODE |
| LOW | tests/unit/test_select_shadow_match.py | 1275 | except Exception as exc: | CODE |
| MEDIUM | tests/unit/test_llm_response_parsing.py | 31 | def test_coerce_response_to_dict_variants(response, expected): | CODE |
| LOW⚡ | tests/unit/test_llm_response_parsing.py | 35 | except Exception: | CODE |
| MEDIUM | tests/unit/test_copilot_composition_evidence.py | 3485 | def _has_playwright_browser() -> bool: | CODE |
| MEDIUM | tests/unit/test_copilot_composition_evidence.py | 5743 | def _playwright_chromium_available() -> bool: | CODE |
| 2763 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …evaluation/extract_action/scripts/install_directory.py | 3 | CODE | |
| LOW | tests/unit/test_copilot_non_retriable_nav.py | 8 | CODE | |
| LOW | tests/unit/test_copilot_video_attachments.py | 1 | CODE | |
| LOW | …_real_browser_manager_publisher_self_stops_on_close.py | 7 | CODE | |
| LOW | tests/unit/test_click_desired_state.py | 13 | CODE | |
| LOW | tests/unit/test_login_block_missing_credential.py | 8 | 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_mcp_scope_visibility.py | 1 | CODE | |
| LOW | tests/unit/test_copilot_token_accounting.py | 3 | CODE | |
| LOW | tests/unit/test_skycdp_endpoint_resolution.py | 15 | CODE | |
| LOW | tests/unit/test_skycdp_evaluation.py | 13 | 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_transient_ui_capture_experiment.py | 9 | 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_mcp_trajectory.py | 1 | CODE | |
| LOW | tests/unit/test_auto_completion_location.py | 7 | CODE | |
| LOW | tests/unit/test_init_command.py | 1 | CODE | |
| LOW | tests/unit/test_record_artifacts_popup_preserving.py | 10 | 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 | 8 | 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_taskv3_loop.py | 9 | CODE | |
| LOW | tests/unit/test_copilot_secret_scrub.py | 6 | CODE | |
| LOW | tests/unit/test_credential_fallback.py | 1 | CODE | |
| LOW | tests/unit/test_downloaded_files_artifact_urls.py | 3 | CODE | |
| LOW | tests/unit/test_copilot_hooks.py | 3 | CODE | |
| LOW | tests/unit/_sql_recording.py | 1 | CODE | |
| LOW | tests/unit/test_taskv3_goal_composition.py | 3 | CODE | |
| LOW | tests/unit/_schedule_fakes.py | 1 | 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 | 3 | CODE | |
| LOW | tests/unit/test_workflow_copilot_route_helpers.py | 10 | 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_fetch_file_bytes_query_backslash.py | 16 | CODE | |
| LOW | tests/unit/test_select_option_blocking_overlay.py | 12 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 3 | CODE | |
| LOW | tests/unit/test_copilot_author_time_refusal_residue.py | 1 | CODE | |
| LOW | tests/unit/_chrome_profile_fixtures.py | 3 | CODE | |
| LOW | tests/unit/test_real_browser_state_on_close_hook.py | 7 | CODE | |
| LOW | tests/unit/test_download_popup_lifecycle_e2e.py | 7 | CODE | |
| LOW | tests/unit/test_skycdp_route_matching.py | 15 | CODE | |
| LOW | tests/unit/test_copilot_narrative_activity.py | 1 | CODE | |
| LOW | tests/unit/test_otp_service.py | 3 | CODE | |
| LOW | tests/unit/test_span_exception_redaction.py | 8 | CODE | |
| LOW | …sts/unit/test_workflow_system_prompt_llm_forwarding.py | 11 | CODE | |
| LOW | tests/unit/conftest.py | 61 | CODE | |
| LOW | tests/unit/conftest.py | 61 | CODE | |
| LOW | tests/unit/conftest.py | 63 | CODE | |
| 3133 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/test_terminal_callback_binding.py | 287 | except TerminalBindingError: | CODE |
| HIGH | tests/unit/test_copilot_hooks.py | 2797 | except asyncio.TimeoutError: | CODE |
| HIGH | tests/unit/test_external_cdp_sessions.py | 368 | except ConnectionError: | CODE |
| HIGH | tests/unit/test_api_handler_factory.py | 3341 | except BaseException: | CODE |
| HIGH | tests/unit/test_agent_task_v3.py | 2044 | except _StepEngineDispatched: | CODE |
| HIGH | tests/unit/test_copilot_session_injection.py | 288 | except asyncio.CancelledError: | CODE |
| HIGH | tests/unit/test_copilot_session_injection.py | 252 | except asyncio.CancelledError: | CODE |
| HIGH | tests/unit/test_mcp_browser_tools.py | 1814 | except asyncio.CancelledError: | CODE |
| HIGH | tests/unit/test_mcp_browser_tools.py | 4979 | except asyncio.CancelledError: | CODE |
| HIGH | tests/unit/test_agent_protocol_idempotency.py | 495 | except TimeoutError: | CODE |
| HIGH | tests/unit/test_pre_action_blob_retention_e2e.py | 124 | except Exception: | CODE |
| HIGH | tests/unit/test_pdf_download_fixes.py | 129 | except Exception: | CODE |
| HIGH | tests/unit/test_pdf_download_fixes.py | 161 | except Exception: | CODE |
| HIGH | tests/unit/test_pdf_download_fixes.py | 191 | except Exception: | CODE |
| HIGH | tests/unit/test_workflow_service_cancel.py | 691 | except Exception: | CODE |
| HIGH | tests/unit/test_persistent_session_reaper.py | 623 | except BaseException: | CODE |
| HIGH | tests/unit/test_download_in_page_fetch_recovery_e2e.py | 139 | except (BrokenPipeError, ConnectionResetError, ssl.SSLError): | CODE |
| HIGH | tests/unit/test_missing_starter_url.py | 448 | except Exception: | CODE |
| HIGH | tests/unit/test_task_v2_loop_inline_values.py | 62 | except Exception: | CODE |
| HIGH | tests/unit/webeye/test_browser_factory_artifact_path.py | 95 | except asyncio.CancelledError: | CODE |
| HIGH | tests/unit/db/test_base_alchemy_db.py | 79 | except TimeoutError: | CODE |
| HIGH | tests/unit/embedded/test_tab_management_e2e.py | 55 | except Exception: | CODE |
| HIGH | tests/sdk/python_sdk/conftest.py | 98 | except Exception: | CODE |
| HIGH | …ll_predicate_from_ix_task_runs_org_toplevel_created.py | 34 | except Exception: | CODE |
| HIGH | …ll_predicate_from_ix_task_runs_org_toplevel_created.py | 53 | except Exception: | CODE |
| HIGH | …739fba3dc3d_add_persistent_session_workflow_binding.py | 57 | except Exception: | CODE |
| HIGH | …5-5516c5bf7762_add_run_history_columns_to_task_runs.py | 65 | except Exception: | CODE |
| HIGH | …2026_09_18_0344-214808602675_add_sms_2fa_foundation.py | 64 | except Exception: | CODE |
| HIGH | …2026_09_18_0344-214808602675_add_sms_2fa_foundation.py | 113 | except Exception: | CODE |
| HIGH | skyvern/config.py | 1322 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/script_skyvern_page.py | 316 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/script_skyvern_page.py | 412 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/real_skyvern_page_ai.py | 1278 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 364 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 368 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 912 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 962 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 2556 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 3323 | except Exception: | CODE |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 2092 | except Exception: | CODE |
| HIGH | skyvern/browser_extension/cdp_adapter.py | 1381 | except Exception: | CODE |
| HIGH | skyvern/browser_extension/cdp_adapter.py | 1403 | except BrowserExtensionError: | CODE |
| HIGH | skyvern/browser_extension/cdp_adapter.py | 1564 | except KeyError: | CODE |
| HIGH | skyvern/browser_extension/cdp_adapter.py | 222 | except KeyError: | CODE |
| HIGH | skyvern/browser_extension/broker_server.py | 2869 | except OSError: | CODE |
| HIGH | skyvern/browser_extension/broker_server.py | 579 | except (EOFError, ConnectionError, OSError, asyncio.TimeoutError, asyncio.CancelledError): | CODE |
| HIGH | skyvern/browser_extension/broker_server.py | 2317 | except asyncio.CancelledError: | CODE |
| HIGH | skyvern/browser_extension/broker_server.py | 2334 | except (asyncio.CancelledError, BrowserExtensionNotConnectedError): | CODE |
| HIGH | skyvern/browser_extension/broker_server.py | 2342 | except asyncio.CancelledError: | CODE |
| HIGH | skyvern/browser_extension/broker_state.py | 197 | except FileExistsError: | CODE |
| HIGH | skyvern/browser_extension/broker_state.py | 571 | except FileExistsError: | CODE |
| HIGH | skyvern/browser_extension/broker_state.py | 239 | except BrowserExtensionBrokerError: | CODE |
| HIGH | skyvern/browser_extension/broker_state.py | 141 | except OSError: | CODE |
| HIGH | skyvern/browser_extension/broker_client.py | 1272 | except subprocess.TimeoutExpired: | CODE |
| HIGH | skyvern/browser_extension/broker_client.py | 588 | except ( | CODE |
| HIGH | skyvern/browser_extension/broker_client.py | 597 | except BrowserExtensionBrokerError: | CODE |
| HIGH | skyvern/webeye/display_capture_bridge.py | 259 | except Exception: # noqa: BLE001,S110 - best-effort flush at teardown | CODE |
| HIGH | skyvern/webeye/display_capture_bridge.py | 745 | except Exception: # noqa: BLE001,S110 - best-effort shm detach at process exit; segment is IPC_RMID-marked | CODE |
| HIGH | skyvern/webeye/display_capture_bridge.py | 255 | except Exception: # noqa: BLE001,S110 - teardown must not raise; leftover handles die with the connection | CODE |
| HIGH | skyvern/webeye/display_capture_bridge.py | 731 | except OSError: | CODE |
| 233 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 230 | skyvern = Skyvern(api_key="your-api-key") | CODE |
| HIGH | README.md | 248 | const skyvern = new Skyvern({ apiKey: "your-api-key" }); | CODE |
| HIGH⚡ | README.md | 294 | api_key="YOUR_API_KEY", | CODE |
| HIGH | README.md | 326 | skyvern = Skyvern(api_key="your-api-key") | CODE |
| HIGH | …yvern-frontend/src/routes/tasks/detail/TaskDetails.tsx | 257 | "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 | 931 | "x-api-key": apiCredential ?? "<your-api-key>", | CODE |
| HIGH | …/src/routes/workflows/studio/runview/RunPaneHeader.tsx | 281 | "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 | 30 | (frontend / ".env.example").write_text("VITE_SKYVERN_API_KEY=YOUR_API_KEY\n") | CODE |
| HIGH⚡ | tests/unit/test_cli_doctor.py | 123 | assert CREDENTIAL_PLACEHOLDERS == ("", "PLACEHOLDER", "YOUR_API_KEY") | CODE |
| HIGH⚡ | tests/unit/test_cli_doctor.py | 131 | ("YOUR_API_KEY", True), | CODE |
| HIGH⚡ | tests/unit/test_cli_doctor.py | 146 | (tmp_path / "skyvern-frontend" / ".env").write_text("VITE_SKYVERN_API_KEY=YOUR_API_KEY\n") | CODE |
| HIGH⚡ | tests/unit/test_cli_doctor.py | 168 | assert is_frontend_api_key_placeholder("YOUR_API_KEY") | 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 | skyvern-ts/client/README.md | 41 | const client = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH | skyvern-ts/client/src/library/Skyvern.ts | 50 | * const skyvern = new Skyvern({ apiKey: "your-api-key" }); | COMMENT |
| HIGH | skyvern/library/skyvern.py | 84 | skyvern = Skyvern(api_key="your-api-key") | STRING |
| HIGH | skyvern/cli/credential_placeholders.py | 8 | "YOUR_API_KEY", | CODE |
| HIGH | skyvern/cli/doctor.py | 1135 | const key = envKey && envKey !== "YOUR_API_KEY" ? envKey : generatedKey; | CODE |
| HIGH | skyvern/cli/quickstart.py | 281 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH | skyvern/cli/mcp_tools/README.md | 23 | claude mcp add-json skyvern '{"type":"http","url":"https://api.skyvern.com/mcp/","headers":{"x-api-key":"YOUR_API_KEY"}} | CODE |
| HIGH | skyvern/cli/mcp_tools/README.md | 33 | "headers": { "x-api-key": "YOUR_API_KEY" } | CODE |
| HIGH | skyvern/cli/mcp_tools/README.md | 46 | "headers": { "x-api-key": "YOUR_API_KEY" } | CODE |
| HIGH | skyvern/cli/mcp_tools/README.md | 68 | "SKYVERN_API_KEY": "YOUR_API_KEY" | CODE |
| HIGH | skyvern/forge/sdk/routes/agent_protocol.py | 1278 | "code": 'curl -X POST "https://api.skyvern.com/workflows/import-pdf" \\\n -H "Authorization: Be | CODE |
| HIGH | skyvern/forge/sdk/routes/internal_auth.py | 63 | if not token_candidate or token_candidate == "YOUR_API_KEY": | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 4 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 9 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 18 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 23 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 33 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 39 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 45 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 50 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 55 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 60 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 65 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 70 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 75 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 98 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 108 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 118 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 165 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 175 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 184 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 687 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 692 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 697 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 703 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 711 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 719 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 727 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 736 | const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); | CODE |
| HIGH⚡ | skyvern/forge/sdk/routes/code_samples.py | 745 | skyvern = Skyvern(api_key="YOUR_API_KEY") | CODE |
| 208 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/test_download_file_action_handler.py | 0 | page.goto-style response whose followed redirect chain visited ``urls`` in order. | STRING |
| HIGH | …sts/unit/test_chain_click_blocked_anchor_navigation.py | 0 | page.goto-style response whose followed redirect chain visited ``urls`` in order. | STRING |
| HIGH | tests/unit/test_navigation_action_handlers.py | 0 | page.goto-style response whose followed redirect chain visited ``urls`` in order. | 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 | …026_05_22_2059-0b0bd1875c6e_add_cdp_connect_headers.py | 0 | select 1 from information_schema.columns where table_schema = current_schema() and table_name = :table_name and column_n | STRING |
| HIGH | …_0957-58c683692601_add_credential_run_serialization.py | 0 | select 1 from information_schema.columns where table_schema = current_schema() and table_name = :table_name and column_n | STRING |
| HIGH | …026_05_22_1755-9f512f2da31e_add_cdp_connect_headers.py | 0 | select 1 from information_schema.columns where table_schema = current_schema() and table_name = :table_name and column_n | STRING |
| HIGH | skyvern/schemas/tags.py | 0 | response for the run-tags batch endpoint. runs with no tags are present with an empty list so the frontend can distingui | STRING |
| HIGH | skyvern/client/types/workflow_tags_batch_response.py | 0 | response for the run-tags batch endpoint. runs with no tags are present with an empty list so the frontend can distingui | STRING |
| HIGH | skyvern/client/types/run_tags_batch_response.py | 0 | response for the run-tags batch endpoint. runs with no tags are present with an empty list so the frontend can distingui | 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/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/email_inbox_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/pdf_fill_block_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/split_pdf_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/email_inbox_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 |
| 86 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | run_streaming.py | 18 | CODE | |
| LOW | tests/unit/test_mcp_scope_visibility.py | 254 | CODE | |
| LOW | tests/unit/test_copilot_scout_act_observe.py | 3177 | CODE | |
| LOW | tests/unit/test_budget_preflight.py | 10 | CODE | |
| LOW | tests/unit/test_copilot_diagnosis_repair_contract.py | 5252 | CODE | |
| LOW | tests/unit/test_qa_skill_content.py | 144 | CODE | |
| LOW | tests/unit/test_qa_skill_content.py | 153 | CODE | |
| LOW | tests/unit/test_taskv3_loop.py | 1461 | CODE | |
| LOW | tests/unit/test_taskv3_loop.py | 11453 | CODE | |
| LOW | tests/unit/test_taskv3_loop.py | 12331 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 351 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 527 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 1403 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 1948 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 3920 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 5232 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 6059 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 6282 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 2020 | CODE | |
| LOW | tests/unit/test_multi_field_totp.py | 3940 | CODE | |
| LOW | tests/unit/test_download_popup_lifecycle_e2e.py | 679 | CODE | |
| LOW | tests/unit/test_span_exception_redaction.py | 138 | CODE | |
| LOW | tests/unit/test_span_exception_redaction.py | 173 | CODE | |
| LOW | tests/unit/test_download_file_action_handler.py | 4779 | CODE | |
| LOW | tests/unit/test_download_file_action_handler.py | 7188 | CODE | |
| LOW | tests/unit/test_taskv3_auth_tools.py | 262 | CODE | |
| LOW | tests/unit/test_taskv3_auth_tools.py | 378 | CODE | |
| LOW | tests/unit/test_taskv3_auth_tools.py | 765 | CODE | |
| LOW | tests/unit/test_copilot_runtime.py | 1360 | CODE | |
| LOW | tests/unit/test_sdk_export_parity.py | 28 | CODE | |
| LOW | tests/unit/test_sdk_export_parity.py | 48 | CODE | |
| LOW | tests/unit/test_agent_task_v3.py | 1771 | CODE | |
| LOW | tests/unit/test_real_browser_manager.py | 262 | CODE | |
| LOW | tests/unit/test_real_browser_manager.py | 435 | CODE | |
| LOW | tests/unit/test_real_browser_manager.py | 3857 | 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_taskv3_goal_check.py | 857 | CODE | |
| LOW | tests/unit/test_forge_log.py | 41 | CODE | |
| LOW | tests/unit/test_forge_log.py | 77 | CODE | |
| LOW | tests/unit/test_video_utils.py | 161 | CODE | |
| LOW | tests/unit/test_video_utils.py | 239 | CODE | |
| LOW | …unit/test_default_persistent_sessions_manager_close.py | 291 | CODE | |
| LOW | tests/unit/test_agent_protocol_idempotency.py | 970 | CODE | |
| LOW | …/unit/test_workflow_service_managed_browser_profile.py | 2861 | CODE | |
| LOW | …/unit/test_workflow_service_managed_browser_profile.py | 2908 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 77 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 132 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 162 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 203 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 258 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 294 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 339 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 433 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 464 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 500 | CODE | |
| LOW | tests/unit/test_fail_task_error_detection.py | 589 | CODE | |
| LOW | tests/unit/test_copilot_fill_credential_field.py | 2848 | CODE | |
| LOW | tests/unit/test_context_manager.py | 490 | CODE | |
| LOW | tests/unit/test_mcp_sdk_equivalent_guard.py | 82 | CODE | |
| 858 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 70 | totp_identifier: "user@example.com", | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 91 | totp_identifier: "user@example.com", | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 117 | target: { value: "user@example.com" }, | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 151 | target: { value: "user@example.com" }, | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 161 | totp_identifier: "user@example.com", | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 177 | target: { value: "user@example.com" }, | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 186 | totp_identifier: "user@example.com", | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 205 | target: { value: "user@example.com" }, | CODE |
| LOW | …yvern-frontend/src/components/PushTotpCodeForm.test.ts | 239 | 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 | …src/routes/tasks/create/CyclingPlaceholderTextarea.tsx | 9 | "placeholder" | "aria-label" | CODE |
| LOW | …/copilot/WorkflowCopilotChat.composerControls.test.tsx | 609 | expect(ta.getAttribute("placeholder")).toBe( | CODE |
| LOW | …kflows/workflowRun/blockDetail/BlockInspector.test.tsx | 171 | text: "user@example.com", | CODE |
| LOW | …kflows/workflowRun/blockDetail/BlockInspector.test.tsx | 179 | expect(screen.getByText("user@example.com")).toBeDefined(); | CODE |
| LOW | …/routes/workflows/components/SheetTabCombobox.test.tsx | 147 | expect(screen.getByRole("textbox").getAttribute("placeholder")).toBe( | CODE |
| LOW | …utes/workflows/components/SpreadsheetCombobox.test.tsx | 163 | expect(screen.getByRole("textbox").getAttribute("placeholder")).toBe( | 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 | …lows/editor/recording/RecordingFeedbackPrompt.test.tsx | 27 | useUser: () => ({ get: () => ({ email: "user@example.com" }) }), | CODE |
| LOW | …lows/editor/recording/RecordingFeedbackPrompt.test.tsx | 125 | submitted_by: "user@example.com", | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 155 | username: "user@example.com", | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 300 | target: { value: "user@example.com" }, | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 325 | username: "user@example.com", | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 377 | target: { value: "user@example.com" }, | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 429 | target: { value: "user@example.com" }, | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 467 | username: "user@example.com", | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 542 | target: { value: "user@example.com" }, | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 744 | fireEvent.change(screen.getByDisplayValue("user@example.com"), { | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 769 | const usernameInput = screen.getByDisplayValue("user@example.com"); | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 875 | target: { value: "user@example.com" }, | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 897 | username: "user@example.com", | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 985 | target: { value: "user@example.com" }, | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 1246 | target: { value: "user@example.com" }, | CODE |
| LOW | …ntend/src/routes/credentials/CredentialsModal.test.tsx | 1298 | username: "user@example.com", | CODE |
| LOW | …rontend/src/routes/credentials/CredentialItem.test.tsx | 53 | username: "user@example.com", | CODE |
| LOW | …rontend/src/routes/credentials/CredentialItem.test.tsx | 87 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 62 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 487 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 528 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 838 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 851 | return next.totp_identifier === "user@example.com"; | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 866 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 898 | username: "user@example.com", | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 916 | next.totp_identifier === "user@example.com" | CODE |
| LOW | …/routes/credentials/PasswordCredentialContent.test.tsx | 943 | username: "user@example.com", | CODE |
| LOW | …ontend/src/routes/credentials/CredentialsList.test.tsx | 36 | credential: { username: "user@example.com", totp_type: "none" }, | CODE |
| LOW | …end/src/routes/credentials/CredentialsTotpTab.test.tsx | 108 | totp_identifier: "user@example.com", | CODE |
| LOW | tests/unit/test_login_block_missing_credential.py | 223 | default_value="user@example.com", | 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 |
| 458 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/conftest.py | 165 | def set_enabled_for_org(organization_id: str | None) -> None: | CODE |
| LOW | tests/unit/test_copilot_hooks.py | 2334 | def _settle_already_over(self, monkeypatch: pytest.MonkeyPatch, ctx: SimpleNamespace) -> None: | CODE |
| LOW | tests/unit/test_script_skyvern_page.py | 3989 | async def set_input_files(path: str, **kwargs) -> None: | CODE |
| LOW | tests/unit/test_script_skyvern_page.py | 4050 | async def set_input_files(path: str, **kwargs) -> None: | CODE |
| LOW⚡ | tests/unit/fake_workflow_run_context.py | 49 | def update_block_metadata(self, label: str, metadata: dict[str, Any]) -> None: | CODE |
| LOW⚡ | tests/unit/fake_workflow_run_context.py | 64 | def set_value(self, key: str, value: Any) -> None: | CODE |
| LOW | tests/unit/test_copilot_credential_pause.py | 3766 | async def set_failing_on_the_response(key: str, value: Any, ex: Any = None) -> None: | CODE |
| LOW | tests/unit/test_block_description_caching.py | 60 | def _setup_mocks(mock_app: MagicMock) -> None: | CODE |
| LOW | tests/unit/_file_chooser_fakes.py | 32 | async def set_files(self, files: dict[str, str | bytes], *, timeout: float | None = None) -> None: | CODE |
| LOW | tests/unit/_file_chooser_fakes.py | 66 | async def set_input_files(self, files: dict[str, str | bytes]) -> None: | CODE |
| LOW | tests/unit/test_send_email_block.py | 1317 | async def set_connection(self, **values: object) -> None: | CODE |
| LOW | tests/unit/test_cdp_download_interceptor.py | 5067 | async def _settle(interceptor: CDPDownloadInterceptor) -> None: | CODE |
| LOW | tests/unit/test_api_handler_factory.py | 277 | def _set_hard_deadline_settings(monkeypatch: pytest.MonkeyPatch, *, enforce: bool, grace: float) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1023 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1095 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1147 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1271 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1389 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1409 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1430 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1452 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_input_text_combobox_commit.py | 1504 | async def _settle_spy(_element: object) -> None: | CODE |
| LOW | tests/unit/test_run_service.py | 74 | async def _settle() -> None: | CODE |
| LOW | tests/unit/test_cdp_connection_retry.py | 51 | def _set_budget(monkeypatch: pytest.MonkeyPatch, attempts: int, backoff: list[float]) -> None: | CODE |
| LOW | tests/unit/test_quickstart_command.py | 84 | def _set_home(monkeypatch, home: Path) -> None: | STRING |
| LOW | tests/unit/test_task_v2_summary_envelope.py | 128 | async def update_thought(self, **kwargs: object) -> 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 | tests/unit/test_log_artifacts.py | 374 | def set_workflow_context(attempt: int) -> None: | CODE |
| LOW | …unit/test_copilot_code_artifact_metadata_violations.py | 613 | def set_attributes(self, fields: dict) -> None: | STRING |
| LOW | tests/unit/test_browser_header_sanitization.py | 54 | async def set_extra_http_headers(self, headers: dict[str, str]) -> None: | CODE |
| LOW | tests/unit/test_copilot_completion_verification.py | 3132 | def _set_workflow_labels(ctx: CopilotContext, *labels: str) -> None: | STRING |
| LOW | tests/unit/test_code_block_authorized_files.py | 231 | async def set_input_files(self, files: dict[str, str | bytes]) -> None: | CODE |
| LOW | tests/unit/test_code_block_authorized_files.py | 261 | async def set_input_files(self, files: dict[str, str | bytes]) -> None: | CODE |
| LOW | tests/unit/test_code_block_authorized_files.py | 292 | async def set_input_files(self, files: dict[str, str | bytes]) -> None: | CODE |
| LOW | tests/unit/test_code_block_authorized_files.py | 411 | async def set_input_files(self, files: dict[str, str | bytes]) -> None: | CODE |
| LOW | tests/unit/test_workflow_run_groups.py | 100 | async def _set_child_status(env: GroupEnv, workflow_run_id: str, status: WorkflowRunStatus) -> None: | CODE |
| LOW⚡ | tests/unit/test_pdf_download_fixes.py | 471 | def _setup_context(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_copilot_agent_naming.py | 671 | async def update_workflow_definition(**kwargs: object) -> None: | CODE |
| LOW⚡ | tests/unit/test_copilot_agent_naming.py | 713 | async def update_workflow_definition(**kwargs: object) -> None: | CODE |
| LOW | tests/unit/test_skycdp_artifacts.py | 89 | async def _settle() -> None: | CODE |
| LOW | tests/unit/test_artifact_url_expiry_org_config.py | 425 | __all__ = [ | CODE |
| LOW | tests/unit/test_collapse_fanout_gates.py | 70 | def _set_provider(monkeypatch: pytest.MonkeyPatch, provider: FakeExperimentationProvider) -> None: | CODE |
| LOW | tests/unit/test_copilot_frontier.py | 2168 | def _set_failure_ctx(ctx: CopilotContext, definition: _FakeDefinition, reason: str) -> None: | STRING |
| LOW | tests/unit/test_code_block_downloads.py | 815 | async def set_input_files(self, files: dict[str, str | bytes]) -> None: | CODE |
| LOW | tests/unit/test_code_block_downloads.py | 950 | async def set_input_files(self, files: dict[str, str | bytes]) -> None: | CODE |
| LOW | tests/unit/test_cleanup_service.py | 14 | def _set_backend(monkeypatch, storage: object) -> None: | CODE |
| LOW⚡ | tests/unit/test_db_engine_connect_args.py | 484 | def set_attribute(self, key: str, value: Any) -> None: | CODE |
| 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/test_workflow_copilot_route.py | 3224 | async def update_workflow_definition(**kwargs: Any) -> None: | CODE |
| LOW | tests/unit/test_workflow_copilot_route.py | 3314 | async def update_workflow_definition(**kwargs: Any) -> None: | CODE |
| LOW | tests/unit/webeye/test_screenshot_cdp_fallback.py | 54 | def _settings(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/unit/webeye/test_screenshot_observability.py | 67 | def _settings(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | …sts/unit/forge/sdk/artifact/storage/test_s3_storage.py | 1647 | async def _settle(iterations: int = 100) -> None: | CODE |
| LOW | …t/forge/sdk/routes/streaming/test_cdp_input_session.py | 102 | async def set_input_files(self, files: dict[str, str | bytes]) -> None: | CODE |
| LOW | tests/unit/workflow/test_code_block_recorder.py | 192 | def set_default_timeout(self, timeout: float) -> 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 | 903 | async def _update_workflow_run_block(**kwargs: object) -> None: | CODE |
| LOW | scripts/patch_generated_client.py | 81 | FORWARD_REFS_OLD = """def update_forward_refs(model: Type["Model"], **localns: Any) -> None: | CODE |
| 155 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_click_desired_state.py | 344 | CODE | |
| LOW | tests/unit/test_copilot_scout_act_observe.py | 268 | CODE | |
| LOW | tests/unit/test_taskv3_loop.py | 143 | CODE | |
| LOW | tests/unit/test_credential_fallback.py | 51 | CODE | |
| LOW | tests/unit/test_credential_fallback.py | 261 | CODE | |
| LOW | tests/unit/_schedule_fakes.py | 16 | CODE | |
| LOW | tests/unit/test_copilot_credential_pause.py | 3086 | CODE | |
| LOW | tests/unit/test_cached_script_deploy_service.py | 110 | CODE | |
| LOW | tests/unit/_file_chooser_fakes.py | 71 | CODE | |
| LOW | tests/unit/test_cdp_download_interceptor.py | 4924 | CODE | |
| LOW | tests/unit/test_agent_task_v3.py | 113 | CODE | |
| LOW | tests/unit/test_agent_task_v3.py | 2228 | CODE | |
| LOW | tests/unit/test_input_text_combobox_commit.py | 407 | CODE | |
| LOW | tests/unit/test_file_download_targets.py | 81 | CODE | |
| LOW | tests/unit/test_scrolling_screenshot_retention.py | 91 | CODE | |
| LOW | tests/unit/test_code_block_captcha.py | 55 | CODE | |
| LOW | tests/unit/test_code_block_captcha.py | 156 | CODE | |
| LOW | tests/unit/test_code_block_captcha.py | 194 | CODE | |
| LOW | tests/unit/test_input_text_tel_card_routing.py | 53 | CODE | |
| LOW | …sts/unit/test_chain_click_blocked_anchor_navigation.py | 418 | CODE | |
| LOW | tests/unit/test_scoped_xhr_download_capture.py | 30 | CODE | |
| LOW | tests/unit/test_llm_handler_parity_characterization.py | 262 | CODE | |
| LOW | tests/unit/test_llm_handler_parity_characterization.py | 329 | CODE | |
| LOW | tests/unit/test_llm_handler_parity_characterization.py | 81 | CODE | |
| LOW | tests/unit/test_copilot_failure_tracking.py | 27 | CODE | |
| LOW | tests/unit/copilot_test_helpers.py | 284 | CODE | |
| LOW | tests/unit/copilot_test_helpers.py | 1155 | CODE | |
| LOW | tests/unit/copilot_test_helpers.py | 1320 | CODE | |
| LOW | tests/unit/_workflow_block_engine_fakes.py | 113 | CODE | |
| LOW | tests/unit/test_browser_action_policy.py | 122 | CODE | |
| LOW | tests/unit/test_workflow_copilot_route.py | 165 | CODE | |
| LOW | tests/unit/forge/sdk/db/test_self_heal_repository.py | 22 | CODE | |
| LOW | …sts/unit/forge/sdk/db/test_workflow_runs_repository.py | 119 | CODE | |
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 508 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page_ai.py | 36 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 383 | CODE | |
| LOW | skyvern/core/script_generations/real_skyvern_page_ai.py | 1760 | CODE | |
| LOW | skyvern/core/script_generations/generate_script.py | 3416 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page.py | 636 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page.py | 652 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page.py | 786 | CODE | |
| LOW | skyvern/core/script_generations/skyvern_page.py | 1138 | CODE | |
| LOW | skyvern/browser_extension/broker_client.py | 238 | CODE | |
| LOW | skyvern/webeye/browser_state.py | 58 | CODE | |
| LOW | skyvern/webeye/browser_state.py | 83 | CODE | |
| LOW | skyvern/webeye/browser_state.py | 115 | CODE | |
| LOW | skyvern/webeye/browser_state.py | 153 | CODE | |
| LOW | skyvern/webeye/persistent_sessions_manager.py | 125 | CODE | |
| LOW | skyvern/webeye/persistent_sessions_manager.py | 193 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 190 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 522 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 823 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 1269 | CODE | |
| LOW | skyvern/webeye/real_browser_state.py | 1694 | CODE | |
| LOW | skyvern/webeye/default_persistent_sessions_manager.py | 567 | CODE | |
| LOW | skyvern/webeye/default_persistent_sessions_manager.py | 740 | CODE | |
| LOW | skyvern/webeye/real_browser_manager.py | 749 | CODE | |
| LOW | skyvern/webeye/scraper/scraper.py | 285 | CODE | |
| LOW | skyvern/webeye/scraper/scraper.py | 539 | CODE | |
| LOW | skyvern/webeye/actions/responses.py | 85 | CODE | |
| 207 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_span_exception_redaction.py | 145 | # This file is synced to the OSS repo, where `cloud/` does not exist. Skipping | COMMENT |
| MEDIUM⚡ | tests/unit/test_span_exception_redaction.py | 180 | # This file is synced to the OSS repo, where `cloud/` does not exist. Skipping | COMMENT |
| MEDIUM | tests/unit/test_script_skyvern_page.py | 332 | # Create a mock page first, then set page to None after construction | COMMENT |
| MEDIUM | tests/unit/test_download_file_action_handler.py | 2809 | # Create a read-only directory to simulate write failure | COMMENT |
| MEDIUM | tests/unit/test_forloop_script_generation.py | 209 | # Create a mock CodeGenInput with ForLoop block | COMMENT |
| MEDIUM | tests/unit/test_aiohttp_helper.py | 984 | # Create a temporary file for testing | COMMENT |
| MEDIUM | tests/unit/test_aiohttp_helper.py | 1038 | # Create a temporary file for testing | COMMENT |
| MEDIUM | tests/unit/test_aiohttp_helper.py | 1165 | # 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_copilot_locator_inspection.py | 272 | # Creating a page would both mutate browser state and answer from a page the run never reached. | COMMENT |
| MEDIUM | tests/unit/test_schema_validator.py | 485 | # Create a schema that will fail Draft202012Validator.check_schema | COMMENT |
| MEDIUM | tests/unit/test_aws_client_ttl.py | 253 | # Create a stream that raises on seek | COMMENT |
| MEDIUM⚡ | tests/unit/workflow/test_file_parser_block.py | 160 | # Create a minimal valid PDF file | COMMENT |
| MEDIUM⚡ | tests/unit/workflow/test_file_parser_block.py | 2454 | # Create a mock OutputParameter | COMMENT |
| MEDIUM⚡ | tests/unit/workflow/test_file_parser_block.py | 2540 | # Create a binary file that's definitely not CSV | COMMENT |
| MEDIUM | tests/unit/workflow/test_file_parser_block.py | 2391 | # Create a mock OutputParameter with all required fields | COMMENT |
| MEDIUM | tests/unit/workflow/test_file_parser_block.py | 2622 | # Create a DataFrame with NaN, NaT, and timestamp values | COMMENT |
| MEDIUM | tests/unit/embedded/test_sqlite_server_mode.py | 491 | # Create a client with a bad setting that will cause validation error | COMMENT |
| MEDIUM | tests/sdk/python_sdk/conftest.py | 57 | # Create a handler class that serves from the specific directory | COMMENT |
| MEDIUM | skyvern/core/script_generations/real_skyvern_page_ai.py | 958 | # Create the episode now so v3's agent can attach decisions to it. | COMMENT |
| MEDIUM | skyvern/core/script_generations/generate_script.py | 2959 | # Create the for loop target (current_value) | COMMENT |
| MEDIUM | skyvern/core/script_generations/generate_script.py | 2979 | # Create the async for loop | COMMENT |
| MEDIUM | skyvern/core/script_generations/generate_script.py | 3973 | # Create a requires_agent entry (no code, no run_signature) | COMMENT |
| MEDIUM | skyvern/core/script_generations/generate_script.py | 4118 | # Create a temporary module to convert the start block content to a function | COMMENT |
| MEDIUM⚡ | skyvern/webeye/actions/handler.py | 10968 | # Create a TerminateAction and execute it | COMMENT |
| MEDIUM | skyvern/webeye/actions/handler.py | 10301 | # This function is deprecated in 'extract-actions' prompt. Downloads are handled by the click action handler now. | COMMENT |
| MEDIUM | skyvern/library/skyvern_browser.py | 38 | # Create a new page | STRING |
| MEDIUM | skyvern/forge/sdk/log_artifacts.py | 97 | # This function is called from ``update_workflow_run`` in the DB layer, which | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 3670 | # Create the workflow run and set skyvern context | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 9952 | # Create the browser with the saved profile and navigate to the login block's URL. The | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 17666 | # Create a new version of the SAME script_id instead of a new script | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/models/block.py | 3587 | # Create a temporary output parameter using the current block's workflow_id | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/models/block.py | 4073 | # Create a failure block result for this iteration | COMMENT |
| MEDIUM | skyvern/forge/sdk/api/llm/config_registry.py | 1882 | # Create a GCP service account WITH the Vertex AI API access enabled | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/agent_protocol.py | 6322 | # Create a new timeline with processed children | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/credentials.py | 1013 | # Create a temporary credential | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/credentials.py | 3009 | # Create the new token | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/credentials.py | 3281 | # Create the new Azure token | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/credentials.py | 3393 | # Create the new configuration | COMMENT |
| MEDIUM⚡ | skyvern/forge/sdk/routes/code_samples.py | 916 | # Create a blank browser profile for future runs | COMMENT |
| MEDIUM⚡ | skyvern/forge/sdk/routes/code_samples.py | 922 | # Create a browser profile from a persistent browser session | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/code_samples.py | 276 | # Create a workflow in JSON format | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/scripts.py | 613 | # Create a new version of the script | COMMENT |
| MEDIUM | skyvern/forge/sdk/routes/scripts.py | 1445 | # Create a new script version with the updated blocks | COMMENT |
| MEDIUM | skyvern/services/workflow_script_service.py | 2026 | # Create a new script version | COMMENT |
| MEDIUM | skyvern/services/workflow_script_service.py | 2195 | # Create the workflow script mapping for cache lookup | COMMENT |
| MEDIUM | skyvern/services/workflow_script_service.py | 2325 | # Create a new script version | COMMENT |
| MEDIUM | skyvern/services/task_v2_service.py | 276 | # Create a dedicated termination thought for UI visibility | COMMENT |
| MEDIUM | skyvern/services/script_service.py | 727 | # Create the step in the only state from which recipe admission can | COMMENT |
| MEDIUM | skyvern/services/script_service.py | 1979 | # Create a new script version | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 1 | from skyvern.forge.sdk.forge_log import setup_logger | 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 | 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/AgentMarkdown.tsx | 1 | import { memo, useLayoutEffect, useRef, useState, type ReactNode } from "react"; | COMMENT |
| LOW | skyvern-frontend/src/components/ui/css-vars.test.ts | 1 | import { describe, expect, it } from "vitest"; | COMMENT |
| LOW | …ontend/src/routes/workflows/studio/runview/RunView.tsx | 621 | // Landing the selection on the LAST timeline item — so the Browser pane | COMMENT |
| LOW | …ern-frontend/src/routes/workflows/copilot/sendQueue.ts | 81 | // The message that opened the turn that just ended. Every boolean must be | COMMENT |
| LOW | …n-frontend/src/routes/workflows/copilot/acceptFence.ts | 41 | | ({ kind: "changed" } & AcceptAttempt) | COMMENT |
| LOW | …rontend/src/routes/workflows/copilot/narrativeState.ts | 341 | // Tool name when kind is tool_call/tool_result. | COMMENT |
| LOW | …rontend/src/routes/workflows/copilot/narrativeState.ts | 361 | // condenseActivityEntries. Unset outside that transform. | COMMENT |
| LOW | …rontend/src/routes/workflows/copilot/narrativeState.ts | 1001 | // | COMMENT |
| LOW | …rontend/src/routes/workflows/copilot/narrativeState.ts | 1021 | // | COMMENT |
| LOW | …kflows/copilot/WorkflowCopilotChat.reviewGate.test.tsx | 6581 | expect(screen.queryByText("Confirming\u2026")).toBeNull(); | COMMENT |
| LOW | …kflows/copilot/WorkflowCopilotChat.reviewGate.test.tsx | 9381 | // | COMMENT |
| LOW | …d/src/routes/workflows/copilot/WorkflowCopilotChat.tsx | 1861 | // Only a narrative row keeps its own resolved card, so a gate rendered anywhere else unmounts | COMMENT |
| LOW | …d/src/routes/workflows/copilot/WorkflowCopilotChat.tsx | 2021 | // this ref is set before the first await and read at the top of handleSend. | COMMENT |
| LOW | …/src/routes/workflows/copilot/cards/CredentialCard.tsx | 121 | frame: CredentialRequiredFrame; | COMMENT |
| LOW | …/src/routes/workflows/copilot/cards/CredentialCard.tsx | 821 | // the empty term, and a boolean keyed on a non-empty term reads that failure as no failure, which | COMMENT |
| LOW | …es/workflows/workflowRun/resizableTimelineSplitMath.ts | 1 | export const TIMELINE_SPLIT_STORAGE_KEY = "skyvern.runView.timelineSplit"; | COMMENT |
| LOW | …utes/workflows/components/tagging/TagFilterControl.tsx | 41 | type Props = { | COMMENT |
| LOW | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 421 | // expand/collapse state doesn't land at positions cached from the prior | COMMENT |
| LOW | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1701 | // renders in an intermediate invalid state. Mirrors the rewire pattern | COMMENT |
| LOW | …ern-frontend/src/routes/workflows/editor/Workspace.tsx | 1361 | setTimeout(() => { | COMMENT |
| LOW | …rn-frontend/src/routes/workflows/editor/nodes/index.ts | 121 | export type AppNode = UtilityNode | WorkflowBlockNode; | COMMENT |
| LOW | …/routes/workflows/editor/nodes/StartNode/StartNode.tsx | 141 | return ( | COMMENT |
| LOW | …s/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx | 81 | /> | COMMENT |
| LOW | …s/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx | 181 | workflowBlockType={WorkflowBlockTypes.FileURLParser} | COMMENT |
| LOW | …s/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx | 201 | // <WorkflowBlockIcon | 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 | 101 | // transition. Lets us detect internal updates even when begin/end are | COMMENT |
| LOW | …rc/routes/workflows/editor/hooks/useWorkflowHistory.ts | 221 | // eslint-disable-next-line react-hooks/exhaustive-deps | COMMENT |
| LOW | …rc/routes/workflows/editor/hooks/useWorkflowHistory.ts | 361 | } | COMMENT |
| LOW | …rc/routes/workflows/editor/hooks/useWorkflowHistory.ts | 381 | [setNodes, setEdges], | 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 | k8s/charts/skyvern-ui/values.yaml | 1 | # Default values for skyvern-ui. | COMMENT |
| LOW | tests/unit/test_taskv3_loop.py | 11321 | assert by_tool["click"]["tool_ok_class"] == "solved" | COMMENT |
| LOW | tests/unit/test_taskv3_loop.py | 11381 | # Classified on the exception's module and CLASS name, never its message -- a message can carry | COMMENT |
| LOW | tests/unit/test_taskv3_loop.py | 11641 | else: | COMMENT |
| LOW | tests/unit/test_taskv3_goal_composition.py | 161 | # reverts to a demonstrative untouched, and even inverting the prescribed status passes. Asserting | COMMENT |
| LOW | tests/unit/conftest.py | 161 | # import sys | COMMENT |
| LOW | tests/unit/test_copilot_cancel_helpers.py | 161 | # _trusted_post_drain_status | COMMENT |
| LOW | tests/unit/test_taskv3_opaque_refs.py | 81 | NUMERIC_DOT_TRIPLET_URL = "https://files.example.test/artifacts/1735689600000.1735689660000.1735689720000/build.zip" | COMMENT |
| LOW | tests/unit/test_domutils_injection_scope.js | 1 | // Behavioral test for domUtils.js injection scope isolation. | COMMENT |
| LOW | tests/unit/workflow/test_reorder_graph_validation.py | 81 | COMMENT | |
| LOW | scripts/test-install.sh | 1 | #!/bin/sh | COMMENT |
| 148 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | skyvern/core/script_generations/skyvern_page.py | 433 | 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 | 667 | 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 | 835 | 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 | 1409 | 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 | 1583 | Extract structured data from the page using AI. Args: prompt: Natural language description of what | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 1631 | Validate the current page state using AI. Args: prompt: Validation criteria or condition to check | STRING |
| HIGH | skyvern/core/script_generations/skyvern_page.py | 1674 | 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 | 3588 | 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 | 3631 | 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 | 3702 | 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 | 357 | 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 | 265 | 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 | 1239 | 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 | 18038 | 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 | 18175 | Extract the evaluations array from LLM output. ExtractionBlock wraps output in 'extracted_information', so we | STRING |
| HIGH | skyvern/forge/sdk/db/repositories/artifacts.py | 305 | 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 | 178 | Create a credential using the custom API. Args: name: Name of the credential c | STRING |
| HIGH | skyvern/forge/sdk/api/custom_credential_client.py | 262 | 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 | 1951 | 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 | 4713 | 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 | 208 | 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 | 262 | 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 | 85 | Get or create a CustomCredentialAPIClient for the given organization. Args: organization_i | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | README.md | 277 | #### Step 1: Enable remote debugging in Chrome | COMMENT |
| LOW⚡ | README.md | 286 | #### Step 2: Connect Skyvern | COMMENT |
| LOW⚡ | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1343 | // Step 1: Remove inline {{ deleted_block_output }} references from all nodes | COMMENT |
| LOW⚡ | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1350 | // Step 2: Remove from parameterKeys arrays and handle special cases | COMMENT |
| LOW⚡ | …end/src/routes/workflows/editor/workflowEditorUtils.ts | 4476 | // Step 1: Update inline {{ old_output }} references to {{ new_output }} | COMMENT |
| LOW⚡ | …end/src/routes/workflows/editor/workflowEditorUtils.ts | 4483 | // Step 2: Update parameterKeys arrays and the label of the renamed node | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 83 | // Step 1: Remove inline {{ parameter.key }} references | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 88 | // Step 2: Remove from parameterKeys arrays | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 290 | // Step 1: Update inline {{ old_key }} references to {{ new_key }} | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 295 | // 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 | 4264 | # Step 1: Get or create ScriptBlock record for this revision | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 4297 | # Step 2: Create or update ScriptFile with content deduplication | COMMENT |
| LOW⚡ | skyvern/webeye/utils/dom.py | 1510 | # Step 1: Use native element.scrollIntoView() which handles both window scrolling | COMMENT |
| LOW⚡ | skyvern/webeye/utils/dom.py | 1569 | # 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 | 1077 | # Step 1: Credentials | COMMENT |
| LOW⚡ | skyvern/cli/setup_commands.py | 1086 | # Step 2: Detect tools | COMMENT |
| LOW | skyvern/cli/setup_commands.py | 1133 | # 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 | 365 | ## Step 5: Report Results | COMMENT |
| LOW | skyvern/cli/skills/qa/SKILL.md | 399 | ## 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 | 332 | ## Step 7: Report Results | COMMENT |
| LOW | skyvern/cli/skills/smoke-test/SKILL.md | 380 | ## 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 | 165 | ### Step 1: Create and run | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 169 | ### Step 2: Check status | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 176 | ### Step 3: Fix and re-run | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 255 | ## Step 1: Read the Error | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 190 | ### Step 4: Verify output | COMMENT |
| 21 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1343 | // Step 1: Remove inline {{ deleted_block_output }} references from all nodes | COMMENT |
| LOW⚡ | …-frontend/src/routes/workflows/editor/FlowRenderer.tsx | 1350 | // Step 2: Remove from parameterKeys arrays and handle special cases | COMMENT |
| LOW⚡ | …end/src/routes/workflows/editor/workflowEditorUtils.ts | 4476 | // Step 1: Update inline {{ old_output }} references to {{ new_output }} | COMMENT |
| LOW⚡ | …end/src/routes/workflows/editor/workflowEditorUtils.ts | 4483 | // Step 2: Update parameterKeys arrays and the label of the renamed node | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 83 | // Step 1: Remove inline {{ parameter.key }} references | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 88 | // Step 2: Remove from parameterKeys arrays | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 290 | // Step 1: Update inline {{ old_key }} references to {{ new_key }} | COMMENT |
| LOW⚡ | …es/workflows/editor/panels/WorkflowParametersPanel.tsx | 295 | // 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 | 4264 | # Step 1: Get or create ScriptBlock record for this revision | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 4297 | # Step 2: Create or update ScriptFile with content deduplication | COMMENT |
| LOW⚡ | skyvern/webeye/utils/dom.py | 1510 | # Step 1: Use native element.scrollIntoView() which handles both window scrolling | COMMENT |
| LOW⚡ | skyvern/webeye/utils/dom.py | 1569 | # 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 | 1077 | # Step 1: Credentials | COMMENT |
| LOW⚡ | skyvern/cli/setup_commands.py | 1086 | # Step 2: Detect tools | COMMENT |
| LOW | skyvern/cli/setup_commands.py | 1133 | # Step 3: Configure detected tools | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 165 | ### Step 1: Create and run | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 169 | ### Step 2: Check status | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 176 | ### Step 3: Fix and re-run | COMMENT |
| LOW⚡ | skyvern/cli/mcp_tools/prompts.py | 255 | ## Step 1: Read the Error | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 190 | ### Step 4: Verify output | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 273 | ## Step 2: Diagnose the Pattern | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 315 | ## Step 3: Fix and Re-run | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 329 | ## Step 4: Escalation | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 524 | ## Step 1: Understand the Changes | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 569 | ## Step 2: Choose the Validation Strategy | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 849 | ## Step 4: Report Results | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 881 | ## Step 5: Post Evidence to PR | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 1024 | ## Step 1: Understand the Changes | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 1046 | ## Step 2: Choose the Validation Strategy | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 1100 | ## Step 4: Report Results | COMMENT |
| LOW | skyvern/cli/mcp_tools/prompts.py | 1130 | ## Step 5: Remote / Stateless Constraints | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 354 | # Step 1: Sanitize all block labels and collect the mapping | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 361 | # Step 2: Sanitize all parameter keys and collect the mapping | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 454 | # Step 5: Update parameter_keys arrays in blocks | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 460 | # Step 6: Update finally_block_label if it references an old label | COMMENT |
| LOW⚡ | skyvern/schemas/workflows.py | 466 | # Step 7: Update next_block_label in all blocks | COMMENT |
| LOW | skyvern/schemas/workflows.py | 378 | # Step 3: Update all block label references | COMMENT |
| LOW | skyvern/schemas/workflows.py | 417 | # Step 4: Update all parameter key references | COMMENT |
| LOW | skyvern/forge/sdk/copilot/tools/__init__.py | 1694 | # Step 1: Update the workflow | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 3278 | # 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 | 1392 | # Step 3: Retrieve the items | COMMENT |
| LOW | skyvern/forge/sdk/services/bitwarden.py | 1571 | # Step 3: Get the item | COMMENT |
| 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 | 291 | # Check if this task has existing field names to preserve | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 3881 | # Check if already cached (for progressive caching) | COMMENT |
| LOW | skyvern/core/script_generations/generate_script.py | 3950 | # Check if the reviewer has already provided code for this block | COMMENT |
| LOW | skyvern/core/script_generations/skyvern_page.py | 1046 | # 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 | 1408 | # 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 | 10958 | # Check if we should terminate instead of complete | COMMENT |
| LOW | skyvern/cli/doctor.py | 288 | # 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 | 2104 | # Check if Chrome process is still alive | COMMENT |
| LOW | skyvern/cli/commands/browser.py | 2192 | # Check if ngrok is installed | COMMENT |
| LOW | skyvern/cli/commands/browser.py | 2202 | # Check if ngrok auth token is configured | COMMENT |
| LOW | skyvern/cli/commands/browser.py | 2226 | # Check if ngrok died (e.g. bad auth token, port conflict) | COMMENT |
| LOW | skyvern/forge/agent.py | 5499 | # Check if Skyvern already returned a complete action, if so, don't run user goal check | COMMENT |
| LOW | skyvern/forge/agent.py | 5705 | # Check if the src is a data URI with base64 encoded PDF | COMMENT |
| LOW | skyvern/forge/agent.py | 6603 | # Check if we should use the termination-aware prompt (experiment) | COMMENT |
| LOW | skyvern/forge/agent.py | 6741 | # Check if we should terminate instead of complete | COMMENT |
| LOW | skyvern/forge/agent.py | 7440 | # Check if we have pre-scraped data from parallel verification optimization | COMMENT |
| LOW | skyvern/forge/agent.py | 8029 | # Check if prompt caching is enabled for extract-action | COMMENT |
| LOW | skyvern/forge/agent.py | 10489 | # Check if this is an LLM provider error | COMMENT |
| LOW | skyvern/forge/agent.py | 10552 | # Check if we have LLM errors even if the summarization failed | COMMENT |
| LOW | skyvern/forge/agent.py | 10622 | # Check if this is an LLM provider error | COMMENT |
| LOW | skyvern/forge/agent.py | 10706 | # Check if we have LLM errors even if the summarization failed | COMMENT |
| LOW | skyvern/forge/agent.py | 10858 | # Check if parallel verification should be used | COMMENT |
| LOW | skyvern/forge/sdk/models.py | 116 | # Check if there is a successful complete action | COMMENT |
| LOW | skyvern/forge/sdk/models.py | 152 | # Check if there is a successful terminate action | COMMENT |
| LOW | skyvern/forge/sdk/forge_log.py | 1467 | # Check if it's a subclass of known exception types | COMMENT |
| LOW | skyvern/forge/sdk/forge_log.py | 1516 | # Check if exception is a subclass of transient exceptions | COMMENT |
| LOW | skyvern/forge/sdk/forge_log.py | 1523 | # Check if exception is a subclass of bug exceptions | COMMENT |
| LOW | …rn/forge/sdk/workflow/workflow_definition_converter.py | 117 | # Check if user's trying to manually create an output parameter | COMMENT |
| LOW | …rn/forge/sdk/workflow/workflow_definition_converter.py | 130 | # Check if any parameter keys collide with automatically created output parameter keys | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 7571 | # Check if there's a related workflow script that should be used instead. | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 7658 | # Check if there's a finally block configured | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 9513 | # Check if this block is designated as requires_agent by the script reviewer. | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 9521 | # Check if this block has never been cached (e.g. from an unexecuted | COMMENT |
| LOW | skyvern/forge/sdk/workflow/service.py | 17874 | # Check if the script is pinned — skip auto-review for pinned scripts. | COMMENT |
| LOW | skyvern/forge/sdk/workflow/context_manager.py | 1252 | # Check if it's in the format vault_id:item_id | COMMENT |
| LOW | skyvern/forge/sdk/workflow/context_manager.py | 1529 | # Check if item is None | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 3328 | # Check if this looks like a parameter path (contains dots and/or _output) | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 15513 | # Check if timeout_seconds has elapsed | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 16701 | # Check if url is a parameter | COMMENT |
| LOW | skyvern/forge/sdk/workflow/models/block.py | 17080 | # Check if file_path is a URL or managed storage URI | COMMENT |
| LOW | skyvern/forge/sdk/db/repositories/folders.py | 174 | # Check if folder exists | COMMENT |
| LOW | skyvern/forge/sdk/api/files.py | 636 | # Check if URL is a Google Drive link | COMMENT |
| LOW | skyvern/forge/sdk/api/files.py | 645 | # Check if URL is a storage URI handled by the configured storage backend. A file:// URI | COMMENT |
| LOW | skyvern/forge/sdk/api/files.py | 686 | # 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 | 2105 | # Check if this is an OpenAI model | COMMENT |
| LOW | skyvern/forge/sdk/api/llm/api_handler_factory.py | 2949 | # Check if this is an OpenAI model | COMMENT |
| LOW | skyvern/forge/sdk/api/llm/utils.py | 424 | # Check if the next non-whitespace character is a JSON structure character | COMMENT |
| LOW⚡ | skyvern/forge/sdk/api/llm/vertex_cache_manager.py | 103 | # Check if cache already exists for this key | COMMENT |
| LOW⚡ | skyvern/forge/sdk/api/llm/vertex_cache_manager.py | 106 | # Check if still valid | COMMENT |
| LOW | skyvern/forge/sdk/routes/agent_protocol.py | 1308 | # Read file and validate early (before creating import record) | COMMENT |
| LOW | skyvern/forge/sdk/routes/agent_protocol.py | 6284 | # Check if this is a TaskV2 block that needs to be flattened | COMMENT |
| LOW | skyvern/forge/sdk/routes/credentials.py | 1235 | # Check if the credential already has a browser profile | COMMENT |
| LOW | skyvern/forge/sdk/services/bitwarden.py | 1586 | # Check if the bw_organization_id matches | COMMENT |
| LOW | skyvern/forge/sdk/services/bitwarden.py | 1597 | # Check if the item is a credit card | COMMENT |
| LOW | skyvern/services/cleanup_service.py | 333 | # Check if process name matches any of the stale process names | COMMENT |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/unit/test_script_skyvern_page.py | 1207 | assert "654321" not in script_page._ai.ai_input_text.await_args.kwargs.values() | CODE |
| CRITICAL | tests/unit/test_script_skyvern_page.py | 1601 | assert "654321" not in script_page._ai.ai_input_text.await_args.kwargs.values() | CODE |
| CRITICAL | tests/unit/test_real_azure.py | 5 | from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError | CODE |
| CRITICAL | tests/unit/test_context_manager.py | 11 | from azure.core.exceptions import ClientAuthenticationError, HttpResponseError | CODE |
| CRITICAL | tests/unit/webeye/test_screenshot_cdp_fallback.py | 76 | page.context.new_cdp_session.return_value.detach.assert_awaited_once() | CODE |
| CRITICAL | tests/unit/webeye/test_screenshot_observability.py | 300 | page.context.new_cdp_session.return_value.detach.assert_awaited_once_with() | CODE |
| CRITICAL⚡ | tests/unit/webeye/test_main_world_eval.py | 99 | page.context.new_cdp_session.return_value.detach.assert_awaited_once() | CODE |
| CRITICAL | skyvern/forge/sdk/api/real_azure.py | 8 | from azure.core.exceptions import ResourceNotFoundError | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …rn-frontend/src/util/onboarding/OnboardingTelemetry.ts | 248 | // -- 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_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 | 405 | # Prove the exact Slack scenario: MCP agent hallucinates various model strings | COMMENT |
| MEDIUM⚡ | tests/unit/test_download_popup_lifecycle_v4.py | 998 | # --- Behavior A: event-driven Page ownership via context.on("page") (SKY-15371) --------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_download_popup_lifecycle_v4.py | 1002 | # action-window delta backstop have both been torn down. An event-driven ``context.on("page")`` owner, | 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 | 1752 | # 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/handler.py | 5136 | # zero-delay return). An event-driven download already settled/closed by the capture path | COMMENT |
| MEDIUM | skyvern/webeye/actions/parse_actions.py | 131 | # 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/cli/mcp_tools/response.py | 815 | # combined value past the formatter's own output (generic scaffolding plus | COMMENT |
| MEDIUM | skyvern/forge/failure_classifier.py | 518 | # LLM reasoning error (wrong action, hallucination) | COMMENT |
| MEDIUM | skyvern/forge/agent.py | 671 | # Exception types that indicate an LLM-specific step failure (context window, provider errors, | COMMENT |
| MEDIUM | skyvern/forge/agent.py | 3582 | # 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 | 10602 | # LLM-specific failure (e.g. context window exceeded) | COMMENT |
| MEDIUM | skyvern/forge/agent_functions.py | 2543 | # from element attributes to make sure this won't increase hallucination | COMMENT |
| MEDIUM | skyvern/forge/sdk/core/skyvern_context.py | 861 | # v3 agentic reviewer — per-run cumulative budget. Initialized at workflow | COMMENT |
| MEDIUM | skyvern/forge/sdk/copilot/composition_evidence.py | 628 | # entrypoint scaffold — ungated so the agent can record it and scout from it. | COMMENT |
| MEDIUM⚡ | skyvern/forge/sdk/copilot/code_block_preflight.py | 578 | # The wrapper scaffolding is static and valid, so any SyntaxError is in the supplied code — | COMMENT |
| MEDIUM⚡ | skyvern/forge/sdk/copilot/tools/guardrails.py | 44 | # Agents SDK guardrails may hand us either raw JSON or an already parsed mapping. | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/models/block.py | 9421 | # "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 |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_taskv3_loop.py | 13600 | # The engine summary line emits these counters. An `engages_page` tool, a click the harness refused | COMMENT |
| MEDIUM | tests/unit/test_agent_task_v3.py | 5296 | # execute harness stubs update_task, so the real contract is pinned here: failed/terminated | COMMENT |
| MEDIUM⚡ | tests/unit/test_cdp_connection_retry.py | 332 | """An invalid runtime override falls back to the settings field default (the robust | STRING |
| MEDIUM | …s/unit/test_explicit_submit_sequential_click_bypass.py | 392 | # bypass above is caused by the submit semantics, not the harness. | COMMENT |
| LOW | tests/unit/test_cached_download_s3_upload.py | 517 | # A misconfigured cached destination must halt the script (raise), not just return a | COMMENT |
| MEDIUM | tests/unit/test_workflow_copilot_route.py | 1758 | # The harness cancel seed is handed through; nothing re-authors it. | COMMENT |
| MEDIUM | tests/unit/test_workflow_copilot_route.py | 2799 | # before finalisation breaks. The name says "after staged commit"; this makes the harness mean it. | COMMENT |
| MEDIUM⚡ | tests/unit/test_download_suffix_lineage.py | 250 | # 4-case reproduction harness (real render/copy + real finalize + real contextvar naming) | COMMENT |
| MEDIUM | tests/unit/workflow/test_code_block_escalation.py | 1749 | # The harness heal path composes its goal without the floor path's `if not self.prompt` | COMMENT |
| MEDIUM | skyvern/webeye/cdp_download_interceptor.py | 125 | # and a separate local harness reproduced the interceptor replay materializing ~4/3x the body as base64. | COMMENT |
| MEDIUM | skyvern/webeye/cdp_download_interceptor.py | 126 | # Those are local-stack / replay-harness observations, not interceptor-path production measurements. | COMMENT |
| MEDIUM⚡ | skyvern/cli/lazy.py | 108 | # Click-version-robust group base | COMMENT |
| LOW | skyvern/forge/agent.py | 4018 | # TODO (kerem): keep the task object uptodate at all times so that clean_up_task can just use it | COMMENT |
| MEDIUM | skyvern/forge/sdk/copilot/hooks.py | 273 | # harness's cue to end the loop and speak for it. | COMMENT |
| MEDIUM | skyvern/forge/sdk/copilot/agent.py | 1720 | # the product can do; the harness only keeps the recorded-run sentence in front of it, | COMMENT |
| MEDIUM | skyvern/forge/sdk/copilot/agent.py | 1722 | # contradictions is the model's jurisdiction and the eval's bar, not a harness matcher. | COMMENT |
| MEDIUM | …yvern/forge/sdk/copilot/completion_output_grounding.py | 47 | # Keys the harness writes onto page evidence: facts about the capture, never page content. | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 14842 | # soft-deleted (e.g. eval harness teardown fired while the orphan | COMMENT |
| MEDIUM | skyvern/forge/sdk/workflow/service.py | 15862 | # harness tears down a workflow while the run is still executing in | COMMENT |
| MEDIUM | skyvern/forge/sdk/db/repositories/scripts.py | 970 | # Join on both script_id and organization_id to leverage uc_org_script_version index. | COMMENT |
| MEDIUM | skyvern/forge/taskv3/target_label.py | 92 | # The model cannot do this (cloud_docs/task-v3/CHARTER.md, "Is the harness doing the model's job?"): the | COMMENT |
| MEDIUM | skyvern/forge/taskv3/code_surface.py | 74 | # The accounting unit for a tool whose body the harness cannot see is the brokered operation, | COMMENT |
| MEDIUM | skyvern/forge/taskv3/loop.py | 2447 | # written by the harness itself (an exception, a retry/step ceiling). `TaskStatus.can_update_to` | COMMENT |
| MEDIUM | skyvern/forge/taskv3/loop.py | 4191 | # emitted a well-formed action call and the harness declined to dispatch it over | COMMENT |
| MEDIUM | skyvern/forge/taskv3/loop.py | 4237 | # The model attempted; the harness declined. A refusal must not read as a run | 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 | 4341 | # Invariant: loop_output_values was just set to [] above (step 5 setup). | COMMENT |
| MEDIUM | skyvern/services/browser_recording/service.py | 487 | # Base64, but Python's standard decoder is usually robust enough to | COMMENT |
| MEDIUM | skyvern/services/browser_recording/redact.py | 79 | # a classifier in the harness. A field without the attribute stays unbound. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_copilot_runtime.py | 1511 | CODE | |
| MEDIUM | tests/unit/test_copilot_runtime.py | 1551 | CODE | |
| MEDIUM | tests/unit/test_copilot_ask_user.py | 488 | CODE | |
| MEDIUM | tests/unit/test_copilot_streaming_adapter.py | 427 | CODE | |
| MEDIUM | tests/unit/test_agent_protocol_idempotency.py | 442 | CODE | |
| MEDIUM | tests/unit/test_twilio_integration_routes.py | 1597 | CODE | |
| MEDIUM | tests/unit/test_copilot_attached_file_upload.py | 398 | CODE | |
| MEDIUM | tests/unit/test_copilot_mcp_adapter.py | 602 | CODE | |
| MEDIUM | tests/unit/test_copilot_mcp_adapter.py | 637 | CODE | |
| MEDIUM | tests/unit/test_copilot_mcp_adapter.py | 1302 | CODE | |
| MEDIUM | tests/unit/test_copilot_mcp_adapter.py | 1848 | CODE | |
| MEDIUM | tests/unit/test_copilot_mcp_adapter.py | 1901 | CODE | |
| MEDIUM | tests/unit/test_copilot_mcp_adapter.py | 2432 | CODE | |
| MEDIUM | tests/unit/test_copilot_mcp_adapter.py | 2456 | CODE | |
| MEDIUM | skyvern/forge/agent_functions.py | 2773 | CODE | |
| MEDIUM | skyvern/forge/sdk/routes/scripts.py | 753 | CODE | |
| MEDIUM | skyvern/services/script_service.py | 1939 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/test_code_block_preflight.py | 248 | async def helper(): | CODE |
| LOW | tests/unit/test_code_block_preflight.py | 93 | async def helper(): | CODE |
| LOW | tests/unit/test_code_block_preflight.py | 104 | async def helper(): | CODE |
| LOW⚡ | tests/unit/test_code_block_preflight.py | 236 | code = "async def helper():\n global setup_only\n setup_only = False\n\nawait helper()\nreturn {}\n" | STRING |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 480 | def helper(): | CODE |
| LOW⚡ | …unit/test_copilot_code_artifact_metadata_violations.py | 489 | def helper(): | CODE |
| LOW | …unit/test_copilot_code_artifact_metadata_violations.py | 401 | def helper(): | CODE |
| LOW⚡ | tests/unit/test_code_block_steps.py | 486 | "def helper():\n url = 'https://example.com/a'\n\nasync def run(page):\n await page.goto(url)\n", | CODE |
| LOW⚡ | tests/unit/test_copilot_code_block_synthesis.py | 2115 | "async def helper():\n" | STRING |
| LOW⚡ | tests/unit/test_copilot_code_block_synthesis.py | 2127 | "async def helper():\n" | STRING |
| LOW⚡ | tests/unit/test_copilot_code_block_synthesis.py | 2198 | "async def helper():\n" | STRING |
| LOW⚡ | tests/unit/test_copilot_code_block_synthesis.py | 2210 | "async def helper():\n" | STRING |
| LOW | tests/unit/test_uploaded_file_retention.py | 515 | async def execute_task(**kwargs: object) -> None: | CODE |
| LOW⚡ | tests/unit/test_task_v2_compute_task.py | 276 | nested = "def helper():\n return {'output': 1}\nanswer = helper()\n" | CODE |
| LOW⚡ | skyvern/webeye/actions/handler.py | 2695 | async def helper(element_dict: dict, frame: Page | Frame) -> bool: | CODE |
| LOW | skyvern/webeye/actions/handler.py | 2664 | async def helper(element_dict: dict, frame: Page | Frame) -> bool: | CODE |
| LOW | skyvern/library/skyvern.py | 328 | 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 | 1749 | def run_task( | CODE |
| LOW | skyvern/forge/sdk/api/aws.py | 1502 | async def run_task( | CODE |
| LOW | skyvern/forge/sdk/executor/background_task_executor.py | 697 | async def execute_task( | CODE |
| LOW | skyvern/forge/sdk/executor/async_executor.py | 20 | async def execute_task( | CODE |
| LOW | skyvern/forge/sdk/routes/agent_protocol.py | 333 | async def run_task( | CODE |
| LOW | skyvern/client/client.py | 166 | def run_task( | CODE |
| LOW | skyvern/client/client.py | 4033 | async def run_task( | CODE |
| LOW | skyvern/client/raw_client.py | 90 | def run_task( | CODE |
| LOW | skyvern/client/raw_client.py | 5792 | async def run_task( | CODE |
| LOW | skyvern/services/task_v1_service.py | 111 | async def run_task( | CODE |
| LOW | skyvern/services/script_service.py | 2305 | async def run_task( | CODE |
| 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 | 1246 | # AI-generated cached scripts still get LLM verification. | COMMENT |
| 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 |
| MEDIUM | tests/unit/test_actions.py | 961 | "I cannot provide an action. The `actions` array will be empty.", | CODE |
| LOW | skyvern/forge/sdk/core/aiohttp_helper.py | 335 | # TODO: make sure to test this out | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skyvern/core/script_generations/script_skyvern_page.py | 1199 | # TODO: add validation here. if it doesn't pass the validation criteria: | COMMENT |
| LOW | skyvern/webeye/cdp_download_interceptor.py | 1356 | # TODO: implement proper filename dedup (e.g., content hash or UUID suffix) | COMMENT |
| LOW | skyvern/forge/agent_functions.py | 712 | # 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 |