auto-coder 1.0.0__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.0.dist-info/LICENSE +158 -0
- auto_coder-2.0.0.dist-info/METADATA +558 -0
- auto_coder-2.0.0.dist-info/RECORD +795 -0
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +24 -3
- autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
- autocoder/agent/base_agentic/types.py +42 -0
- autocoder/agent/entry_command_agent/chat.py +73 -59
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +970 -2345
- autocoder/auto_coder_terminal.py +26 -0
- autocoder/auto_coder_terminal_v3.py +190 -0
- autocoder/chat/conf_command.py +224 -124
- autocoder/chat/models_command.py +361 -299
- autocoder/chat/rules_command.py +79 -31
- autocoder/chat_auto_coder.py +988 -398
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +25 -8
- autocoder/commands/auto_web.py +1 -1
- autocoder/commands/tools.py +44 -44
- autocoder/common/__init__.py +150 -128
- autocoder/common/ac_style_command_parser/__init__.py +39 -2
- autocoder/common/ac_style_command_parser/config.py +422 -0
- autocoder/common/ac_style_command_parser/parser.py +292 -78
- autocoder/common/ac_style_command_parser/test_parser.py +241 -16
- autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
- autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
- autocoder/common/action_yml_file_manager.py +25 -13
- autocoder/common/agent_events/__init__.py +52 -0
- autocoder/common/agent_events/agent_event_emitter.py +193 -0
- autocoder/common/agent_events/event_factory.py +177 -0
- autocoder/common/agent_events/examples.py +307 -0
- autocoder/common/agent_events/types.py +113 -0
- autocoder/common/agent_events/utils.py +68 -0
- autocoder/common/agent_hooks/__init__.py +44 -0
- autocoder/common/agent_hooks/examples.py +582 -0
- autocoder/common/agent_hooks/hook_executor.py +217 -0
- autocoder/common/agent_hooks/hook_manager.py +288 -0
- autocoder/common/agent_hooks/types.py +133 -0
- autocoder/common/agent_hooks/utils.py +99 -0
- autocoder/common/agent_query_queue/queue_executor.py +324 -0
- autocoder/common/agent_query_queue/queue_manager.py +325 -0
- autocoder/common/agents/__init__.py +11 -0
- autocoder/common/agents/agent_manager.py +323 -0
- autocoder/common/agents/agent_parser.py +189 -0
- autocoder/common/agents/example_usage.py +344 -0
- autocoder/common/agents/integration_example.py +330 -0
- autocoder/common/agents/test_agent_parser.py +545 -0
- autocoder/common/async_utils.py +101 -0
- autocoder/common/auto_coder_lang.py +23 -972
- autocoder/common/autocoderargs_parser/__init__.py +14 -0
- autocoder/common/autocoderargs_parser/parser.py +184 -0
- autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
- autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
- autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
- autocoder/common/autocoderargs_parser/token_parser.py +290 -0
- autocoder/common/buildin_tokenizer.py +2 -4
- autocoder/common/code_auto_generate.py +149 -74
- autocoder/common/code_auto_generate_diff.py +163 -70
- autocoder/common/code_auto_generate_editblock.py +179 -89
- autocoder/common/code_auto_generate_strict_diff.py +167 -72
- autocoder/common/code_auto_merge_editblock.py +13 -6
- autocoder/common/code_modification_ranker.py +1 -1
- autocoder/common/command_completer.py +3 -3
- autocoder/common/command_file_manager/manager.py +183 -47
- autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
- autocoder/common/command_templates.py +1 -1
- autocoder/common/conf_utils.py +2 -4
- autocoder/common/conversations/config.py +11 -3
- autocoder/common/conversations/get_conversation_manager.py +100 -2
- autocoder/common/conversations/llm_stats_models.py +264 -0
- autocoder/common/conversations/manager.py +112 -28
- autocoder/common/conversations/models.py +16 -2
- autocoder/common/conversations/storage/index_manager.py +134 -10
- autocoder/common/core_config/__init__.py +63 -0
- autocoder/common/core_config/agentic_mode_manager.py +109 -0
- autocoder/common/core_config/base_manager.py +123 -0
- autocoder/common/core_config/compatibility.py +151 -0
- autocoder/common/core_config/config_manager.py +156 -0
- autocoder/common/core_config/conversation_manager.py +31 -0
- autocoder/common/core_config/exclude_manager.py +72 -0
- autocoder/common/core_config/file_manager.py +177 -0
- autocoder/common/core_config/human_as_model_manager.py +129 -0
- autocoder/common/core_config/lib_manager.py +54 -0
- autocoder/common/core_config/main_manager.py +81 -0
- autocoder/common/core_config/mode_manager.py +126 -0
- autocoder/common/core_config/models.py +70 -0
- autocoder/common/core_config/test_memory_manager.py +1056 -0
- autocoder/common/env_manager.py +282 -0
- autocoder/common/env_manager_usage_example.py +211 -0
- autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
- autocoder/common/file_checkpoint/manager.py +264 -48
- autocoder/common/file_checkpoint/test_backup.py +1 -18
- autocoder/common/file_checkpoint/test_manager.py +270 -1
- autocoder/common/file_checkpoint/test_store.py +1 -17
- autocoder/common/file_handler/__init__.py +23 -0
- autocoder/common/file_handler/active_context_handler.py +159 -0
- autocoder/common/file_handler/add_files_handler.py +409 -0
- autocoder/common/file_handler/chat_handler.py +180 -0
- autocoder/common/file_handler/coding_handler.py +401 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/git_utils.py +44 -8
- autocoder/common/global_cancel.py +15 -6
- autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
- autocoder/common/international/__init__.py +31 -0
- autocoder/common/international/demo_international.py +92 -0
- autocoder/common/international/message_manager.py +157 -0
- autocoder/common/international/messages/__init__.py +56 -0
- autocoder/common/international/messages/async_command_messages.py +507 -0
- autocoder/common/international/messages/auto_coder_messages.py +2208 -0
- autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
- autocoder/common/international/messages/command_help_messages.py +986 -0
- autocoder/common/international/messages/conversation_command_messages.py +191 -0
- autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
- autocoder/common/international/messages/queue_command_messages.py +751 -0
- autocoder/common/international/messages/rules_command_messages.py +77 -0
- autocoder/common/international/messages/sdk_messages.py +1707 -0
- autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
- autocoder/common/international/messages/tool_display_messages.py +1212 -0
- autocoder/common/international/messages/workflow_exception_messages.py +473 -0
- autocoder/common/international/test_international.py +612 -0
- autocoder/common/linter_core/__init__.py +28 -0
- autocoder/common/linter_core/base_linter.py +61 -0
- autocoder/common/linter_core/config_loader.py +271 -0
- autocoder/common/linter_core/formatters/__init__.py +0 -0
- autocoder/common/linter_core/formatters/base_formatter.py +38 -0
- autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
- autocoder/common/linter_core/linter.py +166 -0
- autocoder/common/linter_core/linter_factory.py +216 -0
- autocoder/common/linter_core/linter_manager.py +333 -0
- autocoder/common/linter_core/linters/__init__.py +9 -0
- autocoder/common/linter_core/linters/java_linter.py +342 -0
- autocoder/common/linter_core/linters/python_linter.py +115 -0
- autocoder/common/linter_core/linters/typescript_linter.py +119 -0
- autocoder/common/linter_core/models/__init__.py +7 -0
- autocoder/common/linter_core/models/lint_result.py +91 -0
- autocoder/common/linter_core/models.py +33 -0
- autocoder/common/linter_core/tests/__init__.py +3 -0
- autocoder/common/linter_core/tests/test_config_loader.py +323 -0
- autocoder/common/linter_core/tests/test_config_loading.py +308 -0
- autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
- autocoder/common/linter_core/tests/test_formatters.py +147 -0
- autocoder/common/linter_core/tests/test_integration.py +317 -0
- autocoder/common/linter_core/tests/test_java_linter.py +496 -0
- autocoder/common/linter_core/tests/test_linters.py +265 -0
- autocoder/common/linter_core/tests/test_models.py +81 -0
- autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
- autocoder/common/linter_core/tests/verify_fixes.py +183 -0
- autocoder/common/llm_friendly_package/__init__.py +31 -0
- autocoder/common/llm_friendly_package/base_manager.py +102 -0
- autocoder/common/llm_friendly_package/docs_manager.py +121 -0
- autocoder/common/llm_friendly_package/library_manager.py +171 -0
- autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
- autocoder/common/llm_friendly_package/models.py +40 -0
- autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
- autocoder/common/llms/__init__.py +15 -0
- autocoder/common/llms/demo_error_handling.py +85 -0
- autocoder/common/llms/factory.py +142 -0
- autocoder/common/llms/manager.py +264 -0
- autocoder/common/llms/pricing.py +121 -0
- autocoder/common/llms/registry.py +288 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +651 -102
- autocoder/common/pruner/conversation_message_ids_api.py +386 -0
- autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
- autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
- autocoder/common/pruner/conversation_normalizer.py +347 -0
- autocoder/common/pruner/conversation_pruner.py +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
- autocoder/common/pruner/test_conversation_normalizer.py +502 -0
- autocoder/common/pruner/test_tool_content_detector.py +324 -0
- autocoder/common/pruner/tool_content_detector.py +227 -0
- autocoder/common/pruner/tools/__init__.py +18 -0
- autocoder/common/pruner/tools/query_message_ids.py +264 -0
- autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
- autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
- autocoder/common/pull_requests/__init__.py +9 -1
- autocoder/common/pull_requests/utils.py +122 -1
- autocoder/common/rag_manager/rag_manager.py +36 -40
- autocoder/common/rulefiles/__init__.py +53 -1
- autocoder/common/rulefiles/api.py +250 -0
- autocoder/common/rulefiles/core/__init__.py +14 -0
- autocoder/common/rulefiles/core/manager.py +241 -0
- autocoder/common/rulefiles/core/selector.py +805 -0
- autocoder/common/rulefiles/models/__init__.py +20 -0
- autocoder/common/rulefiles/models/index.py +16 -0
- autocoder/common/rulefiles/models/init_rule.py +18 -0
- autocoder/common/rulefiles/models/rule_file.py +18 -0
- autocoder/common/rulefiles/models/rule_relevance.py +14 -0
- autocoder/common/rulefiles/models/summary.py +16 -0
- autocoder/common/rulefiles/test_rulefiles.py +776 -0
- autocoder/common/rulefiles/utils/__init__.py +34 -0
- autocoder/common/rulefiles/utils/monitor.py +86 -0
- autocoder/common/rulefiles/utils/parser.py +230 -0
- autocoder/common/save_formatted_log.py +67 -10
- autocoder/common/search_replace.py +8 -1
- autocoder/common/search_replace_patch/__init__.py +24 -0
- autocoder/common/search_replace_patch/base.py +115 -0
- autocoder/common/search_replace_patch/manager.py +248 -0
- autocoder/common/search_replace_patch/patch_replacer.py +304 -0
- autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
- autocoder/common/search_replace_patch/string_replacer.py +181 -0
- autocoder/common/search_replace_patch/tests/__init__.py +3 -0
- autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
- autocoder/common/search_replace_patch/tests/test_base.py +188 -0
- autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
- autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
- autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
- autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
- autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
- autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
- autocoder/common/shell_commands/__init__.py +197 -0
- autocoder/common/shell_commands/background_process_notifier.py +346 -0
- autocoder/common/shell_commands/command_executor.py +1127 -0
- autocoder/common/shell_commands/error_recovery.py +541 -0
- autocoder/common/shell_commands/exceptions.py +120 -0
- autocoder/common/shell_commands/interactive_executor.py +476 -0
- autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
- autocoder/common/shell_commands/interactive_process.py +744 -0
- autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
- autocoder/common/shell_commands/monitoring.py +529 -0
- autocoder/common/shell_commands/process_cleanup.py +386 -0
- autocoder/common/shell_commands/process_manager.py +606 -0
- autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
- autocoder/common/shell_commands/tests/__init__.py +6 -0
- autocoder/common/shell_commands/tests/conftest.py +118 -0
- autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
- autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
- autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
- autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
- autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
- autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
- autocoder/common/shell_commands/tests/test_integration.py +664 -0
- autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
- autocoder/common/shell_commands/tests/test_performance.py +632 -0
- autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
- autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
- autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
- autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
- autocoder/common/shell_commands/timeout_config.py +315 -0
- autocoder/common/shell_commands/timeout_manager.py +352 -0
- autocoder/common/terminal_paste/__init__.py +14 -0
- autocoder/common/terminal_paste/demo.py +145 -0
- autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
- autocoder/common/terminal_paste/paste_handler.py +200 -0
- autocoder/common/terminal_paste/paste_manager.py +118 -0
- autocoder/common/terminal_paste/tests/__init__.py +1 -0
- autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
- autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
- autocoder/common/terminal_paste/utils.py +163 -0
- autocoder/common/test_autocoder_args.py +232 -0
- autocoder/common/test_env_manager.py +173 -0
- autocoder/common/test_env_manager_integration.py +159 -0
- autocoder/common/text_similarity/__init__.py +9 -0
- autocoder/common/text_similarity/demo.py +216 -0
- autocoder/common/text_similarity/examples.py +266 -0
- autocoder/common/text_similarity/test_text_similarity.py +306 -0
- autocoder/common/text_similarity/text_similarity.py +194 -0
- autocoder/common/text_similarity/utils.py +125 -0
- autocoder/common/todos/__init__.py +61 -0
- autocoder/common/todos/cache/__init__.py +16 -0
- autocoder/common/todos/cache/base_cache.py +89 -0
- autocoder/common/todos/cache/cache_manager.py +228 -0
- autocoder/common/todos/cache/memory_cache.py +225 -0
- autocoder/common/todos/config.py +155 -0
- autocoder/common/todos/exceptions.py +35 -0
- autocoder/common/todos/get_todo_manager.py +161 -0
- autocoder/common/todos/manager.py +537 -0
- autocoder/common/todos/models.py +239 -0
- autocoder/common/todos/storage/__init__.py +14 -0
- autocoder/common/todos/storage/base_storage.py +76 -0
- autocoder/common/todos/storage/file_storage.py +278 -0
- autocoder/common/tokens/counter.py +24 -2
- autocoder/common/tools_manager/__init__.py +17 -0
- autocoder/common/tools_manager/examples.py +162 -0
- autocoder/common/tools_manager/manager.py +385 -0
- autocoder/common/tools_manager/models.py +39 -0
- autocoder/common/tools_manager/test_tools_manager.py +303 -0
- autocoder/common/tools_manager/utils.py +191 -0
- autocoder/common/v2/agent/agentic_callbacks.py +270 -0
- autocoder/common/v2/agent/agentic_edit.py +2699 -1856
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
- autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
- autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
- autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +564 -29
- autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
- autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
- autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
- autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
- autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +410 -86
- autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +207 -192
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
- autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
- autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
- autocoder/common/v2/agent/agentic_edit_types.py +343 -9
- autocoder/common/v2/agent/runner/__init__.py +3 -3
- autocoder/common/v2/agent/runner/base_runner.py +12 -26
- autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
- autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
- autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
- autocoder/common/v2/agent/runner/tool_display.py +557 -159
- autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
- autocoder/common/v2/agent/test_agentic_edit.py +194 -0
- autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
- autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
- autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
- autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
- autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
- autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
- autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
- autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
- autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
- autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
- autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
- autocoder/common/v2/code_auto_generate.py +136 -78
- autocoder/common/v2/code_auto_generate_diff.py +135 -79
- autocoder/common/v2/code_auto_generate_editblock.py +174 -99
- autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
- autocoder/common/v2/code_auto_merge.py +1 -1
- autocoder/common/v2/code_auto_merge_editblock.py +13 -1
- autocoder/common/v2/code_diff_manager.py +3 -3
- autocoder/common/v2/code_editblock_manager.py +4 -14
- autocoder/common/v2/code_manager.py +1 -1
- autocoder/common/v2/code_strict_diff_manager.py +2 -2
- autocoder/common/wrap_llm_hint/__init__.py +10 -0
- autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
- autocoder/common/wrap_llm_hint/utils.py +432 -0
- autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
- autocoder/completer/__init__.py +8 -0
- autocoder/completer/command_completer_v2.py +1051 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +165 -7
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +116 -124
- autocoder/{agent → index/filter}/agentic_filter.py +322 -333
- autocoder/index/filter/normal_filter.py +5 -11
- autocoder/index/filter/quick_filter.py +1 -1
- autocoder/index/index.py +36 -9
- autocoder/index/tests/__init__.py +1 -0
- autocoder/index/tests/run_tests.py +195 -0
- autocoder/index/tests/test_entry.py +303 -0
- autocoder/index/tests/test_index_manager.py +314 -0
- autocoder/index/tests/test_module_integration.py +300 -0
- autocoder/index/tests/test_symbols_utils.py +183 -0
- autocoder/inner/__init__.py +4 -0
- autocoder/inner/agentic.py +932 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +65 -46
- autocoder/pyproject/__init__.py +32 -29
- autocoder/rag/agentic_rag.py +215 -75
- autocoder/rag/cache/simple_cache.py +1 -2
- autocoder/rag/loaders/image_loader.py +1 -1
- autocoder/rag/long_context_rag.py +42 -26
- autocoder/rag/qa_conversation_strategy.py +1 -1
- autocoder/rag/terminal/__init__.py +17 -0
- autocoder/rag/terminal/args.py +581 -0
- autocoder/rag/terminal/bootstrap.py +61 -0
- autocoder/rag/terminal/command_handlers.py +653 -0
- autocoder/rag/terminal/formatters/__init__.py +20 -0
- autocoder/rag/terminal/formatters/base.py +70 -0
- autocoder/rag/terminal/formatters/json_format.py +66 -0
- autocoder/rag/terminal/formatters/stream_json.py +95 -0
- autocoder/rag/terminal/formatters/text.py +28 -0
- autocoder/rag/terminal/init.py +120 -0
- autocoder/rag/terminal/utils.py +106 -0
- autocoder/rag/test_agentic_rag.py +389 -0
- autocoder/rag/test_doc_filter.py +3 -3
- autocoder/rag/test_long_context_rag.py +1 -1
- autocoder/rag/test_token_limiter.py +517 -10
- autocoder/rag/token_counter.py +3 -0
- autocoder/rag/token_limiter.py +19 -15
- autocoder/rag/tools/__init__.py +26 -2
- autocoder/rag/tools/bochaai_example.py +343 -0
- autocoder/rag/tools/bochaai_sdk.py +541 -0
- autocoder/rag/tools/metaso_example.py +268 -0
- autocoder/rag/tools/metaso_sdk.py +417 -0
- autocoder/rag/tools/recall_tool.py +28 -7
- autocoder/rag/tools/run_integration_tests.py +204 -0
- autocoder/rag/tools/test_all_providers.py +318 -0
- autocoder/rag/tools/test_bochaai_integration.py +482 -0
- autocoder/rag/tools/test_final_integration.py +215 -0
- autocoder/rag/tools/test_metaso_integration.py +424 -0
- autocoder/rag/tools/test_metaso_real.py +171 -0
- autocoder/rag/tools/test_web_crawl_tool.py +639 -0
- autocoder/rag/tools/test_web_search_tool.py +509 -0
- autocoder/rag/tools/todo_read_tool.py +202 -0
- autocoder/rag/tools/todo_write_tool.py +412 -0
- autocoder/rag/tools/web_crawl_tool.py +634 -0
- autocoder/rag/tools/web_search_tool.py +558 -0
- autocoder/rag/tools/web_tools_example.py +119 -0
- autocoder/rag/types.py +16 -0
- autocoder/rag/variable_holder.py +4 -2
- autocoder/rags.py +86 -79
- autocoder/regexproject/__init__.py +23 -21
- autocoder/sdk/__init__.py +46 -190
- autocoder/sdk/api.py +370 -0
- autocoder/sdk/async_runner/__init__.py +26 -0
- autocoder/sdk/async_runner/async_executor.py +650 -0
- autocoder/sdk/async_runner/async_handler.py +356 -0
- autocoder/sdk/async_runner/markdown_processor.py +595 -0
- autocoder/sdk/async_runner/task_metadata.py +284 -0
- autocoder/sdk/async_runner/worktree_manager.py +438 -0
- autocoder/sdk/cli/__init__.py +2 -5
- autocoder/sdk/cli/formatters.py +28 -204
- autocoder/sdk/cli/handlers.py +77 -44
- autocoder/sdk/cli/main.py +154 -171
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -109
- autocoder/sdk/core/bridge.py +297 -115
- autocoder/sdk/exceptions.py +18 -12
- autocoder/sdk/formatters/__init__.py +19 -0
- autocoder/sdk/formatters/input.py +64 -0
- autocoder/sdk/formatters/output.py +247 -0
- autocoder/sdk/formatters/stream.py +54 -0
- autocoder/sdk/models/__init__.py +6 -5
- autocoder/sdk/models/options.py +55 -18
- autocoder/sdk/utils/formatters.py +27 -195
- autocoder/suffixproject/__init__.py +28 -25
- autocoder/terminal/__init__.py +14 -0
- autocoder/terminal/app.py +454 -0
- autocoder/terminal/args.py +32 -0
- autocoder/terminal/bootstrap.py +178 -0
- autocoder/terminal/command_processor.py +521 -0
- autocoder/terminal/command_registry.py +57 -0
- autocoder/terminal/help.py +97 -0
- autocoder/terminal/tasks/__init__.py +5 -0
- autocoder/terminal/tasks/background.py +77 -0
- autocoder/terminal/tasks/task_event.py +70 -0
- autocoder/terminal/ui/__init__.py +13 -0
- autocoder/terminal/ui/completer.py +268 -0
- autocoder/terminal/ui/keybindings.py +75 -0
- autocoder/terminal/ui/session.py +41 -0
- autocoder/terminal/ui/toolbar.py +64 -0
- autocoder/terminal/utils/__init__.py +13 -0
- autocoder/terminal/utils/errors.py +18 -0
- autocoder/terminal/utils/paths.py +19 -0
- autocoder/terminal/utils/shell.py +43 -0
- autocoder/terminal_v3/__init__.py +10 -0
- autocoder/terminal_v3/app.py +201 -0
- autocoder/terminal_v3/handlers/__init__.py +5 -0
- autocoder/terminal_v3/handlers/command_handler.py +131 -0
- autocoder/terminal_v3/models/__init__.py +6 -0
- autocoder/terminal_v3/models/conversation_buffer.py +214 -0
- autocoder/terminal_v3/models/message.py +50 -0
- autocoder/terminal_v3/models/tool_display.py +247 -0
- autocoder/terminal_v3/ui/__init__.py +7 -0
- autocoder/terminal_v3/ui/keybindings.py +56 -0
- autocoder/terminal_v3/ui/layout.py +141 -0
- autocoder/terminal_v3/ui/styles.py +43 -0
- autocoder/tsproject/__init__.py +23 -23
- autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
- autocoder/utils/llms.py +88 -80
- autocoder/utils/math_utils.py +101 -0
- autocoder/utils/model_provider_selector.py +16 -4
- autocoder/utils/operate_config_api.py +33 -5
- autocoder/utils/thread_utils.py +2 -2
- autocoder/version.py +4 -2
- autocoder/workflow_agents/__init__.py +84 -0
- autocoder/workflow_agents/agent.py +143 -0
- autocoder/workflow_agents/exceptions.py +573 -0
- autocoder/workflow_agents/executor.py +489 -0
- autocoder/workflow_agents/loader.py +737 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +172 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-1.0.0.dist-info/METADATA +0 -396
- auto_coder-1.0.0.dist-info/RECORD +0 -442
- auto_coder-1.0.0.dist-info/licenses/LICENSE +0 -201
- autocoder/auto_coder_server.py +0 -672
- autocoder/benchmark.py +0 -138
- autocoder/common/ac_style_command_parser/example.py +0 -7
- autocoder/common/cleaner.py +0 -31
- autocoder/common/command_completer_v2.py +0 -615
- autocoder/common/context_pruner.py +0 -477
- autocoder/common/conversation_pruner.py +0 -132
- autocoder/common/directory_cache/__init__.py +0 -1
- autocoder/common/directory_cache/cache.py +0 -192
- autocoder/common/directory_cache/test_cache.py +0 -190
- autocoder/common/file_checkpoint/examples.py +0 -217
- autocoder/common/llm_friendly_package_example.py +0 -138
- autocoder/common/llm_friendly_package_test.py +0 -63
- autocoder/common/pull_requests/test_module.py +0 -1
- autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
- autocoder/common/text.py +0 -30
- autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
- autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
- autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
- autocoder/common/v2/agent/agentic_tool_display.py +0 -183
- autocoder/plugins/dynamic_completion_example.py +0 -148
- autocoder/plugins/sample_plugin.py +0 -160
- autocoder/sdk/cli/__main__.py +0 -26
- autocoder/sdk/cli/completion_wrapper.py +0 -38
- autocoder/sdk/cli/install_completion.py +0 -301
- autocoder/sdk/models/messages.py +0 -209
- autocoder/sdk/session/__init__.py +0 -32
- autocoder/sdk/session/session.py +0 -106
- autocoder/sdk/session/session_manager.py +0 -56
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Tool Caller Usage Example
|
|
4
|
+
|
|
5
|
+
展示如何使用 tool_caller 模块进行工具调用和插件管理。
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import sys
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
# 添加项目根目录到 Python 路径
|
|
12
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../../../../../..'))
|
|
13
|
+
|
|
14
|
+
from autocoder.common import AutoCoderArgs
|
|
15
|
+
from autocoder.common.v2.agent.agentic_edit_types import ExecuteCommandTool, ReadFileTool, ToolResult
|
|
16
|
+
from autocoder.common.v2.agent.agentic_edit_tools.base_tool_resolver import BaseToolResolver
|
|
17
|
+
from autocoder.common.v2.agent.tool_caller import ToolCaller
|
|
18
|
+
from autocoder.common.v2.agent.tool_caller.plugins.examples import LoggingPlugin, SecurityFilterPlugin
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class DemoToolResolver(BaseToolResolver):
|
|
22
|
+
"""演示用的简单工具解析器"""
|
|
23
|
+
|
|
24
|
+
def resolve(self) -> ToolResult:
|
|
25
|
+
"""简化的工具解析实现"""
|
|
26
|
+
if isinstance(self.tool, ExecuteCommandTool):
|
|
27
|
+
return ToolResult(
|
|
28
|
+
success=True,
|
|
29
|
+
message=f"Demo: Command '{self.tool.command}' executed",
|
|
30
|
+
content={"output": f"Mock output for: {self.tool.command}"}
|
|
31
|
+
)
|
|
32
|
+
elif isinstance(self.tool, ReadFileTool):
|
|
33
|
+
return ToolResult(
|
|
34
|
+
success=True,
|
|
35
|
+
message=f"Demo: File '{self.tool.path}' read",
|
|
36
|
+
content={"content": f"Mock content of {self.tool.path}"}
|
|
37
|
+
)
|
|
38
|
+
else:
|
|
39
|
+
return ToolResult(
|
|
40
|
+
success=False,
|
|
41
|
+
message=f"Demo: Unsupported tool type {type(self.tool).__name__}"
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def main():
|
|
46
|
+
"""主演示函数"""
|
|
47
|
+
print("=" * 60)
|
|
48
|
+
print("Tool Caller Module Usage Example")
|
|
49
|
+
print("=" * 60)
|
|
50
|
+
|
|
51
|
+
# 1. 创建工具解析器映射
|
|
52
|
+
print("\n1. Setting up tool resolver mapping...")
|
|
53
|
+
tool_resolver_map = {
|
|
54
|
+
ExecuteCommandTool: DemoToolResolver,
|
|
55
|
+
ReadFileTool: DemoToolResolver
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# 2. 创建工具调用器
|
|
59
|
+
print("2. Creating ToolCaller instance...")
|
|
60
|
+
args = AutoCoderArgs(source_dir=".")
|
|
61
|
+
tool_caller = ToolCaller(
|
|
62
|
+
tool_resolver_map=tool_resolver_map,
|
|
63
|
+
args=args,
|
|
64
|
+
enable_plugins=True
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# 3. 注册插件
|
|
68
|
+
print("3. Registering plugins...")
|
|
69
|
+
logging_plugin = LoggingPlugin(enabled=True, detailed_logging=True)
|
|
70
|
+
security_plugin = SecurityFilterPlugin(enabled=True)
|
|
71
|
+
|
|
72
|
+
tool_caller.register_plugin(logging_plugin)
|
|
73
|
+
tool_caller.register_plugin(security_plugin)
|
|
74
|
+
|
|
75
|
+
print(f" - Registered logging plugin (priority: {logging_plugin.priority.value})")
|
|
76
|
+
print(f" - Registered security filter plugin (priority: {security_plugin.priority.value})")
|
|
77
|
+
|
|
78
|
+
# 4. 获取插件状态
|
|
79
|
+
print("\n4. Plugin system status:")
|
|
80
|
+
status = tool_caller.get_plugin_status()
|
|
81
|
+
print(f" - Total plugins: {status['total_plugins']}")
|
|
82
|
+
print(f" - Enabled plugins: {status['enabled_plugins']}")
|
|
83
|
+
for plugin_info in status['plugins']:
|
|
84
|
+
print(f" - {plugin_info['name']}: priority={plugin_info['priority']}, enabled={plugin_info['enabled']}")
|
|
85
|
+
|
|
86
|
+
# 5. 执行一些工具调用
|
|
87
|
+
print("\n5. Executing tool calls...")
|
|
88
|
+
|
|
89
|
+
# 安全命令
|
|
90
|
+
safe_tool = ExecuteCommandTool(command="echo 'Hello World'", requires_approval=False)
|
|
91
|
+
print(f"\n Executing safe command: {safe_tool.command}")
|
|
92
|
+
result = tool_caller.call_tool(safe_tool)
|
|
93
|
+
print(f" Result: {result.success} - {result.message}")
|
|
94
|
+
|
|
95
|
+
# 包含敏感信息的命令(会被过滤)
|
|
96
|
+
sensitive_tool = ExecuteCommandTool(command="mysql -u root -p secret123", requires_approval=False)
|
|
97
|
+
print(f"\n Executing sensitive command: {sensitive_tool.command}")
|
|
98
|
+
result = tool_caller.call_tool(sensitive_tool)
|
|
99
|
+
print(f" Result: {result.success} - {result.message}")
|
|
100
|
+
|
|
101
|
+
# 危险命令(会被阻止)
|
|
102
|
+
dangerous_tool = ExecuteCommandTool(command="rm -rf /", requires_approval=False)
|
|
103
|
+
print(f"\n Executing dangerous command: {dangerous_tool.command}")
|
|
104
|
+
result = tool_caller.call_tool(dangerous_tool)
|
|
105
|
+
print(f" Result: {result.success} - {result.message}")
|
|
106
|
+
|
|
107
|
+
# 文件读取
|
|
108
|
+
read_tool = ReadFileTool(path="example.txt")
|
|
109
|
+
print(f"\n Reading file: {read_tool.path}")
|
|
110
|
+
result = tool_caller.call_tool(read_tool)
|
|
111
|
+
print(f" Result: {result.success} - {result.message}")
|
|
112
|
+
|
|
113
|
+
# 6. 查看统计信息
|
|
114
|
+
print("\n6. Tool execution statistics:")
|
|
115
|
+
stats = tool_caller.get_stats()
|
|
116
|
+
print(f" - Total calls: {stats['total_calls']}")
|
|
117
|
+
print(f" - Successful calls: {stats['successful_calls']}")
|
|
118
|
+
print(f" - Failed calls: {stats['failed_calls']}")
|
|
119
|
+
print(f" - Success rate: {stats['success_rate']:.2%}")
|
|
120
|
+
print(f" - Plugin intercepted calls: {stats['plugin_intercepted_calls']}")
|
|
121
|
+
print(f" - Average execution time: {stats['average_execution_time']:.3f}s")
|
|
122
|
+
|
|
123
|
+
# 7. 查看插件统计
|
|
124
|
+
print("\n7. Plugin statistics:")
|
|
125
|
+
|
|
126
|
+
# 日志插件统计
|
|
127
|
+
log_stats = logging_plugin.get_statistics()
|
|
128
|
+
print(f" Logging plugin:")
|
|
129
|
+
print(f" - Total logged calls: {log_stats['total_logged_calls']}")
|
|
130
|
+
print(f" - Success rate: {log_stats['success_rate']:.2%}")
|
|
131
|
+
print(f" - Call history entries: {len(logging_plugin.get_call_history())}")
|
|
132
|
+
|
|
133
|
+
# 安全过滤插件统计
|
|
134
|
+
filter_stats = security_plugin.get_filter_statistics()
|
|
135
|
+
print(f" Security filter plugin:")
|
|
136
|
+
print(f" - Filtered count: {filter_stats['filtered_count']}")
|
|
137
|
+
print(f" - Blocked count: {filter_stats['blocked_count']}")
|
|
138
|
+
print(f" - Sensitive patterns: {filter_stats['sensitive_patterns_count']}")
|
|
139
|
+
print(f" - Dangerous patterns: {filter_stats['dangerous_patterns_count']}")
|
|
140
|
+
|
|
141
|
+
# 8. 插件管理演示
|
|
142
|
+
print("\n8. Plugin management demo:")
|
|
143
|
+
|
|
144
|
+
# 禁用日志插件
|
|
145
|
+
print(" Disabling logging plugin...")
|
|
146
|
+
tool_caller.disable_plugin("logging")
|
|
147
|
+
|
|
148
|
+
# 执行一个命令(不会被日志插件记录)
|
|
149
|
+
test_tool = ExecuteCommandTool(command="echo 'test without logging'", requires_approval=False)
|
|
150
|
+
old_history_length = len(logging_plugin.get_call_history())
|
|
151
|
+
result = tool_caller.call_tool(test_tool)
|
|
152
|
+
new_history_length = len(logging_plugin.get_call_history())
|
|
153
|
+
|
|
154
|
+
print(f" Command executed, logging plugin did not record it")
|
|
155
|
+
print(f" History length before: {old_history_length}, after: {new_history_length}")
|
|
156
|
+
|
|
157
|
+
# 重新启用日志插件
|
|
158
|
+
print(" Re-enabling logging plugin...")
|
|
159
|
+
tool_caller.enable_plugin("logging")
|
|
160
|
+
|
|
161
|
+
# 9. 全局插件控制
|
|
162
|
+
print("\n9. Global plugin control demo:")
|
|
163
|
+
print(" Disabling all plugins globally...")
|
|
164
|
+
tool_caller.set_plugins_enabled(False)
|
|
165
|
+
|
|
166
|
+
# 执行命令(所有插件都被禁用)
|
|
167
|
+
test_tool2 = ExecuteCommandTool(command="rm -rf /tmp", requires_approval=False) # 通常会被安全插件阻止
|
|
168
|
+
result = tool_caller.call_tool(test_tool2)
|
|
169
|
+
print(f" Dangerous command executed without plugin protection: {result.success}")
|
|
170
|
+
|
|
171
|
+
# 重新启用插件系统
|
|
172
|
+
print(" Re-enabling plugin system...")
|
|
173
|
+
tool_caller.set_plugins_enabled(True)
|
|
174
|
+
|
|
175
|
+
# 10. 最终统计
|
|
176
|
+
print("\n10. Final statistics:")
|
|
177
|
+
final_stats = tool_caller.get_stats()
|
|
178
|
+
print(f" - Total calls in demo: {final_stats['total_calls']}")
|
|
179
|
+
print(f" - Overall success rate: {final_stats['success_rate']:.2%}")
|
|
180
|
+
|
|
181
|
+
print("\n" + "=" * 60)
|
|
182
|
+
print("Demo completed successfully!")
|
|
183
|
+
print("=" * 60)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
if __name__ == "__main__":
|
|
187
|
+
try:
|
|
188
|
+
main()
|
|
189
|
+
except Exception as e:
|
|
190
|
+
print(f"Demo failed with error: {e}")
|
|
191
|
+
import traceback
|
|
192
|
+
traceback.print_exc()
|
|
193
|
+
sys.exit(1)
|
|
@@ -15,7 +15,7 @@ from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
|
|
|
15
15
|
from autocoder.common.stream_out_type import LintStreamOutType, CompileStreamOutType, UnmergedBlocksStreamOutType, ContextMissingCheckStreamOutType
|
|
16
16
|
from autocoder.common.auto_coder_lang import get_message_with_format
|
|
17
17
|
from autocoder.common.printer import Printer
|
|
18
|
-
from autocoder.
|
|
18
|
+
from autocoder.common.tokens import count_string_tokens as count_tokens
|
|
19
19
|
from autocoder.utils import llms as llm_utils
|
|
20
20
|
from autocoder.memory.active_context_manager import ActiveContextManager
|
|
21
21
|
from autocoder.common.v2.code_auto_generate_editblock import CodeAutoGenerateEditBlock
|
|
@@ -433,7 +433,7 @@ class CodeEditBlockManager:
|
|
|
433
433
|
return (unmerged_formatted_text, merged_formatted_text)
|
|
434
434
|
|
|
435
435
|
for attempt in range(self.args.auto_fix_merge_max_attempts):
|
|
436
|
-
global_cancel.check_and_raise(token=self.args.
|
|
436
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
437
437
|
unmerged_formatted_text, merged_formatted_text = _format_blocks(
|
|
438
438
|
merge)
|
|
439
439
|
fix_prompt = self.fix_unmerged_blocks.prompt(
|
|
@@ -657,7 +657,7 @@ class CodeEditBlockManager:
|
|
|
657
657
|
token_cost_calculator = TokenCostCalculator(args=self.args)
|
|
658
658
|
|
|
659
659
|
for attempt in range(self.auto_fix_compile_max_attempts):
|
|
660
|
-
global_cancel.check_and_raise(token=self.args.
|
|
660
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
661
661
|
# 先更新增量影子系统的文件
|
|
662
662
|
self.shadow_manager.clean_shadows()
|
|
663
663
|
shadow_files = self._create_shadow_files_from_edits(
|
|
@@ -804,7 +804,7 @@ class CodeEditBlockManager:
|
|
|
804
804
|
# 生成代码并自动修复lint错误
|
|
805
805
|
|
|
806
806
|
generation_result = self.generate_and_fix(query, source_code_list)
|
|
807
|
-
global_cancel.check_and_raise(token=self.args.
|
|
807
|
+
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
808
808
|
|
|
809
809
|
# 合并代码
|
|
810
810
|
self.code_merger.merge_code(generation_result)
|
|
@@ -6,18 +6,26 @@ from autocoder.common import sys_prompt
|
|
|
6
6
|
from autocoder.privacy.model_filter import ModelPathFilter
|
|
7
7
|
import json
|
|
8
8
|
from concurrent.futures import ThreadPoolExecutor
|
|
9
|
-
from autocoder.common.utils_code_auto_generate import
|
|
9
|
+
from autocoder.common.utils_code_auto_generate import (
|
|
10
|
+
chat_with_continue,
|
|
11
|
+
stream_chat_with_continue,
|
|
12
|
+
ChatWithContinueResult,
|
|
13
|
+
)
|
|
10
14
|
from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
|
|
11
15
|
from autocoder.common.stream_out_type import CodeGenerateStreamOutType
|
|
12
16
|
from autocoder.common.auto_coder_lang import get_message_with_format
|
|
13
17
|
from autocoder.common.printer import Printer
|
|
14
|
-
from autocoder.
|
|
18
|
+
from autocoder.common.tokens import count_string_tokens as count_tokens
|
|
15
19
|
from autocoder.utils import llms as llm_utils
|
|
16
20
|
from autocoder.common import SourceCodeList
|
|
17
21
|
from autocoder.memory.active_context_manager import ActiveContextManager
|
|
18
22
|
from loguru import logger
|
|
19
|
-
from autocoder.common.rulefiles
|
|
20
|
-
from autocoder.run_context import get_run_context,RunMode
|
|
23
|
+
from autocoder.common.rulefiles import get_rules
|
|
24
|
+
from autocoder.run_context import get_run_context, RunMode
|
|
25
|
+
import os
|
|
26
|
+
from datetime import datetime
|
|
27
|
+
import platform
|
|
28
|
+
|
|
21
29
|
|
|
22
30
|
class CodeAutoGenerate:
|
|
23
31
|
def __init__(
|
|
@@ -40,9 +48,19 @@ class CodeAutoGenerate:
|
|
|
40
48
|
|
|
41
49
|
@byzerllm.prompt(llm=lambda self: self.llm)
|
|
42
50
|
def single_round_instruction(
|
|
43
|
-
self,
|
|
51
|
+
self,
|
|
52
|
+
instruction: str,
|
|
53
|
+
content: str,
|
|
54
|
+
context: str = "",
|
|
55
|
+
package_context: str = "",
|
|
44
56
|
) -> str:
|
|
45
57
|
"""
|
|
58
|
+
<env>
|
|
59
|
+
当前工作目录: {{ current_dir }}
|
|
60
|
+
操作系统: {{ os_info }}
|
|
61
|
+
当前时间: {{ current_time }}
|
|
62
|
+
</env>
|
|
63
|
+
|
|
46
64
|
{%- if structure %}
|
|
47
65
|
====
|
|
48
66
|
{{ structure }}
|
|
@@ -64,7 +82,7 @@ class CodeAutoGenerate:
|
|
|
64
82
|
{%- endif %}
|
|
65
83
|
|
|
66
84
|
{%- if context %}
|
|
67
|
-
====
|
|
85
|
+
====
|
|
68
86
|
{{ context }}
|
|
69
87
|
{%- endif %}
|
|
70
88
|
|
|
@@ -80,7 +98,7 @@ class CodeAutoGenerate:
|
|
|
80
98
|
##File: {{ key }}
|
|
81
99
|
{{ value }}
|
|
82
100
|
</user_rule>
|
|
83
|
-
{% endfor %}
|
|
101
|
+
{% endfor %}
|
|
84
102
|
{% endif %}
|
|
85
103
|
|
|
86
104
|
下面是用户的需求:
|
|
@@ -103,14 +121,21 @@ class CodeAutoGenerate:
|
|
|
103
121
|
|
|
104
122
|
请确保每份代码的完整性,而不要只生成修改部分。
|
|
105
123
|
"""
|
|
106
|
-
|
|
124
|
+
# 收集环境信息
|
|
125
|
+
current_dir = os.getcwd()
|
|
126
|
+
os_info = f"{platform.system()} {platform.release()}"
|
|
127
|
+
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
128
|
+
|
|
107
129
|
if not self.args.include_project_structure:
|
|
108
130
|
return {
|
|
109
|
-
"structure": "",
|
|
131
|
+
"structure": "",
|
|
132
|
+
"current_dir": current_dir,
|
|
133
|
+
"os_info": os_info,
|
|
134
|
+
"current_time": current_time,
|
|
110
135
|
}
|
|
111
|
-
|
|
112
|
-
extra_docs = get_rules()
|
|
113
|
-
|
|
136
|
+
|
|
137
|
+
extra_docs = get_rules()
|
|
138
|
+
|
|
114
139
|
return {
|
|
115
140
|
"structure": (
|
|
116
141
|
self.action.pp.get_tree_like_directory_structure()
|
|
@@ -118,38 +143,46 @@ class CodeAutoGenerate:
|
|
|
118
143
|
else ""
|
|
119
144
|
),
|
|
120
145
|
"extra_docs": extra_docs,
|
|
121
|
-
|
|
146
|
+
"current_dir": current_dir,
|
|
147
|
+
"os_info": os_info,
|
|
148
|
+
"current_time": current_time,
|
|
149
|
+
}
|
|
122
150
|
|
|
123
151
|
def single_round_run(
|
|
124
|
-
self, query: str, source_code_list: SourceCodeList
|
|
152
|
+
self, query: str, source_code_list: SourceCodeList
|
|
125
153
|
) -> CodeGenerateResult:
|
|
126
|
-
|
|
154
|
+
|
|
127
155
|
# Apply model filter for code_llm
|
|
128
156
|
printer = Printer()
|
|
129
157
|
for llm in self.llms:
|
|
130
158
|
model_filter = ModelPathFilter.from_model_object(llm, self.args)
|
|
131
159
|
filtered_sources = []
|
|
132
160
|
for source in source_code_list.sources:
|
|
133
|
-
if model_filter.is_accessible(source.module_name):
|
|
161
|
+
if model_filter.is_accessible(source.module_name):
|
|
134
162
|
filtered_sources.append(source)
|
|
135
163
|
else:
|
|
136
|
-
printer.print_in_terminal(
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
164
|
+
printer.print_in_terminal(
|
|
165
|
+
"index_file_filtered",
|
|
166
|
+
style="yellow",
|
|
167
|
+
file_path=source.module_name,
|
|
168
|
+
model_name=",".join(llm_utils.get_llm_names(llm)),
|
|
169
|
+
)
|
|
140
170
|
|
|
141
171
|
source_code_list = SourceCodeList(filtered_sources)
|
|
142
|
-
|
|
172
|
+
|
|
143
173
|
llm_config = {"human_as_model": self.args.human_as_model}
|
|
144
174
|
|
|
145
175
|
source_content = source_code_list.to_str()
|
|
146
176
|
|
|
147
177
|
active_context_manager = ActiveContextManager(self.llm, self.args.source_dir)
|
|
148
|
-
|
|
178
|
+
|
|
149
179
|
# 获取包上下文信息
|
|
150
180
|
package_context = ""
|
|
151
|
-
|
|
152
|
-
if
|
|
181
|
+
|
|
182
|
+
if (
|
|
183
|
+
self.args.enable_active_context
|
|
184
|
+
and self.args.enable_active_context_in_generate
|
|
185
|
+
):
|
|
153
186
|
# 获取活动上下文信息
|
|
154
187
|
result = active_context_manager.load_active_contexts_for_files(
|
|
155
188
|
[source.module_name for source in source_code_list.sources]
|
|
@@ -158,28 +191,32 @@ class CodeAutoGenerate:
|
|
|
158
191
|
if result.contexts:
|
|
159
192
|
package_context_parts = []
|
|
160
193
|
for dir_path, context in result.contexts.items():
|
|
161
|
-
package_context_parts.append(
|
|
162
|
-
|
|
194
|
+
package_context_parts.append(
|
|
195
|
+
f"<package_info>{context.content}</package_info>"
|
|
196
|
+
)
|
|
197
|
+
|
|
163
198
|
package_context = "\n".join(package_context_parts)
|
|
164
199
|
|
|
165
200
|
init_prompt = self.single_round_instruction.prompt(
|
|
166
|
-
instruction=query,
|
|
167
|
-
|
|
168
|
-
|
|
201
|
+
instruction=query,
|
|
202
|
+
content=source_content,
|
|
203
|
+
context=self.args.context,
|
|
204
|
+
package_context=package_context,
|
|
205
|
+
)
|
|
169
206
|
|
|
170
|
-
with open(self.args.target_file, "w",encoding="utf-8") as file:
|
|
207
|
+
with open(self.args.target_file, "w", encoding="utf-8") as file:
|
|
171
208
|
file.write(init_prompt)
|
|
172
209
|
|
|
173
210
|
conversations = []
|
|
174
211
|
|
|
175
212
|
if self.args.system_prompt and self.args.system_prompt.strip() == "claude":
|
|
176
213
|
conversations.append(
|
|
177
|
-
{"role": "system", "content": sys_prompt.claude_sys_prompt.prompt()}
|
|
214
|
+
{"role": "system", "content": sys_prompt.claude_sys_prompt.prompt()}
|
|
215
|
+
)
|
|
178
216
|
elif self.args.system_prompt:
|
|
179
|
-
conversations.append(
|
|
180
|
-
{"role": "system", "content": self.args.system_prompt})
|
|
217
|
+
conversations.append({"role": "system", "content": self.args.system_prompt})
|
|
181
218
|
|
|
182
|
-
conversations.append({"role": "user", "content": init_prompt})
|
|
219
|
+
conversations.append({"role": "user", "content": init_prompt})
|
|
183
220
|
|
|
184
221
|
conversations_list = []
|
|
185
222
|
results = []
|
|
@@ -193,93 +230,114 @@ class CodeAutoGenerate:
|
|
|
193
230
|
|
|
194
231
|
printer = Printer()
|
|
195
232
|
estimated_input_tokens = count_tokens(
|
|
196
|
-
json.dumps(conversations, ensure_ascii=False)
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
233
|
+
json.dumps(conversations, ensure_ascii=False)
|
|
234
|
+
)
|
|
235
|
+
printer.print_in_terminal(
|
|
236
|
+
"estimated_input_tokens_in_generate",
|
|
237
|
+
style="yellow",
|
|
238
|
+
estimated_input_tokens_in_generate=estimated_input_tokens,
|
|
239
|
+
generate_mode="diff",
|
|
240
|
+
)
|
|
202
241
|
|
|
203
242
|
if not self.args.human_as_model or get_run_context().mode == RunMode.WEB:
|
|
204
|
-
with ThreadPoolExecutor(
|
|
243
|
+
with ThreadPoolExecutor(
|
|
244
|
+
max_workers=len(self.llms) * self.generate_times_same_model
|
|
245
|
+
) as executor:
|
|
205
246
|
futures = []
|
|
206
247
|
count = 0
|
|
207
248
|
for llm in self.llms:
|
|
208
|
-
|
|
209
|
-
model_names_list = llm_utils.get_llm_names(llm)
|
|
249
|
+
|
|
250
|
+
model_names_list = llm_utils.get_llm_names(llm)
|
|
210
251
|
model_name = None
|
|
211
252
|
if model_names_list:
|
|
212
|
-
model_name = model_names_list[0]
|
|
253
|
+
model_name = model_names_list[0]
|
|
213
254
|
|
|
214
255
|
for _ in range(self.generate_times_same_model):
|
|
215
|
-
model_names.append(model_name)
|
|
256
|
+
model_names.append(model_name)
|
|
216
257
|
if count == 0:
|
|
258
|
+
|
|
217
259
|
def job():
|
|
218
260
|
stream_generator = stream_chat_with_continue(
|
|
219
|
-
llm=llm,
|
|
220
|
-
conversations=conversations,
|
|
261
|
+
llm=llm,
|
|
262
|
+
conversations=conversations,
|
|
221
263
|
llm_config=llm_config,
|
|
222
|
-
args=self.args
|
|
264
|
+
args=self.args,
|
|
223
265
|
)
|
|
224
266
|
full_response, last_meta = stream_out(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
267
|
+
stream_generator,
|
|
268
|
+
model_name=model_name,
|
|
269
|
+
title=get_message_with_format(
|
|
270
|
+
"code_generate_title", model_name=model_name
|
|
271
|
+
),
|
|
272
|
+
args=self.args,
|
|
273
|
+
extra_meta={
|
|
274
|
+
"stream_out_type": CodeGenerateStreamOutType.CODE_GENERATE.value
|
|
275
|
+
},
|
|
276
|
+
)
|
|
233
277
|
return ChatWithContinueResult(
|
|
234
278
|
content=full_response,
|
|
235
279
|
input_tokens_count=last_meta.input_tokens_count,
|
|
236
|
-
generated_tokens_count=last_meta.generated_tokens_count
|
|
280
|
+
generated_tokens_count=last_meta.generated_tokens_count,
|
|
237
281
|
)
|
|
282
|
+
|
|
238
283
|
futures.append(executor.submit(job))
|
|
239
|
-
else:
|
|
240
|
-
futures.append(
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
284
|
+
else:
|
|
285
|
+
futures.append(
|
|
286
|
+
executor.submit(
|
|
287
|
+
chat_with_continue,
|
|
288
|
+
llm=llm,
|
|
289
|
+
conversations=conversations,
|
|
290
|
+
llm_config=llm_config,
|
|
291
|
+
args=self.args,
|
|
292
|
+
)
|
|
293
|
+
)
|
|
247
294
|
count += 1
|
|
248
|
-
|
|
295
|
+
|
|
249
296
|
temp_results = [future.result() for future in futures]
|
|
250
|
-
|
|
251
|
-
for result,model_name in zip(temp_results,model_names):
|
|
297
|
+
|
|
298
|
+
for result, model_name in zip(temp_results, model_names):
|
|
252
299
|
results.append(result.content)
|
|
253
300
|
input_tokens_count += result.input_tokens_count
|
|
254
301
|
generated_tokens_count += result.generated_tokens_count
|
|
255
|
-
model_info = llm_utils.get_model_info(
|
|
302
|
+
model_info = llm_utils.get_model_info(
|
|
303
|
+
model_name, self.args.product_mode
|
|
304
|
+
)
|
|
256
305
|
input_cost = model_info.get("input_price", 0) if model_info else 0
|
|
257
306
|
output_cost = model_info.get("output_price", 0) if model_info else 0
|
|
258
|
-
input_tokens_cost +=
|
|
259
|
-
|
|
307
|
+
input_tokens_cost += (
|
|
308
|
+
input_cost * result.input_tokens_count / 1000000
|
|
309
|
+
)
|
|
310
|
+
generated_tokens_cost += (
|
|
311
|
+
output_cost * result.generated_tokens_count / 1000000
|
|
312
|
+
)
|
|
260
313
|
|
|
261
314
|
for result in results:
|
|
262
315
|
conversations_list.append(
|
|
263
|
-
conversations + [{"role": "assistant", "content": result}]
|
|
316
|
+
conversations + [{"role": "assistant", "content": result}]
|
|
317
|
+
)
|
|
264
318
|
else:
|
|
265
319
|
for _ in range(self.args.human_model_num):
|
|
266
320
|
single_result = chat_with_continue(
|
|
267
|
-
llm=self.llms[0],
|
|
268
|
-
conversations=conversations,
|
|
321
|
+
llm=self.llms[0],
|
|
322
|
+
conversations=conversations,
|
|
269
323
|
llm_config=llm_config,
|
|
270
|
-
args=self.args
|
|
324
|
+
args=self.args,
|
|
271
325
|
)
|
|
272
326
|
results.append(single_result.content)
|
|
273
327
|
input_tokens_count += single_result.input_tokens_count
|
|
274
328
|
generated_tokens_count += single_result.generated_tokens_count
|
|
275
329
|
conversations_list.append(
|
|
276
|
-
conversations
|
|
330
|
+
conversations
|
|
331
|
+
+ [{"role": "assistant", "content": single_result.content}]
|
|
332
|
+
)
|
|
277
333
|
|
|
278
334
|
statistics = {
|
|
279
335
|
"input_tokens_count": input_tokens_count,
|
|
280
336
|
"generated_tokens_count": generated_tokens_count,
|
|
281
337
|
"input_tokens_cost": input_tokens_cost,
|
|
282
|
-
"generated_tokens_cost": generated_tokens_cost
|
|
338
|
+
"generated_tokens_cost": generated_tokens_cost,
|
|
283
339
|
}
|
|
284
340
|
|
|
285
|
-
return CodeGenerateResult(
|
|
341
|
+
return CodeGenerateResult(
|
|
342
|
+
contents=results, conversations=conversations_list, metadata=statistics
|
|
343
|
+
)
|