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 summarizes scanner evidence for langbot-app/LangBot, a Python project with 18,090 GitHub stars. SynthScan examined 496,416 lines of code across 1889 source files, recording 8013 pattern matches distributed across 24 syntactic categories. The legacy adjusted pattern signal is 19.5 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 5701 finding(s).
Are imports declared and package/API names verified? 992 finding(s).
Are wrappers, guards, and repeated structures necessary? 6449 finding(s).
Which changes need focused human review? 8013 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 8013 distinct pattern matches across 24 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/src/app/home/bots/components/bot-form/BotForm.tsx | 104 | function getSupportedConnectionModes(config: IDynamicFormItemSchema[]) { | CODE |
| LOW | web/src/app/home/bots/components/bot-form/BotForm.tsx | 573 | function handleConnectionModeChange(mode: ConnectionMode) { | CODE |
| LOW | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 317 | function agentSupportsEventPattern(agent: Agent, pattern: string) { | CODE |
| 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 | …mponents/plugin-market/useMarketplaceInstalledIndex.ts | 14 | export function useMarketplaceInstalledIndex(): Map< | CODE |
| LOW | …ins/components/plugin-market/PluginMarketComponent.tsx | 86 | function getComponentFilterFromQuery( | CODE |
| LOW | …arket/plugin-market-card/PluginMarketCardComponent.tsx | 30 | export default function PluginMarketCardComponent({ | CODE |
| LOW | …ts/plugin-install-task/PluginInstallProgressDialog.tsx | 371 | export default function PluginInstallProgressDialog() { | CODE |
| LOW | …nents/plugin-install-task/PluginInstallTaskContext.tsx | 120 | export function asyncTaskToPluginInstallTask( | CODE |
| LOW | …nents/plugin-install-task/PluginInstallTaskContext.tsx | 197 | export function PluginInstallTaskProvider({ | CODE |
| LOW⚡ | web/src/app/home/agents/runner-marketplace.ts | 118 | function writePendingRunnerInstall(intent: PendingRunnerInstall) { | CODE |
| LOW⚡ | web/src/app/home/agents/runner-marketplace.ts | 127 | export function clearPendingRunnerInstall(scope: string, taskId?: number) { | CODE |
| LOW⚡ | web/src/app/home/agents/runner-marketplace.ts | 135 | export function subscribePendingRunnerInstall( | CODE |
| LOW | web/src/app/home/agents/runner-marketplace.ts | 314 | async function waitForRunnerRegistration( | CODE |
| LOW⚡ | web/src/app/home/agents/runner-marketplace.ts | 348 | export async function resumePendingRunnerInstall( | CODE |
| LOW⚡ | web/src/app/home/agents/runner-marketplace.ts | 357 | export async function installMarketplaceEventProcessor( | CODE |
| LOW⚡ | web/src/app/home/agents/runner-marketplace.ts | 365 | export async function resumePendingEventProcessorInstall( | CODE |
| LOW⚡ | web/src/app/home/agents/runner-marketplace.ts | 372 | async function finishEventProcessorInstall( | CODE |
| LOW | …b/src/app/home/agents/PluginProcessorDetailContent.tsx | 40 | export default function PluginProcessorDetailContent({ | CODE |
| LOW | …/src/app/home/agents/components/AgentFormComponent.tsx | 93 | function isRequiredRunnerValueMissing(value: unknown): boolean { | CODE |
| LOW | web/src/app/home/agents/components/RunnerSelect.tsx | 94 | function InstalledRunnerOptionContent({ | CODE |
| LOW | web/src/app/home/agents/components/RunnerSelect.tsx | 135 | function installedRunnerDescription( | CODE |
| LOW | …app/home/agents/components/AgentEventPatternPicker.tsx | 59 | export function isEventToolCompatibleWithPattern( | CODE |
| LOW | web/src/app/home/pipelines/MigrationInstallProgress.tsx | 41 | function InstallationPluginIdentity({ item }: { item: MigrationInstallation }) { | CODE |
| LOW | …home/pipelines/components/debug-dialog/DebugDialog.tsx | 56 | function AuthenticatedMessageImage({ | CODE |
| LOW | …home/components/event-patterns/event-pattern-groups.ts | 15 | export function processorEventCompatibility( | CODE |
| LOW | …/workspace-settings/OperationTraceCollectionDialog.tsx | 44 | export default function OperationTraceCollectionDialog({ | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 241 | function createEmptyListExpansionState(): SidebarListExpansionState { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 318 | async function refreshEnabledMCPConnections() { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 553 | function handleListExpansionToggle(id: EntityCategoryId, expanded: boolean) { | CODE |
| LOW | …b/src/app/home/components/home-sidebar/HomeSidebar.tsx | 1943 | function handleSettingsSectionChange(section: SettingsSection) { | CODE |
| LOW | …ents/model-availability/ModelAvailabilityIndicator.tsx | 14 | export default function ModelAvailabilityIndicator({ | CODE |
| LOW | …ents/model-availability/useLangBotModelAvailability.ts | 37 | export function useLangBotModelAvailability(enabled = true) { | CODE |
| LOW | …/src/app/home/components/models-dialog/ModelsPanel.tsx | 196 | async function loadRequesterSupportTypes() { | CODE |
| LOW | …home/components/dynamic-form/ToolResourceSelectors.tsx | 160 | function hasReliableSourceMetadata(tool: PluginTool) { | CODE |
| LOW | …/home/components/dynamic-form/DynamicFormSaveValues.ts | 33 | export function normalizeDynamicFormFieldValue( | CODE |
| LOW | …/home/components/dynamic-form/DynamicFormSaveValues.ts | 94 | function normalizeModelFallbackValue(value: unknown): { | CODE |
| LOW | …/home/components/dynamic-form/DynamicFormSaveValues.ts | 138 | export function normalizeDynamicFormValuesForSave( | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 51 | export function getKnowledgeEngineInstallError(error: unknown): string { | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 76 | export function readPendingKnowledgeEngineInstall( | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 102 | function writePendingKnowledgeEngineInstall( | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 113 | export function clearPendingKnowledgeEngineInstall( | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 124 | export function subscribePendingKnowledgeEngineInstall( | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 137 | export async function loadKnowledgeEngineCatalog(): Promise<KnowledgeEngineCatalog> { | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 194 | export async function installMarketplaceKnowledgeEngine( | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 221 | async function finishKnowledgeEngineInstall( | CODE |
| LOW | …dge/components/kb-form/knowledge-engine-marketplace.ts | 260 | export async function resumePendingKnowledgeEngineInstall( | CODE |
| LOW | …rc/app/home/skills/components/skill-form/SkillForm.tsx | 768 | 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 | 211 | export function beginAuthenticatedSession( | CODE |
| LOW | web/src/app/infra/http/index.ts | 250 | async function initializeSelectedWorkspace( | CODE |
| LOW | web/src/app/infra/http/index.ts | 278 | 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 |
| 5023 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 | 63 | except Exception: | CODE |
| LOW | tests/integration/persistence/test_migrations.py | 398 | 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/live_discord_eba_probe.py | 75 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_discord_eba_probe.py | 83 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_wecomcs_eba_probe.py | 85 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_officialaccount_eba_probe.py | 77 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_wecom_eba_probe.py | 85 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_wecombot_eba_probe.py | 81 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_aiocqhttp_eba_probe.py | 77 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_telegram_eba_probe.py | 100 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_telegram_eba_probe.py | 108 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_slack_eba_probe.py | 77 | except Exception as exc: | CODE |
| LOW | tests/e2e/live_qqofficial_eba_probe.py | 77 | except Exception as exc: | CODE |
| LOW | tests/e2e/utils/process_manager.py | 245 | except Exception: | CODE |
| LOW | docs/review/box-architecture.md | 487 | 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 |
| MEDIUM | .github/discord-release/announce.py | 157 | print(f'Error: {error}', file=sys.stderr) | CODE |
| LOW | skills/scripts/e2e/agent-run-ledger-audit.py | 403 | except Exception as exc: # noqa: BLE001 - probe must classify environment failures | 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 | 234 | except Exception: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 280 | except Exception: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 512 | except Exception: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 570 | except Exception: | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 578 | except Exception as exc: | 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 | …c/langbot/libs/openclaw_weixin_api/typing_indicator.py | 47 | except Exception: | CODE |
| LOW | …c/langbot/libs/openclaw_weixin_api/typing_indicator.py | 66 | except Exception: | CODE |
| LOW | …c/langbot/libs/openclaw_weixin_api/typing_indicator.py | 76 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/card_callback.py | 104 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 444 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 454 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 464 | except Exception as e: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 672 | except Exception: | CODE |
| LOW⚡ | src/langbot/libs/dingtalk_api/api.py | 677 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 171 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 187 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 625 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 704 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 709 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 837 | except Exception as exc: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 888 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 937 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 976 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 1028 | except Exception: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 1082 | except Exception as e: | CODE |
| LOW | src/langbot/libs/dingtalk_api/api.py | 1106 | except Exception: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 864 | except Exception: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 870 | except Exception: | CODE |
| 834 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit_tests/core/test_taskmgr.py | 332 | except ValueError: | CODE |
| HIGH | tests/unit_tests/core/test_taskmgr.py | 377 | except ValueError: | CODE |
| HIGH | …unit_tests/storage/test_localstorage_path_traversal.py | 77 | except (ValueError, PermissionError): | CODE |
| HIGH | tests/unit_tests/persistence/test_tenant_uow.py | 372 | except ValueError: | CODE |
| HIGH | tests/unit_tests/persistence/test_tenant_uow.py | 410 | except sa.exc.IntegrityError: | CODE |
| HIGH | tests/unit_tests/api/service/test_provider_cascade.py | 249 | except Abort: | CODE |
| HIGH | tests/unit_tests/telemetry/test_trace.py | 823 | except RuntimeError: | CODE |
| HIGH | tests/unit_tests/telemetry/test_pipeline_lane.py | 148 | except asyncio.CancelledError: | CODE |
| HIGH | …ts/integration/persistence/test_migrations_postgres.py | 283 | except Exception: | CODE |
| HIGH | …ts/integration/persistence/test_migrations_postgres.py | 291 | except Exception: | CODE |
| HIGH | …ts/integration/persistence/test_migrations_postgres.py | 1568 | except IntegrityError: | CODE |
| HIGH | tests/integration/vector/test_valkey_search.py | 103 | except Exception: | CODE |
| HIGH | tests/e2e/live_officialaccount_eba_probe.py | 135 | except asyncio.CancelledError: | CODE |
| HIGH | tests/e2e/live_aiocqhttp_eba_probe.py | 212 | except (asyncio.CancelledError, asyncio.TimeoutError): | CODE |
| HIGH | tests/e2e/live_slack_eba_probe.py | 137 | except asyncio.CancelledError: | CODE |
| HIGH | tests/e2e/live_qqofficial_eba_probe.py | 145 | except asyncio.CancelledError: | CODE |
| HIGH | tests/e2e/utils/process_manager.py | 163 | except (httpx.ConnectError, httpx.TimeoutException): | CODE |
| HIGH | examples/http-bot/playground.py | 181 | except (asyncio.CancelledError, ConnectionResetError): | CODE |
| HIGH | examples/http-bot/playground.py | 90 | except Exception: | CODE |
| HIGH | src/langbot/libs/wechatpad_api/util/http_util.py | 15 | except (TypeError, ValueError): | CODE |
| HIGH | src/langbot/libs/dingtalk_api/api.py | 1106 | except Exception: | CODE |
| HIGH | src/langbot/libs/dingtalk_api/api.py | 1070 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 850 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/libs/wecom_ai_bot_api/api.py | 264 | except asyncio.QueueEmpty: | CODE |
| HIGH | src/langbot/libs/dify_service_api/v1/client.py | 55 | except (TypeError, ValueError): | CODE |
| HIGH | src/langbot/libs/qq_official_api/api.py | 980 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/libs/qq_official_api/api.py | 1256 | except Exception: | CODE |
| HIGH | src/langbot/libs/qq_official_api/api.py | 1010 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/libs/qq_official_api/api.py | 1231 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/libs/qq_official_api/api.py | 1236 | except Exception: | CODE |
| HIGH | src/langbot/libs/qq_official_api/api.py | 1113 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/libs/qq_official_api/api.py | 1131 | except Exception: | CODE |
| HIGH | src/langbot/libs/qq_official_api/api.py | 1138 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/pkg/pipeline/monitoring_helper.py | 223 | except Exception: | CODE |
| HIGH | src/langbot/pkg/pipeline/aggregator.py | 285 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/pkg/pipeline/pipelinemgr.py | 208 | except Exception: | CODE |
| HIGH | src/langbot/pkg/pipeline/pipelinemgr.py | 660 | except Exception: | CODE |
| HIGH | src/langbot/pkg/pipeline/pipelinemgr.py | 404 | except Exception: | CODE |
| HIGH | src/langbot/pkg/pipeline/pipelinemgr.py | 224 | except Exception: | CODE |
| HIGH | src/langbot/pkg/pipeline/preproc/preproc.py | 115 | except Exception: | CODE |
| HIGH | src/langbot/pkg/pipeline/preproc/preproc.py | 412 | except Exception: | CODE |
| HIGH | src/langbot/pkg/pipeline/preproc/preproc.py | 452 | except Exception: | CODE |
| HIGH | src/langbot/pkg/box/service.py | 957 | except ValueError: | CODE |
| HIGH | src/langbot/pkg/box/secure_fs.py | 63 | except FileExistsError: | CODE |
| HIGH | src/langbot/pkg/core/app.py | 601 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/pkg/platform/botmgr.py | 539 | except Exception: | CODE |
| HIGH | src/langbot/pkg/platform/botmgr.py | 732 | except TypeError: | CODE |
| HIGH | src/langbot/pkg/platform/botmgr.py | 2058 | except Exception: | CODE |
| HIGH | src/langbot/pkg/platform/botmgr.py | 1040 | except Exception: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/kook/adapter.py | 276 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/kook/adapter.py | 154 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/kook/adapter.py | 263 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/discord/adapter.py | 368 | except Exception: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/discord/adapter.py | 376 | except Exception: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/lark/platform_api.py | 81 | except Exception: | CODE |
| HIGH | …/langbot/pkg/platform/adapters/lark/event_converter.py | 298 | except ValueError: | CODE |
| HIGH | …angbot/pkg/platform/adapters/lark/message_converter.py | 348 | except ValueError: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/telegram/adapter.py | 381 | except telegram.error.RetryAfter: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/qqofficial/adapter.py | 435 | except asyncio.CancelledError: | CODE |
| HIGH | src/langbot/pkg/platform/adapters/qqofficial/adapter.py | 241 | except asyncio.CancelledError: | CODE |
| 107 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/smoke/test_fake_message_flow.py | 10 | CODE | |
| LOW | tests/unit_tests/test_matrix_relogin.py | 1 | CODE | |
| LOW | tests/unit_tests/test_execution_lease.py | 10 | CODE | |
| LOW | tests/unit_tests/test_execution_lease.py | 10 | CODE | |
| LOW | tests/unit_tests/test_optional_dependencies.py | 1 | CODE | |
| LOW | tests/unit_tests/test_operation_trace_tenant_scope.py | 11 | CODE | |
| LOW | tests/unit_tests/test_preproc.py | 1 | CODE | |
| LOW | tests/unit_tests/test_operation_trace_integrity.py | 11 | CODE | |
| LOW | tests/unit_tests/test_operation_trace_incremental.py | 10 | 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_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 | …sts/unit_tests/pipeline/test_preproc_media_fallback.py | 1 | CODE | |
| LOW | tests/unit_tests/pipeline/test_pool.py | 7 | CODE | |
| LOW | tests/unit_tests/pipeline/test_cntfilter.py | 12 | CODE | |
| LOW | tests/unit_tests/pipeline/test_chat_handler.py | 8 | CODE | |
| LOW | tests/unit_tests/pipeline/test_controller.py | 1 | 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 | …nit_tests/platform/test_wecombot_stream_empty_final.py | 19 | CODE | |
| LOW | tests/unit_tests/platform/test_lark_eba_adapter.py | 1 | CODE | |
| LOW | …sts/unit_tests/platform/test_openclaw_weixin_client.py | 1 | CODE | |
| LOW | …nit_tests/platform/test_officialaccount_eba_adapter.py | 1 | CODE | |
| LOW | …t_tests/platform/test_websocket_adapter_attachments.py | 11 | CODE | |
| LOW | …sts/unit_tests/platform/test_qqofficial_eba_adapter.py | 1 | CODE | |
| LOW | tests/unit_tests/platform/test_kook_eba_adapter.py | 1 | CODE | |
| LOW | …sts/unit_tests/platform/test_botmgr_execution_trace.py | 3 | 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 | |
| 824 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/unit_tests/platform/test_lark_eba_adapter.py | 345 | adapter.api_client.im.v1.message.acreate.assert_awaited_once() | CODE |
| CRITICAL⚡ | tests/unit_tests/platform/test_lark_eba_adapter.py | 350 | adapter.api_client.im.v1.message.areply.assert_awaited_once() | CODE |
| CRITICAL | tests/unit_tests/platform/test_lark_eba_adapter.py | 467 | adapter.api_client.cardkit.v1.card.acreate.assert_awaited_once() | CODE |
| CRITICAL | tests/unit_tests/platform/test_lark_eba_adapter.py | 506 | adapter.api_client.im.v1.message.acreate.assert_not_awaited() | CODE |
| CRITICAL | tests/unit_tests/provider/test_mcp_box_integration.py | 1055 | 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 | 320 | 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/adapters/lark/platform_api.py | 31 | response = await adapter.api_client.im.v1.chat.aget(request, adapter.request_option(params.get('tenant_key'))) | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/adapters/lark/platform_api.py | 37 | response = await adapter.api_client.im.v1.message.aget(request, adapter.request_option(params.get('tenant_key'))) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/platform_api.py | 49 | response = await adapter.api_client.im.v1.message_resource.aget( | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/interaction.py | 341 | response: UpdateCardResponse = await adapter.api_client.cardkit.v1.card.aupdate(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/interaction.py | 393 | card_response: CreateCardResponse = await adapter.api_client.cardkit.v1.card.acreate(card_request) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/interaction.py | 413 | response: CreateMessageResponse = await adapter.api_client.im.v1.message.acreate(message_request) | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/adapters/lark/adapter.py | 753 | response = await self.api_client.im.v1.message.aget(request, option) | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/adapters/lark/adapter.py | 758 | response = await self.api_client.im.v1.chat.aget(request, option) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 278 | response: ResendAppTicketResponse = self.api_client.auth.v3.app_ticket.resend(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 296 | response: CreateAppAccessTokenResponse = self.api_client.auth.v3.app_access_token.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 327 | response: CreateTenantAccessTokenResponse = self.api_client.auth.v3.tenant_access_token.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 374 | response: CreateMessageResponse = await self.api_client.im.v1.message.acreate(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 407 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply( | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 470 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply( | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 501 | response: CreateCardResponse = await self.api_client.cardkit.v1.card.acreate(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 536 | response: UpdateCardResponse = await self.api_client.cardkit.v1.card.aupdate(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 578 | response: ContentCardElementResponse = await self.api_client.cardkit.v1.card_element.acontent( | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/adapter.py | 1038 | response: CreateMessageResponse = await self.api_client.im.v1.message.acreate( | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/api_impl.py | 30 | response = await self.api_client.im.v1.message.aget(request, self.request_option(None)) | CODE |
| CRITICAL | src/langbot/pkg/platform/adapters/lark/api_impl.py | 60 | response = await self.api_client.im.v1.chat.aget(request, self.request_option(None)) | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/sources/lark.py | 1630 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL⚡ | src/langbot/pkg/platform/sources/lark.py | 3214 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1416 | response: CreateAppAccessTokenResponse = self.api_client.auth.v3.app_access_token.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1449 | response: CreateTenantAccessTokenResponse = self.api_client.auth.v3.tenant_access_token.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1603 | response: CreateMessageResponse = self.api_client.im.v1.message.create(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1893 | response: CreateCardResponse = self.api_client.cardkit.v1.card.create(request) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 1949 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2040 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2132 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2170 | response: ReplyMessageResponse = await self.api_client.im.v1.message.areply(request, req_opt) | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2320 | response: ContentCardElementResponse = await self.api_client.cardkit.v1.card_element.acontent( | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2429 | media_response: ReplyMessageResponse = await self.api_client.im.v1.message.areply( | CODE |
| CRITICAL | src/langbot/pkg/platform/sources/lark.py | 2931 | 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 |
|---|---|---|---|---|
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 136 | // ── types ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 227 | // ── helpers ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 482 | // ── target combobox (type + target merged, with search + groups) ─────────────── | COMMENT |
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 715 | // ── filter conditions panel ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 866 | // ── adapter capability summary ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 981 | // ── route dry-run dialog ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 1285 | // ── single binding card ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 1466 | // ── sortable wrapper ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/home/bots/components/bot-form/EventBindingsEditor.tsx | 1504 | // ── main editor ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit_tests/box/test_box_service.py | 1591 | # ── BoxHostMountMode.NONE tests ───────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit_tests/box/test_box_service.py | 1907 | # ── Attachment passthrough (inbound / outbound) ───────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 810 | # ── Truncation tests ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 933 | # ── Profile tests ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1241 | # ── Observability tests ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1342 | # ── In-process RPC client/server tests ───────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/box/test_box_service.py | 1506 | # ── 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 | 916 | # ── 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 | 498 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 500 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 525 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 527 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 541 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 543 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 557 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit_tests/provider/test_requester_base.py | 559 | # ============================================================================ | COMMENT |
| 91 more matches not shown… | ||||
| 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 | …s/unit_tests/platform/test_native_stream_completion.py | 18 | CODE | |
| LOW | tests/unit_tests/plugin/test_handler_actions.py | 36 | CODE | |
| LOW | tests/unit_tests/plugin/test_runner_stream_context.py | 22 | CODE | |
| LOW | tests/unit_tests/plugin/test_runner_stream_context.py | 29 | 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 | 60 | CODE | |
| LOW | tests/unit_tests/agent/test_legacy_identity_boundary.py | 102 | 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 | 1018 | CODE | |
| LOW | tests/unit_tests/persistence/test_tenant_uow.py | 1052 | CODE | |
| LOW | …sts/unit_tests/api/service/test_maintenance_service.py | 611 | CODE | |
| LOW | tests/integration/persistence/test_codex_auth.py | 365 | CODE | |
| LOW | tests/utils/import_isolation.py | 40 | CODE | |
| LOW | tests/e2e/live_aiocqhttp_eba_probe.py | 37 | CODE | |
| LOW | tests/e2e/live_telegram_eba_probe.py | 487 | 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 | skills/scripts/e2e/agent-run-ledger-audit.py | 80 | CODE | |
| LOW | skills/scripts/e2e/onebot-runtime-probe.py | 14 | CODE | |
| LOW | src/langbot/libs/official_account_api/api.py | 152 | CODE | |
| LOW | src/langbot/libs/official_account_api/api.py | 396 | CODE | |
| LOW | src/langbot/libs/openclaw_weixin_api/client.py | 585 | CODE | |
| LOW | …c/langbot/libs/openclaw_weixin_api/typing_indicator.py | 57 | CODE | |
| LOW | …c/langbot/libs/openclaw_weixin_api/typing_indicator.py | 80 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/card_callback.py | 70 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 397 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 479 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 1034 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 982 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 1219 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 402 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 466 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 920 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1540 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 1813 | CODE | |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 2048 | CODE | |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 376 | CODE | |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 427 | CODE | |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 441 | CODE | |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 517 | 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/media.py | 73 | CODE | |
| 308 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/adapters/telegram/adapter.py | 0 | return true for invisible placeholder chunks used to carry forms. | STRING |
| HIGH | src/langbot/pkg/platform/sources/qqofficial.py | 0 | return true for invisible placeholder chunks used to carry forms. | STRING |
| HIGH | src/langbot/pkg/platform/sources/telegram.py | 0 | return true for invisible placeholder chunks used to carry forms. | 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⚡ | …ts/unit_tests/pipeline/test_legacy_config_migration.py | 548 | @pytest.mark.parametrize('raw', [None, '', '{}', '{"nested":{"token":"SECRET","values":[null,false,0]}}']) | CODE |
| HIGH | …ts/unit_tests/pipeline/test_legacy_config_migration.py | 794 | @pytest.mark.parametrize('raw', [None, '', ' ', 'null', {}, '{"nested":[null,false,0]}']) | CODE |
| 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 | 309 | assert '_LB_SYSTEM_PYTHON="$(command -v python3 || command -v python || true)"' in command | CODE |
| HIGH | tests/unit_tests/provider/test_tool_manager_native.py | 884 | assert command.startswith('PYTHON_BIN=$(command -v python3 || command -v python)') | 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/provider/tools/loaders/native.py | 760 | command = f'PYTHON_BIN=$(command -v python3 || command -v python); "$PYTHON_BIN" - <<\'PY\'\n{script}\nPY' | CODE |
| HIGH | src/langbot/pkg/api/http/controller/groups/system.py | 308 | { "step": int, "selected_scenario": str|null, "selected_adapter": str|null, | STRING |
| HIGH | src/langbot/pkg/api/http/controller/groups/system.py | 309 | "created_bot_uuid": str|null, "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/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/agent/test_session_registry.py | 591 | # Create a fresh instance directly to verify the class works | COMMENT |
| MEDIUM | tests/unit_tests/agent/test_state_api_auth.py | 82 | # Create the table | COMMENT |
| MEDIUM | tests/unit_tests/agent/test_event_first_protocol.py | 375 | # Create a proper content element mock | COMMENT |
| MEDIUM | tests/unit_tests/agent/test_event_first_protocol.py | 432 | # Create a proper content element mock | 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 | 184 | # Create a simple class to mimic Prompt behavior | COMMENT |
| MEDIUM | tests/factories/message.py | 409 | # Create a default session | COMMENT |
| MEDIUM | src/langbot/pkg/pipeline/process/handlers/chat.py | 129 | # Create a single resp_message_id for the entire streaming response | 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 | 196 | # Create the skill | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/test_operation_trace_tenant_scope.py | 120 | async def _set_level(engine, workspace_uuid: str, level: int) -> None: | CODE |
| LOW | tests/unit_tests/api/service/test_bot_service.py | 59 | def _set_discovered_adapters(ap, *webhook_adapters: str) -> None: | CODE |
| 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 | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | …c/langbot/libs/openclaw_weixin_api/typing_indicator.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 389 | def set_card_action_callback(self, callback: Callable) -> None: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 398 | def set_card_source(self, source: Optional[dict]) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1668 | def set_card_source(self, source: Optional[dict]) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1673 | def set_feedback_callback(self, callback: Callable) -> None: | CODE |
| LOW⚡ | src/langbot/libs/wecom_ai_bot_api/api.py | 1681 | def set_card_action_callback(self, callback: Callable) -> None: | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 142 | 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 | src/langbot/pkg/platform/adapters/kook/__init__.py | 5 | __all__ = ['KookAdapter'] | CODE |
| LOW | src/langbot/pkg/platform/adapters/kook/errors.py | 13 | __all__ = ['NotSupportedError'] | CODE |
| LOW | src/langbot/pkg/platform/adapters/discord/__init__.py | 5 | __all__ = ['DiscordAdapter'] | CODE |
| LOW | src/langbot/pkg/platform/adapters/aiocqhttp/__init__.py | 5 | __all__ = ['AiocqhttpAdapter'] | CODE |
| LOW | src/langbot/pkg/platform/adapters/aiocqhttp/api_impl.py | 137 | async def set_group_name(self, group_id: typing.Union[int, str], name: str) -> None: | CODE |
| LOW | …gbot/pkg/platform/adapters/officialaccount/__init__.py | 5 | __all__ = ['OfficialAccountAdapter'] | CODE |
| LOW | src/langbot/pkg/platform/adapters/wecomcs/__init__.py | 5 | __all__ = ['WecomCSAdapter'] | CODE |
| LOW | src/langbot/pkg/platform/adapters/telegram/__init__.py | 3 | __all__ = ['TelegramAdapter'] | CODE |
| LOW | …ot/pkg/platform/adapters/telegram/message_converter.py | 5 | __all__ = ['TelegramMessageConverter'] | CODE |
| LOW | src/langbot/pkg/platform/adapters/slack/__init__.py | 5 | __all__ = ['SlackAdapter'] | CODE |
| LOW | …c/langbot/pkg/platform/adapters/qqofficial/__init__.py | 5 | __all__ = ['QQOfficialAdapter'] | 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/agent/__init__.py | 21 | __all__ = [ | CODE |
| LOW | src/langbot/pkg/agent/runner/platform_tools.py | 878 | __all__ = [ | CODE |
| LOW | src/langbot/pkg/agent/runner/__init__.py | 37 | __all__ = [ | CODE |
| LOW | src/langbot/pkg/agent/runner/session_registry.py | 255 | async def update_activity(self, run_id: str) -> None: | CODE |
| LOW | src/langbot/pkg/cloud/__init__.py | 30 | __all__ = [ | CODE |
| LOW | src/langbot/pkg/persistence/mgr.py | 329 | def set_oss_tenant_scope(conn: sqlalchemy.Connection) -> None: | CODE |
| LOW | src/langbot/pkg/persistence/mgr.py | 357 | 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 | 28 | 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/totp.py | 723 | __all__ = [ | CODE |
| LOW | src/langbot/pkg/api/http/service/user.py | 230 | 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 | 891 | 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 | 154 | async def update_provider(self, context: TenantContext, provider_uuid: str, provider_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/provider.py | 389 | async def update_space_model_provider_api_keys(self, context: TenantContext, api_key: str) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/model.py | 214 | async def set_starred_model(self, context: TenantContext, model_uuid: str | None) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/bot.py | 714 | 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 | 214 | async def update_pipeline(self, context: TenantContext, pipeline_uuid: str, pipeline_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/api/http/service/agent.py | 475 | async def update_agent(self, context: TenantContext, agent_uuid: str, agent_data: dict) -> None: | CODE |
| LOW | src/langbot/pkg/operation_trace/service.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/langbot/pkg/operation_trace/__init__.py | 26 | __all__ = ['service', 'routes'] | CODE |
| LOW | src/langbot/pkg/vector/filter_utils.py | 21 | logger = logging.getLogger(__name__) | CODE |
| 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 | 86 | # Set COVERAGE_PROCESS_START to enable coverage in subprocess | COMMENT |
| LOW | tests/e2e/utils/process_manager.py | 139 | # Check if process died | STRING |
| LOW | src/langbot/pkg/pipeline/monitoring_helper.py | 133 | # Check if session exists, if not, record session start | COMMENT |
| LOW | src/langbot/pkg/core/stages/load_config.py | 161 | # 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 | 2403 | # 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/agent/runner/persistent_state_store.py | 221 | # Check if state is disabled | COMMENT |
| LOW | src/langbot/pkg/agent/runner/persistent_state_store.py | 229 | # Check if scope is enabled | 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 | 272 | # Check if password change is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/controller/groups/user.py | 513 | # Check if modifying login info is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/controller/groups/user.py | 538 | # Check if modifying login info is allowed | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 429 | # Check if this user has a local password set | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 703 | # Check if user with this Space UUID already exists | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 722 | # Check if user with same email exists | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 732 | # Check if system is already initialized | COMMENT |
| LOW | src/langbot/pkg/api/http/service/user.py | 963 | # Check if this Space account is already bound to another user | COMMENT |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 828 | # 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 | 136 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 264 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 379 | # Check if collection exists | COMMENT |
| LOW | src/langbot/pkg/vector/vdbs/seekdb.py | 495 | # 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/i18n/I18nProvider.tsx | 41 | // 工具函数:将 i18n 语言代码转换为 API 语言代码 | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 141 | # Stream session info for feedback tracking | COMMENT |
| LOW | src/langbot/templates/config.yaml | 1 | api: | COMMENT |
| LOW | src/langbot/templates/config.yaml | 61 | # occupied instead of retaining an unbounded queue of webhook tasks. | COMMENT |
| LOW | src/langbot/templates/config.yaml | 281 | max_installations: 10000 | COMMENT |
| LOW | src/langbot/templates/config.yaml | 301 | # effect outside the cloud edition. Defaults to on for the cloud | COMMENT |
| LOW | src/langbot/templates/config.yaml | 321 | # - runtime:admin | COMMENT |
| LOW | src/langbot/templates/config.yaml | 361 | # Master switch for the Box sandbox runtime. When false, LangBot does NOT | COMMENT |
| LOW | src/langbot/templates/config.yaml | 441 | oauth_authorize_url: 'https://space.langbot.app/auth/authorize' | COMMENT |
| LOW | src/langbot/templates/metadata/pipeline/ai.yaml | 41 | # Runner config stages are dynamically added from RunnerRegistry | COMMENT |
| LOW | src/langbot/pkg/box/service.py | 761 | if tenant_workspace is not None: | COMMENT |
| LOW | src/langbot/pkg/box/service.py | 781 | # Transfer prefers DIRECT HOST FILESYSTEM access to the bind-mounted | 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 | # if item.voice_item.text: | COMMENT |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 161 | # TODO: enable after full testing | COMMENT |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 181 | COMMENT | |
| LOW | src/langbot/pkg/platform/sources/openclaw_weixin.py | 621 | # TODO: enable after full testing | COMMENT |
| LOW | src/langbot/pkg/platform/sources/dingtalk.py | 481 | bot_account_id: str | COMMENT |
| LOW | src/langbot/pkg/platform/sources/dingtalk.py | 501 | active_turn_text: dict | 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 | f'process_id={self.process_id} (transport reconnect)' | 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/operation_trace/service.py | 121 | #: row's HMAC is the expensive part of the read path, so a result computed | COMMENT |
| LOW | src/langbot/pkg/operation_trace/service.py | 581 | # the lowered route (a tuple expresses an AND, which lets | COMMENT |
| LOW | src/langbot/pkg/operation_trace/service.py | 621 | (('/extensions',), 'view', 'pipeline_extensions_update', None, 'view'), | COMMENT |
| LOW | src/langbot/pkg/operation_trace/service.py | 1181 | # Verification cache keyed by (Workspace UUID, listing filters). The | 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 |
|---|---|---|---|---|
| HIGH | docs/event-based-agents/02-platform-api.md | 360 | 调用适配器特有 API Args: action: 平台特有的 API 动作标识 params: 参数字典 Returns: dic | STRING |
| 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 | 2618 | 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 |
| HIGH | src/langbot/pkg/agent/runner/id.py | 23 | Parse runner ID string into components. Args: runner_id: Runner ID in format 'plugin:author/plugin_name/run | STRING |
| HIGH | src/langbot/pkg/agent/runner/registry.py | 228 | Get a specific runner descriptor. Args: runner_id: Runner ID to lookup bound_plugins: O | STRING |
| HIGH | src/langbot/pkg/agent/runner/result_normalizer.py | 76 | Normalize RunnerResult to Message or MessageChunk. Args: result_dict: Raw result dict from plugin r | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ARCHITECTURE.md | 57 | │ │ ├── agent/ # Agent/Runner orchestration and run state | CODE |
| MEDIUM | ARCHITECTURE.md | 142 | ## Agents, Providers, RAG, and Tools | COMMENT |
| MEDIUM | tests/README.md | 101 | │ ├── rag/ # RAG tests | CODE |
| MEDIUM | tests/unit_tests/provider/test_litellmchat.py | 1351 | # Check embedding model is detected | COMMENT |
| MEDIUM | tests/unit_tests/rag/test_kbmgr.py | 361 | # Preserve the complete pre-tenancy RAG manager regression matrix. Every | COMMENT |
| MEDIUM | tests/integration/api/test_knowledge.py | 130 | # RAG manager | COMMENT |
| MEDIUM | docs/multi-tenant/implementation-checklist.md | 189 | ### MCP, RAG, and Box | COMMENT |
| MEDIUM | …s/langbot-testing/references/langrag-knowledge-base.md | 76 | ## Local-Agent RAG Check | COMMENT |
| MEDIUM⚡ | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 969 | # processes the message (e.g. RAG retrieval). | COMMENT |
| MEDIUM | src/langbot/pkg/core/stages/build_app.py | 186 | # across model/platform/pipeline/RAG/plugin initialization instead | COMMENT |
| MEDIUM | src/langbot/pkg/core/stages/build_app.py | 293 | # 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 | 2120 | # ================= RAG Capability Handlers ================= | COMMENT |
| MEDIUM | src/langbot/pkg/plugin/handler.py | 3245 | # ================= RAG Capability Callers (LangBot -> Runtime) ================= | COMMENT |
| 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 |
|---|---|---|---|---|
| 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 | 1303 | // Step 0: Select Platform | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1483 | // Step 1: Bot Configuration + Logs | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1872 | // Step 2: Select & Configure AI Engine | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 2468 | // Step 3: Done | COMMENT |
| LOW⚡ | tests/unit_tests/agent/test_handler_auth.py | 1575 | # Step 2: Handler would invoke LLM (not tested here, would need mock model) | COMMENT |
| LOW | tests/unit_tests/agent/test_handler_auth.py | 1562 | # Step 1: Validate authorization | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 561 | # Step 1: init. | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 587 | # Step 2: chunks. | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 607 | # Step 3: finish. | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 235 | # Step 1: Submit the form | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 253 | # Step 2: Stream resumed workflow events | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 632 | # Step 1: Init — get nonce | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 649 | # Step 2: Begin — get device_code + QR URL | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 676 | # Step 3: Poll for authorization result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 848 | # Step 1: Generate QR code | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 871 | # Step 2: Poll for scan result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 1045 | # Step 1: create_bind_task — register our AES key, get task_id | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 1079 | # 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 | 1303 | // Step 0: Select Platform | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1483 | // Step 1: Bot Configuration + Logs | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 1872 | // Step 2: Select & Configure AI Engine | COMMENT |
| LOW | web/src/app/wizard/page.tsx | 2468 | // Step 3: Done | COMMENT |
| LOW⚡ | tests/unit_tests/agent/test_handler_auth.py | 1575 | # Step 2: Handler would invoke LLM (not tested here, would need mock model) | COMMENT |
| LOW | tests/unit_tests/agent/test_handler_auth.py | 1562 | # Step 1: Validate authorization | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 561 | # Step 1: init. | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 587 | # Step 2: chunks. | COMMENT |
| LOW | src/langbot/libs/wecom_ai_bot_api/ws_client.py | 607 | # Step 3: finish. | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 235 | # Step 1: Submit the form | COMMENT |
| LOW | src/langbot/libs/dify_service_api/v1/client.py | 253 | # Step 2: Stream resumed workflow events | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 632 | # Step 1: Init — get nonce | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 649 | # Step 2: Begin — get device_code + QR URL | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 676 | # Step 3: Poll for authorization result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 848 | # Step 1: Generate QR code | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 871 | # Step 2: Poll for scan result | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 1045 | # Step 1: create_bind_task — register our AES key, get task_id | COMMENT |
| LOW | …ot/pkg/api/http/controller/groups/platform/adapters.py | 1079 | # 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 | tests/unit_tests/agent/conftest.py | 77 | CODE | |
| LOW | tests/unit_tests/agent/test_state_store.py | 60 | CODE | |
| LOW | tests/unit_tests/agent/test_run_ledger_api_auth.py | 124 | CODE | |
| LOW | tests/unit_tests/api/service/test_bot_service.py | 27 | CODE | |
| LOW | scripts/build_dingtalk_card_template.py | 275 | CODE | |
| LOW | src/langbot/libs/dingtalk_api/api.py | 770 | CODE | |
| LOW | src/langbot/libs/qq_official_api/api.py | 922 | CODE | |
| LOW | src/langbot/pkg/box/workspace.py | 286 | CODE | |
| LOW | src/langbot/pkg/core/taskmgr.py | 118 | CODE | |
| LOW | src/langbot/pkg/core/taskmgr.py | 286 | CODE | |
| LOW | src/langbot/pkg/core/taskmgr.py | 324 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 2927 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 3133 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 3228 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 3243 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 3256 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 3275 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 3284 | CODE | |
| LOW | src/langbot/pkg/plugin/handler.py | 3331 | CODE | |
| LOW | src/langbot/pkg/agent/runner/run_ledger_store.py | 103 | CODE | |
| LOW | src/langbot/pkg/agent/runner/run_ledger_store.py | 158 | CODE | |
| LOW | src/langbot/pkg/agent/runner/run_ledger_store.py | 465 | CODE | |
| LOW | src/langbot/pkg/agent/runner/run_ledger_store.py | 639 | CODE | |
| LOW | src/langbot/pkg/agent/runner/resource_policy.py | 15 | CODE | |
| LOW | src/langbot/pkg/agent/runner/transcript_store.py | 54 | CODE | |
| LOW | src/langbot/pkg/agent/runner/transcript_store.py | 125 | CODE | |
| LOW | src/langbot/pkg/agent/runner/event_log_store.py | 52 | CODE | |
| LOW | src/langbot/pkg/agent/runner/event_log_store.py | 180 | CODE | |
| LOW | src/langbot/pkg/agent/runner/interaction_store.py | 106 | CODE | |
| LOW | src/langbot/pkg/agent/runner/session_registry.py | 103 | CODE | |
| LOW | src/langbot/pkg/rag/knowledge/kbmgr.py | 731 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 529 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 639 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 1531 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 1959 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 2039 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 2104 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 2334 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 2422 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 3186 | CODE | |
| LOW | src/langbot/pkg/api/http/service/monitoring.py | 3394 | CODE | |
| LOW | src/langbot/pkg/telemetry/execution.py | 237 | CODE | |
| LOW | src/langbot/pkg/telemetry/resources.py | 122 | CODE | |
| LOW | src/langbot/pkg/operation_trace/service.py | 1540 | CODE | |
| LOW | src/langbot/pkg/operation_trace/service.py | 1919 | 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 | web/tests/e2e/reasoning-edit-semantics.spec.ts | 277 | user: '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 | 1557 | spec = BoxSpec.model_validate({'cmd': 'placeholder', 'session_id': 'r-create-1'}) | CODE |
| LOW | tests/unit_tests/platform/test_lark_eba_adapter.py | 391 | 'placeholder': 'Explain the decision', | CODE |
| LOW | tests/unit_tests/platform/test_dingtalk_eba_adapter.py | 403 | 'placeholder': 'Explain the decision', | CODE |
| LOW | tests/unit_tests/platform/test_discord_eba_adapter.py | 194 | def fake_user(user_id=123, name='user', bot=False): | CODE |
| LOW | tests/unit_tests/platform/test_discord_eba_adapter.py | 225 | author = author if author is not None else fake_user() | CODE |
| LOW | tests/unit_tests/platform/test_discord_eba_adapter.py | 263 | reaction_event = DiscordEventConverter.reaction_to_eba(reaction, fake_user(321, 'reactor'), True) | CODE |
| LOW⚡ | tests/unit_tests/platform/test_discord_eba_adapter.py | 285 | member=fake_user(41, 'member'), | CODE |
| LOW⚡ | tests/unit_tests/platform/test_discord_eba_adapter.py | 297 | **fake_user(123, 'member').__dict__, | CODE |
| LOW⚡ | tests/unit_tests/api/test_user_reset_password.py | 133 | user_obj = SimpleNamespace(uuid='user-uuid', user='admin@example.com') | CODE |
| LOW⚡ | tests/unit_tests/api/test_user_reset_password.py | 156 | return {'user': 'admin@example.com', 'recovery_key': key, 'new_password': 'NewPass1!'} | CODE |
| LOW⚡ | tests/unit_tests/api/test_user_reset_password.py | 168 | reset_password.assert_awaited_once_with('admin@example.com', 'NewPass1!') | CODE |
| LOW⚡ | tests/unit_tests/api/test_user_reset_password.py | 191 | json={'user': 'admin@example.com', 'recovery_key': 12345, 'new_password': 'NewPass1!'}, | CODE |
| LOW⚡ | tests/unit_tests/api/test_user_reset_password.py | 205 | json={'user': 'admin@example.com', 'recovery_key': key, 'new_password': 'NewPass1!'}, | CODE |
| LOW | tests/unit_tests/api/service/test_user_passkey.py | 27 | user_email='user@example.com', | CODE |
| LOW | tests/unit_tests/api/service/test_user_passkey.py | 38 | assert data.user_email == 'user@example.com' | 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 | tests/integration/api/test_user_passkey_api.py | 105 | return_value=('jwt_token_abc', Mock(user='user@example.com')) | CODE |
| LOW⚡ | tests/integration/api/test_user_passkey_api.py | 117 | assert data['data']['user'] == 'user@example.com' | CODE |
| LOW | tests/e2e/test_local_runner_fake_provider.py | 372 | api_keys=['fake-key'], | 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 | …/langbot/pkg/platform/adapters/dingtalk/interaction.py | 40 | placeholder = str(field.get('placeholder') or label) | CODE |
| LOW | src/langbot/pkg/platform/adapters/lark/interaction.py | 64 | field.get('placeholder') | CODE |
| LOW | src/langbot/pkg/platform/adapters/lark/interaction.py | 87 | 'placeholder': {'tag': 'plain_text', 'content': placeholder}, | CODE |
| LOW | src/langbot/pkg/platform/adapters/lark/interaction.py | 101 | 'placeholder': {'tag': 'plain_text', 'content': placeholder}, | CODE |
| LOW | src/langbot/pkg/platform/sources/lark.py | 2494 | 'placeholder': {'tag': 'plain_text', 'content': '请选择'}, | CODE |
| LOW | src/langbot/pkg/platform/sources/lark.py | 2528 | 'placeholder': {'tag': 'plain_text', 'content': '请输入'}, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | web/tests/e2e/wizard-platform-regressions.spec.ts | 568 | default: 'your-api-key', | CODE |
| 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 |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | web/src/app/home/layout.tsx | 59 | // 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 |
|---|---|---|---|---|
| MEDIUM | tests/unit_tests/pipeline/test_chat_handler.py | 399 | CODE | |
| MEDIUM | tests/unit_tests/pipeline/test_chat_handler.py | 452 | CODE | |
| MEDIUM | tests/unit_tests/pipeline/test_chat_handler.py | 502 | CODE | |
| MEDIUM | …sts/unit_tests/platform/test_botmgr_execution_trace.py | 367 | 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 | 258 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/official_account_api/api.py | 536 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/wecom_ai_bot_api/api.py | 2285 | async def run_task(self, host: str, port: int, *args, **kwargs): | CODE |
| LOW | src/langbot/libs/wecom_customer_service_api/api.py | 470 | 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 | 221 | 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 | packaging/fnos/build.sh | 4 | # Usage: | COMMENT |
| LOW | docker/kubernetes.yaml | 6 | # Usage: | COMMENT |