⚙️ Create and run workflows (RPA 2.0)
This report presents the forensic synthetic code analysis of browser-use/workflow-use, a Python project with 4,089 GitHub stars. SynthScan v2.0 examined 47,364 lines of code across 160 source files, recording 871 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 26.8 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 871 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …es/scripts/variables/create_workflow_with_variables.py | 8 | Run: cd workflows && uv run python examples/create_workflow_with_variables.py | STRING |
| HIGH | …/examples/scripts/demos/hierarchical_selection_demo.py | 240 | let element = null; | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 987 | matches.push({{ element: el, text: text || ariaLabel || title, priority: 1 }}); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 987 | matches.push({{ element: el, text: text || ariaLabel || title, priority: 1 }}); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 991 | matches.push({{ element: el, text: text || ariaLabel || title, priority: 2 }}); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 991 | matches.push({{ element: el, text: text || ariaLabel || title, priority: 2 }}); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 995 | matches.push({{ element: el, text: text || ariaLabel || title, priority: 3 }}); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 995 | matches.push({{ element: el, text: text || ariaLabel || title, priority: 3 }}); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 1000 | if (targetWords.length > 0 && targetWords.every(word => allText.includes(word))) {{ | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 1001 | matches.push({{ element: el, text: text || ariaLabel || title, priority: 4 }}); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_executor.py | 1001 | matches.push({{ element: el, text: text || ariaLabel || title, priority: 4 }}); | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_executor.py | 783 | null, | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_executor.py | 959 | if (rect.width === 0 || rect.height === 0 || | CODE |
| HIGH | workflows/workflow_use/workflow/step_verifier.py | 488 | return selected ? selected.text : null; | STRING |
| HIGH⚡ | workflows/workflow_use/workflow/element_finder.py | 475 | null, | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/element_finder.py | 482 | return null; | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/element_finder.py | 488 | const isVisible = rect.width > 0 && rect.height > 0 && | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 216 | function debugMessage(msg, data = null) { | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 219 | debugLog.push({ message: msg, data: data, timestamp: Date.now() }); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 615 | hints.push('click_date'); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 617 | hints.push('selected_date'); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 621 | hints.push('select_option'); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 623 | hints.push('expanded'); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 627 | hints.push('select_flight'); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 629 | hints.push('selection_button'); | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 698 | if (!elementText && el.getAttribute('aria-label')) { | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 700 | } else if (!elementText && el.getAttribute('title')) { | CODE |
| HIGH⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 702 | } else if (!elementText && el.getAttribute('placeholder')) { | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_extractor.py | 267 | .filter(attr => attr.name && attr.name.startsWith('data-')) | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_extractor.py | 481 | while (current && current !== document.body && path.length < 5) { | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_extractor.py | 490 | if (firstClass && firstClass.match(/^[a-zA-Z_-][a-zA-Z0-9_-]*$/)) { | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_extractor.py | 548 | if (cellText && cellText.length < 50) { | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_extractor.py | 650 | if (rect.width === 0 || rect.height === 0 || | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_extractor.py | 682 | if (el.type && el.type !== 'submit' && el.type !== 'button' && el.type !== '') { | CODE |
| HIGH | workflows/workflow_use/workflow/semantic_extractor.py | 746 | elements.push(elementData); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | workflows/migrate_json_to_yaml.py | 56 | except Exception as e: | CODE |
| LOW | workflows/migrate_json_to_yaml.py | 109 | except Exception as e: | CODE |
| MEDIUM | workflows/migrate_json_to_yaml.py | 208 | print(f'Error: Directory does not exist: {directory}') | STRING |
| MEDIUM | workflows/migrate_json_to_yaml.py | 212 | print(f'Error: Not a directory: {directory}') | STRING |
| LOW⚡ | workflows/cli.py | 1216 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 39 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 110 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 147 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 192 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 201 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 240 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 440 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 456 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 489 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 639 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 657 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 790 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 824 | except Exception: | CODE |
| LOW | workflows/cli.py | 930 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1008 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1159 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1176 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1320 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1372 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1383 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1516 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1609 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1736 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1829 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 1872 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 2015 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 2095 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 2295 | except Exception as e: | CODE |
| LOW | workflows/cli.py | 2392 | except Exception as e: | CODE |
| LOW | workflows/tests/test_selector_generator.py | 284 | except Exception as e: | CODE |
| LOW | workflows/tests/test_recorded_workflow.py | 22 | except Exception as e: | CODE |
| LOW⚡ | workflows/tests/test_progress_tracking.py | 118 | except Exception as e: | CODE |
| LOW | workflows/tests/test_element_finder.py | 318 | except Exception as e: | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 220 | except Exception as e: | CODE |
| LOW | workflows/tests/test_go_back_fix.py | 39 | except Exception as e: | CODE |
| LOW | workflows/tests/test_go_back_fix.py | 59 | except Exception as e: | CODE |
| LOW | workflows/tests/test_xpath_optimization.py | 440 | except Exception as e: | CODE |
| LOW | workflows/backend/service.py | 189 | except Exception as e: | CODE |
| MEDIUM | workflows/backend/service.py | 190 | print(f'Error loading workflow: {e}') | CODE |
| LOW | workflows/backend/service.py | 226 | except Exception as exc: | CODE |
| LOW | workflows/backend/routers.py | 85 | except Exception as exc: | CODE |
| LOW | …s/scripts/deterministic/test_deterministic_workflow.py | 83 | except Exception as e: | CODE |
| LOW | …s/scripts/deterministic/test_deterministic_workflow.py | 133 | except Exception as e: | CODE |
| LOW | …ows/examples/scripts/deterministic/test_custom_task.py | 96 | except Exception as e: | STRING |
| LOW | …amples/scripts/deterministic/auto_generate_workflow.py | 141 | except Exception as e: | STRING |
| LOW | …ws/examples/scripts/deterministic/run_complete_test.py | 108 | except Exception as e: | CODE |
| LOW | …ws/examples/scripts/deterministic/run_complete_test.py | 124 | except Exception as e: | CODE |
| LOW | …mples/scripts/variables/run_workflow_with_variables.py | 34 | except Exception as e: | CODE |
| LOW | …ows/examples/scripts/demos/semantic_extraction_demo.py | 74 | except Exception as e: | CODE |
| LOW | …/examples/scripts/demos/hierarchical_selection_demo.py | 338 | except Exception as e: | STRING |
| LOW | …/examples/scripts/demos/hierarchical_selection_demo.py | 791 | except Exception as e: | CODE |
| LOW | workflows/examples/scripts/demos/cloud_browser_demo.py | 46 | except Exception as e: | CODE |
| LOW⚡ | workflows/examples/scripts/demos/travel_booking_demo.py | 180 | except Exception as e: | CODE |
| LOW⚡ | workflows/examples/scripts/demos/travel_booking_demo.py | 342 | except Exception: | CODE |
| LOW⚡ | workflows/examples/scripts/demos/travel_booking_demo.py | 352 | except Exception as e: | CODE |
| 166 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | extension/src/entrypoints/background.ts | 92 | async function broadcastWorkflowDataUpdate(): Promise<Workflow> { | CODE |
| LOW | extension/src/entrypoints/background.ts | 299 | function convertStoredEventsToSteps(events: StoredEvent[]): Step[] { | CODE |
| LOW | workflows/cli.py | 65 | def _build_and_save_workflow_from_recording( | CODE |
| LOW | workflows/cli.py | 153 | def _build_and_save_semantic_workflow_from_recording( | CODE |
| LOW | workflows/cli.py | 245 | def _fix_missing_navigation_steps(steps): | CODE |
| LOW | workflows/cli.py | 380 | async def _convert_recording_to_semantic_workflow(recording_data, description, simulate_interactions, auto_fix_navigatio | CODE |
| LOW | workflows/cli.py | 525 | def _filter_redundant_click_events(steps): | CODE |
| LOW | workflows/cli.py | 618 | def _select_best_click_from_group(click_group): | CODE |
| LOW | workflows/cli.py | 687 | async def _convert_step_to_semantic(step, semantic_mapping, browser, simulate_interactions): | CODE |
| LOW | workflows/cli.py | 796 | async def _simulate_step_interaction(step, browser): | CODE |
| LOW | workflows/cli.py | 829 | def _find_best_semantic_match(element_text, semantic_mapping): | CODE |
| LOW | workflows/cli.py | 850 | def _extract_target_from_selector(css_selector): | CODE |
| LOW | workflows/cli.py | 1017 | def build_from_recording_command( | CODE |
| LOW | workflows/cli.py | 1051 | def build_semantic_from_recording_command( | CODE |
| LOW | workflows/cli.py | 1328 | def run_workflow_no_ai_command( | CODE |
| LOW | workflows/cli.py | 1524 | def generate_semantic_mapping_command( | CODE |
| LOW | workflows/cli.py | 1617 | def create_semantic_workflow_command( | CODE |
| LOW | workflows/cli.py | 1631 | async def _create_semantic_workflow(): | CODE |
| LOW | workflows/cli.py | 2186 | def generate_csv_template_command( | CODE |
| LOW | workflows/cli.py | 2304 | def generate_workflow_from_task( | CODE |
| LOW | workflows/tests/test_selector_generator_fix.py | 11 | def test_selector_generator_initialization(): | CODE |
| LOW | workflows/tests/test_selector_generator.py | 18 | def test_button_with_text_generates_semantic_strategies(self): | CODE |
| LOW | workflows/tests/test_selector_generator.py | 45 | def test_no_css_id_strategies(self): | CODE |
| LOW⚡ | workflows/tests/test_selector_generator.py | 84 | def test_placeholder_strategy(self): | CODE |
| LOW | workflows/tests/test_selector_generator.py | 147 | def test_explicit_role_takes_precedence(self): | CODE |
| LOW | workflows/tests/test_selector_generator.py | 153 | def test_strategy_priority_ordering(self): | CODE |
| LOW | workflows/tests/test_selector_generator.py | 172 | def test_element_with_no_semantic_data(self): | CODE |
| LOW | workflows/tests/test_selector_generator.py | 183 | def test_generate_strategies_dict(self): | CODE |
| LOW | workflows/tests/test_selector_generator.py | 201 | def test_fuzzy_text_only_for_meaningful_text(self): | CODE |
| LOW | workflows/tests/test_selector_generator.py | 226 | def test_selector_strategy_serialization(self): | CODE |
| LOW | workflows/tests/test_wait_times.py | 303 | async def test_run_with_no_ai_wait_logic(): | CODE |
| LOW | workflows/tests/test_progress_tracking.py | 44 | def test_step_callback_data_structure(self): | CODE |
| LOW | workflows/tests/test_progress_tracking.py | 72 | def test_status_callback_messages(self): | CODE |
| LOW | workflows/tests/test_progress_tracking.py | 94 | def test_callbacks_are_optional(self): | CODE |
| LOW⚡ | workflows/tests/test_progress_tracking.py | 108 | def test_callback_exception_handling(self): | CODE |
| LOW⚡ | workflows/tests/test_progress_tracking.py | 123 | def test_async_callback_pattern(self): | CODE |
| LOW | workflows/tests/test_progress_tracking.py | 178 | def test_description_generation(self): | CODE |
| LOW | workflows/tests/test_progress_tracking.py | 246 | async def test_full_workflow_with_callbacks(self): | CODE |
| LOW | workflows/tests/test_element_finder.py | 175 | async def test_multiple_strategies_fallback(self): | CODE |
| LOW | workflows/tests/test_element_finder.py | 202 | async def test_no_match_returns_none(self): | CODE |
| LOW | workflows/tests/test_element_finder.py | 222 | async def test_empty_strategies_returns_none(self): | CODE |
| LOW | workflows/tests/test_element_finder.py | 231 | async def test_no_dom_state_returns_none(self): | CODE |
| LOW | workflows/tests/test_element_finder.py | 243 | async def test_empty_selector_map_returns_none(self): | CODE |
| LOW | workflows/tests/test_element_finder.py | 257 | async def test_fuzzy_matching_threshold(self): | CODE |
| LOW | workflows/tests/test_element_finder.py | 275 | async def test_fuzzy_matching_case_insensitive(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 20 | def test_go_back_uses_no_params_action(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 37 | def test_go_forward_uses_no_params_action(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 52 | def test_other_actions_preserve_params(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 65 | def test_action_model_format_for_empty_actions(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 80 | def test_navigation_step_schema(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 88 | async def test_click_action_uses_multi_strategy(self): | CODE |
| LOW⚡ | workflows/tests/test_workflow_execution.py | 104 | async def test_input_action_uses_multi_strategy(self): | CODE |
| LOW⚡ | workflows/tests/test_workflow_execution.py | 118 | async def test_actions_without_strategies_skip_multi_strategy(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 131 | async def test_element_index_injection(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 146 | def test_semantic_strategies_format(self): | CODE |
| LOW | workflows/tests/test_workflow_execution.py | 168 | def test_actions_requiring_wait(self): | CODE |
| LOW | workflows/tests/test_step_counter_without_callback.py | 9 | def test_step_counter_increments_without_callback(): | CODE |
| LOW | workflows/tests/test_step_counter_without_callback.py | 77 | def test_status_update_uses_counter(): | CODE |
| LOW⚡ | workflows/tests/test_xpath_optimization.py | 25 | def test_xpath_optimization_generates_limited_strategies(self): | CODE |
| LOW⚡ | workflows/tests/test_xpath_optimization.py | 55 | def test_xpath_optimization_disabled_generates_single_strategy(self): | CODE |
| 123 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 22 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 24 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 52 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 54 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 74 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 76 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 84 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 86 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 94 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 96 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 104 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 106 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 114 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 116 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 124 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 126 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 134 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 136 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 144 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 146 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 182 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 184 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 210 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 212 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 237 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 239 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 258 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 260 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 287 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 289 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 297 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 299 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 320 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 322 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 346 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 348 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 369 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 371 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 391 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/tests/test_xpath_optimization.py | 393 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/examples/scripts/generate_workflow.py | 23 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/examples/scripts/generate_workflow.py | 25 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | workflows/examples/scripts/generate_workflow.py | 33 | # ============================================================================ | STRING |
| MEDIUM⚡ | workflows/examples/scripts/generate_workflow.py | 35 | # ============================================================================ | STRING |
| MEDIUM⚡ | workflows/examples/scripts/generate_workflow.py | 47 | # ============================================================================ | STRING |
| MEDIUM⚡ | workflows/examples/scripts/generate_workflow.py | 49 | # ============================================================================ | STRING |
| MEDIUM | workflows/workflow_use/workflow/service.py | 947 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | workflows/workflow_use/workflow/service.py | 949 | # ------------------------------------------------------------------ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | workflows/cli.py | 1226 | # Check if all REQUIRED inputs have defaults (can skip prompting) | COMMENT |
| LOW | workflows/cli.py | 267 | # Check if this looks like a form progression (common patterns) | COMMENT |
| LOW | workflows/cli.py | 334 | # Check if this looks like a navigation button for our target page | COMMENT |
| LOW | workflows/cli.py | 550 | # Check if this is a duplicate click on the same target | COMMENT |
| LOW⚡ | workflows/cli.py | 1225 | if input_definitions: # Check if the list is not empty | CODE |
| LOW | workflows/cli.py | 1397 | # Check if all REQUIRED inputs have defaults (can skip prompting) | COMMENT |
| LOW | workflows/cli.py | 1919 | # Check if we should stop execution due to critical failures | COMMENT |
| LOW | workflows/cli.py | 2509 | # Check if all REQUIRED inputs have defaults (can run without user input) | COMMENT |
| LOW | workflows/cli.py | 1396 | if input_definitions: # Check if the list is not empty | CODE |
| LOW | workflows/tests/test_step_counter_without_callback.py | 42 | # Check if this line is NOT inside an "if self.on_step_recorded:" block | COMMENT |
| LOW | workflows/tests/run_all_tests.py | 19 | # Print output | COMMENT |
| LOW | …mples/scripts/variables/run_workflow_with_variables.py | 134 | # Check if created by create script | COMMENT |
| LOW | workflows/workflow_use/controller/service.py | 127 | # Check if it's a SELECT element | COMMENT |
| LOW | workflows/workflow_use/schema/views.py | 247 | # Check if last step is an extract step | COMMENT |
| LOW | workflows/workflow_use/workflow/service.py | 570 | # Check if placeholder wasn't resolved (value unchanged and still has placeholders) | COMMENT |
| LOW | workflows/workflow_use/workflow/service.py | 646 | # Check if this is a selector step without cssSelector - use semantic execution | COMMENT |
| LOW | workflows/workflow_use/workflow/service.py | 903 | # Check if cancellation was requested | COMMENT |
| LOW | workflows/workflow_use/workflow/service.py | 1094 | # Check if cancellation was requested | COMMENT |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 295 | # Check if hints suggest this is a name field | COMMENT |
| LOW | workflows/workflow_use/workflow/validation_utils.py | 51 | # Check if any are visible | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/semantic_executor.py | 559 | # Check if element exists first | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/semantic_executor.py | 565 | # Check if it's visible | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/semantic_executor.py | 568 | # Check if this selector resolves to multiple elements (strict mode violation) | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/semantic_executor.py | 2168 | # Check if we're still on the same form step/page when we should have progressed | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/semantic_executor.py | 2912 | # Check if this is a calendar element | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/semantic_executor.py | 2914 | # Check if date matches | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/semantic_executor.py | 2918 | # Check if it's the right calendar type | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 254 | # Check if target matches either the full text or original text | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 306 | # Check if target text is contained in element text, original text, OR label text | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 315 | # Check if the target text matches the value or is close to the label | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 389 | # Check if text matches common ID/code patterns | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 412 | # Check if element is in a structured container | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 419 | # Check if text looks like an ID/code | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 445 | # Check if any significant keyword appears | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1116 | # Check if input has pointer-events: none (hidden input pattern) | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1212 | # Check if this is a submit button that should trigger navigation | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1903 | # Check if we've hit global failure limits before starting | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1999 | # Check if we should stop due to verification failures | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2247 | # Check if the target element for the next step is now available | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2291 | # Check if expected elements are present on page | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2526 | # Check if it's a SELECT element | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2984 | # Check if this is a dropdown element | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2986 | # Check if option text matches | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 3048 | # Check if this is a booking element | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/step_verifier.py | 364 | # Check if URL changed | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/step_verifier.py | 368 | # Check if DOM changed significantly | COMMENT |
| LOW⚡ | workflows/workflow_use/workflow/step_verifier.py | 373 | # Check if visible elements changed | COMMENT |
| LOW | workflows/workflow_use/workflow/step_verifier.py | 343 | # Check if page is in a loading state | COMMENT |
| LOW | workflows/workflow_use/workflow/step_verifier.py | 521 | # Check if output was captured | COMMENT |
| LOW | workflows/workflow_use/workflow/element_finder.py | 202 | # Check if element matches the strategy | COMMENT |
| LOW | workflows/workflow_use/workflow/element_finder.py | 233 | # Check if node is visible - this is a hard requirement | COMMENT |
| LOW | workflows/workflow_use/workflow/element_finder.py | 276 | # Check if target_text matches any text source | COMMENT |
| LOW | workflows/workflow_use/workflow/element_finder.py | 378 | # Check if node is visible - this is a hard requirement | COMMENT |
| LOW | workflows/workflow_use/workflow/element_finder.py | 423 | # Check if target_text matches any text source | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_extractor.py | 884 | # Check if the selector contains the target as an ID or name | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_extractor.py | 903 | # Check if the context matches | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_extractor.py | 907 | # Check if context matches container or DOM path | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_extractor.py | 1003 | # Check if all parts of the target word appear in the element text | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_extractor.py | 1044 | # Check if the base text matches | COMMENT |
| LOW⚡ | workflows/workflow_use/recorder/service.py | 141 | # Check if browser is still running by trying to get current page | COMMENT |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | workflows/migrate_json_to_yaml.py | 61 | CODE | |
| LOW | workflows/cli.py | 245 | CODE | |
| LOW | workflows/cli.py | 316 | CODE | |
| LOW | workflows/cli.py | 380 | CODE | |
| LOW | workflows/cli.py | 525 | CODE | |
| LOW | workflows/cli.py | 618 | CODE | |
| LOW | workflows/cli.py | 687 | CODE | |
| LOW | workflows/cli.py | 796 | CODE | |
| LOW | workflows/cli.py | 1182 | CODE | |
| LOW | workflows/cli.py | 1328 | CODE | |
| LOW | workflows/cli.py | 1524 | CODE | |
| LOW | workflows/cli.py | 1617 | CODE | |
| LOW | workflows/cli.py | 1744 | CODE | |
| LOW | workflows/cli.py | 2186 | CODE | |
| LOW | workflows/cli.py | 2439 | CODE | |
| LOW | workflows/cli.py | 1198 | CODE | |
| LOW | workflows/cli.py | 1352 | CODE | |
| LOW | workflows/cli.py | 1538 | CODE | |
| LOW | workflows/cli.py | 1631 | CODE | |
| LOW | workflows/cli.py | 1805 | CODE | |
| LOW | workflows/cli.py | 2021 | CODE | |
| LOW | workflows/tests/test_progress_tracking.py | 178 | CODE | |
| LOW | workflows/tests/test_progress_tracking.py | 213 | CODE | |
| LOW | workflows/tests/test_step_counter_without_callback.py | 9 | CODE | |
| LOW | workflows/examples/scripts/generate_workflow.py | 52 | CODE | |
| LOW | …ows/examples/scripts/deterministic/test_custom_task.py | 17 | CODE | |
| LOW | …ws/examples/scripts/deterministic/run_complete_test.py | 70 | CODE | |
| LOW | …scripts/deterministic/create_deterministic_workflow.py | 20 | CODE | |
| LOW | …/examples/scripts/demos/hierarchical_selection_demo.py | 343 | CODE | |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 46 | CODE | |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 184 | CODE | |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 245 | CODE | |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 273 | CODE | |
| LOW | workflows/workflow_use/mcp/service.py | 27 | CODE | |
| LOW | workflows/workflow_use/storage/service.py | 80 | CODE | |
| LOW | workflows/workflow_use/controller/utils.py | 133 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 139 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 508 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 586 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 630 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 723 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 851 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 1047 | CODE | |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 132 | CODE | |
| LOW | workflows/workflow_use/workflow/validation_utils.py | 26 | CODE | |
| LOW | workflows/workflow_use/workflow/validation_utils.py | 90 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 225 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 356 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 483 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 526 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 599 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 638 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 743 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1046 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1401 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1550 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1863 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 1901 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2163 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2273 | CODE | |
| 42 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | extension/src/entrypoints/content.ts | 46 | "placeholder", | CODE |
| LOW | workflows/cli.py | 729 | semantic_info.get('placeholder', ''), | CODE |
| LOW | workflows/cli.py | 2253 | names = ['John Doe', 'Jane Smith', 'Bob Johnson'] | CODE |
| LOW⚡ | workflows/tests/test_selector_generator.py | 86 | element_data = {'tag_name': 'input', 'text': '', 'attributes': {'placeholder': 'Enter your email'}} | CODE |
| LOW⚡ | workflows/tests/test_selector_generator.py | 91 | assert 'placeholder' in strategy_types, 'Missing placeholder strategy' | CODE |
| LOW⚡ | workflows/tests/test_selector_generator.py | 93 | placeholder = next(s for s in strategies if s.type == 'placeholder') | CODE |
| LOW | workflows/tests/test_element_finder.py | 103 | strategies = [{'type': 'placeholder', 'value': 'Enter your email', 'priority': 4, 'metadata': {}}] | CODE |
| LOW⚡ | workflows/tests/test_workflow_execution.py | 110 | 'selectorStrategies': [{'type': 'placeholder', 'value': 'Enter your email', 'priority': 4, 'metadata': {}}], | CODE |
| LOW⚡ | workflows/tests/test_xpath_optimization.py | 192 | 'attributes': {'name': 'email', 'type': 'email', 'placeholder': 'Enter your email'}, | CODE |
| LOW⚡ | workflows/tests/test_xpath_optimization.py | 200 | assert 'placeholder' in strategy_types, 'Should have placeholder strategy' | CODE |
| LOW⚡ | …mples/scripts/variables/run_workflow_with_variables.py | 326 | valid = {'email': 'user@example.com', 'age': 25, 'subscribe': True} | CODE |
| LOW⚡ | …mples/scripts/variables/run_workflow_with_variables.py | 333 | print(" {'email': 'user@example.com'}") | CODE |
| LOW⚡ | …mples/scripts/variables/run_workflow_with_variables.py | 337 | print(" {'email': 'user@example.com', 'age': 'twenty-five'}") | CODE |
| LOW⚡ | …mples/scripts/variables/run_workflow_with_variables.py | 341 | print(" {'email': 'user@example.com', 'age': 25, 'extra': 'field'}") | CODE |
| LOW | …/examples/scripts/demos/hierarchical_selection_demo.py | 462 | ('John Doe', 2), # First data row (after header) | STRING |
| LOW | …/examples/scripts/demos/hierarchical_selection_demo.py | 602 | "await executor.find_element_in_container('Edit', container_text='John Doe')", | STRING |
| LOW⚡ | workflows/workflow_use/controller/utils.py | 57 | 'placeholder', | CODE |
| LOW | workflows/workflow_use/controller/utils.py | 143 | for attr in ['placeholder', 'aria-label', 'title', 'name']: | CODE |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 270 | if 'placeholder' in context: | CODE |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 271 | hints.append(context['placeholder'].lower()) | CODE |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 351 | for key in ['name', 'id', 'label', 'placeholder', 'target_text']: | CODE |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 408 | for key in ['labelText', 'placeholder', 'ariaLabel', 'name', 'id', 'textContent']: | CODE |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 438 | if 'placeholder' in context and context['placeholder']: | CODE |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 439 | return f'Enter {context["placeholder"].lower()}' | CODE |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 975 | const placeholder = el.getAttribute('placeholder') || ''; | CODE |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2761 | container_text: Text content to identify the container (e.g., "John Doe") | STRING |
| LOW⚡ | workflows/workflow_use/workflow/element_finder.py | 576 | node_placeholder = getattr(node, 'placeholder', '') or '' | CODE |
| LOW⚡ | workflows/workflow_use/workflow/element_finder.py | 577 | if node_placeholder and element_data.get('placeholder'): | CODE |
| LOW⚡ | workflows/workflow_use/workflow/element_finder.py | 579 | if node_placeholder == element_data['placeholder']: | CODE |
| LOW | workflows/workflow_use/workflow/element_finder.py | 117 | 'placeholder', | CODE |
| LOW | workflows/workflow_use/workflow/element_finder.py | 257 | placeholder = get_attr(node, 'placeholder', '') or '' | CODE |
| LOW | workflows/workflow_use/workflow/element_finder.py | 332 | elif strategy_type == 'placeholder': | CODE |
| LOW | workflows/workflow_use/workflow/element_finder.py | 333 | placeholder = get_attr(node, 'placeholder', '') or '' | CODE |
| LOW | workflows/workflow_use/workflow/element_finder.py | 404 | placeholder = getattr(node, 'placeholder', '') or '' | CODE |
| LOW⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 702 | } else if (!elementText && el.getAttribute('placeholder')) { | CODE |
| LOW⚡ | workflows/workflow_use/workflow/semantic_extractor.py | 703 | elementText = el.getAttribute('placeholder'); | CODE |
| LOW | workflows/workflow_use/workflow/semantic_extractor.py | 73 | element_info.get('placeholder', ''), | CODE |
| LOW | workflows/workflow_use/workflow/error_reporter.py | 252 | not s.success and s.strategy_type in ['text_exact', 'role_text', 'aria_label', 'placeholder'] | CODE |
| LOW⚡ | …orkflow_use/workflow/tests/test_variable_identifier.py | 35 | context = {'name': 'phone', 'placeholder': 'Enter phone number'} | CODE |
| LOW | …orkflow_use/workflow/tests/test_variable_identifier.py | 128 | 'semanticInfo': {'name': 'username', 'placeholder': 'Enter username'}, | CODE |
| LOW | …orkflow_use/workflow/tests/test_variable_identifier.py | 169 | 'value': '555-1234', | CODE |
| LOW | workflows/workflow_use/recorder/semantic_converter.py | 163 | for field in ['placeholder', 'ariaLabel']: | CODE |
| LOW | workflows/workflow_use/healing/service.py | 554 | or attrs.get('placeholder') | CODE |
| LOW | workflows/workflow_use/healing/service.py | 624 | or attrs.get('placeholder') | CODE |
| LOW | …kflows/workflow_use/healing/deterministic_converter.py | 362 | for attr in ['aria-label', 'placeholder', 'title', 'alt']: | CODE |
| LOW⚡ | workflows/workflow_use/healing/selector_generator.py | 153 | if 'placeholder' in attrs and attrs['placeholder']: | CODE |
| LOW⚡ | workflows/workflow_use/healing/selector_generator.py | 156 | type='placeholder', | CODE |
| LOW⚡ | workflows/workflow_use/healing/selector_generator.py | 157 | value=attrs['placeholder'], | CODE |
| LOW | workflows/workflow_use/healing/selector_generator.py | 383 | elif 'placeholder' in attrs and attrs['placeholder']: | CODE |
| LOW | workflows/workflow_use/healing/selector_generator.py | 384 | conditions.append(f'@placeholder={self._escape_xpath_value(attrs["placeholder"])}') | CODE |
| LOW⚡ | workflows/workflow_use/healing/selector_generator.py | 444 | if 'placeholder' in attrs and attrs['placeholder']: | CODE |
| LOW⚡ | workflows/workflow_use/healing/selector_generator.py | 445 | parts.append(f'[placeholder="{self._escape_quotes(attrs["placeholder"])}"]') | CODE |
| LOW⚡ | …/workflow_use/healing/tests/test_variable_extractor.py | 25 | assert markers[0][2] == 'user@example.com' # value | CODE |
| LOW | …flow_use/healing/prompts/workflow_validation_prompt.md | 60 | - Example: `{"value": "John Doe"}` in a search field → should be `{"value": "{{search_name}}"}` | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | workflows/cli.py | 1361 | # Create a dummy LLM instance since it's required by the constructor but won't be used for interactions | COMMENT |
| MEDIUM | workflows/cli.py | 2230 | # Create a basic template anyway | COMMENT |
| MEDIUM | workflows/tests/test_selector_generator_fix.py | 15 | # Create a HealingService instance | COMMENT |
| MEDIUM | workflows/tests/test_wait_times.py | 43 | # Create a test workflow with various wait times | COMMENT |
| MEDIUM | workflows/tests/test_wait_times.py | 119 | # Create a simple test workflow YAML | COMMENT |
| MEDIUM | workflows/tests/test_wait_times.py | 248 | # Create a workflow with known wait times | COMMENT |
| MEDIUM | workflows/tests/test_wait_times.py | 309 | # Create a test workflow with various wait times | COMMENT |
| MEDIUM | workflows/tests/test_go_back_fix.py | 17 | # Create a minimal workflow with a go_back action | COMMENT |
| MEDIUM | …/examples/scripts/demos/hierarchical_selection_demo.py | 460 | # Define the users and their row positions | STRING |
| MEDIUM | workflows/workflow_use/mcp/service.py | 79 | # Define the actual function that will be called by FastMCP | COMMENT |
| MEDIUM | workflows/workflow_use/healing/service.py | 367 | # Create a mock DOMInteractedElement from captured data | COMMENT |
| MEDIUM | workflows/workflow_use/healing/service.py | 370 | # Create a simple object with the needed attributes | COMMENT |
| MEDIUM | workflows/workflow_use/healing/service.py | 457 | # Create a shared map to capture element text during agent execution | COMMENT |
| MEDIUM | workflows/workflow_use/healing/service.py | 463 | # Create a custom controller that captures element mappings | COMMENT |
| MEDIUM | workflows/workflow_use/healing/service.py | 630 | # Create a simplified dict with the data we need | COMMENT |
| MEDIUM | …s/workflow_use/healing/tests/test_generate_workflow.py | 49 | # Define the task prompt | COMMENT |
| MEDIUM | workflows/workflow_use/healing/tests/test_validator.py | 34 | # Create a sample workflow with known issues | COMMENT |
| MEDIUM | workflows/workflow_use/builder/service.py | 54 | # This function provides the detailed schema for the LLM. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 27 | # Step 1: Navigation step | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 33 | # Step 2: Click step (using semantic target_text) | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 41 | # Step 3: Extract content step | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 47 | # Step 4: Click on Issues tab | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 53 | # Step 5: Click on New Issue button | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 59 | # Step 6: Input text into title field | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 66 | # Step 7: Input text into description | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 73 | # Step 8: Select dropdown option | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 80 | # Step 9: Checkbox interaction | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 87 | # Step 10: Press keyboard key | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 92 | # Step 11: Agent step - for complex tasks that need AI | COMMENT |
| LOW⚡ | workflows/examples/scripts/demos/travel_booking_demo.py | 173 | # Step 7: Analyze and select flight | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 60 | # Step 1: Handle departure city input | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 73 | # Step 2: Handle destination city input | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 86 | # Step 3: Handle departure date selection | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 132 | # Step 4: Handle return date selection | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 146 | # Step 5: Handle travelers and cabin class | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 160 | # Step 6: Search for flights | COMMENT |
| LOW | …rkflows/examples/scripts/demos/generation_mode_demo.py | 50 | # Step 1: Generate workflow | COMMENT |
| LOW⚡ | …rkflows/examples/scripts/demos/generation_mode_demo.py | 90 | # Step 2: Save to storage | COMMENT |
| LOW⚡ | …rkflows/examples/scripts/demos/generation_mode_demo.py | 106 | # Step 3: List workflows | COMMENT |
| LOW⚡ | …rkflows/examples/scripts/demos/generation_mode_demo.py | 112 | # Step 4: Retrieve and display | COMMENT |
| LOW | …rkflows/examples/scripts/demos/generation_mode_demo.py | 124 | # Step 5: Run the workflow | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2772 | # Step 1: Find the container | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2793 | # Step 2: Find the target element within the container | COMMENT |
| LOW⚡ | workflows/workflow_use/healing/service.py | 134 | # Step 2: Clean up YAML | COMMENT |
| LOW | workflows/workflow_use/healing/service.py | 89 | # Step 1: Pattern-based variable identification | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 27 | # Step 1: Navigation step | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 33 | # Step 2: Click step (using semantic target_text) | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 41 | # Step 3: Extract content step | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 47 | # Step 4: Click on Issues tab | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 53 | # Step 5: Click on New Issue button | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 59 | # Step 6: Input text into title field | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 66 | # Step 7: Input text into description | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 73 | # Step 8: Select dropdown option | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 80 | # Step 9: Checkbox interaction | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 87 | # Step 10: Press keyboard key | COMMENT |
| LOW⚡ | …rkflows/examples/workflows/basic/example_workflow.yaml | 92 | # Step 11: Agent step - for complex tasks that need AI | COMMENT |
| LOW⚡ | workflows/examples/scripts/demos/travel_booking_demo.py | 173 | # Step 7: Analyze and select flight | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 60 | # Step 1: Handle departure city input | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 73 | # Step 2: Handle destination city input | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 86 | # Step 3: Handle departure date selection | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 132 | # Step 4: Handle return date selection | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 146 | # Step 5: Handle travelers and cabin class | COMMENT |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 160 | # Step 6: Search for flights | COMMENT |
| LOW | …rkflows/examples/scripts/demos/generation_mode_demo.py | 50 | # Step 1: Generate workflow | COMMENT |
| LOW⚡ | …rkflows/examples/scripts/demos/generation_mode_demo.py | 90 | # Step 2: Save to storage | COMMENT |
| LOW⚡ | …rkflows/examples/scripts/demos/generation_mode_demo.py | 106 | # Step 3: List workflows | COMMENT |
| LOW⚡ | …rkflows/examples/scripts/demos/generation_mode_demo.py | 112 | # Step 4: Retrieve and display | COMMENT |
| LOW | …rkflows/examples/scripts/demos/generation_mode_demo.py | 124 | # Step 5: Run the workflow | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2772 | # Step 1: Find the container | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2793 | # Step 2: Find the target element within the container | COMMENT |
| LOW⚡ | workflows/workflow_use/healing/service.py | 134 | # Step 2: Clean up YAML | COMMENT |
| LOW | workflows/workflow_use/healing/service.py | 89 | # Step 1: Pattern-based variable identification | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/examples/scripts/demos/hierarchical_selection_demo.py | 441 | # Example 4: Table row selection with comprehensive recording | STRING |
| MEDIUM | …/examples/scripts/demos/hierarchical_selection_demo.py | 650 | # Generate the comprehensive interaction mapping | STRING |
| MEDIUM | …/examples/scripts/demos/hierarchical_selection_demo.py | 739 | """Generate the final interaction mapping with comprehensive examples""" | STRING |
| MEDIUM⚡ | workflows/examples/scripts/demos/travel_booking_demo.py | 365 | """Generate a comprehensive interaction report.""" | STRING |
| MEDIUM | workflows/workflow_use/schema/views.py | 39 | # NEW: Multi-strategy selectors for robust element finding | COMMENT |
| MEDIUM | workflows/workflow_use/workflow/service.py | 212 | # This way we leverage browser-use's robust action handling | COMMENT |
| MEDIUM | workflows/workflow_use/workflow/service.py | 212 | # This way we leverage browser-use's robust action handling | COMMENT |
| MEDIUM⚡ | workflows/workflow_use/workflow/semantic_executor.py | 2087 | # Create comprehensive error context | COMMENT |
| MEDIUM | workflows/workflow_use/workflow/semantic_executor.py | 1951 | # Run comprehensive step verification if enabled | COMMENT |
| MEDIUM | workflows/workflow_use/workflow/semantic_executor.py | 2108 | # Generate and log comprehensive error report | COMMENT |
| MEDIUM | workflows/workflow_use/recorder/recorder.py | 1 | # Enhanced recorder with comprehensive event types and intelligent merging | COMMENT |
| MEDIUM | workflows/workflow_use/recorder/semantic_converter.py | 176 | # Extract ID using regex - more robust approach | COMMENT |
| MEDIUM | workflows/workflow_use/healing/service.py | 651 | # Generate multiple selector strategies for robust element finding | COMMENT |
| MEDIUM | …kflows/workflow_use/healing/deterministic_converter.py | 631 | # Add multi-strategy selectors for robust element finding | COMMENT |
| MEDIUM | …kflows/workflow_use/healing/deterministic_converter.py | 742 | # Add multi-strategy selectors for robust element finding | COMMENT |
| MEDIUM | workflows/workflow_use/healing/selector_generator.py | 199 | # NEW: Use XPathOptimizer to generate multiple robust XPath alternatives | COMMENT |
| MEDIUM | workflows/workflow_use/healing/selector_generator.py | 217 | # Priority starts at 3 for most robust, increases for less robust | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | workflows/examples/scripts/generate_workflow.py | 0 | go to github, search for the stagehand repository, click on it, and extract the star count. | STRING |
| HIGH | …amples/scripts/deterministic/auto_generate_workflow.py | 0 | go to github, search for the stagehand repository, click on it, and extract the star count. | STRING |
| HIGH | …scripts/deterministic/create_deterministic_workflow.py | 0 | go to github, search for the stagehand repository, click on it, and extract the star count. | STRING |
| HIGH | …ows/examples/scripts/deterministic/test_custom_task.py | 0 | go to github, search for the stagehand repository, click on it, and extract the star count. | STRING |
| HIGH | …flows/workflow_use/workflow/tests/run_workflow_tool.py | 0 | tests that the workflow is built correctly from a json file path. | STRING |
| HIGH | workflows/workflow_use/workflow/tests/test_extract.py | 0 | tests that the workflow is built correctly from a json file path. | STRING |
| HIGH | workflows/workflow_use/workflow/tests/run_workflow.py | 0 | tests that the workflow is built correctly from a json file path. | STRING |
| HIGH | workflows/workflow_use/builder/tests/build_workflow.py | 0 | tests that the workflow is built correctly from a json file path. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | workflows/workflow_use/workflow/semantic_executor.py | 2718 | Public method to find elements using hierarchical context. This method demonstrates how to use the enhanced hierarchi | STRING |
| HIGH | workflows/workflow_use/healing/xpath_optimizer.py | 16 | Escape a string value for safe use in XPath expressions. XPath 1.0 doesn't have a native escape mechanism for quotes | STRING |
| HIGH | workflows/workflow_use/healing/xpath_optimizer.py | 74 | Generate optimized XPath alternatives from an absolute XPath. Args: absolute_xpath: Full XPath like /html/bo | STRING |
| HIGH | workflows/workflow_use/healing/selector_generator.py | 85 | Generate selector strategies from captured element data. Generates semantic strategies first, then optionally adds | STRING |
| HIGH | workflows/workflow_use/healing/variable_extractor.py | 213 | Use LLM to suggest which values should be variables. Args: workflow: Workflow to analyze Returns: Vari | STRING |
| HIGH | workflows/workflow_use/builder/service.py | 139 | Generates an enhanced Workflow definition from an input workflow object using an LLM. Args: input_workflow: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | workflows/tests/test_recorded_workflow.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/tests/test_button_click.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | …/examples/scripts/demos/hierarchical_selection_demo.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/examples/scripts/demos/travel_booking_demo.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/__init__.py | 4 | __all__ = ['WorkflowDefinitionSchema', 'Workflow'] | CODE |
| LOW | workflows/workflow_use/storage/service.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/storage/__init__.py | 3 | __all__ = ['WorkflowStorageService', 'WorkflowMetadata'] | CODE |
| LOW | workflows/workflow_use/controller/service.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/controller/utils.py | 4 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/workflow/variable_config.py | 228 | def set_config(config: VariableIdentificationConfig) -> None: | CODE |
| LOW | workflows/workflow_use/workflow/service.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/workflow/variable_identifier.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/workflow/step_verifier.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/workflow/element_finder.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/workflow/semantic_extractor.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/workflow/error_reporter.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | …rkflows/workflow_use/workflow/step_agent/controller.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/recorder/semantic_converter.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/healing/xpath_optimizer.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/healing/selector_generator.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/healing/_agent/controller.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/workflow_use/healing/tests/test_exploration_agent.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | workflows/workflow_use/builder/service.py | 17 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | extension/src/entrypoints/content.ts | 1061 | COMMENT | |
| LOW | workflows/workflow_use/mcp/tests/test_tools.py | 21 | # async with Client(mcp) as client: | COMMENT |
| LOW | workflows/workflow_use/workflow/service.py | 421 | # async def _fallback_to_agent( | COMMENT |
| LOW | workflows/workflow_use/workflow/service.py | 441 | # # Determine the failed_value based on step type and attributes | COMMENT |
| LOW | workflows/workflow_use/workflow/service.py | 461 | COMMENT | |
| LOW | workflows/workflow_use/workflow/service.py | 481 | # ) | COMMENT |
| LOW | workflows/workflow_use/workflow/semantic_executor.py | 2161 | return validation_errors | COMMENT |
| LOW | workflows/workflow_use/recorder/service.py | 41 | # async def log_requests(request: Request, call_next): | COMMENT |
| LOW | .github/workflows/lint.yml | 101 | run: npm run compile | COMMENT |
| LOW | .github/workflows/lint.yml | 121 | # | COMMENT |
| LOW | .github/workflows/lint.yml | 141 | # cache-dependency-path: ui/package-lock.json | COMMENT |
| LOW | .github/workflows/lint.yml | 161 | # cache: 'npm' | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | workflows/cli.py | 1206 | # Pass llm_instance for potential agent fallbacks or agentic steps | COMMENT |
| MEDIUM | workflows/workflow_use/workflow/semantic_executor.py | 2622 | max_content_length = 50000 # Adjust based on your LLM's context window | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | workflows/workflow_use/__init__.py | 1 | CODE | |
| LOW | workflows/workflow_use/__init__.py | 2 | CODE | |
| LOW | workflows/workflow_use/storage/__init__.py | 1 | CODE | |
| LOW | workflows/workflow_use/storage/__init__.py | 1 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 1 | CODE | |
| LOW | workflows/workflow_use/workflow/semantic_extractor.py | 9 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | workflows/cli.py | 1744 | CODE | |
| LOW | workflows/workflow_use/workflow/service.py | 42 | CODE | |
| LOW | workflows/workflow_use/healing/service.py | 30 | CODE |