auto-coder 0.1.400__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.0.dist-info/LICENSE +158 -0
- auto_coder-2.0.0.dist-info/METADATA +558 -0
- auto_coder-2.0.0.dist-info/RECORD +795 -0
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +25 -4
- autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
- autocoder/agent/base_agentic/types.py +42 -0
- autocoder/agent/entry_command_agent/chat.py +73 -59
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +1029 -2310
- autocoder/auto_coder_terminal.py +26 -0
- autocoder/auto_coder_terminal_v3.py +190 -0
- autocoder/chat/conf_command.py +224 -124
- autocoder/chat/models_command.py +361 -299
- autocoder/chat/rules_command.py +79 -31
- autocoder/chat_auto_coder.py +1021 -372
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +26 -9
- autocoder/commands/auto_web.py +1 -1
- autocoder/commands/tools.py +44 -44
- autocoder/common/__init__.py +150 -128
- autocoder/common/ac_style_command_parser/__init__.py +39 -2
- autocoder/common/ac_style_command_parser/config.py +422 -0
- autocoder/common/ac_style_command_parser/parser.py +292 -78
- autocoder/common/ac_style_command_parser/test_parser.py +241 -16
- autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
- autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
- autocoder/common/action_yml_file_manager.py +25 -13
- autocoder/common/agent_events/__init__.py +52 -0
- autocoder/common/agent_events/agent_event_emitter.py +193 -0
- autocoder/common/agent_events/event_factory.py +177 -0
- autocoder/common/agent_events/examples.py +307 -0
- autocoder/common/agent_events/types.py +113 -0
- autocoder/common/agent_events/utils.py +68 -0
- autocoder/common/agent_hooks/__init__.py +44 -0
- autocoder/common/agent_hooks/examples.py +582 -0
- autocoder/common/agent_hooks/hook_executor.py +217 -0
- autocoder/common/agent_hooks/hook_manager.py +288 -0
- autocoder/common/agent_hooks/types.py +133 -0
- autocoder/common/agent_hooks/utils.py +99 -0
- autocoder/common/agent_query_queue/queue_executor.py +324 -0
- autocoder/common/agent_query_queue/queue_manager.py +325 -0
- autocoder/common/agents/__init__.py +11 -0
- autocoder/common/agents/agent_manager.py +323 -0
- autocoder/common/agents/agent_parser.py +189 -0
- autocoder/common/agents/example_usage.py +344 -0
- autocoder/common/agents/integration_example.py +330 -0
- autocoder/common/agents/test_agent_parser.py +545 -0
- autocoder/common/async_utils.py +101 -0
- autocoder/common/auto_coder_lang.py +23 -972
- autocoder/common/autocoderargs_parser/__init__.py +14 -0
- autocoder/common/autocoderargs_parser/parser.py +184 -0
- autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
- autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
- autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
- autocoder/common/autocoderargs_parser/token_parser.py +290 -0
- autocoder/common/buildin_tokenizer.py +2 -4
- autocoder/common/code_auto_generate.py +149 -74
- autocoder/common/code_auto_generate_diff.py +163 -70
- autocoder/common/code_auto_generate_editblock.py +179 -89
- autocoder/common/code_auto_generate_strict_diff.py +167 -72
- autocoder/common/code_auto_merge_editblock.py +13 -6
- autocoder/common/code_modification_ranker.py +1 -1
- autocoder/common/command_completer.py +3 -3
- autocoder/common/command_file_manager/manager.py +183 -47
- autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
- autocoder/common/command_templates.py +1 -1
- autocoder/common/conf_utils.py +2 -4
- autocoder/common/conversations/config.py +11 -3
- autocoder/common/conversations/get_conversation_manager.py +100 -2
- autocoder/common/conversations/llm_stats_models.py +264 -0
- autocoder/common/conversations/manager.py +112 -28
- autocoder/common/conversations/models.py +16 -2
- autocoder/common/conversations/storage/index_manager.py +134 -10
- autocoder/common/core_config/__init__.py +63 -0
- autocoder/common/core_config/agentic_mode_manager.py +109 -0
- autocoder/common/core_config/base_manager.py +123 -0
- autocoder/common/core_config/compatibility.py +151 -0
- autocoder/common/core_config/config_manager.py +156 -0
- autocoder/common/core_config/conversation_manager.py +31 -0
- autocoder/common/core_config/exclude_manager.py +72 -0
- autocoder/common/core_config/file_manager.py +177 -0
- autocoder/common/core_config/human_as_model_manager.py +129 -0
- autocoder/common/core_config/lib_manager.py +54 -0
- autocoder/common/core_config/main_manager.py +81 -0
- autocoder/common/core_config/mode_manager.py +126 -0
- autocoder/common/core_config/models.py +70 -0
- autocoder/common/core_config/test_memory_manager.py +1056 -0
- autocoder/common/env_manager.py +282 -0
- autocoder/common/env_manager_usage_example.py +211 -0
- autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
- autocoder/common/file_checkpoint/manager.py +264 -48
- autocoder/common/file_checkpoint/test_backup.py +1 -18
- autocoder/common/file_checkpoint/test_manager.py +270 -1
- autocoder/common/file_checkpoint/test_store.py +1 -17
- autocoder/common/file_handler/__init__.py +23 -0
- autocoder/common/file_handler/active_context_handler.py +159 -0
- autocoder/common/file_handler/add_files_handler.py +409 -0
- autocoder/common/file_handler/chat_handler.py +180 -0
- autocoder/common/file_handler/coding_handler.py +401 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/file_monitor/test_file_monitor.py +307 -0
- autocoder/common/git_utils.py +51 -10
- autocoder/common/global_cancel.py +15 -6
- autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
- autocoder/common/international/__init__.py +31 -0
- autocoder/common/international/demo_international.py +92 -0
- autocoder/common/international/message_manager.py +157 -0
- autocoder/common/international/messages/__init__.py +56 -0
- autocoder/common/international/messages/async_command_messages.py +507 -0
- autocoder/common/international/messages/auto_coder_messages.py +2208 -0
- autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
- autocoder/common/international/messages/command_help_messages.py +986 -0
- autocoder/common/international/messages/conversation_command_messages.py +191 -0
- autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
- autocoder/common/international/messages/queue_command_messages.py +751 -0
- autocoder/common/international/messages/rules_command_messages.py +77 -0
- autocoder/common/international/messages/sdk_messages.py +1707 -0
- autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
- autocoder/common/international/messages/tool_display_messages.py +1212 -0
- autocoder/common/international/messages/workflow_exception_messages.py +473 -0
- autocoder/common/international/test_international.py +612 -0
- autocoder/common/linter_core/__init__.py +28 -0
- autocoder/common/linter_core/base_linter.py +61 -0
- autocoder/common/linter_core/config_loader.py +271 -0
- autocoder/common/linter_core/formatters/__init__.py +0 -0
- autocoder/common/linter_core/formatters/base_formatter.py +38 -0
- autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
- autocoder/common/linter_core/linter.py +166 -0
- autocoder/common/linter_core/linter_factory.py +216 -0
- autocoder/common/linter_core/linter_manager.py +333 -0
- autocoder/common/linter_core/linters/__init__.py +9 -0
- autocoder/common/linter_core/linters/java_linter.py +342 -0
- autocoder/common/linter_core/linters/python_linter.py +115 -0
- autocoder/common/linter_core/linters/typescript_linter.py +119 -0
- autocoder/common/linter_core/models/__init__.py +7 -0
- autocoder/common/linter_core/models/lint_result.py +91 -0
- autocoder/common/linter_core/models.py +33 -0
- autocoder/common/linter_core/tests/__init__.py +3 -0
- autocoder/common/linter_core/tests/test_config_loader.py +323 -0
- autocoder/common/linter_core/tests/test_config_loading.py +308 -0
- autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
- autocoder/common/linter_core/tests/test_formatters.py +147 -0
- autocoder/common/linter_core/tests/test_integration.py +317 -0
- autocoder/common/linter_core/tests/test_java_linter.py +496 -0
- autocoder/common/linter_core/tests/test_linters.py +265 -0
- autocoder/common/linter_core/tests/test_models.py +81 -0
- autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
- autocoder/common/linter_core/tests/verify_fixes.py +183 -0
- autocoder/common/llm_friendly_package/__init__.py +31 -0
- autocoder/common/llm_friendly_package/base_manager.py +102 -0
- autocoder/common/llm_friendly_package/docs_manager.py +121 -0
- autocoder/common/llm_friendly_package/library_manager.py +171 -0
- autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
- autocoder/common/llm_friendly_package/models.py +40 -0
- autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
- autocoder/common/llms/__init__.py +15 -0
- autocoder/common/llms/demo_error_handling.py +85 -0
- autocoder/common/llms/factory.py +142 -0
- autocoder/common/llms/manager.py +264 -0
- autocoder/common/llms/pricing.py +121 -0
- autocoder/common/llms/registry.py +288 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +746 -0
- autocoder/common/{context_pruner.py → pruner/context_pruner.py} +137 -40
- autocoder/common/pruner/conversation_message_ids_api.py +386 -0
- autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
- autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
- autocoder/common/pruner/conversation_normalizer.py +347 -0
- autocoder/common/{conversation_pruner.py → pruner/conversation_pruner.py} +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +784 -0
- autocoder/common/pruner/test_context_pruner.py +546 -0
- autocoder/common/pruner/test_conversation_normalizer.py +502 -0
- autocoder/common/pruner/test_tool_content_detector.py +324 -0
- autocoder/common/pruner/tool_content_detector.py +227 -0
- autocoder/common/pruner/tools/__init__.py +18 -0
- autocoder/common/pruner/tools/query_message_ids.py +264 -0
- autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
- autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
- autocoder/common/pull_requests/__init__.py +9 -1
- autocoder/common/pull_requests/utils.py +122 -1
- autocoder/common/rag_manager/rag_manager.py +36 -40
- autocoder/common/rulefiles/__init__.py +53 -1
- autocoder/common/rulefiles/api.py +250 -0
- autocoder/common/rulefiles/core/__init__.py +14 -0
- autocoder/common/rulefiles/core/manager.py +241 -0
- autocoder/common/rulefiles/core/selector.py +805 -0
- autocoder/common/rulefiles/models/__init__.py +20 -0
- autocoder/common/rulefiles/models/index.py +16 -0
- autocoder/common/rulefiles/models/init_rule.py +18 -0
- autocoder/common/rulefiles/models/rule_file.py +18 -0
- autocoder/common/rulefiles/models/rule_relevance.py +14 -0
- autocoder/common/rulefiles/models/summary.py +16 -0
- autocoder/common/rulefiles/test_rulefiles.py +776 -0
- autocoder/common/rulefiles/utils/__init__.py +34 -0
- autocoder/common/rulefiles/utils/monitor.py +86 -0
- autocoder/common/rulefiles/utils/parser.py +230 -0
- autocoder/common/save_formatted_log.py +67 -10
- autocoder/common/search_replace.py +8 -1
- autocoder/common/search_replace_patch/__init__.py +24 -0
- autocoder/common/search_replace_patch/base.py +115 -0
- autocoder/common/search_replace_patch/manager.py +248 -0
- autocoder/common/search_replace_patch/patch_replacer.py +304 -0
- autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
- autocoder/common/search_replace_patch/string_replacer.py +181 -0
- autocoder/common/search_replace_patch/tests/__init__.py +3 -0
- autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
- autocoder/common/search_replace_patch/tests/test_base.py +188 -0
- autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
- autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
- autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
- autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
- autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
- autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
- autocoder/common/shell_commands/__init__.py +197 -0
- autocoder/common/shell_commands/background_process_notifier.py +346 -0
- autocoder/common/shell_commands/command_executor.py +1127 -0
- autocoder/common/shell_commands/error_recovery.py +541 -0
- autocoder/common/shell_commands/exceptions.py +120 -0
- autocoder/common/shell_commands/interactive_executor.py +476 -0
- autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
- autocoder/common/shell_commands/interactive_process.py +744 -0
- autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
- autocoder/common/shell_commands/monitoring.py +529 -0
- autocoder/common/shell_commands/process_cleanup.py +386 -0
- autocoder/common/shell_commands/process_manager.py +606 -0
- autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
- autocoder/common/shell_commands/tests/__init__.py +6 -0
- autocoder/common/shell_commands/tests/conftest.py +118 -0
- autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
- autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
- autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
- autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
- autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
- autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
- autocoder/common/shell_commands/tests/test_integration.py +664 -0
- autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
- autocoder/common/shell_commands/tests/test_performance.py +632 -0
- autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
- autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
- autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
- autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
- autocoder/common/shell_commands/timeout_config.py +315 -0
- autocoder/common/shell_commands/timeout_manager.py +352 -0
- autocoder/common/terminal_paste/__init__.py +14 -0
- autocoder/common/terminal_paste/demo.py +145 -0
- autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
- autocoder/common/terminal_paste/paste_handler.py +200 -0
- autocoder/common/terminal_paste/paste_manager.py +118 -0
- autocoder/common/terminal_paste/tests/__init__.py +1 -0
- autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
- autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
- autocoder/common/terminal_paste/utils.py +163 -0
- autocoder/common/test_autocoder_args.py +232 -0
- autocoder/common/test_env_manager.py +173 -0
- autocoder/common/test_env_manager_integration.py +159 -0
- autocoder/common/text_similarity/__init__.py +9 -0
- autocoder/common/text_similarity/demo.py +216 -0
- autocoder/common/text_similarity/examples.py +266 -0
- autocoder/common/text_similarity/test_text_similarity.py +306 -0
- autocoder/common/text_similarity/text_similarity.py +194 -0
- autocoder/common/text_similarity/utils.py +125 -0
- autocoder/common/todos/__init__.py +61 -0
- autocoder/common/todos/cache/__init__.py +16 -0
- autocoder/common/todos/cache/base_cache.py +89 -0
- autocoder/common/todos/cache/cache_manager.py +228 -0
- autocoder/common/todos/cache/memory_cache.py +225 -0
- autocoder/common/todos/config.py +155 -0
- autocoder/common/todos/exceptions.py +35 -0
- autocoder/common/todos/get_todo_manager.py +161 -0
- autocoder/common/todos/manager.py +537 -0
- autocoder/common/todos/models.py +239 -0
- autocoder/common/todos/storage/__init__.py +14 -0
- autocoder/common/todos/storage/base_storage.py +76 -0
- autocoder/common/todos/storage/file_storage.py +278 -0
- autocoder/common/tokens/__init__.py +15 -0
- autocoder/common/tokens/counter.py +44 -2
- autocoder/common/tools_manager/__init__.py +17 -0
- autocoder/common/tools_manager/examples.py +162 -0
- autocoder/common/tools_manager/manager.py +385 -0
- autocoder/common/tools_manager/models.py +39 -0
- autocoder/common/tools_manager/test_tools_manager.py +303 -0
- autocoder/common/tools_manager/utils.py +191 -0
- autocoder/common/v2/agent/agentic_callbacks.py +270 -0
- autocoder/common/v2/agent/agentic_edit.py +2729 -2052
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +43 -2
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +52 -0
- autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
- autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
- autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
- autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +565 -30
- autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
- autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
- autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
- autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +244 -51
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
- autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +409 -140
- autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +209 -194
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +135 -0
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +328 -0
- autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
- autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
- autocoder/common/v2/agent/agentic_edit_types.py +386 -10
- autocoder/common/v2/agent/runner/__init__.py +31 -0
- autocoder/common/v2/agent/runner/base_runner.py +92 -0
- autocoder/common/v2/agent/runner/file_based_event_runner.py +217 -0
- autocoder/common/v2/agent/runner/sdk_runner.py +182 -0
- autocoder/common/v2/agent/runner/terminal_runner.py +396 -0
- autocoder/common/v2/agent/runner/tool_display.py +589 -0
- autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
- autocoder/common/v2/agent/test_agentic_edit.py +194 -0
- autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
- autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
- autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
- autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
- autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
- autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
- autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
- autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
- autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
- autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
- autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
- autocoder/common/v2/code_auto_generate.py +136 -78
- autocoder/common/v2/code_auto_generate_diff.py +135 -79
- autocoder/common/v2/code_auto_generate_editblock.py +174 -99
- autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
- autocoder/common/v2/code_auto_merge.py +1 -1
- autocoder/common/v2/code_auto_merge_editblock.py +13 -1
- autocoder/common/v2/code_diff_manager.py +3 -3
- autocoder/common/v2/code_editblock_manager.py +4 -14
- autocoder/common/v2/code_manager.py +1 -1
- autocoder/common/v2/code_strict_diff_manager.py +2 -2
- autocoder/common/wrap_llm_hint/__init__.py +10 -0
- autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
- autocoder/common/wrap_llm_hint/utils.py +432 -0
- autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
- autocoder/completer/__init__.py +8 -0
- autocoder/completer/command_completer_v2.py +1051 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +165 -7
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +117 -125
- autocoder/{agent → index/filter}/agentic_filter.py +323 -334
- autocoder/index/filter/normal_filter.py +5 -11
- autocoder/index/filter/quick_filter.py +1 -1
- autocoder/index/index.py +36 -9
- autocoder/index/tests/__init__.py +1 -0
- autocoder/index/tests/run_tests.py +195 -0
- autocoder/index/tests/test_entry.py +303 -0
- autocoder/index/tests/test_index_manager.py +314 -0
- autocoder/index/tests/test_module_integration.py +300 -0
- autocoder/index/tests/test_symbols_utils.py +183 -0
- autocoder/inner/__init__.py +4 -0
- autocoder/inner/agentic.py +932 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +156 -37
- autocoder/pyproject/__init__.py +32 -29
- autocoder/rag/agentic_rag.py +215 -75
- autocoder/rag/cache/simple_cache.py +1 -2
- autocoder/rag/loaders/image_loader.py +1 -1
- autocoder/rag/long_context_rag.py +42 -26
- autocoder/rag/qa_conversation_strategy.py +1 -1
- autocoder/rag/terminal/__init__.py +17 -0
- autocoder/rag/terminal/args.py +581 -0
- autocoder/rag/terminal/bootstrap.py +61 -0
- autocoder/rag/terminal/command_handlers.py +653 -0
- autocoder/rag/terminal/formatters/__init__.py +20 -0
- autocoder/rag/terminal/formatters/base.py +70 -0
- autocoder/rag/terminal/formatters/json_format.py +66 -0
- autocoder/rag/terminal/formatters/stream_json.py +95 -0
- autocoder/rag/terminal/formatters/text.py +28 -0
- autocoder/rag/terminal/init.py +120 -0
- autocoder/rag/terminal/utils.py +106 -0
- autocoder/rag/test_agentic_rag.py +389 -0
- autocoder/rag/test_doc_filter.py +3 -3
- autocoder/rag/test_long_context_rag.py +1 -1
- autocoder/rag/test_token_limiter.py +517 -10
- autocoder/rag/token_counter.py +3 -0
- autocoder/rag/token_limiter.py +19 -15
- autocoder/rag/tools/__init__.py +26 -2
- autocoder/rag/tools/bochaai_example.py +343 -0
- autocoder/rag/tools/bochaai_sdk.py +541 -0
- autocoder/rag/tools/metaso_example.py +268 -0
- autocoder/rag/tools/metaso_sdk.py +417 -0
- autocoder/rag/tools/recall_tool.py +28 -7
- autocoder/rag/tools/run_integration_tests.py +204 -0
- autocoder/rag/tools/test_all_providers.py +318 -0
- autocoder/rag/tools/test_bochaai_integration.py +482 -0
- autocoder/rag/tools/test_final_integration.py +215 -0
- autocoder/rag/tools/test_metaso_integration.py +424 -0
- autocoder/rag/tools/test_metaso_real.py +171 -0
- autocoder/rag/tools/test_web_crawl_tool.py +639 -0
- autocoder/rag/tools/test_web_search_tool.py +509 -0
- autocoder/rag/tools/todo_read_tool.py +202 -0
- autocoder/rag/tools/todo_write_tool.py +412 -0
- autocoder/rag/tools/web_crawl_tool.py +634 -0
- autocoder/rag/tools/web_search_tool.py +558 -0
- autocoder/rag/tools/web_tools_example.py +119 -0
- autocoder/rag/types.py +16 -0
- autocoder/rag/variable_holder.py +4 -2
- autocoder/rags.py +86 -79
- autocoder/regexproject/__init__.py +23 -21
- autocoder/run_context.py +9 -0
- autocoder/sdk/__init__.py +50 -161
- autocoder/sdk/api.py +370 -0
- autocoder/sdk/async_runner/__init__.py +26 -0
- autocoder/sdk/async_runner/async_executor.py +650 -0
- autocoder/sdk/async_runner/async_handler.py +356 -0
- autocoder/sdk/async_runner/markdown_processor.py +595 -0
- autocoder/sdk/async_runner/task_metadata.py +284 -0
- autocoder/sdk/async_runner/worktree_manager.py +438 -0
- autocoder/sdk/cli/__init__.py +2 -5
- autocoder/sdk/cli/formatters.py +28 -204
- autocoder/sdk/cli/handlers.py +77 -44
- autocoder/sdk/cli/main.py +158 -170
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -267
- autocoder/sdk/core/bridge.py +298 -118
- autocoder/sdk/exceptions.py +18 -12
- autocoder/sdk/formatters/__init__.py +19 -0
- autocoder/sdk/formatters/input.py +64 -0
- autocoder/sdk/formatters/output.py +247 -0
- autocoder/sdk/formatters/stream.py +54 -0
- autocoder/sdk/models/__init__.py +6 -5
- autocoder/sdk/models/options.py +55 -18
- autocoder/sdk/utils/formatters.py +27 -195
- autocoder/suffixproject/__init__.py +28 -25
- autocoder/terminal/__init__.py +14 -0
- autocoder/terminal/app.py +454 -0
- autocoder/terminal/args.py +32 -0
- autocoder/terminal/bootstrap.py +178 -0
- autocoder/terminal/command_processor.py +521 -0
- autocoder/terminal/command_registry.py +57 -0
- autocoder/terminal/help.py +97 -0
- autocoder/terminal/tasks/__init__.py +5 -0
- autocoder/terminal/tasks/background.py +77 -0
- autocoder/terminal/tasks/task_event.py +70 -0
- autocoder/terminal/ui/__init__.py +13 -0
- autocoder/terminal/ui/completer.py +268 -0
- autocoder/terminal/ui/keybindings.py +75 -0
- autocoder/terminal/ui/session.py +41 -0
- autocoder/terminal/ui/toolbar.py +64 -0
- autocoder/terminal/utils/__init__.py +13 -0
- autocoder/terminal/utils/errors.py +18 -0
- autocoder/terminal/utils/paths.py +19 -0
- autocoder/terminal/utils/shell.py +43 -0
- autocoder/terminal_v3/__init__.py +10 -0
- autocoder/terminal_v3/app.py +201 -0
- autocoder/terminal_v3/handlers/__init__.py +5 -0
- autocoder/terminal_v3/handlers/command_handler.py +131 -0
- autocoder/terminal_v3/models/__init__.py +6 -0
- autocoder/terminal_v3/models/conversation_buffer.py +214 -0
- autocoder/terminal_v3/models/message.py +50 -0
- autocoder/terminal_v3/models/tool_display.py +247 -0
- autocoder/terminal_v3/ui/__init__.py +7 -0
- autocoder/terminal_v3/ui/keybindings.py +56 -0
- autocoder/terminal_v3/ui/layout.py +141 -0
- autocoder/terminal_v3/ui/styles.py +43 -0
- autocoder/tsproject/__init__.py +23 -23
- autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
- autocoder/utils/llms.py +88 -80
- autocoder/utils/math_utils.py +101 -0
- autocoder/utils/model_provider_selector.py +16 -4
- autocoder/utils/operate_config_api.py +33 -5
- autocoder/utils/thread_utils.py +2 -2
- autocoder/version.py +4 -2
- autocoder/workflow_agents/__init__.py +84 -0
- autocoder/workflow_agents/agent.py +143 -0
- autocoder/workflow_agents/exceptions.py +573 -0
- autocoder/workflow_agents/executor.py +489 -0
- autocoder/workflow_agents/loader.py +737 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +172 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-0.1.400.dist-info/METADATA +0 -396
- auto_coder-0.1.400.dist-info/RECORD +0 -425
- auto_coder-0.1.400.dist-info/licenses/LICENSE +0 -201
- autocoder/auto_coder_server.py +0 -672
- autocoder/benchmark.py +0 -138
- autocoder/common/ac_style_command_parser/example.py +0 -7
- autocoder/common/cleaner.py +0 -31
- autocoder/common/command_completer_v2.py +0 -615
- autocoder/common/directory_cache/__init__.py +0 -1
- autocoder/common/directory_cache/cache.py +0 -192
- autocoder/common/directory_cache/test_cache.py +0 -190
- autocoder/common/file_checkpoint/examples.py +0 -217
- autocoder/common/llm_friendly_package_example.py +0 -138
- autocoder/common/llm_friendly_package_test.py +0 -63
- autocoder/common/pull_requests/test_module.py +0 -1
- autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
- autocoder/common/text.py +0 -30
- autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
- autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
- autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
- autocoder/common/v2/agent/agentic_tool_display.py +0 -183
- autocoder/plugins/dynamic_completion_example.py +0 -148
- autocoder/plugins/sample_plugin.py +0 -160
- autocoder/sdk/cli/__main__.py +0 -26
- autocoder/sdk/cli/completion_wrapper.py +0 -38
- autocoder/sdk/cli/install_completion.py +0 -301
- autocoder/sdk/models/messages.py +0 -209
- autocoder/sdk/session/__init__.py +0 -32
- autocoder/sdk/session/session.py +0 -106
- autocoder/sdk/session/session_manager.py +0 -56
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -17,14 +17,14 @@ from autocoder.common.memory_manager import save_to_memory_file
|
|
|
17
17
|
from autocoder.common.utils_code_auto_generate import stream_chat_with_continue
|
|
18
18
|
from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
|
|
19
19
|
from autocoder.common.printer import Printer
|
|
20
|
-
from autocoder.
|
|
20
|
+
from autocoder.common.tokens import count_string_tokens as count_tokens
|
|
21
21
|
from autocoder.privacy.model_filter import ModelPathFilter
|
|
22
22
|
from autocoder.common.result_manager import ResultManager
|
|
23
23
|
from autocoder.events.event_manager_singleton import get_event_manager
|
|
24
24
|
from autocoder.events import event_content as EventContentCreator
|
|
25
25
|
from autocoder.events.event_types import EventMetadata
|
|
26
|
-
from autocoder.common.
|
|
27
|
-
from autocoder.common.
|
|
26
|
+
from autocoder.common.mcp_tools.server import get_mcp_server
|
|
27
|
+
from autocoder.common.mcp_tools.types import McpRequest
|
|
28
28
|
from autocoder.utils.llms import get_llm_names
|
|
29
29
|
from autocoder.utils.request_queue import (
|
|
30
30
|
request_queue,
|
|
@@ -34,6 +34,8 @@ from autocoder.utils.request_queue import (
|
|
|
34
34
|
)
|
|
35
35
|
from autocoder.run_context import get_run_context, RunMode
|
|
36
36
|
from autocoder.common.action_yml_file_manager import ActionYmlFileManager
|
|
37
|
+
from autocoder.common.conversations.get_conversation_manager import get_conversation_manager
|
|
38
|
+
from autocoder.common.conversations.exceptions import ConversationManagerError
|
|
37
39
|
|
|
38
40
|
|
|
39
41
|
class ChatAgent:
|
|
@@ -43,6 +45,18 @@ class ChatAgent:
|
|
|
43
45
|
self.raw_args = raw_args
|
|
44
46
|
self.console = Console()
|
|
45
47
|
self.result_manager = ResultManager()
|
|
48
|
+
self.conversation_manager = get_conversation_manager()
|
|
49
|
+
# 生成命名空间用于会话隔离
|
|
50
|
+
self.namespace = self._generate_namespace()
|
|
51
|
+
|
|
52
|
+
def _generate_namespace(self) -> str:
|
|
53
|
+
"""
|
|
54
|
+
生成命名空间,用于会话隔离
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
str: 基于项目路径的命名空间
|
|
58
|
+
"""
|
|
59
|
+
return "manual"
|
|
46
60
|
|
|
47
61
|
def run(self):
|
|
48
62
|
"""执行 chat 命令的主要逻辑"""
|
|
@@ -55,20 +69,26 @@ class ChatAgent:
|
|
|
55
69
|
for command in self.args.action:
|
|
56
70
|
commands_info[command] = {}
|
|
57
71
|
|
|
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
72
|
# 处理新会话
|
|
63
73
|
if self.args.new_session:
|
|
64
|
-
self._handle_new_session(
|
|
74
|
+
self._handle_new_session()
|
|
65
75
|
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
76
|
return
|
|
67
77
|
|
|
68
|
-
#
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
# 确保有当前会话,如果没有则创建
|
|
79
|
+
current_conversation_id = self.conversation_manager.get_current_conversation_id(self.namespace)
|
|
80
|
+
if not current_conversation_id:
|
|
81
|
+
current_conversation_id = self.conversation_manager.create_conversation(
|
|
82
|
+
name="Chat Session",
|
|
83
|
+
description="Auto-coder chat session"
|
|
84
|
+
)
|
|
85
|
+
self.conversation_manager.set_current_conversation(current_conversation_id, self.namespace)
|
|
86
|
+
|
|
87
|
+
# 添加用户消息到当前会话
|
|
88
|
+
self.conversation_manager.append_message_to_current(
|
|
89
|
+
role="user",
|
|
90
|
+
content=self.args.query,
|
|
91
|
+
namespace=self.namespace
|
|
72
92
|
)
|
|
73
93
|
|
|
74
94
|
# 获取聊天模型
|
|
@@ -78,11 +98,11 @@ class ChatAgent:
|
|
|
78
98
|
chat_llm = self.llm
|
|
79
99
|
|
|
80
100
|
# 构建对话上下文
|
|
81
|
-
loaded_conversations = self._build_conversations(commands_info
|
|
101
|
+
loaded_conversations = self._build_conversations(commands_info)
|
|
82
102
|
|
|
83
103
|
# 处理人工模型模式
|
|
84
104
|
if get_run_context().mode != RunMode.WEB and self.args.human_as_model:
|
|
85
|
-
return self._handle_human_as_model(loaded_conversations,
|
|
105
|
+
return self._handle_human_as_model(loaded_conversations, commands_info)
|
|
86
106
|
|
|
87
107
|
# 计算耗时
|
|
88
108
|
start_time = time.time()
|
|
@@ -118,33 +138,26 @@ class ChatAgent:
|
|
|
118
138
|
if last_meta:
|
|
119
139
|
self._print_stats(last_meta, start_time, model_name)
|
|
120
140
|
|
|
121
|
-
# 更新聊天历史
|
|
122
|
-
|
|
123
|
-
|
|
141
|
+
# 更新聊天历史 - 添加助手回复到当前会话
|
|
142
|
+
self.conversation_manager.append_message_to_current(
|
|
143
|
+
role="assistant",
|
|
144
|
+
content=assistant_response,
|
|
145
|
+
namespace=self.namespace
|
|
124
146
|
)
|
|
125
147
|
|
|
126
|
-
with open(memory_file, "w", encoding="utf-8") as f:
|
|
127
|
-
json.dump(chat_history, f, ensure_ascii=False)
|
|
128
|
-
|
|
129
148
|
# 处理后续命令
|
|
130
|
-
self._handle_post_commands(commands_info, assistant_response
|
|
149
|
+
self._handle_post_commands(commands_info, assistant_response)
|
|
131
150
|
|
|
132
|
-
def _handle_new_session(self
|
|
151
|
+
def _handle_new_session(self):
|
|
133
152
|
"""处理新会话逻辑"""
|
|
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)
|
|
153
|
+
# 创建新的对话会话
|
|
154
|
+
conversation_id = self.conversation_manager.create_conversation(
|
|
155
|
+
name="New Chat Session",
|
|
156
|
+
description=f"Chat session started at {time.strftime('%Y-%m-%d %H:%M:%S')}"
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
# 设置为当前会话
|
|
160
|
+
self.conversation_manager.set_current_conversation(conversation_id, self.namespace)
|
|
148
161
|
|
|
149
162
|
self.result_manager.add_result(content=get_message("new_session_started"), meta={
|
|
150
163
|
"action": "chat",
|
|
@@ -161,19 +174,15 @@ class ChatAgent:
|
|
|
161
174
|
)
|
|
162
175
|
)
|
|
163
176
|
|
|
164
|
-
def
|
|
165
|
-
"""
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
else:
|
|
172
|
-
chat_history = {"ask_conversation": [],
|
|
173
|
-
"conversation_history": []}
|
|
174
|
-
return chat_history
|
|
177
|
+
def _get_current_conversation_messages(self):
|
|
178
|
+
"""获取当前会话的消息列表"""
|
|
179
|
+
current_conversation_id = self.conversation_manager.get_current_conversation_id(self.namespace)
|
|
180
|
+
if current_conversation_id:
|
|
181
|
+
messages = self.conversation_manager.get_messages(current_conversation_id)
|
|
182
|
+
return [{"role": msg["role"], "content": msg["content"]} for msg in messages]
|
|
183
|
+
return []
|
|
175
184
|
|
|
176
|
-
def _build_conversations(self, commands_info
|
|
185
|
+
def _build_conversations(self, commands_info):
|
|
177
186
|
"""构建对话上下文"""
|
|
178
187
|
source_count = 0
|
|
179
188
|
pre_conversations = []
|
|
@@ -242,10 +251,12 @@ class ChatAgent:
|
|
|
242
251
|
{"role": "assistant", "content": "read"})
|
|
243
252
|
source_count += 1
|
|
244
253
|
|
|
245
|
-
|
|
254
|
+
# 获取当前会话的历史消息
|
|
255
|
+
current_messages = self._get_current_conversation_messages()
|
|
256
|
+
loaded_conversations = pre_conversations + current_messages
|
|
246
257
|
return loaded_conversations
|
|
247
258
|
|
|
248
|
-
def _handle_human_as_model(self, loaded_conversations,
|
|
259
|
+
def _handle_human_as_model(self, loaded_conversations, commands_info):
|
|
249
260
|
"""处理人工模型模式"""
|
|
250
261
|
@byzerllm.prompt()
|
|
251
262
|
def chat_with_human_as_model(
|
|
@@ -334,16 +345,17 @@ class ChatAgent:
|
|
|
334
345
|
"query": self.args.query
|
|
335
346
|
}})
|
|
336
347
|
|
|
337
|
-
#
|
|
338
|
-
|
|
339
|
-
|
|
348
|
+
# 更新当前会话的历史记录
|
|
349
|
+
self.conversation_manager.append_message_to_current(
|
|
350
|
+
role="assistant",
|
|
351
|
+
content=result,
|
|
352
|
+
namespace=self.namespace
|
|
340
353
|
)
|
|
341
354
|
|
|
342
|
-
with open(memory_file, "w", encoding="utf-8") as f:
|
|
343
|
-
json.dump(chat_history, f, ensure_ascii=False)
|
|
344
|
-
|
|
345
355
|
if "save" in commands_info:
|
|
346
|
-
|
|
356
|
+
# 获取当前会话消息用于保存
|
|
357
|
+
current_messages = self._get_current_conversation_messages()
|
|
358
|
+
save_to_memory_file(ask_conversation=current_messages,
|
|
347
359
|
query=self.args.query,
|
|
348
360
|
response=result)
|
|
349
361
|
printer = Printer()
|
|
@@ -452,7 +464,7 @@ class ChatAgent:
|
|
|
452
464
|
action_file=self.args.file
|
|
453
465
|
).to_dict())
|
|
454
466
|
|
|
455
|
-
def _handle_post_commands(self, commands_info, assistant_response
|
|
467
|
+
def _handle_post_commands(self, commands_info, assistant_response):
|
|
456
468
|
"""处理后续命令"""
|
|
457
469
|
if "copy" in commands_info:
|
|
458
470
|
# copy assistant_response to clipboard
|
|
@@ -463,7 +475,9 @@ class ChatAgent:
|
|
|
463
475
|
print("pyperclip not installed or clipboard is not supported, instruction will not be copied to clipboard.")
|
|
464
476
|
|
|
465
477
|
if "save" in commands_info:
|
|
466
|
-
|
|
478
|
+
# 获取当前会话消息用于保存
|
|
479
|
+
current_messages = self._get_current_conversation_messages()
|
|
480
|
+
tmp_dir = save_to_memory_file(ask_conversation=current_messages,
|
|
467
481
|
query=self.args.query,
|
|
468
482
|
response=assistant_response)
|
|
469
483
|
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="",
|