Production-grade platform for building agentic IM bots - 生产级多平台智能机器人开发平台/ Agent、知识库编排、插件系统 / Bots for Discord / Slack / LINE / Telegram / WeChat(企业微信, 企微智能机器人, 公众号) / 飞书 / 钉钉 / QQ / Matrix e.g. Integrated with ChatGPT(GPT), DeepSeek, Dify, n8n, Langflow, Coze, Claude, Gemini, GLM, Ollama, SiliconFlow, Moonshot, openclaw / hermes agent, deerflow
This report presents the forensic synthetic code analysis of langbot-app/LangBot, a Python project with 16,876 GitHub stars. SynthScan v2.0 examined 245,503 lines of code across 1096 source files, recording 3816 pattern matches distributed across 23 syntactic categories. The overall adjusted score of 19.4 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 3816 distinct pattern matches across 23 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …arket/plugin-market-card/PluginMarketCardComponent.tsx | 15 | export default function PluginMarketCardComponent({ | CODE |
| LOW | …ts/plugin-install-task/PluginInstallProgressDialog.tsx | 399 | export default function PluginInstallProgressDialog() { | CODE |
| LOW | …nents/plugin-install-task/PluginInstallTaskContext.tsx | 150 | function asyncTaskToPluginInstallTask(task: AsyncTask): PluginInstallTask { | CODE |
| LOW | …nents/plugin-install-task/PluginInstallTaskContext.tsx | 210 | export function PluginInstallTaskProvider({ | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 217 | function createEmptyListExpansionState(): SidebarListExpansionState { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 286 | async function refreshEnabledMCPConnections() { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 481 | function handleListExpansionToggle(id: EntityCategoryId, expanded: boolean) { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 1658 | function handleSettingsSectionChange(section: SettingsSection) { | CODE |
| LOW | …/src/app/home/components/models-dialog/ModelsPanel.tsx | 190 | async function loadRequesterSupportTypes() { | CODE |
| LOW | …home/components/dynamic-form/ToolResourceSelectors.tsx | 141 | function hasReliableSourceMetadata(tool: PluginTool) { | CODE |
| LOW | …rc/app/home/skills/components/skill-form/SkillForm.tsx | 748 | async function handleDirectoryImportConfirm() { | CODE |
| LOW | web/src/app/home/monitoring/utils/conversationTurns.ts | 55 | export function hasRenderableMessageContent(content?: string): boolean { | CODE |
| LOW | web/src/app/home/add-extension/page.tsx | 515 | async function handleGithubAddressSubmit() { | CODE |
| LOW | web/src/app/auth/space/callback/page.tsx | 33 | function getOrCreateSpaceOAuthLoginPromise( | CODE |
| LOW | web/src/app/auth/space/callback/page.tsx | 33 | function getOrCreateSpaceOAuthLoginPromise( | CODE |
| LOW | web/src/app/auth/space/callback/page.tsx | 51 | function SpaceOAuthCallbackContent() { | CODE |
| LOW | tests/test_cwe94_debug_exec.py | 21 | def test_no_exec_call_in_system_controller(): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 46 | async def test_fake_provider_returns_text(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 87 | async def test_fake_provider_streaming(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 110 | async def test_fake_provider_timeout(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 126 | async def test_fake_provider_rate_limit(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 142 | async def test_fake_provider_captures_requests(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 164 | async def test_fake_platform_capture_outbound(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 184 | async def test_fake_platform_friend_message(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 200 | async def test_fake_platform_group_message_with_mention(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 220 | async def test_query_factories_basic(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 247 | async def test_fake_platform_send_failure(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 261 | async def test_mock_platform_adapter(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 287 | async def test_minimal_message_flow(self): | CODE |
| LOW | tests/smoke/test_fake_message_flow.py | 331 | async def test_streaming_message_flow(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 35 | async def test_create_skill_refused_when_box_disabled(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 41 | async def test_create_skill_refused_when_box_failed(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 47 | async def test_update_skill_refused_when_box_disabled(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 53 | async def test_write_skill_file_refused_when_box_disabled(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 59 | async def test_install_from_github_refused_when_box_disabled(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 65 | async def test_install_from_zip_upload_refused_when_box_disabled(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 71 | async def test_create_skill_refused_when_box_service_missing_entirely(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 79 | async def test_list_skills_returns_empty_when_box_unavailable(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 86 | async def test_read_skill_file_refused_when_box_unavailable(self): | CODE |
| LOW | tests/unit_tests/test_preproc.py | 112 | async def test_preproc_enables_skill_authoring_tools_when_skill_service_available(): | CODE |
| LOW | tests/unit_tests/test_preproc.py | 130 | async def test_preproc_disables_skill_authoring_tools_when_skill_service_missing(): | CODE |
| LOW | tests/unit_tests/test_preproc.py | 148 | async def test_preproc_disables_mcp_resource_tools_when_agent_reading_is_disabled(): | CODE |
| LOW | tests/unit_tests/test_preproc.py | 168 | async def test_preproc_injects_skill_index_into_system_prompt(): | CODE |
| LOW | tests/unit_tests/test_preproc.py | 189 | async def test_preproc_respects_pipeline_bound_skills_subset(): | CODE |
| LOW | tests/unit_tests/test_preproc.py | 214 | async def test_preproc_skips_injection_when_addendum_is_empty(): | CODE |
| LOW⚡ | tests/unit_tests/test_paths.py | 6 | def test_get_data_root_uses_source_root_in_repo_checkout(): | CODE |
| LOW⚡ | tests/unit_tests/test_paths.py | 13 | def test_get_data_path_joins_under_data_root(): | CODE |
| LOW⚡ | tests/unit_tests/test_paths.py | 20 | def test_get_data_root_honors_env_override(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit_tests/test_telemetry.py | 11 | async def test_send_tasks_are_scoped_to_manager_instance(monkeypatch): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/conftest.py | 55 | def _create_mock_session_manager(self): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/conftest.py | 61 | def _create_mock_model_manager(self): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/conftest.py | 66 | def _create_mock_tool_manager(self): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/conftest.py | 71 | def _create_mock_plugin_connector(self): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/conftest.py | 76 | def _create_mock_persistence_manager(self): | CODE |
| LOW | tests/unit_tests/pipeline/conftest.py | 88 | def _create_mock_instance_config(self): | CODE |
| LOW | tests/unit_tests/pipeline/conftest.py | 96 | def _create_mock_task_manager(self): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/test_config_coercion.py | 46 | def test_invalid_bool_string_raises(self): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/test_config_coercion.py | 50 | def test_unknown_type_passthrough(self): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/test_config_coercion.py | 54 | def test_invalid_integer_raises(self): | CODE |
| LOW⚡ | tests/unit_tests/pipeline/test_config_coercion.py | 68 | def test_coerce_integer_in_config(self): | CODE |
| 2073 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration_tests/box/test_box_mcp_integration.py | 47 | except Exception: | CODE |
| LOW | tests/integration_tests/box/test_box_integration.py | 55 | except Exception: | CODE |
| LOW | tests/integration/persistence/test_migrations.py | 212 | except Exception as e: | CODE |
| LOW⚡ | …ts/integration/persistence/test_migrations_postgres.py | 84 | except Exception: | CODE |
| LOW⚡ | …ts/integration/persistence/test_migrations_postgres.py | 92 | except Exception: | CODE |
| LOW | tests/integration/vector/test_valkey_search.py | 93 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | tests/integration/vector/test_valkey_search.py | 103 | except Exception: | CODE |
| LOW | tests/e2e/utils/process_manager.py | 207 | except Exception: | CODE |
| LOW | docs/review/box-architecture.md | 478 | except Exception as e: | CODE |
| LOW | examples/http-bot/playground.py | 90 | except Exception: | CODE |
| LOW | examples/http-bot/playground.py | 133 | except Exception: | CODE |
| LOW | skills/skills/langbot-plugin-dev/SKILL.md | 164 | except Exception: | CODE |
| LOW | src/langbot/libs/wechatpad_api/util/http_util.py | 19 | except Exception as e: | CODE |
| LOW | src/langbot/libs/wechatpad_api/util/http_util.py | 38 | except Exception as e: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 154 | except Exception: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 342 | except Exception: | CODE |
| LOW | src/langbot/libs/openclaw_weixin_api/client.py | 184 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/openclaw_weixin_api/client.py | 594 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/openclaw_weixin_api/client.py | 604 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/openclaw_weixin_api/client.py | 614 | except Exception as e: | CODE |
| LOW | src/langbot/libs/dingtalk_api/card_callback.py | 104 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 288 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 298 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 308 | except Exception as e: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 96 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 112 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 469 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 515 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 542 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 594 | except Exception as e: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 688 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 737 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 785 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 823 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 875 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 922 | except Exception as e: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 946 | except Exception: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 621 | except Exception: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 627 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 152 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 353 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 380 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 498 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 605 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 705 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 776 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 794 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 837 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 851 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 876 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 924 | except Exception as e: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 415 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 422 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 960 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1718 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1746 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1847 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1929 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1934 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1984 | except Exception: | CODE |
| 544 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/unit_tests/pipeline/test_n8nsvapi.py | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/pipeline/test_n8nsvapi.py | 94 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/pipeline/test_n8nsvapi.py | 175 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/pipeline/test_n8nsvapi.py | 177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_n8nsvapi.py | 49 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_n8nsvapi.py | 51 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_n8nsvapi.py | 246 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_n8nsvapi.py | 248 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/box/test_box_service.py | 1358 | # ── BoxHostMountMode.NONE tests ───────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit_tests/box/test_box_service.py | 1623 | # ── Attachment passthrough (inbound / outbound) ───────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 660 | # ── Truncation tests ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 783 | # ── Profile tests ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1041 | # ── Observability tests ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1142 | # ── In-process RPC client/server tests ───────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1273 | # ── RPC-based delete/create/conflict tests ──────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 24 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 149 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 151 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 172 | # ── MCPServerBoxConfig ────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 220 | # ── Path Rewriting ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 321 | # ── host_path Inference ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 368 | # ── Build Box Session Payload ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 439 | # ── Build Box Process Payload ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 497 | # ── Python Workspace Preparation ──────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 575 | # ── get_runtime_info_dict ─────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 724 | # ── Box config parsing ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 21 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 23 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 65 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 67 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 163 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 165 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 264 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 266 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 386 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 388 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 475 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 477 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 562 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 564 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 632 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 634 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 708 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 710 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 780 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 782 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 167 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 169 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 231 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 233 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 372 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 374 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 398 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 400 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 414 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 416 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 430 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 432 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 450 | # ============================================================================ | COMMENT |
| 76 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/smoke/test_fake_message_flow.py | 10 | CODE | |
| LOW | tests/unit_tests/test_preproc.py | 1 | CODE | |
| LOW | tests/unit_tests/test_telemetry.py | 1 | CODE | |
| LOW | tests/unit_tests/pipeline/conftest.py | 10 | CODE | |
| LOW | tests/unit_tests/pipeline/conftest.py | 19 | CODE | |
| LOW | tests/unit_tests/pipeline/test_config_coercion.py | 3 | CODE | |
| LOW | tests/unit_tests/pipeline/test_chat_handler_logging.py | 1 | CODE | |
| LOW | tests/unit_tests/pipeline/test_wrapper.py | 12 | CODE | |
| LOW | tests/unit_tests/pipeline/test_msgtrun.py | 11 | CODE | |
| LOW | tests/unit_tests/pipeline/test_preproc.py | 12 | CODE | |
| LOW | tests/unit_tests/pipeline/test_longtext.py | 11 | CODE | |
| LOW | tests/unit_tests/pipeline/test_chat_session_limit.py | 1 | CODE | |
| LOW | tests/unit_tests/pipeline/test_aggregator.py | 12 | CODE | |
| LOW | tests/unit_tests/pipeline/test_command_handler.py | 8 | CODE | |
| LOW | tests/unit_tests/pipeline/test_n8nsvapi.py | 11 | CODE | |
| LOW | tests/unit_tests/pipeline/test_pool.py | 7 | CODE | |
| LOW | tests/unit_tests/pipeline/test_cntfilter.py | 12 | CODE | |
| LOW | …it_tests/pipeline/test_wrapper_outbound_attachments.py | 13 | CODE | |
| LOW | tests/unit_tests/pipeline/test_chat_handler.py | 8 | CODE | |
| LOW | tests/unit_tests/discover/test_engine.py | 7 | CODE | |
| LOW | tests/unit_tests/box/test_box_connector.py | 1 | CODE | |
| LOW | tests/unit_tests/box/test_workspace.py | 1 | CODE | |
| LOW | tests/unit_tests/box/test_box_service.py | 1 | CODE | |
| LOW | tests/unit_tests/core/test_stage.py | 3 | CODE | |
| LOW | tests/unit_tests/core/test_boot.py | 1 | CODE | |
| LOW | tests/unit_tests/core/test_app_config_validation.py | 8 | CODE | |
| LOW | tests/unit_tests/core/test_load_config.py | 11 | CODE | |
| LOW | tests/unit_tests/core/test_bootutils_log.py | 9 | CODE | |
| LOW | tests/unit_tests/core/test_taskmgr.py | 11 | CODE | |
| LOW | tests/unit_tests/core/test_bootutils_deps.py | 3 | CODE | |
| LOW | tests/unit_tests/config/test_config_loader.py | 12 | CODE | |
| LOW | …t_tests/platform/test_websocket_adapter_attachments.py | 10 | CODE | |
| LOW | tests/unit_tests/platform/test_qqofficial_api.py | 178 | CODE | |
| LOW | tests/unit_tests/plugin/test_connector_methods.py | 10 | CODE | |
| LOW | tests/unit_tests/plugin/test_handler.py | 6 | CODE | |
| LOW | tests/unit_tests/plugin/test_handler_actions.py | 3 | CODE | |
| LOW | tests/unit_tests/plugin/test_connector_pure.py | 8 | CODE | |
| LOW | tests/unit_tests/plugin/test_connector_static.py | 7 | CODE | |
| LOW | tests/unit_tests/plugin/test_handler_helpers.py | 8 | CODE | |
| LOW | tests/unit_tests/plugin/test_connector_ping.py | 1 | CODE | |
| LOW | tests/unit_tests/plugin/test_extract_deps.py | 10 | CODE | |
| LOW | tests/unit_tests/provider/test_mcp_resources.py | 1 | CODE | |
| LOW | tests/unit_tests/provider/test_mcp_box_integration.py | 7 | CODE | |
| LOW | tests/unit_tests/provider/conftest.py | 8 | CODE | |
| LOW | tests/unit_tests/provider/test_model_manager.py | 8 | CODE | |
| LOW | tests/unit_tests/provider/test_mcp_remote_transport.py | 1 | CODE | |
| LOW | tests/unit_tests/provider/test_requester_base.py | 8 | CODE | |
| LOW | …ts/unit_tests/provider/test_localagent_sandbox_exec.py | 1 | CODE | |
| LOW | tests/unit_tests/provider/test_skill_tools.py | 1 | CODE | |
| LOW | tests/unit_tests/provider/test_tool_manager_native.py | 1 | CODE | |
| LOW | tests/unit_tests/provider/test_model_service.py | 1 | CODE | |
| LOW | tests/unit_tests/provider/test_session_manager.py | 9 | CODE | |
| LOW | tests/unit_tests/provider/test_tool_manager.py | 8 | CODE | |
| LOW | …_tests/provider/test_localagent_inbound_attachments.py | 15 | CODE | |
| LOW | …s/unit_tests/provider/runners/test_difysvapi_runner.py | 6 | CODE | |
| LOW | tests/unit_tests/utils/test_image.py | 7 | CODE | |
| LOW | tests/unit_tests/utils/test_proxy.py | 7 | CODE | |
| LOW | tests/unit_tests/utils/test_logcache.py | 7 | CODE | |
| LOW | tests/unit_tests/utils/test_platform.py | 9 | CODE | |
| LOW | tests/unit_tests/utils/test_pkgmgr.py | 7 | CODE | |
| 313 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/unit_tests/provider/test_mcp_box_integration.py | 821 | assert ap.box_service.build_spec.call_args.kwargs.get('skip_host_mount_validation', False) is False | CODE |
| CRITICAL | tests/unit_tests/rag/test_file_storage.py | 64 | kb.ap.storage_mgr.storage_provider.exists.assert_awaited_once_with('documents/test.pdf') | CODE |
| CRITICAL | tests/unit_tests/rag/test_file_storage.py | 114 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with('archive.zip') | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 128 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with('archive.zip') | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 142 | kb.ap.storage_mgr.storage_provider.size.assert_awaited_once_with('test.pdf') | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 145 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with('test.pdf') | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 158 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with('bad.pdf') | CODE |
| CRITICAL⚡ | tests/integration/api/test_embed.py | 206 | fake_embed_app.platform_mgr.websocket_proxy_bot.adapter.get_websocket_messages.assert_called_with( | CODE |
| CRITICAL⚡ | tests/integration/api/test_embed.py | 256 | fake_embed_app.platform_mgr.websocket_proxy_bot.adapter.reset_session.assert_called_with( | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/sources/lark.py | 1489 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/sources/lark.py | 3046 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1305 | response: CreateAppAccessTokenResponse = self.api_client.auth.v3.app_access_token.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1338 | response: CreateTenantAccessTokenResponse = self.api_client.auth.v3.tenant_access_token.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1462 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1732 | response: CreateCardResponse = self.api_client.cardkit.v1.card.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1787 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1878 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1969 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2007 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2157 | response: ContentCardElementResponse = await self.api_client.cardkit.v1.card_element.acontent( | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2261 | media_response: ReplyMessageResponse = await self.api_client.im.v1.message.areply( | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2763 | response: UpdateCardResponse = await self.api_client.cardkit.v1.card.aupdate(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/plugin/connector.py | 296 | self.ap.tool_mgr.mcp_tool_loader._hosted_mcp_tasks.append(mcp_task) | CODE |
| CRITICAL | src/langbot/pkg/api/http/service/mcp.py | 73 | self.ap.tool_mgr.mcp_tool_loader._hosted_mcp_tasks.append(task) | CODE |
| CRITICAL | src/langbot/pkg/api/http/service/mcp.py | 121 | self.ap.tool_mgr.mcp_tool_loader._hosted_mcp_tasks.append(task) | CODE |
| CRITICAL | src/langbot/pkg/api/http/service/mcp.py | 133 | self.ap.tool_mgr.mcp_tool_loader._hosted_mcp_tasks.append(task) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit_tests/box/test_box_service.py | 0 | in-process connection backed by asyncio queues — no real io. | STRING |
| HIGH | tests/integration_tests/box/test_box_mcp_integration.py | 0 | in-process connection backed by asyncio queues — no real io. | STRING |
| HIGH | tests/integration_tests/box/test_box_integration.py | 0 | in-process connection backed by asyncio queues — no real io. | STRING |
| HIGH | tests/unit_tests/provider/test_session_manager.py | 0 | test that __init__ stores the application reference. | STRING |
| HIGH | tests/unit_tests/provider/test_tool_manager.py | 0 | test that __init__ stores the application reference. | STRING |
| HIGH | tests/unit_tests/storage/test_s3storage.py | 0 | test that __init__ stores the application reference. | STRING |
| HIGH | tests/unit_tests/telemetry/test_telemetry.py | 0 | test that __init__ stores the application reference. | STRING |
| HIGH | tests/unit_tests/api/service/test_mcp_service.py | 0 | delete operation completes even for nonexistent uuid. | STRING |
| HIGH | tests/unit_tests/api/service/test_bot_service.py | 0 | delete operation completes even for nonexistent uuid. | STRING |
| HIGH | tests/unit_tests/api/service/test_pipeline_service.py | 0 | delete operation completes even for nonexistent uuid. | STRING |
| HIGH | tests/integration/api/test_providers.py | 0 | create quart test client (module scope to avoid route re-registration). | STRING |
| HIGH | tests/integration/api/test_knowledge.py | 0 | create quart test client (module scope to avoid route re-registration). | STRING |
| HIGH | tests/integration/api/test_pipelines.py | 0 | create quart test client (module scope to avoid route re-registration). | STRING |
| HIGH | tests/integration/api/test_bots.py | 0 | create quart test client (module scope to avoid route re-registration). | STRING |
| HIGH | src/langbot/libs/official_account_api/api.py | 0 | 处理回调请求(统一 webhook 模式,显式传递 request)。 args: req: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/libs/wecom_ai_bot_api/api.py | 0 | 处理回调请求(统一 webhook 模式,显式传递 request)。 args: req: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/libs/wecom_customer_service_api/api.py | 0 | 处理回调请求(统一 webhook 模式,显式传递 request)。 args: req: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/libs/wecom_api/api.py | 0 | 处理回调请求(统一 webhook 模式,显式传递 request)。 args: req: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/libs/slack_api/api.py | 0 | 处理回调请求(统一 webhook 模式,显式传递 request)。 args: req: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/libs/qq_official_api/api.py | 0 | 处理回调请求(统一 webhook 模式,显式传递 request)。 args: req: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/libs/official_account_api/api.py | 0 | 处理回调请求的内部实现,包括 get 验证和 post 消息接收。 args: req: quart request 对象 | STRING |
| HIGH | src/langbot/libs/wecom_ai_bot_api/api.py | 0 | 处理回调请求的内部实现,包括 get 验证和 post 消息接收。 args: req: quart request 对象 | STRING |
| HIGH | src/langbot/libs/wecom_customer_service_api/api.py | 0 | 处理回调请求的内部实现,包括 get 验证和 post 消息接收。 args: req: quart request 对象 | STRING |
| HIGH | src/langbot/libs/wecom_api/api.py | 0 | 处理回调请求的内部实现,包括 get 验证和 post 消息接收。 args: req: quart request 对象 | STRING |
| HIGH | src/langbot/libs/official_account_api/oaevent.py | 0 | 事件类型,例如 "message"、"event"、"text" 等。 returns: str: 事件类型。 | STRING |
| HIGH | …angbot/libs/wecom_customer_service_api/wecomcsevent.py | 0 | 事件类型,例如 "message"、"event"、"text" 等。 returns: str: 事件类型。 | STRING |
| HIGH | src/langbot/libs/wecom_api/wecomevent.py | 0 | 事件类型,例如 "message"、"event"、"text" 等。 returns: str: 事件类型。 | STRING |
| HIGH | src/langbot/libs/official_account_api/oaevent.py | 0 | 允许通过属性访问数据中的任意字段。 args: key (str): 字段名。 returns: optional[any]: 字段值。 | STRING |
| HIGH | src/langbot/libs/dingtalk_api/dingtalkevent.py | 0 | 允许通过属性访问数据中的任意字段。 args: key (str): 字段名。 returns: optional[any]: 字段值。 | STRING |
| HIGH | …angbot/libs/wecom_customer_service_api/wecomcsevent.py | 0 | 允许通过属性访问数据中的任意字段。 args: key (str): 字段名。 returns: optional[any]: 字段值。 | STRING |
| HIGH | src/langbot/libs/wecom_api/wecomevent.py | 0 | 允许通过属性访问数据中的任意字段。 args: key (str): 字段名。 returns: optional[any]: 字段值。 | STRING |
| HIGH | src/langbot/libs/official_account_api/oaevent.py | 0 | 允许通过属性设置数据中的任意字段。 args: key (str): 字段名。 value (any): 字段值。 | STRING |
| HIGH | src/langbot/libs/dingtalk_api/dingtalkevent.py | 0 | 允许通过属性设置数据中的任意字段。 args: key (str): 字段名。 value (any): 字段值。 | STRING |
| HIGH | …angbot/libs/wecom_customer_service_api/wecomcsevent.py | 0 | 允许通过属性设置数据中的任意字段。 args: key (str): 字段名。 value (any): 字段值。 | STRING |
| HIGH | src/langbot/libs/wecom_api/wecomevent.py | 0 | 允许通过属性设置数据中的任意字段。 args: key (str): 字段名。 value (any): 字段值。 | STRING |
| HIGH | src/langbot/pkg/platform/sources/qqofficial.py | 0 | 处理统一 webhook 请求。 args: bot_uuid: bot 的 uuid path: 子路径(如果有的话) request: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/pkg/platform/sources/lark.py | 0 | 处理统一 webhook 请求。 args: bot_uuid: bot 的 uuid path: 子路径(如果有的话) request: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/pkg/platform/sources/line.py | 0 | 处理统一 webhook 请求。 args: bot_uuid: bot 的 uuid path: 子路径(如果有的话) request: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/pkg/platform/sources/officialaccount.py | 0 | 处理统一 webhook 请求。 args: bot_uuid: bot 的 uuid path: 子路径(如果有的话) request: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/pkg/platform/sources/wecomcs.py | 0 | 处理统一 webhook 请求。 args: bot_uuid: bot 的 uuid path: 子路径(如果有的话) request: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/pkg/platform/sources/slack.py | 0 | 处理统一 webhook 请求。 args: bot_uuid: bot 的 uuid path: 子路径(如果有的话) request: quart request 对象 returns: 响应数据 | STRING |
| HIGH | src/langbot/pkg/platform/sources/wecom.py | 0 | 处理统一 webhook 请求。 args: bot_uuid: bot 的 uuid path: 子路径(如果有的话) request: quart request 对象 returns: 响应数据 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/pipeline/test_cntfilter.py | 50 | CODE | |
| LOW | tests/unit_tests/core/test_bootutils_deps.py | 118 | CODE | |
| LOW | tests/unit_tests/provider/test_model_manager.py | 71 | CODE | |
| LOW | tests/unit_tests/provider/test_model_manager.py | 568 | CODE | |
| LOW | tests/unit_tests/provider/test_model_manager.py | 76 | CODE | |
| LOW | tests/unit_tests/provider/test_model_manager.py | 572 | CODE | |
| LOW | …sts/unit_tests/api/service/test_maintenance_service.py | 451 | CODE | |
| LOW | examples/http-bot/client.py | 138 | CODE | |
| LOW | src/langbot/libs/official_account_api/api.py | 77 | CODE | |
| LOW | src/langbot/libs/official_account_api/api.py | 264 | CODE | |
| LOW | src/langbot/libs/openclaw_weixin_api/client.py | 557 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/card_callback.py | 70 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 241 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 323 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 881 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 708 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 909 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 363 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 427 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 878 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1498 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1909 | CODE | |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 228 | CODE | |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 318 | CODE | |
| LOW | src/langbot/libs/wecom_api/api.py | 263 | CODE | |
| LOW | src/langbot/libs/wecom_api/api.py | 369 | CODE | |
| LOW | src/langbot/libs/wecom_api/api.py | 429 | CODE | |
| LOW | src/langbot/libs/wecom_api/api.py | 485 | CODE | |
| LOW | src/langbot/libs/slack_api/slackevent.py | 14 | CODE | |
| LOW | src/langbot/libs/coze_server_api/client.py | 110 | CODE | |
| LOW | src/langbot/libs/deerflow_api/stream_utils.py | 12 | CODE | |
| LOW | src/langbot/libs/deerflow_api/stream_utils.py | 163 | CODE | |
| LOW | src/langbot/libs/deerflow_api/stream_utils.py | 178 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 225 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 484 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 860 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 879 | CODE | |
| LOW | src/langbot/pkg/pipeline/controller.py | 24 | CODE | |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 23 | CODE | |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 102 | CODE | |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 129 | CODE | |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 193 | CODE | |
| LOW | src/langbot/pkg/pipeline/pipelinemgr.py | 123 | CODE | |
| LOW | src/langbot/pkg/pipeline/pipelinemgr.py | 217 | CODE | |
| LOW | src/langbot/pkg/pipeline/config_coercion.py | 53 | CODE | |
| LOW | src/langbot/pkg/pipeline/resprule/rules/prefix.py | 9 | CODE | |
| LOW | src/langbot/pkg/pipeline/wrapper/wrapper.py | 72 | CODE | |
| LOW | src/langbot/pkg/pipeline/cntfilter/cntfilter.py | 57 | CODE | |
| LOW | src/langbot/pkg/pipeline/cntfilter/cntfilter.py | 92 | CODE | |
| LOW | src/langbot/pkg/pipeline/cntfilter/filters/banwords.py | 16 | CODE | |
| LOW | src/langbot/pkg/pipeline/preproc/preproc.py | 43 | CODE | |
| LOW | src/langbot/pkg/pipeline/longtext/longtext.py | 26 | CODE | |
| LOW | src/langbot/pkg/pipeline/longtext/strategies/image.py | 56 | CODE | |
| LOW | src/langbot/pkg/pipeline/longtext/strategies/image.py | 129 | CODE | |
| LOW | src/langbot/pkg/pipeline/process/handlers/command.py | 15 | CODE | |
| LOW | src/langbot/pkg/pipeline/process/handlers/chat.py | 28 | CODE | |
| LOW | src/langbot/pkg/box/service.py | 712 | CODE | |
| LOW | src/langbot/pkg/box/service.py | 1237 | CODE | |
| LOW | src/langbot/pkg/box/service.py | 1240 | CODE | |
| LOW | src/langbot/pkg/core/app.py | 174 | CODE | |
| 169 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/unit_tests/box/test_workspace.py | 57 | assert '_LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)"' in command | CODE |
| HIGH | tests/unit_tests/provider/test_mcp_box_integration.py | 512 | assert '_LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)"' in command | CODE |
| HIGH | tests/unit_tests/provider/test_skill_tools.py | 271 | assert '_LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)"' in command | CODE |
| HIGH | tests/integration_tests/box/test_box_mcp_integration.py | 322 | args=['-c', 'echo done && exit 0'], | CODE |
| HIGH | examples/http-bot/playground.py | 286 | if(obj!==undefined){const p=document.createElement('pre'); | CODE |
| HIGH | examples/http-bot/playground.py | 287 | p.textContent=typeof obj==='string'?obj:JSON.stringify(obj,null,2);e.appendChild(p)} | CODE |
| HIGH | src/langbot/pkg/box/workspace.py | 149 | _LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)" | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 208 | while ! mkdir "$_LB_LOCK_DIR" 2>/dev/null; do | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 210 | _LB_LOCK_OWNER="$(cat "$_LB_LOCK_DIR/pid" 2>/dev/null || true)" | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 211 | if [ -n "$_LB_LOCK_OWNER" ] && kill -0 "$_LB_LOCK_OWNER" 2>/dev/null; then | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 216 | rm -rf "$_LB_LOCK_DIR" 2>/dev/null || true | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 217 | if mkdir "$_LB_LOCK_DIR" 2>/dev/null; then | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 226 | printf '%s\\n' "$$" > "$_LB_LOCK_DIR/pid" 2>/dev/null || true | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 229 | rm -rf "$_LB_LOCK_DIR" >/dev/null 2>&1 || true | CODE |
| HIGH | src/langbot/pkg/entity/dto/space_model.py | 30 | # "metadata": null, | COMMENT |
| HIGH⚡ | src/langbot/pkg/api/http/controller/groups/system.py | 108 | { "step": int, "selected_adapter": str|null, "created_bot_uuid": str|null, | STRING |
| HIGH⚡ | src/langbot/pkg/api/http/controller/groups/system.py | 109 | "bot_saved": bool, "selected_runner": str|null } | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | run_tests.sh | 15 | # Check if pytest is installed | COMMENT |
| LOW | docker/deploy-k8s-test.sh | 20 | # Check if kubectl can connect to a cluster | COMMENT |
| LOW | tests/unit_tests/api/service/test_mcp_service.py | 527 | # Set mcp_tool_loader to None, not tool_mgr itself | COMMENT |
| LOW | tests/e2e/utils/process_manager.py | 70 | # Set COVERAGE_PROCESS_START to enable coverage in subprocess | COMMENT |
| LOW | tests/e2e/utils/process_manager.py | 118 | # Check if process died | STRING |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 34 | # Check if session exists, if not, record session start | COMMENT |
| LOW | src/langbot/pkg/pipeline/aggregator.py | 185 | # Check if buffer reached max capacity | COMMENT |
| LOW | src/langbot/pkg/pipeline/preproc/preproc.py | 182 | # Check if this model supports vision, if not, remove all images | COMMENT |
| LOW | src/langbot/pkg/core/stages/load_config.py | 61 | # Check if the environment variable is uppercase and contains __ | COMMENT |
| LOW | src/langbot/pkg/platform/webhook_pusher.py | 58 | # Check if any webhook responded with skip_pipeline=true | COMMENT |
| LOW | src/langbot/pkg/platform/webhook_pusher.py | 105 | # Check if any webhook responded with skip_pipeline=true | COMMENT |
| LOW | src/langbot/pkg/platform/sources/kook.py | 342 | # Check if this is a message event | COMMENT |
| LOW | src/langbot/pkg/platform/sources/qqofficial.py | 36 | # Check if it looks like base64 (only valid chars, reasonable length) | COMMENT |
| LOW | src/langbot/pkg/platform/sources/line.py | 232 | # Check if signature header exists | COMMENT |
| LOW | src/langbot/pkg/platform/sources/satori.py | 308 | # Check if it's a private/direct message | COMMENT |
| LOW | src/langbot/pkg/platform/sources/satori.py | 311 | # Check if it's a group message | COMMENT |
| LOW | src/langbot/pkg/platform/sources/satori.py | 720 | # Check if it's a private/direct message | COMMENT |
| LOW | src/langbot/pkg/platform/sources/satori.py | 724 | # Check if it's a group message | COMMENT |
| LOW | src/langbot/pkg/platform/sources/aiocqhttp.py | 532 | # Check if message contains a Forward component | COMMENT |
| LOW | src/langbot/pkg/plugin/handler.py | 656 | # Read file from storage | COMMENT |
| LOW | src/langbot/pkg/plugin/connector.py | 266 | # Check if MCP server already exists | COMMENT |
| LOW | …/langbot/pkg/provider/tools/loaders/skill_authoring.py | 34 | # Check if sandbox backend is available (same check as native tools) | COMMENT |
| LOW | src/langbot/pkg/provider/modelmgr/modelmgr.py | 82 | # Check if space models service is disabled | COMMENT |
| LOW | src/langbot/pkg/provider/modelmgr/modelmgr.py | 345 | # Check if requester manifest specifies litellm_provider | COMMENT |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 1016 | # Check if this is a form action resume (button click or text match) | COMMENT |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 1523 | # Check if this is a form action resume (button click or text match) | COMMENT |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 1652 | # Check if this is a form action resume (button click or text match) | COMMENT |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 2108 | # Check if this is a form action resume (button click or text match) | COMMENT |
| LOW | …persistence/alembic/versions/0003_add_rerank_models.py | 18 | # Check if table already exists (may have been created by create_all()) | COMMENT |
| LOW | src/langbot/pkg/api/http/controller/groups/user.py | 77 | # Check if password change is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/controller/groups/user.py | 198 | # Check if modifying login info is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/controller/groups/user.py | 227 | # Check if modifying login info is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 75 | # Check if this user has a local password set | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 138 | # Check if user with this Space UUID already exists | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 156 | # Check if user with same email exists | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 175 | # Check if system is already initialized | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 277 | # Check if this Space account is already bound to another user | COMMENT |
| LOW | src/langbot/pkg/api/http/service/provider.py | 105 | # Check if any models use this provider | COMMENT |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 443 | # Check if any rows were updated | COMMENT |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 1684 | # Check if record with this feedback_id already exists | COMMENT |
| LOW | src/langbot/pkg/api/http/service/space.py | 48 | # Check if token is expired (with 60s buffer) | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/milvus.py | 138 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/milvus.py | 413 | # Check if collection exists before attempting deletion | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 54 | # Check if database exists using public API | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 131 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 238 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 343 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 444 | # Check if collection exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker/kubernetes.yaml | 2 | # This file provides Kubernetes deployment manifests for LangBot based on docker-compose.yaml | COMMENT |
| MEDIUM | tests/smoke/test_fake_message_flow.py | 53 | # Create a simple query | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_wrapper.py | 174 | # Create a command response message | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_wrapper.py | 212 | # Create a plugin response message | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_longtext.py | 261 | # Create a mock adapter with bot_account_id | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_chat_handler.py | 37 | # Create a default runner that yields a simple response | COMMENT |
| MEDIUM | tests/unit_tests/plugin/test_connector_pure.py | 36 | # Create a mock zip file with requirements.txt | COMMENT |
| MEDIUM | tests/unit_tests/utils/test_image.py | 88 | # Create a simple base64 string | COMMENT |
| MEDIUM | …unit_tests/storage/test_localstorage_path_traversal.py | 54 | # Create a file outside the storage directory | COMMENT |
| MEDIUM⚡ | …unit_tests/storage/test_localstorage_path_traversal.py | 186 | # Create a directory with files | COMMENT |
| MEDIUM | tests/unit_tests/persistence/test_serialize_model.py | 24 | # Create a simple test model | COMMENT |
| MEDIUM | tests/unit_tests/persistence/test_serialize_model.py | 43 | # Create a mock persistence manager | COMMENT |
| MEDIUM | tests/unit_tests/persistence/test_mgr_methods.py | 70 | # Create a mock result with actual attributes to simulate real result | COMMENT |
| MEDIUM | …sts/unit_tests/api/service/test_maintenance_service.py | 46 | # Create a proper mock object with __class__.__name__ | COMMENT |
| MEDIUM⚡ | tests/integration_tests/box/test_box_mcp_integration.py | 347 | # Create a session (container gets current instance ID label) | COMMENT |
| MEDIUM | tests/integration/pipeline/test_full_flow.py | 192 | # Create a simple class to mimic Prompt behavior | COMMENT |
| MEDIUM | tests/factories/message.py | 393 | # Create a default session | COMMENT |
| MEDIUM | src/langbot/pkg/skill/activation.py | 13 | # This file is kept for potential future extensions but the text marker | COMMENT |
| MEDIUM | src/langbot/pkg/platform/sources/lark.py | 317 | # Create a temporary file to store the image bytes | COMMENT |
| MEDIUM | …/langbot/pkg/provider/tools/loaders/skill_authoring.py | 145 | # Create the skill | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ponents/api-integration-dialog/ApiIntegrationPanel.tsx | 504 | {`X-API-Key: <your-api-key> | CODE |
| HIGH | …ponents/api-integration-dialog/ApiIntegrationPanel.tsx | 506 | Authorization: Bearer <your-api-key>`} | CODE |
| HIGH | …ponents/api-integration-dialog/ApiIntegrationPanel.tsx | 522 | "headers": { "X-API-Key": "<your-api-key>" } | CODE |
| HIGH | src/langbot/templates/default-pipeline-config.json | 64 | "api-key": "your-api-key", | CODE |
| HIGH | src/langbot/templates/default-pipeline-config.json | 69 | "api-key": "your-api-key", | CODE |
| HIGH | src/langbot/templates/default-pipeline-config.json | 87 | "api-key": "your-api-key", | CODE |
| HIGH | src/langbot/templates/metadata/pipeline/ai.yaml | 327 | default: 'your-api-key' | CODE |
| HIGH | src/langbot/templates/metadata/pipeline/ai.yaml | 593 | default: 'your-api-key' | CODE |
| HIGH | src/langbot/templates/metadata/pipeline/ai.yaml | 638 | default: 'your-api-key' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/factories/__init__.py | 59 | __all__ = [ | CODE |
| LOW | tests/e2e/conftest.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/e2e/utils/process_manager.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 308 | def set_card_action_callback(self, callback: Callable) -> None: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 317 | def set_card_source(self, source: Optional[dict]) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1621 | def set_card_source(self, source: Optional[dict]) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1626 | def set_feedback_callback(self, callback: Callable) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1634 | def set_card_action_callback(self, callback: Callable) -> None: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 134 | def set_pending_form(self, stream_id: str, form_data: dict, task_id: str) -> None: | CODE |
| LOW | src/langbot/libs/weknora_api/__init__.py | 4 | __all__ = ['AsyncWeKnoraClient', 'WeKnoraAPIError'] | CODE |
| LOW | src/langbot/libs/dify_service_api/__init__.py | 4 | __all__ = ['client', 'errors'] | CODE |
| LOW | src/langbot/libs/deerflow_api/__init__.py | 5 | __all__ = ['AsyncDeerFlowClient', 'DeerFlowAPIError', 'stream_utils'] | CODE |
| LOW | src/langbot/pkg/pipeline/config_coercion.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/pkg/box/__init__.py | 5 | __all__ = ['BoxWorkspaceSession'] | CODE |
| LOW | src/langbot/pkg/skill/__init__.py | 3 | __all__ = ['SkillManager'] | CODE |
| LOW | …c/langbot/pkg/platform/sources/web_page_bot_adapter.py | 35 | def set_ws_adapter(self, ws_adapter) -> None: | CODE |
| LOW | src/langbot/pkg/platform/sources/websocket_adapter.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/pkg/platform/sources/http_bot.py | 114 | def set_bot_uuid(self, bot_uuid: str) -> None: | CODE |
| LOW | src/langbot/pkg/platform/sources/websocket_manager.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 75 | def _set_pending_form(session_key: PendingFormKey, form_data: dict[str, typing.Any]) -> None: | CODE |
| LOW | …/alembic/versions/0008_add_mcp_resource_preferences.py | 52 | def _update_preferences(conn: sa.Connection, uuid: str, preferences: dict[str, Any]) -> None: | CODE |
| LOW | src/langbot/pkg/api/mcp/__init__.py | 14 | __all__ = ['LangBotMCPServer'] | CODE |
| LOW | …gbot/pkg/api/http/controller/groups/pipelines/embed.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | …api/http/controller/groups/pipelines/websocket_chat.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/pkg/api/http/service/user.py | 234 | async def set_password(self, user_email: str, new_password: str, current_password: str | None = None) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/provider.py | 90 | async def update_provider(self, provider_uuid: str, provider_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/provider.py | 198 | async def update_space_model_provider_api_keys(self, api_key: str) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/model.py | 198 | async def update_llm_model(self, model_uuid: str, model_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/model.py | 362 | async def update_embedding_model(self, model_uuid: str, model_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/model.py | 522 | async def update_rerank_model(self, model_uuid: str, model_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/bot.py | 121 | async def update_bot(self, bot_uuid: str, bot_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/mcp.py | 90 | async def update_mcp_server(self, server_uuid: str, server_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/pipeline.py | 117 | async def update_pipeline(self, pipeline_uuid: str, pipeline_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/apikey.py | 86 | async def update_api_key(self, key_id: int, name: str = None, description: str = None) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/knowledge.py | 154 | async def update_knowledge_base(self, kb_uuid: str, kb_data: dict) -> None: | CODE |
| LOW⚡ | src/langbot/pkg/telemetry/features.py | 49 | def set_value(query: pipeline_query.Query, group: str, value: typing.Any) -> None: | CODE |
| LOW | src/langbot/pkg/vector/filter_utils.py | 21 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/docker-compose.yaml | 21 | # The Box sandbox runtime is optional. It is only started when you run | COMMENT |
| LOW | docker/kubernetes.yaml | 1 | # Kubernetes Deployment for LangBot | COMMENT |
| LOW | docker/kubernetes.yaml | 181 | --- | COMMENT |
| LOW | docker/kubernetes.yaml | 481 | targetPort: 2289 | COMMENT |
| LOW | docker/kubernetes.yaml | 501 | # spec: | COMMENT |
| LOW | docker/kubernetes.yaml | 521 | # Service for LangBot with LoadBalancer (Alternative to Ingress) | COMMENT |
| LOW | docker/kubernetes.yaml | 541 | # targetPort: 2280 | COMMENT |
| LOW | docker/kubernetes.yaml | 561 | # ports: | COMMENT |
| LOW | web/src/app/infra/entities/api/index.ts | 301 | // name: string; | COMMENT |
| LOW | web/src/i18n/I18nProvider.tsx | 41 | // 工具函数:将 i18n 语言代码转换为 API 语言代码 | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 121 | COMMENT | |
| LOW | src/langbot/pkg/pipeline/preproc/preproc.py | 261 | COMMENT | |
| LOW | src/langbot/pkg/box/service.py | 341 | # IM/webchat attachments (images, voices, files) reach the LLM as | COMMENT |
| LOW | src/langbot/pkg/core/stages/load_config.py | 121 | # if os.path.exists('data/config/pipeline.json'): | COMMENT |
| LOW | src/langbot/pkg/core/stages/load_config.py | 141 | COMMENT | |
| LOW | src/langbot/pkg/entity/dto/space_model.py | 1 | # [ | COMMENT |
| LOW | src/langbot/pkg/entity/dto/space_model.py | 21 | # "output_credits": 2500, | COMMENT |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 121 | # Voice with speech-to-text: use the transcribed text | COMMENT |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 141 | # platform_message.Voice( | COMMENT |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 161 | # ) | COMMENT |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 541 | and item.image_item.media.encrypt_query_param | COMMENT |
| LOW | src/langbot/pkg/platform/sources/dingtalk.py | 481 | ) | COMMENT |
| LOW | src/langbot/pkg/platform/sources/qqofficial.py | 221 | self._ws_task: asyncio.Task = None | COMMENT |
| LOW | src/langbot/pkg/provider/tools/loaders/mcp_stdio.py | 261 | ) | COMMENT |
| LOW | …angbot/pkg/persistence/alembic/versions/0002_sample.py | 21 | def upgrade() -> None: | COMMENT |
| LOW | …angbot/pkg/persistence/alembic/versions/0002_sample.py | 41 | # {"cfg": json.dumps(config), "uuid": row[0]} | COMMENT |
| LOW | src/langbot/pkg/command/operators/list.py | 1 | # from __future__ import annotations | COMMENT |
| LOW | src/langbot/pkg/command/operators/list.py | 21 | # return | COMMENT |
| LOW | src/langbot/pkg/command/operators/list.py | 41 | # index += 1 | COMMENT |
| LOW | src/langbot/pkg/command/operators/delc.py | 1 | # from __future__ import annotations | COMMENT |
| LOW | src/langbot/pkg/command/operators/delc.py | 21 | # return | COMMENT |
| LOW | src/langbot/pkg/command/operators/delc.py | 41 | # class DelAllOperator(operator.CommandOperator): | COMMENT |
| LOW | src/langbot/pkg/command/operators/resend.py | 1 | # from __future__ import annotations | COMMENT |
| LOW | src/langbot/pkg/command/operators/resend.py | 21 | # while len(conv_msg) > 0 and conv_msg[-1].role != 'user': | COMMENT |
| LOW | src/langbot/pkg/command/operators/last.py | 1 | # from __future__ import annotations | COMMENT |
| LOW | src/langbot/pkg/command/operators/last.py | 21 | # error=command_errors.CommandOperationError('已经是第一个对话了') | COMMENT |
| LOW | src/langbot/pkg/command/operators/prompt.py | 1 | # from __future__ import annotations | COMMENT |
| LOW | src/langbot/pkg/command/operators/next.py | 1 | # from __future__ import annotations | COMMENT |
| LOW | src/langbot/pkg/command/operators/next.py | 21 | # ) | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/valkey_search.py | 41 | # default is 250ms, which is too low for vector KNN (``FT.SEARCH ... =>[KNN]``) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …p/home/knowledge/components/kb-docs/FileUploadZone.tsx | 86 | // Step 1: Upload file to server | COMMENT |
| LOW⚡ | …p/home/knowledge/components/kb-docs/FileUploadZone.tsx | 89 | // Step 2: Associate file with knowledge base (with optional parser) | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 740 | // Step 0: Select Platform | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 841 | // Step 1: Bot Configuration + Logs | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 994 | // Step 2: Select & Configure AI Engine | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1176 | // Step 3: Done | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 137 | # Step 1: Submit the form | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 152 | # Step 2: Stream resumed workflow events | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 377 | # Step 1: Init — get nonce | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 394 | # Step 2: Begin — get device_code + QR URL | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 421 | # Step 3: Poll for authorization result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 572 | # Step 1: Generate QR code | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 595 | # Step 2: Poll for scan result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 748 | # Step 1: create_bind_task — register our AES key, get task_id | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 782 | # Step 2: poll_bind_result until completed (status=2) or expired (3). | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 124 | # Step 1: Install all required plugins from marketplace | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 135 | # Step 2: Wait for all plugins to become available as knowledge engines | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 166 | # Step 3: Restore internal knowledge bases from backup | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 221 | # Step 4: Restore external knowledge bases | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 309 | # Step 5: Clear migration flag | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ARCHITECTURE.md | 139 | ## Provider, RAG, and Tools | COMMENT |
| MEDIUM | tests/README.md | 101 | │ ├── rag/ # RAG tests | CODE |
| MEDIUM | tests/unit_tests/provider/test_litellmchat.py | 1089 | # Check embedding model is detected | COMMENT |
| MEDIUM | tests/unit_tests/api/service/test_provider_service.py | 369 | embedding_result.first = Mock(return_value=Mock(spec=EmbeddingModel)) # Has embedding model | CODE |
| MEDIUM | tests/integration/api/test_knowledge.py | 108 | # RAG manager | COMMENT |
| MEDIUM | …s/langbot-testing/references/langrag-knowledge-base.md | 63 | ## Local-Agent RAG Check | COMMENT |
| MEDIUM | src/langbot/pkg/core/stages/build_app.py | 171 | # Initialize RAG Runtime Service for plugins | COMMENT |
| MEDIUM | src/langbot/pkg/entity/persistence/rag.py | 13 | # New fields for plugin-based RAG | COMMENT |
| MEDIUM | src/langbot/pkg/plugin/handler.py | 507 | # ================= RAG Capability Handlers ================= | COMMENT |
| MEDIUM | src/langbot/pkg/plugin/handler.py | 1176 | # ================= RAG Capability Callers (LangBot -> Runtime) ================= | COMMENT |
| MEDIUM | src/langbot/pkg/provider/runners/localagent.py | 41 | # generously so it never interrupts legitimate multi-step agentic workflows. | STRING |
| MEDIUM | src/langbot/pkg/vector/vdbs/valkey_search.py | 54 | # Fixed, indexed metadata schema. LangBot's RAG layer stores ``file_id`` on | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …p/home/knowledge/components/kb-docs/FileUploadZone.tsx | 86 | // Step 1: Upload file to server | COMMENT |
| LOW⚡ | …p/home/knowledge/components/kb-docs/FileUploadZone.tsx | 89 | // Step 2: Associate file with knowledge base (with optional parser) | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 740 | // Step 0: Select Platform | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 841 | // Step 1: Bot Configuration + Logs | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 994 | // Step 2: Select & Configure AI Engine | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1176 | // Step 3: Done | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 137 | # Step 1: Submit the form | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 152 | # Step 2: Stream resumed workflow events | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 377 | # Step 1: Init — get nonce | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 394 | # Step 2: Begin — get device_code + QR URL | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 421 | # Step 3: Poll for authorization result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 572 | # Step 1: Generate QR code | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 595 | # Step 2: Poll for scan result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 748 | # Step 1: create_bind_task — register our AES key, get task_id | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 782 | # Step 2: poll_bind_result until completed (status=2) or expired (3). | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 124 | # Step 1: Install all required plugins from marketplace | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 135 | # Step 2: Wait for all plugins to become available as knowledge engines | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 166 | # Step 3: Restore internal knowledge bases from backup | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 221 | # Step 4: Restore external knowledge bases | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 309 | # Step 5: Clear migration flag | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/langbot/libs/openclaw_weixin_api/client.py | 564 | Complete QR code login flow with auto-retry on expiry. Args: max_retries: Max number of QR code ref | STRING |
| HIGH | src/langbot/pkg/platform/sources/discord.py | 181 | 加入语音频道 验证用户权限和频道状态后,建立到指定语音频道的连接。 支持连接复用和自动重连机制。 @author: @ydzat Args: | STRING |
| HIGH | src/langbot/pkg/platform/sources/discord.py | 973 | 加入语音频道 为指定服务器的语音频道建立连接,支持用户权限验证和连接复用。 @author: @ydzat @version: 1.0 @since: 2 | STRING |
| HIGH | src/langbot/pkg/plugin/connector.py | 850 | Parse a plugin ID string into (author, name). Args: plugin_id: Plugin ID in 'author/name' format. | STRING |
| HIGH | src/langbot/pkg/utils/image.py | 24 | 从gewechat服务器获取图片并转换为base64格式 Args: gewechat_url (str): gewechat服务器地址(用于获取图片URL) gewechat_file_url ( | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | web/src/app/home/layout.tsx | 56 | // Map a /home route to the i18n key for its type-level title. Used as a robust | COMMENT |
| MEDIUM | tests/unit_tests/utils/test_paths.py | 37 | # ``main.py`` instead of relying on the cwd. That makes it robust to where | COMMENT |
| LOW | tests/unit_tests/api/service/test_pipeline_service.py | 439 | # First call is the UPDATE - just return a Mock | COMMENT |
| LOW | src/langbot/pkg/platform/sources/kook.py | 136 | # If download fails, just add as plain text | COMMENT |
| LOW | src/langbot/pkg/platform/sources/kook.py | 155 | # Other message types, just use content as plain text | COMMENT |
| LOW | src/langbot/pkg/platform/sources/telegram.py | 353 | # If edit fails (e.g. message too long), just pass | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/api/service/test_bot_service.py | 23 | CODE | |
| LOW | scripts/build_dingtalk_card_template.py | 275 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 606 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 819 | CODE | |
| LOW | src/langbot/pkg/box/workspace.py | 274 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 933 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1078 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1165 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1174 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1187 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1206 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1215 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1262 | CODE | |
| LOW | src/langbot/pkg/rag/knowledge/kbmgr.py | 351 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 205 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 292 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 1634 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit_tests/pipeline/test_chat_handler.py | 336 | CODE | |
| MEDIUM | tests/unit_tests/pipeline/test_chat_handler.py | 384 | CODE | |
| MEDIUM | tests/unit_tests/pipeline/test_chat_handler.py | 429 | CODE | |
| MEDIUM | …s/unit_tests/provider/runners/test_difysvapi_runner.py | 27 | CODE | |
| MEDIUM | src/langbot/pkg/provider/runners/localagent.py | 276 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/tests/e2e/login.spec.ts | 13 | await page.getByPlaceholder('Enter email address').fill('admin@example.com'); | CODE |
| LOW | …c/app/home/components/home-sidebar/FeedbackPopover.tsx | 137 | placeholder={tf('placeholder')} | CODE |
| LOW | tests/unit_tests/box/test_box_service.py | 1324 | spec = BoxSpec.model_validate({'cmd': 'placeholder', 'session_id': 'r-create-1'}) | CODE |
| LOW | tests/integration/api/test_smoke.py | 96 | app.user_service.authenticate = AsyncMock(return_value='fake_token') | CODE |
| LOW | tests/integration/api/test_smoke.py | 100 | app.user_service.generate_jwt_token = AsyncMock(return_value='fake_token') | CODE |
| LOW | scripts/build_dingtalk_card_template.py | 158 | 'placeholder': _dynamic_string_var('input_placeholder'), | CODE |
| LOW | scripts/build_dingtalk_card_template.py | 221 | 'placeholder': _dynamic_string_var('select_placeholder'), | CODE |
| LOW | src/langbot/pkg/platform/sources/lark.py | 2326 | 'placeholder': {'tag': 'plain_text', 'content': '请选择'}, | CODE |
| LOW | src/langbot/pkg/platform/sources/lark.py | 2360 | 'placeholder': {'tag': 'plain_text', 'content': '请输入'}, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/langbot/libs/official_account_api/api.py | 172 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 360 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 2125 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 272 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/wecom_api/api.py | 303 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/slack_api/api.py | 123 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW⚡ | src/langbot/libs/qq_official_api/api.py | 278 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/kubernetes.yaml | 6 | # Usage: | COMMENT |