auto-coder 0.1.288__tar.gz → 0.1.289__tar.gz
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-0.1.288 → auto_coder-0.1.289}/PKG-INFO +1 -1
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/auto_coder.egg-info/PKG-INFO +1 -1
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/auto_coder.egg-info/SOURCES.txt +1 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/chat_auto_coder_lang.py +16 -16
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/auto_coder_lang.py +16 -4
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/mcp_hub.py +99 -77
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/mcp_server.py +162 -61
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/filter/quick_filter.py +373 -3
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/long_context_rag.py +22 -9
- auto_coder-0.1.289/src/autocoder/rag/searchable.py +58 -0
- auto_coder-0.1.289/src/autocoder/version.py +1 -0
- auto_coder-0.1.288/src/autocoder/version.py +0 -1
- {auto_coder-0.1.288 → auto_coder-0.1.289}/LICENSE +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/README.md +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/setup.cfg +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/setup.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/auto_coder.egg-info/dependency_links.txt +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/auto_coder.egg-info/entry_points.txt +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/auto_coder.egg-info/requires.txt +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/auto_coder.egg-info/top_level.txt +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/auto_demand_organizer.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/auto_filegroup.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/auto_guess_query.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/auto_review_commit.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/auto_tool.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/coder.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/designer.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/planner.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/agent/project_reader.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/auto_coder.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/auto_coder_rag.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/auto_coder_rag_mcp.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/auto_coder_runner.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/auto_coder_server.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/benchmark.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/chat/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/chat_auto_coder.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/command_args.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/commands/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/commands/auto_command.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/commands/auto_web.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/commands/tools.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/JupyterClient.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/ShellClient.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/anything2images.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/anything2img.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/audio.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/auto_configure.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/buildin_tokenizer.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/chunk_validation.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/cleaner.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_execute.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_generate.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_generate_diff.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_merge.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/code_modification_ranker.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/command_completer.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/command_generator.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/command_templates.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/computer_use.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/conf_import_export.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/conf_validator.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/const.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/context_pruner.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/conversation_pruner.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/files.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/git_utils.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/global_cancel.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/image_to_page.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/index_import_export.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/interpreter.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/llm_rerank.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/mcp_servers/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/mcp_tools.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/memory_manager.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/model_speed_test.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/printer.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/recall_validation.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/result_manager.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/screenshots.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/search.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/search_replace.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/shells.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/stats_panel.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/sys_prompt.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/text.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/types.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/common/utils_code_auto_generate.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/data/byzerllm.md +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/data/tokenizer.json +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/db/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/db/store.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/dispacher/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/dispacher/actions/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/dispacher/actions/action.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/dispacher/actions/copilot.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/entry.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/filter/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/filter/normal_filter.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/for_command.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/index.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/symbols_utils.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/index/types.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/lang.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/models.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/plugins/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/plugins/git_helper_plugin.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/plugins/sample_plugin.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/plugins/token_helper_plugin.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/plugins/utils.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/privacy/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/privacy/model_filter.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/pyproject/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/api_server.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/cache/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/cache/base_cache.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/cache/simple_cache.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/doc_filter.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/document_retriever.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/lang.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/llm_wrapper.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/loaders/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/loaders/docx_loader.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/loaders/excel_loader.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/rag_config.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/rag_entry.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/raw_rag.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/relevant_utils.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/simple_directory_reader.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/simple_rag.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/stream_event/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/stream_event/event_writer.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/stream_event/types.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/token_checker.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/token_counter.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/token_limiter.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/token_limiter_utils.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/types.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/utils.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/rag/variable_holder.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/regexproject/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/suffixproject/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/tsproject/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/_markitdown.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/auto_project_type.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/conversation_store.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/llm_client_interceptors.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/llms.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/log_capture.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/model_provider_selector.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/multi_turn.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/operate_config_api.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/print_table.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/project_structure.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/queue_communicate.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/request_event_queue.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/request_queue.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/rest.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/stream_thinking.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/tests.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/thread_utils.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/src/autocoder/utils/types.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_action_regex_project.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_chat_auto_coder.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_command_completer.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_planner.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_plugins.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_privacy.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_queue_communicate.py +0 -0
- {auto_coder-0.1.288 → auto_coder-0.1.289}/tests/test_symbols_utils.py +0 -0
|
@@ -134,6 +134,7 @@ src/autocoder/rag/rag_config.py
|
|
|
134
134
|
src/autocoder/rag/rag_entry.py
|
|
135
135
|
src/autocoder/rag/raw_rag.py
|
|
136
136
|
src/autocoder/rag/relevant_utils.py
|
|
137
|
+
src/autocoder/rag/searchable.py
|
|
137
138
|
src/autocoder/rag/simple_directory_reader.py
|
|
138
139
|
src/autocoder/rag/simple_rag.py
|
|
139
140
|
src/autocoder/rag/token_checker.py
|
|
@@ -4,16 +4,16 @@ from byzerllm.utils import format_str_jinja2
|
|
|
4
4
|
MESSAGES = {
|
|
5
5
|
"en": {
|
|
6
6
|
"auto_command_analyzing": "Analyzing Command Request",
|
|
7
|
-
"mcp_remove_error": "Error removing MCP server: {error}",
|
|
8
|
-
"mcp_remove_success": "Successfully removed MCP server: {result}",
|
|
9
|
-
"mcp_list_running_error": "Error listing running MCP servers: {error}",
|
|
7
|
+
"mcp_remove_error": "Error removing MCP server: {{error}}",
|
|
8
|
+
"mcp_remove_success": "Successfully removed MCP server: {{result}}",
|
|
9
|
+
"mcp_list_running_error": "Error listing running MCP servers: {{error}}",
|
|
10
10
|
"mcp_list_running_title": "Running MCP servers:",
|
|
11
|
-
"mcp_list_builtin_error": "Error listing builtin MCP servers: {error}",
|
|
11
|
+
"mcp_list_builtin_error": "Error listing builtin MCP servers: {{error}}",
|
|
12
12
|
"mcp_list_builtin_title": "Available builtin MCP servers:",
|
|
13
|
-
"mcp_refresh_error": "Error refreshing MCP servers: {error}",
|
|
13
|
+
"mcp_refresh_error": "Error refreshing MCP servers: {{error}}",
|
|
14
14
|
"mcp_refresh_success": "Successfully refreshed MCP servers",
|
|
15
|
-
"mcp_install_error": "Error installing MCP server: {error}",
|
|
16
|
-
"mcp_install_success": "Successfully installed MCP server: {result}",
|
|
15
|
+
"mcp_install_error": "Error installing MCP server: {{error}}",
|
|
16
|
+
"mcp_install_success": "Successfully installed MCP server: {{result}}",
|
|
17
17
|
"mcp_query_empty": "Please enter your query.",
|
|
18
18
|
"mcp_error_title": "Error",
|
|
19
19
|
"mcp_response_title": "MCP Response",
|
|
@@ -24,7 +24,7 @@ MESSAGES = {
|
|
|
24
24
|
"init_fail": "Failed to initialize the project.",
|
|
25
25
|
"init_manual": "Please try manually: auto-coder init --source_dir .",
|
|
26
26
|
"exit_no_init": "Exiting without initialization.",
|
|
27
|
-
"created_dir": "Created directory: {}",
|
|
27
|
+
"created_dir": "Created directory: {{path}}",
|
|
28
28
|
"init_complete": "Project initialization completed.",
|
|
29
29
|
"checking_ray": "Checking Ray status...",
|
|
30
30
|
"ray_not_running": "Ray is not running. Starting Ray...",
|
|
@@ -145,16 +145,16 @@ MESSAGES = {
|
|
|
145
145
|
"auto_command_reasoning_title": "回复",
|
|
146
146
|
"commit_message": "{{ model_name }} 生成的提交信息: {{ message }}",
|
|
147
147
|
"commit_failed": "{{ model_name }} 生成提交信息失败: {{ error }}",
|
|
148
|
-
"mcp_remove_error": "移除 MCP 服务器时出错:{error}",
|
|
149
|
-
"mcp_remove_success": "成功移除 MCP 服务器:{result}",
|
|
150
|
-
"mcp_list_running_error": "列出运行中的 MCP 服务器时出错:{error}",
|
|
148
|
+
"mcp_remove_error": "移除 MCP 服务器时出错:{{error}}",
|
|
149
|
+
"mcp_remove_success": "成功移除 MCP 服务器:{{result}}",
|
|
150
|
+
"mcp_list_running_error": "列出运行中的 MCP 服务器时出错:{{error}}",
|
|
151
151
|
"mcp_list_running_title": "正在运行的 MCP 服务器:",
|
|
152
|
-
"mcp_list_builtin_error": "列出内置 MCP 服务器时出错:{error}",
|
|
152
|
+
"mcp_list_builtin_error": "列出内置 MCP 服务器时出错:{{error}}",
|
|
153
153
|
"mcp_list_builtin_title": "可用的内置 MCP 服务器:",
|
|
154
|
-
"mcp_refresh_error": "刷新 MCP 服务器时出错:{error}",
|
|
154
|
+
"mcp_refresh_error": "刷新 MCP 服务器时出错:{{error}}",
|
|
155
155
|
"mcp_refresh_success": "成功刷新 MCP 服务器",
|
|
156
|
-
"mcp_install_error": "安装 MCP 服务器时出错:{error}",
|
|
157
|
-
"mcp_install_success": "成功安装 MCP 服务器:{result}",
|
|
156
|
+
"mcp_install_error": "安装 MCP 服务器时出错:{{error}}",
|
|
157
|
+
"mcp_install_success": "成功安装 MCP 服务器:{{result}}",
|
|
158
158
|
"mcp_query_empty": "请输入您的查询。",
|
|
159
159
|
"mcp_error_title": "错误",
|
|
160
160
|
"mcp_response_title": "MCP 响应",
|
|
@@ -165,7 +165,7 @@ MESSAGES = {
|
|
|
165
165
|
"init_fail": "项目初始化失败。",
|
|
166
166
|
"init_manual": "请尝试手动初始化:auto-coder init --source_dir .",
|
|
167
167
|
"exit_no_init": "退出而不初始化。",
|
|
168
|
-
"created_dir": "创建目录:{}",
|
|
168
|
+
"created_dir": "创建目录:{{path}}",
|
|
169
169
|
"init_complete": "项目初始化完成。",
|
|
170
170
|
"checking_ray": "正在检查Ray状态...",
|
|
171
171
|
"ray_not_running": "Ray未运行。正在启动Ray...",
|
|
@@ -184,9 +184,14 @@ MESSAGES = {
|
|
|
184
184
|
"action_verification_failed": "Action verification failed: {{action}} - {{reason}}",
|
|
185
185
|
"action_succeeded": "Action succeeded: {{action}}",
|
|
186
186
|
"replanned_actions": "Replanned {{count}} actions",
|
|
187
|
-
"web_automation_ask_user": "Your answer: "
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
"web_automation_ask_user": "Your answer: ",
|
|
188
|
+
"filter_mode_normal": "Using normal filter mode for index processing...",
|
|
189
|
+
"filter_mode_big": "Index file is large ({{ tokens_len }} tokens), using big_filter mode for processing...",
|
|
190
|
+
"filter_mode_super_big": "Index file is very large ({{ tokens_len }} tokens), using super_big_filter mode for processing...",
|
|
191
|
+
"super_big_filter_failed": "❌ Super big filter failed: {{ error }}.",
|
|
192
|
+
"super_big_filter_stats": "{{ model_names }} Super big filter completed in {{ elapsed_time }} seconds, input tokens: {{ input_tokens }}, output tokens: {{ output_tokens }}, input cost: {{ input_cost }}, output cost: {{ output_cost }}, speed: {{ speed }} tokens/s, chunk_index: {{ chunk_index }}",
|
|
193
|
+
"super_big_filter_splitting": "⚠️ Index file is extremely large ({{ tokens_len }}/{{ max_tokens }}). The query will be split into {{ split_size }} chunks for processing.",
|
|
194
|
+
"super_big_filter_title": "{{ model_name }} is analyzing how to filter extremely large context..."
|
|
190
195
|
},
|
|
191
196
|
"zh": {
|
|
192
197
|
"file_sliding_window_processing": "文件 {{ file_path }} 过大 ({{ tokens }} tokens),正在使用滑动窗口处理...",
|
|
@@ -368,7 +373,14 @@ MESSAGES = {
|
|
|
368
373
|
"action_verification_failed": "操作验证失败: {{action}} - {{reason}}",
|
|
369
374
|
"action_succeeded": "操作成功: {{action}}",
|
|
370
375
|
"replanned_actions": "已重新规划 {{count}} 个操作",
|
|
371
|
-
"web_automation_ask_user": "您的回答: "
|
|
376
|
+
"web_automation_ask_user": "您的回答: ",
|
|
377
|
+
"filter_mode_normal": "正在使用普通过滤模式处理索引...",
|
|
378
|
+
"filter_mode_big": "索引文件较大 ({{ tokens_len }} tokens),正在使用 big_filter 模式处理...",
|
|
379
|
+
"filter_mode_super_big": "索引文件非常大 ({{ tokens_len }} tokens),正在使用 super_big_filter 模式处理...",
|
|
380
|
+
"super_big_filter_failed": "❌ 超大过滤器失败: {{ error }}.",
|
|
381
|
+
"super_big_filter_stats": "{{ model_names }} 超大过滤器完成耗时 {{ elapsed_time }} 秒,输入token数: {{ input_tokens }}, 输出token数: {{ output_tokens }}, 输入成本: {{ input_cost }}, 输出成本: {{ output_cost }}, 速度: {{ speed }} tokens/秒, 块索引: {{ chunk_index }}",
|
|
382
|
+
"super_big_filter_splitting": "⚠️ 索引文件极其庞大 ({{ tokens_len }}/{{ max_tokens }})。查询将被分成 {{ split_size }} 个部分进行处理。",
|
|
383
|
+
"super_big_filter_title": "{{ model_name }} 正在分析如何过滤极大规模上下文..."
|
|
372
384
|
}}
|
|
373
385
|
|
|
374
386
|
|
|
@@ -2,16 +2,18 @@ import os
|
|
|
2
2
|
import json
|
|
3
3
|
import asyncio
|
|
4
4
|
import aiohttp
|
|
5
|
-
from datetime import datetime
|
|
5
|
+
from datetime import datetime, timedelta
|
|
6
6
|
from typing import Dict, List, Optional, Any, Set, Optional
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from pydantic import BaseModel, Field
|
|
9
9
|
|
|
10
10
|
from mcp import ClientSession
|
|
11
11
|
from mcp.client.stdio import stdio_client, StdioServerParameters
|
|
12
|
+
from mcp.client.sse import sse_client
|
|
12
13
|
import mcp.types as mcp_types
|
|
13
14
|
from loguru import logger
|
|
14
|
-
import
|
|
15
|
+
from contextlib import AsyncExitStack
|
|
16
|
+
from datetime import timedelta
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
class McpTool(BaseModel):
|
|
@@ -55,12 +57,9 @@ class McpServer(BaseModel):
|
|
|
55
57
|
class McpConnection:
|
|
56
58
|
"""Represents an active MCP server connection"""
|
|
57
59
|
|
|
58
|
-
def __init__(self, server: McpServer, session: ClientSession
|
|
60
|
+
def __init__(self, server: McpServer, session: ClientSession):
|
|
59
61
|
self.server = server
|
|
60
|
-
self.session = session
|
|
61
|
-
self.transport_manager = (
|
|
62
|
-
transport_manager # Will hold transport context manager
|
|
63
|
-
)
|
|
62
|
+
self.session = session
|
|
64
63
|
|
|
65
64
|
|
|
66
65
|
MCP_PERPLEXITY_SERVER = '''
|
|
@@ -81,6 +80,7 @@ MCP_BUILD_IN_SERVERS = {
|
|
|
81
80
|
"perplexity": json.loads(MCP_PERPLEXITY_SERVER)["perplexity"]
|
|
82
81
|
}
|
|
83
82
|
|
|
83
|
+
|
|
84
84
|
class McpHub:
|
|
85
85
|
"""
|
|
86
86
|
Manages MCP server connections and interactions.
|
|
@@ -105,6 +105,7 @@ class McpHub:
|
|
|
105
105
|
self.settings_path = Path(settings_path)
|
|
106
106
|
self.connections: Dict[str, McpConnection] = {}
|
|
107
107
|
self.is_connecting = False
|
|
108
|
+
self.exit_stacks: Dict[str, AsyncExitStack] = {}
|
|
108
109
|
|
|
109
110
|
# Ensure settings directory exists
|
|
110
111
|
self.settings_path.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -116,26 +117,31 @@ class McpHub:
|
|
|
116
117
|
def _write_default_settings(self):
|
|
117
118
|
"""Write default MCP settings file"""
|
|
118
119
|
default_settings = {"mcpServers": {}}
|
|
119
|
-
with open(self.settings_path, "w",encoding="utf-8") as f:
|
|
120
|
+
with open(self.settings_path, "w", encoding="utf-8") as f:
|
|
120
121
|
json.dump(default_settings, f, indent=2)
|
|
121
122
|
|
|
122
|
-
async def add_server_config(self, name: str, config:Dict[str,Any]) -> None:
|
|
123
|
+
async def add_server_config(self, name: str, config: Dict[str, Any]) -> None:
|
|
123
124
|
"""
|
|
124
125
|
Add or update MCP server configuration in settings file.
|
|
125
126
|
|
|
126
127
|
Args:
|
|
127
128
|
server_name_or_config: Name of the server or server configuration dictionary
|
|
128
129
|
"""
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
130
|
+
settings = self._read_settings()
|
|
131
|
+
settings["mcpServers"][name] = config
|
|
132
|
+
with open(self.settings_path, "w", encoding="utf-8") as f:
|
|
133
|
+
json.dump(settings, f, indent=2, ensure_ascii=False)
|
|
134
|
+
await self.initialize()
|
|
135
|
+
if name in self.connections:
|
|
136
|
+
if self.connections[name].server.status == "connected":
|
|
137
|
+
logger.info(f"Added/updated MCP server config: {name}")
|
|
138
|
+
return True
|
|
139
|
+
else:
|
|
140
|
+
logger.error(f"Failed to add MCP server config: {name}")
|
|
141
|
+
return False
|
|
142
|
+
else:
|
|
143
|
+
logger.error(f"Failed to add MCP server config: {name}")
|
|
144
|
+
return False
|
|
139
145
|
|
|
140
146
|
async def remove_server_config(self, name: str) -> None:
|
|
141
147
|
"""
|
|
@@ -148,7 +154,7 @@ class McpHub:
|
|
|
148
154
|
settings = self._read_settings()
|
|
149
155
|
if name in settings["mcpServers"]:
|
|
150
156
|
del settings["mcpServers"][name]
|
|
151
|
-
with open(self.settings_path, "w",encoding="utf-8") as f:
|
|
157
|
+
with open(self.settings_path, "w", encoding="utf-8") as f:
|
|
152
158
|
json.dump(settings, f, indent=2, ensure_ascii=False)
|
|
153
159
|
logger.info(f"Removed MCP server config: {name}")
|
|
154
160
|
await self.initialize()
|
|
@@ -160,18 +166,14 @@ class McpHub:
|
|
|
160
166
|
|
|
161
167
|
async def initialize(self):
|
|
162
168
|
"""Initialize MCP server connections from settings"""
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
await self.update_server_connections(config.get("mcpServers", {}))
|
|
166
|
-
except Exception as e:
|
|
167
|
-
logger.error(f"Failed to initialize MCP servers: {e}")
|
|
168
|
-
raise
|
|
169
|
+
config = self._read_settings()
|
|
170
|
+
await self.update_server_connections(config.get("mcpServers", {}))
|
|
169
171
|
|
|
170
172
|
def get_servers(self) -> List[McpServer]:
|
|
171
173
|
"""Get list of all configured servers"""
|
|
172
174
|
return [conn.server for conn in self.connections.values()]
|
|
173
175
|
|
|
174
|
-
async def connect_to_server(self, name: str, config: dict) ->
|
|
176
|
+
async def connect_to_server(self, name: str, config: dict) -> McpServer:
|
|
175
177
|
"""
|
|
176
178
|
Establish connection to an MCP server with proper resource management
|
|
177
179
|
"""
|
|
@@ -179,79 +181,90 @@ class McpHub:
|
|
|
179
181
|
if name in self.connections:
|
|
180
182
|
await self.delete_connection(name)
|
|
181
183
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
self.exit_stacks[name] = AsyncExitStack()
|
|
185
|
+
exit_stack = self.exit_stacks[name]
|
|
186
|
+
|
|
187
|
+
server = McpServer(
|
|
188
|
+
name=name, config=json.dumps(config), status="connecting"
|
|
189
|
+
)
|
|
190
|
+
transport_config = config.get("transport", {
|
|
191
|
+
"type": "stdio",
|
|
192
|
+
"endpoint":""
|
|
193
|
+
})
|
|
186
194
|
|
|
195
|
+
if transport_config["type"] not in ["stdio", "sse"]:
|
|
196
|
+
raise ValueError(f"Invalid transport type: {transport_config['type']}")
|
|
197
|
+
|
|
198
|
+
if transport_config["type"] == "stdio":
|
|
187
199
|
# Setup transport parameters
|
|
188
200
|
server_params = StdioServerParameters(
|
|
189
201
|
command=config["command"],
|
|
190
202
|
args=config.get("args", []),
|
|
191
203
|
env={**config.get("env", {}),
|
|
192
|
-
|
|
204
|
+
"PATH": os.environ.get("PATH", "")},
|
|
193
205
|
)
|
|
194
206
|
|
|
195
|
-
# Create transport using context manager
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
207
|
+
# Create transport using context manager
|
|
208
|
+
transport = await exit_stack.enter_async_context(stdio_client(server_params))
|
|
209
|
+
|
|
210
|
+
if transport_config["type"] == "sse":
|
|
211
|
+
url = transport_config["endpoint"]
|
|
212
|
+
transport = await exit_stack.enter_async_context(sse_client(url))
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
try:
|
|
216
|
+
stdio, write = transport
|
|
217
|
+
session = await exit_stack.enter_async_context(
|
|
218
|
+
ClientSession(stdio, write, read_timeout_seconds=timedelta(seconds=60)))
|
|
219
|
+
await session.initialize()
|
|
220
|
+
connection = McpConnection(server, session)
|
|
221
|
+
self.connections[name] = connection
|
|
222
|
+
# Update server status and fetch capabilities
|
|
223
|
+
server.status = "connected"
|
|
224
|
+
server.tools = await self._fetch_tools(name)
|
|
225
|
+
server.resources = await self._fetch_resources(name)
|
|
226
|
+
server.resource_templates = await self._fetch_resource_templates(name)
|
|
227
|
+
return server
|
|
228
|
+
|
|
218
229
|
except Exception as e:
|
|
219
230
|
error_msg = str(e)
|
|
220
231
|
logger.error(f"Failed to connect to server {name}: {error_msg}")
|
|
221
232
|
if name in self.connections:
|
|
222
233
|
self.connections[name].server.status = "disconnected"
|
|
223
234
|
self.connections[name].server.error = error_msg
|
|
224
|
-
|
|
235
|
+
return server
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
225
241
|
|
|
226
242
|
async def delete_connection(self, name: str) -> None:
|
|
227
243
|
"""
|
|
228
244
|
Close and remove a server connection with proper cleanup
|
|
229
245
|
"""
|
|
230
246
|
if name in self.connections:
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
# Clean up in reverse order of creation
|
|
234
|
-
await connection.session.__aexit__(None, None, None)
|
|
235
|
-
await connection.transport_manager.__aexit__(None, None, None)
|
|
247
|
+
|
|
248
|
+
try:
|
|
236
249
|
del self.connections[name]
|
|
237
250
|
except Exception as e:
|
|
238
251
|
logger.error(f"Error closing connection to {name}: {e}")
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
252
|
+
|
|
253
|
+
try:
|
|
254
|
+
exit_stack = self.exit_stacks[name]
|
|
255
|
+
await exit_stack.aclose()
|
|
256
|
+
del self.exit_stacks[name]
|
|
257
|
+
except Exception as e:
|
|
258
|
+
logger.error(f"Error cleaning up to {name}: {e}")
|
|
259
|
+
|
|
242
260
|
|
|
243
261
|
async def refresh_server_connection(self, name: str) -> None:
|
|
244
262
|
"""
|
|
245
263
|
Refresh a server connection
|
|
246
264
|
"""
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
await self.connect_to_server(name, config.get("mcpServers", {}).get(name, {}))
|
|
251
|
-
except Exception as e:
|
|
252
|
-
logger.error(f"Failed to refresh MCP server {name}: {e}")
|
|
253
|
-
raise
|
|
254
|
-
|
|
265
|
+
config = self._read_settings()
|
|
266
|
+
await self.delete_connection(name)
|
|
267
|
+
await self.connect_to_server(name, config.get("mcpServers", {}).get(name, {}))
|
|
255
268
|
|
|
256
269
|
async def update_server_connections(self, new_servers: Dict[str, Any]) -> None:
|
|
257
270
|
"""
|
|
@@ -273,13 +286,22 @@ class McpHub:
|
|
|
273
286
|
|
|
274
287
|
if not current_conn:
|
|
275
288
|
# New server
|
|
276
|
-
await self.connect_to_server(name, config)
|
|
277
|
-
|
|
289
|
+
server = await self.connect_to_server(name, config)
|
|
290
|
+
if server.status == "connected":
|
|
291
|
+
logger.info(f"Connected to new MCP server: {name}")
|
|
292
|
+
else:
|
|
293
|
+
logger.error(
|
|
294
|
+
f"Failed to connect to new MCP server: {name}")
|
|
295
|
+
|
|
278
296
|
elif current_conn.server.config != json.dumps(config):
|
|
279
297
|
# Updated configuration
|
|
280
|
-
await self.connect_to_server(name, config)
|
|
281
|
-
|
|
282
|
-
|
|
298
|
+
server = await self.connect_to_server(name, config)
|
|
299
|
+
if server.status == "connected":
|
|
300
|
+
logger.info(
|
|
301
|
+
f"Reconnected MCP server with updated config: {name}")
|
|
302
|
+
else:
|
|
303
|
+
logger.error(
|
|
304
|
+
f"Failed to reconnected MCP server with updated config: {name}")
|
|
283
305
|
|
|
284
306
|
finally:
|
|
285
307
|
self.is_connecting = False
|