auto-coder 0.1.400__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.0.dist-info/LICENSE +158 -0
- auto_coder-2.0.0.dist-info/METADATA +558 -0
- auto_coder-2.0.0.dist-info/RECORD +795 -0
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +25 -4
- autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
- autocoder/agent/base_agentic/types.py +42 -0
- autocoder/agent/entry_command_agent/chat.py +73 -59
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +1029 -2310
- autocoder/auto_coder_terminal.py +26 -0
- autocoder/auto_coder_terminal_v3.py +190 -0
- autocoder/chat/conf_command.py +224 -124
- autocoder/chat/models_command.py +361 -299
- autocoder/chat/rules_command.py +79 -31
- autocoder/chat_auto_coder.py +1021 -372
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +26 -9
- autocoder/commands/auto_web.py +1 -1
- autocoder/commands/tools.py +44 -44
- autocoder/common/__init__.py +150 -128
- autocoder/common/ac_style_command_parser/__init__.py +39 -2
- autocoder/common/ac_style_command_parser/config.py +422 -0
- autocoder/common/ac_style_command_parser/parser.py +292 -78
- autocoder/common/ac_style_command_parser/test_parser.py +241 -16
- autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
- autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
- autocoder/common/action_yml_file_manager.py +25 -13
- autocoder/common/agent_events/__init__.py +52 -0
- autocoder/common/agent_events/agent_event_emitter.py +193 -0
- autocoder/common/agent_events/event_factory.py +177 -0
- autocoder/common/agent_events/examples.py +307 -0
- autocoder/common/agent_events/types.py +113 -0
- autocoder/common/agent_events/utils.py +68 -0
- autocoder/common/agent_hooks/__init__.py +44 -0
- autocoder/common/agent_hooks/examples.py +582 -0
- autocoder/common/agent_hooks/hook_executor.py +217 -0
- autocoder/common/agent_hooks/hook_manager.py +288 -0
- autocoder/common/agent_hooks/types.py +133 -0
- autocoder/common/agent_hooks/utils.py +99 -0
- autocoder/common/agent_query_queue/queue_executor.py +324 -0
- autocoder/common/agent_query_queue/queue_manager.py +325 -0
- autocoder/common/agents/__init__.py +11 -0
- autocoder/common/agents/agent_manager.py +323 -0
- autocoder/common/agents/agent_parser.py +189 -0
- autocoder/common/agents/example_usage.py +344 -0
- autocoder/common/agents/integration_example.py +330 -0
- autocoder/common/agents/test_agent_parser.py +545 -0
- autocoder/common/async_utils.py +101 -0
- autocoder/common/auto_coder_lang.py +23 -972
- autocoder/common/autocoderargs_parser/__init__.py +14 -0
- autocoder/common/autocoderargs_parser/parser.py +184 -0
- autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
- autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
- autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
- autocoder/common/autocoderargs_parser/token_parser.py +290 -0
- autocoder/common/buildin_tokenizer.py +2 -4
- autocoder/common/code_auto_generate.py +149 -74
- autocoder/common/code_auto_generate_diff.py +163 -70
- autocoder/common/code_auto_generate_editblock.py +179 -89
- autocoder/common/code_auto_generate_strict_diff.py +167 -72
- autocoder/common/code_auto_merge_editblock.py +13 -6
- autocoder/common/code_modification_ranker.py +1 -1
- autocoder/common/command_completer.py +3 -3
- autocoder/common/command_file_manager/manager.py +183 -47
- autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
- autocoder/common/command_templates.py +1 -1
- autocoder/common/conf_utils.py +2 -4
- autocoder/common/conversations/config.py +11 -3
- autocoder/common/conversations/get_conversation_manager.py +100 -2
- autocoder/common/conversations/llm_stats_models.py +264 -0
- autocoder/common/conversations/manager.py +112 -28
- autocoder/common/conversations/models.py +16 -2
- autocoder/common/conversations/storage/index_manager.py +134 -10
- autocoder/common/core_config/__init__.py +63 -0
- autocoder/common/core_config/agentic_mode_manager.py +109 -0
- autocoder/common/core_config/base_manager.py +123 -0
- autocoder/common/core_config/compatibility.py +151 -0
- autocoder/common/core_config/config_manager.py +156 -0
- autocoder/common/core_config/conversation_manager.py +31 -0
- autocoder/common/core_config/exclude_manager.py +72 -0
- autocoder/common/core_config/file_manager.py +177 -0
- autocoder/common/core_config/human_as_model_manager.py +129 -0
- autocoder/common/core_config/lib_manager.py +54 -0
- autocoder/common/core_config/main_manager.py +81 -0
- autocoder/common/core_config/mode_manager.py +126 -0
- autocoder/common/core_config/models.py +70 -0
- autocoder/common/core_config/test_memory_manager.py +1056 -0
- autocoder/common/env_manager.py +282 -0
- autocoder/common/env_manager_usage_example.py +211 -0
- autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
- autocoder/common/file_checkpoint/manager.py +264 -48
- autocoder/common/file_checkpoint/test_backup.py +1 -18
- autocoder/common/file_checkpoint/test_manager.py +270 -1
- autocoder/common/file_checkpoint/test_store.py +1 -17
- autocoder/common/file_handler/__init__.py +23 -0
- autocoder/common/file_handler/active_context_handler.py +159 -0
- autocoder/common/file_handler/add_files_handler.py +409 -0
- autocoder/common/file_handler/chat_handler.py +180 -0
- autocoder/common/file_handler/coding_handler.py +401 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/file_monitor/test_file_monitor.py +307 -0
- autocoder/common/git_utils.py +51 -10
- autocoder/common/global_cancel.py +15 -6
- autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
- autocoder/common/international/__init__.py +31 -0
- autocoder/common/international/demo_international.py +92 -0
- autocoder/common/international/message_manager.py +157 -0
- autocoder/common/international/messages/__init__.py +56 -0
- autocoder/common/international/messages/async_command_messages.py +507 -0
- autocoder/common/international/messages/auto_coder_messages.py +2208 -0
- autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
- autocoder/common/international/messages/command_help_messages.py +986 -0
- autocoder/common/international/messages/conversation_command_messages.py +191 -0
- autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
- autocoder/common/international/messages/queue_command_messages.py +751 -0
- autocoder/common/international/messages/rules_command_messages.py +77 -0
- autocoder/common/international/messages/sdk_messages.py +1707 -0
- autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
- autocoder/common/international/messages/tool_display_messages.py +1212 -0
- autocoder/common/international/messages/workflow_exception_messages.py +473 -0
- autocoder/common/international/test_international.py +612 -0
- autocoder/common/linter_core/__init__.py +28 -0
- autocoder/common/linter_core/base_linter.py +61 -0
- autocoder/common/linter_core/config_loader.py +271 -0
- autocoder/common/linter_core/formatters/__init__.py +0 -0
- autocoder/common/linter_core/formatters/base_formatter.py +38 -0
- autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
- autocoder/common/linter_core/linter.py +166 -0
- autocoder/common/linter_core/linter_factory.py +216 -0
- autocoder/common/linter_core/linter_manager.py +333 -0
- autocoder/common/linter_core/linters/__init__.py +9 -0
- autocoder/common/linter_core/linters/java_linter.py +342 -0
- autocoder/common/linter_core/linters/python_linter.py +115 -0
- autocoder/common/linter_core/linters/typescript_linter.py +119 -0
- autocoder/common/linter_core/models/__init__.py +7 -0
- autocoder/common/linter_core/models/lint_result.py +91 -0
- autocoder/common/linter_core/models.py +33 -0
- autocoder/common/linter_core/tests/__init__.py +3 -0
- autocoder/common/linter_core/tests/test_config_loader.py +323 -0
- autocoder/common/linter_core/tests/test_config_loading.py +308 -0
- autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
- autocoder/common/linter_core/tests/test_formatters.py +147 -0
- autocoder/common/linter_core/tests/test_integration.py +317 -0
- autocoder/common/linter_core/tests/test_java_linter.py +496 -0
- autocoder/common/linter_core/tests/test_linters.py +265 -0
- autocoder/common/linter_core/tests/test_models.py +81 -0
- autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
- autocoder/common/linter_core/tests/verify_fixes.py +183 -0
- autocoder/common/llm_friendly_package/__init__.py +31 -0
- autocoder/common/llm_friendly_package/base_manager.py +102 -0
- autocoder/common/llm_friendly_package/docs_manager.py +121 -0
- autocoder/common/llm_friendly_package/library_manager.py +171 -0
- autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
- autocoder/common/llm_friendly_package/models.py +40 -0
- autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
- autocoder/common/llms/__init__.py +15 -0
- autocoder/common/llms/demo_error_handling.py +85 -0
- autocoder/common/llms/factory.py +142 -0
- autocoder/common/llms/manager.py +264 -0
- autocoder/common/llms/pricing.py +121 -0
- autocoder/common/llms/registry.py +288 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +746 -0
- autocoder/common/{context_pruner.py → pruner/context_pruner.py} +137 -40
- autocoder/common/pruner/conversation_message_ids_api.py +386 -0
- autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
- autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
- autocoder/common/pruner/conversation_normalizer.py +347 -0
- autocoder/common/{conversation_pruner.py → pruner/conversation_pruner.py} +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +784 -0
- autocoder/common/pruner/test_context_pruner.py +546 -0
- autocoder/common/pruner/test_conversation_normalizer.py +502 -0
- autocoder/common/pruner/test_tool_content_detector.py +324 -0
- autocoder/common/pruner/tool_content_detector.py +227 -0
- autocoder/common/pruner/tools/__init__.py +18 -0
- autocoder/common/pruner/tools/query_message_ids.py +264 -0
- autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
- autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
- autocoder/common/pull_requests/__init__.py +9 -1
- autocoder/common/pull_requests/utils.py +122 -1
- autocoder/common/rag_manager/rag_manager.py +36 -40
- autocoder/common/rulefiles/__init__.py +53 -1
- autocoder/common/rulefiles/api.py +250 -0
- autocoder/common/rulefiles/core/__init__.py +14 -0
- autocoder/common/rulefiles/core/manager.py +241 -0
- autocoder/common/rulefiles/core/selector.py +805 -0
- autocoder/common/rulefiles/models/__init__.py +20 -0
- autocoder/common/rulefiles/models/index.py +16 -0
- autocoder/common/rulefiles/models/init_rule.py +18 -0
- autocoder/common/rulefiles/models/rule_file.py +18 -0
- autocoder/common/rulefiles/models/rule_relevance.py +14 -0
- autocoder/common/rulefiles/models/summary.py +16 -0
- autocoder/common/rulefiles/test_rulefiles.py +776 -0
- autocoder/common/rulefiles/utils/__init__.py +34 -0
- autocoder/common/rulefiles/utils/monitor.py +86 -0
- autocoder/common/rulefiles/utils/parser.py +230 -0
- autocoder/common/save_formatted_log.py +67 -10
- autocoder/common/search_replace.py +8 -1
- autocoder/common/search_replace_patch/__init__.py +24 -0
- autocoder/common/search_replace_patch/base.py +115 -0
- autocoder/common/search_replace_patch/manager.py +248 -0
- autocoder/common/search_replace_patch/patch_replacer.py +304 -0
- autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
- autocoder/common/search_replace_patch/string_replacer.py +181 -0
- autocoder/common/search_replace_patch/tests/__init__.py +3 -0
- autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
- autocoder/common/search_replace_patch/tests/test_base.py +188 -0
- autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
- autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
- autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
- autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
- autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
- autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
- autocoder/common/shell_commands/__init__.py +197 -0
- autocoder/common/shell_commands/background_process_notifier.py +346 -0
- autocoder/common/shell_commands/command_executor.py +1127 -0
- autocoder/common/shell_commands/error_recovery.py +541 -0
- autocoder/common/shell_commands/exceptions.py +120 -0
- autocoder/common/shell_commands/interactive_executor.py +476 -0
- autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
- autocoder/common/shell_commands/interactive_process.py +744 -0
- autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
- autocoder/common/shell_commands/monitoring.py +529 -0
- autocoder/common/shell_commands/process_cleanup.py +386 -0
- autocoder/common/shell_commands/process_manager.py +606 -0
- autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
- autocoder/common/shell_commands/tests/__init__.py +6 -0
- autocoder/common/shell_commands/tests/conftest.py +118 -0
- autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
- autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
- autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
- autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
- autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
- autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
- autocoder/common/shell_commands/tests/test_integration.py +664 -0
- autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
- autocoder/common/shell_commands/tests/test_performance.py +632 -0
- autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
- autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
- autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
- autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
- autocoder/common/shell_commands/timeout_config.py +315 -0
- autocoder/common/shell_commands/timeout_manager.py +352 -0
- autocoder/common/terminal_paste/__init__.py +14 -0
- autocoder/common/terminal_paste/demo.py +145 -0
- autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
- autocoder/common/terminal_paste/paste_handler.py +200 -0
- autocoder/common/terminal_paste/paste_manager.py +118 -0
- autocoder/common/terminal_paste/tests/__init__.py +1 -0
- autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
- autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
- autocoder/common/terminal_paste/utils.py +163 -0
- autocoder/common/test_autocoder_args.py +232 -0
- autocoder/common/test_env_manager.py +173 -0
- autocoder/common/test_env_manager_integration.py +159 -0
- autocoder/common/text_similarity/__init__.py +9 -0
- autocoder/common/text_similarity/demo.py +216 -0
- autocoder/common/text_similarity/examples.py +266 -0
- autocoder/common/text_similarity/test_text_similarity.py +306 -0
- autocoder/common/text_similarity/text_similarity.py +194 -0
- autocoder/common/text_similarity/utils.py +125 -0
- autocoder/common/todos/__init__.py +61 -0
- autocoder/common/todos/cache/__init__.py +16 -0
- autocoder/common/todos/cache/base_cache.py +89 -0
- autocoder/common/todos/cache/cache_manager.py +228 -0
- autocoder/common/todos/cache/memory_cache.py +225 -0
- autocoder/common/todos/config.py +155 -0
- autocoder/common/todos/exceptions.py +35 -0
- autocoder/common/todos/get_todo_manager.py +161 -0
- autocoder/common/todos/manager.py +537 -0
- autocoder/common/todos/models.py +239 -0
- autocoder/common/todos/storage/__init__.py +14 -0
- autocoder/common/todos/storage/base_storage.py +76 -0
- autocoder/common/todos/storage/file_storage.py +278 -0
- autocoder/common/tokens/__init__.py +15 -0
- autocoder/common/tokens/counter.py +44 -2
- autocoder/common/tools_manager/__init__.py +17 -0
- autocoder/common/tools_manager/examples.py +162 -0
- autocoder/common/tools_manager/manager.py +385 -0
- autocoder/common/tools_manager/models.py +39 -0
- autocoder/common/tools_manager/test_tools_manager.py +303 -0
- autocoder/common/tools_manager/utils.py +191 -0
- autocoder/common/v2/agent/agentic_callbacks.py +270 -0
- autocoder/common/v2/agent/agentic_edit.py +2729 -2052
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +43 -2
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +52 -0
- autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
- autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
- autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
- autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +565 -30
- autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
- autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
- autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
- autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +244 -51
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
- autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +409 -140
- autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +209 -194
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +135 -0
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +328 -0
- autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
- autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
- autocoder/common/v2/agent/agentic_edit_types.py +386 -10
- autocoder/common/v2/agent/runner/__init__.py +31 -0
- autocoder/common/v2/agent/runner/base_runner.py +92 -0
- autocoder/common/v2/agent/runner/file_based_event_runner.py +217 -0
- autocoder/common/v2/agent/runner/sdk_runner.py +182 -0
- autocoder/common/v2/agent/runner/terminal_runner.py +396 -0
- autocoder/common/v2/agent/runner/tool_display.py +589 -0
- autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
- autocoder/common/v2/agent/test_agentic_edit.py +194 -0
- autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
- autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
- autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
- autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
- autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
- autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
- autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
- autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
- autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
- autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
- autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
- autocoder/common/v2/code_auto_generate.py +136 -78
- autocoder/common/v2/code_auto_generate_diff.py +135 -79
- autocoder/common/v2/code_auto_generate_editblock.py +174 -99
- autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
- autocoder/common/v2/code_auto_merge.py +1 -1
- autocoder/common/v2/code_auto_merge_editblock.py +13 -1
- autocoder/common/v2/code_diff_manager.py +3 -3
- autocoder/common/v2/code_editblock_manager.py +4 -14
- autocoder/common/v2/code_manager.py +1 -1
- autocoder/common/v2/code_strict_diff_manager.py +2 -2
- autocoder/common/wrap_llm_hint/__init__.py +10 -0
- autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
- autocoder/common/wrap_llm_hint/utils.py +432 -0
- autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
- autocoder/completer/__init__.py +8 -0
- autocoder/completer/command_completer_v2.py +1051 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +165 -7
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +117 -125
- autocoder/{agent → index/filter}/agentic_filter.py +323 -334
- autocoder/index/filter/normal_filter.py +5 -11
- autocoder/index/filter/quick_filter.py +1 -1
- autocoder/index/index.py +36 -9
- autocoder/index/tests/__init__.py +1 -0
- autocoder/index/tests/run_tests.py +195 -0
- autocoder/index/tests/test_entry.py +303 -0
- autocoder/index/tests/test_index_manager.py +314 -0
- autocoder/index/tests/test_module_integration.py +300 -0
- autocoder/index/tests/test_symbols_utils.py +183 -0
- autocoder/inner/__init__.py +4 -0
- autocoder/inner/agentic.py +932 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +156 -37
- autocoder/pyproject/__init__.py +32 -29
- autocoder/rag/agentic_rag.py +215 -75
- autocoder/rag/cache/simple_cache.py +1 -2
- autocoder/rag/loaders/image_loader.py +1 -1
- autocoder/rag/long_context_rag.py +42 -26
- autocoder/rag/qa_conversation_strategy.py +1 -1
- autocoder/rag/terminal/__init__.py +17 -0
- autocoder/rag/terminal/args.py +581 -0
- autocoder/rag/terminal/bootstrap.py +61 -0
- autocoder/rag/terminal/command_handlers.py +653 -0
- autocoder/rag/terminal/formatters/__init__.py +20 -0
- autocoder/rag/terminal/formatters/base.py +70 -0
- autocoder/rag/terminal/formatters/json_format.py +66 -0
- autocoder/rag/terminal/formatters/stream_json.py +95 -0
- autocoder/rag/terminal/formatters/text.py +28 -0
- autocoder/rag/terminal/init.py +120 -0
- autocoder/rag/terminal/utils.py +106 -0
- autocoder/rag/test_agentic_rag.py +389 -0
- autocoder/rag/test_doc_filter.py +3 -3
- autocoder/rag/test_long_context_rag.py +1 -1
- autocoder/rag/test_token_limiter.py +517 -10
- autocoder/rag/token_counter.py +3 -0
- autocoder/rag/token_limiter.py +19 -15
- autocoder/rag/tools/__init__.py +26 -2
- autocoder/rag/tools/bochaai_example.py +343 -0
- autocoder/rag/tools/bochaai_sdk.py +541 -0
- autocoder/rag/tools/metaso_example.py +268 -0
- autocoder/rag/tools/metaso_sdk.py +417 -0
- autocoder/rag/tools/recall_tool.py +28 -7
- autocoder/rag/tools/run_integration_tests.py +204 -0
- autocoder/rag/tools/test_all_providers.py +318 -0
- autocoder/rag/tools/test_bochaai_integration.py +482 -0
- autocoder/rag/tools/test_final_integration.py +215 -0
- autocoder/rag/tools/test_metaso_integration.py +424 -0
- autocoder/rag/tools/test_metaso_real.py +171 -0
- autocoder/rag/tools/test_web_crawl_tool.py +639 -0
- autocoder/rag/tools/test_web_search_tool.py +509 -0
- autocoder/rag/tools/todo_read_tool.py +202 -0
- autocoder/rag/tools/todo_write_tool.py +412 -0
- autocoder/rag/tools/web_crawl_tool.py +634 -0
- autocoder/rag/tools/web_search_tool.py +558 -0
- autocoder/rag/tools/web_tools_example.py +119 -0
- autocoder/rag/types.py +16 -0
- autocoder/rag/variable_holder.py +4 -2
- autocoder/rags.py +86 -79
- autocoder/regexproject/__init__.py +23 -21
- autocoder/run_context.py +9 -0
- autocoder/sdk/__init__.py +50 -161
- autocoder/sdk/api.py +370 -0
- autocoder/sdk/async_runner/__init__.py +26 -0
- autocoder/sdk/async_runner/async_executor.py +650 -0
- autocoder/sdk/async_runner/async_handler.py +356 -0
- autocoder/sdk/async_runner/markdown_processor.py +595 -0
- autocoder/sdk/async_runner/task_metadata.py +284 -0
- autocoder/sdk/async_runner/worktree_manager.py +438 -0
- autocoder/sdk/cli/__init__.py +2 -5
- autocoder/sdk/cli/formatters.py +28 -204
- autocoder/sdk/cli/handlers.py +77 -44
- autocoder/sdk/cli/main.py +158 -170
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -267
- autocoder/sdk/core/bridge.py +298 -118
- autocoder/sdk/exceptions.py +18 -12
- autocoder/sdk/formatters/__init__.py +19 -0
- autocoder/sdk/formatters/input.py +64 -0
- autocoder/sdk/formatters/output.py +247 -0
- autocoder/sdk/formatters/stream.py +54 -0
- autocoder/sdk/models/__init__.py +6 -5
- autocoder/sdk/models/options.py +55 -18
- autocoder/sdk/utils/formatters.py +27 -195
- autocoder/suffixproject/__init__.py +28 -25
- autocoder/terminal/__init__.py +14 -0
- autocoder/terminal/app.py +454 -0
- autocoder/terminal/args.py +32 -0
- autocoder/terminal/bootstrap.py +178 -0
- autocoder/terminal/command_processor.py +521 -0
- autocoder/terminal/command_registry.py +57 -0
- autocoder/terminal/help.py +97 -0
- autocoder/terminal/tasks/__init__.py +5 -0
- autocoder/terminal/tasks/background.py +77 -0
- autocoder/terminal/tasks/task_event.py +70 -0
- autocoder/terminal/ui/__init__.py +13 -0
- autocoder/terminal/ui/completer.py +268 -0
- autocoder/terminal/ui/keybindings.py +75 -0
- autocoder/terminal/ui/session.py +41 -0
- autocoder/terminal/ui/toolbar.py +64 -0
- autocoder/terminal/utils/__init__.py +13 -0
- autocoder/terminal/utils/errors.py +18 -0
- autocoder/terminal/utils/paths.py +19 -0
- autocoder/terminal/utils/shell.py +43 -0
- autocoder/terminal_v3/__init__.py +10 -0
- autocoder/terminal_v3/app.py +201 -0
- autocoder/terminal_v3/handlers/__init__.py +5 -0
- autocoder/terminal_v3/handlers/command_handler.py +131 -0
- autocoder/terminal_v3/models/__init__.py +6 -0
- autocoder/terminal_v3/models/conversation_buffer.py +214 -0
- autocoder/terminal_v3/models/message.py +50 -0
- autocoder/terminal_v3/models/tool_display.py +247 -0
- autocoder/terminal_v3/ui/__init__.py +7 -0
- autocoder/terminal_v3/ui/keybindings.py +56 -0
- autocoder/terminal_v3/ui/layout.py +141 -0
- autocoder/terminal_v3/ui/styles.py +43 -0
- autocoder/tsproject/__init__.py +23 -23
- autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
- autocoder/utils/llms.py +88 -80
- autocoder/utils/math_utils.py +101 -0
- autocoder/utils/model_provider_selector.py +16 -4
- autocoder/utils/operate_config_api.py +33 -5
- autocoder/utils/thread_utils.py +2 -2
- autocoder/version.py +4 -2
- autocoder/workflow_agents/__init__.py +84 -0
- autocoder/workflow_agents/agent.py +143 -0
- autocoder/workflow_agents/exceptions.py +573 -0
- autocoder/workflow_agents/executor.py +489 -0
- autocoder/workflow_agents/loader.py +737 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +172 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-0.1.400.dist-info/METADATA +0 -396
- auto_coder-0.1.400.dist-info/RECORD +0 -425
- auto_coder-0.1.400.dist-info/licenses/LICENSE +0 -201
- autocoder/auto_coder_server.py +0 -672
- autocoder/benchmark.py +0 -138
- autocoder/common/ac_style_command_parser/example.py +0 -7
- autocoder/common/cleaner.py +0 -31
- autocoder/common/command_completer_v2.py +0 -615
- autocoder/common/directory_cache/__init__.py +0 -1
- autocoder/common/directory_cache/cache.py +0 -192
- autocoder/common/directory_cache/test_cache.py +0 -190
- autocoder/common/file_checkpoint/examples.py +0 -217
- autocoder/common/llm_friendly_package_example.py +0 -138
- autocoder/common/llm_friendly_package_test.py +0 -63
- autocoder/common/pull_requests/test_module.py +0 -1
- autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
- autocoder/common/text.py +0 -30
- autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
- autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
- autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
- autocoder/common/v2/agent/agentic_tool_display.py +0 -183
- autocoder/plugins/dynamic_completion_example.py +0 -148
- autocoder/plugins/sample_plugin.py +0 -160
- autocoder/sdk/cli/__main__.py +0 -26
- autocoder/sdk/cli/completion_wrapper.py +0 -38
- autocoder/sdk/cli/install_completion.py +0 -301
- autocoder/sdk/models/messages.py +0 -209
- autocoder/sdk/session/__init__.py +0 -32
- autocoder/sdk/session/session.py +0 -106
- autocoder/sdk/session/session_manager.py +0 -56
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -1,113 +1,465 @@
|
|
|
1
1
|
from pydantic import BaseModel
|
|
2
|
-
from typing import List, Dict, Any, Callable, Optional, Type
|
|
2
|
+
from typing import List, Dict, Any, Callable, Optional, Type, Union
|
|
3
3
|
from pydantic import SkipValidation
|
|
4
|
+
from enum import Enum
|
|
5
|
+
|
|
6
|
+
# Import for Pull Request support and Git operations
|
|
7
|
+
try:
|
|
8
|
+
from autocoder.common.pull_requests.models import PRResult, PlatformType
|
|
9
|
+
except ImportError:
|
|
10
|
+
# Fallback if pull_requests module is not available
|
|
11
|
+
PRResult = None
|
|
12
|
+
PlatformType = None
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
from autocoder.common.git_utils import CommitResult
|
|
16
|
+
except ImportError:
|
|
17
|
+
# Fallback if git_utils is not available
|
|
18
|
+
CommitResult = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ConversationAction(str, Enum):
|
|
22
|
+
"""Enumeration for conversation actions"""
|
|
23
|
+
|
|
24
|
+
RESUME = "resume"
|
|
25
|
+
NEW = "new"
|
|
26
|
+
CONTINUE = "continue"
|
|
27
|
+
LIST = "list"
|
|
28
|
+
COMMAND = "command"
|
|
29
|
+
|
|
4
30
|
|
|
5
31
|
# Result class used by Tool Resolvers
|
|
6
32
|
class ToolResult(BaseModel):
|
|
7
33
|
success: bool
|
|
8
34
|
message: str
|
|
9
|
-
content: Any = None
|
|
35
|
+
content: Any = None # Can store file content, command output, etc.
|
|
36
|
+
|
|
10
37
|
|
|
11
38
|
# Pydantic Models for Tools
|
|
12
39
|
class BaseTool(BaseModel):
|
|
13
40
|
pass
|
|
14
41
|
|
|
42
|
+
|
|
15
43
|
class ExecuteCommandTool(BaseTool):
|
|
16
44
|
command: str
|
|
17
45
|
requires_approval: bool
|
|
46
|
+
timeout: Optional[int] = 60 # 超时时间(秒),默认60秒
|
|
47
|
+
background: Optional[bool] = False # 是否后台运行,默认为False
|
|
48
|
+
|
|
18
49
|
|
|
19
50
|
class ReadFileTool(BaseTool):
|
|
20
51
|
path: str
|
|
52
|
+
start_line: Optional[int] = None
|
|
53
|
+
end_line: Optional[int] = None
|
|
54
|
+
query: Optional[str] = None
|
|
55
|
+
|
|
21
56
|
|
|
22
57
|
class WriteToFileTool(BaseTool):
|
|
23
58
|
path: str
|
|
24
59
|
content: str
|
|
60
|
+
mode: str = "write" # write or append
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class CountTokensTool(BaseTool):
|
|
64
|
+
"""Token统计工具类型"""
|
|
65
|
+
|
|
66
|
+
path: str # 文件或目录路径
|
|
67
|
+
recursive: Optional[bool] = True # 是否递归统计目录
|
|
68
|
+
include_summary: Optional[bool] = True # 是否包含分类汇总
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class ExtractToTextTool(BaseTool):
|
|
72
|
+
"""提取各种格式文件(包括URL)的文本内容到目标文件"""
|
|
73
|
+
|
|
74
|
+
source_path: str # 源路径,可以是本地文件路径或URL
|
|
75
|
+
target_path: str # 目标文本文件路径
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class SessionStartTool(BaseTool):
|
|
79
|
+
"""启动交互式会话工具"""
|
|
80
|
+
|
|
81
|
+
command: str # 要执行的命令,如 "python -i"
|
|
82
|
+
timeout: Optional[int] = 60 # 启动超时时间(秒)
|
|
83
|
+
cwd: Optional[str] = None # 工作目录
|
|
84
|
+
env: Optional[Dict[str, str]] = None # 环境变量
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class SessionInteractiveTool(BaseTool):
|
|
88
|
+
"""与交互式会话交互的工具"""
|
|
89
|
+
|
|
90
|
+
session_id: str # 会话ID
|
|
91
|
+
input: str # 发送到stdin的内容
|
|
92
|
+
read_timeout: Optional[int] = 5 # 等待读取输出的时间(秒)
|
|
93
|
+
max_bytes: Optional[int] = 40960 # 每次读取的最大字节数
|
|
94
|
+
expect_prompt: Optional[bool] = False # 是否等待提示符出现再返回
|
|
95
|
+
prompt_regex: Optional[str] = None # 提示符的正则表达式
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class SessionStopTool(BaseTool):
|
|
99
|
+
"""停止交互式会话工具"""
|
|
100
|
+
|
|
101
|
+
session_id: str # 会话ID
|
|
102
|
+
force: Optional[bool] = False # True=强制杀死,False=优雅终止
|
|
103
|
+
|
|
25
104
|
|
|
26
105
|
class ReplaceInFileTool(BaseTool):
|
|
27
106
|
path: str
|
|
28
107
|
diff: str
|
|
108
|
+
fence_0: Optional[str] = "```"
|
|
109
|
+
fence_1: Optional[str] = "```"
|
|
110
|
+
|
|
29
111
|
|
|
30
112
|
class SearchFilesTool(BaseTool):
|
|
31
113
|
path: str
|
|
32
114
|
regex: str
|
|
33
115
|
file_pattern: Optional[str] = None
|
|
34
116
|
|
|
117
|
+
|
|
35
118
|
class ListFilesTool(BaseTool):
|
|
36
119
|
path: str
|
|
37
120
|
recursive: Optional[bool] = False
|
|
38
121
|
|
|
122
|
+
|
|
39
123
|
class ListCodeDefinitionNamesTool(BaseTool):
|
|
40
124
|
path: str
|
|
41
125
|
|
|
126
|
+
|
|
42
127
|
class AskFollowupQuestionTool(BaseTool):
|
|
43
128
|
question: str
|
|
44
129
|
options: Optional[List[str]] = None
|
|
45
130
|
|
|
131
|
+
|
|
46
132
|
class AttemptCompletionTool(BaseTool):
|
|
47
133
|
result: str
|
|
48
134
|
command: Optional[str] = None
|
|
49
135
|
|
|
136
|
+
|
|
50
137
|
class PlanModeRespondTool(BaseTool):
|
|
51
138
|
response: str
|
|
52
139
|
options: Optional[List[str]] = None
|
|
53
140
|
|
|
141
|
+
|
|
54
142
|
class UseMcpTool(BaseTool):
|
|
55
143
|
server_name: str
|
|
56
144
|
tool_name: str
|
|
57
|
-
query:str
|
|
145
|
+
query: str
|
|
146
|
+
|
|
58
147
|
|
|
59
148
|
class UseRAGTool(BaseTool):
|
|
60
149
|
server_name: str
|
|
61
150
|
query: str
|
|
62
151
|
|
|
63
|
-
|
|
152
|
+
|
|
153
|
+
class RunNamedSubagentsTool(BaseTool):
|
|
154
|
+
"""
|
|
155
|
+
Tool for running a named subagent with a specific query.
|
|
156
|
+
Gets agent details from the agents module and executes via auto-coder.run.
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
subagents: str
|
|
160
|
+
background: Optional[bool] = False # 是否后台运行,默认为False
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class ACModReadTool(BaseTool):
|
|
64
164
|
path: str # 源码包目录,相对路径或绝对路径
|
|
65
165
|
|
|
166
|
+
|
|
167
|
+
class ACModWriteTool(BaseTool):
|
|
168
|
+
"""
|
|
169
|
+
Tool for creating or updating an AC Module's .ac.mod.md file.
|
|
170
|
+
"""
|
|
171
|
+
|
|
172
|
+
path: str # AC Module directory path, relative or absolute path
|
|
173
|
+
diff: str # diff content to edit the .ac.mod.md file
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class ACModListTool(BaseTool):
|
|
177
|
+
"""
|
|
178
|
+
Tool for listing all directories containing .ac.mod.md files (AC Modules).
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
path: Optional[str] = None # Optional root path to search, defaults to source_dir
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class TodoReadTool(BaseTool):
|
|
185
|
+
"""
|
|
186
|
+
Tool for reading the current todo list.
|
|
187
|
+
Takes no parameters.
|
|
188
|
+
"""
|
|
189
|
+
|
|
190
|
+
pass # No parameters needed
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
class TodoWriteTool(BaseTool):
|
|
194
|
+
"""
|
|
195
|
+
Tool for creating and managing a structured task list.
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
action: str # 'create', 'update', 'mark_progress', 'mark_completed', 'add_task'
|
|
199
|
+
task_id: Optional[str] = None # Task ID for update/mark operations
|
|
200
|
+
content: Optional[str] = None # Task content for create/add operations
|
|
201
|
+
priority: Optional[str] = None # 'high', 'medium', 'low'
|
|
202
|
+
status: Optional[str] = None # 'pending', 'in_progress', 'completed'
|
|
203
|
+
notes: Optional[str] = None # Additional notes for the task
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class ConversationMessageIdsWriteTool(BaseTool):
|
|
207
|
+
"""
|
|
208
|
+
Tool for writing conversation message IDs for pruning.
|
|
209
|
+
Manages message IDs that should be DELETED during conversation pruning.
|
|
210
|
+
"""
|
|
211
|
+
|
|
212
|
+
message_ids: str # Message IDs specification like "9226b3a4,204e1cd8"
|
|
213
|
+
action: str # Action to perform: "create", "append", or "delete"
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class ConversationMessageIdsReadTool(BaseTool):
|
|
217
|
+
"""
|
|
218
|
+
Tool for reading existing conversation message IDs configuration.
|
|
219
|
+
Returns the current message IDs configuration for the active conversation.
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
pass # No parameters needed, uses current conversation ID
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class BackgroundTaskTool(BaseTool):
|
|
226
|
+
"""后台任务管理工具
|
|
227
|
+
|
|
228
|
+
支持对后台运行的命令和子代理任务进行统一管理,包括:
|
|
229
|
+
- list: 列出当前会话的后台任务
|
|
230
|
+
- monitor: 监控任务输出内容
|
|
231
|
+
- cleanup: 清理已完成的任务记录
|
|
232
|
+
- kill: 终止正在运行的任务
|
|
233
|
+
|
|
234
|
+
任务标识支持 task_id、pid 和 process_uniq_id 三种方式。
|
|
235
|
+
"""
|
|
236
|
+
|
|
237
|
+
action: str # 操作类型: "list", "monitor", "cleanup", "kill"
|
|
238
|
+
|
|
239
|
+
# list 操作参数
|
|
240
|
+
show_completed: Optional[bool] = False # 是否显示已完成的任务
|
|
241
|
+
task_type: Optional[str] = None # 过滤任务类型: "command", "subagent", None(全部)
|
|
242
|
+
|
|
243
|
+
# monitor 操作参数
|
|
244
|
+
task_id: Optional[str] = None # 任务ID(UUID格式)
|
|
245
|
+
pid: Optional[int] = None # 进程ID(系统PID)
|
|
246
|
+
process_uniq_id: Optional[str] = None # 进程唯一ID(显示友好的短ID)
|
|
247
|
+
lines: Optional[int] = 100 # 显示的行数,默认100行
|
|
248
|
+
output_type: Optional[str] = "both" # "stdout", "stderr", "both"
|
|
249
|
+
|
|
250
|
+
# cleanup 操作参数
|
|
251
|
+
status_filter: Optional[str] = None # "completed", "failed", None(全部已结束的)
|
|
252
|
+
older_than_minutes: Optional[int] = None # 清理多少分钟前完成的任务
|
|
253
|
+
task_ids: Optional[List[str]] = None # 指定要清理的任务ID列表
|
|
254
|
+
|
|
255
|
+
# kill 操作参数
|
|
256
|
+
pids: Optional[List[int]] = None # 批量终止多个进程(系统PID)
|
|
257
|
+
force: Optional[bool] = False # 是否强制终止(SIGKILL vs SIGTERM)
|
|
258
|
+
kill_children: Optional[bool] = True # 是否同时终止子进程
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
class WebCrawlTool(BaseTool):
|
|
262
|
+
"""网页爬取工具,使用 Firecrawl、Metaso 或 BochaAI 进行网页爬取
|
|
263
|
+
|
|
264
|
+
支持多个API key配置时的并发爬取,结果会合并返回。
|
|
265
|
+
使用线程池进行并发处理以提高效率。
|
|
266
|
+
"""
|
|
267
|
+
|
|
268
|
+
url: str # 要爬取的URL
|
|
269
|
+
limit: Optional[int] = 10 # 爬取页面数量限制
|
|
270
|
+
scrape_options: Optional[str] = None # 抓取选项,JSON字符串格式
|
|
271
|
+
exclude_paths: Optional[str] = None # 排除的路径,逗号分割
|
|
272
|
+
include_paths: Optional[str] = None # 包含的路径,逗号分割
|
|
273
|
+
max_depth: Optional[int] = None # 最大爬取深度
|
|
274
|
+
allow_subdomains: Optional[str] = "false" # 是否允许子域名,true/false
|
|
275
|
+
crawl_entire_domain: Optional[str] = "false" # 是否爬取整个域名,true/false
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
class WebSearchTool(BaseTool):
|
|
279
|
+
"""网页搜索工具,使用 Firecrawl、Metaso 或 BochaAI 进行网页搜索
|
|
280
|
+
|
|
281
|
+
支持多个API key配置时的并发搜索,结果会合并返回。
|
|
282
|
+
使用线程池进行并发处理以提高效率。
|
|
283
|
+
"""
|
|
284
|
+
|
|
285
|
+
query: str # 搜索查询
|
|
286
|
+
limit: Optional[int] = 5 # 返回结果数量限制
|
|
287
|
+
sources: Optional[str] = None # 搜索源类型,逗号分割:web,news,images
|
|
288
|
+
scrape_options: Optional[str] = None # 抓取选项,JSON字符串格式
|
|
289
|
+
location: Optional[str] = None # 搜索位置
|
|
290
|
+
tbs: Optional[str] = None # 时间过滤参数
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
class LoadExtraDocumentTool(BaseTool):
|
|
294
|
+
"""按名称加载内置额外文档(以 prompt 文本形式返回)
|
|
295
|
+
|
|
296
|
+
例如:
|
|
297
|
+
<load_extra_document>
|
|
298
|
+
<name>workflow_subagents</name>
|
|
299
|
+
</load_extra_document>
|
|
300
|
+
"""
|
|
301
|
+
|
|
302
|
+
name: str
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
class ExecuteWorkflowTool(BaseTool):
|
|
306
|
+
"""执行 workflow 工具
|
|
307
|
+
|
|
308
|
+
按名称执行定义在 .autocoderworkflow/ 等目录的 workflow YAML 文件。
|
|
309
|
+
|
|
310
|
+
例如:
|
|
311
|
+
<execute_workflow>
|
|
312
|
+
<name>coder</name>
|
|
313
|
+
</execute_workflow>
|
|
314
|
+
"""
|
|
315
|
+
|
|
316
|
+
name: str
|
|
317
|
+
vars_override: Optional[str] = None # JSON 字符串,可选的变量覆盖
|
|
318
|
+
|
|
319
|
+
|
|
66
320
|
# Event Types for Rich Output Streaming
|
|
67
321
|
class LLMOutputEvent(BaseModel):
|
|
68
322
|
"""Represents plain text output from the LLM."""
|
|
323
|
+
|
|
69
324
|
text: str
|
|
70
325
|
|
|
326
|
+
|
|
71
327
|
class LLMThinkingEvent(BaseModel):
|
|
72
328
|
"""Represents text within <thinking> tags from the LLM."""
|
|
329
|
+
|
|
73
330
|
text: str
|
|
74
331
|
|
|
332
|
+
|
|
75
333
|
class ToolCallEvent(BaseModel):
|
|
76
334
|
"""Represents the LLM deciding to call a tool."""
|
|
77
|
-
|
|
335
|
+
|
|
336
|
+
tool: SkipValidation[BaseTool] # Use SkipValidation as BaseTool itself is complex
|
|
78
337
|
tool_xml: str
|
|
79
338
|
|
|
339
|
+
|
|
80
340
|
class ToolResultEvent(BaseModel):
|
|
81
341
|
"""Represents the result of executing a tool."""
|
|
342
|
+
|
|
82
343
|
tool_name: str
|
|
83
344
|
result: ToolResult
|
|
84
345
|
|
|
346
|
+
|
|
85
347
|
class TokenUsageEvent(BaseModel):
|
|
86
348
|
"""Represents the result of executing a tool."""
|
|
349
|
+
|
|
87
350
|
usage: Any
|
|
88
351
|
|
|
89
352
|
|
|
90
353
|
class ConversationIdEvent(BaseModel):
|
|
91
354
|
"""Represents the conversation id."""
|
|
355
|
+
|
|
92
356
|
conversation_id: str
|
|
93
357
|
|
|
358
|
+
|
|
94
359
|
class PlanModeRespondEvent(BaseModel):
|
|
95
360
|
"""Represents the LLM attempting to complete the task."""
|
|
96
|
-
|
|
361
|
+
|
|
362
|
+
completion: SkipValidation[PlanModeRespondTool] # Skip validation
|
|
97
363
|
completion_xml: str
|
|
98
364
|
|
|
365
|
+
|
|
99
366
|
class CompletionEvent(BaseModel):
|
|
100
367
|
"""Represents the LLM attempting to complete the task."""
|
|
101
|
-
|
|
368
|
+
|
|
369
|
+
completion: SkipValidation[AttemptCompletionTool] # Skip validation
|
|
102
370
|
completion_xml: str
|
|
103
371
|
|
|
372
|
+
|
|
373
|
+
class PreCommitEvent(BaseModel):
|
|
374
|
+
"""Represents the LLM attempting to complete the task."""
|
|
375
|
+
|
|
376
|
+
commit_result: CommitResult
|
|
377
|
+
tpe: str = "pre_commit"
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
class CommitEvent(BaseModel):
|
|
381
|
+
"""Represents the LLM attempting to complete the task."""
|
|
382
|
+
|
|
383
|
+
commit_result: CommitResult
|
|
384
|
+
tpe: str = "commit"
|
|
385
|
+
|
|
386
|
+
|
|
104
387
|
class ErrorEvent(BaseModel):
|
|
105
388
|
"""Represents an error during the process."""
|
|
389
|
+
|
|
390
|
+
message: str
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
class RetryEvent(BaseModel):
|
|
394
|
+
"""Represents a retry event."""
|
|
395
|
+
|
|
106
396
|
message: str
|
|
107
397
|
|
|
398
|
+
|
|
108
399
|
class WindowLengthChangeEvent(BaseModel):
|
|
109
400
|
"""Represents the token usage in the conversation window."""
|
|
401
|
+
|
|
110
402
|
tokens_used: int
|
|
403
|
+
pruned_tokens_used: int
|
|
404
|
+
conversation_round: int
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
# Base event class for all agent events
|
|
408
|
+
class AgentEvent(BaseModel):
|
|
409
|
+
"""Base class for all agent events."""
|
|
410
|
+
|
|
411
|
+
pass
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
# Metadata for token usage tracking
|
|
415
|
+
class AgentSingleOutputMeta(BaseModel):
|
|
416
|
+
"""Metadata for tracking token usage for a single LLM output."""
|
|
417
|
+
|
|
418
|
+
model_name: str
|
|
419
|
+
input_tokens: int
|
|
420
|
+
output_tokens: int
|
|
421
|
+
input_cost: float
|
|
422
|
+
output_cost: float
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
# Pull Request Result type - compatible with PRResult from pull_requests module
|
|
426
|
+
class PullRequestResult(BaseModel):
|
|
427
|
+
"""Pull Request operation result for agentic edit events"""
|
|
428
|
+
|
|
429
|
+
success: bool
|
|
430
|
+
pr_number: Optional[int] = None
|
|
431
|
+
pr_url: Optional[str] = None
|
|
432
|
+
pr_id: Optional[str] = None
|
|
433
|
+
error_message: Optional[str] = None
|
|
434
|
+
error_code: Optional[str] = None
|
|
435
|
+
platform: Optional[str] = None # Using str instead of PlatformType for flexibility
|
|
436
|
+
raw_response: Optional[Dict[str, Any]] = None
|
|
437
|
+
retry_after: Optional[int] = None
|
|
438
|
+
|
|
439
|
+
@classmethod
|
|
440
|
+
def from_pr_result(cls, pr_result) -> "PullRequestResult":
|
|
441
|
+
"""Create PullRequestResult from PRResult instance"""
|
|
442
|
+
if pr_result is None:
|
|
443
|
+
return cls(success=False, error_message="No PR result provided")
|
|
444
|
+
|
|
445
|
+
return cls(
|
|
446
|
+
success=pr_result.success,
|
|
447
|
+
pr_number=pr_result.pr_number,
|
|
448
|
+
pr_url=pr_result.pr_url,
|
|
449
|
+
pr_id=pr_result.pr_id,
|
|
450
|
+
error_message=pr_result.error_message,
|
|
451
|
+
error_code=pr_result.error_code,
|
|
452
|
+
platform=str(pr_result.platform) if pr_result.platform else None,
|
|
453
|
+
raw_response=pr_result.raw_response,
|
|
454
|
+
retry_after=pr_result.retry_after,
|
|
455
|
+
)
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
class PullRequestEvent(BaseModel):
|
|
459
|
+
"""Represents a Pull Request creation event."""
|
|
460
|
+
|
|
461
|
+
pull_request_result: PullRequestResult
|
|
462
|
+
|
|
111
463
|
|
|
112
464
|
# Deprecated: Will be replaced by specific Event types
|
|
113
465
|
# class PlainTextOutput(BaseModel):
|
|
@@ -128,9 +480,27 @@ TOOL_MODEL_MAP: Dict[str, Type[BaseTool]] = {
|
|
|
128
480
|
"plan_mode_respond": PlanModeRespondTool,
|
|
129
481
|
"use_mcp_tool": UseMcpTool,
|
|
130
482
|
"use_rag_tool": UseRAGTool,
|
|
131
|
-
"
|
|
483
|
+
"run_named_subagents": RunNamedSubagentsTool,
|
|
484
|
+
"todo_read": TodoReadTool,
|
|
485
|
+
"todo_write": TodoWriteTool,
|
|
486
|
+
"ac_mod_read": ACModReadTool,
|
|
487
|
+
"ac_mod_write": ACModWriteTool,
|
|
488
|
+
"ac_mod_list": ACModListTool,
|
|
489
|
+
"count_tokens": CountTokensTool,
|
|
490
|
+
"extract_to_text": ExtractToTextTool,
|
|
491
|
+
"session_start": SessionStartTool,
|
|
492
|
+
"session_interactive": SessionInteractiveTool,
|
|
493
|
+
"session_stop": SessionStopTool,
|
|
494
|
+
"conversation_message_ids_write": ConversationMessageIdsWriteTool,
|
|
495
|
+
"conversation_message_ids_read": ConversationMessageIdsReadTool,
|
|
496
|
+
"background_task": BackgroundTaskTool,
|
|
497
|
+
"web_crawl": WebCrawlTool,
|
|
498
|
+
"web_search": WebSearchTool,
|
|
499
|
+
"load_extra_document": LoadExtraDocumentTool,
|
|
500
|
+
"execute_workflow": ExecuteWorkflowTool,
|
|
132
501
|
}
|
|
133
502
|
|
|
503
|
+
|
|
134
504
|
class FileChangeEntry(BaseModel):
|
|
135
505
|
type: str # 'added' or 'modified'
|
|
136
506
|
diffs: List[str] = []
|
|
@@ -144,6 +514,8 @@ class AgenticEditRequest(BaseModel):
|
|
|
144
514
|
class FileOperation(BaseModel):
|
|
145
515
|
path: str
|
|
146
516
|
operation: str # e.g., "MODIFY", "REFERENCE", "ADD", "REMOVE"
|
|
517
|
+
|
|
518
|
+
|
|
147
519
|
class MemoryConfig(BaseModel):
|
|
148
520
|
"""
|
|
149
521
|
A model to encapsulate memory configuration and operations.
|
|
@@ -182,9 +554,13 @@ class CommandConfig(BaseModel):
|
|
|
182
554
|
index_import: SkipValidation[Callable]
|
|
183
555
|
exclude_files: SkipValidation[Callable]
|
|
184
556
|
|
|
185
|
-
|
|
557
|
+
|
|
558
|
+
class AgenticEditConversationConfig(BaseModel):
|
|
186
559
|
conversation_name: Optional[str] = "current"
|
|
187
|
-
conversation_id: Optional[str] = None
|
|
560
|
+
conversation_id: Optional[str] = None
|
|
188
561
|
action: Optional[str] = None
|
|
189
562
|
query: Optional[str] = None
|
|
190
563
|
pull_request: bool = False
|
|
564
|
+
pre_commit: bool = False
|
|
565
|
+
post_commit: bool = False
|
|
566
|
+
is_sub_agent: bool = False
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Runner 模块提供了多种运行模式,用于在不同环境下执行 AgenticEdit 代理。
|
|
3
|
+
|
|
4
|
+
这个模块包含三种主要的运行器:
|
|
5
|
+
1. TerminalRunner: 在终端环境中运行代理,提供格式化输出
|
|
6
|
+
2. FileBasedEventRunner: 将代理事件转换为标准事件系统格式
|
|
7
|
+
3. SdkRunner: 提供生成器接口,适用于SDK环境
|
|
8
|
+
|
|
9
|
+
使用示例:
|
|
10
|
+
```python
|
|
11
|
+
from autocoder.common.v2.agent.runner import TerminalRunner
|
|
12
|
+
from autocoder.common.v2.agent.agentic_edit_types import AgenticEditRequest
|
|
13
|
+
|
|
14
|
+
runner = TerminalRunner(llm=llm, args=args, ...)
|
|
15
|
+
runner.run(AgenticEditRequest(user_input="请帮我实现一个HTTP服务器"))
|
|
16
|
+
```
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from .base_runner import BaseRunner
|
|
20
|
+
from .terminal_runner import TerminalRunner
|
|
21
|
+
from .file_based_event_runner import FileBasedEventRunner
|
|
22
|
+
from .sdk_runner import SdkRunner
|
|
23
|
+
from .tool_display import get_tool_display_message
|
|
24
|
+
|
|
25
|
+
__all__ = [
|
|
26
|
+
"BaseRunner",
|
|
27
|
+
"TerminalRunner",
|
|
28
|
+
"FileBasedEventRunner",
|
|
29
|
+
"SdkRunner",
|
|
30
|
+
"get_tool_display_message"
|
|
31
|
+
]
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"""
|
|
2
|
+
BaseRunner 提供了所有运行器的基础实现和接口定义。
|
|
3
|
+
|
|
4
|
+
这个模块定义了代理运行的核心流程,包括请求处理、事件流生成和变更应用等。
|
|
5
|
+
各种具体运行器通过继承 BaseRunner 并实现特定的运行逻辑来提供不同的运行模式。
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from typing import Generator, Any, Dict, Optional, Callable, List
|
|
10
|
+
|
|
11
|
+
from autocoder.common.v2.agent.agentic_edit_types import (
|
|
12
|
+
AgenticEditRequest, AgentEvent,
|
|
13
|
+
AgenticEditConversationConfig
|
|
14
|
+
)
|
|
15
|
+
from autocoder.common import AutoCoderArgs
|
|
16
|
+
from autocoder.common.printer import Printer
|
|
17
|
+
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
class BaseRunner:
|
|
21
|
+
"""
|
|
22
|
+
代理运行器的基类,定义了运行代理的核心流程和接口。
|
|
23
|
+
|
|
24
|
+
所有具体的运行器实现(终端、事件系统、SDK)都应该继承这个类,
|
|
25
|
+
并根据特定需求实现 run 方法。
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
llm: Any,
|
|
31
|
+
args: AutoCoderArgs,
|
|
32
|
+
conversation_config: Optional[AgenticEditConversationConfig] = None,
|
|
33
|
+
cancel_token: Optional[str] = None,
|
|
34
|
+
system_prompt: Optional[str] = None
|
|
35
|
+
):
|
|
36
|
+
"""
|
|
37
|
+
初始化代理运行器。
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
llm: 大语言模型实例
|
|
41
|
+
args: 自动编码器参数
|
|
42
|
+
conversation_config: 会话配置(可选)
|
|
43
|
+
"""
|
|
44
|
+
from autocoder.common.v2.agent.agentic_edit import AgenticEdit
|
|
45
|
+
|
|
46
|
+
self.llm = llm
|
|
47
|
+
self.args = args
|
|
48
|
+
self.conversation_config = conversation_config
|
|
49
|
+
self.system_prompt = system_prompt
|
|
50
|
+
self.printer = Printer()
|
|
51
|
+
|
|
52
|
+
self.agent = AgenticEdit(
|
|
53
|
+
llm=llm,
|
|
54
|
+
args=args,
|
|
55
|
+
conversation_config=conversation_config,
|
|
56
|
+
cancel_token=cancel_token,
|
|
57
|
+
custom_system_prompt=system_prompt
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
def run(self, request: AgenticEditRequest) -> Any:
|
|
61
|
+
"""
|
|
62
|
+
运行代理处理请求。
|
|
63
|
+
|
|
64
|
+
这是一个抽象方法,需要由子类实现。
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
request: 代理编辑请求
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
根据具体实现返回不同类型的结果
|
|
71
|
+
"""
|
|
72
|
+
raise NotImplementedError("子类必须实现run方法")
|
|
73
|
+
|
|
74
|
+
def apply_pre_changes(self) -> None:
|
|
75
|
+
"""应用预处理变更"""
|
|
76
|
+
self.agent.apply_pre_changes()
|
|
77
|
+
|
|
78
|
+
def apply_changes(self) -> None:
|
|
79
|
+
"""应用代理执行后的变更"""
|
|
80
|
+
self.agent.apply_changes()
|
|
81
|
+
|
|
82
|
+
def analyze(self, request: AgenticEditRequest) -> Generator[AgentEvent, None, None]:
|
|
83
|
+
"""
|
|
84
|
+
分析请求并生成事件流。
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
request: 代理编辑请求
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
事件生成器
|
|
91
|
+
"""
|
|
92
|
+
return self.agent.analyze(request)
|