AI Agent Assistant & development framework that integrates lots of IM platforms, LLMs, plugins and AI feature, and can be your openclaw alternative. ✨
This report summarizes scanner evidence for AstrBotDevs/AstrBot, a Python project with 41,682 GitHub stars. SynthScan examined 426,612 lines of code across 1703 source files, recording 6126 pattern matches distributed across 23 syntactic categories. The legacy adjusted pattern signal is 17.6 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 4131 finding(s).
Are imports declared and package/API names verified? 600 finding(s).
Are wrappers, guards, and repeated structures necessary? 4986 finding(s).
Which changes need focused human review? 6126 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 6126 distinct pattern matches across 23 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime_bootstrap.py | 12 | def _try_patch_aiohttp_ssl_context( | CODE |
| LOW⚡ | runtime_bootstrap.py | 36 | def configure_runtime_ca_bundle(log_obj: Any | None = None) -> bool: | CODE |
| LOW⚡ | runtime_bootstrap.py | 47 | def initialize_runtime_bootstrap(log_obj: Any | None = None) -> bool: | CODE |
| LOW | astrbot/core/log.py | 258 | def _ensure_logger_enricher_filter(cls, logger: logging.Logger) -> None: | CODE |
| LOW | astrbot/core/log.py | 269 | def _ensure_logger_intercept_handler(cls, logger: logging.Logger) -> None: | CODE |
| LOW | astrbot/core/log.py | 296 | def _load_plugin_level_overrides(cls) -> dict[str, str]: | CODE |
| LOW | astrbot/core/log.py | 375 | def _effective_plugin_log_level(cls, plugin_name: str) -> int: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 400 | async def _get_workspace_path_for_umo(umo: str, plugin_context: Context) -> Path: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 422 | async def _apply_workspace_extra_prompt( | CODE |
| LOW | astrbot/core/astr_main_agent.py | 508 | def _filter_skills_for_current_config( | CODE |
| LOW | astrbot/core/astr_main_agent.py | 540 | async def _ensure_persona_and_skills( | CODE |
| LOW | astrbot/core/astr_main_agent.py | 810 | def _append_quoted_audio_attachment(req: ProviderRequest, audio_path: str) -> None: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 856 | def _get_quoted_message_parser_settings( | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1242 | def _proactive_cron_job_tools(req: ProviderRequest, plugin_context: Context) -> None: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1285 | def _apply_web_search_citation_prompt( | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1338 | def _get_fallback_chat_providers( | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1372 | def _provider_supports_modality(provider: Provider, modality: str) -> bool: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1379 | def _select_image_chat_provider( | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1406 | def _matches_provider_wake_prefix( | CODE |
| LOW | astrbot/core/desktop_runtime.py | 14 | def is_desktop_managed_backend() -> bool: | CODE |
| LOW | astrbot/core/desktop_runtime.py | 18 | def get_desktop_session_secret() -> str | None: | CODE |
| LOW | astrbot/core/desktop_runtime.py | 29 | def is_desktop_session_auth_enabled() -> bool: | CODE |
| LOW | astrbot/core/desktop_runtime.py | 48 | def verify_desktop_session_secret( | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 63 | def _collect_image_urls_from_args(cls, image_urls_raw: T.Any) -> list[str]: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 82 | async def _collect_image_urls_from_message( | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 107 | async def _collect_handoff_image_urls( | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 209 | def _get_runtime_computer_tools( | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 405 | async def _execute_handoff_background( | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 424 | async def _run_handoff_in_background() -> None: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 539 | async def _wake_main_agent_for_background_result( | CODE |
| LOW | astrbot/core/zip_updater.py | 267 | def _resolve_archive_root_dir(entries: list[str]) -> str: | CODE |
| LOW | astrbot/core/zip_updater.py | 296 | def _finalize_extracted_archive( | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 61 | def _build_tool_call_status_message(tool_info: dict | None) -> str: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 67 | def _build_tool_result_status_message( | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 90 | def _should_buffer_llm_result( | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 102 | def _merge_buffered_llm_chains( | CODE |
| LOW | astrbot/core/conversation_mgr.py | 30 | def register_on_session_deleted( | CODE |
| LOW | astrbot/core/conversation_mgr.py | 160 | async def delete_conversations_by_user_id(self, unified_msg_origin: str) -> None: | CODE |
| LOW | astrbot/core/conversation_mgr.py | 240 | async def get_filtered_conversations( | CODE |
| LOW | astrbot/core/conversation_mgr.py | 310 | async def update_conversation_title( | CODE |
| LOW | astrbot/core/conversation_mgr.py | 335 | async def update_conversation_persona_id( | CODE |
| LOW | astrbot/core/conversation_mgr.py | 392 | async def get_human_readable_context( | CODE |
| LOW | astrbot/core/process_restart.py | 19 | def _terminate_child_processes() -> None: | CODE |
| LOW | astrbot/core/process_restart.py | 66 | def _build_frozen_restart_args() -> list[str]: | CODE |
| LOW | astrbot/core/process_restart.py | 78 | def _reset_pyinstaller_environment() -> None: | CODE |
| LOW | astrbot/core/workspace.py | 22 | def normalize_umo_for_workspace(umo: str) -> str: | CODE |
| LOW | astrbot/core/workspace.py | 35 | def normalize_project_workspace_type(value: Any) -> str: | CODE |
| LOW | astrbot/core/workspace.py | 121 | def resolve_project_workspace_root(project: Any, *, fallback_umo: str) -> Path: | CODE |
| LOW | astrbot/core/workspace.py | 191 | async def resolve_workspace_root_for_umo( | CODE |
| LOW⚡ | astrbot/core/persona_error_reply.py | 9 | def normalize_persona_custom_error_message(value: object) -> str | None: | CODE |
| LOW⚡ | astrbot/core/persona_error_reply.py | 17 | def extract_persona_custom_error_message_from_persona( | CODE |
| LOW⚡ | astrbot/core/persona_error_reply.py | 26 | def extract_persona_custom_error_message_from_event(event: Any) -> str | None: | CODE |
| LOW⚡ | astrbot/core/persona_error_reply.py | 37 | def set_persona_custom_error_message_on_event( | CODE |
| LOW⚡ | astrbot/core/persona_error_reply.py | 50 | async def resolve_persona_custom_error_message( | CODE |
| LOW | astrbot/core/persona_error_reply.py | 72 | async def resolve_event_conversation_persona_id( | CODE |
| LOW | astrbot/core/core_lifecycle.py | 99 | async def _init_or_reload_subagent_orchestrator(self) -> None: | CODE |
| LOW | astrbot/core/core_lifecycle.py | 117 | def _warn_about_unset_default_chat_provider(self) -> None: | CODE |
| LOW | astrbot/core/core_lifecycle.py | 472 | async def reload_pipeline_scheduler(self, conf_id: str) -> None: | CODE |
| LOW | astrbot/core/pipeline/bootstrap.py | 34 | def ensure_builtin_stages_registered() -> None: | CODE |
| LOW | astrbot/core/pipeline/rate_limit_check/stage.py | 94 | def _remove_expired_timestamps( | CODE |
| 3496 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | main.py | 114 | except Exception as e: | STRING |
| LOW⚡ | runtime_bootstrap.py | 42 | except Exception as exc: | CODE |
| LOW | astrbot/core/persona_mgr.py | 493 | except Exception as e: | CODE |
| LOW | astrbot/core/initial_loader.py | 31 | except Exception as e: | CODE |
| LOW | astrbot/core/log.py | 362 | except Exception: | CODE |
| LOW | astrbot/core/log.py | 501 | except Exception: | CODE |
| LOW | astrbot/core/log.py | 523 | except Exception: | CODE |
| LOW | astrbot/core/log.py | 564 | except Exception as e: | CODE |
| LOW | astrbot/core/astrbot_config_mgr.py | 118 | except Exception: | CODE |
| LOW | astrbot/core/astrbot_config_mgr.py | 252 | except Exception as e: | CODE |
| LOW | astrbot/core/file_token_service.py | 64 | except Exception: | CODE |
| LOW | astrbot/core/dashboard_assets.py | 333 | except Exception as exc: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 329 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_main_agent.py | 418 | except Exception: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 436 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_main_agent.py | 704 | except Exception: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 796 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_main_agent.py | 824 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_main_agent.py | 954 | except Exception as exc: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 991 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1113 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1503 | except Exception as exc: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1532 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1569 | except Exception as exc: | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1599 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1662 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_main_agent.py | 1789 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | astrbot/core/updater.py | 183 | except Exception: | CODE |
| LOW | astrbot/core/updater.py | 355 | except Exception as exc: | CODE |
| LOW | astrbot/core/updater.py | 368 | except Exception: | CODE |
| LOW | astrbot/core/updater.py | 469 | except Exception as exc: | CODE |
| MEDIUM | astrbot/core/astr_agent_tool_exec.py | 177 | def _run_in_background() -> None: | CODE |
| MEDIUM | astrbot/core/astr_agent_tool_exec.py | 424 | def _run_handoff_in_background() -> None: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 97 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 185 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 376 | except Exception: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 432 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 477 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 518 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 768 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 847 | except Exception: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 853 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_tool_exec.py | 879 | except Exception as e: | CODE |
| LOW | astrbot/core/zip_updater.py | 183 | except Exception as e: | CODE |
| LOW | astrbot/core/zip_updater.py | 316 | except Exception: | CODE |
| LOW | astrbot/core/zip_updater.py | 341 | except Exception: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 320 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 349 | except Exception: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 478 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 512 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 572 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 587 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 619 | except Exception as e: | CODE |
| LOW | astrbot/core/astr_agent_run_util.py | 625 | except Exception as e: | CODE |
| LOW | astrbot/core/conversation_mgr.py | 55 | except Exception as e: | CODE |
| LOW | astrbot/core/process_restart.py | 145 | except Exception as exc: | CODE |
| LOW | astrbot/core/workspace.py | 179 | except Exception: | CODE |
| LOW⚡ | astrbot/core/persona_error_reply.py | 33 | except Exception: | CODE |
| LOW⚡ | astrbot/core/persona_error_reply.py | 45 | except Exception: | CODE |
| LOW | astrbot/core/core_lifecycle.py | 114 | except Exception as e: | CODE |
| 951 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | AGENTS.md | 84 | Brief description of the function. Args: user_id: Description of the ID. force_refresh: Description | STRING |
| HIGH | astrbot/core/astrbot_config_mgr.py | 220 | Delete a configuration profile. Args: conf_id: Configuration profile ID. Returns: | STRING |
| HIGH | astrbot/core/file_token_service.py | 44 | Register a file for token-authorized access. Args: file_path: The local file path or file URI. | STRING |
| HIGH | astrbot/core/file_token_service.py | 84 | Resolve a file path, consuming the token only when it is single-use. Args: file_token: The token re | STRING |
| HIGH | astrbot/core/dashboard_assets.py | 47 | Normalize a Dashboard version for comparison. Args: version: Version with an optional ``v`` prefix. Re | STRING |
| HIGH | astrbot/core/astr_main_agent.py | 715 | Describe prepared images, preserving animation semantics. Args: provider_id: Caption provider ID. c | STRING |
| HIGH | astrbot/core/updater.py | 144 | Download, validate, and apply matching Core and Dashboard packages. Args: version: Release tag or c | STRING |
| HIGH | astrbot/core/updater.py | 394 | Download an AstrBot core update package without applying it. Args: latest: Whether to download the | STRING |
| HIGH | astrbot/core/updater.py | 483 | Apply a previously downloaded AstrBot core update package. Args: zip_path: Core update zip archive | STRING |
| HIGH | astrbot/core/workspace.py | 95 | Resolve a custom workspace path. Args: path: Stored workspace path. Relative values are rooted under AstrBo | STRING |
| HIGH | astrbot/core/workspace.py | 122 | Resolve the workspace root from a project record. Args: project: Project-like object with workspace fields. | STRING |
| HIGH | astrbot/core/repository.py | 59 | Parse a public GitHub repository URL. Args: url: HTTP(S) GitHub URL, optionally ending in ``.git`` | STRING |
| HIGH | astrbot/core/repository.py | 144 | Normalize a repository locator without changing its transport. Args: url: GitHub shorthand, HTTP(S), SSH, o | STRING |
| HIGH | astrbot/core/repository.py | 180 | Parse a repository locator without exposing its transfer implementation. Args: url: GitHub shorthand, HTTP( | STRING |
| HIGH | astrbot/core/tools/web_search_tools.py | 80 | Return the current key and advance the round-robin index. Args: provider_settings: Provider setting | STRING |
| HIGH | astrbot/core/tools/web_search_tools.py | 189 | Call the Tavily Search API with API key failover. Args: provider_settings: Provider settings containing Tav | STRING |
| HIGH | astrbot/core/tools/web_search_tools.py | 250 | Call the Tavily Extract API with API key failover. Args: provider_settings: Provider settings containing Ta | STRING |
| HIGH | astrbot/core/tools/web_search_tools.py | 309 | Call the BoCha Search API with API key failover. Args: provider_settings: Provider settings containing BoCh | STRING |
| HIGH | astrbot/core/tools/web_search_tools.py | 375 | Call the Brave Search API with API key failover. Args: provider_settings: Provider settings containing Brav | STRING |
| HIGH | astrbot/core/tools/web_search_tools.py | 436 | Call the Firecrawl Search API with API key failover. Args: provider_settings: Provider settings containing | STRING |
| HIGH | astrbot/core/tools/web_search_tools.py | 502 | Call the Firecrawl Scrape API with API key failover. Args: provider_settings: Provider settings containing | STRING |
| HIGH | astrbot/core/tools/web_search_tools.py | 1255 | Call the AnySearch /v1/search endpoint and return normalized results. AnySearch also serves anonymous traffic with | STRING |
| HIGH | astrbot/core/config/agent_runner.py | 86 | Return an isolated default configuration for an Agent Runner type. Args: runner_type: Short runner type nam | STRING |
| HIGH | astrbot/core/config/agent_runner.py | 173 | Validate and normalize a complete Agent Runner configuration. Args: agent_runner: Untrusted root Agent Runn | STRING |
| HIGH | astrbot/core/platform/platform.py | 171 | 统一 Webhook 回调入口。 支持统一 Webhook 模式的平台需要实现此方法。 当 Dashboard 收到 /api/platform/webhook/{uuid} 请求时,会调用此方法。 | STRING |
| HIGH | astrbot/core/platform/sources/kook/kook_client.py | 78 | Gets and validates an object payload from a KOOK API endpoint. Args: url: Absolute KOOK API endpoin | STRING |
| HIGH | astrbot/core/platform/sources/lark/lark_event.py | 201 | Send one IM message, retrying rejected private sends by chat ID once. Args: lark_client: Lark API c | STRING |
| HIGH | …urces/weixin_official_account/weixin_offacc_adapter.py | 514 | Creates a Weixin Official Account message event. Args: message: AstrBot message object to wrap. | STRING |
| HIGH | astrbot/core/platform/sources/misskey/misskey_api.py | 834 | 通用消息发送函数:统一处理文本+媒体发送 Args: message_type: 消息类型 ('chat', 'room', 'note') target_id: 目标ID | STRING |
| HIGH | astrbot/core/platform/sources/mattermost/client.py | 94 | Gets one page of channel membership records. Args: channel_id: Mattermost channel identifier. | STRING |
| HIGH | astrbot/core/platform/sources/mattermost/client.py | 129 | Gets user profiles in one Mattermost batch request. Args: user_ids: Mattermost user identifiers to | STRING |
| HIGH | …atform/sources/qqofficial/qqofficial_chunked_upload.py | 68 | Compute the hashes required by QQ in one pass over a file. Args: file_path: Local file to hash. Return | STRING |
| HIGH | …atform/sources/qqofficial/qqofficial_chunked_upload.py | 101 | Read exactly one requested file part. Args: file_path: Local file to read. offset: Zero-based byte | STRING |
| HIGH | …atform/sources/qqofficial/qqofficial_chunked_upload.py | 144 | Upload a file for one C2C user. Args: file_path: Local file to upload. file_type: QQ me | STRING |
| HIGH | …atform/sources/qqofficial/qqofficial_chunked_upload.py | 177 | Upload a file for one QQ group. Args: file_path: Local file to upload. file_type: QQ me | STRING |
| HIGH | …atform/sources/qqofficial/qqofficial_chunked_upload.py | 210 | Run the shared QQ chunk transfer flow for one destination path. Args: file_path: Local file to uplo | STRING |
| HIGH | …atform/sources/qqofficial/qqofficial_chunked_upload.py | 546 | Call QQ directly so business error codes remain available. qq-botpy's response handler discards the structured | STRING |
| HIGH | …core/platform/sources/qqofficial/login_registration.py | 104 | Decrypt the AppSecret returned by QQ bot QR binding. Args: encrypted_secret: Base64 payload containing 12-b | STRING |
| HIGH | …core/platform/sources/qqofficial/login_registration.py | 242 | Poll a QQ Official Bot QR binding task once. Args: platform_config: Platform configuration from the dashboa | STRING |
| HIGH | …latform/sources/qqofficial/qqofficial_message_event.py | 751 | Upload media to a QQ group or C2C session. Args: file_source: Local file path or remote URL to uplo | STRING |
| HIGH | astrbot/core/provider/func_tool_manager.py | 1079 | Asynchronously activate a registered function-calling tool. Args: name: Tool name. star | STRING |
| HIGH | astrbot/core/provider/manager.py | 231 | Resolve a provider preference with configuration fallbacks. Args: provider_type: Provider type to r | STRING |
| HIGH | astrbot/core/provider/sources/bailian_rerank_source.py | 143 | 解析API响应结果 Args: data: API响应数据 Returns: 重排序结果列表 Raises: Ba | STRING |
| HIGH | …trbot/core/provider/sources/openai_responses_source.py | 306 | Send a non-streaming Responses API request. Args: payloads: Prepared Responses API payload. | STRING |
| HIGH | …trbot/core/provider/sources/openai_responses_source.py | 377 | Send a streaming Responses API request. Args: payloads: Prepared Responses API payload. | STRING |
| HIGH | …trbot/core/provider/sources/openai_responses_source.py | 496 | Normalize a Responses API response into AstrBot's LLM response. Args: response: SDK Responses API r | STRING |
| HIGH | astrbot/core/utils/upload.py | 33 | Stream an uploaded file to disk in 1 MiB blocks. The payload lands in a uniquely named sibling temp file and is | STRING |
| HIGH | astrbot/core/utils/media_utils.py | 301 | Decode a base64 payload while tolerating omitted padding. Args: payload: Base64 payload without a data URI | STRING |
| HIGH | astrbot/core/utils/media_utils.py | 1080 | Encode an owned frame below the byte limit while preserving transparency. Args: image: Decoded frame owned | STRING |
| HIGH | astrbot/core/utils/media_utils.py | 1271 | Prepare an image, reusing compliant local files without copying them. Args: image_ref: Source reference acc | STRING |
| HIGH | astrbot/core/utils/media_utils.py | 1452 | Convert a video file with ffmpeg. Args: video_path: Source video file path. output_format: Target f | STRING |
| HIGH | astrbot/core/utils/media_utils.py | 1541 | Convert an audio file to the requested format with ffmpeg. Args: audio_path: Source audio file path. | STRING |
| HIGH | astrbot/core/utils/media_utils.py | 1667 | Ensure the audio path points to wav format by extension/guess and convert when needed. If the file appears to alrea | STRING |
| HIGH | astrbot/core/utils/media_utils.py | 1712 | Ensure JPEG-compatible still images point to a JPEG file. Args: image_path: Local image path to inspect and | STRING |
| HIGH | astrbot/core/utils/media_utils.py | 1875 | Extract a JPEG cover frame from a video. Args: video_path: Source video file path. output_path: Opt | STRING |
| HIGH | astrbot/core/utils/async_generator.py | 12 | Advance and close a generator in one task, only when a caller requests it. Args: generator: Generator owned | STRING |
| HIGH | astrbot/core/utils/toml_parser.py | 7 | Read one quoted TOML string value and return its tail. Args: value: Raw value text that starts with a quote | STRING |
| HIGH | astrbot/core/utils/toml_parser.py | 35 | Read a simple inline TOML string array. Args: raw_value: Raw dependency array text, including the surroundi | STRING |
| HIGH | astrbot/core/utils/toml_parser.py | 76 | Read project dependencies from a pyproject.toml file. Args: pyproject_path: Path to the pyproject.toml file | STRING |
| HIGH | astrbot/core/utils/tencent_record_helper.py | 17 | Decode a Tencent Silk file to 24 kHz mono PCM WAV. Args: silk_path: Input Tencent Silk file path. o | STRING |
| 78 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | astrbot/core/log.py | 439 | except ValueError: | CODE |
| HIGH | astrbot/core/log.py | 166 | except asyncio.QueueFull: | CODE |
| HIGH | astrbot/core/log.py | 309 | except (OSError, ValueError): | CODE |
| HIGH | astrbot/core/log.py | 523 | except Exception: | CODE |
| HIGH | astrbot/core/astr_main_agent.py | 704 | except Exception: | CODE |
| HIGH | astrbot/core/astr_main_agent.py | 1333 | except ValueError: | CODE |
| HIGH | astrbot/core/astr_agent_run_util.py | 315 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/astr_agent_run_util.py | 325 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/astr_agent_run_util.py | 179 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/process_restart.py | 38 | except psutil.NoSuchProcess: | CODE |
| HIGH | astrbot/core/persona_error_reply.py | 45 | except Exception: | CODE |
| HIGH | astrbot/core/core_lifecycle.py | 350 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/core_lifecycle.py | 417 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/pipeline/process_stage/follow_up.py | 242 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/tools/message_tools.py | 159 | except Exception: | CODE |
| HIGH | astrbot/core/config/astrbot_config.py | 375 | except FileNotFoundError: | CODE |
| HIGH | astrbot/core/platform/sources/kook/kook_client.py | 263 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/kook/kook_client.py | 567 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/platform/sources/kook/kook_client.py | 295 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/kook/kook_adapter.py | 204 | except asyncio.CancelledError: | CODE |
| HIGH | …t/core/platform/sources/weixin_oc/weixin_oc_adapter.py | 258 | except asyncio.CancelledError: | CODE |
| HIGH | …ore/platform/sources/discord/discord_platform_event.py | 483 | except Exception: | CODE |
| HIGH | …/platform/sources/aiocqhttp/aiocqhttp_message_event.py | 60 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/wecom/wecom_adapter.py | 545 | except Exception as _: | CODE |
| HIGH | …urces/weixin_official_account/weixin_offacc_adapter.py | 554 | except Exception as _: | CODE |
| HIGH | …trbot/core/platform/sources/misskey/misskey_adapter.py | 222 | except Exception: | CODE |
| HIGH | …trbot/core/platform/sources/misskey/misskey_adapter.py | 556 | except Exception: | CODE |
| HIGH | …trbot/core/platform/sources/misskey/misskey_adapter.py | 497 | except Exception: | CODE |
| HIGH | …trbot/core/platform/sources/misskey/misskey_adapter.py | 512 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_api.py | 84 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_api.py | 164 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_api.py | 173 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_api.py | 180 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_api.py | 187 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_api.py | 725 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_api.py | 740 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_utils.py | 518 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/misskey/misskey_utils.py | 501 | except Exception: | CODE |
| HIGH | …atform/sources/wecom_ai_bot/wecomai_long_connection.py | 87 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/platform/sources/line/line_api.py | 344 | except Exception: | CODE |
| HIGH | astrbot/core/platform/sources/satori/satori_adapter.py | 251 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/platform/sources/satori/satori_adapter.py | 195 | except asyncio.CancelledError: | CODE |
| HIGH | …bot/core/platform/sources/webchat/webchat_queue_mgr.py | 66 | except asyncio.QueueFull: | CODE |
| HIGH | …form/sources/qqofficial/qqofficial_platform_adapter.py | 749 | except Exception: | CODE |
| HIGH | astrbot/core/provider/provider.py | 320 | except Exception: | CODE |
| HIGH | astrbot/core/provider/provider.py | 294 | except Exception: | CODE |
| HIGH | astrbot/core/provider/func_tool_manager.py | 686 | except BaseException: | CODE |
| HIGH | astrbot/core/provider/func_tool_manager.py | 693 | except Exception: | CODE |
| HIGH | astrbot/core/provider/manager.py | 981 | except asyncio.CancelledError: | CODE |
| HIGH | astrbot/core/provider/sources/edge_tts_source.py | 122 | except Exception: | CODE |
| HIGH | astrbot/core/provider/sources/edge_tts_source.py | 131 | except Exception: | CODE |
| HIGH | …trbot/core/provider/sources/ollama_embedding_source.py | 60 | except (ValueError, TypeError): | CODE |
| HIGH | astrbot/core/provider/sources/gemini_source.py | 1203 | except Exception: | CODE |
| HIGH | astrbot/core/provider/sources/anthropic_source.py | 148 | except ImportError: | CODE |
| HIGH | astrbot/core/provider/sources/openai_source.py | 353 | except ImportError: | CODE |
| HIGH | astrbot/core/provider/sources/openai_source.py | 850 | except (TypeError, ValueError): | CODE |
| HIGH | astrbot/core/provider/sources/genie_tts.py | 122 | except OSError: | CODE |
| HIGH | astrbot/core/message/components.py | 363 | except OSError: | CODE |
| HIGH | astrbot/core/message/components.py | 188 | except OSError: | CODE |
| HIGH | astrbot/core/message/components.py | 205 | except OSError: | CODE |
| 65 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | astrbot/core/log.py | 32 | CODE | |
| LOW | astrbot/core/subagent_orchestrator.py | 1 | CODE | |
| LOW | astrbot/core/__init__.py | 7 | CODE | |
| LOW | astrbot/core/__init__.py | 13 | CODE | |
| LOW | astrbot/core/__init__.py | 16 | CODE | |
| LOW | astrbot/core/__init__.py | 19 | CODE | |
| LOW | astrbot/core/__init__.py | 25 | CODE | |
| LOW | astrbot/core/astr_main_agent.py | 1 | CODE | |
| LOW | astrbot/core/exceptions.py | 1 | CODE | |
| LOW | astrbot/core/workspace.py | 1 | CODE | |
| LOW | astrbot/core/persona_error_reply.py | 1 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 8 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 13 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 13 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 18 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 21 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 22 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 23 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 24 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 25 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 26 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 27 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 28 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 29 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 72 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 73 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 74 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 75 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 76 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 77 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 78 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 79 | CODE | |
| LOW | astrbot/core/pipeline/__init__.py | 80 | CODE | |
| LOW | astrbot/core/pipeline/context.py | 1 | CODE | |
| LOW | astrbot/core/pipeline/stage.py | 1 | CODE | |
| LOW | astrbot/core/pipeline/process_stage/follow_up.py | 1 | CODE | |
| LOW | …e/process_stage/method/agent_sub_stages/third_party.py | 31 | CODE | |
| LOW | …e/process_stage/method/agent_sub_stages/third_party.py | 32 | CODE | |
| LOW | astrbot/core/pipeline/waking_check/umo_auto_name.py | 1 | CODE | |
| LOW | astrbot/core/tools/registry.py | 1 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 1 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 1 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 1 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 6 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 6 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 6 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 6 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 6 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 6 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 14 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 14 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 15 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 15 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 15 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 16 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 16 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 16 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 16 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 16 | CODE | |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 16 | CODE | |
| 474 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ore/platform/sources/wecom_ai_bot/WXBizJsonMsgCrypt.py | 7 | # ------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | astrbot/core/star/session_llm_manager.py | 10 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | astrbot/core/star/session_llm_manager.py | 12 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | astrbot/core/star/session_llm_manager.py | 81 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | astrbot/core/star/session_llm_manager.py | 83 | # ============================================================================= | COMMENT |
| MEDIUM | astrbot/core/star/session_llm_manager.py | 157 | # ============================================================================= | COMMENT |
| MEDIUM | astrbot/core/star/session_llm_manager.py | 159 | # ============================================================================= | COMMENT |
| MEDIUM | astrbot/core/backup/constants.py | 38 | # ============================================================ | COMMENT |
| MEDIUM | astrbot/core/backup/constants.py | 40 | # ============================================================ | COMMENT |
| MEDIUM | astrbot/core/computer/booters/bay_manager.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | astrbot/core/computer/booters/bay_manager.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | astrbot/core/computer/booters/bay_manager.py | 46 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | astrbot/core/computer/booters/bay_manager.py | 48 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | astrbot/core/computer/booters/bay_manager.py | 233 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | astrbot/core/computer/booters/bay_manager.py | 235 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | tests/conftest.py | 29 | # ============================================================ | COMMENT |
| MEDIUM⚡ | tests/conftest.py | 31 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 102 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 104 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 181 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 183 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 253 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 255 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 288 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 290 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 307 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 309 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 364 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 366 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 383 | # ============================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 385 | # ============================================================ | COMMENT |
| MEDIUM | tests/test_shipyard_neo_booter.py | 11 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_shipyard_neo_booter.py | 13 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_shipyard_neo_booter.py | 137 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_shipyard_neo_booter.py | 139 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_shipyard_neo_booter.py | 224 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_shipyard_neo_booter.py | 226 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_pip_installer.py | 1881 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_pip_installer.py | 1883 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 85 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 129 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 131 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 192 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 194 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 248 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 250 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 265 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 267 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 317 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_dashscope_embedding_source.py | 319 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_dashscope_embedding_source.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_dashscope_embedding_source.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_profile_aware_tools.py | 272 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | tests/test_profile_aware_tools.py | 274 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_profile_aware_tools.py | 10 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_profile_aware_tools.py | 12 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_profile_aware_tools.py | 55 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_profile_aware_tools.py | 57 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/test_profile_aware_tools.py | 159 | # ═══════════════════════════════════════════════════════════════ | COMMENT |
| 46 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | astrbot/core/platform/sources/lark/lark_event.py | 92 | response = await self.bot.im.v1.chat.aget(request) | CODE |
| CRITICAL | astrbot/core/platform/sources/lark/lark_event.py | 144 | members_response = await self.bot.im.v1.chat_members.aget( | CODE |
| CRITICAL | astrbot/core/platform/sources/lark/lark_event.py | 984 | response = await self.bot.im.v1.message_reaction.acreate(request) | CODE |
| CRITICAL | astrbot/core/platform/sources/lark/lark_event.py | 1032 | response = await self.bot.cardkit.v1.card.acreate(request) | CODE |
| CRITICAL | astrbot/core/platform/sources/lark/lark_event.py | 1098 | response = await self.bot.cardkit.v1.card_element.acontent(request) | CODE |
| CRITICAL | astrbot/core/platform/sources/lark/lark_event.py | 1138 | response = await self.bot.cardkit.v1.card.asettings(request) | CODE |
| CRITICAL | astrbot/core/platform/sources/lark/lark_adapter.py | 124 | response = await self.lark_api.im.v1.message_resource.aget(request) | CODE |
| CRITICAL | astrbot/core/platform/sources/lark/lark_adapter.py | 393 | response = await self.lark_api.im.v1.message.aget(request) | CODE |
| CRITICAL | astrbot/core/platform/sources/lark/lark_adapter.py | 661 | self.lark_api.contact.v3.user.aget(request), | CODE |
| CRITICAL | …trbot/core/provider/sources/gemini_embedding_source.py | 40 | self.client._api_client._http_options.headers.pop("user-agent", None) | CODE |
| CRITICAL | astrbot/core/provider/sources/gemini_source.py | 19 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | astrbot/core/provider/sources/gemini_source.py | 122 | self.client._api_client._http_options.headers.pop("user-agent", None) | CODE |
| CRITICAL | astrbot/core/provider/sources/anthropic_source.py | 17 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | astrbot/core/provider/sources/openai_source.py | 29 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | astrbot/core/provider/sources/gemini_tts_source.py | 45 | self.client._api_client._http_options.headers.pop("user-agent", None) | CODE |
| CRITICAL | astrbot/core/provider/sources/openai_tts_api_source.py | 52 | async with self.client.audio.speech.with_streaming_response.create( | CODE |
| CRITICAL | …trbot/core/provider/sources/openai_responses_source.py | 13 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | astrbot/core/agent/runners/tool_loop_agent_runner.py | 31 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | astrbot/core/db/vec_db/faiss_impl/vec_db.py | 7 | from astrbot.core.exceptions import KnowledgeBaseUploadError | CODE |
| CRITICAL | astrbot/core/knowledge_base/kb_helper.py | 13 | from astrbot.core.exceptions import KnowledgeBaseUploadError | CODE |
| CRITICAL | astrbot/dashboard/api/chat.py | 263 | return ok(request.app.state.services.config_profiles.list_profiles()) | CODE |
| CRITICAL | tests/test_lark_sender_name.py | 93 | adapter.lark_api.contact.v3.user.aget.assert_awaited_once() | CODE |
| CRITICAL | tests/test_openai_source.py | 16 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | tests/test_anthropic_kimi_code_provider.py | 10 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | tests/test_gemini_source.py | 10 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | tests/test_kb_import.py | 10 | from astrbot.core.exceptions import KnowledgeBaseUploadError | CODE |
| CRITICAL | tests/test_tool_loop_agent_runner.py | 23 | from astrbot.core.exceptions import EmptyModelOutputError | CODE |
| CRITICAL | tests/unit/test_kb_upload_atomicity.py | 26 | from astrbot.core.exceptions import KnowledgeBaseUploadError | CODE |
| CRITICAL | tests/unit/test_faiss_vec_db.py | 8 | from astrbot.core.exceptions import KnowledgeBaseUploadError | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | astrbot/core/platform_message_history_mgr.py | 32 | CODE | |
| LOW | astrbot/core/dashboard_assets.py | 377 | CODE | |
| LOW | astrbot/core/astr_main_agent.py | 341 | CODE | |
| LOW | astrbot/core/astr_main_agent.py | 540 | CODE | |
| LOW | astrbot/core/astr_main_agent.py | 867 | CODE | |
| LOW | astrbot/core/astr_main_agent.py | 1249 | CODE | |
| LOW | astrbot/core/astr_main_agent.py | 1427 | CODE | |
| LOW | astrbot/core/astr_agent_tool_exec.py | 794 | CODE | |
| LOW | astrbot/core/astr_agent_tool_exec.py | 82 | CODE | |
| LOW | astrbot/core/astr_agent_tool_exec.py | 136 | CODE | |
| LOW | astrbot/core/astr_agent_tool_exec.py | 452 | CODE | |
| LOW | astrbot/core/astr_agent_tool_exec.py | 499 | CODE | |
| LOW | astrbot/core/astr_agent_tool_exec.py | 685 | CODE | |
| LOW | astrbot/core/astr_agent_run_util.py | 115 | CODE | |
| LOW | astrbot/core/astr_agent_run_util.py | 516 | CODE | |
| LOW | astrbot/core/astr_agent_run_util.py | 593 | CODE | |
| LOW | astrbot/core/conversation_mgr.py | 392 | CODE | |
| LOW | astrbot/core/workspace.py | 121 | CODE | |
| LOW | …line/process_stage/method/agent_sub_stages/internal.py | 59 | CODE | |
| LOW | …line/process_stage/method/agent_sub_stages/internal.py | 166 | CODE | |
| LOW | …e/process_stage/method/agent_sub_stages/third_party.py | 55 | CODE | |
| LOW | …e/process_stage/method/agent_sub_stages/third_party.py | 280 | CODE | |
| LOW | astrbot/core/pipeline/result_decorate/stage.py | 104 | CODE | |
| LOW | astrbot/core/pipeline/result_decorate/stage.py | 126 | CODE | |
| LOW | astrbot/core/pipeline/waking_check/umo_auto_name.py | 74 | CODE | |
| LOW | astrbot/core/pipeline/waking_check/stage.py | 82 | CODE | |
| LOW | astrbot/core/pipeline/respond/stage.py | 190 | CODE | |
| LOW | astrbot/core/pipeline/preprocess_stage/stage.py | 99 | CODE | |
| LOW | astrbot/core/tools/registry.py | 33 | CODE | |
| LOW | astrbot/core/tools/web_search_tools.py | 1251 | CODE | |
| LOW | astrbot/core/tools/cron_tools.py | 102 | CODE | |
| LOW | astrbot/core/tools/message_tools.py | 133 | CODE | |
| LOW | astrbot/core/tools/message_tools.py | 209 | CODE | |
| LOW | astrbot/core/tools/message_tools.py | 405 | CODE | |
| LOW | astrbot/core/tools/computer_tools/shell.py | 357 | CODE | |
| LOW | astrbot/core/tools/computer_tools/fs.py | 581 | CODE | |
| LOW | astrbot/core/tools/computer_tools/fs.py | 848 | CODE | |
| LOW | astrbot/core/tools/computer_tools/fs.py | 1044 | CODE | |
| LOW | astrbot/core/config/astrbot_config.py | 192 | CODE | |
| LOW | astrbot/core/platform/astr_message_event.py | 144 | CODE | |
| LOW | astrbot/core/platform/manager.py | 319 | CODE | |
| LOW | …bot/core/platform/sources/dingtalk/dingtalk_adapter.py | 164 | CODE | |
| LOW | …bot/core/platform/sources/dingtalk/dingtalk_adapter.py | 564 | CODE | |
| LOW | …bot/core/platform/sources/dingtalk/dingtalk_adapter.py | 794 | CODE | |
| LOW | …bot/core/platform/sources/dingtalk/dingtalk_adapter.py | 800 | CODE | |
| LOW | astrbot/core/platform/sources/kook/kook_event.py | 212 | CODE | |
| LOW | astrbot/core/platform/sources/kook/kook_client.py | 300 | CODE | |
| LOW | astrbot/core/platform/sources/kook/kook_client.py | 411 | CODE | |
| LOW | astrbot/core/platform/sources/kook/kook_adapter.py | 129 | CODE | |
| LOW | astrbot/core/platform/sources/kook/kook_adapter.py | 209 | CODE | |
| LOW | astrbot/core/platform/sources/kook/kook_adapter.py | 357 | CODE | |
| LOW | …atform/sources/qqofficial_webhook/qo_webhook_server.py | 169 | CODE | |
| LOW | …t/core/platform/sources/weixin_oc/weixin_oc_adapter.py | 1165 | CODE | |
| LOW | …t/core/platform/sources/weixin_oc/weixin_oc_adapter.py | 1720 | CODE | |
| LOW | …ore/platform/sources/discord/discord_platform_event.py | 141 | CODE | |
| LOW | …ore/platform/sources/discord/discord_platform_event.py | 286 | CODE | |
| LOW | …e/platform/sources/discord/discord_platform_adapter.py | 217 | CODE | |
| LOW | …atform/sources/aiocqhttp/aiocqhttp_platform_adapter.py | 198 | CODE | |
| LOW | …/platform/sources/aiocqhttp/aiocqhttp_message_event.py | 36 | CODE | |
| LOW | …/platform/sources/aiocqhttp/aiocqhttp_message_event.py | 71 | CODE | |
| 274 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …bot/core/platform/sources/dingtalk/dingtalk_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | astrbot/core/platform/sources/kook/kook_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | astrbot/core/platform/sources/lark/lark_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | astrbot/core/platform/sources/wecom/wecom_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | …trbot/core/platform/sources/misskey/misskey_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | …/core/platform/sources/wecom_ai_bot/wecomai_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | astrbot/core/platform/sources/line/line_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | astrbot/core/platform/sources/telegram/tg_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | astrbot/core/platform/sources/slack/slack_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | …core/platform/sources/mattermost/mattermost_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | astrbot/core/platform/sources/satori/satori_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | …trbot/core/platform/sources/webchat/webchat_adapter.py | 0 | creates a wecom ai bot message event. args: message: astrbot message object to wrap. returns: created wecom ai bot messa | STRING |
| HIGH | astrbot/core/platform/sources/wecom/wecom_kf_message.py | 0 | mit license copyright (c) 2021 lxns-network permission is hereby granted, free of charge, to any person obtaining a copy | STRING |
| HIGH | astrbot/core/platform/sources/wecom/wecom_kf.py | 0 | mit license copyright (c) 2021 lxns-network permission is hereby granted, free of charge, to any person obtaining a copy | STRING |
| HIGH | astrbot/core/message/components.py | 0 | mit license copyright (c) 2021 lxns-network permission is hereby granted, free of charge, to any person obtaining a copy | STRING |
| HIGH | astrbot/core/db/po.py | 0 | persona is a set of instructions for llms to follow. it can be used to customize the behavior of llms. | STRING |
| HIGH | docs/zh/dev/star/plugin.md | 0 | persona is a set of instructions for llms to follow. it can be used to customize the behavior of llms. | STRING |
| HIGH | docs/zh/dev/star/guides/ai.md | 0 | persona is a set of instructions for llms to follow. it can be used to customize the behavior of llms. | STRING |
| HIGH | docs/en/dev/star/guides/ai.md | 0 | persona is a set of instructions for llms to follow. it can be used to customize the behavior of llms. | STRING |
| HIGH | astrbot/core/db/po.py | 0 | a list of strings, each representing a dialog to start with | STRING |
| HIGH | docs/zh/dev/star/plugin.md | 0 | a list of strings, each representing a dialog to start with | STRING |
| HIGH | docs/zh/dev/star/guides/ai.md | 0 | a list of strings, each representing a dialog to start with | STRING |
| HIGH | docs/en/dev/star/guides/ai.md | 0 | a list of strings, each representing a dialog to start with | STRING |
| HIGH | astrbot/core/db/po.py | 0 | none means use all tools for default, empty list means no tools, otherwise a list of tool names. | STRING |
| HIGH | docs/zh/dev/star/plugin.md | 0 | none means use all tools for default, empty list means no tools, otherwise a list of tool names. | STRING |
| HIGH | docs/zh/dev/star/guides/ai.md | 0 | none means use all tools for default, empty list means no tools, otherwise a list of tool names. | STRING |
| HIGH | docs/en/dev/star/guides/ai.md | 0 | none means use all tools for default, empty list means no tools, otherwise a list of tool names. | STRING |
| HIGH | astrbot/core/db/po.py | 0 | llm 人格类。 在 v4.0.0 版本及之后,推荐使用上面的 persona 类。并且, mood_imitation_dialogs 字段已被废弃。 | STRING |
| HIGH | docs/zh/dev/star/plugin.md | 0 | llm 人格类。 在 v4.0.0 版本及之后,推荐使用上面的 persona 类。并且, mood_imitation_dialogs 字段已被废弃。 | STRING |
| HIGH | docs/zh/dev/star/guides/ai.md | 0 | llm 人格类。 在 v4.0.0 版本及之后,推荐使用上面的 persona 类。并且, mood_imitation_dialogs 字段已被废弃。 | STRING |
| HIGH | docs/zh/dev/star/plugin.md | 0 | <div style="font-size: 32px;"> <h1 style="color: black">todo list</h1> <ul> {% for item in items %} <li>{{ item }}</li> | STRING |
| HIGH | docs/zh/dev/star/guides/html-to-pic.md | 0 | <div style="font-size: 32px;"> <h1 style="color: black">todo list</h1> <ul> {% for item in items %} <li>{{ item }}</li> | STRING |
| HIGH | docs/en/dev/star/guides/html-to-pic.md | 0 | <div style="font-size: 32px;"> <h1 style="color: black">todo list</h1> <ul> {% for item in items %} <li>{{ item }}</li> | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime_bootstrap.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | astrbot/core/log.py | 223 | def _setup_loguru(cls) -> None: | CODE |
| LOW | astrbot/core/log.py | 242 | def _setup_root_bridge(cls) -> None: | CODE |
| LOW | astrbot/core/log.py | 326 | def set_plugin_log_level(cls, plugin_name: str, level: str | None) -> None: | CODE |
| LOW | astrbot/core/log.py | 406 | def set_queue_handler(cls, logger: logging.Logger, log_broker: LogBroker) -> None: | CODE |
| LOW | astrbot/core/dashboard_assets.py | 17 | __all__ = [ | CODE |
| LOW | astrbot/core/astr_main_agent.py | 244 | def _set_llm_error_message(event: AstrMessageEvent, message: str) -> None: | CODE |
| LOW | astrbot/core/umop_config_router.py | 63 | async def update_routing_data(self, new_routing: dict[str, str]) -> None: | CODE |
| LOW | astrbot/core/umop_config_router.py | 83 | async def update_route(self, umo: str, conf_id: str) -> None: | CODE |
| LOW | astrbot/core/updater.py | 33 | __all__ = ["AstrBotUpdater", "UpdateProgress", "UpdateProgressCallback"] | CODE |
| LOW | astrbot/core/zip_updater.py | 18 | __all__ = ["ReleaseInfo"] | CODE |
| LOW | astrbot/core/process_restart.py | 16 | __all__ = ["restart_process"] | CODE |
| LOW | astrbot/core/repository.py | 6 | __all__ = [ | CODE |
| LOW | astrbot/core/pipeline/bootstrap.py | 52 | __all__ = ["ensure_builtin_stages_registered"] | CODE |
| LOW | astrbot/core/pipeline/stage_order.py | 15 | __all__ = ["STAGES_ORDER"] | CODE |
| LOW | astrbot/core/pipeline/__init__.py | 82 | __all__ = [ | CODE |
| LOW | astrbot/core/tools/registry.py | 335 | __all__ = [ | CODE |
| LOW | astrbot/core/tools/knowledge_base_tools.py | 145 | __all__ = [ | CODE |
| LOW | astrbot/core/tools/web_search_tools.py | 1445 | __all__ = [ | CODE |
| LOW | astrbot/core/tools/cron_tools.py | 385 | __all__ = [ | CODE |
| LOW | astrbot/core/tools/message_tools.py | 564 | __all__ = [ | CODE |
| LOW | astrbot/core/tools/computer_tools/__init__.py | 34 | __all__ = [ | CODE |
| LOW | …bot/core/tools/computer_tools/shipyard_neo/__init__.py | 16 | __all__ = [ | CODE |
| LOW | astrbot/core/config/__init__.py | 4 | __all__ = [ | CODE |
| LOW | astrbot/core/platform/__init__.py | 6 | __all__ = [ | CODE |
| LOW | astrbot/core/platform/astr_message_event.py | 222 | def set_extra(self, key, value) -> None: | CODE |
| LOW | astrbot/core/platform/astr_message_event.py | 319 | def set_result(self, result: MessageEventResult | str) -> None: | CODE |
| LOW | …atform/sources/qqofficial_webhook/qo_webhook_server.py | 122 | def _setup_connection(self) -> None: | CODE |
| LOW | …tform/sources/qqofficial_webhook/qo_webhook_adapter.py | 30 | def set_platform(self, platform: "QQOfficialWebhookPlatformAdapter") -> None: | CODE |
| LOW | astrbot/core/platform/sources/lark/server.py | 200 | def set_callback(self, callback: Callable[[dict], Awaitable[None]]) -> None: | CODE |
| LOW | astrbot/core/platform/sources/wecom_ai_bot/__init__.py | 9 | __all__ = [ | CODE |
| LOW | …t/core/platform/sources/wecom_ai_bot/wecomai_server.py | 45 | def _setup_routes(self) -> None: | CODE |
| LOW | astrbot/core/platform/sources/slack/client.py | 43 | def _setup_routes(self) -> None: | CODE |
| LOW | …form/sources/qqofficial/qqofficial_platform_adapter.py | 42 | def _set_raw_message_fields(message: Any, data: dict[str, Any]) -> None: | CODE |
| LOW | …form/sources/qqofficial/qqofficial_platform_adapter.py | 189 | def set_platform(self, platform: QQOfficialPlatformAdapter) -> None: | CODE |
| LOW | astrbot/core/provider/provider.py | 39 | def set_model(self, model_name: str) -> None: | CODE |
| LOW | astrbot/core/provider/provider.py | 91 | def set_key(self, key: str) -> None: | CODE |
| LOW | astrbot/core/provider/entites.py | 11 | __all__ = [ | CODE |
| LOW | astrbot/core/provider/__init__.py | 4 | __all__ = ["Provider", "ProviderMetaData", "STTProvider"] | CODE |
| LOW | astrbot/core/provider/manager.py | 934 | async def update_provider(self, origin_provider_id: str, new_config: dict) -> None: | CODE |
| LOW | astrbot/core/provider/sources/gemini_source.py | 1066 | def set_key(self, key) -> None: | CODE |
| LOW | astrbot/core/provider/sources/anthropic_source.py | 462 | def _update_usage(self, token_usage: TokenUsage, usage: MessageDeltaUsage) -> None: | CODE |
| LOW | astrbot/core/provider/sources/anthropic_source.py | 1080 | def set_key(self, key: str) -> None: | CODE |
| LOW | astrbot/core/provider/sources/openai_source.py | 1381 | def set_key(self, key) -> None: | CODE |
| LOW | astrbot/core/provider/sources/gsv_selfhosted_source.py | 89 | async def _set_model_weights(self) -> None: | CODE |
| LOW | astrbot/core/utils/totp.py | 116 | def set_pending_totp_secret(secret: str | None) -> None: | CODE |
| LOW | astrbot/core/utils/totp.py | 127 | def set_rotation_verified(value: bool) -> None: | CODE |
| LOW | astrbot/core/utils/quoted_message_parser.py | 8 | __all__ = [ | CODE |
| LOW | astrbot/core/utils/llm_metadata.py | 38 | async def update_llm_metadata() -> None: | CODE |
| LOW | astrbot/core/utils/t2i/template_manager.py | 174 | def update_template(self, name: str, content: str) -> None: | CODE |
| LOW | astrbot/core/utils/quoted_message/__init__.py | 5 | __all__ = [ | CODE |
| LOW | astrbot/core/agent/runners/__init__.py | 3 | __all__ = ["BaseAgentRunner"] | CODE |
| LOW | astrbot/core/star/session_llm_manager.py | 42 | async def set_llm_status_for_session(session_id: str, enabled: bool) -> None: | CODE |
| LOW | astrbot/core/star/session_llm_manager.py | 113 | async def set_tts_status_for_session(session_id: str, enabled: bool) -> None: | CODE |
| LOW | astrbot/core/star/config.py | 67 | def update_config(namespace: str, key: str, value) -> None: | CODE |
| LOW | astrbot/core/star/__init__.py | 10 | __all__ = [ | CODE |
| LOW | astrbot/core/star/updater.py | 34 | __all__ = ["PLUGIN_METADATA_FILENAMES"] | CODE |
| LOW | astrbot/core/star/register/__init__.py | 28 | __all__ = [ | CODE |
| LOW | astrbot/core/star/filter/__init__.py | 15 | __all__ = ["AstrBotConfig", "AstrMessageEvent", "HandlerFilter", "MessageType"] | CODE |
| LOW | astrbot/core/db/vec_db/faiss_impl/__init__.py | 9 | __all__ = ["FaissVecDB"] | CODE |
| 58 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | astrbot/core/utils/media_utils.py | 1470 | # Create an output path when the caller does not provide one. | COMMENT |
| MEDIUM | astrbot/core/agent/mcp_client.py | 559 | # Create a new client session | COMMENT |
| MEDIUM | astrbot/core/agent/mcp_client.py | 605 | # Create a new client session | COMMENT |
| MEDIUM | astrbot/core/agent/mcp_client.py | 648 | # Create a new client session | COMMENT |
| MEDIUM | astrbot/core/db/po.py | 25 | """This class represents the statistics of bot usage across different platforms. | STRING |
| MEDIUM | astrbot/core/db/po.py | 220 | """This class represents preferences for bots.""" | STRING |
| MEDIUM | astrbot/core/db/po.py | 247 | """This class represents the message history for a specific platform. | STRING |
| MEDIUM | astrbot/core/db/po.py | 370 | """This class represents attachments for messages in AstrBot. | STRING |
| MEDIUM | astrbot/core/db/po.py | 457 | """This class represents projects for organizing ChatUI conversations. | STRING |
| MEDIUM | astrbot/core/db/po.py | 497 | """This class represents the relationship between platform sessions and ChatUI projects.""" | STRING |
| MEDIUM | tests/test_security_fixes.py | 17 | # Create an instance and test that random string generation works | COMMENT |
| MEDIUM | tests/test_security_fixes.py | 62 | # Create a provider with test config | COMMENT |
| MEDIUM | tests/test_security_fixes.py | 103 | # Create a context similar to what's used in io.py | COMMENT |
| MEDIUM | tests/unit/test_event_bus.py | 77 | # Create a mock event | COMMENT |
| MEDIUM | tests/unit/test_computer.py | 165 | # Create a test file | COMMENT |
| MEDIUM | tests/unit/test_core_lifecycle.py | 672 | # Create a task that completes quickly for testing | COMMENT |
| MEDIUM | tests/unit/test_core_lifecycle.py | 722 | # Create a mock handler | COMMENT |
| MEDIUM | tests/unit/test_core_lifecycle.py | 841 | # Create a mock plugin that raises exception on termination | COMMENT |
| MEDIUM⚡ | tests/unit/test_star_base.py | 22 | # Create a mock context with get_config method | COMMENT |
| MEDIUM⚡ | tests/unit/test_star_base.py | 26 | # Create a concrete Star subclass for testing | COMMENT |
| MEDIUM⚡ | tests/unit/test_tool_conflict_resolution.py | 77 | # Create a mock object without 'active' attribute | COMMENT |
| MEDIUM | tests/unit/test_datetime_storage.py | 88 | # Create the old schema independently of the current model metadata. | COMMENT |
| MEDIUM | tests/unit/test_config.py | 260 | # Create a path that definitely doesn't exist | COMMENT |
| MEDIUM | tests/agent/test_context_manager.py | 554 | # Create a mock compressor | COMMENT |
| MEDIUM | tests/agent/test_context_manager.py | 1008 | # Create a mock compressor | COMMENT |
| MEDIUM | tests/agent/test_context_manager.py | 1031 | # Create a mock compressor | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_qqofficial_group_message_create.py | 245 | mention = At(qq="placeholder") | CODE |
| LOW | tests/test_plugin_manager.py | 492 | zip_file_path.write_text("placeholder", encoding="utf-8") | CODE |
| LOW | tests/test_plugin_manager.py | 536 | zip_file_path.write_text("placeholder", encoding="utf-8") | CODE |
| LOW | tests/test_quoted_message_parser.py | 97 | id="placeholder", chain=[Plain(text="quoted content")], message_str="" | CODE |
| LOW | tests/test_quoted_message_parser.py | 347 | reply = Reply(id="placeholder", chain=[Image(file=file_uri)], message_str="") | CODE |
| LOW | tests/test_quoted_message_parser.py | 366 | id="placeholder", chain=[Image(file=str(non_image_file))], message_str="" | CODE |
| LOW | dashboard/src/i18n/locales/ru-RU/features/chat.json | 17 | "placeholder": "Спросите что угодно...", | CODE |
| LOW | dashboard/src/i18n/locales/ru-RU/features/chat.json | 99 | "placeholder": "Спросить об этом фрагменте..." | CODE |
| LOW | dashboard/src/i18n/locales/ru-RU/features/config.json | 144 | "placeholder": "Поиск по настройкам (поле/описание/подсказка)", | CODE |
| LOW | dashboard/src/i18n/locales/ru-RU/features/console.json | 15 | "placeholder": "Фильтровать логи по ключевому слову" | CODE |
| LOW | …rc/i18n/locales/ru-RU/features/session-management.json | 35 | "placeholder": "Поиск сессии..." | CODE |
| LOW | dashboard/src/i18n/locales/ru-RU/features/command.json | 84 | "placeholder": "Поиск команд..." | CODE |
| LOW | …shboard/src/i18n/locales/ru-RU/features/extension.json | 23 | "placeholder": "Поиск плагинов...", | CODE |
| LOW | dashboard/src/i18n/locales/ja-JP/features/chat.json | 17 | "placeholder": "何でも聞いてください", | CODE |
| LOW | dashboard/src/i18n/locales/ja-JP/features/chat.json | 99 | "placeholder": "この内容についてさらに質問…" | CODE |
| LOW | dashboard/src/i18n/locales/ja-JP/features/config.json | 144 | "placeholder": "設定項目を検索(フィールド名/説明/ヒント)", | CODE |
| LOW | dashboard/src/i18n/locales/ja-JP/features/console.json | 15 | "placeholder": "キーワードでログを絞り込む" | CODE |
| LOW | …rc/i18n/locales/ja-JP/features/session-management.json | 35 | "placeholder": "セッションを検索…" | CODE |
| LOW | dashboard/src/i18n/locales/ja-JP/features/command.json | 84 | "placeholder": "コマンドを検索…" | CODE |
| LOW | …shboard/src/i18n/locales/ja-JP/features/extension.json | 23 | "placeholder": "プラグインを検索…", | CODE |
| LOW | dashboard/src/i18n/locales/zh-CN/features/chat.json | 17 | "placeholder": "想问什么都可以", | CODE |
| LOW | dashboard/src/i18n/locales/zh-CN/features/chat.json | 99 | "placeholder": "继续追问这段内容..." | CODE |
| LOW | dashboard/src/i18n/locales/zh-CN/features/config.json | 144 | "placeholder": "搜索配置项(字段名/描述/提示)", | CODE |
| LOW | dashboard/src/i18n/locales/zh-CN/features/console.json | 15 | "placeholder": "按关键词过滤日志" | CODE |
| LOW | …rc/i18n/locales/zh-CN/features/session-management.json | 35 | "placeholder": "搜索会话..." | CODE |
| LOW | dashboard/src/i18n/locales/zh-CN/features/command.json | 84 | "placeholder": "搜索指令..." | CODE |
| LOW | …shboard/src/i18n/locales/zh-CN/features/extension.json | 23 | "placeholder": "搜索插件...", | CODE |
| LOW | dashboard/src/i18n/locales/en-US/features/chat.json | 17 | "placeholder": "Ask anything...", | CODE |
| LOW | dashboard/src/i18n/locales/en-US/features/chat.json | 99 | "placeholder": "Ask about this excerpt..." | CODE |
| LOW | dashboard/src/i18n/locales/en-US/features/config.json | 144 | "placeholder": "Search config items (key/description/hint)", | CODE |
| LOW | dashboard/src/i18n/locales/en-US/features/console.json | 15 | "placeholder": "Filter logs by keyword" | CODE |
| LOW | …rc/i18n/locales/en-US/features/session-management.json | 35 | "placeholder": "Search sessions..." | CODE |
| LOW | dashboard/src/i18n/locales/en-US/features/command.json | 84 | "placeholder": "Search commands..." | CODE |
| LOW | …shboard/src/i18n/locales/en-US/features/extension.json | 23 | "placeholder": "Search extensions...", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | astrbot/core/platform/astr_message_event.py | 425 | CODE | |
| LOW | …atform/sources/qqofficial_webhook/qo_webhook_server.py | 159 | CODE | |
| LOW | astrbot/core/platform/sources/discord/components.py | 12 | CODE | |
| LOW | astrbot/core/platform/sources/misskey/misskey_api.py | 474 | CODE | |
| LOW | …latform/sources/qqofficial/qqofficial_message_event.py | 857 | CODE | |
| LOW | astrbot/core/provider/provider.py | 100 | CODE | |
| LOW | astrbot/core/provider/provider.py | 139 | CODE | |
| LOW | astrbot/core/provider/entities.py | 83 | CODE | |
| LOW | astrbot/core/provider/entities.py | 389 | CODE | |
| LOW | astrbot/core/provider/sources/gemini_source.py | 900 | CODE | |
| LOW | astrbot/core/provider/sources/gemini_source.py | 972 | CODE | |
| LOW | astrbot/core/provider/sources/anthropic_source.py | 812 | CODE | |
| LOW | astrbot/core/provider/sources/anthropic_source.py | 890 | CODE | |
| LOW | astrbot/core/provider/sources/openai_source.py | 1192 | CODE | |
| LOW | astrbot/core/provider/sources/openai_source.py | 1275 | CODE | |
| LOW | astrbot/core/utils/shared_preferences.py | 299 | CODE | |
| LOW | astrbot/core/agent/runners/tool_loop_agent_runner.py | 210 | CODE | |
| LOW | astrbot/core/star/context.py | 218 | CODE | |
| LOW | astrbot/core/star/command_management.py | 226 | CODE | |
| LOW | astrbot/core/star/filter/command.py | 64 | CODE | |
| LOW | astrbot/core/db/__init__.py | 634 | CODE | |
| LOW | astrbot/core/db/__init__.py | 727 | CODE | |
| LOW | astrbot/core/db/__init__.py | 746 | CODE | |
| LOW | astrbot/core/db/sqlite.py | 1713 | CODE | |
| LOW | astrbot/core/db/sqlite.py | 1784 | CODE | |
| LOW | astrbot/core/db/sqlite.py | 2527 | CODE | |
| LOW | astrbot/core/db/sqlite.py | 2564 | CODE | |
| LOW | astrbot/core/knowledge_base/kb_helper.py | 727 | CODE | |
| LOW | astrbot/core/knowledge_base/kb_mgr.py | 87 | CODE | |
| LOW | astrbot/core/knowledge_base/kb_mgr.py | 187 | CODE | |
| LOW | astrbot/core/computer/booters/local.py | 263 | CODE | |
| LOW | astrbot/core/computer/booters/local.py | 969 | CODE | |
| LOW | astrbot/dashboard/api/conversations.py | 124 | CODE | |
| LOW | astrbot/dashboard/api/conversations.py | 250 | CODE | |
| LOW | tests/test_qqofficial_group_message_create.py | 38 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | k8s/astrbot/04-service-loadbalancer.yaml | 21 | # targetPort: 6195 | COMMENT |
| LOW | k8s/astrbot/03-service-nodeport.yaml | 21 | # - name: wecom-wh | COMMENT |
| LOW | astrbot/core/config/default.py | 561 | # "webchat_link_path": "", | COMMENT |
| LOW | astrbot/core/config/default.py | 3981 | }, | COMMENT |
| LOW | astrbot/core/config/default.py | 4001 | # "condition": { | COMMENT |
| LOW | astrbot/core/platform/sources/kook/kook_config.py | 81 | COMMENT | |
| LOW | astrbot/core/platform/sources/kook/kook_config.py | 101 | # # 日志配置 | COMMENT |
| LOW | astrbot/core/platform/sources/kook/kook_config.py | 121 | # "enable_connection_pooling": True, # 是否启用连接池 | COMMENT |
| LOW | astrbot/core/platform/sources/webchat/webchat_event.py | 221 | payload["text"] = text | COMMENT |
| LOW | astrbot/core/utils/shared_preferences.py | 41 | # In-memory overlay of preferences written through this process. It gives | COMMENT |
| LOW | changelogs/v4.2.0.md | 1 | # What's Changed | COMMENT |
| LOW | changelogs/v4.2.1.md | 1 | # What's Changed | COMMENT |
| LOW | dashboard/src/router/MainRoutes.ts | 281 | // path: '/alkaid', | COMMENT |
| LOW | .github/auto_assign.yml | 21 | COMMENT | |
| LOW | .github/workflows/codeql.yml | 1 | # For most projects, this workflow file will not need changing; you simply need | COMMENT |
| LOW | .github/workflows/codeql.yml | 61 | # Initializes the CodeQL tools for scanning. | COMMENT |
| LOW | openspec/config.yaml | 1 | schema: spec-driven | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | astrbot/core/utils/t2i/network_strategy.py | 34 | "T2I Shiki runtime not found at %s. Run `cd dashboard && pnpm run build:t2i-shiki-runtime` to regenerate it. | CODE |
| HIGH | astrbot/core/star/filter/command_group.py | 134 | if self.equals(event.message_str.strip()): | CODE |
| HIGH | tests/test_mimo_api_sources.py | 474 | text = '{"choices":[{"message":null}]}' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | astrbot/core/tools/computer_tools/fs.py | 991 | # Check if file exists | COMMENT |
| LOW | astrbot/core/provider/sources/openai_source.py | 774 | # Check if this looks like OpenAI content-part format | COMMENT |
| LOW | astrbot/core/provider/sources/openai_source.py | 793 | # Check if the string is a JSON-encoded list (e.g., "[{'type': 'text', ...}]") | COMMENT |
| LOW | astrbot/core/utils/trace.py | 53 | # Check if trace recording is enabled | COMMENT |
| LOW | astrbot/core/agent/mcp_client.py | 790 | # Set running_event to unblock any waiting tasks | COMMENT |
| LOW | astrbot/core/computer/booters/boxlite.py | 49 | # Read file content | COMMENT |
| LOW | astrbot/cli/utils/plugin.py | 300 | # Check if plugin exists | COMMENT |
| LOW | scripts/start-with-neo.sh | 198 | # Check if process is still alive | COMMENT |
| LOW | .github/auto_assign.yml | 19 | # Set 0 to add all the reviewers (default: 0) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …core/agent/runners/dashscope/dashscope_agent_runner.py | 184 | # RAG 引用脚标格式化 | COMMENT |
| MEDIUM | …core/agent/runners/dashscope/dashscope_agent_runner.py | 342 | # 添加 RAG 引用 | COMMENT |
| MEDIUM | docs/en/providers/agent-runners/dashscope.md | 7 | On the [Alibaba Cloud Bailian Application](https://bailian.console.aliyun.com/app-center#/app-center) website, click to | CODE |
| MEDIUM | docs/en/use/knowledge-base.md | 21 | ## Step 1: Configure an embedding model {#configuring-embedding-model} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/en/use/knowledge-base.md | 21 | ## Step 1: Configure an embedding model {#configuring-embedding-model} | COMMENT |
| LOW | docs/en/use/knowledge-base.md | 42 | ## Step 2: Create a knowledge base {#creating-a-knowledge-base} | COMMENT |
| LOW | docs/en/use/knowledge-base.md | 58 | ## Step 3: Upload material {#uploading-files} | COMMENT |
| LOW | docs/en/use/knowledge-base.md | 94 | ## Step 4: Test retrieval first | COMMENT |
| LOW | docs/en/use/knowledge-base.md | 104 | ## Step 5: Use it in a conversation {#using-the-knowledge-base} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | astrbot/core/knowledge_base/kb_helper.py | 95 | # More robust regex to handle potential LLM formatting errors (spaces, newlines in tags) | STRING |
| MEDIUM | dashboard/src/components/chat/LiveOrb.vue | 187 | // Repeat once to make it seamless | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_cron_manager.py | 833 | CODE | |
| MEDIUM | tests/unit/test_kb_upload_atomicity.py | 80 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/codeql.yml | 55 | # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/start-with-neo.sh | 5 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | astrbot/core/platform/webhook_server.py | 107 | async def run_task( | CODE |
| LOW | tests/test_updater_socks.py | 1447 | def handle_request(request: httpx.Request) -> httpx.Response: | CODE |
| LOW | tests/test_updater_socks.py | 1493 | def handle_request(request: httpx.Request) -> httpx.Response: # noqa: ARG001 | CODE |