auto-coder 1.0.0__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.0.dist-info/LICENSE +158 -0
- auto_coder-2.0.0.dist-info/METADATA +558 -0
- auto_coder-2.0.0.dist-info/RECORD +795 -0
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +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 +73 -59
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +970 -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 +401 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/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 +288 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +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 +349 -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 +1051 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +165 -7
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +116 -124
- 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 +932 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +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 +489 -0
- autocoder/workflow_agents/loader.py +737 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +172 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-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.0.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
-
from typing import
|
|
3
|
-
from autocoder.common.v2.agent.agentic_edit_types import BaseTool, ToolResult
|
|
2
|
+
from typing import Optional
|
|
3
|
+
from autocoder.common.v2.agent.agentic_edit_types import BaseTool, ToolResult
|
|
4
4
|
from autocoder.common import AutoCoderArgs
|
|
5
5
|
import typing
|
|
6
6
|
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Conversation Message IDs Read Tool Resolver
|
|
3
|
+
|
|
4
|
+
This resolver handles reading existing conversation message IDs configurations.
|
|
5
|
+
It retrieves the current message IDs settings for the active conversation.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
from typing import Optional
|
|
10
|
+
from autocoder.common.v2.agent.agentic_edit_tools.base_tool_resolver import BaseToolResolver
|
|
11
|
+
from autocoder.common.v2.agent.agentic_edit_types import ConversationMessageIdsReadTool, ToolResult
|
|
12
|
+
from autocoder.common import AutoCoderArgs
|
|
13
|
+
from autocoder.common.pruner import get_conversation_message_ids_api
|
|
14
|
+
from loguru import logger
|
|
15
|
+
import typing
|
|
16
|
+
|
|
17
|
+
if typing.TYPE_CHECKING:
|
|
18
|
+
from autocoder.common.v2.agent.agentic_edit import AgenticEdit
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ConversationMessageIdsReadToolResolver(BaseToolResolver):
|
|
22
|
+
"""
|
|
23
|
+
Resolver for the ConversationMessageIdsReadTool.
|
|
24
|
+
|
|
25
|
+
This resolver handles reading existing conversation message IDs configurations
|
|
26
|
+
to show which messages are currently configured for deletion.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def __init__(self, agent: 'AgenticEdit', tool: ConversationMessageIdsReadTool, args: AutoCoderArgs):
|
|
30
|
+
super().__init__(agent, tool, args)
|
|
31
|
+
self.tool = tool
|
|
32
|
+
|
|
33
|
+
def resolve(self) -> ToolResult:
|
|
34
|
+
"""
|
|
35
|
+
Read conversation message IDs configuration.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
ToolResult with configuration details or information about no configuration
|
|
39
|
+
"""
|
|
40
|
+
try:
|
|
41
|
+
# Get current conversation ID
|
|
42
|
+
conversation_id = self.agent.conversation_config.conversation_id
|
|
43
|
+
|
|
44
|
+
if not conversation_id:
|
|
45
|
+
return ToolResult(
|
|
46
|
+
success=False,
|
|
47
|
+
message="无法获取当前会话ID",
|
|
48
|
+
content={
|
|
49
|
+
"error_type": "no_conversation_id",
|
|
50
|
+
"has_message_ids_config": False,
|
|
51
|
+
"message": "当前没有活跃的会话,无法读取消息ID配置"
|
|
52
|
+
}
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
# Get message IDs API
|
|
56
|
+
message_ids_api = get_conversation_message_ids_api(
|
|
57
|
+
storage_dir=self.args.range_storage_dir if hasattr(self.args, 'range_storage_dir') else None
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Get message IDs configuration for current conversation
|
|
61
|
+
message_ids_obj = message_ids_api.get_conversation_message_ids(conversation_id)
|
|
62
|
+
|
|
63
|
+
if message_ids_obj:
|
|
64
|
+
# Get detailed statistics
|
|
65
|
+
stats = message_ids_api.get_message_ids_statistics(conversation_id)
|
|
66
|
+
|
|
67
|
+
# Get message details with content preview
|
|
68
|
+
message_details = self._get_message_details_with_content(conversation_id, message_ids_obj.message_ids)
|
|
69
|
+
|
|
70
|
+
return ToolResult(
|
|
71
|
+
success=True,
|
|
72
|
+
message=f"找到会话 {conversation_id} 的消息ID配置",
|
|
73
|
+
content={
|
|
74
|
+
"conversation_id": conversation_id,
|
|
75
|
+
"has_message_ids_config": True,
|
|
76
|
+
"message_ids": message_details,
|
|
77
|
+
"description": message_ids_obj.description,
|
|
78
|
+
"preserve_pairs": message_ids_obj.preserve_pairs,
|
|
79
|
+
"created_at": message_ids_obj.created_at,
|
|
80
|
+
"updated_at": message_ids_obj.updated_at,
|
|
81
|
+
"statistics": stats,
|
|
82
|
+
"summary": f"当前配置了 {len(message_ids_obj.message_ids)} 个消息ID用于删除。配对保护: {'启用' if message_ids_obj.preserve_pairs else '禁用'}。"
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
else:
|
|
86
|
+
# No configuration found
|
|
87
|
+
# List all available configurations for reference
|
|
88
|
+
all_configs = message_ids_api.list_all_message_ids()
|
|
89
|
+
available_conversation_ids = [config.conversation_id for config in all_configs]
|
|
90
|
+
|
|
91
|
+
return ToolResult(
|
|
92
|
+
success=True,
|
|
93
|
+
message=f"会话 {conversation_id} 没有消息ID配置",
|
|
94
|
+
content={
|
|
95
|
+
"conversation_id": conversation_id,
|
|
96
|
+
"has_message_ids_config": False,
|
|
97
|
+
"message_ids": [],
|
|
98
|
+
"description": "",
|
|
99
|
+
"preserve_pairs": True,
|
|
100
|
+
"available_configurations": len(all_configs),
|
|
101
|
+
"available_conversation_ids": available_conversation_ids[:10], # 限制显示前10个
|
|
102
|
+
"summary": "当前会话没有配置删除消息ID。如需配置,请使用 conversation_message_ids_write 工具。"
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
except Exception as e:
|
|
107
|
+
error_msg = f"读取会话消息ID配置时发生异常: {str(e)}"
|
|
108
|
+
logger.error(error_msg)
|
|
109
|
+
return ToolResult(
|
|
110
|
+
success=False,
|
|
111
|
+
message=error_msg,
|
|
112
|
+
content={
|
|
113
|
+
"error_type": "exception",
|
|
114
|
+
"has_message_ids_config": False,
|
|
115
|
+
"error_message": str(e),
|
|
116
|
+
"conversation_id": getattr(self, '_conversation_id', 'unknown')
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def _get_message_details_with_content(self, conversation_id: str, message_ids: list) -> list:
|
|
121
|
+
"""
|
|
122
|
+
获取消息ID对应的详细信息,包含消息内容前100个字符,按原始顺序排列
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
conversation_id: 会话ID
|
|
126
|
+
message_ids: 消息ID列表
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
包含消息详情的列表,每个元素包含id和content_preview字段
|
|
130
|
+
"""
|
|
131
|
+
try:
|
|
132
|
+
# 获取会话管理器
|
|
133
|
+
from autocoder.common.conversations.get_conversation_manager import get_conversation_manager
|
|
134
|
+
conversation_manager = get_conversation_manager()
|
|
135
|
+
|
|
136
|
+
# 获取会话中的所有消息
|
|
137
|
+
all_messages = conversation_manager.get_messages(conversation_id)
|
|
138
|
+
|
|
139
|
+
# 创建消息ID到消息的映射,保持原始顺序
|
|
140
|
+
message_map = {}
|
|
141
|
+
for msg in all_messages:
|
|
142
|
+
msg_id = msg.get('message_id', '')
|
|
143
|
+
if msg_id:
|
|
144
|
+
# 截取前8个字符用于匹配
|
|
145
|
+
short_id = msg_id[:8]
|
|
146
|
+
message_map[short_id] = {
|
|
147
|
+
'full_id': msg_id,
|
|
148
|
+
'content': msg.get('content', ''),
|
|
149
|
+
'role': msg.get('role', ''),
|
|
150
|
+
'timestamp': msg.get('timestamp', 0),
|
|
151
|
+
'index': len(message_map) # 保存原始顺序索引
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
# 构建结果列表,保持配置中的顺序,但按conversation中的原始顺序排序
|
|
155
|
+
message_details = []
|
|
156
|
+
matched_messages = []
|
|
157
|
+
|
|
158
|
+
for config_id in message_ids:
|
|
159
|
+
if config_id in message_map:
|
|
160
|
+
msg_info = message_map[config_id]
|
|
161
|
+
matched_messages.append({
|
|
162
|
+
'config_id': config_id,
|
|
163
|
+
'msg_info': msg_info,
|
|
164
|
+
'original_index': msg_info['index']
|
|
165
|
+
})
|
|
166
|
+
else:
|
|
167
|
+
# 如果消息ID不存在,仍然显示但标记为未找到
|
|
168
|
+
message_details.append({
|
|
169
|
+
'id': config_id,
|
|
170
|
+
'content_preview': '[消息未找到]',
|
|
171
|
+
'role': 'unknown',
|
|
172
|
+
'status': 'not_found'
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
# 按原始顺序排序匹配到的消息
|
|
176
|
+
matched_messages.sort(key=lambda x: x['original_index'])
|
|
177
|
+
|
|
178
|
+
# 构建最终结果
|
|
179
|
+
for match in matched_messages:
|
|
180
|
+
config_id = match['config_id']
|
|
181
|
+
msg_info = match['msg_info']
|
|
182
|
+
content = msg_info['content']
|
|
183
|
+
|
|
184
|
+
# 处理不同类型的content
|
|
185
|
+
if isinstance(content, str):
|
|
186
|
+
content_preview = content[:100]
|
|
187
|
+
elif isinstance(content, (dict, list)):
|
|
188
|
+
# 将复杂对象转换为字符串再截取
|
|
189
|
+
import json
|
|
190
|
+
try:
|
|
191
|
+
content_str = json.dumps(content, ensure_ascii=False)
|
|
192
|
+
content_preview = content_str[:100]
|
|
193
|
+
except:
|
|
194
|
+
content_preview = str(content)[:100]
|
|
195
|
+
else:
|
|
196
|
+
content_preview = str(content)[:100]
|
|
197
|
+
|
|
198
|
+
# 如果内容被截断,添加省略号
|
|
199
|
+
if len(str(content)) > 100:
|
|
200
|
+
content_preview += "..."
|
|
201
|
+
|
|
202
|
+
message_details.append({
|
|
203
|
+
'id': config_id,
|
|
204
|
+
'content_preview': content_preview,
|
|
205
|
+
'role': msg_info['role'],
|
|
206
|
+
'status': 'found'
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
return message_details
|
|
210
|
+
|
|
211
|
+
except Exception as e:
|
|
212
|
+
logger.error(f"获取消息详情时发生错误: {str(e)}")
|
|
213
|
+
# 如果出错,返回基本的ID列表
|
|
214
|
+
return [{'id': msg_id, 'content_preview': '[获取内容失败]', 'role': 'unknown', 'status': 'error'} for msg_id in message_ids]
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Conversation Message IDs Write Tool Resolver
|
|
3
|
+
|
|
4
|
+
This resolver handles writing conversation message IDs configurations for pruning.
|
|
5
|
+
It integrates with the pruner module to store message ID specifications along with
|
|
6
|
+
the current conversation ID, supporting create, append, and delete actions.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
from typing import Optional
|
|
11
|
+
from autocoder.common.v2.agent.agentic_edit_tools.base_tool_resolver import BaseToolResolver
|
|
12
|
+
from autocoder.common.v2.agent.agentic_edit_types import ConversationMessageIdsWriteTool, ToolResult
|
|
13
|
+
from autocoder.common import AutoCoderArgs
|
|
14
|
+
from autocoder.common.pruner import get_conversation_message_ids_api,ConversationMessageIdsAPI
|
|
15
|
+
from autocoder.common.international import get_message
|
|
16
|
+
from loguru import logger
|
|
17
|
+
import typing
|
|
18
|
+
|
|
19
|
+
from autocoder.rag.lang import get_message_with_format
|
|
20
|
+
|
|
21
|
+
if typing.TYPE_CHECKING:
|
|
22
|
+
from autocoder.common.v2.agent.agentic_edit import AgenticEdit
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ConversationMessageIdsWriteToolResolver(BaseToolResolver):
|
|
26
|
+
"""
|
|
27
|
+
Resolver for the ConversationMessageIdsWriteTool.
|
|
28
|
+
|
|
29
|
+
This resolver handles writing conversation message IDs configurations that specify
|
|
30
|
+
which messages should be deleted during conversation pruning.
|
|
31
|
+
Supports create, append, and delete actions.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(self, agent: 'AgenticEdit', tool: ConversationMessageIdsWriteTool, args: AutoCoderArgs):
|
|
35
|
+
super().__init__(agent, tool, args)
|
|
36
|
+
self.tool = tool
|
|
37
|
+
|
|
38
|
+
def resolve(self) -> ToolResult:
|
|
39
|
+
"""
|
|
40
|
+
Write conversation message IDs configuration.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
ToolResult with success status and configuration details
|
|
44
|
+
"""
|
|
45
|
+
try:
|
|
46
|
+
# Validate action parameter
|
|
47
|
+
valid_actions = ["create", "append", "delete"]
|
|
48
|
+
if self.tool.action not in valid_actions:
|
|
49
|
+
return ToolResult(
|
|
50
|
+
success=False,
|
|
51
|
+
message=get_message_with_format("conversation_message_ids_invalid_action", action=self.tool.action),
|
|
52
|
+
content={
|
|
53
|
+
"error_type": "invalid_action",
|
|
54
|
+
"valid_actions": valid_actions,
|
|
55
|
+
"provided_action": self.tool.action
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Get current conversation ID
|
|
60
|
+
conversation_id = self.agent.conversation_config.conversation_id
|
|
61
|
+
|
|
62
|
+
if not conversation_id:
|
|
63
|
+
return ToolResult(
|
|
64
|
+
success=False,
|
|
65
|
+
message=get_message("conversation_message_ids_no_conversation"),
|
|
66
|
+
content={
|
|
67
|
+
"error_type": "no_conversation_id",
|
|
68
|
+
"message": get_message("conversation_message_ids_no_conversation")
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# Get message IDs API
|
|
73
|
+
message_ids_api = get_conversation_message_ids_api(
|
|
74
|
+
storage_dir=self.args.range_storage_dir if hasattr(self.args, 'range_storage_dir') else None
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# Handle different actions
|
|
78
|
+
if self.tool.action == "create":
|
|
79
|
+
return self._handle_create_action(message_ids_api, conversation_id)
|
|
80
|
+
elif self.tool.action == "append":
|
|
81
|
+
return self._handle_append_action(message_ids_api, conversation_id)
|
|
82
|
+
elif self.tool.action == "delete":
|
|
83
|
+
return self._handle_delete_action(message_ids_api, conversation_id)
|
|
84
|
+
else:
|
|
85
|
+
return ToolResult(
|
|
86
|
+
success=False,
|
|
87
|
+
message=get_message_with_format("conversation_message_ids_invalid_action", action=self.tool.action),
|
|
88
|
+
content={
|
|
89
|
+
"error_type": "unimplemented_action",
|
|
90
|
+
"action": self.tool.action
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
except Exception as e:
|
|
95
|
+
error_msg = get_message_with_format("conversation_message_ids_operation_exception", error=str(e))
|
|
96
|
+
logger.error(error_msg)
|
|
97
|
+
return ToolResult(
|
|
98
|
+
success=False,
|
|
99
|
+
message=error_msg,
|
|
100
|
+
content={
|
|
101
|
+
"error_type": "exception",
|
|
102
|
+
"error_message": str(e),
|
|
103
|
+
"tool_parameters": {
|
|
104
|
+
"message_ids": self.tool.message_ids,
|
|
105
|
+
"action": self.tool.action
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
def _handle_create_action(self, message_ids_api, conversation_id: str) -> ToolResult:
|
|
111
|
+
"""Handle create action - create new configuration, replacing any existing one"""
|
|
112
|
+
# Save message IDs configuration with default preserve_pairs=True
|
|
113
|
+
success, error_msg, message_ids_obj = message_ids_api.save_conversation_message_ids(
|
|
114
|
+
conversation_id=conversation_id,
|
|
115
|
+
message_ids=self.tool.message_ids,
|
|
116
|
+
description="Created via conversation_message_ids_write tool",
|
|
117
|
+
preserve_pairs=True
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
if success and message_ids_obj:
|
|
121
|
+
stats = message_ids_api.get_message_ids_statistics(conversation_id)
|
|
122
|
+
|
|
123
|
+
return ToolResult(
|
|
124
|
+
success=True,
|
|
125
|
+
message=get_message("conversation_message_ids_create_success"),
|
|
126
|
+
content={
|
|
127
|
+
"action": "create",
|
|
128
|
+
"conversation_id": conversation_id,
|
|
129
|
+
"message_ids": message_ids_obj.message_ids if message_ids_obj else [],
|
|
130
|
+
"description": message_ids_obj.description if message_ids_obj else "",
|
|
131
|
+
"preserve_pairs": message_ids_obj.preserve_pairs if message_ids_obj else True,
|
|
132
|
+
"statistics": stats,
|
|
133
|
+
"created_at": message_ids_obj.created_at if message_ids_obj else "",
|
|
134
|
+
"updated_at": message_ids_obj.updated_at if message_ids_obj else "",
|
|
135
|
+
"message": get_message("conversation_message_ids_create_success") + f",共{len(message_ids_obj.message_ids) if message_ids_obj else 0}个消息ID。"
|
|
136
|
+
}
|
|
137
|
+
)
|
|
138
|
+
else:
|
|
139
|
+
logger.error(f"Failed to create conversation message IDs: {error_msg}")
|
|
140
|
+
return ToolResult(
|
|
141
|
+
success=False,
|
|
142
|
+
message=get_message_with_format("conversation_message_ids_create_failed", error=error_msg),
|
|
143
|
+
content={
|
|
144
|
+
"error_type": "create_failed",
|
|
145
|
+
"error_message": error_msg,
|
|
146
|
+
"conversation_id": conversation_id,
|
|
147
|
+
"message_ids": self.tool.message_ids
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
def _handle_append_action(self, message_ids_api:ConversationMessageIdsAPI, conversation_id: str) -> ToolResult:
|
|
152
|
+
"""Handle append action - add to existing configuration"""
|
|
153
|
+
# First, try to get existing configuration
|
|
154
|
+
existing_config = message_ids_api.get_conversation_message_ids(conversation_id)
|
|
155
|
+
|
|
156
|
+
if existing_config:
|
|
157
|
+
# Parse existing message IDs
|
|
158
|
+
existing_ids = set(existing_config.message_ids)
|
|
159
|
+
# Parse new message IDs
|
|
160
|
+
new_ids = set([id.strip() for id in self.tool.message_ids.split(",") if id.strip()])
|
|
161
|
+
# Combine them
|
|
162
|
+
combined_ids = existing_ids.union(new_ids)
|
|
163
|
+
combined_ids_str = ",".join(sorted(combined_ids))
|
|
164
|
+
|
|
165
|
+
# Save updated configuration
|
|
166
|
+
success, error_msg, message_ids_obj = message_ids_api.save_conversation_message_ids(
|
|
167
|
+
conversation_id=conversation_id,
|
|
168
|
+
message_ids=combined_ids_str,
|
|
169
|
+
description=existing_config.description + " | Appended via tool",
|
|
170
|
+
preserve_pairs=existing_config.preserve_pairs
|
|
171
|
+
)
|
|
172
|
+
else:
|
|
173
|
+
# No existing configuration, create new one
|
|
174
|
+
success, error_msg, message_ids_obj = message_ids_api.save_conversation_message_ids(
|
|
175
|
+
conversation_id=conversation_id,
|
|
176
|
+
message_ids=self.tool.message_ids,
|
|
177
|
+
description="Created via conversation_message_ids_write tool (append)",
|
|
178
|
+
preserve_pairs=True
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
if success and message_ids_obj:
|
|
182
|
+
stats = message_ids_api.get_message_ids_statistics(conversation_id)
|
|
183
|
+
|
|
184
|
+
return ToolResult(
|
|
185
|
+
success=True,
|
|
186
|
+
message=get_message("conversation_message_ids_append_success"),
|
|
187
|
+
content={
|
|
188
|
+
"action": "append",
|
|
189
|
+
"conversation_id": conversation_id,
|
|
190
|
+
"message_ids": message_ids_obj.message_ids if message_ids_obj else [],
|
|
191
|
+
"description": message_ids_obj.description if message_ids_obj else "",
|
|
192
|
+
"preserve_pairs": message_ids_obj.preserve_pairs if message_ids_obj else True,
|
|
193
|
+
"statistics": stats,
|
|
194
|
+
"created_at": message_ids_obj.created_at if message_ids_obj else "",
|
|
195
|
+
"updated_at": message_ids_obj.updated_at if message_ids_obj else "",
|
|
196
|
+
"message": get_message("conversation_message_ids_append_success") + f",共{len(message_ids_obj.message_ids) if message_ids_obj else 0}个消息ID。"
|
|
197
|
+
}
|
|
198
|
+
)
|
|
199
|
+
else:
|
|
200
|
+
logger.error(f"Failed to append conversation message IDs: {error_msg}")
|
|
201
|
+
return ToolResult(
|
|
202
|
+
success=False,
|
|
203
|
+
message=get_message_with_format("conversation_message_ids_append_failed", error=error_msg),
|
|
204
|
+
content={
|
|
205
|
+
"error_type": "append_failed",
|
|
206
|
+
"error_message": error_msg,
|
|
207
|
+
"conversation_id": conversation_id,
|
|
208
|
+
"message_ids": self.tool.message_ids
|
|
209
|
+
}
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
def _handle_delete_action(self, message_ids_api, conversation_id: str) -> ToolResult:
|
|
213
|
+
"""Handle delete action - remove from existing configuration"""
|
|
214
|
+
# First, try to get existing configuration
|
|
215
|
+
existing_config = message_ids_api.get_conversation_message_ids(conversation_id)
|
|
216
|
+
|
|
217
|
+
if not existing_config:
|
|
218
|
+
return ToolResult(
|
|
219
|
+
success=False,
|
|
220
|
+
message=get_message("conversation_message_ids_no_existing_config"),
|
|
221
|
+
content={
|
|
222
|
+
"error_type": "no_existing_config",
|
|
223
|
+
"conversation_id": conversation_id,
|
|
224
|
+
"message": get_message("conversation_message_ids_no_existing_config")
|
|
225
|
+
}
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
# Parse existing message IDs
|
|
229
|
+
existing_ids = set(existing_config.message_ids)
|
|
230
|
+
# Parse IDs to delete
|
|
231
|
+
ids_to_delete = set([id.strip() for id in self.tool.message_ids.split(",") if id.strip()])
|
|
232
|
+
# Remove them
|
|
233
|
+
remaining_ids = existing_ids - ids_to_delete
|
|
234
|
+
|
|
235
|
+
if not remaining_ids:
|
|
236
|
+
# Delete the entire configuration if no IDs remain
|
|
237
|
+
success, error_msg = message_ids_api.delete_conversation_message_ids(conversation_id)
|
|
238
|
+
if success:
|
|
239
|
+
return ToolResult(
|
|
240
|
+
success=True,
|
|
241
|
+
message=get_message("conversation_message_ids_delete_success"),
|
|
242
|
+
content={
|
|
243
|
+
"action": "delete",
|
|
244
|
+
"conversation_id": conversation_id,
|
|
245
|
+
"deleted_ids": list(ids_to_delete),
|
|
246
|
+
"remaining_ids": [],
|
|
247
|
+
"message": get_message("conversation_message_ids_delete_success")
|
|
248
|
+
}
|
|
249
|
+
)
|
|
250
|
+
else:
|
|
251
|
+
return ToolResult(
|
|
252
|
+
success=False,
|
|
253
|
+
message=get_message_with_format("conversation_message_ids_delete_failed", error=error_msg),
|
|
254
|
+
content={
|
|
255
|
+
"error_type": "delete_failed",
|
|
256
|
+
"error_message": error_msg
|
|
257
|
+
}
|
|
258
|
+
)
|
|
259
|
+
else:
|
|
260
|
+
# Update configuration with remaining IDs
|
|
261
|
+
remaining_ids_str = ",".join(sorted(remaining_ids))
|
|
262
|
+
success, error_msg, message_ids_obj = message_ids_api.save_conversation_message_ids(
|
|
263
|
+
conversation_id=conversation_id,
|
|
264
|
+
message_ids=remaining_ids_str,
|
|
265
|
+
description=existing_config.description + " | Deleted IDs via tool",
|
|
266
|
+
preserve_pairs=existing_config.preserve_pairs
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
if success and message_ids_obj:
|
|
270
|
+
stats = message_ids_api.get_message_ids_statistics(conversation_id)
|
|
271
|
+
|
|
272
|
+
return ToolResult(
|
|
273
|
+
success=True,
|
|
274
|
+
message=get_message("conversation_message_ids_update_success"),
|
|
275
|
+
content={
|
|
276
|
+
"action": "delete",
|
|
277
|
+
"conversation_id": conversation_id,
|
|
278
|
+
"deleted_ids": list(ids_to_delete),
|
|
279
|
+
"remaining_ids": message_ids_obj.message_ids if message_ids_obj else [],
|
|
280
|
+
"description": message_ids_obj.description if message_ids_obj else "",
|
|
281
|
+
"preserve_pairs": message_ids_obj.preserve_pairs if message_ids_obj else True,
|
|
282
|
+
"statistics": stats,
|
|
283
|
+
"created_at": message_ids_obj.created_at if message_ids_obj else "",
|
|
284
|
+
"updated_at": message_ids_obj.updated_at if message_ids_obj else "",
|
|
285
|
+
"message": get_message("conversation_message_ids_update_success") + f",剩余{len(message_ids_obj.message_ids) if message_ids_obj else 0}个消息ID。"
|
|
286
|
+
}
|
|
287
|
+
)
|
|
288
|
+
else:
|
|
289
|
+
logger.error(f"Failed to update conversation message IDs after delete: {error_msg}")
|
|
290
|
+
return ToolResult(
|
|
291
|
+
success=False,
|
|
292
|
+
message=get_message_with_format("conversation_message_ids_update_failed", error=error_msg),
|
|
293
|
+
content={
|
|
294
|
+
"error_type": "update_after_delete_failed",
|
|
295
|
+
"error_message": error_msg,
|
|
296
|
+
"conversation_id": conversation_id,
|
|
297
|
+
"message_ids": self.tool.message_ids
|
|
298
|
+
}
|
|
299
|
+
)
|