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 17,599 GitHub stars. SynthScan v2.0 examined 327,497 lines of code across 1285 source files, recording 5354 pattern matches distributed across 23 syntactic categories. The overall adjusted score of 18.9 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 5354 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 | …/plugins/components/plugin-market/marketplace-likes.ts | 23 | export function getMarketplaceFingerprint(): Promise<string> { | CODE |
| LOW | …/plugins/components/plugin-market/marketplace-likes.ts | 62 | export async function getMarketplaceExtensionLiked( | CODE |
| LOW | …/plugins/components/plugin-market/marketplace-likes.ts | 71 | export async function toggleMarketplaceExtensionLike( | CODE |
| LOW | …/plugins/components/plugin-market/marketplace-likes.ts | 109 | export function subscribeMarketplaceLikeChanges( | CODE |
| LOW | …arket/plugin-market-card/PluginMarketCardComponent.tsx | 22 | 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 | 230 | function createEmptyListExpansionState(): SidebarListExpansionState { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 307 | async function refreshEnabledMCPConnections() { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 508 | function handleListExpansionToggle(id: EntityCategoryId, expanded: boolean) { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 1761 | function handleSettingsSectionChange(section: SettingsSection) { | CODE |
| LOW | …/src/app/home/components/models-dialog/ModelsPanel.tsx | 191 | async function loadRequesterSupportTypes() { | CODE |
| LOW | …home/components/dynamic-form/ToolResourceSelectors.tsx | 141 | function hasReliableSourceMetadata(tool: PluginTool) { | CODE |
| LOW | …/home/components/dynamic-form/DynamicFormSaveValues.ts | 33 | export function normalizeDynamicFormFieldValue( | CODE |
| LOW | …/home/components/dynamic-form/DynamicFormSaveValues.ts | 93 | function normalizeModelFallbackValue(value: unknown): { | CODE |
| LOW | …/home/components/dynamic-form/DynamicFormSaveValues.ts | 137 | export function normalizeDynamicFormValuesForSave( | 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 | 532 | async function handleGithubAddressSubmit() { | CODE |
| LOW | web/src/app/infra/http/currentWorkspaceStore.ts | 7 | export function getCurrentWorkspaceSnapshot(): CurrentWorkspace | null { | CODE |
| LOW | web/src/app/infra/http/currentWorkspaceStore.ts | 11 | export function setCurrentWorkspaceSnapshot( | CODE |
| LOW | web/src/app/infra/http/index.ts | 209 | export function beginAuthenticatedSession( | CODE |
| LOW | web/src/app/infra/http/index.ts | 248 | async function initializeSelectedWorkspace( | CODE |
| LOW | web/src/app/infra/http/index.ts | 276 | export async function bootstrapWorkspaceSession( | CODE |
| LOW⚡ | web/src/app/infra/http/workspaceBootstrapStore.ts | 8 | export function getWorkspaceBootstrapSnapshot(): WorkspaceBootstrapEntry[] { | CODE |
| LOW⚡ | web/src/app/infra/http/workspaceBootstrapStore.ts | 12 | export function setWorkspaceBootstrapSnapshot( | CODE |
| LOW⚡ | web/src/app/infra/http/workspaceBootstrapStore.ts | 19 | export function clearWorkspaceBootstrapSnapshot(): void { | CODE |
| LOW⚡ | web/src/app/infra/http/workspaceContext.ts | 36 | export function getPendingInvitationToken(): string | null { | CODE |
| LOW⚡ | web/src/app/infra/http/workspaceContext.ts | 42 | export function setPendingInvitationToken(token: string): void { | CODE |
| LOW⚡ | web/src/app/infra/http/workspaceContext.ts | 50 | export function clearPendingInvitationToken(): void { | CODE |
| LOW | web/src/app/auth/space/callback/page.tsx | 43 | function getOrCreateSpaceOAuthLoginPromise( | CODE |
| LOW | web/src/app/auth/space/callback/page.tsx | 43 | function getOrCreateSpaceOAuthLoginPromise( | CODE |
| LOW | web/src/app/auth/space/callback/page.tsx | 65 | function SpaceOAuthCallbackContent() { | CODE |
| LOW | web/src/app/wizard/utils.ts | 20 | export function ensureHttpBotSigningSecret( | CODE |
| LOW | web/src/app/wizard/utils.ts | 88 | export function isRequiredRunnerConfigComplete( | CODE |
| LOW | web/src/app/wizard/utils.ts | 108 | export function configureLocalAgentPrimaryModel( | CODE |
| LOW | web/src/app/invitations/accept/page.tsx | 65 | function captureInvitationTokenFromFragment(): string | null { | CODE |
| LOW | web/src/hooks/useAuthenticatedPluginResource.ts | 17 | export function useAuthenticatedPluginIcon( | CODE |
| LOW | web/src/hooks/useAuthenticatedPluginResource.ts | 63 | export function useAuthenticatedPluginAsset( | 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_optional_dependencies.py | 7 | def test_seekdb_is_only_declared_as_an_optional_dependency() -> None: | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 54 | async def test_create_skill_refused_when_box_disabled(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 60 | async def test_create_skill_refused_when_box_failed(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 66 | async def test_update_skill_refused_when_box_disabled(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 72 | async def test_write_skill_file_refused_when_box_disabled(self): | CODE |
| LOW⚡ | tests/unit_tests/test_skill_service.py | 78 | async def test_install_from_github_refused_when_box_disabled(self): | CODE |
| 3325 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration_tests/box/test_box_mcp_integration.py | 74 | except Exception: | CODE |
| LOW | tests/integration_tests/box/test_box_integration.py | 62 | except Exception: | CODE |
| LOW | tests/integration/persistence/test_migrations.py | 339 | except Exception as e: | CODE |
| LOW⚡ | …ts/integration/persistence/test_migrations_postgres.py | 283 | except Exception: | CODE |
| LOW⚡ | …ts/integration/persistence/test_migrations_postgres.py | 291 | 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 | scripts/cloud_runtime_soak.py | 979 | except Exception as exc: | CODE |
| LOW | skills/skills/langbot-plugin-dev/SKILL.md | 164 | except Exception: | CODE |
| LOW | src/langbot/libs/wechatpad_api/util/http_util.py | 48 | except Exception as e: | CODE |
| LOW | src/langbot/libs/wechatpad_api/util/http_util.py | 71 | except Exception as e: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 200 | except Exception: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 431 | except Exception: | CODE |
| LOW | src/langbot/libs/openclaw_weixin_api/client.py | 233 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/openclaw_weixin_api/client.py | 622 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/openclaw_weixin_api/client.py | 632 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/openclaw_weixin_api/client.py | 642 | 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 | 356 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 366 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 376 | except Exception as e: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 160 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 176 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 537 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 584 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 611 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 663 | except Exception as e: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 758 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 808 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 857 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 896 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 948 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 1002 | except Exception as e: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 1026 | except Exception: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 836 | except Exception: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 842 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 197 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 421 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 450 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 711 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 820 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 944 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 1015 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 1033 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 1080 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 1094 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 1120 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 1176 | except Exception as e: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 450 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 457 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 998 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1764 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1827 | 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 | 2020 | except Exception: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 2025 | except Exception: | CODE |
| 589 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/smoke/test_fake_message_flow.py | 10 | CODE | |
| LOW | tests/unit_tests/test_optional_dependencies.py | 1 | 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_banwords.py | 8 | 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_controller_tenancy.py | 1 | 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_box_admission.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_app_shutdown.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_resource_maintenance.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 | tests/unit_tests/platform/test_dingtalk_adapter.py | 8 | CODE | |
| LOW | tests/unit_tests/platform/test_line_session_identity.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_line_session_identity.py | 8 | CODE | |
| LOW | tests/unit_tests/platform/test_webhook_pusher.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_wechatpad_limits.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_botmgr_tenancy.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_discord_limits.py | 1 | CODE | |
| LOW | …sts/unit_tests/platform/test_openclaw_weixin_client.py | 1 | CODE | |
| LOW | …t_tests/platform/test_websocket_adapter_attachments.py | 10 | CODE | |
| LOW | tests/unit_tests/platform/test_qqofficial_api.py | 64 | CODE | |
| LOW | tests/unit_tests/platform/test_qqofficial_api.py | 308 | CODE | |
| LOW | tests/unit_tests/platform/test_http_bot_tenancy.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_wecomcs_api.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_line_limits.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_line_limits.py | 6 | CODE | |
| LOW | tests/unit_tests/platform/test_wecombot_media.py | 5 | CODE | |
| LOW | tests/unit_tests/platform/test_matrix_limits.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_kook_limits.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_wecom_api_limits.py | 1 | CODE | |
| LOW | …s/unit_tests/workspace/test_workspace_collaboration.py | 1 | CODE | |
| LOW | tests/unit_tests/workspace/test_workspace_service.py | 1 | CODE | |
| LOW | tests/unit_tests/workspace/test_invitation_delivery.py | 1 | CODE | |
| LOW | tests/unit_tests/plugin/test_connector_methods.py | 10 | CODE | |
| 493 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/unit_tests/pipeline/test_n8nsvapi.py | 96 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/pipeline/test_n8nsvapi.py | 98 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/pipeline/test_n8nsvapi.py | 179 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/pipeline/test_n8nsvapi.py | 181 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_n8nsvapi.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_n8nsvapi.py | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_n8nsvapi.py | 261 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/pipeline/test_n8nsvapi.py | 263 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/box/test_box_service.py | 1723 | # ── BoxHostMountMode.NONE tests ───────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit_tests/box/test_box_service.py | 2039 | # ── Attachment passthrough (inbound / outbound) ───────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 948 | # ── Truncation tests ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1071 | # ── Profile tests ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1373 | # ── Observability tests ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1474 | # ── In-process RPC client/server tests ───────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1638 | # ── 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 | 187 | # ── MCPServerBoxConfig ────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 235 | # ── Path Rewriting ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 336 | # ── host_path Inference ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 383 | # ── Build Box Session Payload ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 454 | # ── Build Box Process Payload ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 512 | # ── Python Workspace Preparation ──────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 590 | # ── get_runtime_info_dict ─────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/provider/test_mcp_box_integration.py | 915 | # ── Box config parsing ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 31 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 33 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 132 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 134 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 250 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 252 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 357 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 359 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 485 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 487 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 574 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 576 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 667 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 669 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 744 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 746 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 837 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 839 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 912 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_model_manager.py | 914 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 172 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 174 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 236 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 238 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 388 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 390 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 415 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 417 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 431 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 433 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 447 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 449 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 467 | # ============================================================================ | COMMENT |
| 78 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/unit_tests/provider/test_mcp_box_integration.py | 1052 | 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 | 237 | kb.ap.storage_mgr.storage_provider.save.assert_not_awaited() | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 238 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with(_upload_key('archive.zip')) | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 255 | kb.ap.storage_mgr.storage_provider.save.assert_not_awaited() | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 256 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with(_upload_key('archive.zip')) | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 301 | kb.ap.storage_mgr.storage_provider.size.assert_awaited_once_with(object_key) | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 304 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with(object_key) | CODE |
| CRITICAL⚡ | tests/unit_tests/rag/test_file_storage.py | 318 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with(object_key) | CODE |
| CRITICAL | tests/unit_tests/rag/test_file_storage.py | 101 | kb.ap.storage_mgr.storage_provider.exists.assert_awaited_once_with(object_key) | CODE |
| CRITICAL | tests/unit_tests/rag/test_file_storage.py | 132 | kb.ap.storage_mgr.storage_provider.exists.assert_not_awaited() | CODE |
| CRITICAL | tests/unit_tests/rag/test_file_storage.py | 154 | kb.ap.storage_mgr.storage_provider.exists.assert_not_awaited() | CODE |
| CRITICAL | tests/unit_tests/rag/test_file_storage.py | 209 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with(zip_key) | CODE |
| CRITICAL | tests/unit_tests/rag/test_file_storage.py | 223 | kb.ap.storage_mgr.storage_provider.delete.assert_awaited_once_with(_upload_key('archive.zip')) | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/sources/lark.py | 1597 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/sources/lark.py | 3176 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1383 | response: CreateAppAccessTokenResponse = self.api_client.auth.v3.app_access_token.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1416 | response: CreateTenantAccessTokenResponse = self.api_client.auth.v3.tenant_access_token.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1570 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1860 | response: CreateCardResponse = self.api_client.cardkit.v1.card.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1916 | 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 | 2099 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2137 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2287 | response: ContentCardElementResponse = await self.api_client.cardkit.v1.card_element.acontent( | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2391 | media_response: ReplyMessageResponse = await self.api_client.im.v1.message.areply( | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2893 | response: UpdateCardResponse = await self.api_client.cardkit.v1.card.aupdate(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/api/http/service/mcp.py | 265 | self.ap.tool_mgr.mcp_tool_loader._hosted_mcp_tasks.append(task) | CODE |
| 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 | 138 | CODE | |
| LOW | tests/unit_tests/provider/test_model_manager.py | 673 | CODE | |
| LOW | tests/unit_tests/provider/test_model_manager.py | 143 | CODE | |
| LOW | tests/unit_tests/provider/test_model_manager.py | 677 | CODE | |
| LOW | tests/unit_tests/provider/test_mcp_remote_transport.py | 37 | CODE | |
| LOW | tests/unit_tests/persistence/test_tenant_uow.py | 382 | CODE | |
| LOW | tests/unit_tests/persistence/test_tenant_uow.py | 540 | CODE | |
| LOW | tests/unit_tests/persistence/test_tenant_uow.py | 611 | CODE | |
| LOW | tests/unit_tests/persistence/test_tenant_uow.py | 652 | CODE | |
| LOW | tests/unit_tests/persistence/test_tenant_uow.py | 922 | CODE | |
| LOW | tests/unit_tests/persistence/test_tenant_uow.py | 1004 | CODE | |
| LOW | tests/unit_tests/persistence/test_tenant_uow.py | 1038 | CODE | |
| LOW | …sts/unit_tests/api/service/test_maintenance_service.py | 528 | CODE | |
| LOW | tests/utils/import_isolation.py | 40 | CODE | |
| LOW | examples/http-bot/client.py | 138 | CODE | |
| LOW | scripts/cloud_runtime_soak.py | 223 | CODE | |
| LOW | scripts/cloud_runtime_soak.py | 290 | CODE | |
| LOW | scripts/cloud_runtime_soak.py | 340 | CODE | |
| LOW | scripts/cloud_runtime_soak.py | 371 | CODE | |
| LOW | scripts/cloud_runtime_soak.py | 449 | CODE | |
| LOW | scripts/cloud_runtime_soak.py | 589 | CODE | |
| LOW | scripts/cloud_runtime_soak.py | 889 | CODE | |
| LOW | src/langbot/libs/official_account_api/api.py | 114 | CODE | |
| LOW | src/langbot/libs/official_account_api/api.py | 340 | CODE | |
| LOW | src/langbot/libs/openclaw_weixin_api/client.py | 585 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/card_callback.py | 70 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 309 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 391 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 954 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 947 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 1160 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 398 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 462 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 916 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1536 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1802 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 2000 | CODE | |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 341 | CODE | |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 440 | CODE | |
| LOW | src/langbot/libs/wecom_api/api.py | 358 | CODE | |
| LOW | src/langbot/libs/wecom_api/api.py | 473 | CODE | |
| LOW | src/langbot/libs/wecom_api/api.py | 535 | CODE | |
| LOW | src/langbot/libs/wecom_api/api.py | 593 | CODE | |
| LOW | src/langbot/libs/slack_api/slackevent.py | 14 | CODE | |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 240 | CODE | |
| LOW | src/langbot/libs/coze_server_api/client.py | 136 | 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 | 256 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 583 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 966 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 985 | CODE | |
| LOW | src/langbot/pkg/pipeline/controller.py | 41 | CODE | |
| LOW | src/langbot/pkg/pipeline/controller.py | 109 | CODE | |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 25 | CODE | |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 107 | CODE | |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 135 | CODE | |
| 214 more matches not shown… | ||||
| 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 |
|---|---|---|---|---|
| HIGH | tests/unit_tests/box/test_workspace.py | 65 | assert '_LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)"' in command | CODE |
| HIGH | tests/unit_tests/provider/test_mcp_box_integration.py | 527 | assert '_LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)"' in command | CODE |
| HIGH⚡ | tests/unit_tests/provider/test_skill_tools.py | 302 | assert '_LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)"' in command | CODE |
| HIGH | tests/integration_tests/box/test_box_mcp_integration.py | 426 | 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 | 155 | _LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)" | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 220 | while ! mkdir "$_LB_LOCK_DIR" 2>/dev/null; do | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 222 | _LB_LOCK_OWNER="$(cat "$_LB_LOCK_DIR/pid" 2>/dev/null || true)" | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 223 | if [ -n "$_LB_LOCK_OWNER" ] && kill -0 "$_LB_LOCK_OWNER" 2>/dev/null; then | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 228 | rm -rf "$_LB_LOCK_DIR" 2>/dev/null || true | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 229 | if mkdir "$_LB_LOCK_DIR" 2>/dev/null; then | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 238 | printf '%s\\n' "$$" > "$_LB_LOCK_DIR/pid" 2>/dev/null || true | CODE |
| HIGH⚡ | src/langbot/pkg/box/workspace.py | 241 | 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 | 174 | { "step": int, "selected_adapter": str|null, "created_bot_uuid": str|null, | STRING |
| HIGH | src/langbot/pkg/api/http/controller/groups/system.py | 175 | "bot_saved": bool, "selected_runner": str|null } | STRING |
| 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 | 37 | # Create a mock zip file with requirements.txt | COMMENT |
| MEDIUM | tests/unit_tests/utils/test_image.py | 105 | # Create a simple base64 string | COMMENT |
| MEDIUM⚡ | tests/unit_tests/rag/test_runtime_service.py | 216 | # The following classes preserve the pre-tenancy regression scenarios. They | 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 | 195 | # 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 | 78 | # Create a proper mock object with __class__.__name__ | COMMENT |
| MEDIUM⚡ | tests/integration_tests/box/test_box_mcp_integration.py | 451 | # 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 | 407 | # Create a default session | COMMENT |
| MEDIUM | src/langbot/pkg/skill/activation.py | 14 | # This file is kept for potential future extensions but the text marker | COMMENT |
| MEDIUM | …/langbot/pkg/provider/tools/loaders/skill_authoring.py | 177 | # Create the skill | COMMENT |
| 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 | 735 | # 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 | 36 | # Check if session exists, if not, record session start | COMMENT |
| LOW | src/langbot/pkg/pipeline/preproc/preproc.py | 214 | # Check if this model supports vision, if not, remove all images | COMMENT |
| LOW | src/langbot/pkg/core/stages/load_config.py | 159 | # Check if the environment variable is uppercase and contains __ | COMMENT |
| LOW | src/langbot/pkg/platform/webhook_pusher.py | 117 | # Check if any webhook responded with skip_pipeline=true | COMMENT |
| LOW | src/langbot/pkg/platform/webhook_pusher.py | 168 | # Check if any webhook responded with skip_pipeline=true | COMMENT |
| LOW | src/langbot/pkg/platform/sources/kook.py | 370 | # 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 | 296 | # Check if signature header exists | COMMENT |
| LOW | src/langbot/pkg/platform/sources/satori.py | 319 | # Check if it's a private/direct message | COMMENT |
| LOW | src/langbot/pkg/platform/sources/satori.py | 322 | # Check if it's a group message | COMMENT |
| LOW | src/langbot/pkg/platform/sources/satori.py | 731 | # Check if it's a private/direct message | COMMENT |
| LOW | src/langbot/pkg/platform/sources/satori.py | 735 | # Check if it's a group message | COMMENT |
| LOW | src/langbot/pkg/platform/sources/aiocqhttp.py | 568 | # Check if message contains a Forward component | COMMENT |
| LOW | src/langbot/pkg/plugin/handler.py | 1403 | # Read file from storage | COMMENT |
| LOW | …/langbot/pkg/provider/tools/loaders/skill_authoring.py | 35 | # Check if sandbox backend is available (same check as native tools) | COMMENT |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 1160 | # Check if this is a form action resume (button click or text match) | COMMENT |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 1667 | # Check if this is a form action resume (button click or text match) | COMMENT |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 1796 | # Check if this is a form action resume (button click or text match) | COMMENT |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 2252 | # 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 | 110 | # Check if password change is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/controller/groups/user.py | 331 | # Check if modifying login info is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/controller/groups/user.py | 360 | # Check if modifying login info is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 395 | # Check if this user has a local password set | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 566 | # Check if user with this Space UUID already exists | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 585 | # Check if user with same email exists | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 595 | # Check if system is already initialized | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 825 | # Check if this Space account is already bound to another user | COMMENT |
| LOW | src/langbot/pkg/api/http/service/provider.py | 170 | # Check if any models use this provider | COMMENT |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 673 | # Check if any rows were updated | COMMENT |
| LOW | src/langbot/pkg/api/http/service/space.py | 78 | # Check if token is expired (with 60s buffer) | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/milvus.py | 146 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/milvus.py | 421 | # Check if collection exists before attempting deletion | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 63 | # Check if database exists using public API | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 148 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 270 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 380 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 496 | # Check if collection exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/docker-compose.yaml | 41 | # LANGBOT_BOX_ROOT with an absolute path if you do not want the default. | COMMENT |
| LOW | docker/kubernetes.yaml | 1 | # Kubernetes Deployment for LangBot | COMMENT |
| LOW | docker/kubernetes.yaml | 221 | # | COMMENT |
| LOW | docker/kubernetes.yaml | 581 | # name: langbot-ingress | COMMENT |
| LOW | docker/kubernetes.yaml | 601 | # # tls: | COMMENT |
| LOW | docker/kubernetes.yaml | 621 | # ports: | COMMENT |
| LOW | docker/kubernetes.yaml | 641 | # labels: | COMMENT |
| LOW | web/src/app/infra/entities/api/index.ts | 321 | } | COMMENT |
| LOW | web/src/i18n/I18nProvider.tsx | 41 | // 工具函数:将 i18n 语言代码转换为 API 语言代码 | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 141 | COMMENT | |
| LOW | src/langbot/templates/config.yaml | 1 | api: | COMMENT |
| LOW | src/langbot/templates/config.yaml | 61 | # Supports WEBHOOKS__MAX_INFLIGHT_REQUESTS (hard cap: 128). | COMMENT |
| LOW | src/langbot/templates/config.yaml | 301 | page_rows: 1000 | COMMENT |
| LOW | src/langbot/templates/config.yaml | 321 | # Number of expired rows to delete per table batch | COMMENT |
| LOW | src/langbot/pkg/box/service.py | 761 | if self.shares_filesystem_with_box: | COMMENT |
| LOW | src/langbot/pkg/box/service.py | 781 | # container), which has no size limit. This covers the local docker / | COMMENT |
| LOW | src/langbot/pkg/core/stages/load_config.py | 221 | async def run(self, ap: app.Application): | COMMENT |
| LOW | src/langbot/pkg/core/stages/load_config.py | 241 | # 'data/config/platform.json', | 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 | 141 | # components.append(platform_message.Plain(text=item.voice_item.text)) | COMMENT |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 161 | # elif item.type == MessageItem.FILE and item.file_item: | COMMENT |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 181 | elif item.type == MessageItem.VIDEO and item.video_item: | COMMENT |
| LOW | src/langbot/pkg/platform/sources/dingtalk.py | 481 | dict # 回复卡片消息字典,key为消息id,value为回复卡片实例id,用于在流式消息时判断是否发送到指定卡片 | COMMENT |
| LOW | src/langbot/pkg/platform/sources/dingtalk.py | 661 | 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 | 321 | ) | COMMENT |
| LOW | src/langbot/pkg/provider/runners/dashscopeapi.py | 81 | """预处理用户消息,提取纯文本,阿里云提供的上传文件方法过于复杂,暂不支持上传文件(包括图片)""" | COMMENT |
| LOW | …g/persistence/alembic/versions/0013_tenant_pgvector.py | 321 | if 'knowledge_bases' not in sa.inspect(conn).get_table_names(): | 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 | 81 | # paginate through the full result set in batches of this size so that | 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 | 1291 | # Check embedding model is detected | COMMENT |
| MEDIUM | tests/unit_tests/rag/test_kbmgr.py | 339 | # Preserve the complete pre-tenancy RAG manager regression matrix. Every | COMMENT |
| MEDIUM | tests/unit_tests/api/service/test_provider_service.py | 415 | embedding_result.first = Mock(return_value=Mock(spec=EmbeddingModel)) # Has embedding model | CODE |
| MEDIUM | tests/integration/api/test_knowledge.py | 130 | # RAG manager | COMMENT |
| MEDIUM | docs/multi-tenant/implementation-checklist.md | 187 | ### MCP, RAG, and Box | 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 | 176 | # across model/platform/pipeline/RAG/plugin initialization instead | COMMENT |
| MEDIUM | src/langbot/pkg/core/stages/build_app.py | 274 | # Initialize RAG Runtime Service for plugins | COMMENT |
| MEDIUM | src/langbot/pkg/entity/persistence/rag.py | 18 | # New fields for plugin-based RAG | COMMENT |
| MEDIUM | src/langbot/pkg/plugin/handler.py | 1153 | # ================= RAG Capability Handlers ================= | COMMENT |
| MEDIUM | src/langbot/pkg/plugin/handler.py | 2084 | # ================= RAG Capability Callers (LangBot -> Runtime) ================= | COMMENT |
| MEDIUM | src/langbot/pkg/provider/runners/localagent.py | 43 | # generously so it never interrupts legitimate multi-step agentic workflows. | STRING |
| MEDIUM | src/langbot/pkg/vector/vdbs/valkey_search.py | 59 | # Fixed, indexed metadata schema. LangBot's RAG layer stores ``file_id`` on | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ponents/api-integration-dialog/ApiIntegrationPanel.tsx | 494 | {`X-API-Key: <your-api-key> | CODE |
| HIGH | …ponents/api-integration-dialog/ApiIntegrationPanel.tsx | 496 | Authorization: Bearer <your-api-key>`} | CODE |
| HIGH | …ponents/api-integration-dialog/ApiIntegrationPanel.tsx | 512 | "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 | 594 | default: 'your-api-key' | CODE |
| HIGH | src/langbot/templates/metadata/pipeline/ai.yaml | 639 | default: 'your-api-key' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/api/service/test_space_service.py | 34 | def _set_response_body(response: MagicMock, body: dict | str) -> None: | CODE |
| 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 | 376 | def set_card_action_callback(self, callback: Callable) -> None: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 385 | def set_card_source(self, source: Optional[dict]) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1662 | def set_card_source(self, source: Optional[dict]) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1667 | def set_feedback_callback(self, callback: Callable) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1675 | def set_card_action_callback(self, callback: Callable) -> None: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 138 | 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 | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/pkg/platform/sources/http_bot.py | 129 | def set_bot_uuid(self, bot_uuid: str) -> None: | CODE |
| LOW | src/langbot/pkg/platform/sources/websocket_manager.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/pkg/workspace/__init__.py | 14 | __all__ = [ | CODE |
| LOW | src/langbot/pkg/provider/runners/difysvapi.py | 180 | def _set_pending_form(session_key: PendingFormKey, form_data: dict[str, typing.Any]) -> None: | CODE |
| LOW | src/langbot/pkg/cloud/__init__.py | 30 | __all__ = [ | CODE |
| LOW | src/langbot/pkg/persistence/mgr.py | 367 | def set_oss_tenant_scope(conn: sqlalchemy.Connection) -> None: | CODE |
| LOW | src/langbot/pkg/persistence/mgr.py | 395 | def set_sqlite_pragma(dbapi_connection, _connection_record) -> 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 | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | …api/http/controller/groups/pipelines/websocket_chat.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/pkg/api/http/service/user.py | 202 | async def _update_space_provider_for_account(self, account: typing.Any, api_key: str) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/user.py | 754 | 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 | 133 | async def update_provider(self, context: TenantContext, provider_uuid: str, provider_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/provider.py | 310 | async def update_space_model_provider_api_keys(self, context: TenantContext, api_key: str) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/bot.py | 144 | async def update_bot(self, context: TenantContext, bot_uuid: str, bot_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/mcp.py | 317 | async def update_mcp_server(self, context: TenantContext, server_uuid: str, server_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/pipeline.py | 147 | async def update_pipeline(self, context: TenantContext, pipeline_uuid: str, pipeline_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⚡ | …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 | 1016 | // Step 0: Select Platform | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1120 | // Step 1: Bot Configuration + Logs | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1452 | // Step 2: Select & Configure AI Engine | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 546 | # Step 1: init. | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 572 | # Step 2: chunks. | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 592 | # Step 3: finish. | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 208 | # Step 1: Submit the form | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 226 | # Step 2: Stream resumed workflow events | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 550 | # Step 1: Init — get nonce | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 567 | # Step 2: Begin — get device_code + QR URL | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 594 | # Step 3: Poll for authorization result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 766 | # Step 1: Generate QR code | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 789 | # Step 2: Poll for scan result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 963 | # Step 1: create_bind_task — register our AES key, get task_id | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 997 | # Step 2: poll_bind_result until completed (status=2) or expired (3). | COMMENT |
| LOW | …/pkg/api/http/controller/groups/knowledge/migration.py | 226 | # Step 1: Install all required plugins from marketplace | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 244 | # Step 2: Wait for all plugins to become available as knowledge engines | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 281 | # Step 3: Restore internal knowledge bases from backup | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 334 | # Step 4: Restore external knowledge bases | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 416 | # Step 5: Clear migration flag | 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 | 1016 | // Step 0: Select Platform | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1120 | // Step 1: Bot Configuration + Logs | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1452 | // Step 2: Select & Configure AI Engine | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 546 | # Step 1: init. | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 572 | # Step 2: chunks. | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 592 | # Step 3: finish. | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 208 | # Step 1: Submit the form | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 226 | # Step 2: Stream resumed workflow events | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 550 | # Step 1: Init — get nonce | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 567 | # Step 2: Begin — get device_code + QR URL | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 594 | # Step 3: Poll for authorization result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 766 | # Step 1: Generate QR code | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 789 | # Step 2: Poll for scan result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 963 | # Step 1: create_bind_task — register our AES key, get task_id | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 997 | # Step 2: poll_bind_result until completed (status=2) or expired (3). | COMMENT |
| LOW | …/pkg/api/http/controller/groups/knowledge/migration.py | 226 | # Step 1: Install all required plugins from marketplace | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 244 | # Step 2: Wait for all plugins to become available as knowledge engines | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 281 | # Step 3: Restore internal knowledge bases from backup | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 334 | # Step 4: Restore external knowledge bases | COMMENT |
| LOW⚡ | …/pkg/api/http/controller/groups/knowledge/migration.py | 416 | # Step 5: Clear migration flag | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/langbot/libs/openclaw_weixin_api/client.py | 592 | 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 | 196 | 加入语音频道 验证用户权限和频道状态后,建立到指定语音频道的连接。 支持连接复用和自动重连机制。 @author: @ydzat Args: | STRING |
| HIGH | src/langbot/pkg/platform/sources/discord.py | 970 | 加入语音频道 为指定服务器的语音频道建立连接,支持用户权限验证和连接复用。 @author: @ydzat @version: 1.0 @since: 2 | STRING |
| HIGH | src/langbot/pkg/plugin/connector.py | 2222 | 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 | 60 | 从gewechat服务器获取图片并转换为base64格式 Args: gewechat_url (str): gewechat服务器地址(用于获取图片URL) gewechat_file_url ( | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | web/src/app/home/layout.tsx | 57 | // 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 | 448 | # First call is the UPDATE - just return a Mock | COMMENT |
| LOW | src/langbot/pkg/platform/sources/kook.py | 168 | # If download fails, just add as plain text | COMMENT |
| LOW | src/langbot/pkg/platform/sources/kook.py | 187 | # Other message types, just use content as plain text | COMMENT |
| LOW | src/langbot/pkg/platform/sources/telegram.py | 396 | # If edit fails (e.g. message too long), just pass | COMMENT |
| MEDIUM | src/langbot/pkg/api/http/service/model.py | 51 | # makes the serializer robust to a reused/self-referential test double. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/api/service/test_bot_service.py | 26 | CODE | |
| LOW | scripts/build_dingtalk_card_template.py | 275 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 675 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 924 | CODE | |
| LOW | src/langbot/pkg/box/workspace.py | 286 | CODE | |
| LOW | src/langbot/pkg/core/taskmgr.py | 117 | CODE | |
| LOW | src/langbot/pkg/core/taskmgr.py | 250 | CODE | |
| LOW | src/langbot/pkg/core/taskmgr.py | 288 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1828 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 1973 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 2067 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 2082 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 2095 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 2114 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 2123 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 2170 | CODE | |
| LOW | src/langbot/pkg/rag/knowledge/kbmgr.py | 597 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 406 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 501 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 2027 | CODE | |
| LOW | src/langbot/pkg/vector/vdbs/pgvector_db.py | 113 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/tests/e2e/login.spec.ts | 16 | await page.getByPlaceholder('Enter email address').fill('admin@example.com'); | CODE |
| LOW | web/tests/e2e/login.spec.ts | 77 | 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 | 1689 | spec = BoxSpec.model_validate({'cmd': 'placeholder', 'session_id': 'r-create-1'}) | CODE |
| LOW | tests/integration/api/test_smoke.py | 98 | app.user_service.authenticate = AsyncMock(return_value='fake_token') | CODE |
| LOW | tests/integration/api/test_smoke.py | 102 | 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 | 2456 | 'placeholder': {'tag': 'plain_text', 'content': '请选择'}, | CODE |
| LOW | src/langbot/pkg/platform/sources/lark.py | 2490 | 'placeholder': {'tag': 'plain_text', 'content': '请输入'}, | 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 | src/langbot/pkg/provider/runners/localagent.py | 358 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/platform/test_wecomcs_api.py | 13 | def handle_request(request: httpx.Request) -> httpx.Response: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 218 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 449 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 2222 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 393 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/wecom_api/api.py | 406 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/slack_api/api.py | 129 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW⚡ | src/langbot/libs/qq_official_api/api.py | 311 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/kubernetes.yaml | 6 | # Usage: | COMMENT |