Private AI platform for agents, assistants and enterprise search. Built-in Agent Builder, Deep research, Document analysis, Multi-model support, and API connectivity for agents.
This report presents the forensic synthetic code analysis of arc53/DocsGPT, a Python project with 18,231 GitHub stars. SynthScan v2.0 examined 430,671 lines of code across 1436 source files, recording 11701 pattern matches distributed across 23 syntactic categories. The overall adjusted score of 38.0 places this repository in the Strong 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 11701 distinct pattern matches across 23 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 | md-gen.py | 3 | def create_markdown_from_directory(directory=".", output_file="combined.md"): | CODE |
| LOW | frontend/src/agents/schedules/TimezoneCombobox.tsx | 64 | function computeTimezoneOffsetLabel(tz: string): string { | CODE |
| LOW | frontend/src/agents/schedules/cronBuilder.ts | 169 | export function parseScheduleToFormValues( | CODE |
| LOW | frontend/src/agents/workflow/documentConfig.ts | 38 | export function documentsModeToInputDocuments( | CODE |
| LOW | frontend/src/agents/workflow/documentConfig.ts | 72 | export function toDocumentVariableOptions( | CODE |
| LOW | frontend/src/agents/workflow/documentConfig.ts | 102 | export function withChosenDocumentOptions( | CODE |
| LOW | frontend/src/agents/workflow/workflowPreviewSlice.ts | 55 | export function handleWorkflowPreviewAbort() { | CODE |
| LOW | frontend/src/agents/workflow/workflowPreviewSlice.ts | 71 | export function collectCompletedAttachmentIds( | CODE |
| LOW | frontend/src/components/artifactViewUtils.ts | 249 | export function filenameFromContentDisposition( | CODE |
| LOW | frontend/src/conversation/conversationHandlers.ts | 247 | export function handleFetchAnswerSteaming( | CODE |
| LOW | frontend/src/conversation/conversationHandlers.ts | 898 | export function handleFetchSharedAnswerStreaming( | CODE |
| LOW⚡ | tests/test_events_substrate.py | 62 | def test_digit_count_does_not_break_int_compare(self): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 67 | def test_missing_seq_treated_as_zero(self): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 70 | def test_malformed_input_raises(self): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 166 | def test_returns_none_on_missing_user_id(self): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 169 | def test_returns_none_on_missing_event_type(self): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 174 | def test_returns_none_when_push_disabled(self, mock_settings, mock_redis): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 184 | def test_returns_none_when_redis_unavailable(self, mock_settings, mock_redis): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 192 | def test_returns_none_on_unserializable_payload( | CODE |
| LOW⚡ | tests/test_events_substrate.py | 287 | def test_publish_returns_zero_when_redis_unavailable(self, mock_redis): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 292 | def test_publish_calls_redis_publish(self, mock_redis): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 301 | def test_publish_swallows_exceptions(self, mock_redis): | CODE |
| LOW⚡ | tests/test_events_substrate.py | 309 | def test_subscribe_returns_immediately_when_redis_unavailable( | CODE |
| LOW⚡ | tests/test_events_substrate.py | 317 | def test_subscribe_yields_none_on_poll_timeout(self, mock_redis): | CODE |
| LOW | tests/test_events_substrate.py | 42 | def test_connection_counter_key(self): | CODE |
| LOW | tests/test_events_substrate.py | 112 | def test_terminator_regex_compiles(self): | CODE |
| LOW | tests/test_events_substrate.py | 208 | def test_xadd_and_publish_both_invoked_on_happy_path( | CODE |
| LOW | tests/test_events_substrate.py | 255 | def test_xadd_failure_skips_live_publish( | CODE |
| LOW | tests/test_events_substrate.py | 335 | def test_subscribe_fires_on_subscribe_after_ack(self, mock_redis): | CODE |
| LOW | tests/test_events_substrate.py | 359 | def test_subscribe_cleans_up_on_generator_close(self, mock_redis): | CODE |
| LOW | tests/test_events_substrate.py | 377 | def test_subscribe_skips_unsubscribe_if_subscribe_never_acked( | CODE |
| LOW | tests/test_todo_tool.py | 74 | def update_title_by_tool_and_todo_id(self, user_id, tool_id, todo_id, title): | CODE |
| LOW | tests/test_todo_tool.py | 88 | def delete_by_tool_and_todo_id(self, user_id, tool_id, todo_id): | CODE |
| LOW | tests/test_todo_tool.py | 177 | def test_isolation_per_tool_id(monkeypatch): | CODE |
| LOW | tests/test_todo_tool.py | 205 | def test_sentinel_tool_id_short_circuits(): | CODE |
| LOW | tests/test_todo_tool.py | 215 | def test_no_user_id_returns_error(): | CODE |
| LOW | tests/test_client_tools.py | 54 | def test_merge_multiple_tools(self): | CODE |
| LOW | tests/test_client_tools.py | 85 | def test_merge_preserves_existing_tools(self): | CODE |
| LOW⚡ | tests/test_client_tools.py | 120 | def test_client_tools_included_in_llm_schema(self): | CODE |
| LOW | tests/test_client_tools.py | 151 | def test_mixed_server_and_client_tools(self): | CODE |
| LOW⚡ | tests/test_client_tools.py | 203 | def test_get_tools_merges_client_tools(self, monkeypatch): | CODE |
| LOW | tests/test_client_tools.py | 225 | def test_get_tools_no_client_tools(self, monkeypatch): | CODE |
| LOW | tests/test_client_tools.py | 258 | def test_client_tool_triggers_pause(self): | CODE |
| LOW | tests/test_client_tools.py | 278 | def test_server_tool_no_pause(self): | CODE |
| LOW | tests/test_client_tools.py | 320 | def test_client_tool_pauses_stream(self): | CODE |
| LOW | tests/test_client_tools.py | 377 | def test_mixed_server_and_client_tools_in_batch(self): | CODE |
| LOW⚡ | tests/test_utils.py | 38 | def test_returns_same_instance(self): | CODE |
| LOW⚡ | tests/test_utils.py | 47 | def test_returns_llm_name_when_set(self): | CODE |
| LOW⚡ | tests/test_utils.py | 54 | def test_falls_back_to_provider_map(self): | CODE |
| LOW⚡ | tests/test_utils.py | 61 | def test_unknown_provider_returns_empty(self): | CODE |
| LOW⚡ | tests/test_utils.py | 98 | def test_non_string_returns_zero(self): | CODE |
| LOW⚡ | tests/test_utils.py | 106 | def test_special_token_text_counts_instead_of_raising(self): | CODE |
| LOW⚡ | tests/test_utils.py | 116 | def test_unbroken_cjk_run_counts_in_bounded_time(self): | CODE |
| LOW⚡ | tests/test_utils.py | 198 | def test_check_required_fields_pass(self): | CODE |
| LOW⚡ | tests/test_utils.py | 206 | def test_check_required_fields_fail(self): | CODE |
| LOW⚡ | tests/test_utils.py | 215 | def test_get_field_validation_errors_none_when_valid(self): | CODE |
| LOW⚡ | tests/test_utils.py | 219 | def test_get_field_validation_errors_missing(self): | CODE |
| LOW⚡ | tests/test_utils.py | 224 | def test_get_field_validation_errors_empty(self): | CODE |
| LOW⚡ | tests/test_utils.py | 229 | def test_validate_required_fields_pass(self): | CODE |
| LOW⚡ | tests/test_utils.py | 237 | def test_validate_required_fields_missing(self): | CODE |
| 7463 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | setup.sh | 173 | # ======================== | COMMENT |
| MEDIUM | setup.sh | 175 | # ======================== | COMMENT |
| MEDIUM⚡ | tests/test_events_substrate.py | 281 | # ── Topic ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_events_substrate.py | 31 | # ── keys ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_events_substrate.py | 46 | # ── stream_id_compare ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_events_substrate.py | 82 | # ── _format_sse ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_events_substrate.py | 117 | # ── _normalize_last_event_id ──────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_events_substrate.py | 148 | # ── publisher ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_client_tools.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_client_tools.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_client_tools.py | 112 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_client_tools.py | 114 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_client_tools.py | 194 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_client_tools.py | 196 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_client_tools.py | 242 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_client_tools.py | 244 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_client_tools.py | 295 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_client_tools.py | 297 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 58 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 137 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 139 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_namespaces.py | 20 | # ── SystemNamespace ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_namespaces.py | 74 | # ── PassthroughNamespace ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_namespaces.py | 157 | # ── ToolsNamespace ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_namespaces.py | 342 | # ── NamespaceBuilder ABC ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_namespaces.py | 372 | # ── NamespaceManager ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_namespaces.py | 442 | # ── AttachmentsNamespace ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_namespaces.py | 519 | # ── SystemNamespace platform block ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_namespaces.py | 116 | # ── SourceNamespace ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_namespaces.py | 207 | # ── ArtifactsNamespace ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_namespaces.py | 491 | # ── tools.enabled gate (the condition used verbatim in the prompt files) ──────── | COMMENT |
| MEDIUM⚡ | tests/test_target_coverage.py | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_target_coverage.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_target_coverage.py | 110 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_target_coverage.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_target_coverage.py | 142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_target_coverage.py | 149 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_target_coverage.py | 303 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_target_coverage.py | 307 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_target_coverage.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_target_coverage.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 72 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 94 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 132 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 134 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 205 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 207 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 248 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 250 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 271 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 273 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 505 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_code_executor_tool.py | 507 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_code_executor_tool.py | 326 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_code_executor_tool.py | 328 | # --------------------------------------------------------------------------- | COMMENT |
| 1753 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | md-gen.py | 41 | except Exception as e: | CODE |
| MEDIUM | md-gen.py | 42 | print(f"Error processing file {filepath}: {e}") | CODE |
| LOW⚡ | tests/test_target_coverage.py | 296 | except Exception: | CODE |
| LOW | tests/test_target_coverage.py | 207 | except Exception as e: | CODE |
| LOW | tests/test_target_coverage.py | 239 | except Exception as e: | CODE |
| LOW | tests/test_target_coverage.py | 260 | except Exception as e: | CODE |
| LOW⚡ | tests/test_integration.py | 806 | except Exception: | CODE |
| LOW⚡ | tests/test_integration.py | 815 | except Exception as e: | CODE |
| LOW⚡ | tests/test_integration.py | 976 | except Exception as e: | CODE |
| LOW⚡ | tests/test_integration.py | 1001 | except Exception as e: | CODE |
| LOW⚡ | tests/test_integration.py | 1030 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 68 | except Exception as exc: | CODE |
| LOW | tests/test_integration.py | 183 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 247 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 404 | except Exception: | CODE |
| LOW | tests/test_integration.py | 413 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 449 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 559 | except Exception: | CODE |
| LOW | tests/test_integration.py | 568 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 662 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 736 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 914 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 1065 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 1202 | except Exception as e: | CODE |
| LOW | tests/test_integration.py | 337 | except Exception: | STRING |
| LOW | tests/test_integration.py | 346 | except Exception as e: | STRING |
| LOW | tests/test_integration.py | 1276 | except Exception as e: | STRING |
| LOW⚡ | tests/test_coverage_gaps.py | 2527 | except Exception as e: | CODE |
| LOW⚡ | tests/test_coverage_gaps.py | 2597 | except Exception as e: | CODE |
| LOW | tests/graphrag/test_extraction.py | 33 | except Exception: | CODE |
| LOW | tests/graphrag/test_extraction.py | 66 | except Exception as exc: | CODE |
| LOW | tests/graphrag/test_retriever_live.py | 58 | except Exception: | CODE |
| LOW | tests/graphrag/test_retriever_live.py | 84 | except Exception as exc: | CODE |
| LOW⚡ | tests/graphrag/test_store.py | 86 | except Exception as exc: | CODE |
| LOW | tests/graphrag/test_store.py | 50 | except Exception: | CODE |
| LOW⚡ | tests/integration/test_workflows.py | 69 | except Exception: | CODE |
| LOW⚡ | tests/integration/test_worker_drain_e2e.py | 85 | except Exception: | CODE |
| LOW⚡ | tests/integration/test_worker_drain_e2e.py | 89 | except Exception: | CODE |
| LOW⚡ | tests/integration/test_worker_drain_e2e.py | 92 | except Exception: | CODE |
| LOW⚡ | tests/integration/test_worker_drain_e2e.py | 97 | except Exception: | CODE |
| LOW⚡ | tests/integration/test_worker_drain_e2e.py | 106 | except Exception: | CODE |
| LOW | tests/integration/test_worker_drain_e2e.py | 123 | except Exception: | CODE |
| MEDIUM | tests/integration/test_worker_drain_e2e.py | 82 | def _reap(proc, fh) -> None: | CODE |
| MEDIUM | tests/integration/test_worker_drain_e2e.py | 120 | def _run(): | CODE |
| LOW⚡ | tests/integration/test_misc.py | 108 | except Exception as e: | CODE |
| LOW⚡ | tests/integration/test_misc.py | 169 | except Exception as e: | CODE |
| LOW⚡ | tests/integration/test_misc.py | 211 | except Exception as e: | CODE |
| LOW⚡ | tests/integration/test_misc.py | 248 | except Exception as e: | CODE |
| LOW⚡ | tests/integration/test_misc.py | 276 | except Exception as e: | CODE |
| LOW | tests/integration/test_misc.py | 77 | except Exception as e: | CODE |
| LOW | tests/integration/test_misc.py | 140 | except Exception as e: | CODE |
| LOW⚡ | tests/integration/test_prompts.py | 77 | except Exception: | CODE |
| LOW⚡ | tests/integration/test_prompts.py | 157 | except Exception as e: | CODE |
| LOW⚡ | tests/integration/test_prompts.py | 299 | except Exception as e: | CODE |
| LOW⚡ | tests/integration/test_prompts.py | 342 | except Exception as e: | CODE |
| LOW⚡ | tests/integration/test_prompts.py | 386 | except Exception as e: | CODE |
| LOW | tests/integration/test_prompts.py | 66 | except Exception: | CODE |
| LOW | tests/integration/test_prompts.py | 119 | except Exception as e: | CODE |
| LOW | tests/integration/test_prompts.py | 193 | except Exception as e: | CODE |
| LOW | tests/integration/test_prompts.py | 227 | except Exception as e: | CODE |
| 988 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_events_substrate.py | 9 | CODE | |
| LOW | tests/test_todo_tool.py | 15 | CODE | |
| LOW | tests/conftest.py | 30 | CODE | |
| LOW | tests/test_memory_tool.py | 8 | CODE | |
| LOW | tests/test_authz.py | 3 | CODE | |
| LOW | tests/test_code_executor_tool.py | 8 | CODE | |
| LOW | tests/test_code_executor_tool.py | 255 | CODE | |
| LOW | tests/test_notes_tool.py | 8 | CODE | |
| LOW | tests/test_version_check.py | 9 | CODE | |
| LOW | tests/test_event_replay.py | 23 | CODE | |
| LOW | tests/test_message_journal.py | 8 | CODE | |
| LOW | tests/test_pubsub_timeouts.py | 11 | CODE | |
| LOW | tests/core/test_models_config_dir.py | 10 | CODE | |
| LOW | tests/core/test_model_registry_yaml.py | 13 | CODE | |
| LOW | tests/core/test_log_context.py | 3 | CODE | |
| LOW | tests/core/test_byom_user_aware_helpers.py | 13 | CODE | |
| LOW | tests/core/test_db_uri.py | 16 | CODE | |
| LOW | tests/core/test_registry_user_layer.py | 9 | CODE | |
| LOW | tests/core/test_openai_compatible.py | 9 | CODE | |
| LOW | tests/core/test_logging_config.py | 10 | CODE | |
| LOW | tests/guardrails/test_engine.py | 3 | CODE | |
| LOW | tests/guardrails/test_redaction_boundaries.py | 8 | CODE | |
| LOW | tests/guardrails/test_config_salvage.py | 8 | CODE | |
| LOW | tests/guardrails/test_review_regressions.py | 3 | CODE | |
| LOW | tests/guardrails/test_agent_integration.py | 3 | CODE | |
| LOW | tests/guardrails/test_checks.py | 3 | CODE | |
| LOW | tests/guardrails/test_review_fixes.py | 3 | CODE | |
| LOW | tests/guardrails/test_stream.py | 3 | CODE | |
| LOW | tests/security/test_safe_url.py | 9 | CODE | |
| LOW | tests/graphrag/test_extraction.py | 9 | CODE | |
| LOW | tests/graphrag/test_graphrag_available.py | 3 | CODE | |
| LOW | tests/graphrag/test_retriever_live.py | 11 | CODE | |
| LOW | tests/graphrag/test_store.py | 16 | CODE | |
| LOW | tests/integration/test_worker_drain_e2e.py | 10 | CODE | |
| LOW | tests/integration/conftest.py | 28 | CODE | |
| LOW | tests/integration/_drain_harness_app.py | 10 | CODE | |
| LOW | tests/integration/test_users_repository.py | 22 | CODE | |
| LOW | tests/integration/__init__.py | 35 | CODE | |
| LOW | tests/integration/__init__.py | 35 | CODE | |
| LOW | tests/integration/__init__.py | 35 | CODE | |
| LOW | tests/integration/__init__.py | 35 | CODE | |
| LOW | tests/integration/__init__.py | 36 | CODE | |
| LOW | tests/integration/__init__.py | 37 | CODE | |
| LOW | tests/integration/__init__.py | 38 | CODE | |
| LOW | tests/integration/__init__.py | 39 | CODE | |
| LOW | tests/integration/__init__.py | 40 | CODE | |
| LOW | tests/integration/__init__.py | 41 | CODE | |
| LOW | tests/integration/__init__.py | 42 | CODE | |
| LOW | tests/integration/__init__.py | 43 | CODE | |
| LOW | tests/integration/__init__.py | 44 | CODE | |
| LOW | tests/integration/__init__.py | 45 | CODE | |
| LOW | tests/integration/test_scim.py | 13 | CODE | |
| LOW | …ts/agents/test_tool_executor_duplicate_registration.py | 10 | CODE | |
| LOW | tests/agents/test_tool_call_projection.py | 18 | CODE | |
| LOW | …sts/agents/test_workflow_engine_structured_recovery.py | 3 | CODE | |
| LOW | tests/agents/test_workflow_run_scoped_artifacts.py | 10 | CODE | |
| LOW | tests/agents/test_workflow_agent_pg_write.py | 13 | CODE | |
| LOW | tests/agents/test_tool_artifact_reporting.py | 10 | CODE | |
| LOW | tests/agents/test_workflow_input_documents.py | 9 | CODE | |
| LOW | tests/agents/test_default_tools.py | 3 | CODE | |
| 369 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | md-gen.py | 3 | CODE | |
| LOW | tests/test_zip_extraction_security.py | 289 | CODE | |
| LOW | tests/test_target_coverage.py | 245 | CODE | |
| LOW | tests/test_integration.py | 105 | CODE | |
| LOW | tests/test_integration.py | 418 | CODE | |
| LOW | tests/test_integration.py | 453 | CODE | |
| LOW | tests/test_integration.py | 573 | CODE | |
| LOW | tests/test_integration.py | 667 | CODE | |
| LOW | tests/test_integration.py | 741 | CODE | |
| LOW | tests/test_integration.py | 1089 | CODE | |
| LOW | tests/test_coverage_gaps.py | 2143 | CODE | |
| LOW | tests/test_remaining_coverage.py | 533 | CODE | |
| LOW | tests/llm/handlers/test_llm_handlers.py | 2217 | CODE | |
| LOW | tests/llm/handlers/test_llm_handlers.py | 2262 | CODE | |
| LOW | tests/integration/test_misc.py | 36 | CODE | |
| LOW | tests/integration/test_prompts.py | 124 | CODE | |
| LOW | tests/integration/test_chat.py | 122 | CODE | |
| LOW | tests/integration/test_chat.py | 160 | CODE | |
| LOW | tests/integration/test_chat.py | 233 | CODE | |
| LOW | tests/integration/test_chat.py | 294 | CODE | |
| LOW | tests/integration/test_chat.py | 527 | CODE | |
| LOW | tests/integration/test_chat.py | 635 | CODE | |
| LOW | tests/integration/test_chat.py | 849 | CODE | |
| LOW | tests/integration/test_chat.py | 979 | CODE | |
| LOW | tests/integration/test_v1_api.py | 249 | CODE | |
| LOW | tests/integration/test_v1_api.py | 402 | CODE | |
| LOW | tests/integration/test_v1_api.py | 494 | CODE | |
| LOW | tests/integration/test_v1_tool_calls.py | 99 | CODE | |
| LOW | tests/integration/test_sources.py | 49 | CODE | |
| LOW | tests/integration/test_sources.py | 108 | CODE | |
| LOW | tests/integration/test_sources.py | 121 | CODE | |
| LOW | tests/integration/test_tools.py | 191 | CODE | |
| LOW | tests/integration/test_tools.py | 232 | CODE | |
| LOW | tests/integration/test_mcp.py | 195 | CODE | |
| LOW | tests/integration/base.py | 223 | CODE | |
| LOW | tests/integration/test_agents.py | 50 | CODE | |
| LOW | tests/parser/remote/test_s3_loader.py | 660 | CODE | |
| LOW | tests/parser/remote/test_s3_loader.py | 687 | CODE | |
| LOW | tests/parser/remote/test_s3_loader.py | 709 | CODE | |
| LOW | tests/parser/remote/test_s3_loader.py | 831 | CODE | |
| LOW | tests/api/user/attachments/test_routes.py | 1952 | CODE | |
| LOW | tests/api/user/attachments/test_routes.py | 1992 | CODE | |
| LOW | tests/api/user/attachments/test_routes.py | 2060 | CODE | |
| LOW | tests/api/user/attachments/test_routes.py | 2165 | CODE | |
| LOW | tests/api/user/attachments/test_routes.py | 2199 | CODE | |
| LOW | tests/api/user/attachments/test_routes.py | 2266 | CODE | |
| LOW | tests/services/test_search_service.py | 292 | CODE | |
| LOW | tests/devices/conftest.py | 63 | CODE | |
| LOW | scripts/migrate_conversation_id_dbref_to_objectid.py | 26 | CODE | |
| LOW | scripts/qa/durability_e2e.py | 1692 | CODE | |
| LOW | scripts/db/backfill.py | 208 | CODE | |
| LOW | scripts/db/backfill.py | 284 | CODE | |
| LOW | scripts/db/backfill.py | 325 | CODE | |
| LOW | scripts/db/backfill.py | 393 | CODE | |
| LOW | scripts/db/backfill.py | 438 | CODE | |
| LOW | scripts/db/backfill.py | 479 | CODE | |
| LOW | scripts/db/backfill.py | 545 | CODE | |
| LOW | scripts/db/backfill.py | 674 | CODE | |
| LOW | scripts/db/backfill.py | 841 | CODE | |
| LOW | scripts/db/backfill.py | 1020 | CODE | |
| 233 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | application/cache.py | 46 | Stable fingerprint of the generation-affecting kwargs. Args: extra: Keyword arguments forwarded to the gene | STRING |
| HIGH | application/cache.py | 195 | Build the Redis key for one generation call. Args: messages: Chat messages for the call. model: Mod | STRING |
| HIGH | application/utils.py | 392 | Convert PDF pages to images for LLMs that support images but not PDFs. This enables "synthetic PDF support" by | STRING |
| HIGH | application/llm/openai.py | 668 | Send a request, retrying once without tools on a tools-unsupported 400. Args: create: The provider | STRING |
| HIGH | application/core/url_validation.py | 94 | Validate a URL to prevent SSRF attacks. This function checks that: 1. The URL has an allowed scheme (http | STRING |
| HIGH | application/core/secret_key.py | 57 | Return a shared configured secret or a stable local-development secret. Args: configured_secret: Operator-s | STRING |
| HIGH | application/agents/tools/api_body_serializer.py | 31 | Serialize body data to appropriate format. Args: body_data: Dictionary of body parameters | STRING |
| HIGH | application/agents/tools/ntfy.py | 21 | Execute the specified action with given parameters. Args: action_name (str): Name of the a | STRING |
| HIGH | application/agents/tools/ntfy.py | 43 | Send a message to an ntfy topic on the specified server. Args: server_url (str): Base URL | STRING |
| HIGH | application/agents/tools/spec_parser.py | 23 | Parse an API specification and convert operations to action definitions. Supports OpenAPI 3.x and Swagger 2.0 | STRING |
| HIGH | application/parser/embedding_pipeline.py | 254 | Embeds documents and stores them in a vector store. Resumable across Celery autoretries of the *same* task: when | STRING |
| HIGH | application/parser/chunking_creator.py | 34 | Instantiate the chunker registered under ``strategy``. Args: strategy: Registry key (e.g. ``classic | STRING |
| HIGH | application/parser/connectors/connector_creator.py | 31 | Create a connector instance for the specified type. Args: connector_type: Type of connecto | STRING |
| HIGH | application/parser/connectors/connector_creator.py | 51 | Create an auth provider instance for the specified connector type. Args: connector_type: T | STRING |
| HIGH | application/parser/file/bulk.py | 264 | Load data from the input directory. Args: concatenate (bool): whether to concatenate all files into | STRING |
| HIGH | application/parser/file/pdfium_parser.py | 109 | Measure how much extractable text the PDF carries. Args: file: Path to the PDF. Returns: | STRING |
| HIGH | application/parser/file/pdfium_parser.py | 168 | Hand the file to the fallback parser. Args: file: Path to the PDF. errors: Decoding len | STRING |
| HIGH | application/parser/file/pdfium_parser.py | 203 | Parse a PDF, preferring its embedded text layer. Args: file: Path to the PDF. errors: D | STRING |
| HIGH | application/parser/file/docling_parser.py | 124 | Run a lightweight fallback parser, normalizing its failures. Anything the fallback raises is converted to ``Documen | STRING |
| HIGH | application/parser/file/docling_parser.py | 523 | Retry a near-empty OCR parse once on a fresh full-page-OCR converter. Docling caches its pipeline (and the thre | STRING |
| HIGH | application/parser/file/docling_parser.py | 622 | Parse file using docling with hybrid OCR. Uses smart OCR approach where the layout model detects text vs bitmap | STRING |
| HIGH | application/storage/base.py | 69 | Return a short-lived presigned download URL; not all backends support it. Args: path: Path to the f | STRING |
| HIGH | …lication/storage/db/repositories/connector_sessions.py | 233 | Upsert by shallow-merging ``patch`` into ``session_data``. Writes ``server_url`` to the scalar column so downst | STRING |
| HIGH | application/prompts/composer.py | 76 | Assemble a preset from its fragments. Args: preset_id: One of the keys in :data:`PRESET_VARIANTS`. Ret | STRING |
| HIGH | application/api/answer/services/prompt_renderer.py | 122 | Render prompt with full context from all namespaces. Args: prompt_content: Raw prompt temp | STRING |
| HIGH | application/api/answer/services/compression/service.py | 55 | Compress conversation history up to specified index. Args: conversation: Full conversation | STRING |
| HIGH | application/api/answer/services/compression/service.py | 175 | Compress conversation and save to database. Args: conversation_id: Conversation ID | STRING |
| HIGH | …tion/api/answer/services/compression/prompt_builder.py | 24 | Load prompt template from file. Args: version: Version string (e.g., 'v1.0') Retu | STRING |
| HIGH | application/api/user/base.py | 281 | Build an ASCII storage filename without discarding a Unicode file's suffix. Args: filename: Original multip | STRING |
| HIGH | application/api/user/agents/routes.py | 384 | Validate an inbound ``config`` payload, returning the normalized dict. Strict on write: an unknown check, an action | STRING |
| HIGH | application/templates/template_engine.py | 36 | Render template with provided context. Args: template_content: Raw template string with Ji | STRING |
| HIGH | application/services/search_service.py | 223 | Resolve an agent by API key and search its sources. Args: api_key: Agent API key (the opaque string stored | STRING |
| HIGH | application/vectorstore/faiss.py | 43 | Build a safe local path for a FAISS index. Args: path: Source identifier provided by the caller. Retur | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration/__init__.py | 47 | __all__ = [ | CODE |
| LOW | tests/parser/file/test_docling_parser.py | 1035 | def _set_threshold(monkeypatch, value: int) -> None: | CODE |
| LOW | tests/worker/test_worker_sse_publishes.py | 727 | def _setup_client(self) -> None: | CODE |
| LOW | application/cache.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/utils.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/usage.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/mcp_server.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/llm/llm_creator.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/llm/anthropic.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | application/llm/anthropic.py | 423 | def _set_finish_reason(self, stop_reason: Optional[str]) -> None: | CODE |
| LOW | application/llm/base.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/llm/providers/openai_compatible.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/llm/providers/__init__.py | 45 | __all__ = ["ALL_PROVIDERS", "PROVIDERS_BY_NAME", "Provider"] | CODE |
| LOW | application/llm/handlers/base.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/core/model_settings.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/core/model_registry.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/core/model_yaml.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/guardrails/config.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/guardrails/__init__.py | 17 | __all__ = [ | CODE |
| LOW | application/guardrails/runtime.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/guardrails/engine.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/guardrails/checks/__init__.py | 26 | __all__ = ["BUILTIN_CHECKS"] | CODE |
| LOW | application/security/encryption.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/graphrag/extraction.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/classic_agent.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/agent_creator.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/agentic_agent.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/default_tools.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/research_agent.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/headless_runner.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tool_executor.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/base.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/workflow_agent.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/api_body_serializer.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/code_executor.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/code_executor.py | 40 | __all__ = ["CodeExecutorTool", "_infer_mime", "_kind_for_mime", "_tail", "_OUTPUT_TAIL_BYTES"] | CODE |
| LOW | application/agents/tools/tool_action_parser.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/brave.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/memory.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/api_tool.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/telegram.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/remote_device.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/postgres.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/artifact_generator.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/mcp_tool.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/mcp_tool.py | 918 | async def set_tokens(self, tokens: OAuthToken) -> None: | CODE |
| LOW | application/agents/tools/mcp_tool.py | 962 | async def set_client_info(self, client_info: OAuthClientInformationFull) -> None: | CODE |
| LOW | application/agents/tools/scheduler.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/spec_parser.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/attachment_bridge.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/internal_search.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/wiki.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/duckduckgo.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/tools/read_document.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/agents/workflows/workflow_engine.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/updates/version_check.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/parser/chunking.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/parser/chunking_strategies.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | application/parser/chunking_strategies.py | 322 | __all__ = [ | CODE |
| LOW | application/parser/document_reader.py | 25 | logger = logging.getLogger(__name__) | CODE |
| 100 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_template_engine.py | 62 | "{{ content }}", {"content": "<code>a < b && c == 'd'</code>"} | CODE |
| HIGH⚡ | tests/test_template_engine.py | 64 | assert result == "<code>a < b && c == 'd'</code>" | CODE |
| HIGH⚡ | …sts/agents/test_workflow_engine_structured_recovery.py | 18 | ok, val = _engine()._parse_structured_output('```json\n{"a": 1, "b": null}\n```') | CODE |
| HIGH⚡ | tests/agents/test_cel_evaluator.py | 103 | assert evaluate_cel("a && b", {"a": True, "b": True}) is True | CODE |
| HIGH⚡ | tests/agents/test_cel_evaluator.py | 104 | assert evaluate_cel("a && b", {"a": True, "b": False}) is False | CODE |
| HIGH⚡ | tests/agents/test_cel_evaluator.py | 105 | assert evaluate_cel("a || b", {"a": False, "b": True}) is True | CODE |
| HIGH | tests/agents/test_workflow_code_node.py | 506 | assert evaluate_cel('report.size > 0 && report.mime_type == "application/pdf"', state) is True | CODE |
| HIGH⚡ | tests/parser/file/test_tabular_parser.py | 209 | assert result == "COLUMNS: A | B || x | y" | CODE |
| HIGH | tests/api/test_workflow_portability.py | 434 | # Explicit null, with no prior workflow to fall back on. | COMMENT |
| HIGH | tests/devices/test_splitter.py | 11 | assert split_command("ls && rm -rf /") == ["ls", "rm -rf /"] | CODE |
| HIGH | tests/devices/test_splitter.py | 15 | assert split_command("foo || bar") == ["foo", "bar"] | CODE |
| HIGH⚡ | tests/devices/test_splitter.py | 71 | assert head_tokens("ls && rm -rf / | grep foo") == ["ls", "rm", "grep"] | CODE |
| HIGH⚡ | tests/devices/test_splitter.py | 75 | assert head_tokens("timeout 5 ls && nohup git push") == ["ls", "git"] | CODE |
| HIGH⚡ | tests/devices/test_normalizer.py | 37 | assert normalize_command("ls -la && rm -rf /tmp") == "ls * && rm *" | CODE |
| HIGH⚡ | tests/devices/test_normalizer.py | 42 | assert normalize_command("ls /tmp && whoami") == "ls * && whoami" | CODE |
| HIGH⚡ | tests/devices/test_normalizer.py | 44 | normalize_command("ls /tmp && rm /tmp/x") | CODE |
| HIGH⚡ | tests/devices/test_normalizer.py | 45 | != normalize_command("ls /tmp && whoami") | CODE |
| HIGH⚡ | tests/devices/test_denylist.py | 208 | assert check_denylist("echo safe && rm -rf /") == "rm -rf /" | CODE |
| HIGH | scripts/db/backfill.py | 233 | SET agent_preferences = users.agent_preferences || EXCLUDED.agent_preferences, | STRING |
| HIGH | …lication/storage/db/repositories/connector_sessions.py | 281 | (connector_sessions.session_data || EXCLUDED.session_data) | STRING |
| HIGH | application/alembic/versions/0019_agent_slug.py | 4 | ``(user_id, slug)`` where slug is not null, so an exported agent can be | STRING |
| HIGH | application/devices/normalizer.py | 12 | ``ls /tmp && whoami`` -> ``ls * && whoami`` | STRING |
| HIGH | application/devices/normalizer.py | 71 | normalized segment sequence (approving ``ls /tmp && whoami`` won't | STRING |
| HIGH | application/devices/normalizer.py | 72 | auto-approve ``ls /tmp && rm /tmp/x``). Empty segments are skipped; | STRING |
| HIGH | application/devices/denylist.py | 146 | ``echo safe && rm -rf /`` still trips. Returns ``None`` if no segment | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_agent_token_tracking.py | 163 | # Create a concrete handler for testing | COMMENT |
| MEDIUM⚡ | tests/test_zip_extraction_security.py | 175 | # Create a small valid zip | COMMENT |
| MEDIUM⚡ | tests/test_zip_extraction_security.py | 189 | # Create a zip with many files (just over limit) | COMMENT |
| MEDIUM⚡ | tests/test_zip_extraction_security.py | 205 | # Create a zip with path traversal | COMMENT |
| MEDIUM⚡ | tests/test_zip_extraction_security.py | 383 | # Create a file with highly compressible content (all zeros) | COMMENT |
| MEDIUM⚡ | tests/test_zip_extraction_security.py | 386 | # Create a large file with repetitive content - compresses extremely well | COMMENT |
| MEDIUM⚡ | tests/test_zip_extraction_security.py | 402 | # Create a zip with random-ish content that doesn't compress well | COMMENT |
| MEDIUM | tests/test_zip_extraction_security.py | 223 | # Create a corrupted "zip" file | COMMENT |
| MEDIUM | tests/test_zip_extraction_security.py | 242 | # Create a valid zip | COMMENT |
| MEDIUM | tests/test_zip_extraction_security.py | 295 | # Create a chain of nested zips | COMMENT |
| MEDIUM | tests/test_zip_extraction_security.py | 324 | # Create a malicious zip | COMMENT |
| MEDIUM | tests/test_zip_extraction_security.py | 362 | # Create a corrupted file | COMMENT |
| MEDIUM | tests/test_zip_extraction_security.py | 424 | # Create a zip with a reasonable size (no compression to avoid ratio issues) | COMMENT |
| MEDIUM | tests/test_compression_service.py | 931 | # Create a long conversation with important info buried in the middle | COMMENT |
| MEDIUM | tests/test_integration.py | 268 | # Create a simple text file for upload | COMMENT |
| MEDIUM | tests/test_integration.py | 299 | # Create a file-like object | STRING |
| MEDIUM | tests/test_coverage_gaps.py | 2175 | # Create the BulkIndexError mock | COMMENT |
| MEDIUM⚡ | tests/test_remaining_coverage.py | 882 | # Create an object where accessing certain attrs raises AttributeError | COMMENT |
| MEDIUM | tests/llm/test_openai.py | 1410 | # Create a schema with a problematic object that raises during iteration | COMMENT |
| MEDIUM⚡ | tests/integration/test_misc.py | 186 | # Create a small test file content | COMMENT |
| MEDIUM⚡ | tests/integration/test_misc.py | 224 | # Create a larger test file (1KB) | COMMENT |
| MEDIUM⚡ | tests/integration/test_prompts.py | 359 | # Create a prompt specifically for deletion | COMMENT |
| MEDIUM⚡ | tests/integration/test_conversations.py | 281 | # Create a conversation specifically for deletion | COMMENT |
| MEDIUM⚡ | tests/integration/test_tools.py | 441 | # Create a tool specifically for deletion - must use available tool name | COMMENT |
| MEDIUM⚡ | tests/integration/test_agents.py | 316 | # Create an agent first | COMMENT |
| MEDIUM⚡ | tests/integration/test_agents.py | 521 | # Create a fresh agent for deletion | COMMENT |
| MEDIUM | tests/integration/test_agents.py | 74 | # Create a minimal test source | COMMENT |
| MEDIUM | tests/agents/test_tool_executor.py | 1355 | # Create a fake call object matching what ToolActionParser expects | COMMENT |
| MEDIUM | tests/agents/test_workflow_engine_coverage.py | 120 | # Create a cycle: start -> state -> state (loop) | COMMENT |
| MEDIUM | …sts/storage/db/repositories/test_pending_tool_state.py | 90 | # Create a state with TTL of 0 seconds (already expired) | COMMENT |
| MEDIUM⚡ | tests/storage/db/repositories/test_users.py | 247 | # Create an agent with a known legacy_mongo_id | COMMENT |
| MEDIUM⚡ | tests/storage/db/repositories/test_users.py | 251 | # Create a user whose pinned list has the ObjectId, an already-UUID, | COMMENT |
| MEDIUM | tests/stt/test_faster_whisper.py | 217 | # Create a segment that uses getattr fallbacks | COMMENT |
| MEDIUM⚡ | scripts/e2e/env.sh | 5 | # This file is intentionally passive: it exports variables and nothing else. | COMMENT |
| MEDIUM⚡ | application/worker.py | 2160 | # Create a clean config for storage | COMMENT |
| MEDIUM | application/worker.py | 311 | # Define a function to extract metadata from a given filename. | COMMENT |
| MEDIUM | application/worker.py | 372 | # Define a function to generate a random string of a given length. | COMMENT |
| MEDIUM | application/worker.py | 563 | # Define the main function for ingesting and processing documents. | COMMENT |
| MEDIUM | application/seed/config/agents_template.yaml | 2 | # This file contains template agents that will be seeded into the database | COMMENT |
| MEDIUM | application/parser/file/docs_parser.py | 37 | # Create a PDF object | COMMENT |
| MEDIUM | application/parser/remote/crawler_markdown.py | 63 | # Create a Document for each visited page | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/core/test_models_config_dir.py | 122 | # Override anthropic claude-haiku-4-5 to claim a 1M context window | STRING |
| MEDIUM | tests/integration/test_chat.py | 1212 | # Workflow with agentic node tests | COMMENT |
| MEDIUM⚡ | tests/agents/test_workflow_agent_types.py | 180 | # Workflow engine: agentic agent node execution | COMMENT |
| MEDIUM⚡ | tests/agents/test_research_agent.py | 791 | # _gen_inner (full orchestration tests) | COMMENT |
| MEDIUM⚡ | …sts/api/answer/services/test_stream_processor_utils.py | 643 | # agentic ones instruct the model to call the search tool. | COMMENT |
| MEDIUM⚡ | …sts/api/answer/services/test_stream_processor_utils.py | 651 | # prompt — the agentic swap must still apply. | COMMENT |
| MEDIUM⚡ | …sts/api/answer/services/test_stream_processor_utils.py | 668 | # agentic ones instruct the model to call the search tool. | COMMENT |
| MEDIUM | …s/api/answer/services/compression/test_orchestrator.py | 166 | # the user's declared context window in the threshold check. | COMMENT |
| MEDIUM⚡ | tests/api/user/agents/test_guardrails_routes.py | 136 | # GET /api/guardrails/catalog | COMMENT |
| MEDIUM⚡ | tests/api/user/agents/test_guardrails_routes.py | 210 | # GET /api/guardrails/events | COMMENT |
| MEDIUM⚡ | tests/api/user/agents/test_guardrails_routes.py | 273 | # GET /api/guardrails/summary | COMMENT |
| MEDIUM | tests/e2e/specs/tier-b/guardrails.spec.ts | 511 | // agent (minus its guardrails) is the worst outcome: the operator | COMMENT |
| MEDIUM | tests/e2e/specs/tier-b/guardrails.spec.ts | 751 | // /api/guardrails/catalog has resolved. | COMMENT |
| MEDIUM | tests/e2e/specs/tier-b/guardrails-runtime.spec.ts | 9 | * // inside `StreamingOutputGuard` (application/guardrails/stream.py). Once a | COMMENT |
| MEDIUM | tests/e2e/specs/tier-b/guardrails-runtime.spec.ts | 38 | * // blocked prompts through `/api/guardrails/events`. | COMMENT |
| MEDIUM | tests/e2e/specs/tier-b/guardrails-runtime.spec.ts | 777 | // (application/guardrails/config.py:129-136) — that downgrade is the | COMMENT |
| MEDIUM | scripts/e2e/mock_llm.py | 519 | # tool_calls are present, matching what RAG code paths expect. | COMMENT |
| MEDIUM | application/llm/openai.py | 243 | # the model's chain-of-thought survives the in-turn tool round-trip. | COMMENT |
| MEDIUM⚡ | application/agents/research_agent.py | 163 | # Main orchestration | COMMENT |
| MEDIUM | application/agents/headless_runner.py | 191 | # agent, so it carries the same guardrails an interactive turn would. | COMMENT |
| MEDIUM | application/agents/tool_executor.py | 1000 | # Journal it like the branches below, so a hallucination storm | COMMENT |
| MEDIUM | application/agents/tools/internal_search.py | 57 | # Dispatch per-source so on-demand agentic search honours the same | COMMENT |
| MEDIUM | application/agents/tools/read_document.py | 350 | # application/guardrails/engine.py. ``shutdown(cancel_futures=True)`` | COMMENT |
| MEDIUM | application/agents/workflows/workflow_engine.py | 380 | # No ``agent_config`` here, deliberately: per-agent guardrails are not | COMMENT |
| MEDIUM | application/storage/db/models.py | 345 | # Per-agent behavior contract (AgentConfig — guardrails today). Empty | COMMENT |
| MEDIUM | application/storage/db/models.py | 346 | # ``{}`` parses to guardrails-disabled. | COMMENT |
| MEDIUM | application/storage/db/repositories/token_usage.py | 130 | # title generation, history compression, RAG question condensing, | COMMENT |
| MEDIUM | application/api/answer/routes/base.py | 884 | # blobs, never plaintext chain-of-thought. | COMMENT |
| MEDIUM⚡ | application/api/answer/services/stream_processor.py | 1752 | # tools_dict (classic/agentic/research), and only when a writable wiki | COMMENT |
| MEDIUM⚡ | application/api/answer/services/stream_processor.py | 1760 | # D11: agentic/research always carry a retriever_config; classic carries | COMMENT |
| MEDIUM⚡ | application/api/answer/services/stream_processor.py | 1766 | # to it; otherwise (agentic/research only) the tool exposes every | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 319 | # actual context window instead of the default 128k. | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 841 | # Per-agent behavior contract (guardrails). The floor is | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 944 | # the upstream context window for any small (e.g. 8k/32k) BYOM. | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 1362 | # agentic swap below still applies. | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 1364 | # Agentic/research agents use the agentic preset variants (search | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 1567 | # A resumed turn is still the same turn: rebuild it with the guardrails | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 1623 | # _get_prompt_content handles the agentic preset swap and caching; | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 1670 | # Create LLM and handler (dependency injection) | COMMENT |
| MEDIUM | application/api/answer/services/stream_processor.py | 1789 | # Per-source list so on-demand agentic search dispatches each | COMMENT |
| MEDIUM | …n/api/answer/services/compression/threshold_checker.py | 53 | # Get context window limit for model | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_todo_tool.py | 0 | a ``default_{user_id}`` tool_id must no-op with a polite error. | STRING |
| HIGH | tests/test_memory_tool.py | 0 | a ``default_{user_id}`` tool_id must no-op with a polite error. | STRING |
| HIGH | tests/test_notes_tool.py | 0 | a ``default_{user_id}`` tool_id must no-op with a polite error. | STRING |
| HIGH | tests/graphrag/test_extraction.py | 0 | never leak a pool into another test; the ephemeral dsn dies with its db. | STRING |
| HIGH | tests/graphrag/test_store.py | 0 | never leak a pool into another test; the ephemeral dsn dies with its db. | STRING |
| HIGH | tests/graphrag/test_retriever_live.py | 0 | never leak a pool into another test; the ephemeral dsn dies with its db. | STRING |
| HIGH | …torage/db/repositories/test_reconciliation_liveness.py | 0 | update tool_call_attempts set attempted_at = clock_timestamp() - make_interval(mins => :age), updated_at = clock_timesta | STRING |
| HIGH | tests/storage/db/repositories/test_reconciliation.py | 0 | update tool_call_attempts set attempted_at = clock_timestamp() - make_interval(mins => :age), updated_at = clock_timesta | STRING |
| HIGH | tests/api/user/test_reconciliation.py | 0 | update tool_call_attempts set attempted_at = clock_timestamp() - make_interval(mins => :age), updated_at = clock_timesta | STRING |
| HIGH | tests/storage/db/repositories/test_todos.py | 0 | insert a user_tools row and return its uuid as a string. | STRING |
| HIGH | tests/storage/db/repositories/test_memories.py | 0 | insert a user_tools row and return its uuid as a string. | STRING |
| HIGH | tests/storage/db/repositories/test_notes.py | 0 | insert a user_tools row and return its uuid as a string. | STRING |
| HIGH | tests/vectorstore/test_milvus.py | 0 | deterministic 3-dim embeddings: distinct texts get distinct directions. | STRING |
| HIGH | tests/vectorstore/test_qdrant.py | 0 | deterministic 3-dim embeddings: distinct texts get distinct directions. | STRING |
| HIGH | tests/vectorstore/test_faiss.py | 0 | deterministic 3-dim embeddings: distinct texts get distinct directions. | STRING |
| HIGH | application/llm/handlers/google.py | 0 | create a tool result message in the standard internal format. | STRING |
| HIGH | application/llm/handlers/openai.py | 0 | create a tool result message in the standard internal format. | STRING |
| HIGH | application/llm/handlers/anthropic.py | 0 | create a tool result message in the standard internal format. | STRING |
| HIGH | application/agents/tools/memory.py | 0 | initialize the tool. args: tool_config: optional tool configuration. should include: - tool_id: unique identifier for th | STRING |
| HIGH | application/agents/tools/todo_list.py | 0 | initialize the tool. args: tool_config: optional tool configuration. should include: - tool_id: unique identifier for th | STRING |
| HIGH | application/agents/tools/notes.py | 0 | initialize the tool. args: tool_config: optional tool configuration. should include: - tool_id: unique identifier for th | STRING |
| HIGH | application/agents/tools/memory.py | 0 | return json metadata describing supported actions for tool schemas. | STRING |
| HIGH | application/agents/tools/todo_list.py | 0 | return json metadata describing supported actions for tool schemas. | STRING |
| HIGH | application/agents/tools/notes.py | 0 | return json metadata describing supported actions for tool schemas. | STRING |
| HIGH | application/storage/db/repositories/todos.py | 0 | resolve a prompt by pg uuid or legacy mongo objectid. picks the lookup path from the id shape so non-uuid input never re | STRING |
| HIGH | application/storage/db/repositories/notes.py | 0 | resolve a prompt by pg uuid or legacy mongo objectid. picks the lookup path from the id shape so non-uuid input never re | STRING |
| HIGH | application/storage/db/repositories/prompts.py | 0 | resolve a prompt by pg uuid or legacy mongo objectid. picks the lookup path from the id shape so non-uuid input never re | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_logging.py | 339 | CODE | |
| MEDIUM | tests/test_extra_coverage.py | 205 | CODE | |
| MEDIUM | tests/test_extra_coverage.py | 269 | CODE | |
| MEDIUM | tests/test_version_check.py | 64 | CODE | |
| MEDIUM | tests/test_event_replay.py | 141 | CODE | |
| MEDIUM | tests/seed/test_seeder.py | 181 | CODE | |
| MEDIUM | tests/llm/test_base.py | 580 | CODE | |
| MEDIUM | tests/llm/test_base.py | 601 | CODE | |
| MEDIUM | tests/agents/test_workflow_agent_graph.py | 178 | CODE | |
| MEDIUM | tests/agents/test_workflow_agent_graph.py | 259 | CODE | |
| MEDIUM | tests/agents/test_research_agent.py | 1309 | CODE | |
| MEDIUM | tests/agents/test_workflow_engine_coverage.py | 1079 | CODE | |
| MEDIUM | tests/parser/file/test_embedding_pipeline.py | 270 | CODE | |
| MEDIUM | tests/scripts/test_grant_admin.py | 96 | CODE | |
| MEDIUM | tests/api/test_events_routes.py | 293 | CODE | |
| MEDIUM | tests/api/v1/test_v1_idempotency.py | 392 | CODE | |
| MEDIUM | tests/api/v1/test_routes_extended.py | 248 | CODE | |
| MEDIUM | tests/api/v1/test_routes_extended.py | 292 | CODE | |
| MEDIUM | tests/api/answer/services/test_conversation_service.py | 84 | CODE | |
| MEDIUM | tests/api/answer/services/test_conversation_service.py | 802 | CODE | |
| MEDIUM | tests/api/answer/services/test_conversation_service.py | 854 | CODE | |
| MEDIUM | tests/api/answer/services/test_conversation_service.py | 906 | CODE | |
| MEDIUM | tests/api/user/test_sharing.py | 228 | CODE | |
| MEDIUM | tests/api/user/test_sharing.py | 337 | CODE | |
| MEDIUM | tests/api/user/test_prompts.py | 209 | CODE | |
| MEDIUM | tests/api/user/test_prompts.py | 261 | CODE | |
| MEDIUM | tests/api/user/test_prompts.py | 399 | CODE | |
| MEDIUM | tests/api/user/test_prompts.py | 556 | CODE | |
| MEDIUM | tests/api/user/test_analytics.py | 203 | CODE | |
| MEDIUM | tests/api/user/test_analytics.py | 262 | CODE | |
| MEDIUM | tests/api/user/test_analytics.py | 329 | CODE | |
| MEDIUM | tests/api/user/test_analytics.py | 471 | CODE | |
| MEDIUM | tests/api/user/test_analytics.py | 1156 | CODE | |
| MEDIUM | tests/api/user/test_tools_routes.py | 1154 | CODE | |
| MEDIUM | tests/api/user/test_tools_routes.py | 1196 | CODE | |
| MEDIUM | tests/api/user/test_conversations.py | 203 | CODE | |
| MEDIUM | tests/api/user/test_conversations.py | 248 | CODE | |
| MEDIUM | tests/api/user/test_conversations.py | 292 | CODE | |
| MEDIUM | tests/api/user/test_conversations.py | 409 | CODE | |
| MEDIUM | tests/api/user/test_conversations.py | 632 | CODE | |
| MEDIUM | tests/api/user/test_conversations.py | 753 | CODE | |
| MEDIUM | tests/api/user/workflows/test_routes_coverage.py | 354 | CODE | |
| MEDIUM | tests/api/user/workflows/test_routes_coverage.py | 421 | CODE | |
| MEDIUM | tests/api/user/workflows/test_routes_coverage.py | 536 | CODE | |
| MEDIUM | tests/api/user/workflows/test_routes_coverage.py | 596 | CODE | |
| MEDIUM | tests/api/user/agents/test_sharing.py | 106 | CODE | |
| MEDIUM | tests/api/user/agents/test_sharing.py | 170 | CODE | |
| MEDIUM | tests/api/user/agents/test_sharing.py | 278 | CODE | |
| MEDIUM | tests/api/user/agents/test_routes_happy.py | 137 | CODE | |
| MEDIUM | tests/api/user/agents/test_routes_happy.py | 945 | CODE | |
| MEDIUM | tests/api/user/agents/test_routes_happy.py | 1202 | CODE | |
| MEDIUM | tests/api/user/agents/test_routes_happy.py | 1378 | CODE | |
| MEDIUM | tests/api/user/agents/test_routes_happy.py | 1428 | CODE | |
| MEDIUM | tests/api/user/agents/test_routes_happy.py | 1609 | CODE | |
| MEDIUM | tests/api/user/agents/test_routes_happy.py | 1654 | CODE | |
| MEDIUM | tests/api/user/sources/test_chunks.py | 78 | CODE | |
| MEDIUM | tests/api/user/sources/test_routes.py | 105 | CODE | |
| MEDIUM | tests/worker/test_ingest_checkpoint.py | 514 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/sandbox/test_daytona.py | 863 | assert created.fs.create_folder.call_args.kwargs.get("request_timeout") == 60.0 | CODE |
| CRITICAL⚡ | tests/sandbox/test_daytona.py | 890 | assert created.fs.create_folder.call_args.kwargs.get("request_timeout") == 60.0 | CODE |
| CRITICAL⚡ | tests/sandbox/test_daytona.py | 897 | assert created.fs.get_file_info.call_args.kwargs.get("request_timeout") == 60.0 | CODE |
| CRITICAL⚡ | tests/sandbox/test_daytona.py | 904 | assert created.fs.list_files.call_args.kwargs.get("request_timeout") == 60.0 | CODE |
| CRITICAL⚡ | tests/sandbox/test_daytona.py | 911 | assert created.fs.delete_file.call_args.kwargs.get("request_timeout") == 60.0 | CODE |
| CRITICAL⚡ | tests/sandbox/test_daytona.py | 918 | assert sandbox._client.get.call_args.kwargs.get("request_timeout") == 60.0 | CODE |
| CRITICAL⚡ | tests/sandbox/test_daytona.py | 928 | assert box._client.list.call_args.kwargs.get("request_timeout") == 60.0 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/vite-env.d.ts | 1 | /// <reference types="vite/client" /> | COMMENT |
| LOW | frontend/src/settings/types/index.ts | 81 | status: boolean; | COMMENT |
| LOW | frontend/src/hooks/useTokenAuth.ts | 21 | COMMENT | |
| LOW | frontend/src/events/eventStreamClient.ts | 121 | notifyHealth('connecting'); | COMMENT |
| LOW | frontend/src/events/useEventStream.ts | 41 | // inside ``connectEventStream``. | COMMENT |
| LOW | frontend/src/conversation/MarkdownAnswer.tsx | 21 | type SandboxArtifact, | COMMENT |
| LOW | tests/agents/test_workflow_agent_pg_write.py | 81 | # ------------------------------------------------------------------ | COMMENT |
| LOW | tests/parser/connectors/confluence/test_auth.py | 301 | + datetime.timedelta(seconds=30) | COMMENT |
| LOW | tests/sandbox/test_daytona.py | 781 | # | COMMENT |
| LOW | tests/api/answer/test_base_routes.py | 901 | # same ``pg_conn`` so the journal write can see the message row | COMMENT |
| LOW | tests/e2e/specs/auth/session_jwt.spec.ts | 61 | ).toBeVisible(); | COMMENT |
| LOW | tests/e2e/specs/tier-a/attachments.spec.ts | 421 | ); | COMMENT |
| LOW | tests/e2e/specs/tier-a/agents.spec.ts | 321 | // cannot reliably assert non-empty `sources[]` in the response | COMMENT |
| LOW | tests/e2e/specs/tier-b/streaming-ux.spec.ts | 181 | // released by `revert_stale_resuming`'s 600 s grace, which locked the user | COMMENT |
| LOW | deployment/k8s/docsgpt-secrets.yaml | 1 | apiVersion: v1 | COMMENT |
| LOW | …oyment/k8s/network-policies/sandbox-egress-policy.yaml | 1 | # Egress / SSRF NetworkPolicy for the docsgpt-sandbox runner. | COMMENT |
| LOW | …oyment/k8s/network-policies/sandbox-egress-policy.yaml | 41 | # DNS to cluster resolvers (kube-dns). Restricted to UDP/TCP 53 so the | COMMENT |
| LOW | deployment/k8s/deployments/sandbox-deploy.yaml | 1 | # docsgpt-sandbox runner (Jupyter Kernel Gateway). OPT-IN: this manifest and its | COMMENT |
| LOW | deployment/k8s/deployments/sandbox-deploy.yaml | 21 | # sibling kernels or bypass the session cap). The gateway fails closed if the | COMMENT |
| LOW | …ployment/optional/docker-compose.optional.sandbox.yaml | 1 | # Optional code-execution sandbox overlay. | COMMENT |
| LOW | …ployment/optional/docker-compose.optional.sandbox.yaml | 21 | # container/uid and are isolated by working directory only -- sibling workspaces | COMMENT |
| LOW | …t/optional/docker-compose.optional.sandbox-egress.yaml | 1 | # Optional egress-firewall overlay for the docsgpt-sandbox runner (compose). | COMMENT |
| LOW | …t/optional/docker-compose.optional.sandbox-egress.yaml | 21 | # `networks: [sandbox-net]` override silently leaves the runner on its old net. | COMMENT |
| LOW | …t/optional/docker-compose.optional.sandbox-egress.yaml | 41 | # deny-private proxy); (1) is the host-firewall DROP that closes the | COMMENT |
| LOW | …t/optional/docker-compose.optional.sandbox-egress.yaml | 61 | # (These container-to-container DROPs require the host's | COMMENT |
| LOW | …t/optional/docker-compose.optional.sandbox-egress.yaml | 81 | # -f deployment/optional/docker-compose.optional.sandbox-egress.yaml up -d | COMMENT |
| LOW | deployment/sandbox/kernel-launch.sh | 1 | #!/bin/sh | COMMENT |
| LOW | deployment/sandbox/gateway-launch.sh | 1 | #!/bin/sh | COMMENT |
| LOW | scripts/qa/durability_e2e.py | 1421 | redis.Redis(host="127.0.0.1", port=6379, db=backend_db).flushdb() | COMMENT |
| LOW | scripts/e2e/mock_llm.py | 81 | # arguments. Some OpenAI-compatible gateways restate a short | COMMENT |
| LOW | scripts/e2e/env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/down.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/up.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | application/cache.py | 21 | COMMENT | |
| LOW | application/seed/config/agents_template.yaml | 21 | loader: "url" # Type of loader (url, pdf, txt, etc.) | COMMENT |
| LOW | application/llm/openai.py | 241 | # Per-instance state for the Responses API path. ``_reasoning_for_calls`` | COMMENT |
| LOW | application/llm/base.py | 561 | # The primary already delivered a finish signal — only | COMMENT |
| LOW | application/llm/handlers/base.py | 1181 | logger.error(f"Error executing tool: {str(e)}", exc_info=True) | COMMENT |
| LOW | application/llm/handlers/base.py | 1361 | # emit content as bare strings (yielded straight through) and | COMMENT |
| LOW | application/llm/handlers/base.py | 1381 | except Exception: | COMMENT |
| LOW | application/core/settings.py | 61 | CELERY_RESULT_BACKEND: str = "redis://localhost:6379/1" | COMMENT |
| LOW | application/core/settings.py | 121 | # loudly instead of indexing an empty document. 0 disables the guard. | COMMENT |
| LOW | application/core/settings.py | 301 | COMMENT | |
| LOW | application/core/settings.py | 341 | # Registry-key allowlist; values must match GuardrailCreator.checks keys. | COMMENT |
| LOW | application/core/settings.py | 361 | # Master switch — when False, /api/events emits a "push_disabled" comment | COMMENT |
| LOW | application/core/settings.py | 381 | # ``Last-Event-ID=<oldest>`` reconnects can only enumerate this | COMMENT |
| LOW | application/core/settings.py | 421 | SCHEDULE_RUN_OUTPUT_RETENTION_DAYS: int = 90 | COMMENT |
| LOW | application/core/settings.py | 461 | WORKFLOW_NODE_NATIVE_MAX_FILES: int = 5 | COMMENT |
| LOW | application/guardrails/base.py | 61 | COMMENT | |
| LOW | application/agents/default_tools.py | 21 | _FK_BOUND_TOOLS = frozenset({"notes", "todo_list"}) | COMMENT |
| LOW | application/agents/tool_executor.py | 561 | # list index in ``_get_user_tools``) and once as the synthesized default | COMMENT |
| LOW | application/agents/tool_executor.py | 961 | # A tool the model invented will never resolve, so re-running it just | COMMENT |
| LOW | application/agents/tools/tool_action_parser.py | 61 | return _MALFORMED_ARGUMENTS | COMMENT |
| LOW | application/agents/workflows/workflow_engine.py | 421 | COMMENT | |
| LOW | application/agents/workflows/workflow_engine.py | 821 | else: | COMMENT |
| LOW | application/parser/embedding_pipeline.py | 361 | COMMENT | |
| LOW | application/streaming/event_replay.py | 41 | DEFAULT_WATCHDOG_INTERVAL_SECONDS = 5.0 | COMMENT |
| LOW | application/api/v1/routes.py | 181 | model_name = _get_model_name(agent_doc, api_key) | COMMENT |
| LOW | application/api/v1/routes.py | 301 | # A missing/expired durable continuation has no reserved WAL | COMMENT |
| LOW | application/api/answer/routes/base.py | 261 | """ | COMMENT |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.sh | 80 | # Check if Docker is running | COMMENT |
| LOW | setup.sh | 546 | if [[ "$CONTAINER_STATUS" == *"ollama"* ]]; then # Check if 'ollama' service is in running services | CODE |
| LOW | setup.sh | 745 | # Check if .env file exists and is not empty | COMMENT |
| LOW | tests/test_integration.py | 719 | # Check if it's the detailed validation error or generic error | COMMENT |
| LOW | tests/test_integration.py | 919 | # Check if conversation was compressed by examining metadata | COMMENT |
| LOW | tests/test_integration.py | 1050 | # Check if the critical info was preserved | COMMENT |
| LOW | extensions/react-widget/publish.sh | 11 | # Check if a specific version was provided | COMMENT |
| LOW | application/llm/google_ai.py | 607 | # Check if we have both tools and file attachments | COMMENT |
| LOW | application/llm/openai.py | 103 | # Check if it looks like a data URL with base64 | COMMENT |
| LOW | application/llm/openai.py | 1803 | # Check if this is a pre-converted image (from PDF-to-image conversion) | COMMENT |
| LOW | application/llm/handlers/base.py | 240 | # Check if provider supports images but not PDF (synthetic PDF support) | COMMENT |
| LOW | application/llm/handlers/base.py | 664 | # Check if compression actually reduced tokens | COMMENT |
| LOW | application/llm/handlers/base.py | 1596 | # Check if context limit was reached during tool execution. | COMMENT |
| LOW | application/core/url_validation.py | 135 | # Check if hostname is an IP address directly | COMMENT |
| LOW⚡ | application/agents/tools/memory.py | 283 | # Check if viewing directory (ends with / or is root) | COMMENT |
| LOW | application/agents/tools/memory.py | 381 | # Check if old_str exists (case-insensitive) | COMMENT |
| LOW | application/agents/tools/memory.py | 443 | # Check if it's a directory (ends with /) | COMMENT |
| LOW | application/agents/tools/internal_search.py | 213 | # Check if it's a file metadata dict or a folder | COMMENT |
| LOW | application/parser/file/pptx_parser.py | 63 | # Check if the shape has a 'text' attribute and append that to the slide_text | STRING |
| LOW | application/parser/remote/sitemap_loader.py | 18 | # Check if the input is a list and if it is, use the first element | COMMENT |
| LOW | application/parser/remote/github_loader.py | 313 | # Check if it's a rate limit issue | COMMENT |
| LOW | application/api/answer/services/stream_processor.py | 286 | # Check if compression is enabled and needed | COMMENT |
| LOW | application/api/answer/services/compression/service.py | 80 | # Check if there are existing compressions. ``compression_metadata`` | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/locale/zh.json | 1084 | "placeholder": "输入更新的查询..." | CODE |
| LOW | frontend/src/locale/de.json | 1084 | "placeholder": "Aktualisierte Anfrage eingeben..." | CODE |
| LOW | frontend/src/locale/ru.json | 1084 | "placeholder": "Введите обновленный запрос..." | CODE |
| LOW | frontend/src/locale/en.json | 1089 | "placeholder": "Type the updated query..." | CODE |
| LOW | frontend/src/locale/jp.json | 1084 | "placeholder": "更新されたクエリを入力..." | CODE |
| LOW | frontend/src/locale/zh-TW.json | 1084 | "placeholder": "輸入更新的查詢..." | CODE |
| LOW | frontend/src/locale/es.json | 1084 | "placeholder": "Ingrese la consulta actualizada..." | CODE |
| LOW⚡ | tests/test_oidc.py | 215 | assert claims["email"] == "user@example.com" | CODE |
| LOW⚡ | tests/test_oidc.py | 1123 | "oidc-user-1", email="user@example.com" | CODE |
| LOW⚡ | tests/test_oidc.py | 1127 | assert call.kwargs["metadata"] == {"email": "user@example.com", "groups": None} | CODE |
| LOW⚡ | tests/test_oidc.py | 1138 | "oidc-user-1", "user@example.com" | CODE |
| LOW⚡ | tests/test_oidc.py | 1415 | email="user@example.com", name="OIDC User", oidc_sid="sess-2" | CODE |
| LOW⚡ | tests/test_oidc.py | 1425 | assert decoded["email"] == "user@example.com" | CODE |
| LOW | tests/test_oidc.py | 64 | "email": "user@example.com", | CODE |
| LOW | tests/test_oidc.py | 756 | assert decoded["email"] == "user@example.com" | CODE |
| LOW⚡ | tests/llm/test_fallback.py | 170 | get_api_key=lambda prov: "fake-key", | CODE |
| LOW⚡ | tests/agents/test_tool_action_parser.py | 34 | call.arguments = '{"to": "user@example.com"}' | CODE |
| LOW⚡ | tests/agents/test_tool_action_parser.py | 40 | assert call_args == {"to": "user@example.com"} | CODE |
| LOW⚡ | tests/parser/connectors/test_share_point_auth.py | 243 | "preferred_username": "user@example.com", | CODE |
| LOW⚡ | tests/parser/connectors/test_share_point_auth.py | 253 | assert mapped["user_info"]["email"] == "user@example.com" | CODE |
| LOW⚡ | tests/storage/db/repositories/test_conversations.py | 522 | placeholder_response="placeholder", | CODE |
| LOW⚡ | tests/storage/db/repositories/test_conversations.py | 529 | assert msg["response"] == "placeholder" | CODE |
| LOW | tests/api/test_connector_routes_happy.py | 363 | "user_email": "user@example.com", | CODE |
| LOW⚡ | scripts/e2e/env.sh | 79 | export API_KEY="e2e-fake-key" | CODE |
| LOW⚡ | scripts/e2e/env.sh | 80 | export OPENAI_API_KEY="e2e-fake-key" | CODE |
| LOW⚡ | scripts/e2e/env.sh | 83 | export EMBEDDINGS_KEY="e2e-fake-key" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/core/test_model_utils.py | 23 | CODE | |
| LOW | application/worker.py | 1219 | CODE | |
| LOW | application/worker.py | 2062 | CODE | |
| LOW | application/guardrails/base.py | 14 | CODE | |
| LOW | application/agents/tool_executor.py | 278 | CODE | |
| LOW | application/agents/base.py | 42 | CODE | |
| LOW | application/agents/tools/brave.py | 33 | CODE | |
| LOW | application/agents/tools/mcp_tool.py | 678 | CODE | |
| LOW | application/agents/tools/internal_search.py | 464 | CODE | |
| LOW | application/parser/file/bulk.py | 183 | CODE | |
| LOW | application/retriever/dispatcher.py | 54 | CODE | |
| LOW | application/retriever/graph_rag.py | 50 | CODE | |
| LOW | application/retriever/classic_rag.py | 25 | CODE | |
| LOW | application/storage/db/repositories/stack_logs.py | 48 | CODE | |
| LOW | application/storage/db/repositories/attachments.py | 40 | CODE | |
| LOW | application/storage/db/repositories/sources.py | 130 | CODE | |
| LOW | …lication/storage/db/repositories/connector_sessions.py | 47 | CODE | |
| LOW | application/storage/db/repositories/token_usage.py | 26 | CODE | |
| LOW | application/storage/db/repositories/artifacts.py | 43 | CODE | |
| LOW | application/storage/db/repositories/artifacts.py | 546 | CODE | |
| LOW | application/storage/db/repositories/user_tools.py | 49 | CODE | |
| LOW | application/storage/db/repositories/schedules.py | 30 | CODE | |
| LOW | application/storage/db/repositories/device_audit_log.py | 66 | CODE | |
| LOW | application/sandbox/daytona.py | 57 | CODE | |
| LOW | application/api/answer/routes/base.py | 200 | CODE | |
| LOW | application/api/answer/services/conversation_service.py | 85 | CODE | |
| LOW | application/api/answer/services/conversation_service.py | 244 | CODE | |
| LOW | application/api/answer/services/conversation_service.py | 382 | CODE | |
| LOW | application/api/user/tasks.py | 415 | CODE | |
| LOW | application/vectorstore/pgvector.py | 33 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_integration.py | 981 | # Step 2: Send CRITICAL information | COMMENT |
| LOW⚡ | tests/test_integration.py | 1006 | # Step 3: Send more general questions to bury the critical info | COMMENT |
| LOW⚡ | tests/test_integration.py | 1035 | # Step 4: Ask about the critical information | COMMENT |
| LOW | tests/test_integration.py | 950 | # Step 1: Send general questions | COMMENT |
| LOW | tests/integration/test_v1_tool_calls.py | 328 | # Step 1: trigger a tool call | COMMENT |
| LOW | tests/integration/test_v1_tool_calls.py | 350 | # Step 2: send continuation with tool result + top-level conversation_id | COMMENT |
| LOW | tests/integration/test_v1_tool_calls.py | 423 | # Step 1: trigger a tool call | COMMENT |
| LOW | tests/integration/test_v1_tool_calls.py | 449 | # Step 2: send continuation (standard format, top-level conversation_id) | COMMENT |
| LOW⚡ | .github/workflows/sync_fork.yaml | 18 | # Step 1: run a standard checkout action | COMMENT |
| LOW⚡ | .github/workflows/sync_fork.yaml | 22 | # Step 2: run the sync action | COMMENT |
| LOW⚡ | application/worker.py | 2167 | # Step 2: Download files to temp directory | COMMENT |
| LOW | application/worker.py | 2142 | # Step 1: Initialize the appropriate loader | COMMENT |
| LOW | application/worker.py | 2205 | # Step 3: Use SimpleDirectoryReader to process downloaded files | COMMENT |
| LOW | application/worker.py | 2224 | # Step 4: Process documents (chunking, embedding, etc.) | COMMENT |
| LOW | application/worker.py | 2275 | # Step 6: Upload index files | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_integration.py | 981 | # Step 2: Send CRITICAL information | COMMENT |
| LOW⚡ | tests/test_integration.py | 1006 | # Step 3: Send more general questions to bury the critical info | COMMENT |
| LOW⚡ | tests/test_integration.py | 1035 | # Step 4: Ask about the critical information | COMMENT |
| LOW | tests/test_integration.py | 950 | # Step 1: Send general questions | COMMENT |
| LOW | tests/integration/test_v1_tool_calls.py | 328 | # Step 1: trigger a tool call | COMMENT |
| LOW | tests/integration/test_v1_tool_calls.py | 350 | # Step 2: send continuation with tool result + top-level conversation_id | COMMENT |
| LOW | tests/integration/test_v1_tool_calls.py | 423 | # Step 1: trigger a tool call | COMMENT |
| LOW | tests/integration/test_v1_tool_calls.py | 449 | # Step 2: send continuation (standard format, top-level conversation_id) | COMMENT |
| LOW⚡ | .github/workflows/sync_fork.yaml | 18 | # Step 1: run a standard checkout action | COMMENT |
| LOW⚡ | .github/workflows/sync_fork.yaml | 22 | # Step 2: run the sync action | COMMENT |
| LOW⚡ | application/worker.py | 2167 | # Step 2: Download files to temp directory | COMMENT |
| LOW | application/worker.py | 2142 | # Step 1: Initialize the appropriate loader | COMMENT |
| LOW | application/worker.py | 2205 | # Step 3: Use SimpleDirectoryReader to process downloaded files | COMMENT |
| LOW | application/worker.py | 2224 | # Step 4: Process documents (chunking, embedding, etc.) | COMMENT |
| LOW | application/worker.py | 2275 | # Step 6: Upload index files | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/package-lock.json | 11958 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", | CODE |
| MEDIUM | tests/test_compression_service.py | 1052 | "response": """Python decorators are a powerful feature that allows you to modify or enhance functions and c | CODE |
| LOW⚡ | tests/agents/test_workflow_agent_graph.py | 213 | # Should just return None since workflow not found in DB | COMMENT |
| MEDIUM | tests/retriever/test_prescreen.py | 66 | # A robust model judges relevance and drops the irrelevant chunk even | COMMENT |
| MEDIUM⚡ | tests/api/v1/test_reasoning_heartbeat_liveness.py | 120 | # Test harness | COMMENT |
| MEDIUM⚡ | tests/api/v1/test_v1_tool_pause_finalization.py | 143 | # Test harness | COMMENT |
| MEDIUM | docs/package-lock.json | 7986 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/content/Models/embeddings.md | 77 | EMBEDDINGS_KEY=YOUR_API_KEY # optional; sent as a Bearer token | CODE |
| HIGH | extensions/react-widget/README.md | 120 | apiKey="your-api-key" | CODE |
| HIGH | extensions/react-widget/README.md | 148 | apiKey: 'your-api-key-here', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | application/parser/file/docs_parser.py | 24 | # alternatively you can use local vision capable LLM | COMMENT |
| MEDIUM | application/parser/file/image_parser.py | 24 | # alternatively you can use local vision capable LLM | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_compression_service.py | 805 | def process_data(self, input_data: List[str]) -> Dict[str, Any]: | CODE |
| LOW | tests/test_compression_service.py | 1071 | def my_function(): | CODE |
| LOW | application/security/safe_url.py | 529 | def handle_request(self, request: httpx.Request) -> httpx.Response: | CODE |