auto-coder 0.1.362__tar.gz → 0.1.363__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.362 → auto_coder-0.1.363}/PKG-INFO +1 -1
- {auto_coder-0.1.362 → auto_coder-0.1.363}/README.md +1 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/auto_coder.egg-info/PKG-INFO +1 -1
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/auto_coder.egg-info/SOURCES.txt +28 -1
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/agent_hub.py +169 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/agentic_lang.py +112 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/agentic_tool_display.py +180 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/base_agent.py +1582 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/default_tools.py +683 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/test_base_agent.py +82 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tool_registry.py +425 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/__init__.py +12 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +72 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +37 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/base_tool_resolver.py +35 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/example_tool_resolver.py +46 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +72 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +110 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +35 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +54 -0
- {auto_coder-0.1.362/src/autocoder/common/v2/agent/agentic_edit_tools → auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools}/replace_in_file_tool_resolver.py +7 -4
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +134 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +96 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +79 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +44 -0
- {auto_coder-0.1.362/src/autocoder/common/v2/agent/agentic_edit_tools → auto_coder-0.1.363/src/autocoder/agent/base_agentic/tools}/write_to_file_tool_resolver.py +4 -4
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/types.py +189 -0
- auto_coder-0.1.363/src/autocoder/agent/base_agentic/utils.py +100 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/auto_coder_runner.py +4 -4
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/chat/conf_command.py +11 -10
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/rulefiles/autocoderrules_utils.py +24 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/save_formatted_log.py +1 -1
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit.py +21 -19
- auto_coder-0.1.363/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +225 -0
- auto_coder-0.1.363/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +186 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_types.py +1 -2
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_tool_display.py +2 -3
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/long_context_rag.py +424 -397
- auto_coder-0.1.363/src/autocoder/rag/test_doc_filter.py +393 -0
- auto_coder-0.1.363/src/autocoder/rag/test_long_context_rag.py +473 -0
- auto_coder-0.1.363/src/autocoder/rag/test_token_limiter.py +342 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/shadows/shadow_manager.py +1 -3
- auto_coder-0.1.363/src/autocoder/utils/types.py +0 -0
- auto_coder-0.1.363/src/autocoder/version.py +1 -0
- auto_coder-0.1.362/src/autocoder/rag/loaders/test_image_loader.py +0 -209
- auto_coder-0.1.362/src/autocoder/version.py +0 -1
- {auto_coder-0.1.362 → auto_coder-0.1.363}/LICENSE +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/setup.cfg +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/setup.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/auto_coder.egg-info/dependency_links.txt +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/auto_coder.egg-info/entry_points.txt +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/auto_coder.egg-info/requires.txt +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/auto_coder.egg-info/top_level.txt +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/agentic_filter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/auto_demand_organizer.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/auto_filegroup.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/auto_guess_query.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/auto_learn.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/auto_review_commit.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/auto_tool.py +0 -0
- {auto_coder-0.1.362/src/autocoder/chat → auto_coder-0.1.363/src/autocoder/agent/base_agentic}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/coder.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/designer.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/planner.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/agent/project_reader.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/auto_coder.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/auto_coder_rag.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/auto_coder_server.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/benchmark.py +0 -0
- {auto_coder-0.1.362/src/autocoder/commands → auto_coder-0.1.363/src/autocoder/chat}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/chat/models_command.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/chat/rules_command.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/chat_auto_coder.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/chat_auto_coder_lang.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/command_args.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/command_parser.py +0 -0
- {auto_coder-0.1.362/src/autocoder/common/mcp_servers → auto_coder-0.1.363/src/autocoder/commands}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/commands/auto_command.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/commands/auto_web.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/commands/tools.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/JupyterClient.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/ShellClient.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/action_yml_file_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/anything2images.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/anything2img.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/audio.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/auto_coder_lang.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/auto_configure.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/buildin_tokenizer.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/chunk_validation.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/cleaner.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_execute.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_generate.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_generate_diff.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_merge.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/code_modification_ranker.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/command_completer.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/command_completer_v2.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/command_generator.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/command_templates.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/computer_use.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/conf_import_export.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/conf_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/conf_validator.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/const.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/context_pruner.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/conversation_pruner.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/conversations/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/conversations/compatibility.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/conversations/conversation_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/conversations/example.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/directory_cache/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/directory_cache/cache.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/directory_cache/test_cache.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/file_monitor/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/file_monitor/monitor.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/files.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/git_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/global_cancel.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/ignorefiles/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/image_to_page.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/index_import_export.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/interpreter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/llm_rerank.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/mcp_hub.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/mcp_server.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/mcp_server_install.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/mcp_server_types.py +0 -0
- {auto_coder-0.1.362/src/autocoder/common/v2 → auto_coder-0.1.363/src/autocoder/common/mcp_servers}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/mcp_tools.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/memory_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/model_speed_tester.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/openai_content.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/printer.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/recall_validation.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/result_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/rulefiles/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/run_cmd.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/screenshots.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/search.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/search_replace.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/shells.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/stats_panel.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/stream_out_type.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/sys_prompt.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/test_run_cmd.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/text.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/token_cost_caculate.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/types.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/utils_code_auto_generate.py +0 -0
- {auto_coder-0.1.362/src/autocoder/common/v2/agent → auto_coder-0.1.363/src/autocoder/common/v2}/__init__.py +0 -0
- {auto_coder-0.1.362/src/autocoder/db → auto_coder-0.1.363/src/autocoder/common/v2/agent}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_auto_generate.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_auto_merge.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_diff_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/base_compiler.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/compiler_config_api.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/compiler_config_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/compiler_factory.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/java_compiler.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/models.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/provided_compiler.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/python_compiler.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/reactjs_compiler.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/shadow_compiler.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/compilers/vue_compiler.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/data/byzerllm.md +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/data/tokenizer.json +0 -0
- {auto_coder-0.1.362/src/autocoder/dispacher/actions → auto_coder-0.1.363/src/autocoder/db}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/db/store.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/dispacher/__init__.py +0 -0
- {auto_coder-0.1.362/src/autocoder/dispacher/actions/plugins → auto_coder-0.1.363/src/autocoder/dispacher/actions}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/dispacher/actions/action.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/dispacher/actions/copilot.py +0 -0
- {auto_coder-0.1.362/src/autocoder/helper → auto_coder-0.1.363/src/autocoder/dispacher/actions/plugins}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/events/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/events/event_content.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/events/event_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/events/event_manager_singleton.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/events/event_store.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/events/event_types.py +0 -0
- {auto_coder-0.1.362/src/autocoder/index → auto_coder-0.1.363/src/autocoder/helper}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/helper/project_creator.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/helper/rag_doc_creator.py +0 -0
- {auto_coder-0.1.362/src/autocoder/index/filter → auto_coder-0.1.363/src/autocoder/index}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/index/entry.py +0 -0
- {auto_coder-0.1.362/src/autocoder/linters → auto_coder-0.1.363/src/autocoder/index/filter}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/index/filter/normal_filter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/index/filter/quick_filter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/index/for_command.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/index/index.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/index/symbols_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/index/types.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/lang.py +0 -0
- {auto_coder-0.1.362/src/autocoder/rag → auto_coder-0.1.363/src/autocoder/linters}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/linters/base_linter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/linters/linter_factory.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/linters/models.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/linters/python_linter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/linters/reactjs_linter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/linters/shadow_linter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/linters/vue_linter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/memory/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/memory/active_context_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/memory/active_package.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/memory/async_processor.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/memory/directory_mapper.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/models.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/plugins/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/plugins/git_helper_plugin.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/plugins/sample_plugin.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/plugins/token_helper_plugin.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/plugins/utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/privacy/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/privacy/model_filter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/pyproject/__init__.py +0 -0
- {auto_coder-0.1.362/src/autocoder/rag/cache → auto_coder-0.1.363/src/autocoder/rag}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/api_server.py +0 -0
- {auto_coder-0.1.362/src/autocoder/rag/stream_event → auto_coder-0.1.363/src/autocoder/rag/cache}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/base_cache.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/cache/simple_cache.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/conversation_to_queries.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/doc_filter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/document_retriever.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/lang.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/llm_wrapper.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/loaders/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/loaders/docx_loader.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/loaders/excel_loader.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/loaders/filter_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/loaders/image_loader.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/rag_config.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/rag_entry.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/raw_rag.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/relevant_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/searchable.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/simple_directory_reader.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/simple_rag.py +0 -0
- {auto_coder-0.1.362/src/autocoder/shadows → auto_coder-0.1.363/src/autocoder/rag/stream_event}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/stream_event/event_writer.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/stream_event/types.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/token_checker.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/token_counter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/token_limiter.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/token_limiter_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/types.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/rag/variable_holder.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/regexproject/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/run_context.py +0 -0
- {auto_coder-0.1.362/src/autocoder/utils/auto_coder_utils → auto_coder-0.1.363/src/autocoder/shadows}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/suffixproject/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/tsproject/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/_markitdown.py +0 -0
- {auto_coder-0.1.362/src/autocoder/utils/chat_auto_coder_utils → auto_coder-0.1.363/src/autocoder/utils/auto_coder_utils}/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/auto_project_type.py +0 -0
- /auto_coder-0.1.362/src/autocoder/utils/types.py → /auto_coder-0.1.363/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/conversation_store.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/llm_client_interceptors.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/llms.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/log_capture.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/model_provider_selector.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/multi_turn.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/operate_config_api.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/print_table.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/project_structure.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/queue_communicate.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/request_event_queue.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/request_queue.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/rest.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/stream_thinking.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/tests.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/src/autocoder/utils/thread_utils.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_action_regex_project.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_action_yml_file_manager.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_chat_auto_coder.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_command_completer.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_planner.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_plugins.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_privacy.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_queue_communicate.py +0 -0
- {auto_coder-0.1.362 → auto_coder-0.1.363}/tests/test_symbols_utils.py +0 -0
|
@@ -34,6 +34,31 @@ src/autocoder/agent/coder.py
|
|
|
34
34
|
src/autocoder/agent/designer.py
|
|
35
35
|
src/autocoder/agent/planner.py
|
|
36
36
|
src/autocoder/agent/project_reader.py
|
|
37
|
+
src/autocoder/agent/base_agentic/__init__.py
|
|
38
|
+
src/autocoder/agent/base_agentic/agent_hub.py
|
|
39
|
+
src/autocoder/agent/base_agentic/agentic_lang.py
|
|
40
|
+
src/autocoder/agent/base_agentic/agentic_tool_display.py
|
|
41
|
+
src/autocoder/agent/base_agentic/base_agent.py
|
|
42
|
+
src/autocoder/agent/base_agentic/default_tools.py
|
|
43
|
+
src/autocoder/agent/base_agentic/test_base_agent.py
|
|
44
|
+
src/autocoder/agent/base_agentic/tool_registry.py
|
|
45
|
+
src/autocoder/agent/base_agentic/types.py
|
|
46
|
+
src/autocoder/agent/base_agentic/utils.py
|
|
47
|
+
src/autocoder/agent/base_agentic/tools/__init__.py
|
|
48
|
+
src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py
|
|
49
|
+
src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py
|
|
50
|
+
src/autocoder/agent/base_agentic/tools/base_tool_resolver.py
|
|
51
|
+
src/autocoder/agent/base_agentic/tools/example_tool_resolver.py
|
|
52
|
+
src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py
|
|
53
|
+
src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py
|
|
54
|
+
src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py
|
|
55
|
+
src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py
|
|
56
|
+
src/autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py
|
|
57
|
+
src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py
|
|
58
|
+
src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py
|
|
59
|
+
src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py
|
|
60
|
+
src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py
|
|
61
|
+
src/autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py
|
|
37
62
|
src/autocoder/chat/__init__.py
|
|
38
63
|
src/autocoder/chat/conf_command.py
|
|
39
64
|
src/autocoder/chat/models_command.py
|
|
@@ -235,6 +260,9 @@ src/autocoder/rag/relevant_utils.py
|
|
|
235
260
|
src/autocoder/rag/searchable.py
|
|
236
261
|
src/autocoder/rag/simple_directory_reader.py
|
|
237
262
|
src/autocoder/rag/simple_rag.py
|
|
263
|
+
src/autocoder/rag/test_doc_filter.py
|
|
264
|
+
src/autocoder/rag/test_long_context_rag.py
|
|
265
|
+
src/autocoder/rag/test_token_limiter.py
|
|
238
266
|
src/autocoder/rag/token_checker.py
|
|
239
267
|
src/autocoder/rag/token_counter.py
|
|
240
268
|
src/autocoder/rag/token_limiter.py
|
|
@@ -259,7 +287,6 @@ src/autocoder/rag/loaders/filter_utils.py
|
|
|
259
287
|
src/autocoder/rag/loaders/image_loader.py
|
|
260
288
|
src/autocoder/rag/loaders/pdf_loader.py
|
|
261
289
|
src/autocoder/rag/loaders/ppt_loader.py
|
|
262
|
-
src/autocoder/rag/loaders/test_image_loader.py
|
|
263
290
|
src/autocoder/rag/stream_event/__init__.py
|
|
264
291
|
src/autocoder/rag/stream_event/event_writer.py
|
|
265
292
|
src/autocoder/rag/stream_event/types.py
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
import byzerllm
|
|
3
|
+
from typing import List, Dict, Optional, Literal, Any, Union
|
|
4
|
+
from pydantic import BaseModel
|
|
5
|
+
from loguru import logger
|
|
6
|
+
import threading
|
|
7
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
8
|
+
import os
|
|
9
|
+
from datetime import datetime
|
|
10
|
+
from .types import Message, ReplyDecision
|
|
11
|
+
from .utils import GroupUtils,GroupMemberResponse
|
|
12
|
+
|
|
13
|
+
if typing.TYPE_CHECKING:
|
|
14
|
+
from .base_agent import BaseAgent
|
|
15
|
+
|
|
16
|
+
class AgentHub:
|
|
17
|
+
"""管理所有Agent实例的全局中心"""
|
|
18
|
+
_instance = None
|
|
19
|
+
agents: Dict[str, 'BaseAgent'] = {}
|
|
20
|
+
|
|
21
|
+
def __new__(cls):
|
|
22
|
+
if cls._instance is None:
|
|
23
|
+
cls._instance = super().__new__(cls)
|
|
24
|
+
return cls._instance
|
|
25
|
+
|
|
26
|
+
@classmethod
|
|
27
|
+
def register_agent(cls, agent: 'BaseAgent'):
|
|
28
|
+
"""注册一个新的Agent"""
|
|
29
|
+
if agent.name in cls.agents:
|
|
30
|
+
raise ValueError(f"Agent with name {agent.name} already exists")
|
|
31
|
+
cls.agents[agent.name] = agent
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def get_agent(cls, name: str) -> Optional['BaseAgent']:
|
|
35
|
+
"""根据名称获取Agent"""
|
|
36
|
+
return cls.agents.get(name)
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def list_agents(cls) -> List[str]:
|
|
40
|
+
"""获取所有Agent名称"""
|
|
41
|
+
return list(cls.agents.keys())
|
|
42
|
+
|
|
43
|
+
@classmethod
|
|
44
|
+
def get_all_groups(cls) -> List['Group']:
|
|
45
|
+
"""获取所有群组实例"""
|
|
46
|
+
return list(GroupHub.groups.values())
|
|
47
|
+
|
|
48
|
+
class GroupHub:
|
|
49
|
+
"""管理所有Group实例的全局中心"""
|
|
50
|
+
_instance = None
|
|
51
|
+
groups: Dict[str, 'Group'] = {}
|
|
52
|
+
_groups_lock = threading.RLock()
|
|
53
|
+
|
|
54
|
+
def __new__(cls):
|
|
55
|
+
if cls._instance is None:
|
|
56
|
+
cls._instance = super().__new__(cls)
|
|
57
|
+
return cls._instance
|
|
58
|
+
|
|
59
|
+
@classmethod
|
|
60
|
+
def register_group(cls, group: 'Group'):
|
|
61
|
+
"""注册一个新的Group"""
|
|
62
|
+
with cls._groups_lock:
|
|
63
|
+
if group.name in cls.groups:
|
|
64
|
+
raise ValueError(f"Group with name {group.name} already exists")
|
|
65
|
+
cls.groups[group.name] = group
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def get_group(cls, name: str) -> Optional['Group']:
|
|
69
|
+
"""根据名称获取Group"""
|
|
70
|
+
with cls._groups_lock:
|
|
71
|
+
return cls.groups.get(name)
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def list_groups(cls) -> List[str]:
|
|
75
|
+
"""获取所有Group名称"""
|
|
76
|
+
with cls._groups_lock:
|
|
77
|
+
return list(cls.groups.keys())
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class Group:
|
|
82
|
+
# 类级线程池(所有 Group 实例共享)
|
|
83
|
+
_executor = ThreadPoolExecutor(max_workers=min(32, (os.cpu_count() or 1) * 4 + 4))
|
|
84
|
+
|
|
85
|
+
def __init__(self, name: str):
|
|
86
|
+
self.name = name
|
|
87
|
+
self.members: List[Agent] = []
|
|
88
|
+
self.history: List[Message] = []
|
|
89
|
+
# 成员列表和消息历史的读写锁
|
|
90
|
+
self._members_lock = threading.RLock()
|
|
91
|
+
self._history_lock = threading.RLock()
|
|
92
|
+
# 自动注册到GroupHub
|
|
93
|
+
GroupHub.register_group(self)
|
|
94
|
+
|
|
95
|
+
def add_member(self, agent: 'Agent'):
|
|
96
|
+
with self._members_lock:
|
|
97
|
+
if agent not in self.members:
|
|
98
|
+
self.members.append(agent)
|
|
99
|
+
with agent._group_lock: # 访问 Agent 的锁
|
|
100
|
+
agent.joined_groups[self.name] = self
|
|
101
|
+
|
|
102
|
+
def _safe_send_message(self, member: 'Agent', message: Message, print_conversation: bool):
|
|
103
|
+
try:
|
|
104
|
+
# 调用 Agent 的线程安全接收方法
|
|
105
|
+
member.threadsafe_receive(message,print_conversation=print_conversation)
|
|
106
|
+
except Exception as e:
|
|
107
|
+
import traceback
|
|
108
|
+
traceback.print_exc()
|
|
109
|
+
logger.error(f"Message delivery failed to {member.name}: {str(e)}")
|
|
110
|
+
|
|
111
|
+
def _handle_send_result(self, future):
|
|
112
|
+
try:
|
|
113
|
+
future.result()
|
|
114
|
+
except Exception as e:
|
|
115
|
+
logger.error(f"Message delivery error: {str(e)}")
|
|
116
|
+
|
|
117
|
+
def broadcast(self, message: Message, print_conversation: bool = False):
|
|
118
|
+
# 消息历史写入需要同步
|
|
119
|
+
with self._history_lock:
|
|
120
|
+
self.history.append(message)
|
|
121
|
+
|
|
122
|
+
# 使用线程池并行发送
|
|
123
|
+
futures = []
|
|
124
|
+
with self._members_lock: # 保护成员列表遍历
|
|
125
|
+
current_members = self.members.copy()
|
|
126
|
+
|
|
127
|
+
for member in current_members:
|
|
128
|
+
if member.name == message.sender:
|
|
129
|
+
continue
|
|
130
|
+
|
|
131
|
+
futures.append(
|
|
132
|
+
self._executor.submit(
|
|
133
|
+
self._safe_send_message,
|
|
134
|
+
member, message, print_conversation
|
|
135
|
+
)
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
# 异步等待所有任务完成(可选)
|
|
139
|
+
for future in futures:
|
|
140
|
+
future.add_done_callback(self._handle_send_result)
|
|
141
|
+
|
|
142
|
+
if print_conversation:
|
|
143
|
+
with self._history_lock: # 同步打印
|
|
144
|
+
print(f"[Group Broadcast End] {message.sender} finished broadcasting to {self.name} group")
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class GroupMembership:
|
|
148
|
+
def __init__(self, agent: 'BaseAgent', group: 'Group'):
|
|
149
|
+
self.agent = agent
|
|
150
|
+
self.group = group
|
|
151
|
+
|
|
152
|
+
def talk_to_all(self, content: str):
|
|
153
|
+
message = Message(
|
|
154
|
+
sender=self.agent.name,
|
|
155
|
+
content=content,
|
|
156
|
+
is_group=True,
|
|
157
|
+
group_name=self.group.name
|
|
158
|
+
)
|
|
159
|
+
self.group.broadcast(message)
|
|
160
|
+
|
|
161
|
+
def talk_to(self, content: str, mentions: List['BaseAgent']):
|
|
162
|
+
message = Message(
|
|
163
|
+
sender=self.agent.name,
|
|
164
|
+
content=f"@{' @'.join([a.name for a in mentions])} {content}",
|
|
165
|
+
is_group=True,
|
|
166
|
+
group_name=self.group.name,
|
|
167
|
+
mentions=[a.name for a in mentions]
|
|
168
|
+
)
|
|
169
|
+
self.group.broadcast(message)
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import locale
|
|
2
|
+
from byzerllm.utils import format_str_jinja2
|
|
3
|
+
|
|
4
|
+
MESSAGES = {
|
|
5
|
+
"auto_command_analyzing": {
|
|
6
|
+
"en": "Analyzing Command Request",
|
|
7
|
+
"zh": "正在分析命令请求"
|
|
8
|
+
},
|
|
9
|
+
# run_in_terminal方法的国际化文本
|
|
10
|
+
"agent_start": {
|
|
11
|
+
"en": "[bold cyan]Starting Agent: {{ project_name }}[/]",
|
|
12
|
+
"zh": "[bold cyan]启动代理: {{ project_name }}[/]"
|
|
13
|
+
},
|
|
14
|
+
"user_input": {
|
|
15
|
+
"en": "[bold]User Input:[/bold]\n{{ input }}",
|
|
16
|
+
"zh": "[bold]用户输入:[/bold]\n{{ input }}"
|
|
17
|
+
},
|
|
18
|
+
"user_input_title": {
|
|
19
|
+
"en": "Objective",
|
|
20
|
+
"zh": "目标"
|
|
21
|
+
},
|
|
22
|
+
"token_usage_log": {
|
|
23
|
+
"en": "Token Usage: Model={{ model }}, Input Tokens={{ input_tokens }}, Output Tokens={{ output_tokens }}, Input Cost=${{ input_cost }}, Output Cost=${{ output_cost }}",
|
|
24
|
+
"zh": "Token使用情况: 模型={{ model }}, 输入Token={{ input_tokens }}, 输出Token={{ output_tokens }}, 输入成本=${{ input_cost }}, 输出成本=${{ output_cost }}"
|
|
25
|
+
},
|
|
26
|
+
"tool_operation_title": {
|
|
27
|
+
"en": "🛠️ Operation: {{ tool_name }}",
|
|
28
|
+
"zh": "🛠️ 操作: {{ tool_name }}"
|
|
29
|
+
},
|
|
30
|
+
"tool_result_success_title": {
|
|
31
|
+
"en": "✅ Tool Result: {{ tool_name }}",
|
|
32
|
+
"zh": "✅ 工具结果: {{ tool_name }}"
|
|
33
|
+
},
|
|
34
|
+
"tool_result_failure_title": {
|
|
35
|
+
"en": "❌ Tool Result: {{ tool_name }}",
|
|
36
|
+
"zh": "❌ 工具结果: {{ tool_name }}"
|
|
37
|
+
},
|
|
38
|
+
"status": {
|
|
39
|
+
"en": "[bold]Status:[/bold] {{ status }}",
|
|
40
|
+
"zh": "[bold]状态:[/bold] {{ status }}"
|
|
41
|
+
},
|
|
42
|
+
"message": {
|
|
43
|
+
"en": "[bold]Message:[/bold] {{ message }}",
|
|
44
|
+
"zh": "[bold]消息:[/bold] {{ message }}"
|
|
45
|
+
},
|
|
46
|
+
"success_status": {
|
|
47
|
+
"en": "Success",
|
|
48
|
+
"zh": "成功"
|
|
49
|
+
},
|
|
50
|
+
"failure_status": {
|
|
51
|
+
"en": "Failure",
|
|
52
|
+
"zh": "失败"
|
|
53
|
+
},
|
|
54
|
+
"format_tool_error": {
|
|
55
|
+
"en": "Error formatting tool result content: {{ error }}",
|
|
56
|
+
"zh": "格式化工具结果内容时出错: {{ error }}"
|
|
57
|
+
},
|
|
58
|
+
"completion_title": {
|
|
59
|
+
"en": "🏁 Task Completed",
|
|
60
|
+
"zh": "🏁 任务完成"
|
|
61
|
+
},
|
|
62
|
+
"suggested_command": {
|
|
63
|
+
"en": "[dim]Suggested Command:[/dim] [bold cyan]{{ command }}[/]",
|
|
64
|
+
"zh": "[dim]建议命令:[/dim] [bold cyan]{{ command }}[/]"
|
|
65
|
+
},
|
|
66
|
+
"error_title": {
|
|
67
|
+
"en": "🔥 Error",
|
|
68
|
+
"zh": "🔥 错误"
|
|
69
|
+
},
|
|
70
|
+
"error_content": {
|
|
71
|
+
"en": "[bold red]Error:[/bold red] {{ message }}",
|
|
72
|
+
"zh": "[bold red]错误:[/bold red] {{ message }}"
|
|
73
|
+
},
|
|
74
|
+
"fatal_error_title": {
|
|
75
|
+
"en": "🔥 System Error",
|
|
76
|
+
"zh": "🔥 系统错误"
|
|
77
|
+
},
|
|
78
|
+
"fatal_error_content": {
|
|
79
|
+
"en": "[bold red]Fatal Error:[/bold red]\n{{ error }}",
|
|
80
|
+
"zh": "[bold red]致命错误:[/bold red]\n{{ error }}"
|
|
81
|
+
},
|
|
82
|
+
"shadow_merge_error": {
|
|
83
|
+
"en": "Error merging shadow changes to project: {{ error }}",
|
|
84
|
+
"zh": "合并影子更改到项目时出错: {{ error }}"
|
|
85
|
+
},
|
|
86
|
+
"agent_execution_complete": {
|
|
87
|
+
"en": "[bold cyan]Agent Execution Completed[/]",
|
|
88
|
+
"zh": "[bold cyan]代理执行完成[/]"
|
|
89
|
+
},
|
|
90
|
+
"unexpected_error": {
|
|
91
|
+
"en": "Unexpected error during agent execution:",
|
|
92
|
+
"zh": "代理执行过程中发生意外错误:"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def get_system_language():
|
|
98
|
+
try:
|
|
99
|
+
return locale.getdefaultlocale()[0][:2]
|
|
100
|
+
except:
|
|
101
|
+
return "en"
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def get_message(key):
|
|
105
|
+
lang = get_system_language()
|
|
106
|
+
if key in MESSAGES:
|
|
107
|
+
return MESSAGES[key].get(lang, MESSAGES[key].get("en", ""))
|
|
108
|
+
return ""
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def get_message_with_format(msg_key: str, **kwargs):
|
|
112
|
+
return format_str_jinja2(get_message(msg_key), **kwargs)
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import Dict, Callable, Type
|
|
3
|
+
from autocoder.common.auto_coder_lang import get_system_language, format_str_jinja2
|
|
4
|
+
from autocoder.agent.base_agentic.types import (
|
|
5
|
+
BaseTool,
|
|
6
|
+
ReadFileTool, WriteToFileTool, ReplaceInFileTool, ExecuteCommandTool,
|
|
7
|
+
ListFilesTool, SearchFilesTool,
|
|
8
|
+
AskFollowupQuestionTool, UseMcpTool, AttemptCompletionTool
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
# Define message templates for each tool in English and Chinese
|
|
12
|
+
TOOL_DISPLAY_MESSAGES: Dict[Type[BaseTool], Dict[str, str]] = {
|
|
13
|
+
ReadFileTool: {
|
|
14
|
+
"en": "AutoCoder wants to read this file:\n[bold cyan]{{ path }}[/]",
|
|
15
|
+
"zh": "AutoCoder 想要读取此文件:\n[bold cyan]{{ path }}[/]"
|
|
16
|
+
},
|
|
17
|
+
WriteToFileTool: {
|
|
18
|
+
"en": (
|
|
19
|
+
"AutoCoder wants to write to this file:\n[bold cyan]{{ path }}[/]\n\n"
|
|
20
|
+
"[dim]Content Snippet:[/dim]\n{{ content_snippet }}{{ ellipsis }}"
|
|
21
|
+
),
|
|
22
|
+
"zh": (
|
|
23
|
+
"AutoCoder 想要写入此文件:\n[bold cyan]{{ path }}[/]\n\n"
|
|
24
|
+
"[dim]内容片段:[/dim]\n{{ content_snippet }}{{ ellipsis }}"
|
|
25
|
+
)
|
|
26
|
+
},
|
|
27
|
+
ReplaceInFileTool: {
|
|
28
|
+
"en": (
|
|
29
|
+
"AutoCoder wants to replace content in this file:\n[bold cyan]{{ path }}[/]\n\n"
|
|
30
|
+
"[dim]Diff Snippet:[/dim]\n{{ diff_snippet }}{{ ellipsis }}"
|
|
31
|
+
),
|
|
32
|
+
"zh": (
|
|
33
|
+
"AutoCoder 想要替换此文件中的内容:\n[bold cyan]{{ path }}[/]\n\n"
|
|
34
|
+
"[dim]差异片段:[/dim]\n{{ diff_snippet }}{{ ellipsis }}"
|
|
35
|
+
)
|
|
36
|
+
},
|
|
37
|
+
ExecuteCommandTool: {
|
|
38
|
+
"en": (
|
|
39
|
+
"AutoCoder wants to execute this command:\n[bold yellow]{{ command }}[/]\n"
|
|
40
|
+
"[dim](Requires Approval: {{ requires_approval }})[/]"
|
|
41
|
+
),
|
|
42
|
+
"zh": (
|
|
43
|
+
"AutoCoder 想要执行此命令:\n[bold yellow]{{ command }}[/]\n"
|
|
44
|
+
"[dim](需要批准:{{ requires_approval }})[/]"
|
|
45
|
+
)
|
|
46
|
+
},
|
|
47
|
+
ListFilesTool: {
|
|
48
|
+
"en": (
|
|
49
|
+
"AutoCoder wants to list files in:\n[bold green]{{ path }}[/] "
|
|
50
|
+
"{{ recursive_text }}"
|
|
51
|
+
),
|
|
52
|
+
"zh": (
|
|
53
|
+
"AutoCoder 想要列出此目录中的文件:\n[bold green]{{ path }}[/] "
|
|
54
|
+
"{{ recursive_text }}"
|
|
55
|
+
)
|
|
56
|
+
},
|
|
57
|
+
SearchFilesTool: {
|
|
58
|
+
"en": (
|
|
59
|
+
"AutoCoder wants to search files in:\n[bold green]{{ path }}[/]\n"
|
|
60
|
+
"[dim]File Pattern:[/dim] [yellow]{{ file_pattern }}[/]\n"
|
|
61
|
+
"[dim]Regex:[/dim] [yellow]{{ regex }}[/]"
|
|
62
|
+
),
|
|
63
|
+
"zh": (
|
|
64
|
+
"AutoCoder 想要在此目录中搜索文件:\n[bold green]{{ path }}[/]\n"
|
|
65
|
+
"[dim]文件模式:[/dim] [yellow]{{ file_pattern }}[/]\n"
|
|
66
|
+
"[dim]正则表达式:[/dim] [yellow]{{ regex }}[/]"
|
|
67
|
+
)
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
AskFollowupQuestionTool: {
|
|
71
|
+
"en": (
|
|
72
|
+
"AutoCoder is asking a question:\n[bold magenta]{{ question }}[/]\n"
|
|
73
|
+
"{{ options_text }}"
|
|
74
|
+
),
|
|
75
|
+
"zh": (
|
|
76
|
+
"AutoCoder 正在提问:\n[bold magenta]{{ question }}[/]\n"
|
|
77
|
+
"{{ options_text }}"
|
|
78
|
+
)
|
|
79
|
+
},
|
|
80
|
+
UseMcpTool: {
|
|
81
|
+
"en": (
|
|
82
|
+
"AutoCoder wants to use an MCP tool:\n"
|
|
83
|
+
"[dim]Server:[/dim] [blue]{{ server_name }}[/]\n"
|
|
84
|
+
"[dim]Tool:[/dim] [blue]{{ tool_name }}[/]\n"
|
|
85
|
+
"[dim]Args:[/dim] {{ arguments_snippet }}{{ ellipsis }}"
|
|
86
|
+
),
|
|
87
|
+
"zh": (
|
|
88
|
+
"AutoCoder 想要使用 MCP 工具:\n"
|
|
89
|
+
"[dim]服务器:[/dim] [blue]{{ server_name }}[/]\n"
|
|
90
|
+
"[dim]工具:[/dim] [blue]{{ tool_name }}[/]\n"
|
|
91
|
+
"[dim]参数:[/dim] {{ arguments_snippet }}{{ ellipsis }}"
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
def get_tool_display_message(tool: BaseTool) -> str:
|
|
97
|
+
"""
|
|
98
|
+
Generates a user-friendly, internationalized string representation for a tool call.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
tool: The tool instance (Pydantic model).
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
A formatted string for display in the terminal.
|
|
105
|
+
"""
|
|
106
|
+
lang = get_system_language()
|
|
107
|
+
tool_type = type(tool)
|
|
108
|
+
|
|
109
|
+
if tool_type not in TOOL_DISPLAY_MESSAGES:
|
|
110
|
+
# Fallback for unknown tools
|
|
111
|
+
return f"Unknown tool type: {tool_type.__name__}\nData: {tool.model_dump_json(indent=2)}"
|
|
112
|
+
|
|
113
|
+
templates = TOOL_DISPLAY_MESSAGES[tool_type]
|
|
114
|
+
template = templates.get(lang, templates.get("en", "Tool display template not found")) # Fallback to English
|
|
115
|
+
|
|
116
|
+
# Prepare context specific to each tool type
|
|
117
|
+
context = {}
|
|
118
|
+
if isinstance(tool, ReadFileTool):
|
|
119
|
+
context = {"path": tool.path}
|
|
120
|
+
elif isinstance(tool, WriteToFileTool):
|
|
121
|
+
snippet = tool.content[:150]
|
|
122
|
+
context = {
|
|
123
|
+
"path": tool.path,
|
|
124
|
+
"content_snippet": snippet,
|
|
125
|
+
"ellipsis": '...' if len(tool.content) > 150 else ''
|
|
126
|
+
}
|
|
127
|
+
elif isinstance(tool, ReplaceInFileTool):
|
|
128
|
+
snippet = tool.diff
|
|
129
|
+
context = {
|
|
130
|
+
"path": tool.path,
|
|
131
|
+
"diff_snippet": snippet,
|
|
132
|
+
"ellipsis": ''
|
|
133
|
+
}
|
|
134
|
+
elif isinstance(tool, ExecuteCommandTool):
|
|
135
|
+
context = {"command": tool.command, "requires_approval": tool.requires_approval}
|
|
136
|
+
elif isinstance(tool, ListFilesTool):
|
|
137
|
+
rec_text_en = '(Recursively)' if tool.recursive else '(Top Level)'
|
|
138
|
+
rec_text_zh = '(递归)' if tool.recursive else '(顶层)'
|
|
139
|
+
context = {
|
|
140
|
+
"path": tool.path,
|
|
141
|
+
"recursive_text": rec_text_zh if lang == 'zh' else rec_text_en
|
|
142
|
+
}
|
|
143
|
+
elif isinstance(tool, SearchFilesTool):
|
|
144
|
+
context = {
|
|
145
|
+
"path": tool.path,
|
|
146
|
+
"file_pattern": tool.file_pattern or '*',
|
|
147
|
+
"regex": tool.regex
|
|
148
|
+
}
|
|
149
|
+
elif isinstance(tool, ListCodeDefinitionNamesTool):
|
|
150
|
+
context = {"path": tool.path}
|
|
151
|
+
elif isinstance(tool, AskFollowupQuestionTool):
|
|
152
|
+
options_text_en = ""
|
|
153
|
+
options_text_zh = ""
|
|
154
|
+
if tool.options:
|
|
155
|
+
options_list_en = "\n".join([f"- {opt}" for opt in tool.options])
|
|
156
|
+
options_list_zh = "\n".join([f"- {opt}" for opt in tool.options]) # Assuming options are simple enough not to need translation
|
|
157
|
+
options_text_en = f"[dim]Options:[/dim]\n{options_list_en}"
|
|
158
|
+
options_text_zh = f"[dim]选项:[/dim]\n{options_list_zh}"
|
|
159
|
+
context = {
|
|
160
|
+
"question": tool.question,
|
|
161
|
+
"options_text": options_text_zh if lang == 'zh' else options_text_en
|
|
162
|
+
}
|
|
163
|
+
elif isinstance(tool, UseMcpTool):
|
|
164
|
+
args_str = tool.query
|
|
165
|
+
snippet = args_str[:100]
|
|
166
|
+
context = {
|
|
167
|
+
"server_name": tool.server_name,
|
|
168
|
+
"tool_name": tool.tool_name,
|
|
169
|
+
"arguments_snippet": snippet,
|
|
170
|
+
"ellipsis": '...' if len(args_str) > 100 else ''
|
|
171
|
+
}
|
|
172
|
+
else:
|
|
173
|
+
# Generic context for tools not specifically handled above
|
|
174
|
+
context = tool.model_dump()
|
|
175
|
+
|
|
176
|
+
try:
|
|
177
|
+
return format_str_jinja2(template, **context)
|
|
178
|
+
except Exception as e:
|
|
179
|
+
# Fallback in case of formatting errors
|
|
180
|
+
return f"Error formatting display for {tool_type.__name__}: {e}\nTemplate: {template}\nContext: {context}"
|