auto-coder 1.0.0__py3-none-any.whl → 2.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.1.dist-info/LICENSE +158 -0
- auto_coder-2.0.1.dist-info/METADATA +558 -0
- auto_coder-2.0.1.dist-info/RECORD +795 -0
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/WHEEL +1 -1
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +24 -3
- autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
- autocoder/agent/base_agentic/types.py +42 -0
- autocoder/agent/entry_command_agent/chat.py +77 -73
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +962 -2345
- autocoder/auto_coder_terminal.py +26 -0
- autocoder/auto_coder_terminal_v3.py +190 -0
- autocoder/chat/conf_command.py +224 -124
- autocoder/chat/models_command.py +361 -299
- autocoder/chat/rules_command.py +79 -31
- autocoder/chat_auto_coder.py +988 -398
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +25 -8
- autocoder/commands/auto_web.py +1 -1
- autocoder/commands/tools.py +44 -44
- autocoder/common/__init__.py +150 -128
- autocoder/common/ac_style_command_parser/__init__.py +39 -2
- autocoder/common/ac_style_command_parser/config.py +422 -0
- autocoder/common/ac_style_command_parser/parser.py +292 -78
- autocoder/common/ac_style_command_parser/test_parser.py +241 -16
- autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
- autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
- autocoder/common/action_yml_file_manager.py +25 -13
- autocoder/common/agent_events/__init__.py +52 -0
- autocoder/common/agent_events/agent_event_emitter.py +193 -0
- autocoder/common/agent_events/event_factory.py +177 -0
- autocoder/common/agent_events/examples.py +307 -0
- autocoder/common/agent_events/types.py +113 -0
- autocoder/common/agent_events/utils.py +68 -0
- autocoder/common/agent_hooks/__init__.py +44 -0
- autocoder/common/agent_hooks/examples.py +582 -0
- autocoder/common/agent_hooks/hook_executor.py +217 -0
- autocoder/common/agent_hooks/hook_manager.py +288 -0
- autocoder/common/agent_hooks/types.py +133 -0
- autocoder/common/agent_hooks/utils.py +99 -0
- autocoder/common/agent_query_queue/queue_executor.py +324 -0
- autocoder/common/agent_query_queue/queue_manager.py +325 -0
- autocoder/common/agents/__init__.py +11 -0
- autocoder/common/agents/agent_manager.py +323 -0
- autocoder/common/agents/agent_parser.py +189 -0
- autocoder/common/agents/example_usage.py +344 -0
- autocoder/common/agents/integration_example.py +330 -0
- autocoder/common/agents/test_agent_parser.py +545 -0
- autocoder/common/async_utils.py +101 -0
- autocoder/common/auto_coder_lang.py +23 -972
- autocoder/common/autocoderargs_parser/__init__.py +14 -0
- autocoder/common/autocoderargs_parser/parser.py +184 -0
- autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
- autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
- autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
- autocoder/common/autocoderargs_parser/token_parser.py +290 -0
- autocoder/common/buildin_tokenizer.py +2 -4
- autocoder/common/code_auto_generate.py +149 -74
- autocoder/common/code_auto_generate_diff.py +163 -70
- autocoder/common/code_auto_generate_editblock.py +179 -89
- autocoder/common/code_auto_generate_strict_diff.py +167 -72
- autocoder/common/code_auto_merge_editblock.py +13 -6
- autocoder/common/code_modification_ranker.py +1 -1
- autocoder/common/command_completer.py +3 -3
- autocoder/common/command_file_manager/manager.py +183 -47
- autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
- autocoder/common/command_templates.py +1 -1
- autocoder/common/conf_utils.py +2 -4
- autocoder/common/conversations/config.py +11 -3
- autocoder/common/conversations/get_conversation_manager.py +100 -2
- autocoder/common/conversations/llm_stats_models.py +264 -0
- autocoder/common/conversations/manager.py +112 -28
- autocoder/common/conversations/models.py +16 -2
- autocoder/common/conversations/storage/index_manager.py +134 -10
- autocoder/common/core_config/__init__.py +63 -0
- autocoder/common/core_config/agentic_mode_manager.py +109 -0
- autocoder/common/core_config/base_manager.py +123 -0
- autocoder/common/core_config/compatibility.py +151 -0
- autocoder/common/core_config/config_manager.py +156 -0
- autocoder/common/core_config/conversation_manager.py +31 -0
- autocoder/common/core_config/exclude_manager.py +72 -0
- autocoder/common/core_config/file_manager.py +177 -0
- autocoder/common/core_config/human_as_model_manager.py +129 -0
- autocoder/common/core_config/lib_manager.py +54 -0
- autocoder/common/core_config/main_manager.py +81 -0
- autocoder/common/core_config/mode_manager.py +126 -0
- autocoder/common/core_config/models.py +70 -0
- autocoder/common/core_config/test_memory_manager.py +1056 -0
- autocoder/common/env_manager.py +282 -0
- autocoder/common/env_manager_usage_example.py +211 -0
- autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
- autocoder/common/file_checkpoint/manager.py +264 -48
- autocoder/common/file_checkpoint/test_backup.py +1 -18
- autocoder/common/file_checkpoint/test_manager.py +270 -1
- autocoder/common/file_checkpoint/test_store.py +1 -17
- autocoder/common/file_handler/__init__.py +23 -0
- autocoder/common/file_handler/active_context_handler.py +159 -0
- autocoder/common/file_handler/add_files_handler.py +409 -0
- autocoder/common/file_handler/chat_handler.py +180 -0
- autocoder/common/file_handler/coding_handler.py +409 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/git_utils.py +44 -8
- autocoder/common/global_cancel.py +15 -6
- autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
- autocoder/common/international/__init__.py +31 -0
- autocoder/common/international/demo_international.py +92 -0
- autocoder/common/international/message_manager.py +157 -0
- autocoder/common/international/messages/__init__.py +56 -0
- autocoder/common/international/messages/async_command_messages.py +507 -0
- autocoder/common/international/messages/auto_coder_messages.py +2208 -0
- autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
- autocoder/common/international/messages/command_help_messages.py +986 -0
- autocoder/common/international/messages/conversation_command_messages.py +191 -0
- autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
- autocoder/common/international/messages/queue_command_messages.py +751 -0
- autocoder/common/international/messages/rules_command_messages.py +77 -0
- autocoder/common/international/messages/sdk_messages.py +1707 -0
- autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
- autocoder/common/international/messages/tool_display_messages.py +1212 -0
- autocoder/common/international/messages/workflow_exception_messages.py +473 -0
- autocoder/common/international/test_international.py +612 -0
- autocoder/common/linter_core/__init__.py +28 -0
- autocoder/common/linter_core/base_linter.py +61 -0
- autocoder/common/linter_core/config_loader.py +271 -0
- autocoder/common/linter_core/formatters/__init__.py +0 -0
- autocoder/common/linter_core/formatters/base_formatter.py +38 -0
- autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
- autocoder/common/linter_core/linter.py +166 -0
- autocoder/common/linter_core/linter_factory.py +216 -0
- autocoder/common/linter_core/linter_manager.py +333 -0
- autocoder/common/linter_core/linters/__init__.py +9 -0
- autocoder/common/linter_core/linters/java_linter.py +342 -0
- autocoder/common/linter_core/linters/python_linter.py +115 -0
- autocoder/common/linter_core/linters/typescript_linter.py +119 -0
- autocoder/common/linter_core/models/__init__.py +7 -0
- autocoder/common/linter_core/models/lint_result.py +91 -0
- autocoder/common/linter_core/models.py +33 -0
- autocoder/common/linter_core/tests/__init__.py +3 -0
- autocoder/common/linter_core/tests/test_config_loader.py +323 -0
- autocoder/common/linter_core/tests/test_config_loading.py +308 -0
- autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
- autocoder/common/linter_core/tests/test_formatters.py +147 -0
- autocoder/common/linter_core/tests/test_integration.py +317 -0
- autocoder/common/linter_core/tests/test_java_linter.py +496 -0
- autocoder/common/linter_core/tests/test_linters.py +265 -0
- autocoder/common/linter_core/tests/test_models.py +81 -0
- autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
- autocoder/common/linter_core/tests/verify_fixes.py +183 -0
- autocoder/common/llm_friendly_package/__init__.py +31 -0
- autocoder/common/llm_friendly_package/base_manager.py +102 -0
- autocoder/common/llm_friendly_package/docs_manager.py +121 -0
- autocoder/common/llm_friendly_package/library_manager.py +171 -0
- autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
- autocoder/common/llm_friendly_package/models.py +40 -0
- autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
- autocoder/common/llms/__init__.py +15 -0
- autocoder/common/llms/demo_error_handling.py +85 -0
- autocoder/common/llms/factory.py +142 -0
- autocoder/common/llms/manager.py +264 -0
- autocoder/common/llms/pricing.py +121 -0
- autocoder/common/llms/registry.py +316 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +651 -102
- autocoder/common/pruner/conversation_message_ids_api.py +386 -0
- autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
- autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
- autocoder/common/pruner/conversation_normalizer.py +347 -0
- autocoder/common/pruner/conversation_pruner.py +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
- autocoder/common/pruner/test_conversation_normalizer.py +502 -0
- autocoder/common/pruner/test_tool_content_detector.py +324 -0
- autocoder/common/pruner/tool_content_detector.py +227 -0
- autocoder/common/pruner/tools/__init__.py +18 -0
- autocoder/common/pruner/tools/query_message_ids.py +264 -0
- autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
- autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
- autocoder/common/pull_requests/__init__.py +9 -1
- autocoder/common/pull_requests/utils.py +122 -1
- autocoder/common/rag_manager/rag_manager.py +36 -40
- autocoder/common/rulefiles/__init__.py +53 -1
- autocoder/common/rulefiles/api.py +250 -0
- autocoder/common/rulefiles/core/__init__.py +14 -0
- autocoder/common/rulefiles/core/manager.py +241 -0
- autocoder/common/rulefiles/core/selector.py +805 -0
- autocoder/common/rulefiles/models/__init__.py +20 -0
- autocoder/common/rulefiles/models/index.py +16 -0
- autocoder/common/rulefiles/models/init_rule.py +18 -0
- autocoder/common/rulefiles/models/rule_file.py +18 -0
- autocoder/common/rulefiles/models/rule_relevance.py +14 -0
- autocoder/common/rulefiles/models/summary.py +16 -0
- autocoder/common/rulefiles/test_rulefiles.py +776 -0
- autocoder/common/rulefiles/utils/__init__.py +34 -0
- autocoder/common/rulefiles/utils/monitor.py +86 -0
- autocoder/common/rulefiles/utils/parser.py +230 -0
- autocoder/common/save_formatted_log.py +67 -10
- autocoder/common/search_replace.py +8 -1
- autocoder/common/search_replace_patch/__init__.py +24 -0
- autocoder/common/search_replace_patch/base.py +115 -0
- autocoder/common/search_replace_patch/manager.py +248 -0
- autocoder/common/search_replace_patch/patch_replacer.py +304 -0
- autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
- autocoder/common/search_replace_patch/string_replacer.py +181 -0
- autocoder/common/search_replace_patch/tests/__init__.py +3 -0
- autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
- autocoder/common/search_replace_patch/tests/test_base.py +188 -0
- autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
- autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
- autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
- autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
- autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
- autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
- autocoder/common/shell_commands/__init__.py +197 -0
- autocoder/common/shell_commands/background_process_notifier.py +346 -0
- autocoder/common/shell_commands/command_executor.py +1127 -0
- autocoder/common/shell_commands/error_recovery.py +541 -0
- autocoder/common/shell_commands/exceptions.py +120 -0
- autocoder/common/shell_commands/interactive_executor.py +476 -0
- autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
- autocoder/common/shell_commands/interactive_process.py +744 -0
- autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
- autocoder/common/shell_commands/monitoring.py +529 -0
- autocoder/common/shell_commands/process_cleanup.py +386 -0
- autocoder/common/shell_commands/process_manager.py +606 -0
- autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
- autocoder/common/shell_commands/tests/__init__.py +6 -0
- autocoder/common/shell_commands/tests/conftest.py +118 -0
- autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
- autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
- autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
- autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
- autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
- autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
- autocoder/common/shell_commands/tests/test_integration.py +664 -0
- autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
- autocoder/common/shell_commands/tests/test_performance.py +632 -0
- autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
- autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
- autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
- autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
- autocoder/common/shell_commands/timeout_config.py +315 -0
- autocoder/common/shell_commands/timeout_manager.py +352 -0
- autocoder/common/terminal_paste/__init__.py +14 -0
- autocoder/common/terminal_paste/demo.py +145 -0
- autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
- autocoder/common/terminal_paste/paste_handler.py +200 -0
- autocoder/common/terminal_paste/paste_manager.py +118 -0
- autocoder/common/terminal_paste/tests/__init__.py +1 -0
- autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
- autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
- autocoder/common/terminal_paste/utils.py +163 -0
- autocoder/common/test_autocoder_args.py +232 -0
- autocoder/common/test_env_manager.py +173 -0
- autocoder/common/test_env_manager_integration.py +159 -0
- autocoder/common/text_similarity/__init__.py +9 -0
- autocoder/common/text_similarity/demo.py +216 -0
- autocoder/common/text_similarity/examples.py +266 -0
- autocoder/common/text_similarity/test_text_similarity.py +306 -0
- autocoder/common/text_similarity/text_similarity.py +194 -0
- autocoder/common/text_similarity/utils.py +125 -0
- autocoder/common/todos/__init__.py +61 -0
- autocoder/common/todos/cache/__init__.py +16 -0
- autocoder/common/todos/cache/base_cache.py +89 -0
- autocoder/common/todos/cache/cache_manager.py +228 -0
- autocoder/common/todos/cache/memory_cache.py +225 -0
- autocoder/common/todos/config.py +155 -0
- autocoder/common/todos/exceptions.py +35 -0
- autocoder/common/todos/get_todo_manager.py +161 -0
- autocoder/common/todos/manager.py +537 -0
- autocoder/common/todos/models.py +239 -0
- autocoder/common/todos/storage/__init__.py +14 -0
- autocoder/common/todos/storage/base_storage.py +76 -0
- autocoder/common/todos/storage/file_storage.py +278 -0
- autocoder/common/tokens/counter.py +24 -2
- autocoder/common/tools_manager/__init__.py +17 -0
- autocoder/common/tools_manager/examples.py +162 -0
- autocoder/common/tools_manager/manager.py +385 -0
- autocoder/common/tools_manager/models.py +39 -0
- autocoder/common/tools_manager/test_tools_manager.py +303 -0
- autocoder/common/tools_manager/utils.py +191 -0
- autocoder/common/v2/agent/agentic_callbacks.py +270 -0
- autocoder/common/v2/agent/agentic_edit.py +2699 -1856
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
- autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
- autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
- autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +564 -29
- autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
- autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
- autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
- autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +356 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
- autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +410 -86
- autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +207 -192
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
- autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
- autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
- autocoder/common/v2/agent/agentic_edit_types.py +343 -9
- autocoder/common/v2/agent/runner/__init__.py +3 -3
- autocoder/common/v2/agent/runner/base_runner.py +12 -26
- autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
- autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
- autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
- autocoder/common/v2/agent/runner/tool_display.py +557 -159
- autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
- autocoder/common/v2/agent/test_agentic_edit.py +194 -0
- autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
- autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
- autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
- autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
- autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
- autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
- autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
- autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
- autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
- autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
- autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
- autocoder/common/v2/code_auto_generate.py +136 -78
- autocoder/common/v2/code_auto_generate_diff.py +135 -79
- autocoder/common/v2/code_auto_generate_editblock.py +174 -99
- autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
- autocoder/common/v2/code_auto_merge.py +1 -1
- autocoder/common/v2/code_auto_merge_editblock.py +13 -1
- autocoder/common/v2/code_diff_manager.py +3 -3
- autocoder/common/v2/code_editblock_manager.py +4 -14
- autocoder/common/v2/code_manager.py +1 -1
- autocoder/common/v2/code_strict_diff_manager.py +2 -2
- autocoder/common/wrap_llm_hint/__init__.py +10 -0
- autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
- autocoder/common/wrap_llm_hint/utils.py +432 -0
- autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
- autocoder/completer/__init__.py +8 -0
- autocoder/completer/command_completer_v2.py +1094 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +400 -129
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +117 -125
- autocoder/{agent → index/filter}/agentic_filter.py +322 -333
- autocoder/index/filter/normal_filter.py +5 -11
- autocoder/index/filter/quick_filter.py +1 -1
- autocoder/index/index.py +36 -9
- autocoder/index/tests/__init__.py +1 -0
- autocoder/index/tests/run_tests.py +195 -0
- autocoder/index/tests/test_entry.py +303 -0
- autocoder/index/tests/test_index_manager.py +314 -0
- autocoder/index/tests/test_module_integration.py +300 -0
- autocoder/index/tests/test_symbols_utils.py +183 -0
- autocoder/inner/__init__.py +4 -0
- autocoder/inner/agentic.py +923 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +65 -46
- autocoder/pyproject/__init__.py +32 -29
- autocoder/rag/agentic_rag.py +215 -75
- autocoder/rag/cache/simple_cache.py +1 -2
- autocoder/rag/loaders/image_loader.py +1 -1
- autocoder/rag/long_context_rag.py +42 -26
- autocoder/rag/qa_conversation_strategy.py +1 -1
- autocoder/rag/terminal/__init__.py +17 -0
- autocoder/rag/terminal/args.py +581 -0
- autocoder/rag/terminal/bootstrap.py +61 -0
- autocoder/rag/terminal/command_handlers.py +653 -0
- autocoder/rag/terminal/formatters/__init__.py +20 -0
- autocoder/rag/terminal/formatters/base.py +70 -0
- autocoder/rag/terminal/formatters/json_format.py +66 -0
- autocoder/rag/terminal/formatters/stream_json.py +95 -0
- autocoder/rag/terminal/formatters/text.py +28 -0
- autocoder/rag/terminal/init.py +120 -0
- autocoder/rag/terminal/utils.py +106 -0
- autocoder/rag/test_agentic_rag.py +389 -0
- autocoder/rag/test_doc_filter.py +3 -3
- autocoder/rag/test_long_context_rag.py +1 -1
- autocoder/rag/test_token_limiter.py +517 -10
- autocoder/rag/token_counter.py +3 -0
- autocoder/rag/token_limiter.py +19 -15
- autocoder/rag/tools/__init__.py +26 -2
- autocoder/rag/tools/bochaai_example.py +343 -0
- autocoder/rag/tools/bochaai_sdk.py +541 -0
- autocoder/rag/tools/metaso_example.py +268 -0
- autocoder/rag/tools/metaso_sdk.py +417 -0
- autocoder/rag/tools/recall_tool.py +28 -7
- autocoder/rag/tools/run_integration_tests.py +204 -0
- autocoder/rag/tools/test_all_providers.py +318 -0
- autocoder/rag/tools/test_bochaai_integration.py +482 -0
- autocoder/rag/tools/test_final_integration.py +215 -0
- autocoder/rag/tools/test_metaso_integration.py +424 -0
- autocoder/rag/tools/test_metaso_real.py +171 -0
- autocoder/rag/tools/test_web_crawl_tool.py +639 -0
- autocoder/rag/tools/test_web_search_tool.py +509 -0
- autocoder/rag/tools/todo_read_tool.py +202 -0
- autocoder/rag/tools/todo_write_tool.py +412 -0
- autocoder/rag/tools/web_crawl_tool.py +634 -0
- autocoder/rag/tools/web_search_tool.py +558 -0
- autocoder/rag/tools/web_tools_example.py +119 -0
- autocoder/rag/types.py +16 -0
- autocoder/rag/variable_holder.py +4 -2
- autocoder/rags.py +86 -79
- autocoder/regexproject/__init__.py +23 -21
- autocoder/sdk/__init__.py +46 -190
- autocoder/sdk/api.py +370 -0
- autocoder/sdk/async_runner/__init__.py +26 -0
- autocoder/sdk/async_runner/async_executor.py +650 -0
- autocoder/sdk/async_runner/async_handler.py +356 -0
- autocoder/sdk/async_runner/markdown_processor.py +595 -0
- autocoder/sdk/async_runner/task_metadata.py +284 -0
- autocoder/sdk/async_runner/worktree_manager.py +438 -0
- autocoder/sdk/cli/__init__.py +2 -5
- autocoder/sdk/cli/formatters.py +28 -204
- autocoder/sdk/cli/handlers.py +77 -44
- autocoder/sdk/cli/main.py +154 -171
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -109
- autocoder/sdk/core/bridge.py +297 -115
- autocoder/sdk/exceptions.py +18 -12
- autocoder/sdk/formatters/__init__.py +19 -0
- autocoder/sdk/formatters/input.py +64 -0
- autocoder/sdk/formatters/output.py +247 -0
- autocoder/sdk/formatters/stream.py +54 -0
- autocoder/sdk/models/__init__.py +6 -5
- autocoder/sdk/models/options.py +55 -18
- autocoder/sdk/utils/formatters.py +27 -195
- autocoder/suffixproject/__init__.py +28 -25
- autocoder/terminal/__init__.py +14 -0
- autocoder/terminal/app.py +454 -0
- autocoder/terminal/args.py +32 -0
- autocoder/terminal/bootstrap.py +178 -0
- autocoder/terminal/command_processor.py +521 -0
- autocoder/terminal/command_registry.py +57 -0
- autocoder/terminal/help.py +97 -0
- autocoder/terminal/tasks/__init__.py +5 -0
- autocoder/terminal/tasks/background.py +77 -0
- autocoder/terminal/tasks/task_event.py +70 -0
- autocoder/terminal/ui/__init__.py +13 -0
- autocoder/terminal/ui/completer.py +268 -0
- autocoder/terminal/ui/keybindings.py +75 -0
- autocoder/terminal/ui/session.py +41 -0
- autocoder/terminal/ui/toolbar.py +64 -0
- autocoder/terminal/utils/__init__.py +13 -0
- autocoder/terminal/utils/errors.py +18 -0
- autocoder/terminal/utils/paths.py +19 -0
- autocoder/terminal/utils/shell.py +43 -0
- autocoder/terminal_v3/__init__.py +10 -0
- autocoder/terminal_v3/app.py +201 -0
- autocoder/terminal_v3/handlers/__init__.py +5 -0
- autocoder/terminal_v3/handlers/command_handler.py +131 -0
- autocoder/terminal_v3/models/__init__.py +6 -0
- autocoder/terminal_v3/models/conversation_buffer.py +214 -0
- autocoder/terminal_v3/models/message.py +50 -0
- autocoder/terminal_v3/models/tool_display.py +247 -0
- autocoder/terminal_v3/ui/__init__.py +7 -0
- autocoder/terminal_v3/ui/keybindings.py +56 -0
- autocoder/terminal_v3/ui/layout.py +141 -0
- autocoder/terminal_v3/ui/styles.py +43 -0
- autocoder/tsproject/__init__.py +23 -23
- autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
- autocoder/utils/llms.py +88 -80
- autocoder/utils/math_utils.py +101 -0
- autocoder/utils/model_provider_selector.py +16 -4
- autocoder/utils/operate_config_api.py +33 -5
- autocoder/utils/thread_utils.py +2 -2
- autocoder/version.py +4 -2
- autocoder/workflow_agents/__init__.py +84 -0
- autocoder/workflow_agents/agent.py +143 -0
- autocoder/workflow_agents/exceptions.py +573 -0
- autocoder/workflow_agents/executor.py +665 -0
- autocoder/workflow_agents/loader.py +749 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +173 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-1.0.0.dist-info/METADATA +0 -396
- auto_coder-1.0.0.dist-info/RECORD +0 -442
- auto_coder-1.0.0.dist-info/licenses/LICENSE +0 -201
- autocoder/auto_coder_server.py +0 -672
- autocoder/benchmark.py +0 -138
- autocoder/common/ac_style_command_parser/example.py +0 -7
- autocoder/common/cleaner.py +0 -31
- autocoder/common/command_completer_v2.py +0 -615
- autocoder/common/context_pruner.py +0 -477
- autocoder/common/conversation_pruner.py +0 -132
- autocoder/common/directory_cache/__init__.py +0 -1
- autocoder/common/directory_cache/cache.py +0 -192
- autocoder/common/directory_cache/test_cache.py +0 -190
- autocoder/common/file_checkpoint/examples.py +0 -217
- autocoder/common/llm_friendly_package_example.py +0 -138
- autocoder/common/llm_friendly_package_test.py +0 -63
- autocoder/common/pull_requests/test_module.py +0 -1
- autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
- autocoder/common/text.py +0 -30
- autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
- autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
- autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
- autocoder/common/v2/agent/agentic_tool_display.py +0 -183
- autocoder/plugins/dynamic_completion_example.py +0 -148
- autocoder/plugins/sample_plugin.py +0 -160
- autocoder/sdk/cli/__main__.py +0 -26
- autocoder/sdk/cli/completion_wrapper.py +0 -38
- autocoder/sdk/cli/install_completion.py +0 -301
- autocoder/sdk/models/messages.py +0 -209
- autocoder/sdk/session/__init__.py +0 -32
- autocoder/sdk/session/session.py +0 -106
- autocoder/sdk/session/session_manager.py +0 -56
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Core Project Tracker Implementation
|
|
3
|
+
|
|
4
|
+
Uses AgenticEdit to perform intelligent project exploration and analysis.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import time
|
|
9
|
+
import json
|
|
10
|
+
from typing import List, Dict, Any, Optional, Generator
|
|
11
|
+
from loguru import logger
|
|
12
|
+
from rich.console import Console
|
|
13
|
+
|
|
14
|
+
from autocoder.common import AutoCoderArgs
|
|
15
|
+
from autocoder.common.v2.agent.agentic_edit import AgenticEdit
|
|
16
|
+
from autocoder.common.v2.agent.agentic_edit_types import (
|
|
17
|
+
AgenticEditRequest,
|
|
18
|
+
AgenticEditConversationConfig,
|
|
19
|
+
ConversationAction
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
from autocoder.utils.llms import get_single_llm
|
|
23
|
+
|
|
24
|
+
from .types import (
|
|
25
|
+
ProjectTrackerRequest,
|
|
26
|
+
ProjectTrackerResponse,
|
|
27
|
+
ExplorationResult,
|
|
28
|
+
ExplorationMode,
|
|
29
|
+
ModuleInfo
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
class ProjectTracker:
|
|
33
|
+
"""
|
|
34
|
+
Core project tracker that uses AgenticEdit to analyze and explore projects.
|
|
35
|
+
|
|
36
|
+
This class provides intelligent project exploration capabilities by leveraging
|
|
37
|
+
the AgenticEdit system to understand AC modules, project structure, and provide
|
|
38
|
+
insights for faster development workflows.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def __init__(self, args: AutoCoderArgs, llm=None):
|
|
42
|
+
"""
|
|
43
|
+
Initialize the project tracker.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
args: AutoCoder arguments configuration
|
|
47
|
+
llm: Language model instance (optional, will create if not provided)
|
|
48
|
+
"""
|
|
49
|
+
self.args = args
|
|
50
|
+
if llm is None:
|
|
51
|
+
self.llm = get_single_llm(
|
|
52
|
+
args.code_model or args.model,
|
|
53
|
+
product_mode=args.product_mode
|
|
54
|
+
)
|
|
55
|
+
else:
|
|
56
|
+
self.llm = llm
|
|
57
|
+
|
|
58
|
+
# Initialize AgenticEdit for exploration
|
|
59
|
+
self.agentic_edit = None
|
|
60
|
+
|
|
61
|
+
def _create_exploration_prompt(self, request: ProjectTrackerRequest) -> str:
|
|
62
|
+
"""
|
|
63
|
+
Create a comprehensive prompt for project exploration based on the request mode.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
request: Project tracker request with exploration parameters
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
Formatted prompt string for AgenticEdit
|
|
70
|
+
"""
|
|
71
|
+
base_prompt = """
|
|
72
|
+
You are an expert project analyst tasked with exploring and understanding this project structure.
|
|
73
|
+
Your goal is to provide comprehensive insights that will help developers quickly understand the
|
|
74
|
+
project and make informed decisions about future modifications.
|
|
75
|
+
|
|
76
|
+
## Primary Objectives:
|
|
77
|
+
|
|
78
|
+
1. **AC Module Discovery**: Find and analyze all AC modules (directories with .ac.mod.md files)
|
|
79
|
+
2. **Project Structure Analysis**: Understand the overall project organization
|
|
80
|
+
3. **Dependency Mapping**: Identify relationships between modules and components
|
|
81
|
+
4. **Key Insights**: Provide actionable insights for development efficiency
|
|
82
|
+
5. **Recommendations**: Suggest areas for improvement or optimization
|
|
83
|
+
|
|
84
|
+
## Analysis Instructions:
|
|
85
|
+
|
|
86
|
+
### Step 1: AC Module Discovery
|
|
87
|
+
Use the `ac_mod_list` tool to find all AC modules in the project. For each AC module found:
|
|
88
|
+
- Use `ac_mod_read` to read the module documentation
|
|
89
|
+
- Extract key information: purpose, features, dependencies, APIs
|
|
90
|
+
- Note verification commands and testing approaches
|
|
91
|
+
|
|
92
|
+
### Step 2: Project Structure Exploration
|
|
93
|
+
Use `list_files` and `read_file` tools to explore:
|
|
94
|
+
- Main project directories and their purposes
|
|
95
|
+
- Configuration files and their contents
|
|
96
|
+
- Key implementation files
|
|
97
|
+
- Documentation structure
|
|
98
|
+
|
|
99
|
+
### Step 3: Intelligent Analysis
|
|
100
|
+
Analyze the discovered information to:
|
|
101
|
+
- Identify patterns in module organization
|
|
102
|
+
- Map dependencies between AC modules
|
|
103
|
+
- Understand the project's architectural approach
|
|
104
|
+
- Identify potential areas for improvement
|
|
105
|
+
|
|
106
|
+
### Step 4: Generate Insights
|
|
107
|
+
Provide specific insights about:
|
|
108
|
+
- How AC modules work together
|
|
109
|
+
- Common patterns and conventions used
|
|
110
|
+
- Areas where new features could be added
|
|
111
|
+
- Potential optimization opportunities
|
|
112
|
+
|
|
113
|
+
## Output Requirements:
|
|
114
|
+
|
|
115
|
+
Provide a comprehensive analysis that includes:
|
|
116
|
+
1. **AC Modules Summary**: List of all AC modules with brief descriptions
|
|
117
|
+
2. **Project Architecture**: High-level understanding of project structure
|
|
118
|
+
3. **Dependency Graph**: Relationships between modules
|
|
119
|
+
4. **Key Features**: Important capabilities and patterns
|
|
120
|
+
5. **Development Recommendations**: Suggestions for efficient development
|
|
121
|
+
6. **Quick Reference**: Essential information for rapid development
|
|
122
|
+
|
|
123
|
+
## IMPORTANT: Generate Project Documentation File
|
|
124
|
+
|
|
125
|
+
After completing your analysis, you MUST use the `write_to_file` tool to create or update the file `.auto-coder/projects/AUTO-CODER.md` with a comprehensive project documentation that includes:
|
|
126
|
+
|
|
127
|
+
### File Structure for .auto-coder/projects/AUTO-CODER.md:
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
# AutoCoder Project Documentation
|
|
131
|
+
|
|
132
|
+
*Generated on: [CURRENT_DATE]*
|
|
133
|
+
|
|
134
|
+
## Project Overview
|
|
135
|
+
|
|
136
|
+
[Brief description of the AutoCoder project and its purpose]
|
|
137
|
+
|
|
138
|
+
## Architecture Summary
|
|
139
|
+
|
|
140
|
+
[High-level architecture description based on your analysis]
|
|
141
|
+
|
|
142
|
+
## AC Modules Overview
|
|
143
|
+
|
|
144
|
+
### Core Modules
|
|
145
|
+
[List and describe the most important AC modules]
|
|
146
|
+
|
|
147
|
+
### Support Modules
|
|
148
|
+
[List and describe supporting/utility AC modules]
|
|
149
|
+
|
|
150
|
+
### Experimental/Development Modules
|
|
151
|
+
[List any experimental or development-focused modules]
|
|
152
|
+
|
|
153
|
+
## Key Components and Patterns
|
|
154
|
+
|
|
155
|
+
[Describe the main architectural patterns and design principles used]
|
|
156
|
+
|
|
157
|
+
## Development Workflow
|
|
158
|
+
|
|
159
|
+
[Describe how development typically works in this project]
|
|
160
|
+
|
|
161
|
+
## Quick Start for New Developers
|
|
162
|
+
|
|
163
|
+
[Essential information for developers new to the project]
|
|
164
|
+
|
|
165
|
+
## Module Dependencies
|
|
166
|
+
|
|
167
|
+
[Key dependency relationships between AC modules]
|
|
168
|
+
|
|
169
|
+
## Recommended Development Practices
|
|
170
|
+
|
|
171
|
+
[Best practices derived from analyzing the codebase]
|
|
172
|
+
|
|
173
|
+
## Areas for Improvement
|
|
174
|
+
|
|
175
|
+
[Suggestions for project enhancement]
|
|
176
|
+
|
|
177
|
+
## Additional Resources
|
|
178
|
+
|
|
179
|
+
[Links to important documentation, tools, or references]
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Use the `write_to_file` tool with path `.auto-coder/projects/AUTO-CODER.md` and populate it with comprehensive, well-structured content based on your project analysis.
|
|
183
|
+
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
if request.mode == ExplorationMode.AC_MODULES_ONLY:
|
|
187
|
+
mode_specific = """
|
|
188
|
+
## Focus Mode: AC MODULES ONLY
|
|
189
|
+
|
|
190
|
+
Focus specifically on AC modules:
|
|
191
|
+
- Prioritize AC module discovery and analysis
|
|
192
|
+
- Deep dive into module documentation and relationships
|
|
193
|
+
- Understand the AC module ecosystem
|
|
194
|
+
- Provide detailed insights about module patterns and best practices
|
|
195
|
+
"""
|
|
196
|
+
elif request.mode == ExplorationMode.QUICK_OVERVIEW:
|
|
197
|
+
mode_specific = """
|
|
198
|
+
## Focus Mode: QUICK OVERVIEW
|
|
199
|
+
|
|
200
|
+
Provide a rapid but comprehensive overview:
|
|
201
|
+
- Quick scan of AC modules (focus on top-level information)
|
|
202
|
+
- High-level project structure understanding
|
|
203
|
+
- Key architectural insights
|
|
204
|
+
- Essential information for getting started quickly
|
|
205
|
+
"""
|
|
206
|
+
elif request.mode == ExplorationMode.TARGETED_SCAN:
|
|
207
|
+
target_info = f"Target paths: {request.target_paths}" if request.target_paths else ""
|
|
208
|
+
mode_specific = f"""
|
|
209
|
+
## Focus Mode: TARGETED SCAN
|
|
210
|
+
|
|
211
|
+
Focus on specific areas of the project:
|
|
212
|
+
{target_info}
|
|
213
|
+
- Concentrate analysis on specified paths or patterns
|
|
214
|
+
- Provide detailed insights for targeted areas
|
|
215
|
+
- Connect targeted areas to broader project context
|
|
216
|
+
"""
|
|
217
|
+
else: # FULL_SCAN
|
|
218
|
+
mode_specific = """
|
|
219
|
+
## Focus Mode: FULL SCAN
|
|
220
|
+
|
|
221
|
+
Perform comprehensive project analysis:
|
|
222
|
+
- Complete AC module discovery and analysis
|
|
223
|
+
- Thorough project structure exploration
|
|
224
|
+
- Detailed dependency mapping
|
|
225
|
+
- Comprehensive insights and recommendations
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
custom_instructions = ""
|
|
229
|
+
if request.custom_prompt:
|
|
230
|
+
custom_instructions = f"""
|
|
231
|
+
## Additional Instructions:
|
|
232
|
+
{request.custom_prompt}
|
|
233
|
+
"""
|
|
234
|
+
|
|
235
|
+
return f"{base_prompt}\n{mode_specific}\n{custom_instructions}\n"
|
|
236
|
+
|
|
237
|
+
def explore_project(self, request: ProjectTrackerRequest) -> ProjectTrackerResponse:
|
|
238
|
+
"""
|
|
239
|
+
Perform project exploration using AgenticEdit.
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
request: Project tracking request with exploration parameters
|
|
243
|
+
|
|
244
|
+
Returns:
|
|
245
|
+
ProjectTrackerResponse with exploration results
|
|
246
|
+
"""
|
|
247
|
+
start_time = time.time()
|
|
248
|
+
|
|
249
|
+
try:
|
|
250
|
+
# Create conversation configuration
|
|
251
|
+
conversation_config = AgenticEditConversationConfig(
|
|
252
|
+
action=ConversationAction.NEW,
|
|
253
|
+
query=f"Project exploration - {request.mode.value}"
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
# Check LLM is available
|
|
257
|
+
if self.llm is None:
|
|
258
|
+
raise ValueError("LLM is not available for project exploration")
|
|
259
|
+
|
|
260
|
+
# Initialize AgenticEdit
|
|
261
|
+
self.agentic_edit = AgenticEdit(
|
|
262
|
+
llm=self.llm,
|
|
263
|
+
args=self.args,
|
|
264
|
+
conversation_config=conversation_config
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
# Create exploration prompt
|
|
268
|
+
exploration_prompt = self._create_exploration_prompt(request)
|
|
269
|
+
|
|
270
|
+
# Create AgenticEdit request
|
|
271
|
+
agentic_request = AgenticEditRequest(user_input=exploration_prompt)
|
|
272
|
+
|
|
273
|
+
# Execute exploration
|
|
274
|
+
console = Console()
|
|
275
|
+
console.print(f"[bold cyan]Starting project exploration with mode: {request.mode}[/]")
|
|
276
|
+
|
|
277
|
+
# Process events with simple printing and collect them
|
|
278
|
+
exploration_events = []
|
|
279
|
+
event_stream = self.agentic_edit.analyze(agentic_request)
|
|
280
|
+
|
|
281
|
+
for event in event_stream:
|
|
282
|
+
# Collect all events for later processing
|
|
283
|
+
exploration_events.append(event)
|
|
284
|
+
|
|
285
|
+
# Simple printing based on event type (simplified version of terminal_runner)
|
|
286
|
+
if hasattr(event, '__class__'):
|
|
287
|
+
event_name = event.__class__.__name__
|
|
288
|
+
|
|
289
|
+
if 'ConversationId' in event_name:
|
|
290
|
+
conversation_id = getattr(event, 'conversation_id', 'unknown')
|
|
291
|
+
console.print(f"[dim]Conversation ID: {conversation_id}[/dim]")
|
|
292
|
+
elif 'TokenUsage' in event_name:
|
|
293
|
+
console.print("[dim]💰 Token usage recorded[/dim]")
|
|
294
|
+
elif 'LLMThinking' in event_name:
|
|
295
|
+
# Show thinking indicator
|
|
296
|
+
console.print("[grey50]🤔 Thinking...[/grey50]", end="")
|
|
297
|
+
elif 'LLMOutput' in event_name:
|
|
298
|
+
# Show brief output indicator
|
|
299
|
+
console.print("[dim]✏️ Generating response...[/dim]")
|
|
300
|
+
elif 'ToolCall' in event_name:
|
|
301
|
+
tool = getattr(event, 'tool', {})
|
|
302
|
+
if hasattr(tool, '__class__'):
|
|
303
|
+
tool_name = tool.__class__.__name__
|
|
304
|
+
console.print(f"[blue]🔧 Tool: {tool_name}[/blue]")
|
|
305
|
+
else:
|
|
306
|
+
console.print("[blue]🔧 Tool called[/blue]")
|
|
307
|
+
elif 'ToolResult' in event_name:
|
|
308
|
+
result = getattr(event, 'result', None)
|
|
309
|
+
if result and hasattr(result, 'success'):
|
|
310
|
+
if result.success:
|
|
311
|
+
tool_name = getattr(event, 'tool_name', 'Unknown')
|
|
312
|
+
console.print(f"[green]✅ {tool_name}: Success[/green]")
|
|
313
|
+
else:
|
|
314
|
+
tool_name = getattr(event, 'tool_name', 'Unknown')
|
|
315
|
+
console.print(f"[red]❌ {tool_name}: Failed[/red]")
|
|
316
|
+
else:
|
|
317
|
+
console.print("[dim]📋 Tool result received[/dim]")
|
|
318
|
+
elif 'Completion' in event_name:
|
|
319
|
+
console.print("[bold green]🏁 Task completion[/bold green]")
|
|
320
|
+
elif 'Error' in event_name:
|
|
321
|
+
error_msg = getattr(event, 'message', 'Unknown error')
|
|
322
|
+
console.print(f"[bold red]🔥 Error: {error_msg}[/bold red]")
|
|
323
|
+
else:
|
|
324
|
+
console.print(f"[dim]📝 Event: {event_name}[/dim]")
|
|
325
|
+
|
|
326
|
+
console.print("[bold cyan]Project exploration completed[/]")
|
|
327
|
+
|
|
328
|
+
# Process the results
|
|
329
|
+
exploration_result = self._process_exploration_results(
|
|
330
|
+
exploration_events, request.mode, start_time
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
execution_time = time.time() - start_time
|
|
334
|
+
|
|
335
|
+
# Get conversation ID for future reference
|
|
336
|
+
conversation_id = self.agentic_edit.conversation_manager.get_current_conversation_id()
|
|
337
|
+
|
|
338
|
+
return ProjectTrackerResponse(
|
|
339
|
+
success=True,
|
|
340
|
+
exploration_result=exploration_result,
|
|
341
|
+
conversation_id=conversation_id,
|
|
342
|
+
execution_time=execution_time
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
except Exception as e:
|
|
346
|
+
execution_time = time.time() - start_time
|
|
347
|
+
logger.error(f"Project exploration failed: {str(e)}")
|
|
348
|
+
|
|
349
|
+
return ProjectTrackerResponse(
|
|
350
|
+
success=False,
|
|
351
|
+
error_message=str(e),
|
|
352
|
+
execution_time=execution_time
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
def _process_exploration_results(
|
|
356
|
+
self,
|
|
357
|
+
events: List[Any],
|
|
358
|
+
mode: ExplorationMode,
|
|
359
|
+
start_time: float
|
|
360
|
+
) -> ExplorationResult:
|
|
361
|
+
"""
|
|
362
|
+
Process exploration events and extract meaningful results.
|
|
363
|
+
|
|
364
|
+
Args:
|
|
365
|
+
events: List of events from AgenticEdit exploration
|
|
366
|
+
mode: Exploration mode used
|
|
367
|
+
start_time: Start time of exploration
|
|
368
|
+
|
|
369
|
+
Returns:
|
|
370
|
+
ExplorationResult with processed information
|
|
371
|
+
"""
|
|
372
|
+
modules_found = []
|
|
373
|
+
project_structure = {}
|
|
374
|
+
key_insights = []
|
|
375
|
+
recommendations = []
|
|
376
|
+
analysis_summary = ""
|
|
377
|
+
|
|
378
|
+
# Process events to extract information
|
|
379
|
+
for event in events:
|
|
380
|
+
try:
|
|
381
|
+
if hasattr(event, 'type') and hasattr(event, 'content'):
|
|
382
|
+
# Process different event types
|
|
383
|
+
if 'completion' in str(event.type).lower():
|
|
384
|
+
# Extract final analysis from completion events
|
|
385
|
+
content = getattr(event, 'content', '')
|
|
386
|
+
if content:
|
|
387
|
+
analysis_summary += content + "\n"
|
|
388
|
+
|
|
389
|
+
elif 'tool_result' in str(event.type).lower():
|
|
390
|
+
# Process tool results for structured data
|
|
391
|
+
self._extract_tool_results(event, modules_found, project_structure)
|
|
392
|
+
|
|
393
|
+
except Exception as e:
|
|
394
|
+
logger.warning(f"Failed to process event: {e}")
|
|
395
|
+
continue
|
|
396
|
+
|
|
397
|
+
# Extract insights from analysis summary
|
|
398
|
+
if analysis_summary:
|
|
399
|
+
key_insights, recommendations = self._extract_insights_from_summary(analysis_summary)
|
|
400
|
+
|
|
401
|
+
exploration_time = time.time() - start_time
|
|
402
|
+
|
|
403
|
+
return ExplorationResult(
|
|
404
|
+
success=True,
|
|
405
|
+
mode=mode,
|
|
406
|
+
modules_found=modules_found,
|
|
407
|
+
project_structure=project_structure,
|
|
408
|
+
key_insights=key_insights,
|
|
409
|
+
recommendations=recommendations,
|
|
410
|
+
analysis_summary=analysis_summary,
|
|
411
|
+
exploration_time=exploration_time
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
def _extract_tool_results(self, event: Any, modules_found: List[ModuleInfo], project_structure: Dict[str, Any]):
|
|
415
|
+
"""Extract information from tool result events."""
|
|
416
|
+
try:
|
|
417
|
+
# This is a simplified extraction - in a real implementation,
|
|
418
|
+
# you would parse the specific tool results based on their types
|
|
419
|
+
content = getattr(event, 'content', '')
|
|
420
|
+
|
|
421
|
+
# Look for AC module information
|
|
422
|
+
if '.ac.mod.md' in content:
|
|
423
|
+
# Extract module info (simplified)
|
|
424
|
+
# In practice, you'd parse the actual tool results
|
|
425
|
+
pass
|
|
426
|
+
|
|
427
|
+
except Exception as e:
|
|
428
|
+
logger.debug(f"Failed to extract tool results: {e}")
|
|
429
|
+
|
|
430
|
+
def _extract_insights_from_summary(self, summary: str) -> tuple[List[str], List[str]]:
|
|
431
|
+
"""Extract insights and recommendations from analysis summary."""
|
|
432
|
+
insights = []
|
|
433
|
+
recommendations = []
|
|
434
|
+
|
|
435
|
+
# Simple extraction based on common patterns
|
|
436
|
+
lines = summary.split('\n')
|
|
437
|
+
current_section = None
|
|
438
|
+
|
|
439
|
+
for line in lines:
|
|
440
|
+
line = line.strip()
|
|
441
|
+
if not line:
|
|
442
|
+
continue
|
|
443
|
+
|
|
444
|
+
# Look for section headers
|
|
445
|
+
if 'insight' in line.lower() or 'key point' in line.lower():
|
|
446
|
+
current_section = 'insights'
|
|
447
|
+
elif 'recommend' in line.lower() or 'suggest' in line.lower():
|
|
448
|
+
current_section = 'recommendations'
|
|
449
|
+
elif line.startswith('- ') or line.startswith('* '):
|
|
450
|
+
# List item
|
|
451
|
+
item = line[2:].strip()
|
|
452
|
+
if current_section == 'insights' and item:
|
|
453
|
+
insights.append(item)
|
|
454
|
+
elif current_section == 'recommendations' and item:
|
|
455
|
+
recommendations.append(item)
|
|
456
|
+
|
|
457
|
+
return insights, recommendations
|
|
458
|
+
|
|
459
|
+
def get_project_overview(self) -> Dict[str, Any]:
|
|
460
|
+
"""
|
|
461
|
+
Get a quick project overview without full exploration.
|
|
462
|
+
|
|
463
|
+
Returns:
|
|
464
|
+
Dictionary with basic project information
|
|
465
|
+
"""
|
|
466
|
+
try:
|
|
467
|
+
# Quick scan for AC modules
|
|
468
|
+
ac_modules = []
|
|
469
|
+
source_dir = self.args.source_dir
|
|
470
|
+
if source_dir is None:
|
|
471
|
+
return {"error": "source_dir is not configured"}
|
|
472
|
+
|
|
473
|
+
for root, dirs, files in os.walk(source_dir):
|
|
474
|
+
if '.ac.mod.md' in files:
|
|
475
|
+
relative_path = os.path.relpath(root, source_dir)
|
|
476
|
+
ac_modules.append(relative_path)
|
|
477
|
+
|
|
478
|
+
return {
|
|
479
|
+
"source_dir": self.args.source_dir,
|
|
480
|
+
"ac_modules_found": len(ac_modules),
|
|
481
|
+
"ac_module_paths": ac_modules,
|
|
482
|
+
"project_type": getattr(self.args, 'project_type', 'unknown')
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
except Exception as e:
|
|
486
|
+
logger.error(f"Failed to get project overview: {e}")
|
|
487
|
+
return {"error": str(e)}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Type definitions for Project Tracker module
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
from typing import List, Dict, Any, Optional
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
class ExplorationMode(str, Enum):
|
|
10
|
+
"""Exploration modes for project tracking"""
|
|
11
|
+
FULL_SCAN = "full_scan" # Complete project scan
|
|
12
|
+
AC_MODULES_ONLY = "ac_modules_only" # Only scan AC modules
|
|
13
|
+
TARGETED_SCAN = "targeted_scan" # Target specific areas
|
|
14
|
+
QUICK_OVERVIEW = "quick_overview" # Quick project overview
|
|
15
|
+
|
|
16
|
+
class ModuleInfo(BaseModel):
|
|
17
|
+
"""Information about an AC module"""
|
|
18
|
+
path: str
|
|
19
|
+
name: str
|
|
20
|
+
description: str
|
|
21
|
+
dependencies: List[str] = []
|
|
22
|
+
key_features: List[str] = []
|
|
23
|
+
verification_commands: List[str] = []
|
|
24
|
+
last_analyzed: Optional[str] = None
|
|
25
|
+
|
|
26
|
+
class ExplorationResult(BaseModel):
|
|
27
|
+
"""Result of project exploration"""
|
|
28
|
+
success: bool
|
|
29
|
+
mode: ExplorationMode
|
|
30
|
+
modules_found: List[ModuleInfo]
|
|
31
|
+
project_structure: Dict[str, Any]
|
|
32
|
+
key_insights: List[str]
|
|
33
|
+
recommendations: List[str]
|
|
34
|
+
analysis_summary: str
|
|
35
|
+
exploration_time: float
|
|
36
|
+
error_message: Optional[str] = None
|
|
37
|
+
|
|
38
|
+
class ProjectTrackerRequest(BaseModel):
|
|
39
|
+
"""Request for project tracking operation"""
|
|
40
|
+
mode: ExplorationMode = ExplorationMode.FULL_SCAN
|
|
41
|
+
target_paths: Optional[List[str]] = None
|
|
42
|
+
include_patterns: Optional[List[str]] = None
|
|
43
|
+
exclude_patterns: Optional[List[str]] = None
|
|
44
|
+
max_depth: Optional[int] = None
|
|
45
|
+
custom_prompt: Optional[str] = None
|
|
46
|
+
|
|
47
|
+
class ProjectTrackerResponse(BaseModel):
|
|
48
|
+
"""Response from project tracking operation"""
|
|
49
|
+
success: bool
|
|
50
|
+
exploration_result: Optional[ExplorationResult] = None
|
|
51
|
+
conversation_id: Optional[str] = None
|
|
52
|
+
error_message: Optional[str] = None
|
|
53
|
+
execution_time: float = 0.0
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pruner module for AutoCoder.
|
|
3
|
+
|
|
4
|
+
This module provides various conversation and content pruning capabilities including:
|
|
5
|
+
- Context pruning for file contents
|
|
6
|
+
- Conversation pruning for chat history
|
|
7
|
+
- Agentic conversation pruning for tool outputs
|
|
8
|
+
- Range-based conversation pruning with pair preservation
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# Core pruning classes
|
|
12
|
+
from .context_pruner import PruneContext
|
|
13
|
+
from .conversation_pruner import ConversationPruner
|
|
14
|
+
from .agentic_conversation_pruner import AgenticConversationPruner
|
|
15
|
+
from .tool_content_detector import ToolContentDetector
|
|
16
|
+
|
|
17
|
+
# Message IDs-based pruning (replacing range-based pruning)
|
|
18
|
+
from .conversation_message_ids_manager import (
|
|
19
|
+
ConversationMessageIds,
|
|
20
|
+
ConversationMessageIdsManager,
|
|
21
|
+
get_conversation_message_ids_manager
|
|
22
|
+
)
|
|
23
|
+
from .conversation_message_ids_api import (
|
|
24
|
+
ConversationMessageIdsAPI,
|
|
25
|
+
MessageIdsValidationResult,
|
|
26
|
+
MessageIdsParseResult,
|
|
27
|
+
get_conversation_message_ids_api
|
|
28
|
+
)
|
|
29
|
+
from .conversation_message_ids_pruner import (
|
|
30
|
+
ConversationMessageIdsPruner,
|
|
31
|
+
MessageIdsPruningResult,
|
|
32
|
+
MessagePair
|
|
33
|
+
)
|
|
34
|
+
from .conversation_normalizer import (
|
|
35
|
+
ConversationNormalizer,
|
|
36
|
+
NormalizationStrategy,
|
|
37
|
+
NormalizationResult
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
# Core pruning
|
|
42
|
+
"PruneContext",
|
|
43
|
+
"ConversationPruner",
|
|
44
|
+
"AgenticConversationPruner",
|
|
45
|
+
"ToolContentDetector",
|
|
46
|
+
|
|
47
|
+
# Message IDs-based pruning - Manager layer
|
|
48
|
+
"ConversationMessageIds",
|
|
49
|
+
"ConversationMessageIdsManager",
|
|
50
|
+
"get_conversation_message_ids_manager",
|
|
51
|
+
|
|
52
|
+
# Message IDs-based pruning - API layer
|
|
53
|
+
"ConversationMessageIdsAPI",
|
|
54
|
+
"MessageIdsValidationResult",
|
|
55
|
+
"MessageIdsParseResult",
|
|
56
|
+
"get_conversation_message_ids_api",
|
|
57
|
+
|
|
58
|
+
# Message IDs-based pruning - Pruner layer
|
|
59
|
+
"ConversationMessageIdsPruner",
|
|
60
|
+
"MessageIdsPruningResult",
|
|
61
|
+
"MessagePair",
|
|
62
|
+
|
|
63
|
+
# Conversation normalization
|
|
64
|
+
"ConversationNormalizer",
|
|
65
|
+
"NormalizationStrategy",
|
|
66
|
+
"NormalizationResult"
|
|
67
|
+
]
|