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
autocoder/rag/agentic_rag.py
CHANGED
|
@@ -14,47 +14,67 @@ from importlib.metadata import version
|
|
|
14
14
|
from pydantic import BaseModel
|
|
15
15
|
from autocoder.common import openai_content as OpenAIContentProcessor
|
|
16
16
|
from autocoder.rag.long_context_rag import LongContextRAG
|
|
17
|
-
import json
|
|
17
|
+
import json
|
|
18
|
+
import os
|
|
18
19
|
from autocoder.agent.base_agentic.base_agent import BaseAgent
|
|
19
|
-
from autocoder.agent.base_agentic.types import AgentRequest
|
|
20
|
+
from autocoder.agent.base_agentic.types import AgentRequest, AgenticEditConversationConfig
|
|
20
21
|
from autocoder.common import SourceCodeList
|
|
21
|
-
from autocoder.rag.tools import register_search_tool, register_recall_tool
|
|
22
|
+
from autocoder.rag.tools import register_search_tool, register_recall_tool, register_todo_read_tool, register_todo_write_tool, register_web_search_tool, register_web_crawl_tool
|
|
22
23
|
from byzerllm.utils.types import SingleOutputMeta
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
self.llm = llm
|
|
24
|
+
import uuid
|
|
25
|
+
|
|
26
|
+
class RAGAgent(BaseAgent):
|
|
27
|
+
def __init__(self, name: str,
|
|
28
|
+
llm: Union[byzerllm.ByzerLLM, byzerllm.SimpleByzerLLM],
|
|
29
|
+
files: SourceCodeList,
|
|
30
|
+
args: AutoCoderArgs,
|
|
31
|
+
rag: LongContextRAG,
|
|
32
|
+
conversation_history: Optional[List[Dict[str, Any]]] = None,
|
|
33
|
+
custom_system_prompt: Optional[str] = None,
|
|
34
|
+
conversation_config: Optional[Any] = None,
|
|
35
|
+
cancel_token: Optional[str] = None):
|
|
36
|
+
|
|
37
|
+
if conversation_config is None:
|
|
38
|
+
conversation_config = AgenticEditConversationConfig(
|
|
39
|
+
conversation_name=f"rag_session_{uuid.uuid4().hex[:8]}",
|
|
40
|
+
conversation_id=str(uuid.uuid4())
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
self.llm = llm
|
|
44
44
|
self.default_llm = self.llm
|
|
45
45
|
self.context_prune_llm = self.default_llm
|
|
46
46
|
if self.default_llm.get_sub_client("context_prune_model"):
|
|
47
|
-
self.context_prune_llm = self.default_llm.get_sub_client(
|
|
47
|
+
self.context_prune_llm = self.default_llm.get_sub_client(
|
|
48
|
+
"context_prune_model")
|
|
48
49
|
|
|
49
50
|
self.llm = self.default_llm
|
|
50
51
|
if self.default_llm.get_sub_client("agentic_model"):
|
|
51
52
|
self.llm = self.default_llm.get_sub_client("agentic_model")
|
|
52
|
-
|
|
53
|
-
self.rag = rag
|
|
54
|
-
super().__init__(
|
|
53
|
+
|
|
54
|
+
self.rag = rag
|
|
55
|
+
super().__init__(
|
|
56
|
+
name=name,
|
|
57
|
+
llm=self.llm,
|
|
58
|
+
files=files,
|
|
59
|
+
args=args,
|
|
60
|
+
conversation_history=conversation_history,
|
|
61
|
+
default_tools_list=["read_file"],
|
|
62
|
+
custom_system_prompt=custom_system_prompt,
|
|
63
|
+
conversation_config=conversation_config,
|
|
64
|
+
cancel_token=cancel_token
|
|
65
|
+
)
|
|
55
66
|
# 注册RAG工具
|
|
56
67
|
# register_search_tool()
|
|
57
68
|
register_recall_tool()
|
|
69
|
+
register_todo_read_tool()
|
|
70
|
+
register_todo_write_tool()
|
|
71
|
+
|
|
72
|
+
# 如果配置了firecrawl_api_key,则注册web_search_tool和web_crawl_tool
|
|
73
|
+
if self.args.firecrawl_api_key or self.args.metaso_api_key or self.args.bochaai_api_key:
|
|
74
|
+
logger.info(f"firecrawl_api_key or metaso_api_key or bochaai_api_key is configured, register web_search_tool and web_crawl_tool")
|
|
75
|
+
register_web_search_tool()
|
|
76
|
+
register_web_crawl_tool()
|
|
77
|
+
|
|
58
78
|
|
|
59
79
|
class AgenticRAG:
|
|
60
80
|
def __init__(
|
|
@@ -64,19 +84,18 @@ class AgenticRAG:
|
|
|
64
84
|
path: str,
|
|
65
85
|
tokenizer_path: Optional[str] = None,
|
|
66
86
|
) -> None:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
87
|
+
self.llm = llm
|
|
88
|
+
self.args = args
|
|
89
|
+
self.path = path
|
|
90
|
+
self.tokenizer_path = tokenizer_path
|
|
91
|
+
self.rag = LongContextRAG(
|
|
92
|
+
llm=self.llm, args=self.args, path=self.path, tokenizer_path=self.tokenizer_path)
|
|
73
93
|
|
|
74
94
|
def build(self):
|
|
75
95
|
pass
|
|
76
96
|
|
|
77
97
|
def search(self, query: str) -> List[SourceCode]:
|
|
78
98
|
return []
|
|
79
|
-
|
|
80
99
|
|
|
81
100
|
def stream_chat_oai(
|
|
82
101
|
self,
|
|
@@ -85,7 +104,7 @@ class AgenticRAG:
|
|
|
85
104
|
role_mapping=None,
|
|
86
105
|
llm_config: Dict[str, Any] = {},
|
|
87
106
|
extra_request_params: Dict[str, Any] = {}
|
|
88
|
-
):
|
|
107
|
+
):
|
|
89
108
|
try:
|
|
90
109
|
return self._stream_chat_oai(
|
|
91
110
|
conversations,
|
|
@@ -100,7 +119,7 @@ class AgenticRAG:
|
|
|
100
119
|
return ["出现错误,请稍后再试。"], []
|
|
101
120
|
|
|
102
121
|
@byzerllm.prompt()
|
|
103
|
-
def conversation_to_query(self,messages: List[Dict[str, Any]]):
|
|
122
|
+
def conversation_to_query(self, messages: List[Dict[str, Any]]):
|
|
104
123
|
'''
|
|
105
124
|
【历史对话】按时间顺序排列,从旧到新:
|
|
106
125
|
{% for message in messages %}
|
|
@@ -111,45 +130,139 @@ class AgenticRAG:
|
|
|
111
130
|
</content>
|
|
112
131
|
</message>
|
|
113
132
|
{% endfor %}
|
|
114
|
-
|
|
133
|
+
|
|
115
134
|
【当前问题】用户的最新需求如下:
|
|
116
135
|
<current_query>
|
|
117
136
|
{{ query }}
|
|
118
137
|
</current_query>
|
|
119
|
-
'''
|
|
138
|
+
'''
|
|
120
139
|
temp_messages = messages[0:-1]
|
|
121
140
|
message = messages[-1]
|
|
122
141
|
|
|
123
142
|
return {
|
|
124
143
|
"messages": temp_messages,
|
|
125
|
-
"query":message["content"]
|
|
144
|
+
"query": message["content"]
|
|
126
145
|
}
|
|
127
146
|
|
|
128
147
|
@byzerllm.prompt()
|
|
129
148
|
def system_prompt(self):
|
|
130
149
|
'''
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
1.
|
|
135
|
-
2.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
150
|
+
You are an intelligent assistant based on a knowledge base. My core capability is to answer user questions through Retrieval-Augmented Generation (RAG) technology.
|
|
151
|
+
|
|
152
|
+
Your workflow is as follows:
|
|
153
|
+
1. When users ask questions, you first understand the core intent and key information needs of the question
|
|
154
|
+
2. For complex questions, you MUST use TODO tools to manage the analysis and retrieval process
|
|
155
|
+
3. You analyze the question from multiple angles, determine the best retrieval strategy and keywords, then use the recall tool to get the most relevant detailed content
|
|
156
|
+
4. If the obtained information is sufficient to answer the user's question, you will generate an answer directly
|
|
157
|
+
5. If the obtained information is insufficient, you will continue using the recall tool until you have obtained enough information
|
|
158
|
+
|
|
159
|
+
## IMPORTANT: All Complex Questions MUST Use TODO Files
|
|
160
|
+
|
|
161
|
+
For ANY complex question that requires multiple steps, comparisons, or process tracing, you MUST use TODO tools to manage the work:
|
|
162
|
+
|
|
163
|
+
### Example 1: Comparison Questions
|
|
164
|
+
User question: "What are the differences between the implementation methods of the user authentication module and the permission management module in the system?"
|
|
165
|
+
|
|
166
|
+
**MANDATORY Processing with TODO:**
|
|
167
|
+
|
|
168
|
+
1. **First create TODO list**:
|
|
169
|
+
```
|
|
170
|
+
<todo_write>
|
|
171
|
+
<action>create</action>
|
|
172
|
+
<content>
|
|
173
|
+
<task>Retrieve and analyze user authentication module implementation details</task>
|
|
174
|
+
<task>Retrieve and analyze permission management module implementation details</task>
|
|
175
|
+
<task>Compare architecture design between the two modules</task>
|
|
176
|
+
<task>Compare technology selection and patterns used</task>
|
|
177
|
+
<task>Synthesize findings into comprehensive comparison</task>
|
|
178
|
+
</content>
|
|
179
|
+
<priority>high</priority>
|
|
180
|
+
</todo_write>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
2. **Execute with TODO tracking**:
|
|
184
|
+
- Check todo_read before starting
|
|
185
|
+
- Mark first todo as in_progress
|
|
186
|
+
- Use recall("user authentication login token") for authentication info
|
|
187
|
+
- Mark first todo as completed with notes
|
|
188
|
+
- Mark second todo as in_progress
|
|
189
|
+
- Use recall("permission management authorization role RBAC") for permission info
|
|
190
|
+
- Mark second todo as completed
|
|
191
|
+
- Continue through all todos systematically
|
|
192
|
+
|
|
193
|
+
3. **Complete analysis**: After all todos are marked completed, provide comprehensive comparison
|
|
194
|
+
|
|
195
|
+
### Example 2: Process Tracing Questions
|
|
196
|
+
User question: "What is the entire process from user login to order completion? Which modules and interfaces are involved?"
|
|
197
|
+
|
|
198
|
+
**MANDATORY Processing with TODO:**
|
|
199
|
+
|
|
200
|
+
1. **First create TODO list**:
|
|
201
|
+
```
|
|
202
|
+
<todo_write>
|
|
203
|
+
<action>create</action>
|
|
204
|
+
<content>
|
|
205
|
+
<task>Trace and document user login process and entry points</task>
|
|
206
|
+
<task>Analyze session management and token verification flow</task>
|
|
207
|
+
<task>Map order creation process and required data</task>
|
|
208
|
+
<task>Track order processing workflow and state transitions</task>
|
|
209
|
+
<task>Identify payment integration and completion mechanisms</task>
|
|
210
|
+
<task>Document all involved modules and interfaces</task>
|
|
211
|
+
<task>Create end-to-end process summary</task>
|
|
212
|
+
</content>
|
|
213
|
+
<priority>high</priority>
|
|
214
|
+
</todo_write>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
2. **Execute with TODO tracking**:
|
|
218
|
+
- Use todo_read to check current status
|
|
219
|
+
- For each todo: mark as in_progress → execute recalls → mark as completed
|
|
220
|
+
- Use recall for each process step (login, session, order, payment)
|
|
221
|
+
- Add new todos if additional steps are discovered
|
|
222
|
+
- Document findings in todo notes
|
|
223
|
+
|
|
224
|
+
3. **Synthesize results**: Once all todos completed, organize the complete business flow
|
|
225
|
+
|
|
226
|
+
### When TODO Files are MANDATORY:
|
|
227
|
+
|
|
228
|
+
**You MUST use TODO files for:**
|
|
229
|
+
- Any question requiring comparison between multiple items
|
|
230
|
+
- Process tracing or workflow analysis questions
|
|
231
|
+
- Questions with "step by step", "entire process", or "all involved" keywords
|
|
232
|
+
- Multi-part questions that need systematic investigation
|
|
233
|
+
- Questions about relationships between different components
|
|
234
|
+
- Any analysis requiring more than 3 recall operations
|
|
235
|
+
|
|
236
|
+
### TODO Tool Usage Rules:
|
|
237
|
+
|
|
238
|
+
1. **Always start complex questions with todo_write**: Create a comprehensive plan BEFORE any recall
|
|
239
|
+
2. **Use todo_read before each major step**: Maintain awareness of progress
|
|
240
|
+
3. **Mark todos systematically**: in_progress → completed with notes
|
|
241
|
+
4. **Add discovered todos**: Use action="add_task" when finding new aspects to investigate
|
|
242
|
+
5. **Document in notes**: Record key findings, blockers, or important information
|
|
243
|
+
|
|
244
|
+
### Tool Usage Principles:
|
|
245
|
+
- **todo_write/todo_read**: MANDATORY for all complex questions - use FIRST before any recalls
|
|
246
|
+
- **recall tool**: Primary tool for information retrieval after TODO planning
|
|
247
|
+
- **read_file tool**: Only when specific file details are needed beyond recall results
|
|
248
|
+
- **Iterative approach**: Adjust keywords and add todos based on findings
|
|
249
|
+
|
|
250
|
+
### Remember:
|
|
251
|
+
This is a RAG system focused on information retrieval and synthesis. We do not modify code or files, we only retrieve and analyze information to answer questions. TODO tools help organize complex retrieval tasks systematically.
|
|
252
|
+
|
|
253
|
+
8. When you encounter images, please infer the relevance of the image to the question based on the surrounding text content. If relevant, output the Markdown image path using ![]() format in your answer; otherwise, do not output it.
|
|
140
254
|
{% if local_image_host %}
|
|
141
|
-
9.
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
|
|
255
|
+
9. Image path processing
|
|
256
|
+
- Image addresses need to return absolute paths
|
|
257
|
+
- For Windows-style paths, convert to Linux-style, for example:  converts to 
|
|
258
|
+
- To request image resources, add http://{{ local_image_host }}/static/ as a prefix
|
|
259
|
+
For example: , return 
|
|
146
260
|
{% endif %}
|
|
147
|
-
'''
|
|
261
|
+
'''
|
|
148
262
|
return {
|
|
149
263
|
"local_image_host": self.args.local_image_host
|
|
150
264
|
}
|
|
151
265
|
|
|
152
|
-
|
|
153
266
|
def _stream_chat_oai(
|
|
154
267
|
self,
|
|
155
268
|
conversations,
|
|
@@ -160,45 +273,72 @@ class AgenticRAG:
|
|
|
160
273
|
):
|
|
161
274
|
if not llm_config:
|
|
162
275
|
llm_config = {}
|
|
163
|
-
|
|
276
|
+
|
|
164
277
|
if extra_request_params:
|
|
165
278
|
llm_config.update(extra_request_params)
|
|
166
|
-
|
|
167
|
-
conversations = OpenAIContentProcessor.process_conversations(
|
|
279
|
+
|
|
280
|
+
conversations = OpenAIContentProcessor.process_conversations(
|
|
281
|
+
conversations)
|
|
168
282
|
|
|
169
283
|
context = []
|
|
170
284
|
|
|
171
285
|
def _generate_sream():
|
|
172
|
-
|
|
173
|
-
|
|
286
|
+
# 提取最后一个 user 消息和对话历史
|
|
287
|
+
last_user_message = None
|
|
288
|
+
conversation_history = []
|
|
289
|
+
|
|
290
|
+
# 从后往前查找最后一个 role="user" 的消息
|
|
291
|
+
for i in range(len(conversations) - 1, -1, -1):
|
|
292
|
+
if conversations[i].get("role") == "user":
|
|
293
|
+
last_user_message = conversations[i]["content"]
|
|
294
|
+
# 将之前的所有消息作为历史记录(不包括最后一个user消息)
|
|
295
|
+
conversation_history = conversations[:i]
|
|
296
|
+
break
|
|
297
|
+
|
|
298
|
+
# 如果没有找到 user 消息,使用默认处理
|
|
299
|
+
if last_user_message is None:
|
|
300
|
+
last_user_message = self.conversation_to_query.prompt(
|
|
301
|
+
conversations)
|
|
302
|
+
conversation_history = []
|
|
303
|
+
|
|
304
|
+
recall_request = AgentRequest(user_input=last_user_message)
|
|
305
|
+
|
|
306
|
+
# 为每个RAGAgent实例创建新的conversation_config
|
|
307
|
+
conversation_config = AgenticEditConversationConfig(
|
|
308
|
+
conversation_name=f"rag_session_{uuid.uuid4().hex[:8]}",
|
|
309
|
+
conversation_id=str(uuid.uuid4())
|
|
310
|
+
)
|
|
311
|
+
|
|
174
312
|
rag_agent = RAGAgent(
|
|
175
313
|
name="RAGAgent",
|
|
176
314
|
llm=self.llm,
|
|
177
315
|
files=SourceCodeList(sources=[]),
|
|
178
316
|
args=self.args,
|
|
179
317
|
rag=self.rag,
|
|
180
|
-
conversation_history=
|
|
181
|
-
|
|
318
|
+
conversation_history=conversation_history,
|
|
319
|
+
custom_system_prompt=None,
|
|
320
|
+
conversation_config=conversation_config,
|
|
321
|
+
cancel_token=None
|
|
322
|
+
)
|
|
182
323
|
|
|
183
324
|
rag_agent.who_am_i(self.system_prompt.prompt())
|
|
184
|
-
|
|
185
|
-
events =rag_agent.run_with_generator(recall_request)
|
|
186
|
-
for (t,content) in events:
|
|
187
|
-
if t == "thinking":
|
|
325
|
+
|
|
326
|
+
events = rag_agent.run_with_generator(recall_request)
|
|
327
|
+
for (t, content) in events:
|
|
328
|
+
if t == "thinking":
|
|
188
329
|
yield ("", SingleOutputMeta(
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
330
|
+
generated_tokens_count=0,
|
|
331
|
+
input_tokens_count=0,
|
|
332
|
+
reasoning_content=content,
|
|
333
|
+
))
|
|
193
334
|
else:
|
|
194
335
|
yield (content, SingleOutputMeta(
|
|
195
336
|
generated_tokens_count=0,
|
|
196
337
|
input_tokens_count=0,
|
|
197
|
-
reasoning_content="",
|
|
338
|
+
reasoning_content="",
|
|
198
339
|
))
|
|
199
340
|
|
|
200
341
|
return _generate_sream(), context
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
342
|
|
|
343
|
+
def close(self):
|
|
344
|
+
self.rag.close()
|
|
@@ -157,8 +157,7 @@ class AutoCoderRAGAsyncUpdateQueue(BaseCacheManager):
|
|
|
157
157
|
# 检查是否在忽略规则中
|
|
158
158
|
if self.ignore_spec and self.ignore_spec.match_file(os.path.relpath(file_path, self.path)):
|
|
159
159
|
return
|
|
160
|
-
|
|
161
|
-
logger.info(f"File change detected: {change_type} - {file_path}")
|
|
160
|
+
|
|
162
161
|
self.trigger_update()
|
|
163
162
|
except Exception as e:
|
|
164
163
|
logger.error(f"Error in file change handler: {e}")
|
|
@@ -18,7 +18,7 @@ from byzerllm.utils.client import code_utils
|
|
|
18
18
|
from autocoder.utils.llms import get_single_llm
|
|
19
19
|
from loguru import logger
|
|
20
20
|
from typing import List, Tuple, Optional
|
|
21
|
-
from autocoder.common.
|
|
21
|
+
from autocoder.common.text_similarity import TextSimilarity
|
|
22
22
|
from pydantic import BaseModel
|
|
23
23
|
|
|
24
24
|
|
|
@@ -32,6 +32,7 @@ from autocoder.common.save_formatted_log import save_formatted_log
|
|
|
32
32
|
from autocoder.rag.types import (
|
|
33
33
|
RecallStat,ChunkStat,AnswerStat,OtherStat,RAGStat
|
|
34
34
|
)
|
|
35
|
+
from autocoder.common.llms import LLMManager
|
|
35
36
|
import json, os
|
|
36
37
|
try:
|
|
37
38
|
from autocoder_pro.rag.llm_compute import LLMComputeEngine
|
|
@@ -1103,19 +1104,21 @@ class LongContextRAG:
|
|
|
1103
1104
|
|
|
1104
1105
|
def _estimate_token_cost(self, rag_stat: RAGStat) -> float:
|
|
1105
1106
|
"""估算当前请求的令牌成本(人民币)"""
|
|
1106
|
-
|
|
1107
|
-
|
|
1107
|
+
llm_manager = LLMManager()
|
|
1108
1108
|
total_cost = 0.0
|
|
1109
1109
|
|
|
1110
1110
|
# 计算召回阶段成本
|
|
1111
1111
|
if rag_stat.recall_stat.model_name != "unknown":
|
|
1112
1112
|
try:
|
|
1113
|
-
recall_model =
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1113
|
+
recall_model = llm_manager.get_model(rag_stat.recall_stat.model_name)
|
|
1114
|
+
if recall_model:
|
|
1115
|
+
input_cost = recall_model.input_price / 1000000
|
|
1116
|
+
output_cost = recall_model.output_price / 1000000
|
|
1117
|
+
recall_cost = (rag_stat.recall_stat.total_input_tokens * input_cost) + \
|
|
1118
|
+
(rag_stat.recall_stat.total_generated_tokens * output_cost)
|
|
1119
|
+
total_cost += recall_cost
|
|
1120
|
+
else:
|
|
1121
|
+
recall_cost = 0.0
|
|
1119
1122
|
except Exception as e:
|
|
1120
1123
|
logger.warning(f"计算召回阶段成本时出错: {str(e)}")
|
|
1121
1124
|
recall_cost = 0.0
|
|
@@ -1125,12 +1128,15 @@ class LongContextRAG:
|
|
|
1125
1128
|
# 计算分块阶段成本
|
|
1126
1129
|
if rag_stat.chunk_stat.model_name != "unknown":
|
|
1127
1130
|
try:
|
|
1128
|
-
chunk_model =
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1131
|
+
chunk_model = llm_manager.get_model(rag_stat.chunk_stat.model_name)
|
|
1132
|
+
if chunk_model:
|
|
1133
|
+
input_cost = chunk_model.input_price / 1000000
|
|
1134
|
+
output_cost = chunk_model.output_price / 1000000
|
|
1135
|
+
chunk_cost = (rag_stat.chunk_stat.total_input_tokens * input_cost) + \
|
|
1136
|
+
(rag_stat.chunk_stat.total_generated_tokens * output_cost)
|
|
1137
|
+
total_cost += chunk_cost
|
|
1138
|
+
else:
|
|
1139
|
+
chunk_cost = 0.0
|
|
1134
1140
|
except Exception as e:
|
|
1135
1141
|
logger.warning(f"计算分块阶段成本时出错: {str(e)}")
|
|
1136
1142
|
# 使用默认值
|
|
@@ -1141,12 +1147,15 @@ class LongContextRAG:
|
|
|
1141
1147
|
# 计算答案生成阶段成本
|
|
1142
1148
|
if rag_stat.answer_stat.model_name != "unknown":
|
|
1143
1149
|
try:
|
|
1144
|
-
answer_model =
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
+
answer_model = llm_manager.get_model(rag_stat.answer_stat.model_name)
|
|
1151
|
+
if answer_model:
|
|
1152
|
+
input_cost = answer_model.input_price / 1000000
|
|
1153
|
+
output_cost = answer_model.output_price / 1000000
|
|
1154
|
+
answer_cost = (rag_stat.answer_stat.total_input_tokens * input_cost) + \
|
|
1155
|
+
(rag_stat.answer_stat.total_generated_tokens * output_cost)
|
|
1156
|
+
total_cost += answer_cost
|
|
1157
|
+
else:
|
|
1158
|
+
answer_cost = 0.0
|
|
1150
1159
|
except Exception as e:
|
|
1151
1160
|
logger.warning(f"计算答案生成阶段成本时出错: {str(e)}")
|
|
1152
1161
|
# 使用默认值
|
|
@@ -1158,12 +1167,15 @@ class LongContextRAG:
|
|
|
1158
1167
|
for i, other_stat in enumerate(rag_stat.other_stats):
|
|
1159
1168
|
if other_stat.model_name != "unknown":
|
|
1160
1169
|
try:
|
|
1161
|
-
other_model =
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1170
|
+
other_model = llm_manager.get_model(other_stat.model_name)
|
|
1171
|
+
if other_model:
|
|
1172
|
+
input_cost = other_model.input_price / 1000000
|
|
1173
|
+
output_cost = other_model.output_price / 1000000
|
|
1174
|
+
other_cost = (other_stat.total_input_tokens * input_cost) + \
|
|
1175
|
+
(other_stat.total_generated_tokens * output_cost)
|
|
1176
|
+
total_cost += other_cost
|
|
1177
|
+
else:
|
|
1178
|
+
other_cost = 0.0
|
|
1167
1179
|
except Exception as e:
|
|
1168
1180
|
logger.warning(f"计算其他阶段 {i+1} 成本时出错: {str(e)}")
|
|
1169
1181
|
# 使用默认值
|
|
@@ -1174,3 +1186,7 @@ class LongContextRAG:
|
|
|
1174
1186
|
# 将总成本保存到 rag_stat
|
|
1175
1187
|
rag_stat.cost = total_cost
|
|
1176
1188
|
return total_cost
|
|
1189
|
+
|
|
1190
|
+
def close(self):
|
|
1191
|
+
if self.tokenizer and isinstance(self.tokenizer, TokenCounter):
|
|
1192
|
+
self.tokenizer.close()
|
|
@@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
|
|
|
2
2
|
from typing import List, Dict, Any, Generator
|
|
3
3
|
import byzerllm
|
|
4
4
|
from autocoder.common import AutoCoderArgs
|
|
5
|
-
from autocoder.common.rulefiles
|
|
5
|
+
from autocoder.common.rulefiles import get_rules
|
|
6
6
|
|
|
7
7
|
class QAConversationStrategy(ABC):
|
|
8
8
|
"""
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""
|
|
2
|
+
RAG Terminal - RAG 系统的终端交互入口模块
|
|
3
|
+
|
|
4
|
+
这个模块提供了 RAG 系统的终端交互功能,代码结构清晰,职责分明。
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# 延迟导入以避免循环依赖
|
|
8
|
+
__all__ = ["run_cli"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def __getattr__(name):
|
|
12
|
+
"""延迟导入以避免循环依赖"""
|
|
13
|
+
if name == "run_cli":
|
|
14
|
+
from autocoder.rag.terminal.bootstrap import run_cli
|
|
15
|
+
|
|
16
|
+
return run_cli
|
|
17
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|