Open-source super AI assistant & Agent Harness. Plans tasks, runs tools and skills, autonomously grows with memory and knowledge. Multi-model, multi-channel. Lightweight, extensible, one-line install (formerly chatgpt-on-wechat).
1833 matches across 13 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | run.sh | 4 | # ============================ |
| MEDIUM | run.sh | 6 | # ============================ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 220 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 222 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 178 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 180 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 257 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 261 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 292 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 294 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 337 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 339 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 374 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 376 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 428 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 430 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 584 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 586 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 629 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 631 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 1016 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 1018 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 1337 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 1339 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 1464 | # ------------------------------------------------------------------ |
| MEDIUM | plugins/cow_cli/cow_cli.py | 1466 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 153 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 155 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 193 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 195 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 244 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 246 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 295 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 297 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 358 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 360 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 427 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/web_search/web_search.py | 429 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 147 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 149 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 62 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 64 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 213 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 215 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 270 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 272 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 384 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/mcp/mcp_client.py | 386 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 675 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 677 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 30 | # --------------------------------------------------------------------------- |
| MEDIUM | agent/tools/browser/browser_service.py | 32 | # --------------------------------------------------------------------------- |
| MEDIUM | agent/tools/browser/browser_service.py | 356 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 358 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 634 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 636 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 654 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 656 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 950 | # ------------------------------------------------------------------ |
| MEDIUM | agent/tools/browser/browser_service.py | 952 | # ------------------------------------------------------------------ |
| 187 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | config.py | 266 | except Exception as e: |
| LOW | config.py | 282 | except Exception as e: |
| LOW | config.py | 291 | except Exception as e: |
| LOW | config.py | 316 | except Exception as e: |
| LOW | config.py | 365 | except Exception: |
| LOW | config.py | 489 | except Exception: |
| MEDIUM | config.py | 275 | def load_user_datas(self): |
| MEDIUM | config.py | 286 | def save_user_datas(self): |
| MEDIUM | config.py | 298 | def drag_sensitive(config): |
| LOW | app.py | 95 | except Exception: |
| LOW | app.py | 120 | except Exception as e: |
| LOW | app.py | 152 | except Exception as e: |
| LOW | app.py | 180 | except Exception as e: |
| LOW | app.py | 260 | except Exception as e: |
| LOW | app.py | 287 | except Exception as e: |
| LOW | app.py | 297 | except Exception as e: |
| LOW | app.py | 326 | except Exception as e: |
| LOW | app.py | 330 | except Exception as e: |
| LOW | app.py | 377 | except Exception as e: |
| LOW | plugins/plugin.py | 43 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 86 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 114 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 151 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 254 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 276 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 286 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 295 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 321 | except Exception as e: |
| LOW | plugins/plugin_manager.py | 345 | except Exception as e: |
| LOW | plugins/role/role.py | 70 | except Exception as e: |
| LOW | plugins/linkai/linkai.py | 296 | except Exception as e: |
| LOW | plugins/linkai/midjourney.py | 293 | except Exception as e: |
| LOW | plugins/linkai/midjourney.py | 437 | except Exception as e: |
| LOW | plugins/linkai/utils.py | 49 | except Exception as e: |
| MEDIUM | plugins/cow_cli/cow_cli.py | 1073 | def _run(): |
| MEDIUM | plugins/cow_cli/cow_cli.py | 1230 | def _run(): |
| LOW | plugins/cow_cli/cow_cli.py | 214 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 277 | except Exception: |
| LOW | plugins/cow_cli/cow_cli.py | 358 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 519 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 540 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 601 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 675 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 753 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 798 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 846 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 899 | except Exception: |
| LOW | plugins/cow_cli/cow_cli.py | 1002 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1060 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1080 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1094 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1209 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1245 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1261 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1285 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1294 | except Exception: |
| LOW | plugins/cow_cli/cow_cli.py | 1367 | except Exception as e: |
| LOW | plugins/cow_cli/cow_cli.py | 1481 | except Exception: |
| LOW | plugins/godcmd/godcmd.py | 295 | except Exception as e: |
| LOW | plugins/godcmd/godcmd.py | 315 | except Exception as e: |
| 688 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | config.py | 298 | |
| LOW | config.py | 322 | |
| LOW | config.py | 494 | |
| LOW | app.py | 224 | |
| LOW | app.py | 301 | |
| LOW | app.py | 60 | |
| LOW | app.py | 124 | |
| LOW | plugins/plugin_manager.py | 89 | |
| LOW | plugins/plugin_manager.py | 142 | |
| LOW | plugins/plugin_manager.py | 192 | |
| LOW | plugins/plugin_manager.py | 249 | |
| LOW | plugins/role/role.py | 44 | |
| LOW | plugins/role/role.py | 77 | |
| LOW | plugins/role/role.py | 98 | |
| LOW | plugins/linkai/midjourney.py | 81 | |
| LOW | plugins/linkai/midjourney.py | 106 | |
| LOW | plugins/linkai/midjourney.py | 270 | |
| LOW | plugins/linkai/utils.py | 33 | |
| LOW | plugins/dungeon/dungeon.py | 64 | |
| LOW | plugins/cow_cli/cow_cli.py | 633 | |
| LOW | plugins/cow_cli/cow_cli.py | 678 | |
| LOW | plugins/cow_cli/cow_cli.py | 1020 | |
| LOW | plugins/godcmd/godcmd.py | 214 | |
| LOW | plugins/banwords/banwords.py | 24 | |
| LOW | plugins/banwords/lib/WordsSearch.py | 78 | |
| LOW | plugins/banwords/lib/WordsSearch.py | 186 | |
| LOW | plugins/banwords/lib/WordsSearch.py | 229 | |
| LOW | plugins/keyword/keyword.py | 47 | |
| LOW | plugins/tool/tool.py | 49 | |
| LOW | bridge/agent_bridge.py | 138 | |
| LOW | bridge/agent_bridge.py | 198 | |
| LOW | bridge/agent_bridge.py | 297 | |
| LOW | bridge/agent_bridge.py | 386 | |
| LOW | bridge/agent_bridge.py | 622 | |
| LOW | bridge/agent_bridge.py | 867 | |
| LOW | bridge/agent_bridge.py | 877 | |
| LOW | bridge/agent_initializer.py | 133 | |
| LOW | bridge/agent_initializer.py | 182 | |
| LOW | bridge/agent_initializer.py | 507 | |
| LOW | bridge/agent_initializer.py | 573 | |
| LOW | bridge/agent_initializer.py | 670 | |
| LOW | bridge/agent_initializer.py | 766 | |
| LOW | bridge/agent_event_handler.py | 35 | |
| LOW | bridge/bridge.py | 134 | |
| LOW | agent/tools/tool_manager.py | 90 | |
| LOW | agent/tools/tool_manager.py | 167 | |
| LOW | agent/tools/tool_manager.py | 228 | |
| LOW | agent/tools/tool_manager.py | 444 | |
| LOW | agent/tools/web_fetch/web_fetch.py | 150 | |
| LOW | agent/tools/web_fetch/web_fetch.py | 222 | |
| LOW | agent/tools/web_fetch/web_fetch.py | 301 | |
| LOW | agent/tools/web_search/web_search.py | 431 | |
| LOW | agent/tools/read/read.py | 221 | |
| LOW | agent/tools/read/read.py | 398 | |
| LOW | agent/tools/scheduler/task_store.py | 59 | |
| LOW | agent/tools/scheduler/integration.py | 21 | |
| LOW | agent/tools/scheduler/integration.py | 192 | |
| LOW | agent/tools/scheduler/integration.py | 292 | |
| LOW | agent/tools/scheduler/integration.py | 373 | |
| LOW | agent/tools/scheduler/integration.py | 445 | |
| 221 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | app.py | 12 | |
| LOW | plugins/__init__.py | 1 | |
| LOW | plugins/__init__.py | 2 | |
| LOW | plugins/plugin.py | 3 | |
| LOW | plugins/plugin_manager.py | 12 | |
| LOW | plugins/plugin_manager.py | 14 | |
| LOW | plugins/role/__init__.py | 1 | |
| LOW | plugins/role/role.py | 13 | |
| LOW | plugins/linkai/__init__.py | 1 | |
| LOW | plugins/linkai/linkai.py | 4 | |
| LOW | plugins/linkai/linkai.py | 12 | |
| LOW | plugins/dungeon/dungeon.py | 11 | |
| LOW | plugins/dungeon/__init__.py | 1 | |
| LOW | plugins/finish/__init__.py | 1 | |
| LOW | plugins/finish/finish.py | 8 | |
| LOW | plugins/cow_cli/__init__.py | 1 | |
| LOW | plugins/godcmd/godcmd.py | 10 | |
| LOW | plugins/godcmd/godcmd.py | 17 | |
| LOW | plugins/godcmd/__init__.py | 1 | |
| LOW | plugins/hello/hello.py | 8 | |
| LOW | plugins/hello/__init__.py | 1 | |
| LOW | plugins/banwords/banwords.py | 10 | |
| LOW | plugins/banwords/__init__.py | 1 | |
| LOW | plugins/keyword/__init__.py | 1 | |
| LOW | plugins/keyword/keyword.py | 10 | |
| LOW | plugins/tool/tool.py | 10 | |
| LOW | plugins/tool/tool.py | 11 | |
| LOW | tests/test_minimax_provider.py | 10 | |
| LOW | tests/test_minimax_provider.py | 12 | |
| LOW | tests/test_minimax_provider.py | 66 | |
| LOW | agent/tools/tool_manager.py | 5 | |
| LOW | agent/tools/tool_manager.py | 5 | |
| LOW | agent/tools/tool_manager.py | 5 | |
| LOW | agent/tools/__init__.py | 2 | |
| LOW | agent/tools/__init__.py | 3 | |
| LOW | agent/tools/__init__.py | 6 | |
| LOW | agent/tools/__init__.py | 7 | |
| LOW | agent/tools/__init__.py | 8 | |
| LOW | agent/tools/__init__.py | 9 | |
| LOW | agent/tools/__init__.py | 10 | |
| LOW | agent/tools/__init__.py | 11 | |
| LOW | agent/tools/__init__.py | 14 | |
| LOW | agent/tools/__init__.py | 15 | |
| LOW | agent/tools/base_tool.py | 4 | |
| LOW | agent/tools/write/write.py | 8 | |
| LOW | agent/tools/write/__init__.py | 1 | |
| LOW | agent/tools/web_search/__init__.py | 1 | |
| LOW | agent/tools/memory/__init__.py | 7 | |
| LOW | agent/tools/memory/__init__.py | 8 | |
| LOW | agent/tools/memory/memory_search.py | 7 | |
| LOW | agent/tools/memory/memory_search.py | 7 | |
| LOW | agent/tools/read/__init__.py | 1 | |
| LOW | agent/tools/scheduler/task_store.py | 10 | |
| LOW | agent/tools/scheduler/__init__.py | 5 | |
| LOW | agent/tools/scheduler/integration.py | 7 | |
| LOW | agent/tools/scheduler/scheduler_tool.py | 7 | |
| LOW | agent/tools/scheduler/scheduler_tool.py | 7 | |
| LOW | agent/tools/scheduler/scheduler_tool.py | 11 | |
| LOW | agent/tools/scheduler/scheduler_tool.py | 12 | |
| LOW | agent/tools/scheduler/scheduler_tool.py | 12 | |
| 159 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | config.py | 532 | def _sync_skill_config_to_env(skill_section) -> int: |
| LOW | plugins/cow_cli/cow_cli.py | 549 | def _resolve_bot_type_for_model(model_name: str) -> str: |
| LOW | plugins/cow_cli/cow_cli.py | 1099 | def _resolve_active_embedding(): |
| LOW | plugins/cow_cli/cow_cli.py | 1323 | def _create_standalone_flush_manager(): |
| LOW | bridge/agent_bridge.py | 21 | def add_openai_compatible_support(bot_instance): |
| LOW | bridge/agent_bridge.py | 735 | def remember_scheduled_output( |
| LOW | bridge/agent_bridge.py | 867 | def _prune_scheduled_in_memory(cls, agent, keep_last_n: int) -> None: |
| LOW | bridge/agent_bridge.py | 1007 | def _refresh_conditional_tools(agent): |
| LOW | bridge/agent_initializer.py | 331 | def _init_embedding_provider_legacy(self, session_id: Optional[str] = None): |
| LOW | bridge/agent_initializer.py | 619 | def _initialize_skill_manager(self, workspace_root: str, session_id: Optional[str] = None): |
| LOW | bridge/agent_initializer.py | 133 | def _restore_conversation_history(self, agent, session_id: str) -> None: |
| LOW | bridge/agent_initializer.py | 182 | def _filter_text_only_messages(messages: list) -> list: |
| LOW | bridge/agent_initializer.py | 381 | def _init_embedding_provider_explicit( |
| LOW | bridge/agent_initializer.py | 449 | def _resolve_embedding_api_key(provider_key: str) -> str: |
| LOW | bridge/agent_initializer.py | 469 | def _resolve_embedding_api_base(provider_key: str, default_base: str) -> str: |
| LOW | bridge/agent_event_handler.py | 83 | def _handle_tool_execution_start(self, data): |
| LOW | bridge/agent_event_handler.py | 86 | def _handle_tool_execution_end(self, data): |
| LOW | tests/test_qianfan_provider.py | 365 | def test_web_console_registers_qianfan_provider(self): |
| LOW | tests/test_qianfan_provider.py | 374 | def test_web_console_allows_qianfan_config_edits(self): |
| LOW | tests/test_qianfan_provider.py | 380 | def test_session_plugins_allow_qianfan(self): |
| LOW | tests/test_qianfan_provider.py | 581 | def test_model_indexes_link_qianfan(self): |
| LOW | tests/test_qianfan_provider.py | 590 | def test_readme_documents_native_qianfan_provider(self): |
| LOW | tests/test_qianfan_provider.py | 597 | def test_vision_docs_document_qianfan_provider(self): |
| LOW | tests/test_qianfan_provider.py | 11 | def test_qianfan_provider_constant_defined(self): |
| LOW | tests/test_qianfan_provider.py | 16 | def test_ernie_constants_are_in_model_list(self): |
| LOW | tests/test_qianfan_provider.py | 46 | def test_qianfan_config_keys_are_available(self): |
| LOW | tests/test_qianfan_provider.py | 52 | def test_agent_bridge_routes_ernie_models_to_qianfan(self): |
| LOW | tests/test_qianfan_provider.py | 74 | def test_cow_cli_routes_ernie_models_to_qianfan(self): |
| LOW | tests/test_qianfan_provider.py | 142 | def test_bot_factory_returns_qianfan_bot(self): |
| LOW | tests/test_qianfan_provider.py | 154 | def test_default_model_uses_ernie_when_model_is_provider_alias(self): |
| LOW | tests/test_qianfan_provider.py | 164 | def test_reply_text_posts_openai_compatible_payload(self): |
| LOW | tests/test_qianfan_provider.py | 214 | def test_reply_text_returns_raw_message_for_non_json_error(self): |
| LOW | tests/test_qianfan_provider.py | 235 | def test_qianfan_bot_supports_vision_for_multimodal_models(self): |
| LOW | tests/test_qianfan_provider.py | 248 | def test_qianfan_bot_does_not_advertise_vision_for_text_only_models(self): |
| LOW | tests/test_qianfan_provider.py | 261 | def test_call_vision_posts_openai_compatible_multimodal_payload(self): |
| LOW | tests/test_qianfan_provider.py | 310 | def test_call_vision_allows_explicit_model_override(self): |
| LOW | tests/test_qianfan_provider.py | 337 | def test_call_vision_returns_error_dict_for_api_error(self): |
| LOW | tests/test_qianfan_provider.py | 405 | def test_vision_auto_discovers_qianfan_when_key_configured(self): |
| LOW | tests/test_qianfan_provider.py | 424 | def test_vision_routes_ernie_model_override_to_qianfan(self): |
| LOW | tests/test_qianfan_provider.py | 443 | def test_vision_main_model_uses_qianfan_when_configured_model_is_ernie(self): |
| LOW | tests/test_qianfan_provider.py | 484 | def test_vision_falls_back_to_qianfan_vl_when_main_model_is_text_only_ernie(self): |
| LOW | tests/test_qianfan_provider.py | 523 | def test_vision_prefers_same_vendor_fallback_over_other_configured_keys(self): |
| LOW | tests/test_qianfan_provider.py | 569 | def test_qianfan_docs_exist_in_all_doc_locales(self): |
| LOW | tests/test_minimax_provider.py | 38 | def test_minimax_provider_key_defined(self): |
| LOW | tests/test_minimax_provider.py | 64 | def test_default_model_string(self): |
| LOW | tests/test_minimax_provider.py | 98 | def test_api_base_no_trailing_slash(self): |
| LOW | tests/test_minimax_provider.py | 102 | def test_voice_to_text_not_supported(self): |
| LOW | tests/test_minimax_provider.py | 107 | def test_text_to_voice_success(self): |
| LOW | tests/test_minimax_provider.py | 144 | def test_text_to_voice_no_audio_returns_error(self): |
| LOW | tests/test_minimax_provider.py | 173 | def test_minimax_voice_factory(self): |
| LOW | tests/test_youdao_translator.py | 39 | def test_init_missing_credentials_raises(self): |
| LOW | tests/test_youdao_translator.py | 52 | def test_truncate_input_short(self): |
| LOW | tests/test_youdao_translator.py | 75 | def test_convert_lang_known_codes(self): |
| LOW | tests/test_youdao_translator.py | 84 | def test_convert_lang_passthrough(self): |
| LOW | tests/test_youdao_translator.py | 162 | def test_translate_multiline_joins_with_newlines(self): |
| LOW | tests/test_youdao_translator.py | 178 | def test_translate_empty_query_returns_empty(self): |
| LOW | tests/test_youdao_translator.py | 185 | def test_translate_error_code_raises(self): |
| LOW | tests/test_youdao_translator.py | 203 | def test_translate_empty_translation_raises(self): |
| LOW | tests/test_youdao_translator.py | 216 | def test_translate_default_target_language(self): |
| LOW | tests/test_youdao_translator.py | 234 | def test_factory_creates_youdao(self): |
| 133 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | agent/tools/browser/browser_service.py | 123 | return t ? t : null; |
| HIGH | agent/tools/browser/browser_service.py | 125 | if (node.nodeType !== Node.ELEMENT_NODE) return null; |
| HIGH | agent/tools/browser/browser_service.py | 127 | if (SKIP.has(tag)) return null; |
| HIGH | agent/tools/browser/browser_service.py | 128 | if (!visible(node)) return null; |
| HIGH | agent/tools/browser/browser_service.py | 133 | if (r !== null) { |
| HIGH | agent/tools/browser/browser_service.py | 134 | if (typeof r === "string") children.push(r); |
| HIGH | agent/tools/browser/browser_service.py | 135 | else children.push(r); |
| HIGH | agent/tools/browser/browser_service.py | 144 | if (children.length === 0) return null; |
| HIGH | agent/tools/browser/browser_service.py | 150 | if (nativeInteractive || implicitInteractive) { |
| HIGH | agent/tools/browser/browser_service.py | 160 | if (!directText && children.length === 0) { |
| HIGH | agent/tools/browser/browser_service.py | 176 | obj.name = node.name || undefined; |
| HIGH | agent/tools/browser/browser_service.py | 176 | obj.name = node.name || undefined; |
| HIGH | agent/tools/browser/browser_service.py | 177 | obj.value = node.value || undefined; |
| HIGH | agent/tools/browser/browser_service.py | 177 | obj.value = node.value || undefined; |
| HIGH | agent/tools/browser/browser_service.py | 178 | obj.placeholder = node.placeholder || undefined; |
| HIGH | agent/tools/browser/browser_service.py | 178 | obj.placeholder = node.placeholder || undefined; |
| HIGH | agent/tools/browser/browser_service.py | 71 | if (role && CLICKABLE_ROLES.has(role)) return true; |
| HIGH | agent/tools/browser/browser_service.py | 98 | if (ariaLabel && ariaLabel.trim()) return true; |
| HIGH | agent/tools/browser/browser_service.py | 100 | if (title && title.trim()) return true; |
| HIGH | agent/tools/browser/browser_service.py | 200 | if (children.length === 1 && typeof children[0] === "string") { |
| HIGH | agent/tools/browser/browser_service.py | 761 | const el = window.__cowRefMap && window.__cowRefMap[{ref}]; |
| HIGH | agent/tools/browser/browser_service.py | 789 | const el = window.__cowRefMap && window.__cowRefMap[{ref}]; |
| HIGH | agent/tools/browser/browser_service.py | 818 | const el = window.__cowRefMap && window.__cowRefMap[{ref}]; |
| HIGH | agent/tools/browser/browser_service.py | 819 | if (!el || el.tagName.toLowerCase() !== "select") |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | run.sh | 25 | # Check if using Bash |
| LOW | run.sh | 102 | # Check if version is in supported range (3.7 - 3.12) |
| LOW | run.sh | 691 | # Check if service is running |
| LOW | run.sh | 696 | # Check if cow CLI is available |
| LOW | bridge/agent_bridge.py | 370 | # Check if agent exists for this session |
| LOW | bridge/agent_bridge.py | 513 | # Check if there are files to send (from send/read tool) |
| LOW | agent/tools/tool_manager.py | 100 | # Check if __all__ is defined |
| LOW | agent/tools/write/write.py | 62 | # Write file |
| LOW | agent/tools/read/read.py | 89 | # Check if file exists |
| LOW | agent/tools/read/read.py | 100 | # Check if readable |
| LOW | agent/tools/read/read.py | 108 | # Check if image - return metadata for sending |
| LOW | agent/tools/read/read.py | 112 | # Check if video/audio/binary/archive - return metadata only |
| LOW | agent/tools/read/read.py | 120 | # Check if PDF |
| LOW | agent/tools/read/read.py | 124 | # Check if Office document (.docx, .xlsx, .pptx, etc.) |
| LOW | agent/tools/read/read.py | 247 | # Read file (utf-8-sig strips BOM automatically on Windows) |
| LOW | agent/tools/scheduler/scheduler_tool.py | 340 | # Check if it's relative time (e.g., "+5s", "+10m", "+1h", "+1d") |
| LOW | agent/tools/utils/truncate.py | 100 | # Check if no truncation is needed |
| LOW | agent/tools/utils/truncate.py | 116 | # Check if first line alone exceeds byte limit |
| LOW | agent/tools/utils/truncate.py | 195 | # Check if no truncation is needed |
| LOW | agent/tools/bash/bash.py | 183 | # Check if we need to save full output to temp file |
| LOW | agent/tools/edit/edit.py | 69 | # Check if file exists |
| LOW | agent/tools/edit/edit.py | 73 | # Check if readable/writable |
| LOW | agent/tools/edit/edit.py | 78 | # Read file |
| LOW | agent/tools/edit/edit.py | 143 | # Write file |
| LOW | agent/tools/send/send.py | 60 | # Check if file exists |
| LOW | agent/tools/send/send.py | 64 | # Check if readable |
| LOW | agent/memory/chunker.py | 85 | # Check if adding this line would exceed limit |
| LOW | agent/protocol/agent_stream.py | 506 | # Check if this is a file to send |
| LOW | agent/protocol/agent_stream.py | 820 | # Check if this is a context overflow error (keyword-based, works for all models) |
| LOW | agent/protocol/agent_stream.py | 898 | # Check if error is context overflow (non-retryable, needs session reset) |
| LOW | agent/protocol/agent_stream.py | 910 | # Check if error is message format error (incomplete tool_use/tool_result pairs) |
| LOW | agent/protocol/agent_stream.py | 964 | # Check if error is rate limit (429) |
| LOW | agent/protocol/agent_stream.py | 967 | # Check if error is retryable (timeout, connection, server busy, etc.) |
| LOW | agent/prompt/workspace.py | 45 | # Check if this is a brand new workspace (AGENT.md not yet created). |
| LOW | agent/skills/config.py | 201 | # Check if value is truthy |
| LOW | models/openai_compatible_bot.py | 238 | # Check if already in OpenAI format |
| LOW | models/openai_compatible_bot.py | 302 | # Check if this is a tool result message (user role with tool_result blocks) |
| LOW | models/openai_compatible_bot.py | 336 | # Check if this is an assistant message with tool_use blocks |
| LOW | models/zhipuai/zhipuai_bot.py | 396 | # Check if already in ZhipuAI/OpenAI format |
| LOW | models/zhipuai/zhipuai_bot.py | 435 | # Check if this is a tool result message (user role with tool_result blocks) |
| LOW | models/zhipuai/zhipuai_bot.py | 446 | # Check if this is an assistant message with tool_use blocks |
| LOW | models/dashscope/dashscope_bot.py | 533 | # Check if already in DashScope/OpenAI format |
| LOW | models/dashscope/dashscope_bot.py | 603 | # Check if this is a tool result message (user role with tool_result blocks) |
| LOW | models/dashscope/dashscope_bot.py | 614 | # Check if this is an assistant message with tool_use blocks |
| LOW | models/chatgpt/chat_gpt_bot.py | 165 | # Check if file exists |
| LOW | channel/channel.py | 75 | # Check if agent mode is enabled |
| LOW | channel/dingtalk/dingtalk_channel.py | 730 | # Check if msg exists (for scheduled tasks, msg might be None) |
| LOW | channel/feishu/feishu_channel.py | 1410 | # Check if it's a local file path (file:// protocol) |
| LOW | channel/feishu/feishu_channel.py | 689 | # Check if we can reply to an existing message (need msg_id) |
| LOW | channel/feishu/feishu_channel.py | 1161 | # Check if it's a local file path (file:// protocol) |
| LOW | channel/wecom_bot/wecom_bot_channel.py | 241 | # Check if this is a response to a pending request |
| LOW | skills/skill-creator/scripts/init_skill.py | 208 | # Check if directory already exists |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | agent/tools/write/write.py | 0 | resolve path to absolute path :param path: relative or absolute path :return: absolute path |
| HIGH | agent/tools/read/read.py | 0 | resolve path to absolute path :param path: relative or absolute path :return: absolute path |
| HIGH | agent/tools/edit/edit.py | 0 | resolve path to absolute path :param path: relative or absolute path :return: absolute path |
| HIGH | models/moonshot/moonshot_bot.py | 0 | convert tools from claude format to openai format. claude: {name, description, input_schema} openai: {type: "function", |
| HIGH | models/doubao/doubao_bot.py | 0 | convert tools from claude format to openai format. claude: {name, description, input_schema} openai: {type: "function", |
| HIGH | models/deepseek/deepseek_bot.py | 0 | convert tools from claude format to openai format. claude: {name, description, input_schema} openai: {type: "function", |
| HIGH | models/baidu/baidu_wenxin_session.py | 0 | returns the number of tokens used by a list of messages. |
| HIGH | models/minimax/minimax_session.py | 0 | returns the number of tokens used by a list of messages. |
| HIGH | models/chatgpt/chat_gpt_session.py | 0 | returns the number of tokens used by a list of messages. |
| HIGH | models/chatgpt/chat_gpt_session.py | 0 | returns the number of tokens used by a list of messages. |
| HIGH | models/linkai/link_ai_bot.py | 0 | get api configuration for openai-compatible base class |
| HIGH | models/chatgpt/chat_gpt_bot.py | 0 | get api configuration for openai-compatible base class |
| HIGH | models/openai/open_ai_bot.py | 0 | get api configuration for openai-compatible base class |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | bridge/agent_initializer.py | 341 | if openai_api_key and openai_api_key not in ["", "YOUR API KEY", "YOUR_API_KEY"]: |
| HIGH | bridge/agent_initializer.py | 357 | if linkai_api_key and linkai_api_key not in ["", "YOUR API KEY", "YOUR_API_KEY"]: |
| HIGH | bridge/agent_initializer.py | 464 | if value in ["", "YOUR API KEY", "YOUR_API_KEY"]: |
| HIGH | bridge/bridge.py | 121 | return v != "" and v not in ("YOUR API KEY", "YOUR_API_KEY") |
| HIGH | agent/memory/embedding/provider.py | 199 | if not self.api_key or self.api_key in ["", "YOUR API KEY", "YOUR_API_KEY"]: |
| HIGH | agent/memory/embedding/provider.py | 317 | if not self.api_key or self.api_key in ["", "YOUR API KEY", "YOUR_API_KEY"]: |
| HIGH | channel/web/web_channel.py | 534 | if val and val not in ("YOUR API KEY", "YOUR_API_KEY"): |
| HIGH | channel/web/web_channel.py | 2014 | return bool(value) and value not in ("", "YOUR API KEY", "YOUR_API_KEY") |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | bridge/agent_bridge.py | 35 | # Create a temporary mixin class that combines the bot with OpenAI compatibility |
| MEDIUM | agent/tools/tool_manager.py | 130 | # Create a temporary instance to get the name |
| MEDIUM | agent/tools/tool_manager.py | 201 | # Create a temporary instance to get the name |
| MEDIUM | agent/tools/tool_manager.py | 576 | # Create a new instance |
| MEDIUM | agent/tools/tool_manager.py | 600 | # Create a temporary instance to get schema |
| MEDIUM | agent/tools/scheduler/integration.py | 218 | # Create a unique session_id for this scheduled task to avoid polluting user's conversation |
| MEDIUM | agent/tools/bash/bash.py | 161 | # Create a mock result with helpful error message |
| MEDIUM | agent/memory/summarizer.py | 706 | # Create main MEMORY.md in workspace root (always needed for bootstrap) |
| MEDIUM | agent/chat/service.py | 167 | # Create a copy of messages for this execution |
| MEDIUM | agent/protocol/agent.py | 415 | # Create a copy of messages for this execution to avoid concurrent modification |
| MEDIUM | channel/wechatmp/passive_reply.py | 18 | # This class is instantiated once per query |
| MEDIUM | channel/wechatmp/active_reply.py | 16 | # This class is instantiated once per query |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | agent/tools/vision/vision.py | 236 | # Step 1: preferred provider — explicit `tools.vision.provider` |
| LOW | agent/tools/vision/vision.py | 247 | # Step 2: auto-discovery chain as fallback |
| LOW | agent/memory/storage.py | 658 | # Step 1: Standard FTS5 (unicode61) — pure ASCII queries only. |
| LOW | agent/memory/storage.py | 673 | # Step 2: Trigram FTS5 — CJK/mixed queries, plus fallback when unicode61 |
| LOW | agent/memory/storage.py | 683 | # Step 3: LIKE fallback — last resort (FTS5 unavailable, or CJK tokens |
| LOW | agent/protocol/agent_stream.py | 1523 | # Step 0: Truncate large tool results in historical turns (30K -> 10K) |
| LOW | agent/protocol/agent_stream.py | 1526 | # Step 1: 识别完整轮次 |
| LOW | agent/protocol/agent_stream.py | 1532 | # Step 2: 轮次限制 - 超出时移除前一半,保留后一半 |
| LOW | agent/protocol/agent_stream.py | 164 | # Step 1: close any orphaned tool_use in the trailing assistant |
| LOW | agent/protocol/agent_stream.py | 196 | # Step 2: append a stable "interrupted" marker so the LLM sees a |
| LOW | agent/protocol/agent_stream.py | 1376 | # Step 1: Aggressively truncate ALL tool results to 5K chars |
| LOW | agent/protocol/agent_stream.py | 1409 | # Step 2: Truncate overly long user text messages (e.g. pasted content) |
| LOW | agent/protocol/agent_stream.py | 1434 | # Step 3: Keep only the last 5 complete turns |
| LOW | agent/protocol/agent_stream.py | 1559 | # Step 3: Token 限制 - 保留完整轮次 |
| LOW | channel/web/static/js/console.js | 663 | // Step 1: replace markdown-it anchor tags whose href points to a video file. |
| LOW | channel/web/static/js/console.js | 668 | // Step 2: replace any remaining bare video URLs in text nodes (not inside HTML tags). |
| LOW | channel/web/static/js/console.js | 686 | // Step 1: anchor whose href points to an image file -> replace with <img> preview. |
| LOW | channel/web/static/js/console.js | 691 | // Step 2: bare image URLs left in text nodes (rare — markdown-it's linkify usually catches them). |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | config.py | 341 | # 将json字符串反序列化为dict类型。 |
| LOW | docker/entrypoint.sh | 1 | #!/bin/bash |
| LOW | plugins/tool/README.md | 121 | ###### 发送短信 |
| LOW | agent/memory/embedding/provider.py | 61 | # Fields: |
| LOW | agent/chat/service.py | 201 | trimmed = len(executor.messages) < original_length |
| LOW | models/openai/open_ai_bot.py | 161 | # which calls /chat/completions via our shared HTTP client. The previous |
| LOW | models/openai/openai_http_client.py | 341 | # error-shape that `_handle_stream_response` previously emitted. |
| LOW | channel/web/web_channel.py | 1961 | # Listed verbatim (not via const.*) because these are skill-side names |
| LOW | channel/web/web_channel.py | 2101 | # vendors like Zhipu/MiniMax the bot hard-codes the vision model |
| LOW | channel/web/static/js/console.js | 3881 | overlay.addEventListener('click', onOverlayClick); |
| LOW | channel/web/static/js/console.js | 4701 | // standalone dispatcher lands. |
| LOW | channel/web/static/js/console.js | 4881 | // `scope` lets the caller (renderCapabilityBody) target a still-detached |
| LOW | voice/xunfei/xunfei_tts.py | 1 | # -*- coding:utf-8 -*- |
| LOW | voice/xunfei/xunfei_asr.py | 1 | # -*- coding:utf-8 -*- |
| LOW | voice/xunfei/xunfei_voice.py | 1 | ##################################################################### |
| LOW | voice/xunfei/xunfei_voice.py | 61 | # 识别本地文件 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | agent/memory/manager.py | 215 | # No embeddings, just use None |
| MEDIUM | agent/memory/manager.py | 313 | # on any sibling helpers — keeps it robust against partial reloads |