auto-coder 0.1.400__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.0.dist-info/LICENSE +158 -0
- auto_coder-2.0.0.dist-info/METADATA +558 -0
- auto_coder-2.0.0.dist-info/RECORD +795 -0
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +25 -4
- autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
- autocoder/agent/base_agentic/types.py +42 -0
- autocoder/agent/entry_command_agent/chat.py +73 -59
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +1029 -2310
- autocoder/auto_coder_terminal.py +26 -0
- autocoder/auto_coder_terminal_v3.py +190 -0
- autocoder/chat/conf_command.py +224 -124
- autocoder/chat/models_command.py +361 -299
- autocoder/chat/rules_command.py +79 -31
- autocoder/chat_auto_coder.py +1021 -372
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +26 -9
- autocoder/commands/auto_web.py +1 -1
- autocoder/commands/tools.py +44 -44
- autocoder/common/__init__.py +150 -128
- autocoder/common/ac_style_command_parser/__init__.py +39 -2
- autocoder/common/ac_style_command_parser/config.py +422 -0
- autocoder/common/ac_style_command_parser/parser.py +292 -78
- autocoder/common/ac_style_command_parser/test_parser.py +241 -16
- autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
- autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
- autocoder/common/action_yml_file_manager.py +25 -13
- autocoder/common/agent_events/__init__.py +52 -0
- autocoder/common/agent_events/agent_event_emitter.py +193 -0
- autocoder/common/agent_events/event_factory.py +177 -0
- autocoder/common/agent_events/examples.py +307 -0
- autocoder/common/agent_events/types.py +113 -0
- autocoder/common/agent_events/utils.py +68 -0
- autocoder/common/agent_hooks/__init__.py +44 -0
- autocoder/common/agent_hooks/examples.py +582 -0
- autocoder/common/agent_hooks/hook_executor.py +217 -0
- autocoder/common/agent_hooks/hook_manager.py +288 -0
- autocoder/common/agent_hooks/types.py +133 -0
- autocoder/common/agent_hooks/utils.py +99 -0
- autocoder/common/agent_query_queue/queue_executor.py +324 -0
- autocoder/common/agent_query_queue/queue_manager.py +325 -0
- autocoder/common/agents/__init__.py +11 -0
- autocoder/common/agents/agent_manager.py +323 -0
- autocoder/common/agents/agent_parser.py +189 -0
- autocoder/common/agents/example_usage.py +344 -0
- autocoder/common/agents/integration_example.py +330 -0
- autocoder/common/agents/test_agent_parser.py +545 -0
- autocoder/common/async_utils.py +101 -0
- autocoder/common/auto_coder_lang.py +23 -972
- autocoder/common/autocoderargs_parser/__init__.py +14 -0
- autocoder/common/autocoderargs_parser/parser.py +184 -0
- autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
- autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
- autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
- autocoder/common/autocoderargs_parser/token_parser.py +290 -0
- autocoder/common/buildin_tokenizer.py +2 -4
- autocoder/common/code_auto_generate.py +149 -74
- autocoder/common/code_auto_generate_diff.py +163 -70
- autocoder/common/code_auto_generate_editblock.py +179 -89
- autocoder/common/code_auto_generate_strict_diff.py +167 -72
- autocoder/common/code_auto_merge_editblock.py +13 -6
- autocoder/common/code_modification_ranker.py +1 -1
- autocoder/common/command_completer.py +3 -3
- autocoder/common/command_file_manager/manager.py +183 -47
- autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
- autocoder/common/command_templates.py +1 -1
- autocoder/common/conf_utils.py +2 -4
- autocoder/common/conversations/config.py +11 -3
- autocoder/common/conversations/get_conversation_manager.py +100 -2
- autocoder/common/conversations/llm_stats_models.py +264 -0
- autocoder/common/conversations/manager.py +112 -28
- autocoder/common/conversations/models.py +16 -2
- autocoder/common/conversations/storage/index_manager.py +134 -10
- autocoder/common/core_config/__init__.py +63 -0
- autocoder/common/core_config/agentic_mode_manager.py +109 -0
- autocoder/common/core_config/base_manager.py +123 -0
- autocoder/common/core_config/compatibility.py +151 -0
- autocoder/common/core_config/config_manager.py +156 -0
- autocoder/common/core_config/conversation_manager.py +31 -0
- autocoder/common/core_config/exclude_manager.py +72 -0
- autocoder/common/core_config/file_manager.py +177 -0
- autocoder/common/core_config/human_as_model_manager.py +129 -0
- autocoder/common/core_config/lib_manager.py +54 -0
- autocoder/common/core_config/main_manager.py +81 -0
- autocoder/common/core_config/mode_manager.py +126 -0
- autocoder/common/core_config/models.py +70 -0
- autocoder/common/core_config/test_memory_manager.py +1056 -0
- autocoder/common/env_manager.py +282 -0
- autocoder/common/env_manager_usage_example.py +211 -0
- autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
- autocoder/common/file_checkpoint/manager.py +264 -48
- autocoder/common/file_checkpoint/test_backup.py +1 -18
- autocoder/common/file_checkpoint/test_manager.py +270 -1
- autocoder/common/file_checkpoint/test_store.py +1 -17
- autocoder/common/file_handler/__init__.py +23 -0
- autocoder/common/file_handler/active_context_handler.py +159 -0
- autocoder/common/file_handler/add_files_handler.py +409 -0
- autocoder/common/file_handler/chat_handler.py +180 -0
- autocoder/common/file_handler/coding_handler.py +401 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/file_monitor/test_file_monitor.py +307 -0
- autocoder/common/git_utils.py +51 -10
- autocoder/common/global_cancel.py +15 -6
- autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
- autocoder/common/international/__init__.py +31 -0
- autocoder/common/international/demo_international.py +92 -0
- autocoder/common/international/message_manager.py +157 -0
- autocoder/common/international/messages/__init__.py +56 -0
- autocoder/common/international/messages/async_command_messages.py +507 -0
- autocoder/common/international/messages/auto_coder_messages.py +2208 -0
- autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
- autocoder/common/international/messages/command_help_messages.py +986 -0
- autocoder/common/international/messages/conversation_command_messages.py +191 -0
- autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
- autocoder/common/international/messages/queue_command_messages.py +751 -0
- autocoder/common/international/messages/rules_command_messages.py +77 -0
- autocoder/common/international/messages/sdk_messages.py +1707 -0
- autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
- autocoder/common/international/messages/tool_display_messages.py +1212 -0
- autocoder/common/international/messages/workflow_exception_messages.py +473 -0
- autocoder/common/international/test_international.py +612 -0
- autocoder/common/linter_core/__init__.py +28 -0
- autocoder/common/linter_core/base_linter.py +61 -0
- autocoder/common/linter_core/config_loader.py +271 -0
- autocoder/common/linter_core/formatters/__init__.py +0 -0
- autocoder/common/linter_core/formatters/base_formatter.py +38 -0
- autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
- autocoder/common/linter_core/linter.py +166 -0
- autocoder/common/linter_core/linter_factory.py +216 -0
- autocoder/common/linter_core/linter_manager.py +333 -0
- autocoder/common/linter_core/linters/__init__.py +9 -0
- autocoder/common/linter_core/linters/java_linter.py +342 -0
- autocoder/common/linter_core/linters/python_linter.py +115 -0
- autocoder/common/linter_core/linters/typescript_linter.py +119 -0
- autocoder/common/linter_core/models/__init__.py +7 -0
- autocoder/common/linter_core/models/lint_result.py +91 -0
- autocoder/common/linter_core/models.py +33 -0
- autocoder/common/linter_core/tests/__init__.py +3 -0
- autocoder/common/linter_core/tests/test_config_loader.py +323 -0
- autocoder/common/linter_core/tests/test_config_loading.py +308 -0
- autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
- autocoder/common/linter_core/tests/test_formatters.py +147 -0
- autocoder/common/linter_core/tests/test_integration.py +317 -0
- autocoder/common/linter_core/tests/test_java_linter.py +496 -0
- autocoder/common/linter_core/tests/test_linters.py +265 -0
- autocoder/common/linter_core/tests/test_models.py +81 -0
- autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
- autocoder/common/linter_core/tests/verify_fixes.py +183 -0
- autocoder/common/llm_friendly_package/__init__.py +31 -0
- autocoder/common/llm_friendly_package/base_manager.py +102 -0
- autocoder/common/llm_friendly_package/docs_manager.py +121 -0
- autocoder/common/llm_friendly_package/library_manager.py +171 -0
- autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
- autocoder/common/llm_friendly_package/models.py +40 -0
- autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
- autocoder/common/llms/__init__.py +15 -0
- autocoder/common/llms/demo_error_handling.py +85 -0
- autocoder/common/llms/factory.py +142 -0
- autocoder/common/llms/manager.py +264 -0
- autocoder/common/llms/pricing.py +121 -0
- autocoder/common/llms/registry.py +288 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +746 -0
- autocoder/common/{context_pruner.py → pruner/context_pruner.py} +137 -40
- autocoder/common/pruner/conversation_message_ids_api.py +386 -0
- autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
- autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
- autocoder/common/pruner/conversation_normalizer.py +347 -0
- autocoder/common/{conversation_pruner.py → pruner/conversation_pruner.py} +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +784 -0
- autocoder/common/pruner/test_context_pruner.py +546 -0
- autocoder/common/pruner/test_conversation_normalizer.py +502 -0
- autocoder/common/pruner/test_tool_content_detector.py +324 -0
- autocoder/common/pruner/tool_content_detector.py +227 -0
- autocoder/common/pruner/tools/__init__.py +18 -0
- autocoder/common/pruner/tools/query_message_ids.py +264 -0
- autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
- autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
- autocoder/common/pull_requests/__init__.py +9 -1
- autocoder/common/pull_requests/utils.py +122 -1
- autocoder/common/rag_manager/rag_manager.py +36 -40
- autocoder/common/rulefiles/__init__.py +53 -1
- autocoder/common/rulefiles/api.py +250 -0
- autocoder/common/rulefiles/core/__init__.py +14 -0
- autocoder/common/rulefiles/core/manager.py +241 -0
- autocoder/common/rulefiles/core/selector.py +805 -0
- autocoder/common/rulefiles/models/__init__.py +20 -0
- autocoder/common/rulefiles/models/index.py +16 -0
- autocoder/common/rulefiles/models/init_rule.py +18 -0
- autocoder/common/rulefiles/models/rule_file.py +18 -0
- autocoder/common/rulefiles/models/rule_relevance.py +14 -0
- autocoder/common/rulefiles/models/summary.py +16 -0
- autocoder/common/rulefiles/test_rulefiles.py +776 -0
- autocoder/common/rulefiles/utils/__init__.py +34 -0
- autocoder/common/rulefiles/utils/monitor.py +86 -0
- autocoder/common/rulefiles/utils/parser.py +230 -0
- autocoder/common/save_formatted_log.py +67 -10
- autocoder/common/search_replace.py +8 -1
- autocoder/common/search_replace_patch/__init__.py +24 -0
- autocoder/common/search_replace_patch/base.py +115 -0
- autocoder/common/search_replace_patch/manager.py +248 -0
- autocoder/common/search_replace_patch/patch_replacer.py +304 -0
- autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
- autocoder/common/search_replace_patch/string_replacer.py +181 -0
- autocoder/common/search_replace_patch/tests/__init__.py +3 -0
- autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
- autocoder/common/search_replace_patch/tests/test_base.py +188 -0
- autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
- autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
- autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
- autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
- autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
- autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
- autocoder/common/shell_commands/__init__.py +197 -0
- autocoder/common/shell_commands/background_process_notifier.py +346 -0
- autocoder/common/shell_commands/command_executor.py +1127 -0
- autocoder/common/shell_commands/error_recovery.py +541 -0
- autocoder/common/shell_commands/exceptions.py +120 -0
- autocoder/common/shell_commands/interactive_executor.py +476 -0
- autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
- autocoder/common/shell_commands/interactive_process.py +744 -0
- autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
- autocoder/common/shell_commands/monitoring.py +529 -0
- autocoder/common/shell_commands/process_cleanup.py +386 -0
- autocoder/common/shell_commands/process_manager.py +606 -0
- autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
- autocoder/common/shell_commands/tests/__init__.py +6 -0
- autocoder/common/shell_commands/tests/conftest.py +118 -0
- autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
- autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
- autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
- autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
- autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
- autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
- autocoder/common/shell_commands/tests/test_integration.py +664 -0
- autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
- autocoder/common/shell_commands/tests/test_performance.py +632 -0
- autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
- autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
- autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
- autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
- autocoder/common/shell_commands/timeout_config.py +315 -0
- autocoder/common/shell_commands/timeout_manager.py +352 -0
- autocoder/common/terminal_paste/__init__.py +14 -0
- autocoder/common/terminal_paste/demo.py +145 -0
- autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
- autocoder/common/terminal_paste/paste_handler.py +200 -0
- autocoder/common/terminal_paste/paste_manager.py +118 -0
- autocoder/common/terminal_paste/tests/__init__.py +1 -0
- autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
- autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
- autocoder/common/terminal_paste/utils.py +163 -0
- autocoder/common/test_autocoder_args.py +232 -0
- autocoder/common/test_env_manager.py +173 -0
- autocoder/common/test_env_manager_integration.py +159 -0
- autocoder/common/text_similarity/__init__.py +9 -0
- autocoder/common/text_similarity/demo.py +216 -0
- autocoder/common/text_similarity/examples.py +266 -0
- autocoder/common/text_similarity/test_text_similarity.py +306 -0
- autocoder/common/text_similarity/text_similarity.py +194 -0
- autocoder/common/text_similarity/utils.py +125 -0
- autocoder/common/todos/__init__.py +61 -0
- autocoder/common/todos/cache/__init__.py +16 -0
- autocoder/common/todos/cache/base_cache.py +89 -0
- autocoder/common/todos/cache/cache_manager.py +228 -0
- autocoder/common/todos/cache/memory_cache.py +225 -0
- autocoder/common/todos/config.py +155 -0
- autocoder/common/todos/exceptions.py +35 -0
- autocoder/common/todos/get_todo_manager.py +161 -0
- autocoder/common/todos/manager.py +537 -0
- autocoder/common/todos/models.py +239 -0
- autocoder/common/todos/storage/__init__.py +14 -0
- autocoder/common/todos/storage/base_storage.py +76 -0
- autocoder/common/todos/storage/file_storage.py +278 -0
- autocoder/common/tokens/__init__.py +15 -0
- autocoder/common/tokens/counter.py +44 -2
- autocoder/common/tools_manager/__init__.py +17 -0
- autocoder/common/tools_manager/examples.py +162 -0
- autocoder/common/tools_manager/manager.py +385 -0
- autocoder/common/tools_manager/models.py +39 -0
- autocoder/common/tools_manager/test_tools_manager.py +303 -0
- autocoder/common/tools_manager/utils.py +191 -0
- autocoder/common/v2/agent/agentic_callbacks.py +270 -0
- autocoder/common/v2/agent/agentic_edit.py +2729 -2052
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +43 -2
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +52 -0
- autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
- autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
- autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
- autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +565 -30
- autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
- autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
- autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
- autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +244 -51
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
- autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +409 -140
- autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +209 -194
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +135 -0
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +328 -0
- autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
- autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
- autocoder/common/v2/agent/agentic_edit_types.py +386 -10
- autocoder/common/v2/agent/runner/__init__.py +31 -0
- autocoder/common/v2/agent/runner/base_runner.py +92 -0
- autocoder/common/v2/agent/runner/file_based_event_runner.py +217 -0
- autocoder/common/v2/agent/runner/sdk_runner.py +182 -0
- autocoder/common/v2/agent/runner/terminal_runner.py +396 -0
- autocoder/common/v2/agent/runner/tool_display.py +589 -0
- autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
- autocoder/common/v2/agent/test_agentic_edit.py +194 -0
- autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
- autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
- autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
- autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
- autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
- autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
- autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
- autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
- autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
- autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
- autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
- autocoder/common/v2/code_auto_generate.py +136 -78
- autocoder/common/v2/code_auto_generate_diff.py +135 -79
- autocoder/common/v2/code_auto_generate_editblock.py +174 -99
- autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
- autocoder/common/v2/code_auto_merge.py +1 -1
- autocoder/common/v2/code_auto_merge_editblock.py +13 -1
- autocoder/common/v2/code_diff_manager.py +3 -3
- autocoder/common/v2/code_editblock_manager.py +4 -14
- autocoder/common/v2/code_manager.py +1 -1
- autocoder/common/v2/code_strict_diff_manager.py +2 -2
- autocoder/common/wrap_llm_hint/__init__.py +10 -0
- autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
- autocoder/common/wrap_llm_hint/utils.py +432 -0
- autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
- autocoder/completer/__init__.py +8 -0
- autocoder/completer/command_completer_v2.py +1051 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +165 -7
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +117 -125
- autocoder/{agent → index/filter}/agentic_filter.py +323 -334
- autocoder/index/filter/normal_filter.py +5 -11
- autocoder/index/filter/quick_filter.py +1 -1
- autocoder/index/index.py +36 -9
- autocoder/index/tests/__init__.py +1 -0
- autocoder/index/tests/run_tests.py +195 -0
- autocoder/index/tests/test_entry.py +303 -0
- autocoder/index/tests/test_index_manager.py +314 -0
- autocoder/index/tests/test_module_integration.py +300 -0
- autocoder/index/tests/test_symbols_utils.py +183 -0
- autocoder/inner/__init__.py +4 -0
- autocoder/inner/agentic.py +932 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +156 -37
- autocoder/pyproject/__init__.py +32 -29
- autocoder/rag/agentic_rag.py +215 -75
- autocoder/rag/cache/simple_cache.py +1 -2
- autocoder/rag/loaders/image_loader.py +1 -1
- autocoder/rag/long_context_rag.py +42 -26
- autocoder/rag/qa_conversation_strategy.py +1 -1
- autocoder/rag/terminal/__init__.py +17 -0
- autocoder/rag/terminal/args.py +581 -0
- autocoder/rag/terminal/bootstrap.py +61 -0
- autocoder/rag/terminal/command_handlers.py +653 -0
- autocoder/rag/terminal/formatters/__init__.py +20 -0
- autocoder/rag/terminal/formatters/base.py +70 -0
- autocoder/rag/terminal/formatters/json_format.py +66 -0
- autocoder/rag/terminal/formatters/stream_json.py +95 -0
- autocoder/rag/terminal/formatters/text.py +28 -0
- autocoder/rag/terminal/init.py +120 -0
- autocoder/rag/terminal/utils.py +106 -0
- autocoder/rag/test_agentic_rag.py +389 -0
- autocoder/rag/test_doc_filter.py +3 -3
- autocoder/rag/test_long_context_rag.py +1 -1
- autocoder/rag/test_token_limiter.py +517 -10
- autocoder/rag/token_counter.py +3 -0
- autocoder/rag/token_limiter.py +19 -15
- autocoder/rag/tools/__init__.py +26 -2
- autocoder/rag/tools/bochaai_example.py +343 -0
- autocoder/rag/tools/bochaai_sdk.py +541 -0
- autocoder/rag/tools/metaso_example.py +268 -0
- autocoder/rag/tools/metaso_sdk.py +417 -0
- autocoder/rag/tools/recall_tool.py +28 -7
- autocoder/rag/tools/run_integration_tests.py +204 -0
- autocoder/rag/tools/test_all_providers.py +318 -0
- autocoder/rag/tools/test_bochaai_integration.py +482 -0
- autocoder/rag/tools/test_final_integration.py +215 -0
- autocoder/rag/tools/test_metaso_integration.py +424 -0
- autocoder/rag/tools/test_metaso_real.py +171 -0
- autocoder/rag/tools/test_web_crawl_tool.py +639 -0
- autocoder/rag/tools/test_web_search_tool.py +509 -0
- autocoder/rag/tools/todo_read_tool.py +202 -0
- autocoder/rag/tools/todo_write_tool.py +412 -0
- autocoder/rag/tools/web_crawl_tool.py +634 -0
- autocoder/rag/tools/web_search_tool.py +558 -0
- autocoder/rag/tools/web_tools_example.py +119 -0
- autocoder/rag/types.py +16 -0
- autocoder/rag/variable_holder.py +4 -2
- autocoder/rags.py +86 -79
- autocoder/regexproject/__init__.py +23 -21
- autocoder/run_context.py +9 -0
- autocoder/sdk/__init__.py +50 -161
- autocoder/sdk/api.py +370 -0
- autocoder/sdk/async_runner/__init__.py +26 -0
- autocoder/sdk/async_runner/async_executor.py +650 -0
- autocoder/sdk/async_runner/async_handler.py +356 -0
- autocoder/sdk/async_runner/markdown_processor.py +595 -0
- autocoder/sdk/async_runner/task_metadata.py +284 -0
- autocoder/sdk/async_runner/worktree_manager.py +438 -0
- autocoder/sdk/cli/__init__.py +2 -5
- autocoder/sdk/cli/formatters.py +28 -204
- autocoder/sdk/cli/handlers.py +77 -44
- autocoder/sdk/cli/main.py +158 -170
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -267
- autocoder/sdk/core/bridge.py +298 -118
- autocoder/sdk/exceptions.py +18 -12
- autocoder/sdk/formatters/__init__.py +19 -0
- autocoder/sdk/formatters/input.py +64 -0
- autocoder/sdk/formatters/output.py +247 -0
- autocoder/sdk/formatters/stream.py +54 -0
- autocoder/sdk/models/__init__.py +6 -5
- autocoder/sdk/models/options.py +55 -18
- autocoder/sdk/utils/formatters.py +27 -195
- autocoder/suffixproject/__init__.py +28 -25
- autocoder/terminal/__init__.py +14 -0
- autocoder/terminal/app.py +454 -0
- autocoder/terminal/args.py +32 -0
- autocoder/terminal/bootstrap.py +178 -0
- autocoder/terminal/command_processor.py +521 -0
- autocoder/terminal/command_registry.py +57 -0
- autocoder/terminal/help.py +97 -0
- autocoder/terminal/tasks/__init__.py +5 -0
- autocoder/terminal/tasks/background.py +77 -0
- autocoder/terminal/tasks/task_event.py +70 -0
- autocoder/terminal/ui/__init__.py +13 -0
- autocoder/terminal/ui/completer.py +268 -0
- autocoder/terminal/ui/keybindings.py +75 -0
- autocoder/terminal/ui/session.py +41 -0
- autocoder/terminal/ui/toolbar.py +64 -0
- autocoder/terminal/utils/__init__.py +13 -0
- autocoder/terminal/utils/errors.py +18 -0
- autocoder/terminal/utils/paths.py +19 -0
- autocoder/terminal/utils/shell.py +43 -0
- autocoder/terminal_v3/__init__.py +10 -0
- autocoder/terminal_v3/app.py +201 -0
- autocoder/terminal_v3/handlers/__init__.py +5 -0
- autocoder/terminal_v3/handlers/command_handler.py +131 -0
- autocoder/terminal_v3/models/__init__.py +6 -0
- autocoder/terminal_v3/models/conversation_buffer.py +214 -0
- autocoder/terminal_v3/models/message.py +50 -0
- autocoder/terminal_v3/models/tool_display.py +247 -0
- autocoder/terminal_v3/ui/__init__.py +7 -0
- autocoder/terminal_v3/ui/keybindings.py +56 -0
- autocoder/terminal_v3/ui/layout.py +141 -0
- autocoder/terminal_v3/ui/styles.py +43 -0
- autocoder/tsproject/__init__.py +23 -23
- autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
- autocoder/utils/llms.py +88 -80
- autocoder/utils/math_utils.py +101 -0
- autocoder/utils/model_provider_selector.py +16 -4
- autocoder/utils/operate_config_api.py +33 -5
- autocoder/utils/thread_utils.py +2 -2
- autocoder/version.py +4 -2
- autocoder/workflow_agents/__init__.py +84 -0
- autocoder/workflow_agents/agent.py +143 -0
- autocoder/workflow_agents/exceptions.py +573 -0
- autocoder/workflow_agents/executor.py +489 -0
- autocoder/workflow_agents/loader.py +737 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +172 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-0.1.400.dist-info/METADATA +0 -396
- auto_coder-0.1.400.dist-info/RECORD +0 -425
- auto_coder-0.1.400.dist-info/licenses/LICENSE +0 -201
- autocoder/auto_coder_server.py +0 -672
- autocoder/benchmark.py +0 -138
- autocoder/common/ac_style_command_parser/example.py +0 -7
- autocoder/common/cleaner.py +0 -31
- autocoder/common/command_completer_v2.py +0 -615
- autocoder/common/directory_cache/__init__.py +0 -1
- autocoder/common/directory_cache/cache.py +0 -192
- autocoder/common/directory_cache/test_cache.py +0 -190
- autocoder/common/file_checkpoint/examples.py +0 -217
- autocoder/common/llm_friendly_package_example.py +0 -138
- autocoder/common/llm_friendly_package_test.py +0 -63
- autocoder/common/pull_requests/test_module.py +0 -1
- autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
- autocoder/common/text.py +0 -30
- autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
- autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
- autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
- autocoder/common/v2/agent/agentic_tool_display.py +0 -183
- autocoder/plugins/dynamic_completion_example.py +0 -148
- autocoder/plugins/sample_plugin.py +0 -160
- autocoder/sdk/cli/__main__.py +0 -26
- autocoder/sdk/cli/completion_wrapper.py +0 -38
- autocoder/sdk/cli/install_completion.py +0 -301
- autocoder/sdk/models/messages.py +0 -209
- autocoder/sdk/session/__init__.py +0 -32
- autocoder/sdk/session/session.py +0 -106
- autocoder/sdk/session/session_manager.py +0 -56
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MCP Tools Types Module
|
|
3
|
+
|
|
4
|
+
This module contains all the type definitions used in the MCP tools system,
|
|
5
|
+
including request/response models, server configurations, and result types.
|
|
6
|
+
"""
|
|
7
|
+
|
|
1
8
|
from typing import List, Dict, Any, Optional, Union
|
|
2
9
|
from pydantic import BaseModel, Field
|
|
3
10
|
|
|
@@ -13,39 +20,78 @@ class MarketplaceMCPServerItem(BaseModel):
|
|
|
13
20
|
env: Dict[str, str] = Field(default_factory=dict)
|
|
14
21
|
url: str = "" # sse url
|
|
15
22
|
|
|
23
|
+
|
|
16
24
|
class McpRequest(BaseModel):
|
|
25
|
+
"""Base request for MCP operations"""
|
|
17
26
|
query: str
|
|
18
27
|
model: Optional[str] = None
|
|
19
28
|
product_mode: Optional[str] = None
|
|
20
29
|
|
|
21
30
|
|
|
22
31
|
class McpInstallRequest(BaseModel):
|
|
32
|
+
"""Request to install an MCP server"""
|
|
23
33
|
server_name_or_config: Optional[str] = None
|
|
24
|
-
market_install_item:Optional[MarketplaceMCPServerItem] = None
|
|
34
|
+
market_install_item: Optional[MarketplaceMCPServerItem] = None
|
|
25
35
|
|
|
26
36
|
|
|
27
37
|
class McpRemoveRequest(BaseModel):
|
|
38
|
+
"""Request to remove an MCP server"""
|
|
28
39
|
server_name: str
|
|
29
40
|
|
|
30
41
|
|
|
31
42
|
class McpListRequest(BaseModel):
|
|
32
43
|
"""Request to list all builtin MCP servers"""
|
|
33
|
-
path:str="/list"
|
|
44
|
+
path: str = "/list"
|
|
34
45
|
|
|
35
46
|
|
|
36
47
|
class McpListRunningRequest(BaseModel):
|
|
37
48
|
"""Request to list all running MCP servers"""
|
|
38
|
-
path:str="/list/running"
|
|
49
|
+
path: str = "/list/running"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class McpRefreshRequest(BaseModel):
|
|
53
|
+
"""Request to refresh MCP server connections"""
|
|
54
|
+
name: Optional[str] = None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class McpServerInfoRequest(BaseModel):
|
|
58
|
+
"""Request to get MCP server info"""
|
|
59
|
+
model: Optional[str] = None
|
|
60
|
+
product_mode: Optional[str] = None
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class MarketplaceAddRequest(BaseModel):
|
|
64
|
+
"""Request to add a new marketplace item"""
|
|
65
|
+
name: str
|
|
66
|
+
description: Optional[str] = ""
|
|
67
|
+
mcp_type: str = "command" # command/sse
|
|
68
|
+
command: Optional[str] = "" # npm/uvx/python/node/...
|
|
69
|
+
args: Optional[List[str]] = Field(default_factory=list)
|
|
70
|
+
env: Optional[Dict[str, str]] = Field(default_factory=dict)
|
|
71
|
+
url: Optional[str] = "" # sse url
|
|
72
|
+
|
|
39
73
|
|
|
74
|
+
class MarketplaceUpdateRequest(BaseModel):
|
|
75
|
+
"""Request to update an existing marketplace item"""
|
|
76
|
+
name: str
|
|
77
|
+
description: Optional[str] = ""
|
|
78
|
+
mcp_type: str = "command" # command/sse
|
|
79
|
+
command: Optional[str] = "" # npm/uvx/python/node/...
|
|
80
|
+
args: Optional[List[str]] = Field(default_factory=list)
|
|
81
|
+
env: Optional[Dict[str, str]] = Field(default_factory=dict)
|
|
82
|
+
url: Optional[str] = "" # sse url
|
|
40
83
|
|
|
41
|
-
|
|
84
|
+
|
|
85
|
+
# Result types
|
|
42
86
|
class ServerConfig(BaseModel):
|
|
87
|
+
"""Server configuration"""
|
|
43
88
|
command: str
|
|
44
89
|
args: List[str] = Field(default_factory=list)
|
|
45
90
|
env: Dict[str, str] = Field(default_factory=dict)
|
|
46
91
|
|
|
47
92
|
|
|
48
93
|
class InstallResult(BaseModel):
|
|
94
|
+
"""Result of server installation"""
|
|
49
95
|
success: bool
|
|
50
96
|
server_name: Optional[str] = None
|
|
51
97
|
config: Optional[ServerConfig] = None
|
|
@@ -53,67 +99,75 @@ class InstallResult(BaseModel):
|
|
|
53
99
|
|
|
54
100
|
|
|
55
101
|
class RemoveResult(BaseModel):
|
|
102
|
+
"""Result of server removal"""
|
|
56
103
|
success: bool
|
|
57
104
|
server_name: Optional[str] = None
|
|
58
105
|
error: Optional[str] = None
|
|
59
106
|
|
|
60
107
|
|
|
61
108
|
class ExternalServerInfo(BaseModel):
|
|
109
|
+
"""External server information"""
|
|
62
110
|
name: str
|
|
63
111
|
description: str
|
|
64
112
|
|
|
65
113
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
114
|
class ListResult(BaseModel):
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
external_servers: List[MarketplaceMCPServerItem] = Field(
|
|
73
|
-
|
|
74
|
-
marketplace_items: List[MarketplaceMCPServerItem] = Field(
|
|
75
|
-
default_factory=list)
|
|
115
|
+
"""Result of server listing"""
|
|
116
|
+
builtin_servers: List[MarketplaceMCPServerItem] = Field(default_factory=list)
|
|
117
|
+
external_servers: List[MarketplaceMCPServerItem] = Field(default_factory=list)
|
|
118
|
+
marketplace_items: List[MarketplaceMCPServerItem] = Field(default_factory=list)
|
|
76
119
|
error: Optional[str] = None
|
|
77
120
|
|
|
78
121
|
|
|
79
122
|
class ServerInfo(BaseModel):
|
|
123
|
+
"""Server information"""
|
|
80
124
|
name: str
|
|
81
125
|
|
|
82
126
|
|
|
83
127
|
class ListRunningResult(BaseModel):
|
|
128
|
+
"""Result of running servers listing"""
|
|
84
129
|
servers: List[ServerInfo] = Field(default_factory=list)
|
|
85
130
|
error: Optional[str] = None
|
|
86
131
|
|
|
87
132
|
|
|
88
133
|
class RefreshResult(BaseModel):
|
|
134
|
+
"""Result of server refresh"""
|
|
89
135
|
success: bool
|
|
90
136
|
name: Optional[str] = None
|
|
91
137
|
error: Optional[str] = None
|
|
92
138
|
|
|
93
139
|
|
|
94
140
|
class QueryResult(BaseModel):
|
|
141
|
+
"""Result of MCP query"""
|
|
95
142
|
success: bool
|
|
96
143
|
results: Optional[List[Any]] = None
|
|
97
144
|
error: Optional[str] = None
|
|
98
145
|
|
|
99
146
|
|
|
100
147
|
class ErrorResult(BaseModel):
|
|
148
|
+
"""Error result"""
|
|
101
149
|
success: bool = False
|
|
102
150
|
error: str
|
|
103
151
|
|
|
152
|
+
|
|
104
153
|
class StringResult(BaseModel):
|
|
154
|
+
"""String result"""
|
|
105
155
|
success: bool = True
|
|
106
156
|
result: str
|
|
107
157
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
158
|
+
|
|
159
|
+
class MarketplaceAddResult(BaseModel):
|
|
160
|
+
"""Result for marketplace add operation"""
|
|
161
|
+
success: bool
|
|
162
|
+
name: str
|
|
163
|
+
error: Optional[str] = None
|
|
111
164
|
|
|
112
165
|
|
|
113
|
-
class
|
|
114
|
-
"""
|
|
115
|
-
|
|
116
|
-
|
|
166
|
+
class MarketplaceUpdateResult(BaseModel):
|
|
167
|
+
"""Result for marketplace update operation"""
|
|
168
|
+
success: bool
|
|
169
|
+
name: str
|
|
170
|
+
error: Optional[str] = None
|
|
117
171
|
|
|
118
172
|
|
|
119
173
|
class McpExternalServer(BaseModel):
|
|
@@ -127,43 +181,62 @@ class McpExternalServer(BaseModel):
|
|
|
127
181
|
runtime: str
|
|
128
182
|
|
|
129
183
|
|
|
130
|
-
class
|
|
131
|
-
"""
|
|
184
|
+
class McpResponse(BaseModel):
|
|
185
|
+
"""MCP response containing result and optional error"""
|
|
186
|
+
result: str
|
|
187
|
+
error: Optional[str] = None
|
|
188
|
+
raw_result: Optional[Union[
|
|
189
|
+
InstallResult, MarketplaceAddResult, MarketplaceUpdateResult,
|
|
190
|
+
RemoveResult, ListResult, ListRunningResult, RefreshResult,
|
|
191
|
+
QueryResult, ErrorResult, StringResult
|
|
192
|
+
]] = None
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
# Tool and resource access types
|
|
196
|
+
class McpTool(BaseModel):
|
|
197
|
+
"""Represents an MCP tool configuration"""
|
|
132
198
|
name: str
|
|
133
|
-
description: Optional[str] =
|
|
134
|
-
|
|
135
|
-
command: Optional[str] = "" # npm/uvx/python/node/...
|
|
136
|
-
args: Optional[List[str]] = Field(default_factory=list)
|
|
137
|
-
env: Optional[Dict[str, str]] = Field(default_factory=dict)
|
|
138
|
-
url: Optional[str] = "" # sse url
|
|
199
|
+
description: Optional[str] = None
|
|
200
|
+
input_schema: dict = Field(default_factory=dict)
|
|
139
201
|
|
|
140
202
|
|
|
141
|
-
class
|
|
142
|
-
"""
|
|
143
|
-
|
|
203
|
+
class McpResource(BaseModel):
|
|
204
|
+
"""Represents an MCP resource configuration"""
|
|
205
|
+
uri: str
|
|
144
206
|
name: str
|
|
145
|
-
|
|
207
|
+
description: Optional[str] = None
|
|
208
|
+
mime_type: Optional[str] = None
|
|
146
209
|
|
|
147
210
|
|
|
148
|
-
class
|
|
149
|
-
"""
|
|
211
|
+
class McpResourceTemplate(BaseModel):
|
|
212
|
+
"""Represents an MCP resource template"""
|
|
213
|
+
uri_template: str
|
|
150
214
|
name: str
|
|
151
|
-
description: Optional[str] =
|
|
152
|
-
|
|
153
|
-
command: Optional[str] = "" # npm/uvx/python/node/...
|
|
154
|
-
args: Optional[List[str]] = Field(default_factory=list)
|
|
155
|
-
env: Optional[Dict[str, str]] = Field(default_factory=dict)
|
|
156
|
-
url: Optional[str] = "" # sse url
|
|
215
|
+
description: Optional[str] = None
|
|
216
|
+
mime_type: Optional[str] = None
|
|
157
217
|
|
|
158
218
|
|
|
159
|
-
class
|
|
160
|
-
"""
|
|
161
|
-
success: bool
|
|
219
|
+
class McpServer(BaseModel):
|
|
220
|
+
"""Represents an MCP server configuration and status"""
|
|
162
221
|
name: str
|
|
222
|
+
config: str # JSON string of server config
|
|
223
|
+
status: str = "disconnected" # connected, disconnected, connecting
|
|
163
224
|
error: Optional[str] = None
|
|
225
|
+
tools: List[McpTool] = Field(default_factory=list)
|
|
226
|
+
resources: List[McpResource] = Field(default_factory=list)
|
|
227
|
+
resource_templates: List[McpResourceTemplate] = Field(default_factory=list)
|
|
164
228
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
229
|
+
|
|
230
|
+
class McpToolCall(BaseModel):
|
|
231
|
+
"""Represents an MCP tool call"""
|
|
232
|
+
server_name: str = Field(..., description="The name of the MCP server")
|
|
233
|
+
tool_name: str = Field(..., description="The name of the tool to call")
|
|
234
|
+
arguments: Dict[str, Any] = Field(
|
|
235
|
+
default_factory=dict, description="The arguments to pass to the tool"
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
class McpResourceAccess(BaseModel):
|
|
240
|
+
"""Represents an MCP resource access"""
|
|
241
|
+
server_name: str = Field(..., description="The name of the MCP server")
|
|
242
|
+
uri: str = Field(..., description="The URI of the resource to access")
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
功能验证脚本 - 验证MCP工具模块的核心功能
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
import traceback
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
import tempfile
|
|
10
|
+
import json
|
|
11
|
+
|
|
12
|
+
def test_basic_imports():
|
|
13
|
+
"""测试基本导入功能"""
|
|
14
|
+
print("1. 测试基本导入...")
|
|
15
|
+
try:
|
|
16
|
+
from autocoder.common.mcp_tools import (
|
|
17
|
+
McpHub, McpExecutor, McpServerInstaller, McpServer,
|
|
18
|
+
get_mcp_server, McpRequest, McpResponse, MarketplaceMCPServerItem
|
|
19
|
+
)
|
|
20
|
+
print(" ✓ 所有主要类都可以正常导入")
|
|
21
|
+
return True
|
|
22
|
+
except Exception as e:
|
|
23
|
+
print(f" ✗ 导入失败: {e}")
|
|
24
|
+
traceback.print_exc()
|
|
25
|
+
return False
|
|
26
|
+
|
|
27
|
+
def test_type_creation():
|
|
28
|
+
"""测试类型创建功能"""
|
|
29
|
+
print("2. 测试类型创建...")
|
|
30
|
+
try:
|
|
31
|
+
from autocoder.common.mcp_tools.types import (
|
|
32
|
+
McpRequest, McpInstallRequest, MarketplaceMCPServerItem,
|
|
33
|
+
McpToolCall, McpResourceAccess
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# 测试McpRequest
|
|
37
|
+
request = McpRequest(query="test query")
|
|
38
|
+
assert request.query == "test query"
|
|
39
|
+
|
|
40
|
+
# 测试MarketplaceMCPServerItem
|
|
41
|
+
item = MarketplaceMCPServerItem(
|
|
42
|
+
name="test-server",
|
|
43
|
+
description="Test server",
|
|
44
|
+
command="python"
|
|
45
|
+
)
|
|
46
|
+
assert item.name == "test-server"
|
|
47
|
+
|
|
48
|
+
# 测试McpToolCall
|
|
49
|
+
tool_call = McpToolCall(
|
|
50
|
+
server_name="test-server",
|
|
51
|
+
tool_name="test-tool",
|
|
52
|
+
arguments={"param1": "value1"}
|
|
53
|
+
)
|
|
54
|
+
assert tool_call.server_name == "test-server"
|
|
55
|
+
|
|
56
|
+
print(" ✓ 所有类型可以正常创建")
|
|
57
|
+
return True
|
|
58
|
+
except Exception as e:
|
|
59
|
+
print(f" ✗ 类型创建失败: {e}")
|
|
60
|
+
traceback.print_exc()
|
|
61
|
+
return False
|
|
62
|
+
|
|
63
|
+
def test_hub_functionality():
|
|
64
|
+
"""测试Hub功能"""
|
|
65
|
+
print("3. 测试Hub功能...")
|
|
66
|
+
try:
|
|
67
|
+
from autocoder.common.mcp_tools import McpHub
|
|
68
|
+
|
|
69
|
+
# 测试文件创建
|
|
70
|
+
with tempfile.TemporaryDirectory() as tmp_dir:
|
|
71
|
+
settings_path = Path(tmp_dir) / "test_settings.json"
|
|
72
|
+
marketplace_path = Path(tmp_dir) / "test_marketplace.json"
|
|
73
|
+
|
|
74
|
+
hub = McpHub(
|
|
75
|
+
settings_path=str(settings_path),
|
|
76
|
+
marketplace_path=str(marketplace_path)
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
# 验证文件创建
|
|
80
|
+
assert settings_path.exists(), "Settings file not created"
|
|
81
|
+
assert marketplace_path.exists(), "Marketplace file not created"
|
|
82
|
+
|
|
83
|
+
# 验证文件内容
|
|
84
|
+
with open(settings_path) as f:
|
|
85
|
+
settings_data = json.load(f)
|
|
86
|
+
assert "mcpServers" in settings_data
|
|
87
|
+
|
|
88
|
+
with open(marketplace_path) as f:
|
|
89
|
+
marketplace_data = json.load(f)
|
|
90
|
+
assert "mcpServers" in marketplace_data
|
|
91
|
+
|
|
92
|
+
print(" ✓ Hub功能正常工作")
|
|
93
|
+
return True
|
|
94
|
+
except Exception as e:
|
|
95
|
+
print(f" ✗ Hub功能测试失败: {e}")
|
|
96
|
+
traceback.print_exc()
|
|
97
|
+
return False
|
|
98
|
+
|
|
99
|
+
def test_server_templates():
|
|
100
|
+
"""测试服务器模板功能"""
|
|
101
|
+
print("4. 测试服务器模板...")
|
|
102
|
+
try:
|
|
103
|
+
from autocoder.common.mcp_tools import McpHub
|
|
104
|
+
|
|
105
|
+
templates = McpHub.get_server_templates()
|
|
106
|
+
assert isinstance(templates, dict)
|
|
107
|
+
|
|
108
|
+
print(f" ✓ 服务器模板获取成功,共有 {len(templates)} 个模板")
|
|
109
|
+
return True
|
|
110
|
+
except Exception as e:
|
|
111
|
+
print(f" ✗ 服务器模板测试失败: {e}")
|
|
112
|
+
traceback.print_exc()
|
|
113
|
+
return False
|
|
114
|
+
|
|
115
|
+
def test_server_singleton():
|
|
116
|
+
"""测试服务器单例模式"""
|
|
117
|
+
print("5. 测试服务器单例...")
|
|
118
|
+
try:
|
|
119
|
+
from autocoder.common.mcp_tools import get_mcp_server
|
|
120
|
+
|
|
121
|
+
server1 = get_mcp_server()
|
|
122
|
+
server2 = get_mcp_server()
|
|
123
|
+
|
|
124
|
+
assert server1 is server2, "服务器不是单例"
|
|
125
|
+
|
|
126
|
+
print(" ✓ 服务器单例模式正常工作")
|
|
127
|
+
return True
|
|
128
|
+
except Exception as e:
|
|
129
|
+
print(f" ✗ 服务器单例测试失败: {e}")
|
|
130
|
+
traceback.print_exc()
|
|
131
|
+
return False
|
|
132
|
+
|
|
133
|
+
def test_installer_functionality():
|
|
134
|
+
"""测试安装器功能"""
|
|
135
|
+
print("6. 测试安装器功能...")
|
|
136
|
+
try:
|
|
137
|
+
from autocoder.common.mcp_tools import McpServerInstaller
|
|
138
|
+
|
|
139
|
+
installer = McpServerInstaller()
|
|
140
|
+
|
|
141
|
+
# 测试字典合并
|
|
142
|
+
dict1 = {"a": 1, "b": {"c": 2}}
|
|
143
|
+
dict2 = {"b": {"d": 3}, "e": 4}
|
|
144
|
+
result = installer.deep_merge_dicts(dict1, dict2)
|
|
145
|
+
expected = {"a": 1, "b": {"c": 2, "d": 3}, "e": 4}
|
|
146
|
+
assert result == expected, f"字典合并失败: {result} != {expected}"
|
|
147
|
+
|
|
148
|
+
# 测试命令行参数解析
|
|
149
|
+
args = "--name test-server --command python --args -m test"
|
|
150
|
+
name, config = installer.parse_command_line_args(args)
|
|
151
|
+
assert name == "test-server"
|
|
152
|
+
assert config["command"] == "python"
|
|
153
|
+
assert config["args"] == ["-m", "test"]
|
|
154
|
+
|
|
155
|
+
print(" ✓ 安装器功能正常工作")
|
|
156
|
+
return True
|
|
157
|
+
except Exception as e:
|
|
158
|
+
print(f" ✗ 安装器功能测试失败: {e}")
|
|
159
|
+
traceback.print_exc()
|
|
160
|
+
return False
|
|
161
|
+
|
|
162
|
+
def main():
|
|
163
|
+
"""主函数"""
|
|
164
|
+
print("=== MCP工具模块功能验证 ===\n")
|
|
165
|
+
|
|
166
|
+
tests = [
|
|
167
|
+
test_basic_imports,
|
|
168
|
+
test_type_creation,
|
|
169
|
+
test_hub_functionality,
|
|
170
|
+
test_server_templates,
|
|
171
|
+
test_server_singleton,
|
|
172
|
+
test_installer_functionality
|
|
173
|
+
]
|
|
174
|
+
|
|
175
|
+
passed = 0
|
|
176
|
+
failed = 0
|
|
177
|
+
|
|
178
|
+
for test in tests:
|
|
179
|
+
try:
|
|
180
|
+
if test():
|
|
181
|
+
passed += 1
|
|
182
|
+
else:
|
|
183
|
+
failed += 1
|
|
184
|
+
except Exception as e:
|
|
185
|
+
print(f" ✗ 测试执行失败: {e}")
|
|
186
|
+
failed += 1
|
|
187
|
+
print()
|
|
188
|
+
|
|
189
|
+
print(f"=== 测试结果 ===")
|
|
190
|
+
print(f"通过: {passed}")
|
|
191
|
+
print(f"失败: {failed}")
|
|
192
|
+
print(f"总计: {passed + failed}")
|
|
193
|
+
|
|
194
|
+
if failed == 0:
|
|
195
|
+
print("\n🎉 所有功能测试通过!MCP工具模块迁移成功!")
|
|
196
|
+
return 0
|
|
197
|
+
else:
|
|
198
|
+
print(f"\n❌ {failed} 个测试失败,需要进一步调试")
|
|
199
|
+
return 1
|
|
200
|
+
|
|
201
|
+
if __name__ == "__main__":
|
|
202
|
+
sys.exit(main())
|
|
@@ -5,10 +5,10 @@ from rich.console import Console
|
|
|
5
5
|
from rich.table import Table
|
|
6
6
|
from rich.panel import Panel
|
|
7
7
|
from autocoder.common.printer import Printer
|
|
8
|
-
from autocoder import
|
|
8
|
+
from autocoder.common.llms import LLMManager
|
|
9
9
|
from autocoder.utils.llms import get_single_llm
|
|
10
10
|
import byzerllm
|
|
11
|
-
import
|
|
11
|
+
import importlib.resources as resources
|
|
12
12
|
from concurrent.futures import ThreadPoolExecutor
|
|
13
13
|
from typing import Dict, List, Tuple
|
|
14
14
|
from pydantic import BaseModel
|
|
@@ -29,9 +29,7 @@ class SpeedTestResults(BaseModel):
|
|
|
29
29
|
|
|
30
30
|
byzerllm_content = ""
|
|
31
31
|
try:
|
|
32
|
-
byzerllm_conten_path =
|
|
33
|
-
"autocoder", "data/byzerllm.md"
|
|
34
|
-
)
|
|
32
|
+
byzerllm_conten_path = str(resources.files("autocoder") / "data" / "byzerllm.md")
|
|
35
33
|
with open(byzerllm_conten_path, "r",encoding="utf-8") as f:
|
|
36
34
|
byzerllm_content = f.read()
|
|
37
35
|
except FileNotFoundError:
|
|
@@ -51,23 +49,20 @@ def long_context_prompt() -> str:
|
|
|
51
49
|
我想开发一个翻译程序,使用prompt 函数实现。
|
|
52
50
|
</query>
|
|
53
51
|
'''
|
|
54
|
-
return
|
|
55
|
-
"content": byzerllm_content
|
|
56
|
-
}
|
|
52
|
+
return ""
|
|
57
53
|
|
|
58
54
|
@byzerllm.prompt()
|
|
59
55
|
def short_context_prompt() -> str:
|
|
60
56
|
'''
|
|
61
57
|
Hello, can you help me test the response speed?
|
|
62
58
|
'''
|
|
63
|
-
return
|
|
59
|
+
return ""
|
|
64
60
|
|
|
65
61
|
def test_model_speed(model_name: str,
|
|
66
62
|
product_mode: str,
|
|
67
63
|
test_rounds: int = 3,
|
|
68
64
|
enable_long_context: bool = False
|
|
69
65
|
) -> Dict[str, Any]:
|
|
70
|
-
from autocoder.models import get_model_by_name
|
|
71
66
|
"""
|
|
72
67
|
测试单个模型的速度
|
|
73
68
|
|
|
@@ -87,7 +82,14 @@ def test_model_speed(model_name: str,
|
|
|
87
82
|
"""
|
|
88
83
|
try:
|
|
89
84
|
llm = get_single_llm(model_name, product_mode)
|
|
90
|
-
|
|
85
|
+
if llm is None:
|
|
86
|
+
raise ValueError(f"无法创建模型 {model_name} 的 LLM 实例")
|
|
87
|
+
|
|
88
|
+
# 使用新的 LLMManager 获取模型信息
|
|
89
|
+
llm_manager = LLMManager()
|
|
90
|
+
model_info = llm_manager.get_model(model_name)
|
|
91
|
+
if not model_info:
|
|
92
|
+
raise ValueError(f"模型 {model_name} 不存在")
|
|
91
93
|
|
|
92
94
|
times = []
|
|
93
95
|
first_token_times = []
|
|
@@ -98,12 +100,12 @@ def test_model_speed(model_name: str,
|
|
|
98
100
|
input_tokens_costs = []
|
|
99
101
|
generated_tokens_costs = []
|
|
100
102
|
|
|
101
|
-
input_tokens_cost_per_m = model_info.
|
|
102
|
-
output_tokens_cost_per_m = model_info.
|
|
103
|
+
input_tokens_cost_per_m = model_info.input_price / 1000000
|
|
104
|
+
output_tokens_cost_per_m = model_info.output_price / 1000000
|
|
103
105
|
|
|
104
106
|
test_query = short_context_prompt.prompt()
|
|
105
107
|
if enable_long_context:
|
|
106
|
-
test_query = long_context_prompt.prompt()
|
|
108
|
+
test_query = long_context_prompt.prompt(content=byzerllm_content)
|
|
107
109
|
|
|
108
110
|
content = ""
|
|
109
111
|
for _ in range(test_rounds):
|
|
@@ -201,15 +203,16 @@ def run_speed_test(product_mode: str, test_rounds: int = 3, max_workers: Optiona
|
|
|
201
203
|
Returns:
|
|
202
204
|
SpeedTestResults: 包含所有模型测试结果的pydantic模型
|
|
203
205
|
"""
|
|
204
|
-
#
|
|
205
|
-
|
|
206
|
-
|
|
206
|
+
# 使用新的 LLMManager 获取模型
|
|
207
|
+
llm_manager = LLMManager()
|
|
208
|
+
models_data = list(llm_manager.get_all_models().values())
|
|
209
|
+
active_models = [m for m in models_data if m.has_api_key] if product_mode == "lite" else models_data
|
|
207
210
|
|
|
208
211
|
if not active_models:
|
|
209
212
|
return SpeedTestResults(results=[])
|
|
210
213
|
|
|
211
214
|
# 准备测试参数
|
|
212
|
-
test_args = [(model
|
|
215
|
+
test_args = [(model.name, product_mode, test_rounds, enable_long_context) for model in active_models]
|
|
213
216
|
|
|
214
217
|
# 存储结果用于排序
|
|
215
218
|
results_list = []
|
|
@@ -243,8 +246,10 @@ def run_speed_test(product_mode: str, test_rounds: int = 3, max_workers: Optiona
|
|
|
243
246
|
)
|
|
244
247
|
))
|
|
245
248
|
try:
|
|
246
|
-
#
|
|
247
|
-
|
|
249
|
+
# 使用新的 LLMManager 更新模型速度
|
|
250
|
+
# 注意:新的 LLMManager 中没有 update_model_speed 方法
|
|
251
|
+
# 我们需要通过 update_model 方法来更新
|
|
252
|
+
llm_manager.update_model(model_name, {"average_speed": results['tokens_per_second']})
|
|
248
253
|
except Exception:
|
|
249
254
|
pass
|
|
250
255
|
else:
|
|
@@ -295,9 +300,10 @@ def render_speed_test_in_terminal(product_mode: str, test_rounds: int = 3, max_w
|
|
|
295
300
|
printer = Printer()
|
|
296
301
|
console = Console()
|
|
297
302
|
|
|
298
|
-
#
|
|
299
|
-
|
|
300
|
-
|
|
303
|
+
# 使用新的 LLMManager 获取模型
|
|
304
|
+
llm_manager = LLMManager()
|
|
305
|
+
models_data = list(llm_manager.get_all_models().values())
|
|
306
|
+
active_models = [m for m in models_data if m.has_api_key] if product_mode == "lite" else models_data
|
|
301
307
|
|
|
302
308
|
if not active_models:
|
|
303
309
|
printer.print_in_terminal("models_no_active", style="yellow")
|
|
@@ -321,7 +327,7 @@ def render_speed_test_in_terminal(product_mode: str, test_rounds: int = 3, max_w
|
|
|
321
327
|
table.add_column("Status", style="red", width=20)
|
|
322
328
|
|
|
323
329
|
# 准备测试参数
|
|
324
|
-
test_args = [(model
|
|
330
|
+
test_args = [(model.name, product_mode, test_rounds, enable_long_context) for model in active_models]
|
|
325
331
|
|
|
326
332
|
# 存储结果用于排序
|
|
327
333
|
results_list = []
|
|
@@ -355,8 +361,8 @@ def render_speed_test_in_terminal(product_mode: str, test_rounds: int = 3, max_w
|
|
|
355
361
|
results
|
|
356
362
|
))
|
|
357
363
|
try:
|
|
358
|
-
#
|
|
359
|
-
|
|
364
|
+
# 使用新的 LLMManager 更新模型速度
|
|
365
|
+
llm_manager.update_model(model_name, {"average_speed": results['tokens_per_second']})
|
|
360
366
|
except Exception as e:
|
|
361
367
|
pass
|
|
362
368
|
else:
|