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
|
@@ -6,8 +6,9 @@ from autocoder.common import (
|
|
|
6
6
|
SourceCode,
|
|
7
7
|
)
|
|
8
8
|
from autocoder.common.buildin_tokenizer import BuildinTokenizer
|
|
9
|
-
from autocoder.pyproject import PyProject
|
|
9
|
+
from autocoder.pyproject import PyProject
|
|
10
10
|
from autocoder.tsproject import TSProject
|
|
11
|
+
from autocoder.default_project import DefaultProject
|
|
11
12
|
from autocoder.suffixproject import SuffixProject
|
|
12
13
|
from autocoder.index.entry import build_index_and_filter_files
|
|
13
14
|
from autocoder.common.code_auto_merge import CodeAutoMerge
|
|
@@ -113,7 +114,7 @@ class ActionTSProject(BaseAction):
|
|
|
113
114
|
f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
|
|
114
115
|
)
|
|
115
116
|
|
|
116
|
-
global_cancel.check_and_raise(token=self.args.
|
|
117
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
117
118
|
|
|
118
119
|
if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
|
|
119
120
|
code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
|
|
@@ -179,7 +180,7 @@ class ActionTSProject(BaseAction):
|
|
|
179
180
|
action_file=self.args.file
|
|
180
181
|
).to_dict())
|
|
181
182
|
|
|
182
|
-
global_cancel.check_and_raise(token=self.args.
|
|
183
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
183
184
|
|
|
184
185
|
merge_result = None
|
|
185
186
|
if args.execute and args.auto_merge:
|
|
@@ -267,7 +268,7 @@ class ActionPyProject(BaseAction):
|
|
|
267
268
|
max_length=self.args.model_max_input_length
|
|
268
269
|
)
|
|
269
270
|
|
|
270
|
-
global_cancel.check_and_raise(token=self.args.
|
|
271
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
271
272
|
|
|
272
273
|
if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
|
|
273
274
|
code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
|
|
@@ -334,7 +335,7 @@ class ActionPyProject(BaseAction):
|
|
|
334
335
|
action_file=self.args.file
|
|
335
336
|
).to_dict())
|
|
336
337
|
|
|
337
|
-
global_cancel.check_and_raise(token=self.args.
|
|
338
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
338
339
|
|
|
339
340
|
merge_result = None
|
|
340
341
|
if args.execute and args.auto_merge:
|
|
@@ -415,7 +416,7 @@ class ActionSuffixProject(BaseAction):
|
|
|
415
416
|
f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
|
|
416
417
|
)
|
|
417
418
|
|
|
418
|
-
global_cancel.check_and_raise(token=self.args.
|
|
419
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
419
420
|
|
|
420
421
|
if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
|
|
421
422
|
code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
|
|
@@ -481,7 +482,7 @@ class ActionSuffixProject(BaseAction):
|
|
|
481
482
|
action_file=self.args.file
|
|
482
483
|
).to_dict())
|
|
483
484
|
|
|
484
|
-
global_cancel.check_and_raise(token=self.args.
|
|
485
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
485
486
|
|
|
486
487
|
merge_result = None
|
|
487
488
|
if args.execute and args.auto_merge:
|
|
@@ -522,3 +523,160 @@ class ActionSuffixProject(BaseAction):
|
|
|
522
523
|
conversations=generate_result.conversations[0],
|
|
523
524
|
model=self.llm.default_model_name,
|
|
524
525
|
)
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
class ActionDefaultProject(BaseAction):
|
|
529
|
+
"""
|
|
530
|
+
ActionDefaultProject用于处理默认项目类型,使用ignorefiles模块进行文件过滤。
|
|
531
|
+
与ActionSuffixProject不同,它不按文件后缀过滤,而是收集所有不被忽略的文本文件。
|
|
532
|
+
"""
|
|
533
|
+
|
|
534
|
+
def __init__(
|
|
535
|
+
self, args: AutoCoderArgs, llm: Optional[byzerllm.ByzerLLM] = None
|
|
536
|
+
) -> None:
|
|
537
|
+
self.args = args
|
|
538
|
+
self.llm = llm
|
|
539
|
+
self.pp = None
|
|
540
|
+
self.printer = Printer()
|
|
541
|
+
|
|
542
|
+
def run(self):
|
|
543
|
+
args = self.args
|
|
544
|
+
|
|
545
|
+
# project_type为*时,或者没有设置project_type时,执行默认项目
|
|
546
|
+
if args.project_type and args.project_type != "*":
|
|
547
|
+
return False
|
|
548
|
+
|
|
549
|
+
pp = DefaultProject(args=args, llm=self.llm)
|
|
550
|
+
self.pp = pp
|
|
551
|
+
pp.run()
|
|
552
|
+
source_code_list = SourceCodeList(pp.sources)
|
|
553
|
+
if self.llm:
|
|
554
|
+
if args.in_code_apply:
|
|
555
|
+
old_query = args.query
|
|
556
|
+
args.query = (args.context or "") + "\n\n" + args.query
|
|
557
|
+
source_code_list = build_index_and_filter_files(
|
|
558
|
+
llm=self.llm, args=args, sources=pp.sources
|
|
559
|
+
)
|
|
560
|
+
if args.in_code_apply:
|
|
561
|
+
args.query = old_query
|
|
562
|
+
self.process_content(source_code_list)
|
|
563
|
+
return True
|
|
564
|
+
|
|
565
|
+
def process_content(self, source_code_list: SourceCodeList):
|
|
566
|
+
args = self.args
|
|
567
|
+
content = source_code_list.to_str()
|
|
568
|
+
|
|
569
|
+
if args.execute and self.llm and not args.human_as_model:
|
|
570
|
+
content_length = self._get_content_length(content)
|
|
571
|
+
if content_length > self.args.model_max_input_length:
|
|
572
|
+
logger.warning(
|
|
573
|
+
f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
|
|
574
|
+
)
|
|
575
|
+
|
|
576
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
577
|
+
|
|
578
|
+
if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
|
|
579
|
+
code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
|
|
580
|
+
code_merge_manager.run(query=args.query, source_code_list=source_code_list)
|
|
581
|
+
return
|
|
582
|
+
|
|
583
|
+
if args.execute:
|
|
584
|
+
self.printer.print_in_terminal("code_generation_start")
|
|
585
|
+
start_time = time.time()
|
|
586
|
+
if args.auto_merge == "diff":
|
|
587
|
+
generate = CodeAutoGenerateDiff(
|
|
588
|
+
llm=self.llm, args=self.args, action=self
|
|
589
|
+
)
|
|
590
|
+
elif args.auto_merge == "strict_diff":
|
|
591
|
+
generate = CodeAutoGenerateStrictDiff(
|
|
592
|
+
llm=self.llm, args=self.args, action=self
|
|
593
|
+
)
|
|
594
|
+
elif args.auto_merge == "editblock":
|
|
595
|
+
generate = CodeAutoGenerateEditBlock(
|
|
596
|
+
llm=self.llm, args=self.args, action=self
|
|
597
|
+
)
|
|
598
|
+
else:
|
|
599
|
+
generate = CodeAutoGenerate(
|
|
600
|
+
llm=self.llm, args=self.args, action=self)
|
|
601
|
+
|
|
602
|
+
generate_result = generate.single_round_run(
|
|
603
|
+
query=args.query, source_code_list=source_code_list
|
|
604
|
+
)
|
|
605
|
+
|
|
606
|
+
elapsed_time = time.time() - start_time
|
|
607
|
+
speed = generate_result.metadata.get(
|
|
608
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
609
|
+
model_names = ",".join(get_llm_names(generate.llms))
|
|
610
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
611
|
+
'input_tokens_cost', 0)
|
|
612
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
613
|
+
'generated_tokens_cost', 0)
|
|
614
|
+
self.printer.print_in_terminal(
|
|
615
|
+
"code_generation_complete",
|
|
616
|
+
duration=elapsed_time,
|
|
617
|
+
input_tokens=generate_result.metadata.get('input_tokens_count', 0),
|
|
618
|
+
output_tokens=generate_result.metadata.get(
|
|
619
|
+
'generated_tokens_count', 0),
|
|
620
|
+
input_cost=input_tokens_cost,
|
|
621
|
+
output_cost=generated_tokens_cost,
|
|
622
|
+
speed=round(speed, 2),
|
|
623
|
+
model_names=model_names,
|
|
624
|
+
sampling_count=len(generate_result.contents)
|
|
625
|
+
)
|
|
626
|
+
|
|
627
|
+
get_event_manager(self.args.event_file).write_result(
|
|
628
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
629
|
+
model_name=model_names,
|
|
630
|
+
elapsed_time=elapsed_time,
|
|
631
|
+
input_tokens=generate_result.metadata.get(
|
|
632
|
+
'input_tokens_count', 0),
|
|
633
|
+
output_tokens=generate_result.metadata.get(
|
|
634
|
+
'generated_tokens_count', 0),
|
|
635
|
+
input_cost=input_tokens_cost,
|
|
636
|
+
output_cost=generated_tokens_cost,
|
|
637
|
+
speed=round(speed, 2)
|
|
638
|
+
)).to_dict(), metadata=EventMetadata(
|
|
639
|
+
action_file=self.args.file
|
|
640
|
+
).to_dict())
|
|
641
|
+
|
|
642
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
643
|
+
|
|
644
|
+
merge_result = None
|
|
645
|
+
if args.execute and args.auto_merge:
|
|
646
|
+
self.printer.print_in_terminal("code_merge_start")
|
|
647
|
+
if args.auto_merge == "diff":
|
|
648
|
+
code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
|
|
649
|
+
merge_result = code_merge.merge_code(
|
|
650
|
+
generate_result=generate_result)
|
|
651
|
+
elif args.auto_merge == "strict_diff":
|
|
652
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
653
|
+
llm=self.llm, args=self.args)
|
|
654
|
+
merge_result = code_merge.merge_code(
|
|
655
|
+
generate_result=generate_result)
|
|
656
|
+
elif args.auto_merge == "editblock":
|
|
657
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
658
|
+
llm=self.llm, args=self.args)
|
|
659
|
+
merge_result = code_merge.merge_code(
|
|
660
|
+
generate_result=generate_result)
|
|
661
|
+
else:
|
|
662
|
+
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
663
|
+
merge_result = code_merge.merge_code(
|
|
664
|
+
generate_result=generate_result)
|
|
665
|
+
|
|
666
|
+
if merge_result is not None:
|
|
667
|
+
content = merge_result.contents[0]
|
|
668
|
+
store_code_model_conversation(
|
|
669
|
+
args=self.args,
|
|
670
|
+
instruction=self.args.query,
|
|
671
|
+
conversations=merge_result.conversations[0],
|
|
672
|
+
model=self.llm.default_model_name,
|
|
673
|
+
)
|
|
674
|
+
else:
|
|
675
|
+
content = generate_result.contents[0]
|
|
676
|
+
|
|
677
|
+
store_code_model_conversation(
|
|
678
|
+
args=self.args,
|
|
679
|
+
instruction=self.args.query,
|
|
680
|
+
conversations=generate_result.conversations[0],
|
|
681
|
+
model=self.llm.default_model_name,
|
|
682
|
+
)
|
|
@@ -67,7 +67,7 @@ class ActionRegexProject:
|
|
|
67
67
|
|
|
68
68
|
start_time = time.time()
|
|
69
69
|
|
|
70
|
-
global_cancel.check_and_raise(token=self.args.
|
|
70
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
71
71
|
|
|
72
72
|
if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
|
|
73
73
|
code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
|
|
@@ -128,7 +128,7 @@ class ActionRegexProject:
|
|
|
128
128
|
action_file=self.args.file
|
|
129
129
|
).to_dict())
|
|
130
130
|
|
|
131
|
-
global_cancel.check_and_raise(token=self.args.
|
|
131
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
132
132
|
|
|
133
133
|
merge_result = None
|
|
134
134
|
if args.execute and args.auto_merge:
|
autocoder/index/entry.py
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import json
|
|
3
|
+
from pdb import run
|
|
3
4
|
import time
|
|
4
5
|
from typing import List, Dict, Any, Optional
|
|
5
6
|
from datetime import datetime
|
|
7
|
+
from pathlib import Path
|
|
6
8
|
from autocoder.common import SourceCode, AutoCoderArgs
|
|
9
|
+
from autocoder.common.autocoderargs_parser import AutoCoderArgsParser
|
|
7
10
|
|
|
8
11
|
from rich.console import Console
|
|
9
12
|
from rich.table import Table
|
|
@@ -11,14 +14,8 @@ from rich.panel import Panel
|
|
|
11
14
|
|
|
12
15
|
from autocoder.common.printer import Printer
|
|
13
16
|
from autocoder.events.event_types import EventMetadata
|
|
14
|
-
from autocoder.
|
|
15
|
-
|
|
16
|
-
CommunicateEvent,
|
|
17
|
-
CommunicateEventType,
|
|
18
|
-
)
|
|
19
|
-
from autocoder.index.types import (
|
|
20
|
-
TargetFile
|
|
21
|
-
)
|
|
17
|
+
from autocoder.index.filter.agentic_filter import AgenticFilterRequest, AgenticFilter
|
|
18
|
+
from autocoder.index.types import TargetFile
|
|
22
19
|
|
|
23
20
|
from autocoder.index.filter.quick_filter import QuickFilter
|
|
24
21
|
from autocoder.index.filter.normal_filter import NormalFilter
|
|
@@ -30,7 +27,6 @@ from autocoder.common.action_yml_file_manager import ActionYmlFileManager
|
|
|
30
27
|
|
|
31
28
|
from autocoder.events.event_manager_singleton import get_event_manager
|
|
32
29
|
from autocoder.events import event_content as EventContentCreator
|
|
33
|
-
from autocoder.agent.agentic_filter import AgenticFilter
|
|
34
30
|
|
|
35
31
|
|
|
36
32
|
def build_index_and_filter_files(
|
|
@@ -58,8 +54,8 @@ def build_index_and_filter_files(
|
|
|
58
54
|
},
|
|
59
55
|
"file_selection": 0.0,
|
|
60
56
|
"prepare_output": 0.0,
|
|
61
|
-
"total": 0.0
|
|
62
|
-
}
|
|
57
|
+
"total": 0.0,
|
|
58
|
+
},
|
|
63
59
|
}
|
|
64
60
|
|
|
65
61
|
def get_file_path(file_path):
|
|
@@ -85,11 +81,44 @@ def build_index_and_filter_files(
|
|
|
85
81
|
phase_end = time.monotonic()
|
|
86
82
|
stats["timings"]["process_tagged_sources"] = phase_end - phase_start
|
|
87
83
|
|
|
88
|
-
|
|
84
|
+
index_manager = IndexManager(llm=llm, sources=sources, args=args)
|
|
85
|
+
|
|
86
|
+
if not args.skip_filter_index and args.enable_agentic_filter:
|
|
87
|
+
# tuner = AgenticFilter(
|
|
88
|
+
# llm=index_manager.index_filter_llm or llm,
|
|
89
|
+
# conversation_history=[],
|
|
90
|
+
# args=args)
|
|
91
|
+
|
|
92
|
+
# query = args.query or ""
|
|
93
|
+
# response = tuner.analyze(
|
|
94
|
+
# AgenticFilterRequest(user_input=query))
|
|
95
|
+
|
|
96
|
+
# if response:
|
|
97
|
+
# for file in response.files:
|
|
98
|
+
# final_files[file.path] = TargetFile(
|
|
99
|
+
# file_path=file.path, reason="Agentic Filter")
|
|
100
|
+
|
|
101
|
+
from autocoder.auto_coder_runner import run_agentic_filter
|
|
102
|
+
|
|
103
|
+
response = run_agentic_filter(query=args.query)
|
|
104
|
+
|
|
105
|
+
if response:
|
|
106
|
+
for file in response.files:
|
|
107
|
+
file_path = Path(file.path)
|
|
108
|
+
if not file_path.is_absolute():
|
|
109
|
+
# 相对路径需要加上 source_dir 作为根目录
|
|
110
|
+
file_path = Path(args.source_dir) / file_path
|
|
111
|
+
# 转换为绝对路径
|
|
112
|
+
absolute_path = str(file_path.resolve())
|
|
113
|
+
final_files[absolute_path] = TargetFile(
|
|
114
|
+
file_path=absolute_path, reason="Agentic Filter"
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
elif not args.skip_build_index and llm:
|
|
89
118
|
# Phase 2: Build index
|
|
90
119
|
printer.print_in_terminal("phase2_building_index")
|
|
91
120
|
phase_start = time.monotonic()
|
|
92
|
-
|
|
121
|
+
|
|
93
122
|
index_data = index_manager.build_index()
|
|
94
123
|
stats["indexed_files"] = len(index_data) if index_data else 0
|
|
95
124
|
phase_end = time.monotonic()
|
|
@@ -97,56 +126,32 @@ def build_index_and_filter_files(
|
|
|
97
126
|
|
|
98
127
|
if not args.skip_filter_index and args.index_filter_model:
|
|
99
128
|
|
|
100
|
-
model_name =
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
129
|
+
model_name = args.index_filter_model or args.model
|
|
130
|
+
printer.print_in_terminal(
|
|
131
|
+
"quick_filter_start", style="blue", model_name=model_name
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
quick_filter = QuickFilter(index_manager, stats, sources)
|
|
135
|
+
query = args.query or ""
|
|
136
|
+
quick_filter_result = quick_filter.filter(index_manager.read_index(), query)
|
|
137
|
+
|
|
138
|
+
final_files.update(quick_filter_result.files)
|
|
104
139
|
|
|
105
|
-
if
|
|
106
|
-
|
|
107
|
-
from autocoder.common.conf_utils import load_memory
|
|
108
|
-
|
|
109
|
-
_memory = load_memory(args)
|
|
110
|
-
|
|
111
|
-
def save_memory_func():
|
|
112
|
-
pass
|
|
113
|
-
|
|
114
|
-
tuner = AgenticFilter(index_manager.index_filter_llm,
|
|
115
|
-
args=args,
|
|
116
|
-
conversation_history=[],
|
|
117
|
-
memory_config=MemoryConfig(
|
|
118
|
-
memory=_memory, save_memory_func=save_memory_func),
|
|
119
|
-
command_config=None)
|
|
120
|
-
response = tuner.analyze(
|
|
121
|
-
AgenticFilterRequest(user_input=args.query))
|
|
122
|
-
if response:
|
|
123
|
-
print("收集文件。。。。。。")
|
|
124
|
-
print(response)
|
|
125
|
-
for file in response.files:
|
|
126
|
-
final_files[file.path] = TargetFile(
|
|
127
|
-
file_path=file.path, reason="Agentic Filter")
|
|
128
|
-
else:
|
|
129
|
-
printer.print_in_terminal(
|
|
130
|
-
"quick_filter_start", style="blue", model_name=model_name)
|
|
131
|
-
|
|
132
|
-
quick_filter = QuickFilter(index_manager, stats, sources)
|
|
133
|
-
quick_filter_result = quick_filter.filter(
|
|
134
|
-
index_manager.read_index(), args.query)
|
|
135
|
-
|
|
136
|
-
final_files.update(quick_filter_result.files)
|
|
137
|
-
|
|
138
|
-
if quick_filter_result.file_positions:
|
|
139
|
-
file_positions.update(quick_filter_result.file_positions)
|
|
140
|
+
if quick_filter_result.file_positions:
|
|
141
|
+
file_positions.update(quick_filter_result.file_positions)
|
|
140
142
|
|
|
141
143
|
if not args.skip_filter_index and not args.index_filter_model:
|
|
142
|
-
model_name = getattr(index_manager.llm,
|
|
144
|
+
model_name = getattr(index_manager.llm, "default_model_name", None)
|
|
143
145
|
if not model_name:
|
|
144
146
|
model_name = "unknown(without default model name)"
|
|
145
147
|
printer.print_in_terminal(
|
|
146
|
-
"normal_filter_start", style="blue", model_name=model_name
|
|
148
|
+
"normal_filter_start", style="blue", model_name=model_name
|
|
149
|
+
)
|
|
147
150
|
normal_filter = NormalFilter(index_manager, stats, sources)
|
|
151
|
+
query = args.query or ""
|
|
148
152
|
normal_filter_result = normal_filter.filter(
|
|
149
|
-
index_manager.read_index(),
|
|
153
|
+
index_manager.read_index(), query
|
|
154
|
+
)
|
|
150
155
|
# Merge normal filter results into final_files
|
|
151
156
|
final_files.update(normal_filter_result.files)
|
|
152
157
|
|
|
@@ -198,21 +203,25 @@ def build_index_and_filter_files(
|
|
|
198
203
|
header_style="bold magenta",
|
|
199
204
|
# 设置表格最大宽度为终端宽度(留 10 字符边距)
|
|
200
205
|
width=min(console_width - 10, 120),
|
|
201
|
-
expand=True
|
|
206
|
+
expand=True,
|
|
202
207
|
)
|
|
203
208
|
|
|
204
209
|
# 优化列配置
|
|
205
|
-
table.add_column(
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
210
|
+
table.add_column(
|
|
211
|
+
"File Path",
|
|
212
|
+
style="cyan",
|
|
213
|
+
# 分配 60% 宽度给文件路径
|
|
214
|
+
width=int((console_width - 10) * 0.6),
|
|
215
|
+
overflow="fold", # 自动折叠过长的路径
|
|
216
|
+
no_wrap=False,
|
|
217
|
+
) # 允许换行
|
|
218
|
+
|
|
219
|
+
table.add_column(
|
|
220
|
+
"Reason",
|
|
221
|
+
style="green",
|
|
222
|
+
width=int((console_width - 10) * 0.4), # 分配 40% 宽度给原因
|
|
223
|
+
no_wrap=False,
|
|
224
|
+
)
|
|
216
225
|
|
|
217
226
|
# 添加处理过的文件路径
|
|
218
227
|
for file, reason in data:
|
|
@@ -235,7 +244,8 @@ def build_index_and_filter_files(
|
|
|
235
244
|
|
|
236
245
|
if args.index_filter_file_num > 0:
|
|
237
246
|
logger.info(
|
|
238
|
-
f"Limiting files from {len(final_files)} to {args.index_filter_file_num}"
|
|
247
|
+
f"Limiting files from {len(final_files)} to {args.index_filter_file_num}"
|
|
248
|
+
)
|
|
239
249
|
|
|
240
250
|
if args.skip_confirm:
|
|
241
251
|
final_filenames = [file.file_path for file in final_files.values()]
|
|
@@ -251,8 +261,7 @@ def build_index_and_filter_files(
|
|
|
251
261
|
)
|
|
252
262
|
final_filenames = []
|
|
253
263
|
else:
|
|
254
|
-
final_filenames = display_table_and_get_selections(
|
|
255
|
-
target_files_data)
|
|
264
|
+
final_filenames = display_table_and_get_selections(target_files_data)
|
|
256
265
|
|
|
257
266
|
if args.index_filter_file_num > 0:
|
|
258
267
|
final_filenames = final_filenames[: args.index_filter_file_num]
|
|
@@ -283,9 +292,13 @@ def build_index_and_filter_files(
|
|
|
283
292
|
source_code_list = SourceCodeList(sources=[])
|
|
284
293
|
depulicated_sources = set()
|
|
285
294
|
|
|
295
|
+
# for file in final_filenames:
|
|
296
|
+
# print(f"{file} - {final_files[file].reason}")
|
|
297
|
+
|
|
286
298
|
# 先去重
|
|
287
299
|
temp_sources = []
|
|
288
300
|
for file in sources:
|
|
301
|
+
# print(f"{file.module_name} in project")
|
|
289
302
|
if file.module_name in final_filenames:
|
|
290
303
|
if file.module_name in depulicated_sources:
|
|
291
304
|
continue
|
|
@@ -296,8 +309,14 @@ def build_index_and_filter_files(
|
|
|
296
309
|
|
|
297
310
|
# 开启了裁剪,则需要做裁剪,不过目前只针对 quick filter 生效
|
|
298
311
|
if args.context_prune:
|
|
312
|
+
# 解析 conversation_prune_safe_zone_tokens 参数
|
|
313
|
+
args_parser = AutoCoderArgsParser()
|
|
314
|
+
parsed_safe_zone_tokens = args_parser.parse_conversation_prune_safe_zone_tokens(
|
|
315
|
+
args.conversation_prune_safe_zone_tokens, args.code_model
|
|
316
|
+
)
|
|
299
317
|
context_pruner = PruneContext(
|
|
300
|
-
max_tokens=
|
|
318
|
+
max_tokens=parsed_safe_zone_tokens, args=args, llm=llm
|
|
319
|
+
)
|
|
301
320
|
# 如果 file_positions 不为空,则通过 file_positions 来获取文件
|
|
302
321
|
if file_positions:
|
|
303
322
|
# 拿到位置列表,然后根据位置排序 得到 [(pos,file_path)]
|
|
@@ -305,19 +324,28 @@ def build_index_and_filter_files(
|
|
|
305
324
|
# 通过 [file_path] 顺序调整 temp_sources 的顺序
|
|
306
325
|
# MARK
|
|
307
326
|
# 将 file_positions 转换为 [(pos, file_path)] 的列表
|
|
308
|
-
position_file_pairs = [
|
|
309
|
-
|
|
327
|
+
position_file_pairs = [
|
|
328
|
+
(pos, file_path) for file_path, pos in file_positions.items()
|
|
329
|
+
]
|
|
310
330
|
# 按位置排序
|
|
311
331
|
position_file_pairs.sort(key=lambda x: x[0])
|
|
312
332
|
# 提取排序后的文件路径列表
|
|
313
|
-
sorted_file_paths = [file_path for _,
|
|
314
|
-
file_path in position_file_pairs]
|
|
333
|
+
sorted_file_paths = [file_path for _, file_path in position_file_pairs]
|
|
315
334
|
# 根据 sorted_file_paths 重新排序 temp_sources
|
|
316
|
-
temp_sources.sort(
|
|
317
|
-
|
|
335
|
+
temp_sources.sort(
|
|
336
|
+
key=lambda x: (
|
|
337
|
+
sorted_file_paths.index(x.module_name)
|
|
338
|
+
if x.module_name in sorted_file_paths
|
|
339
|
+
else len(sorted_file_paths)
|
|
340
|
+
)
|
|
341
|
+
)
|
|
318
342
|
|
|
343
|
+
query = args.query or ""
|
|
319
344
|
pruned_files = context_pruner.handle_overflow(
|
|
320
|
-
temp_sources,
|
|
345
|
+
temp_sources,
|
|
346
|
+
[{"role": "user", "content": query}],
|
|
347
|
+
args.context_prune_strategy,
|
|
348
|
+
)
|
|
321
349
|
source_code_list.sources = pruned_files
|
|
322
350
|
|
|
323
351
|
stats["final_files"] = len(source_code_list.sources)
|
|
@@ -331,56 +359,19 @@ def build_index_and_filter_files(
|
|
|
331
359
|
|
|
332
360
|
# Calculate total filter time
|
|
333
361
|
total_filter_time = (
|
|
334
|
-
stats["timings"]["quick_filter"]
|
|
335
|
-
stats["timings"]["normal_filter"]["level1_filter"]
|
|
336
|
-
stats["timings"]["normal_filter"]["level2_filter"]
|
|
337
|
-
stats["timings"]["normal_filter"]["relevance_verification"]
|
|
362
|
+
stats["timings"]["quick_filter"]
|
|
363
|
+
+ stats["timings"]["normal_filter"]["level1_filter"]
|
|
364
|
+
+ stats["timings"]["normal_filter"]["level2_filter"]
|
|
365
|
+
+ stats["timings"]["normal_filter"]["relevance_verification"]
|
|
338
366
|
)
|
|
339
367
|
|
|
340
|
-
# Print final statistics in a more structured way
|
|
341
|
-
summary = f"""
|
|
342
|
-
=== File Stat ===
|
|
343
|
-
• Total files scanned: {stats['total_files']}
|
|
344
|
-
• Files indexed: {stats['indexed_files']}
|
|
345
|
-
• Files filtered:
|
|
346
|
-
- Level 1 (query-based): {stats['level1_filtered']}
|
|
347
|
-
- Level 2 (related files): {stats['level2_filtered']}
|
|
348
|
-
- Relevance verified: {stats.get('verified_files', 0)}
|
|
349
|
-
• Final files selected: {stats['final_files']}
|
|
350
|
-
|
|
351
|
-
=== Time Stat ===
|
|
352
|
-
• Index build: {stats['timings'].get('build_index', 0):.2f}s
|
|
353
|
-
• Quick filter: {stats['timings'].get('quick_filter', 0):.2f}s
|
|
354
|
-
• Normal filter:
|
|
355
|
-
- Level 1 filter: {stats['timings']["normal_filter"].get('level1_filter', 0):.2f}s
|
|
356
|
-
- Level 2 filter: {stats['timings']["normal_filter"].get('level2_filter', 0):.2f}s
|
|
357
|
-
- Relevance check: {stats['timings']["normal_filter"].get('relevance_verification', 0):.2f}s
|
|
358
|
-
• File selection: {stats['timings'].get('file_selection', 0):.2f}s
|
|
359
|
-
• Total time: {total_time:.2f}s
|
|
360
|
-
|
|
361
|
-
"""
|
|
362
|
-
# printer.print_panel(
|
|
363
|
-
# summary,
|
|
364
|
-
# text_options={"justify": "left", "style": "bold white"},
|
|
365
|
-
# panel_options={
|
|
366
|
-
# "title": "Indexing and Filtering Summary",
|
|
367
|
-
# "border_style": "bold blue",
|
|
368
|
-
# "padding": (1, 2),
|
|
369
|
-
# "expand": False
|
|
370
|
-
# }
|
|
371
|
-
# )
|
|
372
|
-
|
|
373
368
|
get_event_manager(args.event_file).write_result(
|
|
374
369
|
EventContentCreator.create_result(
|
|
375
370
|
content=EventContentCreator.ResultContextUsedContent(
|
|
376
|
-
files=final_filenames,
|
|
377
|
-
title="Files Used as Context",
|
|
378
|
-
description=""
|
|
371
|
+
files=final_filenames, title="Files Used as Context", description=""
|
|
379
372
|
).to_dict()
|
|
380
373
|
),
|
|
381
|
-
metadata=EventMetadata(
|
|
382
|
-
action_file=args.file
|
|
383
|
-
).to_dict()
|
|
374
|
+
metadata=EventMetadata(action_file=args.file or "").to_dict(),
|
|
384
375
|
)
|
|
385
376
|
|
|
386
377
|
if args.file:
|
|
@@ -393,10 +384,11 @@ def build_index_and_filter_files(
|
|
|
393
384
|
args.dynamic_urls = dynamic_urls
|
|
394
385
|
|
|
395
386
|
update_yaml_success = action_yml_file_manager.update_yaml_field(
|
|
396
|
-
action_file_name, "dynamic_urls", args.dynamic_urls
|
|
387
|
+
action_file_name, "dynamic_urls", args.dynamic_urls
|
|
388
|
+
)
|
|
397
389
|
if not update_yaml_success:
|
|
398
390
|
printer = Printer()
|
|
399
391
|
printer.print_in_terminal(
|
|
400
|
-
"yaml_save_error", style="red", yaml_file=action_file_name
|
|
401
|
-
|
|
392
|
+
"yaml_save_error", style="red", yaml_file=action_file_name
|
|
393
|
+
)
|
|
402
394
|
return source_code_list
|