An Open-Source Asynchronous Coding Agent
This report presents the forensic synthetic code analysis of langchain-ai/open-swe, a Python project with 10,297 GitHub stars. SynthScan v2.0 examined 118,446 lines of code across 534 source files, recording 2706 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 24.3 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2706 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ui/src/features/agents/experiments/ChatView.tsx | 51 | function findLatestPendingApproval(messages: Message[]): ToolExecutionChunk | null { | CODE |
| LOW | ui/src/features/agents/experiments/PromptBar.tsx | 56 | function buildApprovalPromptContent(request: PromptApprovalRequest): ApprovalPromptContent { | CODE |
| LOW | ui/src/features/agents/components/AgentGitPanel.tsx | 131 | export function writeStoredPanelCollapsed(collapsed: boolean): void { | CODE |
| LOW | …es/agents/components/messages/TurnChangedFilesCard.tsx | 8 | function stripProjectPathForDisplay(path: string, projectPath?: string): string { | CODE |
| LOW | ui/src/features/agents/lib/queries.ts | 26 | export function invalidateAgentThreadLists(queryClient: QueryClient): void { | CODE |
| LOW | ui/src/features/agents/lib/queries.ts | 63 | export function useSeedAgentThreadDetails( | CODE |
| LOW | ui/src/features/agents/lib/queries.ts | 149 | export function useWorkflowApprovalDecision(threadId: string) { | CODE |
| LOW | ui/src/features/agents/lib/queries.ts | 287 | export function useAdminCancelAgentThread() { | CODE |
| LOW | ui/src/features/agents/lib/api.ts | 140 | function filenameFromContentDisposition(value: string | null): string | null { | CODE |
| LOW | …/src/features/agents/lib/AgentThreadStreamProvider.tsx | 53 | export function AgentThreadStreamProvider({ | CODE |
| LOW | …tures/agents/lib/provider/useIsInAgentThreadStream.tsx | 22 | export function AgentThreadStreamBoundary({ children }: { children: ReactNode }) { | CODE |
| LOW | ui/src/features/reviews/components/ReviewMainBody.tsx | 150 | function buildSelectionAttachments( | CODE |
| LOW | ui/src/features/reviews/components/ReviewMainBody.tsx | 389 | function scrollFindingLineToCenter({ | CODE |
| LOW | ui/src/features/reviews/components/ReviewMainBody.tsx | 2335 | function readStoredReviewPanelWidth(): number { | CODE |
| LOW | ui/src/features/reviews/components/ReviewChat.tsx | 59 | export function ReviewChatComposerProvider({ | CODE |
| LOW | ui/src/lib/notifications.ts | 9 | export function getNotificationPermission(): NotificationPermission | null { | CODE |
| LOW | ui/src/lib/notifications.ts | 24 | export async function requestNotificationPermission(): Promise<NotificationPermission | null> { | CODE |
| LOW | ui/src/lib/auth-redirect-core.ts | 57 | export function authRedirectPathFromLocation(location: LocationParts): string { | CODE |
| LOW | ui/src/lib/auth-redirect-core.ts | 84 | export function getRememberedAuthRedirect(): string | null { | CODE |
| LOW | ui/src/lib/auth-redirect-core.ts | 100 | export function clearRememberedAuthRedirect(): void { | CODE |
| LOW | ui/src/routes/admin_.evals.tsx | 50 | function ReviewerEvalStatusSection() { | CODE |
| LOW | ui/src/routes/my-settings.tsx | 193 | function CurrentsCredentialsSection() { | CODE |
| LOW | ui/src/routes/$owner.$repo.pull.$number.tsx | 25 | function PullRequestReviewLinkPage() { | CODE |
| LOW | ui/src/routes/admin.tsx | 428 | function ObservabilityCredentialsSection() { | CODE |
| LOW | evals/reviewer/target.py | 78 | def get_reviewer_assistant_id() -> str: | CODE |
| LOW | evals/reviewer/target.py | 94 | def get_reviewer_reasoning_effort() -> str | None: | CODE |
| LOW | evals/reviewer/target.py | 231 | async def _extract_surfaced_comments( | CODE |
| LOW | evals/reviewer/target.py | 280 | def _score_severity_threshold() -> Severity: | CODE |
| LOW | tests/conftest.py | 11 | def _default_enable_auto_review(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/test_openai_responses_replay.py | 7 | def test_stateless_responses_replay_preserves_tool_history_without_mutation() -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 14 | def test_already_int_passes_through(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 20 | def test_extracts_leading_integer_from_comma_string(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 24 | def test_extracts_leading_integer_from_embedded_json(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 28 | def test_extracts_leading_integer_from_trailing_comma(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 32 | def test_returns_none_when_no_digits(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 35 | def test_handles_leading_whitespace(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 40 | def test_coerces_offset_string_to_int(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 47 | def test_coerces_offset_with_embedded_json(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 52 | def test_coerces_offset_with_trailing_comma(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 57 | def test_int_offset_unchanged(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 62 | def test_missing_offset_unchanged(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 67 | def test_uncoercible_offset_passed_through_unchanged(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_sanitize_tool_inputs.py | 73 | def test_does_not_mutate_original_dict(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 36 | def _anthropic_model_not_available_error() -> anthropic.BadRequestError: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 64 | def test_anthropic_rate_limit_falls_back(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 70 | def test_httpx_remote_protocol_error_falls_back(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 82 | def test_value_error_does_not_fall_back(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 88 | async def test_async_falls_over_on_overloaded(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 110 | async def test_async_falls_over_on_stream_transport_error(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 135 | async def test_async_propagates_non_transient_error(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 149 | async def test_async_surfaces_model_unavailable_error(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 162 | async def test_async_retries_primary_after_fallback_failure(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 186 | async def test_async_exhaustion_returns_outage_message(self) -> None: | CODE |
| LOW | tests/middleware/test_model_fallback_middleware.py | 202 | async def test_async_exhaustion_raises_when_message_disabled(self) -> None: | CODE |
| LOW | tests/middleware/test_ensure_no_empty_msg.py | 15 | def test_returns_messages_after_last_human(self) -> None: | CODE |
| LOW | tests/middleware/test_ensure_no_empty_msg.py | 30 | def test_returns_all_messages_when_no_human(self) -> None: | CODE |
| LOW | tests/middleware/test_ensure_no_empty_msg.py | 44 | def test_returns_empty_when_human_is_last(self) -> None: | CODE |
| LOW | tests/middleware/test_ensure_no_empty_msg.py | 56 | def test_returns_multiple_messages_after_human(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_ensure_no_empty_msg.py | 75 | def test_returns_true_for_slack_thread_reply(self) -> None: | CODE |
| LOW⚡ | tests/middleware/test_ensure_no_empty_msg.py | 82 | def test_returns_true_for_linear_comment(self) -> None: | CODE |
| 1803 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/reviewer/run_eval.py | 7 | CODE | |
| LOW | evals/reviewer/store_reporter.py | 10 | CODE | |
| LOW | evals/reviewer/judge.py | 13 | CODE | |
| LOW | evals/reviewer/target.py | 10 | CODE | |
| LOW | evals/reviewer/build_dataset.py | 12 | CODE | |
| LOW | tests/conftest.py | 3 | CODE | |
| LOW | tests/middleware/test_sanitize_tool_inputs.py | 8 | CODE | |
| LOW | tests/middleware/test_model_fallback_middleware.py | 3 | CODE | |
| LOW | tests/middleware/test_prepare_run_middleware.py | 1 | CODE | |
| LOW | tests/middleware/test_subdir_agents_middleware.py | 3 | CODE | |
| LOW | tests/middleware/test_sanitize_thinking_blocks.py | 1 | CODE | |
| LOW | tests/middleware/test_tool_artifact_middleware.py | 3 | CODE | |
| LOW | tests/middleware/test_check_message_queue.py | 1 | CODE | |
| LOW | tests/middleware/test_repair_orphaned_tool_calls.py | 1 | CODE | |
| LOW | tests/middleware/test_sanitize_fireworks_messages.py | 1 | CODE | |
| LOW | tests/reviewer/test_pr_ready_auto_review.py | 3 | CODE | |
| LOW | tests/reviewer/test_review_styles_store.py | 1 | CODE | |
| LOW | tests/reviewer/test_fetch_review_diff_tool.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_eval_target.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_outcomes.py | 1 | CODE | |
| LOW | tests/reviewer/test_review_chat.py | 1 | CODE | |
| LOW | tests/reviewer/test_review_style_collector.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_eval_judge.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_tools.py | 3 | CODE | |
| LOW | tests/reviewer/test_review_style_sync.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_reconcile.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_groups.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_publish.py | 3 | CODE | |
| LOW | tests/reviewer/test_reconcile_sweep.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_watch.py | 3 | CODE | |
| LOW | tests/reviewer/test_reviewer_diff.py | 3 | CODE | |
| LOW | tests/reviewer/test_reviewer_findings.py | 3 | CODE | |
| LOW | tests/reviewer/test_reviewer.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_trace_context.py | 1 | CODE | |
| LOW | tests/reviewer/test_reviewer_eval_run.py | 1 | CODE | |
| LOW | tests/tools/test_http_security.py | 1 | CODE | |
| LOW | tests/tools/test_corridor_mcp.py | 1 | CODE | |
| LOW | tests/tools/test_observability_tools.py | 1 | CODE | |
| LOW | tests/tools/test_report_platform_issue_tool.py | 1 | CODE | |
| LOW | tests/tools/test_currents_tools.py | 1 | CODE | |
| LOW | tests/tools/test_schedule_thread_wakeup.py | 1 | CODE | |
| LOW | tests/auth/test_slack_oauth.py | 1 | CODE | |
| LOW | tests/auth/test_auth_sources.py | 1 | CODE | |
| LOW | tests/auth/test_user_credentials.py | 1 | CODE | |
| LOW | tests/auth/test_github_token_ttl.py | 11 | CODE | |
| LOW | tests/auth/test_github_oauth_refresh.py | 1 | CODE | |
| LOW | tests/auth/test_authorship.py | 1 | CODE | |
| LOW | tests/auth/test_notion_oauth.py | 1 | CODE | |
| LOW | tests/auth/test_encryption.py | 1 | CODE | |
| LOW | tests/agent/test_dispatch.py | 1 | CODE | |
| LOW | tests/agent/test_agent_usage.py | 1 | CODE | |
| LOW | tests/agent/test_agents_md.py | 1 | CODE | |
| LOW | tests/agent/test_prompt_default_repo.py | 1 | CODE | |
| LOW | tests/agent/test_agent_thread_pr_state.py | 3 | CODE | |
| LOW | tests/agent/test_plan_review.py | 1 | CODE | |
| LOW | tests/agent/test_task_retry.py | 1 | CODE | |
| LOW | tests/agent/test_multimodal.py | 1 | CODE | |
| LOW | tests/agent/test_agent_assembly_context.py | 10 | CODE | |
| LOW | tests/agent/test_agent_instructions.py | 1 | CODE | |
| LOW | tests/agent/test_agent_schedules.py | 1 | CODE | |
| 319 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/reviewer/run_eval.py | 246 | except Exception: | CODE |
| LOW | evals/reviewer/run_eval.py | 273 | except Exception: | CODE |
| LOW | evals/reviewer/run_eval.py | 288 | except Exception as exc: | CODE |
| LOW | evals/reviewer/store_reporter.py | 106 | except Exception: | CODE |
| LOW | evals/reviewer/target.py | 181 | except Exception: | CODE |
| LOW | evals/reviewer/build_dataset.py | 134 | except Exception as exc: | CODE |
| LOW⚡ | agent/server.py | 185 | except Exception: | CODE |
| LOW⚡ | agent/server.py | 200 | except Exception: | CODE |
| LOW⚡ | agent/server.py | 275 | except Exception: # noqa: BLE001 | CODE |
| LOW | agent/server.py | 355 | except Exception: # noqa: BLE001 | CODE |
| LOW | agent/server.py | 484 | except Exception: | CODE |
| LOW | agent/server.py | 632 | except Exception: | CODE |
| LOW | agent/server.py | 703 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | agent/server.py | 787 | except Exception: | CODE |
| LOW | agent/completion.py | 161 | except Exception: # noqa: BLE001 | CODE |
| LOW | agent/completion.py | 184 | except Exception: # noqa: BLE001 | CODE |
| LOW | agent/analyzer.py | 111 | except Exception as e: # noqa: BLE001 | STRING |
| LOW | agent/chat.py | 125 | except Exception as e: # noqa: BLE001 | STRING |
| LOW | agent/reviewer.py | 829 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | agent/reviewer.py | 1102 | except Exception: | CODE |
| LOW | agent/reviewer.py | 1139 | except Exception: | CODE |
| MEDIUM | agent/reviewer.py | 1132 | def _prepare_pr_trace_context() -> PRTraceContext | None: | CODE |
| LOW | agent/prompt.py | 55 | except Exception: | CODE |
| LOW | agent/reconcile.py | 64 | except Exception: | CODE |
| LOW | agent/reconcile.py | 107 | except Exception: | CODE |
| LOW⚡ | agent/middleware/refresh_github_proxy.py | 33 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | agent/middleware/refresh_github_proxy.py | 41 | except Exception: # noqa: BLE001 | CODE |
| LOW | agent/middleware/sandbox_circuit_breaker.py | 258 | except Exception: | CODE |
| LOW | agent/middleware/tool_artifact.py | 71 | except Exception: | CODE |
| LOW | agent/middleware/tool_artifact.py | 203 | except Exception: | CODE |
| LOW | agent/middleware/model_fallback.py | 177 | except Exception as exc: | CODE |
| LOW | agent/middleware/notify_step_limit.py | 85 | except Exception: | CODE |
| LOW | agent/middleware/subdir_agents.py | 52 | except Exception: | CODE |
| LOW | agent/middleware/subdir_agents.py | 178 | except Exception: | CODE |
| LOW | agent/middleware/refresh_slack_status.py | 122 | except Exception: | CODE |
| LOW | agent/middleware/refresh_slack_status.py | 183 | except Exception: | CODE |
| LOW | agent/middleware/refresh_slack_status.py | 189 | except Exception: | CODE |
| LOW | agent/middleware/workflow_push_guard.py | 101 | except Exception: | CODE |
| LOW | agent/middleware/workflow_push_guard.py | 231 | except Exception: | CODE |
| LOW | agent/middleware/workflow_push_guard.py | 508 | except Exception: | CODE |
| LOW | agent/middleware/settle_review_check.py | 84 | except Exception: | CODE |
| LOW | agent/middleware/tool_error_handler.py | 101 | except Exception: | CODE |
| LOW | agent/middleware/tool_error_handler.py | 172 | except Exception: | CODE |
| LOW | agent/middleware/tool_error_handler.py | 175 | except Exception as e: | CODE |
| LOW | agent/middleware/check_message_queue.py | 47 | except Exception: | CODE |
| LOW⚡ | agent/middleware/check_message_queue.py | 108 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | agent/middleware/check_message_queue.py | 117 | except Exception: # noqa: BLE001 | CODE |
| LOW | agent/middleware/check_message_queue.py | 159 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | agent/middleware/check_message_queue.py | 175 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | agent/middleware/check_message_queue.py | 226 | except Exception: | CODE |
| LOW | agent/tools/schedule_thread_wakeup.py | 113 | except Exception: | CODE |
| LOW | agent/tools/schedule_thread_wakeup.py | 210 | except Exception as exc: | CODE |
| LOW | agent/tools/open_pull_request.py | 70 | except Exception: | CODE |
| LOW | agent/tools/open_pull_request.py | 82 | except Exception: | CODE |
| LOW | agent/tools/open_pull_request.py | 519 | except Exception: | CODE |
| LOW | agent/tools/open_pull_request.py | 531 | except Exception: | CODE |
| LOW | agent/tools/open_pull_request.py | 603 | except Exception: | CODE |
| LOW | agent/tools/open_pull_request.py | 608 | except Exception: | CODE |
| MEDIUM | agent/tools/open_pull_request.py | 79 | def _configurable() -> dict[str, Any]: | CODE |
| LOW | agent/tools/list_review_findings.py | 64 | except Exception as exc: # noqa: BLE001 | CODE |
| 177 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/reviewer/run_eval.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | evals/reviewer/store_reporter.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | evals/reviewer/target.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/reviewer/test_reviewer_outcomes.py | 75 | def update_example(self, **kwargs: Any) -> None: | CODE |
| LOW | tests/auth/test_encryption.py | 15 | def _set_key(monkeypatch: pytest.MonkeyPatch, value: str) -> None: | CODE |
| LOW | tests/agent/test_langsmith_trace_url.py | 12 | def _set_env(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/github/test_open_pull_request.py | 87 | def _set_config(monkeypatch: pytest.MonkeyPatch, configurable: dict[str, Any]) -> None: | CODE |
| LOW | tests/e2e/agent_entrypoint.py | 21 | __all__ = ["traced_agent"] | CODE |
| LOW | tests/e2e/patches.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/server.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/encryption.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/completion.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/dispatch.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/webapp.py | 5 | __all__ = ["app"] | CODE |
| LOW | agent/analyzer.py | 61 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/chat.py | 69 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/reviewer.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/scheduler.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/prompt.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/reconcile.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | agent/middleware/refresh_github_proxy.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/sandbox_circuit_breaker.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/repair_orphaned_tool_calls.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/tool_artifact.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/model_fallback.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/notify_step_limit.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/__init__.py | 32 | __all__ = [ | CODE |
| LOW | agent/middleware/subdir_agents.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/refresh_slack_status.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/refresh_slack_status.py | 114 | async def _set_status(channel_id: str, thread_ts: str, status: str) -> None: | CODE |
| LOW | agent/middleware/workflow_push_guard.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/sanitize_tool_inputs.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/settle_review_check.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/tool_error_handler.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/middleware/check_message_queue.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/tools/schedule_thread_wakeup.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/tools/open_pull_request.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/tools/__init__.py | 38 | __all__ = [ | CODE |
| LOW | agent/tools/save_review_style.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/tools/enter_plan_mode.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/tools/web_search.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/tools/save_plan.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/providers/__init__.py | 9 | __all__ = [ | CODE |
| LOW | agent/runtime/__init__.py | 15 | __all__ = [ | CODE |
| LOW | agent/utils/auth.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/gateway.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/slack_feedback.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/sandbox_state.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/authorship.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/repo_prep.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/linear.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/github_feedback.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/langsmith.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/github_app.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/multimodal.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/github_http.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/github_org_membership.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/ttl_cache.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | agent/utils/ttl_cache.py | 104 | def set_cached(key: str, value: object, ttl_seconds: float) -> None: | CODE |
| LOW | agent/utils/github_proxy.py | 26 | logger = logging.getLogger(__name__) | CODE |
| 71 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/reviewer/test_reviewer_publish.py | 616 | explicit null, so the fetch must guard against it and return collected threads.""" | STRING |
| HIGH⚡ | tests/agent/test_repo_prep.py | 57 | assert "git checkout --force abc123 --quiet 2>/dev/null || true" not in cmd | CODE |
| HIGH⚡ | tests/agent/test_repo_prep.py | 59 | assert "git fetch --all --quiet || true" in cmd | CODE |
| HIGH⚡ | tests/agent/test_workflow_push_guard.py | 91 | "cd /repo && git push -u origin HEAD:feature" | CODE |
| HIGH⚡ | tests/agent/test_workflow_push_guard.py | 99 | assert guard._parse_git_push("git status && git push") is None | CODE |
| HIGH⚡ | tests/sandbox/test_sandbox_paths.py | 75 | assert backend.commands == ["test -d /workspace && test -w /workspace"] | CODE |
| HIGH⚡ | tests/sandbox/test_sandbox_paths.py | 92 | "test -d /workspace && test -w /workspace", | CODE |
| HIGH⚡ | tests/sandbox/test_sandbox_paths.py | 94 | "test -d /home/daytona && test -w /home/daytona", | CODE |
| HIGH⚡ | tests/sandbox/test_sandbox_paths.py | 109 | assert backend.commands == ["test -d /workspace && test -w /workspace"] | CODE |
| HIGH⚡ | tests/sandbox/test_sandbox_paths.py | 121 | assert backend.commands == ["test -d /home/daytona && test -w /home/daytona"] | CODE |
| HIGH | tests/e2e/fake_llm.py | 205 | {"name": "execute", "args": {"command": "echo planning && ls"}, "id": "call-plan-read"} | STRING |
| HIGH | agent/reviewer.py | 366 | GH_TOKEN=dummy git fetch origin {head_sha_or_placeholder} --quiet || GH_TOKEN=dummy git fetch origin refs/pull/{pr_numbe | CODE |
| HIGH⚡ | agent/utils/repo_prep.py | 52 | f" cd {q_repo_dir} && {{ GH_TOKEN=dummy git fetch --all --quiet || true; }}", | CODE |
| HIGH⚡ | agent/utils/repo_prep.py | 59 | lines.append(f"GH_TOKEN=dummy git fetch origin {q_base} --quiet 2>/dev/null || true") | CODE |
| HIGH⚡ | agent/utils/repo_prep.py | 63 | lines.append(f"GH_TOKEN=dummy git fetch origin {q_head} --quiet 2>/dev/null || true") | CODE |
| HIGH⚡ | agent/utils/repo_prep.py | 66 | lines.append(f"GH_TOKEN=dummy git fetch origin {pull_ref} --quiet 2>/dev/null || true") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/github/test_github_comment_prompts.py | 86 | # "Open SWE" identity lives in the harness-profile base prompt that | COMMENT |
| MEDIUM | tests/slack/test_slack_context.py | 878 | # resolve to a mapping (login_for_email returns None in this harness). | COMMENT |
| MEDIUM | tests/e2e/harness.py | 170 | # dev:mock), not this harness, so the cookie + the hot-reloading UI line up. | COMMENT |
| MEDIUM | tests/e2e/dev-mock.sh | 2 | # Local dev against the mock harness, with a REAL LLM and a Vite HMR dev server. | COMMENT |
| MEDIUM | tests/e2e/dev-mock.sh | 5 | # Slack/GitHub + sign-in to the harness ($API). Same-origin is what lets the | COMMENT |
| MEDIUM | tests/e2e/dev-mock.sh | 20 | # Pulled line-by-line, not by sourcing .env, which would clobber the harness's | COMMENT |
| MEDIUM | tests/e2e/dev-mock.sh | 37 | # own origin and Vite proxies it (and the WS) to the harness. | COMMENT |
| MEDIUM | tests/e2e/patches.py | 44 | # Set E2E_REAL_LLM=1 to drive the harness (mock Slack/GitHub, real agent) | COMMENT |
| MEDIUM | agent/prompt.py | 25 | # Provider keys the harness profile is registered under. deepagents resolves a | COMMENT |
| MEDIUM | agent/prompt.py | 64 | # Registered as the harness profile's `base_system_prompt`, it REPLACES | COMMENT |
| MEDIUM | .github/workflows/reviewer_eval.yml | 3 | # selecting the `prod` branch so the harness + judge match the deployed reviewer it scores. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/reviewer/run_eval.py | 292 | CODE | |
| LOW | agent/server.py | 432 | CODE | |
| LOW | agent/reconcile.py | 39 | CODE | |
| LOW | agent/middleware/pr_creation_guard.py | 102 | CODE | |
| LOW | agent/middleware/sandbox_circuit_breaker.py | 67 | CODE | |
| LOW | agent/tools/open_pull_request.py | 542 | CODE | |
| LOW | agent/tools/publish_review.py | 246 | CODE | |
| LOW | agent/tools/publish_review.py | 818 | CODE | |
| LOW | agent/tools/publish_review.py | 962 | CODE | |
| LOW | agent/utils/multimodal.py | 51 | CODE | |
| LOW | agent/utils/model.py | 250 | CODE | |
| LOW | agent/utils/model.py | 283 | CODE | |
| LOW | agent/utils/reviewer_outcomes.py | 285 | CODE | |
| LOW | agent/utils/slack.py | 913 | CODE | |
| LOW | agent/utils/slack.py | 1110 | CODE | |
| LOW | agent/dashboard/review_chat_api.py | 128 | CODE | |
| LOW | agent/dashboard/review_chat_api.py | 313 | CODE | |
| LOW | agent/dashboard/agent_usage.py | 485 | CODE | |
| LOW | agent/dashboard/agent_usage.py | 513 | CODE | |
| LOW | agent/dashboard/thread_api.py | 668 | CODE | |
| LOW | agent/dashboard/thread_api.py | 731 | CODE | |
| LOW | agent/dashboard/thread_api.py | 1156 | CODE | |
| LOW | agent/integrations/langsmith.py | 541 | CODE | |
| LOW | agent/review/diff.py | 75 | CODE | |
| LOW | agent/review/style_collector.py | 287 | CODE | |
| LOW | agent/review/publish.py | 543 | CODE | |
| LOW | agent/review/publish.py | 665 | CODE | |
| LOW | agent/webhooks/linear.py | 15 | CODE | |
| LOW | agent/webhooks/common.py | 720 | CODE | |
| LOW | agent/webhooks/github.py | 199 | CODE | |
| LOW | agent/webhooks/github.py | 868 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/reviewer/test_review_chat.py | 420 | async def fake_token(repositories=None): | CODE |
| LOW⚡ | tests/reviewer/test_review_chat.py | 429 | monkeypatch.setattr(review_chat_api, "get_github_app_installation_token", fake_token) | CODE |
| LOW⚡ | tests/reviewer/test_review_api.py | 108 | async def fake_token(): | CODE |
| LOW⚡ | tests/reviewer/test_review_api.py | 115 | monkeypatch.setattr(review_api, "_require_app_token", fake_token) | CODE |
| LOW⚡ | tests/reviewer/test_review_api.py | 122 | async def fake_token(): | CODE |
| LOW⚡ | tests/reviewer/test_review_api.py | 128 | monkeypatch.setattr(review_api, "_require_app_token", fake_token) | CODE |
| LOW⚡ | tests/tools/test_observability_tools.py | 221 | monkeypatch.setenv("CONFIGURED_ADMINS", "admin@example.com") | CODE |
| LOW⚡ | tests/tools/test_observability_tools.py | 225 | admin_config = {"configurable": {"user_email": "admin@example.com"}} | CODE |
| LOW⚡ | tests/dashboard/test_dashboard_thread_api.py | 1617 | routes._require_admin({"sub": "not-admin", "email": "user@example.com"}) | CODE |
| LOW⚡ | tests/dashboard/test_public_repo_org_gate.py | 342 | async def fake_token() -> None: | CODE |
| LOW⚡ | tests/dashboard/test_public_repo_org_gate.py | 345 | monkeypatch.setattr(github_org_membership, "get_github_app_installation_token", fake_token) | CODE |
| LOW | tests/dashboard/test_public_repo_org_gate.py | 376 | async def fake_token() -> str: | CODE |
| LOW | tests/dashboard/test_public_repo_org_gate.py | 379 | monkeypatch.setattr(github_org_membership, "get_github_app_installation_token", fake_token) | CODE |
| LOW | tests/github/test_repo_extraction.py | 102 | "user": {"id": "user-1", "name": "Test User", "email": "test@test.com"}, | CODE |
| LOW | tests/github/test_repo_extraction.py | 156 | "user": {"id": "user-1", "name": "Test User", "email": "test@test.com"}, | CODE |
| LOW | tests/e2e/patches.py | 80 | return "dummy-user-oauth-token" | CODE |
| LOW | docs/CUSTOMIZATION.md | 415 | "user_email": "user@example.com", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/src/features/agents/experiments/SourceControlTile.tsx | 904 | // ─── DiffCard ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | agent/dashboard/user_mappings.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | agent/dashboard/user_mappings.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | agent/dashboard/user_mappings.py | 124 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | agent/dashboard/user_mappings.py | 126 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | agent/dashboard/user_mappings.py | 167 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | agent/dashboard/user_mappings.py | 169 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | agent/webhooks/linear.py | 0 | slack webhook handler — moved out of common.py (behavior-identical). helpers and constants stay in common.py; they are a | STRING |
| HIGH | agent/webhooks/github.py | 0 | slack webhook handler — moved out of common.py (behavior-identical). helpers and constants stay in common.py; they are a | STRING |
| HIGH | agent/webhooks/slack.py | 0 | slack webhook handler — moved out of common.py (behavior-identical). helpers and constants stay in common.py; they are a | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | agent/dispatch.py | 106 | CODE | |
| LOW | agent/prompt.py | 337 | CODE | |
| LOW | agent/middleware/workflow_push_guard.py | 251 | CODE | |
| LOW | agent/dashboard/thread_api.py | 812 | CODE | |
| LOW | agent/dashboard/routes.py | 1523 | CODE | |
| LOW | agent/integrations/langsmith.py | 541 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | agent/integrations/stagehand_browser.py | 185 | Perform a single natural-language action on the current page. Examples: "click the Sign in button", "type 'hello' i | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/e2e/dev-mock.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | agent/utils/github_app.py | 21 | GITHUB_APP_INSTALLATION_ID = os.environ.get("GITHUB_APP_INSTALLATION_ID", "") | COMMENT |
| LOW | docs/INSTALLATION.md | 441 | # Without these, all agent operations use the GitHub App's bot token. | COMMENT |
| LOW | docs/INSTALLATION.md | 461 | # Used across all triggers when no repo is specified. | COMMENT |