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
|
@@ -1,39 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
import os
|
|
3
1
|
import time
|
|
4
2
|
import json
|
|
5
|
-
from typing import Dict, Any, List
|
|
6
3
|
from rich.console import Console
|
|
7
4
|
from rich.panel import Panel
|
|
8
|
-
from rich.markdown import Markdown
|
|
9
|
-
from rich.live import Live
|
|
10
5
|
from prompt_toolkit import prompt
|
|
11
6
|
from prompt_toolkit.formatted_text import FormattedText
|
|
12
7
|
from loguru import logger
|
|
13
8
|
import byzerllm
|
|
14
|
-
|
|
9
|
+
from typing import Optional
|
|
15
10
|
from autocoder.common.auto_coder_lang import get_message
|
|
16
11
|
from autocoder.common.memory_manager import save_to_memory_file
|
|
17
12
|
from autocoder.common.utils_code_auto_generate import stream_chat_with_continue
|
|
18
13
|
from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
|
|
19
14
|
from autocoder.common.printer import Printer
|
|
20
|
-
from autocoder.
|
|
15
|
+
from autocoder.common.tokens import count_string_tokens as count_tokens
|
|
21
16
|
from autocoder.privacy.model_filter import ModelPathFilter
|
|
22
17
|
from autocoder.common.result_manager import ResultManager
|
|
23
18
|
from autocoder.events.event_manager_singleton import get_event_manager
|
|
24
19
|
from autocoder.events import event_content as EventContentCreator
|
|
25
20
|
from autocoder.events.event_types import EventMetadata
|
|
26
|
-
from autocoder.common.
|
|
27
|
-
from autocoder.common.
|
|
21
|
+
from autocoder.common.mcp_tools.server import get_mcp_server
|
|
22
|
+
from autocoder.common.mcp_tools.types import McpRequest
|
|
28
23
|
from autocoder.utils.llms import get_llm_names
|
|
29
|
-
from autocoder.utils.request_queue import (
|
|
30
|
-
request_queue,
|
|
31
|
-
RequestValue,
|
|
32
|
-
DefaultValue,
|
|
33
|
-
RequestOption,
|
|
34
|
-
)
|
|
35
24
|
from autocoder.run_context import get_run_context, RunMode
|
|
36
25
|
from autocoder.common.action_yml_file_manager import ActionYmlFileManager
|
|
26
|
+
from autocoder.common.conversations.get_conversation_manager import get_conversation_manager
|
|
37
27
|
|
|
38
28
|
|
|
39
29
|
class ChatAgent:
|
|
@@ -43,6 +33,18 @@ class ChatAgent:
|
|
|
43
33
|
self.raw_args = raw_args
|
|
44
34
|
self.console = Console()
|
|
45
35
|
self.result_manager = ResultManager()
|
|
36
|
+
self.conversation_manager = get_conversation_manager()
|
|
37
|
+
# 生成命名空间用于会话隔离
|
|
38
|
+
self.namespace = self._generate_namespace()
|
|
39
|
+
|
|
40
|
+
def _generate_namespace(self) -> Optional[str]:
|
|
41
|
+
"""
|
|
42
|
+
生成命名空间,用于会话隔离
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
str: 基于项目路径的命名空间
|
|
46
|
+
"""
|
|
47
|
+
return None
|
|
46
48
|
|
|
47
49
|
def run(self):
|
|
48
50
|
"""执行 chat 命令的主要逻辑"""
|
|
@@ -55,20 +57,26 @@ class ChatAgent:
|
|
|
55
57
|
for command in self.args.action:
|
|
56
58
|
commands_info[command] = {}
|
|
57
59
|
|
|
58
|
-
memory_dir = os.path.join(self.args.source_dir, ".auto-coder", "memory")
|
|
59
|
-
os.makedirs(memory_dir, exist_ok=True)
|
|
60
|
-
memory_file = os.path.join(memory_dir, "chat_history.json")
|
|
61
|
-
|
|
62
60
|
# 处理新会话
|
|
63
61
|
if self.args.new_session:
|
|
64
|
-
self._handle_new_session(
|
|
62
|
+
self._handle_new_session()
|
|
65
63
|
if not self.args.query or (self.args.query_prefix and self.args.query == self.args.query_prefix) or (self.args.query_suffix and self.args.query == self.args.query_suffix):
|
|
66
64
|
return
|
|
67
65
|
|
|
68
|
-
#
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
66
|
+
# 确保有当前会话,如果没有则创建
|
|
67
|
+
current_conversation_id = self.conversation_manager.get_current_conversation_id(self.namespace)
|
|
68
|
+
if not current_conversation_id:
|
|
69
|
+
current_conversation_id = self.conversation_manager.create_conversation(
|
|
70
|
+
name="Chat Session",
|
|
71
|
+
description="Auto-coder chat session"
|
|
72
|
+
)
|
|
73
|
+
self.conversation_manager.set_current_conversation(current_conversation_id, self.namespace)
|
|
74
|
+
|
|
75
|
+
# 添加用户消息到当前会话
|
|
76
|
+
self.conversation_manager.append_message_to_current(
|
|
77
|
+
role="user",
|
|
78
|
+
content=self.args.query,
|
|
79
|
+
namespace=self.namespace
|
|
72
80
|
)
|
|
73
81
|
|
|
74
82
|
# 获取聊天模型
|
|
@@ -78,11 +86,11 @@ class ChatAgent:
|
|
|
78
86
|
chat_llm = self.llm
|
|
79
87
|
|
|
80
88
|
# 构建对话上下文
|
|
81
|
-
loaded_conversations = self._build_conversations(commands_info
|
|
89
|
+
loaded_conversations = self._build_conversations(commands_info)
|
|
82
90
|
|
|
83
91
|
# 处理人工模型模式
|
|
84
92
|
if get_run_context().mode != RunMode.WEB and self.args.human_as_model:
|
|
85
|
-
return self._handle_human_as_model(loaded_conversations,
|
|
93
|
+
return self._handle_human_as_model(loaded_conversations, commands_info)
|
|
86
94
|
|
|
87
95
|
# 计算耗时
|
|
88
96
|
start_time = time.time()
|
|
@@ -118,33 +126,26 @@ class ChatAgent:
|
|
|
118
126
|
if last_meta:
|
|
119
127
|
self._print_stats(last_meta, start_time, model_name)
|
|
120
128
|
|
|
121
|
-
# 更新聊天历史
|
|
122
|
-
|
|
123
|
-
|
|
129
|
+
# 更新聊天历史 - 添加助手回复到当前会话
|
|
130
|
+
self.conversation_manager.append_message_to_current(
|
|
131
|
+
role="assistant",
|
|
132
|
+
content=assistant_response,
|
|
133
|
+
namespace=self.namespace
|
|
124
134
|
)
|
|
125
135
|
|
|
126
|
-
with open(memory_file, "w", encoding="utf-8") as f:
|
|
127
|
-
json.dump(chat_history, f, ensure_ascii=False)
|
|
128
|
-
|
|
129
136
|
# 处理后续命令
|
|
130
|
-
self._handle_post_commands(commands_info, assistant_response
|
|
137
|
+
self._handle_post_commands(commands_info, assistant_response)
|
|
131
138
|
|
|
132
|
-
def _handle_new_session(self
|
|
139
|
+
def _handle_new_session(self):
|
|
133
140
|
"""处理新会话逻辑"""
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
"conversation_history": old_chat_history["conversation_history"]}
|
|
143
|
-
else:
|
|
144
|
-
chat_history = {"ask_conversation": [],
|
|
145
|
-
"conversation_history": []}
|
|
146
|
-
with open(memory_file, "w", encoding="utf-8") as f:
|
|
147
|
-
json.dump(chat_history, f, ensure_ascii=False)
|
|
141
|
+
# 创建新的对话会话
|
|
142
|
+
conversation_id = self.conversation_manager.create_conversation(
|
|
143
|
+
name="New Chat Session",
|
|
144
|
+
description=f"Chat session started at {time.strftime('%Y-%m-%d %H:%M:%S')}"
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
# 设置为当前会话
|
|
148
|
+
self.conversation_manager.set_current_conversation(conversation_id, self.namespace)
|
|
148
149
|
|
|
149
150
|
self.result_manager.add_result(content=get_message("new_session_started"), meta={
|
|
150
151
|
"action": "chat",
|
|
@@ -161,19 +162,15 @@ class ChatAgent:
|
|
|
161
162
|
)
|
|
162
163
|
)
|
|
163
164
|
|
|
164
|
-
def
|
|
165
|
-
"""
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
else:
|
|
172
|
-
chat_history = {"ask_conversation": [],
|
|
173
|
-
"conversation_history": []}
|
|
174
|
-
return chat_history
|
|
165
|
+
def _get_current_conversation_messages(self):
|
|
166
|
+
"""获取当前会话的消息列表"""
|
|
167
|
+
current_conversation_id = self.conversation_manager.get_current_conversation_id(self.namespace)
|
|
168
|
+
if current_conversation_id:
|
|
169
|
+
messages = self.conversation_manager.get_messages(current_conversation_id)
|
|
170
|
+
return [{"role": msg["role"], "content": msg["content"]} for msg in messages]
|
|
171
|
+
return []
|
|
175
172
|
|
|
176
|
-
def _build_conversations(self, commands_info
|
|
173
|
+
def _build_conversations(self, commands_info):
|
|
177
174
|
"""构建对话上下文"""
|
|
178
175
|
source_count = 0
|
|
179
176
|
pre_conversations = []
|
|
@@ -198,17 +195,19 @@ class ChatAgent:
|
|
|
198
195
|
source_count += 1
|
|
199
196
|
|
|
200
197
|
# 构建索引和过滤文件
|
|
201
|
-
if "no_context" not in commands_info:
|
|
202
|
-
from autocoder.index.index import IndexManager
|
|
198
|
+
if "no_context" not in commands_info:
|
|
203
199
|
from autocoder.index.entry import build_index_and_filter_files
|
|
204
200
|
from autocoder.pyproject import PyProject
|
|
205
201
|
from autocoder.tsproject import TSProject
|
|
206
202
|
from autocoder.suffixproject import SuffixProject
|
|
203
|
+
from autocoder.default_project import DefaultProject
|
|
207
204
|
|
|
208
205
|
if self.args.project_type == "ts":
|
|
209
206
|
pp = TSProject(args=self.args, llm=self.llm)
|
|
210
207
|
elif self.args.project_type == "py":
|
|
211
208
|
pp = PyProject(args=self.args, llm=self.llm)
|
|
209
|
+
elif not self.args.project_type or self.args.project_type == "*":
|
|
210
|
+
pp = DefaultProject(args=self.args, llm=self.llm)
|
|
212
211
|
else:
|
|
213
212
|
pp = SuffixProject(args=self.args, llm=self.llm, file_filter=None)
|
|
214
213
|
pp.run()
|
|
@@ -242,10 +241,12 @@ class ChatAgent:
|
|
|
242
241
|
{"role": "assistant", "content": "read"})
|
|
243
242
|
source_count += 1
|
|
244
243
|
|
|
245
|
-
|
|
244
|
+
# 获取当前会话的历史消息
|
|
245
|
+
current_messages = self._get_current_conversation_messages()
|
|
246
|
+
loaded_conversations = pre_conversations + current_messages
|
|
246
247
|
return loaded_conversations
|
|
247
248
|
|
|
248
|
-
def _handle_human_as_model(self, loaded_conversations,
|
|
249
|
+
def _handle_human_as_model(self, loaded_conversations, commands_info):
|
|
249
250
|
"""处理人工模型模式"""
|
|
250
251
|
@byzerllm.prompt()
|
|
251
252
|
def chat_with_human_as_model(
|
|
@@ -334,16 +335,17 @@ class ChatAgent:
|
|
|
334
335
|
"query": self.args.query
|
|
335
336
|
}})
|
|
336
337
|
|
|
337
|
-
#
|
|
338
|
-
|
|
339
|
-
|
|
338
|
+
# 更新当前会话的历史记录
|
|
339
|
+
self.conversation_manager.append_message_to_current(
|
|
340
|
+
role="assistant",
|
|
341
|
+
content=result,
|
|
342
|
+
namespace=self.namespace
|
|
340
343
|
)
|
|
341
344
|
|
|
342
|
-
with open(memory_file, "w", encoding="utf-8") as f:
|
|
343
|
-
json.dump(chat_history, f, ensure_ascii=False)
|
|
344
|
-
|
|
345
345
|
if "save" in commands_info:
|
|
346
|
-
|
|
346
|
+
# 获取当前会话消息用于保存
|
|
347
|
+
current_messages = self._get_current_conversation_messages()
|
|
348
|
+
save_to_memory_file(ask_conversation=current_messages,
|
|
347
349
|
query=self.args.query,
|
|
348
350
|
response=result)
|
|
349
351
|
printer = Printer()
|
|
@@ -452,7 +454,7 @@ class ChatAgent:
|
|
|
452
454
|
action_file=self.args.file
|
|
453
455
|
).to_dict())
|
|
454
456
|
|
|
455
|
-
def _handle_post_commands(self, commands_info, assistant_response
|
|
457
|
+
def _handle_post_commands(self, commands_info, assistant_response):
|
|
456
458
|
"""处理后续命令"""
|
|
457
459
|
if "copy" in commands_info:
|
|
458
460
|
# copy assistant_response to clipboard
|
|
@@ -463,7 +465,9 @@ class ChatAgent:
|
|
|
463
465
|
print("pyperclip not installed or clipboard is not supported, instruction will not be copied to clipboard.")
|
|
464
466
|
|
|
465
467
|
if "save" in commands_info:
|
|
466
|
-
|
|
468
|
+
# 获取当前会话消息用于保存
|
|
469
|
+
current_messages = self._get_current_conversation_messages()
|
|
470
|
+
tmp_dir = save_to_memory_file(ask_conversation=current_messages,
|
|
467
471
|
query=self.args.query,
|
|
468
472
|
response=assistant_response)
|
|
469
473
|
printer = Printer()
|
autocoder/auto_coder.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from autocoder.events.event_types import EventMetadata
|
|
2
1
|
import byzerllm
|
|
3
2
|
import yaml
|
|
4
3
|
import os
|
|
@@ -10,8 +9,7 @@ from autocoder.common import git_utils, code_auto_execute
|
|
|
10
9
|
from autocoder.utils.llm_client_interceptors import token_counter_interceptor
|
|
11
10
|
from autocoder.db.store import Store
|
|
12
11
|
from autocoder.common.action_yml_file_manager import ActionYmlFileManager
|
|
13
|
-
|
|
14
|
-
from autocoder.utils.llms import get_llm_names
|
|
12
|
+
from autocoder.common.llms import LLMManager
|
|
15
13
|
|
|
16
14
|
from byzerllm.utils.client import EventCallbackResult, EventName
|
|
17
15
|
from prompt_toolkit import prompt
|
|
@@ -31,31 +29,24 @@ from autocoder.utils.request_queue import (
|
|
|
31
29
|
RequestOption,
|
|
32
30
|
)
|
|
33
31
|
from loguru import logger
|
|
34
|
-
import json
|
|
35
32
|
from rich.console import Console
|
|
36
33
|
from rich.panel import Panel
|
|
37
|
-
from rich.markdown import Markdown
|
|
38
|
-
from rich.live import Live
|
|
39
34
|
from autocoder.common.auto_coder_lang import get_message
|
|
40
|
-
from autocoder.common.memory_manager import save_to_memory_file
|
|
41
|
-
from autocoder import models as models_module
|
|
42
|
-
from autocoder.common.utils_code_auto_generate import stream_chat_with_continue
|
|
43
|
-
from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
|
|
44
|
-
from autocoder.common.printer import Printer
|
|
45
|
-
from autocoder.rag.token_counter import count_tokens
|
|
46
|
-
from autocoder.privacy.model_filter import ModelPathFilter
|
|
47
|
-
from autocoder.common.result_manager import ResultManager
|
|
48
|
-
from autocoder.events.event_manager_singleton import get_event_manager
|
|
49
|
-
from autocoder.events import event_content as EventContentCreator
|
|
50
|
-
from autocoder.common.mcp_server import get_mcp_server
|
|
51
|
-
from autocoder.common.mcp_server_types import (
|
|
52
|
-
McpRequest, McpInstallRequest, McpRemoveRequest, McpListRequest,
|
|
53
|
-
McpListRunningRequest, McpRefreshRequest
|
|
54
|
-
)
|
|
55
35
|
from autocoder.run_context import get_run_context,RunMode
|
|
56
36
|
console = Console()
|
|
57
37
|
|
|
58
38
|
|
|
39
|
+
def get_model_info_with_check(model_name: str, product_mode: str):
|
|
40
|
+
"""获取模型信息并检查是否为None,如果为None则抛出友好的异常"""
|
|
41
|
+
model_info = LLMManager().get_model_info(model_name, product_mode)
|
|
42
|
+
if model_info is None:
|
|
43
|
+
from autocoder.common.international import get_message_with_format
|
|
44
|
+
error_message = get_message_with_format("model_info_not_found",
|
|
45
|
+
model_name=model_name,
|
|
46
|
+
product_mode=product_mode)
|
|
47
|
+
raise ValueError(error_message)
|
|
48
|
+
return model_info
|
|
49
|
+
|
|
59
50
|
def resolve_include_path(base_path, include_path):
|
|
60
51
|
if include_path.startswith(".") or include_path.startswith(".."):
|
|
61
52
|
full_base_path = os.path.abspath(base_path)
|
|
@@ -257,7 +248,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
257
248
|
|
|
258
249
|
if args.product_mode == "lite":
|
|
259
250
|
default_model = args.model
|
|
260
|
-
model_info =
|
|
251
|
+
model_info = get_model_info_with_check(default_model, args.product_mode)
|
|
261
252
|
llm = byzerllm.SimpleByzerLLM(default_model_name=default_model)
|
|
262
253
|
llm.deploy(
|
|
263
254
|
model_path="",
|
|
@@ -281,7 +272,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
281
272
|
models = []
|
|
282
273
|
for _, model_name in enumerate(model_names):
|
|
283
274
|
model_name = model_name.strip()
|
|
284
|
-
model_info =
|
|
275
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
285
276
|
code_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
286
277
|
code_model.deploy(
|
|
287
278
|
model_path="",
|
|
@@ -299,7 +290,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
299
290
|
llm.setup_sub_client("code_model", models)
|
|
300
291
|
else:
|
|
301
292
|
# Single code model
|
|
302
|
-
model_info =
|
|
293
|
+
model_info = get_model_info_with_check(args.code_model, args.product_mode)
|
|
303
294
|
model_name = args.code_model
|
|
304
295
|
code_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
305
296
|
code_model.deploy(
|
|
@@ -322,7 +313,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
322
313
|
model_names = args.generate_rerank_model.split(",")
|
|
323
314
|
models = []
|
|
324
315
|
for _, model_name in enumerate(model_names):
|
|
325
|
-
model_info =
|
|
316
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
326
317
|
rerank_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
327
318
|
rerank_model.deploy(
|
|
328
319
|
model_path="",
|
|
@@ -340,7 +331,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
340
331
|
llm.setup_sub_client("generate_rerank_model", models)
|
|
341
332
|
else:
|
|
342
333
|
# Single rerank model
|
|
343
|
-
model_info =
|
|
334
|
+
model_info = get_model_info_with_check(args.generate_rerank_model, args.product_mode)
|
|
344
335
|
model_name = args.generate_rerank_model
|
|
345
336
|
rerank_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
346
337
|
rerank_model.deploy(
|
|
@@ -358,7 +349,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
358
349
|
llm.setup_sub_client("generate_rerank_model", rerank_model)
|
|
359
350
|
|
|
360
351
|
if args.inference_model:
|
|
361
|
-
model_info =
|
|
352
|
+
model_info = get_model_info_with_check(args.inference_model, args.product_mode)
|
|
362
353
|
model_name = args.inference_model
|
|
363
354
|
inference_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
364
355
|
inference_model.deploy(
|
|
@@ -377,7 +368,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
377
368
|
|
|
378
369
|
if args.index_filter_model:
|
|
379
370
|
model_name = args.index_filter_model.strip()
|
|
380
|
-
model_info =
|
|
371
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
381
372
|
index_filter_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
382
373
|
index_filter_model.deploy(
|
|
383
374
|
model_path="",
|
|
@@ -395,7 +386,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
395
386
|
|
|
396
387
|
if args.context_prune_model:
|
|
397
388
|
model_name = args.context_prune_model.strip()
|
|
398
|
-
model_info =
|
|
389
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
399
390
|
context_prune_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
400
391
|
context_prune_model.deploy(
|
|
401
392
|
model_path="",
|
|
@@ -413,7 +404,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
413
404
|
|
|
414
405
|
if args.conversation_prune_model:
|
|
415
406
|
model_name = args.conversation_prune_model.strip()
|
|
416
|
-
model_info =
|
|
407
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
417
408
|
conversation_prune_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
418
409
|
conversation_prune_model.deploy(
|
|
419
410
|
model_path="",
|
|
@@ -588,7 +579,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
588
579
|
if args.product_mode == "lite":
|
|
589
580
|
if args.chat_model:
|
|
590
581
|
model_name = args.chat_model.strip()
|
|
591
|
-
model_info =
|
|
582
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
592
583
|
chat_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
593
584
|
chat_model.deploy(
|
|
594
585
|
model_path="",
|
|
@@ -606,7 +597,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
606
597
|
|
|
607
598
|
if args.vl_model:
|
|
608
599
|
model_name = args.vl_model.strip()
|
|
609
|
-
model_info =
|
|
600
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
610
601
|
vl_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
611
602
|
vl_model.deploy(
|
|
612
603
|
model_path="",
|
|
@@ -624,7 +615,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
624
615
|
|
|
625
616
|
if args.index_model:
|
|
626
617
|
model_name = args.index_model.strip()
|
|
627
|
-
model_info =
|
|
618
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
628
619
|
index_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
629
620
|
index_model.deploy(
|
|
630
621
|
model_path="",
|
|
@@ -642,7 +633,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
642
633
|
|
|
643
634
|
if args.sd_model:
|
|
644
635
|
model_name = args.sd_model.strip()
|
|
645
|
-
model_info =
|
|
636
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
646
637
|
sd_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
647
638
|
sd_model.deploy(
|
|
648
639
|
model_path="",
|
|
@@ -660,7 +651,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
660
651
|
|
|
661
652
|
if args.text2voice_model:
|
|
662
653
|
model_name = args.text2voice_model.strip()
|
|
663
|
-
model_info =
|
|
654
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
664
655
|
text2voice_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
665
656
|
text2voice_model.deploy(
|
|
666
657
|
model_path="",
|
|
@@ -678,7 +669,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
678
669
|
|
|
679
670
|
if args.voice2text_model:
|
|
680
671
|
model_name = args.voice2text_model.strip()
|
|
681
|
-
model_info =
|
|
672
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
682
673
|
voice2text_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
683
674
|
voice2text_model.deploy(
|
|
684
675
|
model_path="",
|
|
@@ -696,7 +687,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
696
687
|
|
|
697
688
|
if args.planner_model:
|
|
698
689
|
model_name = args.planner_model.strip()
|
|
699
|
-
model_info =
|
|
690
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
700
691
|
planner_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
701
692
|
planner_model.deploy(
|
|
702
693
|
model_path="",
|
|
@@ -714,7 +705,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
714
705
|
|
|
715
706
|
if args.commit_model:
|
|
716
707
|
model_name = args.commit_model.strip()
|
|
717
|
-
model_info =
|
|
708
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
718
709
|
commit_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
719
710
|
commit_model.deploy(
|
|
720
711
|
model_path="",
|
|
@@ -732,7 +723,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
732
723
|
|
|
733
724
|
if args.designer_model:
|
|
734
725
|
model_name = args.designer_model.strip()
|
|
735
|
-
model_info =
|
|
726
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
736
727
|
designer_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
737
728
|
designer_model.deploy(
|
|
738
729
|
model_path="",
|
|
@@ -750,7 +741,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
750
741
|
|
|
751
742
|
if args.emb_model:
|
|
752
743
|
model_name = args.emb_model.strip()
|
|
753
|
-
model_info =
|
|
744
|
+
model_info = get_model_info_with_check(model_name, args.product_mode)
|
|
754
745
|
emb_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
755
746
|
emb_model.deploy(
|
|
756
747
|
model_path="",
|