Use claude code, codex or pi for free in the terminal, VSCode extension, and discord like OpenClaw (voice supported)
This report presents the forensic synthetic code analysis of Alishahryar1/free-claude-code, a Python project with 40,022 GitHub stars. SynthScan v2.0 examined 91,711 lines of code across 425 source files, recording 2469 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 28.0 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 2469 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 | smoke/conftest.py | 23 | def pytest_collection_modifyitems(items: list[pytest.Item]) -> None: | CODE |
| LOW | smoke/prereq/test_messaging_prereq_live.py | 12 | def test_telegram_bot_api_permissions(smoke_config: SmokeConfig) -> None: | CODE |
| LOW | smoke/prereq/test_messaging_prereq_live.py | 54 | def test_discord_bot_api_permissions(smoke_config: SmokeConfig) -> None: | CODE |
| LOW | smoke/prereq/test_messaging_prereq_live.py | 103 | def test_interactive_inbound_messaging_requires_explicit_mode( | CODE |
| LOW | smoke/prereq/test_voice_prereq_live.py | 17 | async def test_voice_transcription_backend_when_explicitly_enabled( | CODE |
| LOW | smoke/prereq/test_cli_prereq_live.py | 20 | def test_fcc_init_scaffolds_user_config( | CODE |
| LOW | smoke/prereq/test_cli_prereq_live.py | 37 | def test_free_claude_code_entrypoint_starts_server(smoke_config: SmokeConfig) -> None: | CODE |
| LOW | smoke/prereq/test_cli_prereq_live.py | 47 | def test_claude_cli_prompt_when_available( | CODE |
| LOW⚡ | …ke/prereq/test_local_provider_endpoints_prereq_live.py | 9 | def test_lmstudio_models_endpoint_when_available(smoke_config: SmokeConfig) -> None: | CODE |
| LOW⚡ | …ke/prereq/test_local_provider_endpoints_prereq_live.py | 19 | def test_llamacpp_models_endpoint_when_available(smoke_config: SmokeConfig) -> None: | CODE |
| LOW⚡ | …ke/prereq/test_local_provider_endpoints_prereq_live.py | 29 | def test_ollama_models_endpoint_when_available(smoke_config: SmokeConfig) -> None: | CODE |
| LOW | smoke/prereq/test_client_shapes_prereq_live.py | 10 | def test_vscode_and_jetbrains_shaped_requests( | CODE |
| LOW | smoke/prereq/test_tools_prereq_live.py | 18 | def test_live_tool_use_when_configured_model_supports_tools( | CODE |
| LOW | smoke/prereq/test_provider_prereq_live.py | 23 | def test_model_mapping_configuration_is_consistent(smoke_config: SmokeConfig) -> None: | CODE |
| LOW | smoke/prereq/test_provider_prereq_live.py | 32 | def test_mixed_provider_model_mapping_when_configured( | CODE |
| LOW | smoke/prereq/test_provider_prereq_live.py | 51 | def test_configured_provider_models_stream_successfully( | CODE |
| LOW | smoke/prereq/test_provider_prereq_live.py | 84 | def test_client_disconnect_mid_stream_does_not_crash_server( | CODE |
| LOW | smoke/prereq/test_auth_prereq_live.py | 12 | def test_bearer_auth_is_the_only_supported_header_shape( | CODE |
| LOW | smoke/prereq/test_api_prereq_live.py | 13 | def test_probe_and_models_routes( | CODE |
| LOW | smoke/prereq/test_api_prereq_live.py | 40 | def test_count_tokens_accepts_thinking_tools_and_results( | CODE |
| LOW | smoke/prereq/test_api_prereq_live.py | 95 | def test_optimization_fast_paths_do_not_need_provider( | CODE |
| LOW | smoke/prereq/test_api_prereq_live.py | 167 | def test_invalid_messages_returns_anthropic_error( | CODE |
| LOW | smoke/prereq/test_api_prereq_live.py | 185 | def test_stop_endpoint_reports_no_messaging( | CODE |
| LOW | smoke/product/test_provider_product_live.py | 256 | def _assert_provider_product_stream(events: list[SSEEvent]) -> None: | CODE |
| LOW | smoke/product/test_provider_product_live.py | 270 | def _provider_smoke_thinking_enabled(smoke_config: SmokeConfig) -> bool: | CODE |
| LOW | smoke/product/test_provider_product_live.py | 289 | def _scenario_adaptive_thinking_history( | CODE |
| LOW | smoke/product/test_provider_product_live.py | 314 | def _scenario_interleaved_history( | CODE |
| LOW | smoke/product/test_provider_product_live.py | 354 | def _scenario_tool_use_then_text_in_history( | CODE |
| LOW | smoke/product/test_provider_product_live.py | 400 | def _scenario_tool_result_continuation( | CODE |
| LOW | smoke/product/test_provider_product_live.py | 444 | def _scenario_gemini_thought_signature_tool_continuation( | CODE |
| LOW | smoke/product/test_provider_product_live.py | 495 | def _gemini_tool_thought_signature(tool_use: dict[str, Any]) -> str | None: | CODE |
| LOW | smoke/product/test_provider_product_live.py | 506 | def _scenario_reasoning_tool_continuation( | CODE |
| LOW | smoke/product/test_runtime_ownership_product_live.py | 173 | def _write_initial_managed_config(home: Path, upstream: FakeOpenAIUpstream) -> None: | CODE |
| LOW | smoke/product/test_runtime_ownership_product_live.py | 197 | def _wait_for_generation_close(server: RunningServer, generation_id: int) -> None: | CODE |
| LOW | smoke/product/test_client_product_live.py | 210 | def _deliberately_failing_openai_provider() -> Iterator[tuple[str, list[str]]]: | CODE |
| LOW⚡ | smoke/lib/skips.py | 21 | def is_upstream_unavailable_text(text: str) -> bool: | CODE |
| LOW⚡ | smoke/lib/skips.py | 26 | def skip_upstream_unavailable(reason: str) -> None: | CODE |
| LOW⚡ | smoke/lib/skips.py | 34 | def skip_if_upstream_unavailable_exception(exc: Exception) -> None: | CODE |
| LOW | smoke/lib/skips.py | 50 | def skip_if_upstream_unavailable_events(events: list[SSEEvent]) -> None: | CODE |
| LOW | smoke/lib/config.py | 217 | def openrouter_free_cli_models(self) -> list[ProviderModel]: | CODE |
| LOW | smoke/lib/config.py | 224 | def mistral_reasoning_smoke_model(self) -> ProviderModel | None: | CODE |
| LOW | smoke/lib/config.py | 239 | def _include_provider_in_smoke( | CODE |
| LOW | smoke/lib/config.py | 251 | def has_provider_configuration(self, provider: str) -> bool: | CODE |
| LOW | smoke/lib/config.py | 339 | def _normalize_provider_model(provider: str, raw_model: str) -> str: | CODE |
| LOW | smoke/lib/config.py | 358 | def nvidia_nim_cli_model_refs( | CODE |
| LOW | smoke/lib/config.py | 388 | def openrouter_free_cli_model_refs( | CODE |
| LOW | smoke/lib/local_providers.py | 14 | def first_local_provider_model_id( | CODE |
| LOW | smoke/lib/local_providers.py | 35 | def _first_openai_compatible_model_id( | CODE |
| LOW | smoke/lib/local_providers.py | 54 | def _get_local_provider_response( | CODE |
| LOW | smoke/lib/claude_cli_matrix.py | 158 | def _build_claude_cli_command( | CODE |
| LOW | smoke/lib/claude_cli_matrix.py | 489 | def _interleaved_thinking_tool( | CODE |
| LOW | smoke/lib/claude_cli_matrix.py | 751 | def _has_upstream_unavailable_text(text: str) -> bool: | CODE |
| LOW | smoke/lib/child_process.py | 43 | def cmd_free_claude_code_serve() -> list[str]: | CODE |
| LOW | smoke/lib/e2e.py | 216 | def adaptive_thinking_payload() -> dict[str, Any]: | CODE |
| LOW | smoke/lib/e2e.py | 339 | def continue_message_sequence_after(self, previous: FakePlatform) -> None: | CODE |
| LOW | smoke/lib/e2e.py | 464 | async def cancel_all_pending_voices( | CODE |
| LOW | smoke/lib/e2e.py | 476 | async def cancel_pending_voices_in_scope( | CODE |
| LOW | smoke/lib/e2e.py | 670 | def assistant_content_from_events(events: list[SSEEvent]) -> list[dict[str, Any]]: | CODE |
| LOW | tests/conftest.py | 202 | def _propagate_loguru_to_caplog(): | CODE |
| LOW | tests/provider_request_mocks.py | 6 | def make_openai_compat_stream_request( | CODE |
| 2047 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/free_claude_code/core/anthropic/__init__.py | 3 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 3 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 3 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 4 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 4 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 4 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 4 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 10 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 10 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 10 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 10 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 16 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 38 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 38 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 39 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 40 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 41 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 41 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 41 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 41 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 41 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 48 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 48 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 48 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 49 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 50 | CODE | |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 51 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 3 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 3 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 3 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 3 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 3 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 3 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 11 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 11 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 11 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 12 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 12 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 12 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 12 | CODE | |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 12 | CODE | |
| 75 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/providers/test_streaming_errors.py | 380 | """NIM/GLM may send usage.completion_tokens=null; final SSE must not use JSON null.""" | STRING |
| HIGH⚡ | tests/providers/test_stream_recovery.py | 229 | assert holdback.push("event: content_block_start\n\n") == [] | CODE |
| HIGH⚡ | tests/providers/test_stream_recovery.py | 231 | assert holdback.push("event: content_block_delta\n\n") == [] | CODE |
| HIGH⚡ | tests/providers/test_stream_recovery.py | 235 | flushed = holdback.push("event: content_block_stop\n\n") | CODE |
| HIGH⚡ | tests/providers/test_stream_recovery.py | 242 | assert holdback.push("event: message_stop\n\n") == ["event: message_stop\n\n"] | CODE |
| HIGH⚡ | tests/providers/test_stream_recovery.py | 248 | assert holdback.push("ab") == [] | CODE |
| HIGH⚡ | tests/providers/test_stream_recovery.py | 249 | assert holdback.push("cde") == ["ab", "cde"] | CODE |
| HIGH⚡ | tests/providers/test_stream_recovery.py | 256 | assert holdback.push("hidden") == [] | CODE |
| HIGH | tests/providers/test_stream_recovery.py | 104 | assert controller.push("hidden") == [] | CODE |
| HIGH | tests/providers/test_stream_recovery.py | 165 | assert controller.push("event: content_block_delta\n\n") == [] | CODE |
| HIGH | tests/providers/test_stream_recovery.py | 183 | assert controller.push("event: content_block_delta\n\n") == [] | CODE |
| HIGH⚡ | tests/api/test_admin.py | 101 | assert 'parts.push("locked")' in script | CODE |
| HIGH⚡ | tests/messaging/test_transcript.py | 149 | state.push("task_1", SubagentSegment("Outer")) | CODE |
| HIGH | src/free_claude_code/providers/stream_recovery.py | 126 | return self._holdback.push(event) | CODE |
| HIGH | src/free_claude_code/providers/openai_chat/provider.py | 303 | yield from recovery.push(event) | CODE |
| HIGH⚡ | src/free_claude_code/messaging/transcript/buffer.py | 151 | self._subagents.push(tool_id, segment) | CODE |
| HIGH⚡ | src/free_claude_code/messaging/transcript/buffer.py | 167 | self._subagents.push(tool_id, segment) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | smoke/prereq/test_tools_prereq_live.py | 56 | except Exception as exc: | CODE |
| LOW | smoke/prereq/test_provider_prereq_live.py | 75 | except Exception as exc: | CODE |
| LOW | smoke/product/test_provider_product_live.py | 196 | except Exception as exc: | CODE |
| LOW | smoke/product/test_provider_product_live.py | 248 | except Exception as exc: | CODE |
| LOW | smoke/lib/server.py | 95 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/core/trace.py | 159 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/core/diagnostics.py | 200 | except Exception: | CODE |
| LOW | src/free_claude_code/core/diagnostics.py | 204 | except Exception: | CODE |
| LOW | src/free_claude_code/core/async_iterators.py | 24 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/core/anthropic/streaming/ledger.py | 23 | except Exception: | CODE |
| LOW | src/free_claude_code/core/anthropic/streaming/ledger.py | 120 | except Exception: | CODE |
| LOW | src/free_claude_code/core/openai_responses/stream.py | 63 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/providers/http.py | 31 | except Exception as close_error: | CODE |
| LOW | src/free_claude_code/providers/rate_limit.py | 175 | except Exception as e: | CODE |
| LOW | src/free_claude_code/providers/lmstudio/client.py | 121 | except Exception as error: # backstop only — never block the request | CODE |
| LOW | src/free_claude_code/providers/runtime/discovery.py | 72 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/providers/runtime/runtime.py | 41 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/providers/runtime/validation.py | 64 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/providers/openai_chat/provider.py | 185 | except Exception as error: | CODE |
| LOW | src/free_claude_code/providers/openai_chat/provider.py | 450 | except Exception as error: | CODE |
| LOW | src/free_claude_code/providers/openai_chat/provider.py | 481 | except Exception as recovery_error: | CODE |
| LOW | src/free_claude_code/providers/openai_chat/provider.py | 672 | except Exception as error: | CODE |
| LOW | src/free_claude_code/providers/mistral/reasoning.py | 90 | except Exception: | CODE |
| LOW | src/free_claude_code/runtime/provider_manager.py | 185 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/provider_manager.py | 279 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/provider_manager.py | 301 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/provider_manager.py | 348 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/asgi.py | 34 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/asgi.py | 53 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/application.py | 61 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/application.py | 151 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/application.py | 232 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/runtime/application.py | 324 | except Exception as exc: | CODE |
| MEDIUM | src/free_claude_code/runtime/application.py | 294 | def _validate_configured_models_best_effort(self) -> None: | CODE |
| LOW | src/free_claude_code/cli/process_registry.py | 58 | except Exception as e: | CODE |
| LOW | src/free_claude_code/cli/process_registry.py | 65 | except Exception as e: | CODE |
| LOW | src/free_claude_code/cli/managed/session.py | 281 | except Exception as e: | CODE |
| LOW | src/free_claude_code/cli/managed/manager.py | 177 | except Exception as e: | CODE |
| LOW | src/free_claude_code/cli/launchers/codex.py | 146 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/response_streams.py | 107 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/response_streams.py | 115 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/response_streams.py | 135 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/response_streams.py | 238 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/response_streams.py | 306 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/admin_routes.py | 193 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/app.py | 51 | except Exception as error: | CODE |
| LOW | src/free_claude_code/api/web_tools/streaming.py | 142 | except Exception as error: | CODE |
| LOW | src/free_claude_code/api/handlers/responses.py | 102 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/handlers/messages.py | 126 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/handlers/messages.py | 166 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/api/handlers/token_count.py | 75 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/messaging/node_runner.py | 361 | except Exception as e: | CODE |
| LOW | src/free_claude_code/messaging/node_runner.py | 398 | except Exception as e: | CODE |
| LOW | src/free_claude_code/messaging/ui_updates.py | 63 | except Exception as e: | CODE |
| LOW | src/free_claude_code/messaging/ui_updates.py | 92 | except Exception as e: | CODE |
| LOW | src/free_claude_code/messaging/workflow.py | 55 | except Exception: | CODE |
| LOW | src/free_claude_code/messaging/workflow.py | 211 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/messaging/workflow.py | 235 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/messaging/workflow.py | 296 | except Exception as exc: | CODE |
| LOW | src/free_claude_code/messaging/workflow.py | 550 | except Exception as exc: | CODE |
| 31 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/providers/test_mistral.py | 0 | reasoning_content deltas are emitted as thinking blocks. | STRING |
| HIGH | tests/providers/test_cerebras.py | 0 | reasoning_content deltas are emitted as thinking blocks. | STRING |
| HIGH | tests/providers/test_groq.py | 0 | reasoning_content deltas are emitted as thinking blocks. | STRING |
| HIGH | tests/providers/test_codestral.py | 0 | reasoning_content deltas are emitted as thinking blocks. | STRING |
| HIGH | tests/providers/test_sambanova.py | 0 | reasoning_content deltas are emitted as thinking blocks. | STRING |
| HIGH | src/free_claude_code/messaging/platforms/telegram.py | 0 | cancel every pending voice transcription and published handoff. | STRING |
| HIGH | src/free_claude_code/messaging/platforms/discord.py | 0 | cancel every pending voice transcription and published handoff. | STRING |
| HIGH | src/free_claude_code/messaging/platforms/voice_flow.py | 0 | cancel every pending voice transcription and published handoff. | STRING |
| HIGH | src/free_claude_code/messaging/platforms/telegram.py | 0 | cancel pending voice transcriptions belonging to one chat. | STRING |
| HIGH | src/free_claude_code/messaging/platforms/discord.py | 0 | cancel pending voice transcriptions belonging to one chat. | STRING |
| HIGH | src/free_claude_code/messaging/platforms/voice_flow.py | 0 | cancel pending voice transcriptions belonging to one chat. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | smoke/lib/e2e.py | 670 | CODE | |
| LOW | tests/contracts/test_import_boundaries.py | 362 | CODE | |
| LOW | tests/providers/test_nvidia_nim.py | 240 | CODE | |
| LOW | tests/scripts/test_installers.py | 20 | CODE | |
| LOW | tests/scripts/test_ci_scripts.py | 17 | CODE | |
| LOW | src/free_claude_code/core/diagnostics.py | 270 | CODE | |
| LOW | src/free_claude_code/core/anthropic/sse_aggregation.py | 20 | CODE | |
| LOW | src/free_claude_code/core/anthropic/sse_aggregation.py | 34 | CODE | |
| LOW | …ee_claude_code/core/anthropic/request_serialization.py | 39 | CODE | |
| LOW | src/free_claude_code/core/anthropic/tools.py | 96 | CODE | |
| LOW | src/free_claude_code/core/anthropic/conversion.py | 342 | CODE | |
| LOW | src/free_claude_code/core/anthropic/conversion.py | 447 | CODE | |
| LOW | src/free_claude_code/core/anthropic/conversion.py | 510 | CODE | |
| LOW | src/free_claude_code/core/anthropic/thinking.py | 58 | CODE | |
| LOW | src/free_claude_code/core/anthropic/thinking.py | 101 | CODE | |
| LOW | src/free_claude_code/core/anthropic/stream_contracts.py | 170 | CODE | |
| LOW | src/free_claude_code/core/anthropic/streaming/ledger.py | 239 | CODE | |
| LOW | src/free_claude_code/core/anthropic/streaming/ledger.py | 267 | CODE | |
| LOW | src/free_claude_code/core/anthropic/streaming/ledger.py | 476 | CODE | |
| LOW | src/free_claude_code/core/anthropic/streaming/ledger.py | 506 | CODE | |
| LOW | src/free_claude_code/core/openai_responses/tools.py | 124 | CODE | |
| LOW | src/free_claude_code/core/openai_responses/tools.py | 342 | CODE | |
| LOW | …aude_code/core/openai_responses/streaming/assembler.py | 49 | CODE | |
| LOW | src/free_claude_code/providers/runtime/validation.py | 52 | CODE | |
| LOW | src/free_claude_code/providers/deepseek/compat.py | 41 | CODE | |
| LOW | src/free_claude_code/providers/deepseek/compat.py | 158 | CODE | |
| LOW | …c/free_claude_code/providers/nvidia_nim/tool_schema.py | 29 | CODE | |
| LOW | …c/free_claude_code/providers/nvidia_nim/tool_schema.py | 96 | CODE | |
| LOW | …c/free_claude_code/providers/nvidia_nim/tool_schema.py | 156 | CODE | |
| LOW | …c/free_claude_code/providers/nvidia_nim/tool_schema.py | 174 | CODE | |
| LOW | …ee_claude_code/providers/openai_chat/request_policy.py | 36 | CODE | |
| LOW | src/free_claude_code/runtime/asgi.py | 27 | CODE | |
| LOW | src/free_claude_code/cli/entrypoints.py | 36 | CODE | |
| LOW | src/free_claude_code/cli/managed/session.py | 95 | CODE | |
| LOW | src/free_claude_code/api/command_utils.py | 87 | CODE | |
| LOW | src/free_claude_code/api/validation_log.py | 6 | CODE | |
| LOW | src/free_claude_code/api/web_tools/outbound.py | 208 | CODE | |
| LOW | src/free_claude_code/messaging/node_runner.py | 125 | CODE | |
| LOW | src/free_claude_code/messaging/event_parser.py | 12 | CODE | |
| LOW | src/free_claude_code/messaging/node_event_pipeline.py | 58 | CODE | |
| LOW | src/free_claude_code/messaging/limiter.py | 61 | CODE | |
| LOW | src/free_claude_code/messaging/limiter.py | 285 | CODE | |
| LOW | src/free_claude_code/messaging/limiter.py | 293 | CODE | |
| LOW | src/free_claude_code/messaging/platforms/telegram.py | 217 | CODE | |
| LOW | src/free_claude_code/messaging/platforms/telegram_io.py | 57 | CODE | |
| LOW | src/free_claude_code/messaging/platforms/telegram_io.py | 188 | CODE | |
| LOW | src/free_claude_code/messaging/trees/processor.py | 190 | CODE | |
| LOW | src/free_claude_code/messaging/trees/runtime.py | 224 | CODE | |
| LOW | src/free_claude_code/messaging/trees/runtime.py | 386 | CODE | |
| LOW | src/free_claude_code/messaging/trees/manager.py | 41 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/api/test_admin.py | 18 | def _set_home(monkeypatch, tmp_path: Path) -> None: | CODE |
| LOW | src/free_claude_code/core/anthropic/sse_aggregation.py | 17 | __all__ = ["aggregate_anthropic_sse_to_message"] | CODE |
| LOW | src/free_claude_code/core/anthropic/__init__.py | 53 | __all__ = [ | CODE |
| LOW | src/free_claude_code/core/anthropic/utils.py | 6 | def set_if_not_none(body: dict[str, Any], key: str, value: Any) -> None: | CODE |
| LOW | src/free_claude_code/core/anthropic/streaming/ledger.py | 88 | def set_stream_tool_id(self, index: int, tool_id: str | None) -> None: | CODE |
| LOW | …/free_claude_code/core/anthropic/streaming/__init__.py | 22 | __all__ = [ | CODE |
| LOW | src/free_claude_code/core/openai_responses/__init__.py | 11 | __all__ = [ | CODE |
| LOW | …_claude_code/core/openai_responses/streaming/ledger.py | 24 | def set_active_block(self, state: BlockState) -> None: | CODE |
| LOW | …laude_code/core/openai_responses/streaming/__init__.py | 5 | __all__ = ["ResponsesStreamAssembler"] | CODE |
| LOW | src/free_claude_code/config/__init__.py | 5 | __all__ = ["Settings", "get_settings"] | CODE |
| LOW | src/free_claude_code/providers/__init__.py | 9 | __all__ = [ | CODE |
| LOW | src/free_claude_code/providers/lmstudio/__init__.py | 5 | __all__ = ["LMStudioProvider"] | CODE |
| LOW | src/free_claude_code/providers/open_router/__init__.py | 5 | __all__ = ["OpenRouterProvider"] | CODE |
| LOW⚡ | src/free_claude_code/providers/gemini/quirks.py | 74 | def _set_tool_call_thought_signature(tool_call: dict[str, Any], signature: str) -> None: | CODE |
| LOW | src/free_claude_code/providers/gemini/__init__.py | 5 | __all__ = ["GeminiProvider"] | CODE |
| LOW | src/free_claude_code/providers/runtime/__init__.py | 7 | __all__ = [ | CODE |
| LOW | src/free_claude_code/providers/deepseek/__init__.py | 5 | __all__ = ["DeepSeekProvider"] | CODE |
| LOW | …c/free_claude_code/providers/github_models/__init__.py | 5 | __all__ = ["GitHubModelsProvider"] | CODE |
| LOW | src/free_claude_code/providers/nvidia_nim/__init__.py | 5 | __all__ = ["NvidiaNimProvider"] | CODE |
| LOW | src/free_claude_code/providers/openai_chat/__init__.py | 30 | __all__ = [ | CODE |
| LOW | src/free_claude_code/providers/mistral/__init__.py | 5 | __all__ = ["MistralProvider"] | CODE |
| LOW | src/free_claude_code/cli/__init__.py | 5 | __all__ = ["ManagedClaudeSession", "ManagedClaudeSessionManager"] | CODE |
| LOW | src/free_claude_code/cli/managed/__init__.py | 6 | __all__ = ["ManagedClaudeSession", "ManagedClaudeSessionManager"] | CODE |
| LOW | src/free_claude_code/api/request_ids.py | 68 | def set_request_id(request: Request, request_id: str) -> None: | CODE |
| LOW | src/free_claude_code/api/web_tools/__init__.py | 11 | __all__ = [ | CODE |
| LOW | src/free_claude_code/api/handlers/__init__.py | 7 | __all__ = ["MessagesHandler", "ResponsesHandler", "TokenCountHandler"] | CODE |
| LOW | src/free_claude_code/messaging/node_runner.py | 168 | async def update_ui(status: str | None = None, force: bool = False) -> None: | CODE |
| LOW | src/free_claude_code/messaging/node_runner.py | 408 | __all__ = ["MessagingNodeRunner"] | CODE |
| LOW | src/free_claude_code/messaging/__init__.py | 10 | __all__ = [ | CODE |
| LOW | src/free_claude_code/messaging/command_context.py | 99 | __all__ = ["MessagingCommandContext", "ReplyClearResult", "StopOutcome"] | CODE |
| LOW | src/free_claude_code/messaging/workflow.py | 714 | __all__ = ["MessagingWorkflow"] | CODE |
| LOW | src/free_claude_code/messaging/turn_intake.py | 197 | async def update_queue_positions(self, queue: tuple[QueueEntry, ...]) -> None: | CODE |
| LOW | src/free_claude_code/messaging/turn_intake.py | 241 | __all__ = ["MessagingTurnIntake"] | CODE |
| LOW | src/free_claude_code/messaging/platforms/__init__.py | 12 | __all__ = [ | CODE |
| LOW | src/free_claude_code/messaging/trees/__init__.py | 22 | __all__ = [ | CODE |
| LOW | src/free_claude_code/messaging/trees/processor.py | 268 | __all__ = ["CancelledTask", "TreeQueueProcessor"] | CODE |
| LOW | src/free_claude_code/messaging/trees/runtime.py | 487 | __all__ = ["MessageTree"] | CODE |
| LOW | src/free_claude_code/messaging/trees/transitions.py | 157 | __all__ = [ | CODE |
| LOW | src/free_claude_code/messaging/trees/repository.py | 135 | __all__ = ["TreeRepository"] | CODE |
| LOW | src/free_claude_code/messaging/trees/identity.py | 16 | __all__ = ["TreeIdentity"] | CODE |
| LOW | src/free_claude_code/messaging/trees/manager.py | 587 | __all__ = ["TreeQueueManager"] | CODE |
| LOW | src/free_claude_code/messaging/transcript/__init__.py | 6 | __all__ = ["RenderCtx", "TranscriptBuffer"] | CODE |
| LOW | …e_claude_code/messaging/rendering/telegram_markdown.py | 319 | __all__ = [ | CODE |
| LOW | …ee_claude_code/messaging/rendering/discord_markdown.py | 310 | __all__ = [ | CODE |
| LOW | src/free_claude_code/messaging/session/store.py | 50 | def _set_dirty(self, dirty: bool) -> None: | CODE |
| LOW | src/free_claude_code/messaging/session/__init__.py | 5 | __all__ = ["SessionStore"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/api/test_api_handlers.py | 347 | CODE | |
| MEDIUM | tests/api/test_api.py | 35 | CODE | |
| MEDIUM | tests/api/test_response_streams.py | 35 | CODE | |
| MEDIUM | tests/api/test_openai_responses.py | 41 | CODE | |
| MEDIUM | tests/messaging/test_handler.py | 1263 | CODE | |
| MEDIUM | …ts/messaging/test_handler_markdown_and_status_edges.py | 234 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/free_claude_code/providers/rate_limit.py | 144 | Execute an async callable with rate limiting and retry on transient limits. Waits for the proactive limiter bef | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/conftest.py | 139 | # Create a task to avoid "coroutine was never awaited" warning | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/providers/test_converter.py | 484 | # comprehensive flow | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/providers/test_parsers.py | 265 | # Check if "text1" and "text2" are preserved in filtered output | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | smoke/lib/http.py | 45 | CODE | |
| LOW | tests/providers/test_model_validation.py | 31 | CODE |