auto-coder 1.0.0__py3-none-any.whl → 2.0.1__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.1.dist-info/LICENSE +158 -0
- auto_coder-2.0.1.dist-info/METADATA +558 -0
- auto_coder-2.0.1.dist-info/RECORD +795 -0
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/WHEEL +1 -1
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.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 +24 -3
- 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 +77 -73
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +962 -2345
- 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 +988 -398
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +25 -8
- 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 +409 -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/git_utils.py +44 -8
- 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 +316 -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 +651 -102
- 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/pruner/conversation_pruner.py +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
- 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/counter.py +24 -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 +2699 -1856
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
- 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 +564 -29
- 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 +356 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
- 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 +410 -86
- 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 +207 -192
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
- 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 +343 -9
- autocoder/common/v2/agent/runner/__init__.py +3 -3
- autocoder/common/v2/agent/runner/base_runner.py +12 -26
- autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
- autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
- autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
- autocoder/common/v2/agent/runner/tool_display.py +557 -159
- 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 +1094 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +400 -129
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +117 -125
- autocoder/{agent → index/filter}/agentic_filter.py +322 -333
- 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 +923 -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 +65 -46
- 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/sdk/__init__.py +46 -190
- 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 +154 -171
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -109
- autocoder/sdk/core/bridge.py +297 -115
- 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 +665 -0
- autocoder/workflow_agents/loader.py +749 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +173 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-1.0.0.dist-info/METADATA +0 -396
- auto_coder-1.0.0.dist-info/RECORD +0 -442
- auto_coder-1.0.0.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/context_pruner.py +0 -477
- autocoder/common/conversation_pruner.py +0 -132
- 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-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
autocoder/common/git_utils.py
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from git import Repo, GitCommandError
|
|
3
|
-
import git
|
|
4
2
|
from loguru import logger
|
|
5
3
|
from typing import List, Optional, Dict, Any
|
|
6
4
|
from pydantic import BaseModel
|
|
@@ -12,6 +10,29 @@ from rich.table import Table
|
|
|
12
10
|
from rich.text import Text
|
|
13
11
|
|
|
14
12
|
|
|
13
|
+
# 尝试导入git模块,如果失败则提供优雅降级
|
|
14
|
+
try:
|
|
15
|
+
from git import Repo, GitCommandError
|
|
16
|
+
import git
|
|
17
|
+
GIT_AVAILABLE = True
|
|
18
|
+
except ImportError as e:
|
|
19
|
+
logger.warning(f"Git module not available: {e}. Some git features will be disabled.")
|
|
20
|
+
# 提供虚拟类以避免NameError
|
|
21
|
+
class Repo:
|
|
22
|
+
def __init__(self, *args, **kwargs):
|
|
23
|
+
raise RuntimeError("Git is not available on this system")
|
|
24
|
+
|
|
25
|
+
class GitCommandError(Exception):
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
class _GitMock:
|
|
29
|
+
def __getattr__(self, name):
|
|
30
|
+
raise RuntimeError("Git is not available on this system")
|
|
31
|
+
|
|
32
|
+
git = _GitMock()
|
|
33
|
+
GIT_AVAILABLE = False
|
|
34
|
+
|
|
35
|
+
|
|
15
36
|
class FileChange(BaseModel):
|
|
16
37
|
file_path: str
|
|
17
38
|
before: Optional[str] = None
|
|
@@ -32,6 +53,10 @@ class CommitResult(BaseModel):
|
|
|
32
53
|
|
|
33
54
|
|
|
34
55
|
def init(repo_path: str) -> bool:
|
|
56
|
+
if not GIT_AVAILABLE:
|
|
57
|
+
logger.warning("Git is not available. Skipping Git initialization.")
|
|
58
|
+
return False
|
|
59
|
+
|
|
35
60
|
if not os.path.exists(repo_path):
|
|
36
61
|
os.makedirs(repo_path)
|
|
37
62
|
|
|
@@ -44,21 +69,33 @@ def init(repo_path: str) -> bool:
|
|
|
44
69
|
repo = Repo.init(repo_path)
|
|
45
70
|
logger.info(f"Initialized new Git repository at {repo_path}")
|
|
46
71
|
return True
|
|
47
|
-
except GitCommandError as e:
|
|
72
|
+
except (GitCommandError, RuntimeError) as e:
|
|
48
73
|
logger.error(f"Error during Git initialization: {e}")
|
|
49
74
|
return False
|
|
50
75
|
|
|
51
76
|
|
|
52
|
-
def get_repo(repo_path: str) -> Repo:
|
|
53
|
-
|
|
54
|
-
|
|
77
|
+
def get_repo(repo_path: str) -> Optional[Repo]:
|
|
78
|
+
if not GIT_AVAILABLE:
|
|
79
|
+
logger.warning("Git is not available. Cannot create repository object.")
|
|
80
|
+
return None
|
|
81
|
+
try:
|
|
82
|
+
repo = Repo(repo_path)
|
|
83
|
+
return repo
|
|
84
|
+
except (GitCommandError, RuntimeError) as e:
|
|
85
|
+
logger.error(f"Error accessing Git repository at {repo_path}: {e}")
|
|
86
|
+
return None
|
|
55
87
|
|
|
56
88
|
|
|
57
89
|
def commit_changes(repo_path: str, message: str) -> CommitResult:
|
|
90
|
+
if not GIT_AVAILABLE:
|
|
91
|
+
return CommitResult(
|
|
92
|
+
success=False, error_message="Git is not available on this system."
|
|
93
|
+
)
|
|
94
|
+
|
|
58
95
|
repo = get_repo(repo_path)
|
|
59
96
|
if repo is None:
|
|
60
97
|
return CommitResult(
|
|
61
|
-
success=False, error_message="Repository is not initialized."
|
|
98
|
+
success=False, error_message="Repository is not initialized or Git is not available."
|
|
62
99
|
)
|
|
63
100
|
|
|
64
101
|
try:
|
|
@@ -435,7 +472,6 @@ def generate_commit_message(changes_report: str, query: Optional[str] = None) ->
|
|
|
435
472
|
+ "nbformat": 4,
|
|
436
473
|
+ "nbformat_minor": 4
|
|
437
474
|
+}
|
|
438
|
-
|
|
439
475
|
```
|
|
440
476
|
|
|
441
477
|
输出的commit 信息为:
|
|
@@ -15,12 +15,19 @@ class GlobalCancel:
|
|
|
15
15
|
self._lock = threading.Lock()
|
|
16
16
|
self._context: Dict[str, Any] = {} # 存储与取消相关的上下文信息
|
|
17
17
|
self._active_tokens: set[str] = set() # 存储当前正在运行的token
|
|
18
|
+
self._current_task_token: Optional[str] = None
|
|
18
19
|
|
|
19
20
|
def register_token(self, token: str) -> None:
|
|
20
21
|
"""注册一个 token,表示一个操作开始,但尚未请求取消"""
|
|
21
22
|
with self._lock:
|
|
22
23
|
self._token_flags[token] = False
|
|
23
24
|
self._active_tokens.add(token)
|
|
25
|
+
self._current_task_token = token
|
|
26
|
+
|
|
27
|
+
def get_current_task_token(self) -> Optional[str]:
|
|
28
|
+
"""获取当前任务token"""
|
|
29
|
+
with self._lock:
|
|
30
|
+
return self._current_task_token
|
|
24
31
|
|
|
25
32
|
def get_active_tokens(self) -> set[str]:
|
|
26
33
|
"""获取当前正在运行的token"""
|
|
@@ -29,11 +36,10 @@ class GlobalCancel:
|
|
|
29
36
|
|
|
30
37
|
def is_requested(self, token: Optional[str] = None) -> bool:
|
|
31
38
|
"""检查是否请求了特定token或全局的取消"""
|
|
32
|
-
if token is not None and token in self._token_flags:
|
|
33
|
-
return self._token_flags[token]
|
|
34
|
-
|
|
35
39
|
if self._global_flag:
|
|
36
40
|
return True
|
|
41
|
+
if token is not None and token in self._token_flags:
|
|
42
|
+
return self._token_flags[token]
|
|
37
43
|
return False
|
|
38
44
|
|
|
39
45
|
def set_active_tokens(self) -> None:
|
|
@@ -72,6 +78,8 @@ class GlobalCancel:
|
|
|
72
78
|
del self._context["tokens"][token]
|
|
73
79
|
if token:
|
|
74
80
|
self._active_tokens.discard(token) # 从活跃集合中移除
|
|
81
|
+
if token == self._current_task_token:
|
|
82
|
+
self._current_task_token = None
|
|
75
83
|
|
|
76
84
|
def reset(self, token: Optional[str] = None) -> None:
|
|
77
85
|
"""重置特定token或全局的取消标志"""
|
|
@@ -90,6 +98,8 @@ class GlobalCancel:
|
|
|
90
98
|
del self._context["tokens"][token]
|
|
91
99
|
if token:
|
|
92
100
|
self._active_tokens.discard(token) # 从活跃集合中移除
|
|
101
|
+
if token == self._current_task_token:
|
|
102
|
+
self._current_task_token = None
|
|
93
103
|
|
|
94
104
|
def reset_active_tokens(self) -> None:
|
|
95
105
|
"""重置所有活跃的token"""
|
|
@@ -110,10 +120,9 @@ class GlobalCancel:
|
|
|
110
120
|
"""检查是否请求了取消,如果是则抛出异常"""
|
|
111
121
|
if self.is_requested(token):
|
|
112
122
|
context = self.get_context(token)
|
|
123
|
+
self.reset_global()
|
|
113
124
|
if token:
|
|
114
|
-
self.reset_token(token)
|
|
115
|
-
else:
|
|
116
|
-
self.reset_global()
|
|
125
|
+
self.reset_token(token)
|
|
117
126
|
raise CancelRequestedException(token, context.get("message", "Operation was cancelled"))
|
|
118
127
|
|
|
119
128
|
global_cancel = GlobalCancel()
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
International module for auto-coder project
|
|
3
|
+
|
|
4
|
+
This module provides internationalization (i18n) support for the auto-coder project.
|
|
5
|
+
It includes message management, language detection, and formatted message retrieval.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .message_manager import (
|
|
9
|
+
MessageManager,
|
|
10
|
+
get_message_manager,
|
|
11
|
+
register_messages,
|
|
12
|
+
get_system_language,
|
|
13
|
+
get_message,
|
|
14
|
+
get_message_with_format,
|
|
15
|
+
get_supported_languages,
|
|
16
|
+
is_language_supported
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
# Import messages module to trigger auto-registration
|
|
20
|
+
from . import messages
|
|
21
|
+
|
|
22
|
+
__all__ = [
|
|
23
|
+
'MessageManager',
|
|
24
|
+
'get_message_manager',
|
|
25
|
+
'register_messages',
|
|
26
|
+
'get_system_language',
|
|
27
|
+
'get_message',
|
|
28
|
+
'get_message_with_format',
|
|
29
|
+
'get_supported_languages',
|
|
30
|
+
'is_language_supported'
|
|
31
|
+
]
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
国际化模块功能演示脚本
|
|
4
|
+
International module functionality demo
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from autocoder.common.international import (
|
|
8
|
+
register_messages,
|
|
9
|
+
get_message,
|
|
10
|
+
get_message_with_format,
|
|
11
|
+
get_system_language,
|
|
12
|
+
get_message_manager
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
"""演示国际化模块的主要功能"""
|
|
18
|
+
print("=== 国际化模块功能演示 ===")
|
|
19
|
+
print("=== International Module Demo ===\n")
|
|
20
|
+
|
|
21
|
+
# 1. 显示系统语言
|
|
22
|
+
print("1. 系统语言检测 / System Language Detection:")
|
|
23
|
+
lang = get_system_language()
|
|
24
|
+
print(f" 当前系统语言 / Current system language: {lang}\n")
|
|
25
|
+
|
|
26
|
+
# 2. 注册自定义消息
|
|
27
|
+
print("2. 注册自定义消息 / Register Custom Messages:")
|
|
28
|
+
custom_messages = {
|
|
29
|
+
"demo_greeting": {
|
|
30
|
+
"en": "Hello from International Module!",
|
|
31
|
+
"zh": "来自国际化模块的问候!"
|
|
32
|
+
},
|
|
33
|
+
"demo_user_info": {
|
|
34
|
+
"en": "User {{name}} has {{count}} messages",
|
|
35
|
+
"zh": "用户{{name}}有{{count}}条消息"
|
|
36
|
+
},
|
|
37
|
+
"demo_status": {
|
|
38
|
+
"en": "Status: {{status}}",
|
|
39
|
+
"zh": "状态:{{status}}"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
register_messages(custom_messages)
|
|
44
|
+
print(" 自定义消息已注册 / Custom messages registered\n")
|
|
45
|
+
|
|
46
|
+
# 3. 获取简单消息
|
|
47
|
+
print("3. 获取简单消息 / Get Simple Messages:")
|
|
48
|
+
greeting = get_message("demo_greeting")
|
|
49
|
+
print(f" 问候消息 / Greeting: {greeting}\n")
|
|
50
|
+
|
|
51
|
+
# 4. 获取格式化消息
|
|
52
|
+
print("4. 获取格式化消息 / Get Formatted Messages:")
|
|
53
|
+
user_info = get_message_with_format("demo_user_info", name="张三", count=5)
|
|
54
|
+
print(f" 用户信息 / User info: {user_info}")
|
|
55
|
+
|
|
56
|
+
status_msg = get_message_with_format("demo_status", status="正常")
|
|
57
|
+
print(f" 状态消息 / Status: {status_msg}\n")
|
|
58
|
+
|
|
59
|
+
# 5. 显示自动注册的消息
|
|
60
|
+
print("5. 自动注册的消息 / Auto-registered Messages:")
|
|
61
|
+
manager = get_message_manager()
|
|
62
|
+
total_messages = len(manager._messages)
|
|
63
|
+
print(f" 总消息数量 / Total messages: {total_messages}")
|
|
64
|
+
|
|
65
|
+
# 尝试获取一些已知的自动注册消息
|
|
66
|
+
known_keys = ["file_scored_message", "config_delete_success", "config_invalid_format"]
|
|
67
|
+
for key in known_keys:
|
|
68
|
+
if key in manager._messages:
|
|
69
|
+
msg = get_message(key)
|
|
70
|
+
if msg:
|
|
71
|
+
print(f" {key}: {msg}")
|
|
72
|
+
break
|
|
73
|
+
|
|
74
|
+
print("\n6. 消息覆盖演示 / Message Override Demo:")
|
|
75
|
+
# 覆盖现有消息
|
|
76
|
+
override_messages = {
|
|
77
|
+
"demo_greeting": {
|
|
78
|
+
"en": "Updated Hello from International Module!",
|
|
79
|
+
"zh": "来自国际化模块的更新问候!"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
register_messages(override_messages)
|
|
84
|
+
updated_greeting = get_message("demo_greeting")
|
|
85
|
+
print(f" 更新后的问候 / Updated greeting: {updated_greeting}\n")
|
|
86
|
+
|
|
87
|
+
print("=== 演示完成 ===")
|
|
88
|
+
print("=== Demo Complete ===")
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
if __name__ == "__main__":
|
|
92
|
+
main()
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import locale
|
|
2
|
+
from typing import Dict, Any
|
|
3
|
+
from byzerllm.utils import format_str_jinja2
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MessageManager:
|
|
7
|
+
"""
|
|
8
|
+
Central message manager for handling internationalization across the auto-coder project
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
def __init__(self):
|
|
12
|
+
self._messages: Dict[str, Dict[str, str]] = {}
|
|
13
|
+
|
|
14
|
+
def register_messages(self, messages: Dict[str, Dict[str, str]]):
|
|
15
|
+
"""
|
|
16
|
+
Register a set of messages with the manager
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
messages: Dictionary of message keys to language-specific messages
|
|
20
|
+
"""
|
|
21
|
+
self._messages.update(messages)
|
|
22
|
+
|
|
23
|
+
def get_system_language(self) -> str:
|
|
24
|
+
"""
|
|
25
|
+
Get the system's default language code
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
Two-letter language code (e.g., 'en', 'zh'), falls back to 'en' for unsupported languages
|
|
29
|
+
"""
|
|
30
|
+
try:
|
|
31
|
+
lang_code, _ = locale.getdefaultlocale()
|
|
32
|
+
if lang_code:
|
|
33
|
+
detected_lang = lang_code[:2]
|
|
34
|
+
# 检查是否是支持的语言,如果不是则回退到英文
|
|
35
|
+
supported_languages = ['en', 'zh', 'ja', 'ar', 'ru']
|
|
36
|
+
if detected_lang in supported_languages:
|
|
37
|
+
return detected_lang
|
|
38
|
+
else:
|
|
39
|
+
return "en"
|
|
40
|
+
return "en"
|
|
41
|
+
except:
|
|
42
|
+
return "en"
|
|
43
|
+
|
|
44
|
+
def get_message(self, key: str) -> str:
|
|
45
|
+
"""
|
|
46
|
+
Get a localized message by key
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
key: Message key to look up
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
Localized message string, or empty string if not found
|
|
53
|
+
"""
|
|
54
|
+
lang = self.get_system_language()
|
|
55
|
+
if key in self._messages:
|
|
56
|
+
return self._messages[key].get(lang, self._messages[key].get("en", ""))
|
|
57
|
+
return ""
|
|
58
|
+
|
|
59
|
+
def get_message_with_format(self, msg_key: str, **kwargs) -> str:
|
|
60
|
+
"""
|
|
61
|
+
Get a localized message with template formatting
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
msg_key: Message key to look up
|
|
65
|
+
**kwargs: Variables to substitute in the message template
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Formatted localized message string
|
|
69
|
+
"""
|
|
70
|
+
message = self.get_message(msg_key)
|
|
71
|
+
if message:
|
|
72
|
+
return format_str_jinja2(message, **kwargs)
|
|
73
|
+
return ""
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# Global message manager instance
|
|
77
|
+
_global_message_manager = MessageManager()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def get_message_manager() -> MessageManager:
|
|
81
|
+
"""
|
|
82
|
+
Get the global message manager instance
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
Global MessageManager instance
|
|
86
|
+
"""
|
|
87
|
+
return _global_message_manager
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def register_messages(messages: Dict[str, Dict[str, str]]):
|
|
91
|
+
"""
|
|
92
|
+
Register messages with the global message manager
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
messages: Dictionary of message keys to language-specific messages
|
|
96
|
+
"""
|
|
97
|
+
_global_message_manager.register_messages(messages)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def get_system_language() -> str:
|
|
101
|
+
"""
|
|
102
|
+
Get the system's default language code
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Two-letter language code (e.g., 'en', 'zh')
|
|
106
|
+
"""
|
|
107
|
+
return _global_message_manager.get_system_language()
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def get_message(key: str) -> str:
|
|
111
|
+
"""
|
|
112
|
+
Get a localized message by key
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
key: Message key to look up
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
Localized message string, or empty string if not found
|
|
119
|
+
"""
|
|
120
|
+
return _global_message_manager.get_message(key)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def get_message_with_format(msg_key: str, **kwargs) -> str:
|
|
124
|
+
"""
|
|
125
|
+
Get a localized message with template formatting
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
msg_key: Message key to look up
|
|
129
|
+
**kwargs: Variables to substitute in the message template
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
Formatted localized message string
|
|
133
|
+
"""
|
|
134
|
+
return _global_message_manager.get_message_with_format(msg_key, **kwargs)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def get_supported_languages() -> list:
|
|
138
|
+
"""
|
|
139
|
+
Get list of supported languages
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
List of supported language codes
|
|
143
|
+
"""
|
|
144
|
+
return ['en', 'zh', 'ja', 'ar', 'ru']
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def is_language_supported(language: str) -> bool:
|
|
148
|
+
"""
|
|
149
|
+
Check if a language is supported
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
language: Language code to check
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
True if language is supported, False otherwise
|
|
156
|
+
"""
|
|
157
|
+
return language in get_supported_languages()
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Messages module for auto-coder international support
|
|
3
|
+
|
|
4
|
+
This module automatically registers all message files and provides a unified interface.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .auto_coder_messages import AUTO_CODER_MESSAGES
|
|
8
|
+
from .chat_auto_coder_messages import CHAT_AUTO_CODER_MESSAGES
|
|
9
|
+
from .sdk_messages import SDK_MESSAGES
|
|
10
|
+
from .tool_display_messages import TOOL_DISPLAY_MESSAGES
|
|
11
|
+
from .git_helper_plugin_messages import GIT_HELPER_PLUGIN_MESSAGES
|
|
12
|
+
from .token_helper_plugin_messages import TOKEN_HELPER_PLUGIN_MESSAGES
|
|
13
|
+
from .rules_command_messages import RULES_COMMAND_MESSAGES
|
|
14
|
+
from .queue_command_messages import QUEUE_COMMAND_MESSAGES
|
|
15
|
+
from .async_command_messages import ASYNC_COMMAND_MESSAGES
|
|
16
|
+
from .conversation_command_messages import CONVERSATION_COMMAND_MESSAGES
|
|
17
|
+
from .command_help_messages import COMMAND_HELP_MESSAGES
|
|
18
|
+
from .workflow_exception_messages import WORKFLOW_EXCEPTION_MESSAGES
|
|
19
|
+
from ..message_manager import register_messages
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# Automatically register all messages when the module is imported
|
|
23
|
+
def register_all_messages():
|
|
24
|
+
"""Register all messages with the global message manager"""
|
|
25
|
+
register_messages(AUTO_CODER_MESSAGES)
|
|
26
|
+
register_messages(CHAT_AUTO_CODER_MESSAGES)
|
|
27
|
+
register_messages(SDK_MESSAGES)
|
|
28
|
+
register_messages(TOOL_DISPLAY_MESSAGES)
|
|
29
|
+
register_messages(GIT_HELPER_PLUGIN_MESSAGES)
|
|
30
|
+
register_messages(TOKEN_HELPER_PLUGIN_MESSAGES)
|
|
31
|
+
register_messages(RULES_COMMAND_MESSAGES)
|
|
32
|
+
register_messages(QUEUE_COMMAND_MESSAGES)
|
|
33
|
+
register_messages(ASYNC_COMMAND_MESSAGES)
|
|
34
|
+
register_messages(CONVERSATION_COMMAND_MESSAGES)
|
|
35
|
+
register_messages(COMMAND_HELP_MESSAGES)
|
|
36
|
+
register_messages(WORKFLOW_EXCEPTION_MESSAGES)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# Auto-register on import
|
|
40
|
+
register_all_messages()
|
|
41
|
+
|
|
42
|
+
__all__ = [
|
|
43
|
+
"AUTO_CODER_MESSAGES",
|
|
44
|
+
"CHAT_AUTO_CODER_MESSAGES",
|
|
45
|
+
"SDK_MESSAGES",
|
|
46
|
+
"TOOL_DISPLAY_MESSAGES",
|
|
47
|
+
"GIT_HELPER_PLUGIN_MESSAGES",
|
|
48
|
+
"TOKEN_HELPER_PLUGIN_MESSAGES",
|
|
49
|
+
"RULES_COMMAND_MESSAGES",
|
|
50
|
+
"QUEUE_COMMAND_MESSAGES",
|
|
51
|
+
"ASYNC_COMMAND_MESSAGES",
|
|
52
|
+
"CONVERSATION_COMMAND_MESSAGES",
|
|
53
|
+
"COMMAND_HELP_MESSAGES",
|
|
54
|
+
"WORKFLOW_EXCEPTION_MESSAGES",
|
|
55
|
+
"register_all_messages",
|
|
56
|
+
]
|