auto-coder 1.0.0__py3-none-any.whl → 2.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.1.dist-info/LICENSE +158 -0
- auto_coder-2.0.1.dist-info/METADATA +558 -0
- auto_coder-2.0.1.dist-info/RECORD +795 -0
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/WHEEL +1 -1
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +24 -3
- autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
- autocoder/agent/base_agentic/types.py +42 -0
- autocoder/agent/entry_command_agent/chat.py +77 -73
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +962 -2345
- autocoder/auto_coder_terminal.py +26 -0
- autocoder/auto_coder_terminal_v3.py +190 -0
- autocoder/chat/conf_command.py +224 -124
- autocoder/chat/models_command.py +361 -299
- autocoder/chat/rules_command.py +79 -31
- autocoder/chat_auto_coder.py +988 -398
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +25 -8
- autocoder/commands/auto_web.py +1 -1
- autocoder/commands/tools.py +44 -44
- autocoder/common/__init__.py +150 -128
- autocoder/common/ac_style_command_parser/__init__.py +39 -2
- autocoder/common/ac_style_command_parser/config.py +422 -0
- autocoder/common/ac_style_command_parser/parser.py +292 -78
- autocoder/common/ac_style_command_parser/test_parser.py +241 -16
- autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
- autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
- autocoder/common/action_yml_file_manager.py +25 -13
- autocoder/common/agent_events/__init__.py +52 -0
- autocoder/common/agent_events/agent_event_emitter.py +193 -0
- autocoder/common/agent_events/event_factory.py +177 -0
- autocoder/common/agent_events/examples.py +307 -0
- autocoder/common/agent_events/types.py +113 -0
- autocoder/common/agent_events/utils.py +68 -0
- autocoder/common/agent_hooks/__init__.py +44 -0
- autocoder/common/agent_hooks/examples.py +582 -0
- autocoder/common/agent_hooks/hook_executor.py +217 -0
- autocoder/common/agent_hooks/hook_manager.py +288 -0
- autocoder/common/agent_hooks/types.py +133 -0
- autocoder/common/agent_hooks/utils.py +99 -0
- autocoder/common/agent_query_queue/queue_executor.py +324 -0
- autocoder/common/agent_query_queue/queue_manager.py +325 -0
- autocoder/common/agents/__init__.py +11 -0
- autocoder/common/agents/agent_manager.py +323 -0
- autocoder/common/agents/agent_parser.py +189 -0
- autocoder/common/agents/example_usage.py +344 -0
- autocoder/common/agents/integration_example.py +330 -0
- autocoder/common/agents/test_agent_parser.py +545 -0
- autocoder/common/async_utils.py +101 -0
- autocoder/common/auto_coder_lang.py +23 -972
- autocoder/common/autocoderargs_parser/__init__.py +14 -0
- autocoder/common/autocoderargs_parser/parser.py +184 -0
- autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
- autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
- autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
- autocoder/common/autocoderargs_parser/token_parser.py +290 -0
- autocoder/common/buildin_tokenizer.py +2 -4
- autocoder/common/code_auto_generate.py +149 -74
- autocoder/common/code_auto_generate_diff.py +163 -70
- autocoder/common/code_auto_generate_editblock.py +179 -89
- autocoder/common/code_auto_generate_strict_diff.py +167 -72
- autocoder/common/code_auto_merge_editblock.py +13 -6
- autocoder/common/code_modification_ranker.py +1 -1
- autocoder/common/command_completer.py +3 -3
- autocoder/common/command_file_manager/manager.py +183 -47
- autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
- autocoder/common/command_templates.py +1 -1
- autocoder/common/conf_utils.py +2 -4
- autocoder/common/conversations/config.py +11 -3
- autocoder/common/conversations/get_conversation_manager.py +100 -2
- autocoder/common/conversations/llm_stats_models.py +264 -0
- autocoder/common/conversations/manager.py +112 -28
- autocoder/common/conversations/models.py +16 -2
- autocoder/common/conversations/storage/index_manager.py +134 -10
- autocoder/common/core_config/__init__.py +63 -0
- autocoder/common/core_config/agentic_mode_manager.py +109 -0
- autocoder/common/core_config/base_manager.py +123 -0
- autocoder/common/core_config/compatibility.py +151 -0
- autocoder/common/core_config/config_manager.py +156 -0
- autocoder/common/core_config/conversation_manager.py +31 -0
- autocoder/common/core_config/exclude_manager.py +72 -0
- autocoder/common/core_config/file_manager.py +177 -0
- autocoder/common/core_config/human_as_model_manager.py +129 -0
- autocoder/common/core_config/lib_manager.py +54 -0
- autocoder/common/core_config/main_manager.py +81 -0
- autocoder/common/core_config/mode_manager.py +126 -0
- autocoder/common/core_config/models.py +70 -0
- autocoder/common/core_config/test_memory_manager.py +1056 -0
- autocoder/common/env_manager.py +282 -0
- autocoder/common/env_manager_usage_example.py +211 -0
- autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
- autocoder/common/file_checkpoint/manager.py +264 -48
- autocoder/common/file_checkpoint/test_backup.py +1 -18
- autocoder/common/file_checkpoint/test_manager.py +270 -1
- autocoder/common/file_checkpoint/test_store.py +1 -17
- autocoder/common/file_handler/__init__.py +23 -0
- autocoder/common/file_handler/active_context_handler.py +159 -0
- autocoder/common/file_handler/add_files_handler.py +409 -0
- autocoder/common/file_handler/chat_handler.py +180 -0
- autocoder/common/file_handler/coding_handler.py +409 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/git_utils.py +44 -8
- autocoder/common/global_cancel.py +15 -6
- autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
- autocoder/common/international/__init__.py +31 -0
- autocoder/common/international/demo_international.py +92 -0
- autocoder/common/international/message_manager.py +157 -0
- autocoder/common/international/messages/__init__.py +56 -0
- autocoder/common/international/messages/async_command_messages.py +507 -0
- autocoder/common/international/messages/auto_coder_messages.py +2208 -0
- autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
- autocoder/common/international/messages/command_help_messages.py +986 -0
- autocoder/common/international/messages/conversation_command_messages.py +191 -0
- autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
- autocoder/common/international/messages/queue_command_messages.py +751 -0
- autocoder/common/international/messages/rules_command_messages.py +77 -0
- autocoder/common/international/messages/sdk_messages.py +1707 -0
- autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
- autocoder/common/international/messages/tool_display_messages.py +1212 -0
- autocoder/common/international/messages/workflow_exception_messages.py +473 -0
- autocoder/common/international/test_international.py +612 -0
- autocoder/common/linter_core/__init__.py +28 -0
- autocoder/common/linter_core/base_linter.py +61 -0
- autocoder/common/linter_core/config_loader.py +271 -0
- autocoder/common/linter_core/formatters/__init__.py +0 -0
- autocoder/common/linter_core/formatters/base_formatter.py +38 -0
- autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
- autocoder/common/linter_core/linter.py +166 -0
- autocoder/common/linter_core/linter_factory.py +216 -0
- autocoder/common/linter_core/linter_manager.py +333 -0
- autocoder/common/linter_core/linters/__init__.py +9 -0
- autocoder/common/linter_core/linters/java_linter.py +342 -0
- autocoder/common/linter_core/linters/python_linter.py +115 -0
- autocoder/common/linter_core/linters/typescript_linter.py +119 -0
- autocoder/common/linter_core/models/__init__.py +7 -0
- autocoder/common/linter_core/models/lint_result.py +91 -0
- autocoder/common/linter_core/models.py +33 -0
- autocoder/common/linter_core/tests/__init__.py +3 -0
- autocoder/common/linter_core/tests/test_config_loader.py +323 -0
- autocoder/common/linter_core/tests/test_config_loading.py +308 -0
- autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
- autocoder/common/linter_core/tests/test_formatters.py +147 -0
- autocoder/common/linter_core/tests/test_integration.py +317 -0
- autocoder/common/linter_core/tests/test_java_linter.py +496 -0
- autocoder/common/linter_core/tests/test_linters.py +265 -0
- autocoder/common/linter_core/tests/test_models.py +81 -0
- autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
- autocoder/common/linter_core/tests/verify_fixes.py +183 -0
- autocoder/common/llm_friendly_package/__init__.py +31 -0
- autocoder/common/llm_friendly_package/base_manager.py +102 -0
- autocoder/common/llm_friendly_package/docs_manager.py +121 -0
- autocoder/common/llm_friendly_package/library_manager.py +171 -0
- autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
- autocoder/common/llm_friendly_package/models.py +40 -0
- autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
- autocoder/common/llms/__init__.py +15 -0
- autocoder/common/llms/demo_error_handling.py +85 -0
- autocoder/common/llms/factory.py +142 -0
- autocoder/common/llms/manager.py +264 -0
- autocoder/common/llms/pricing.py +121 -0
- autocoder/common/llms/registry.py +316 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +651 -102
- autocoder/common/pruner/conversation_message_ids_api.py +386 -0
- autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
- autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
- autocoder/common/pruner/conversation_normalizer.py +347 -0
- autocoder/common/pruner/conversation_pruner.py +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
- autocoder/common/pruner/test_conversation_normalizer.py +502 -0
- autocoder/common/pruner/test_tool_content_detector.py +324 -0
- autocoder/common/pruner/tool_content_detector.py +227 -0
- autocoder/common/pruner/tools/__init__.py +18 -0
- autocoder/common/pruner/tools/query_message_ids.py +264 -0
- autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
- autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
- autocoder/common/pull_requests/__init__.py +9 -1
- autocoder/common/pull_requests/utils.py +122 -1
- autocoder/common/rag_manager/rag_manager.py +36 -40
- autocoder/common/rulefiles/__init__.py +53 -1
- autocoder/common/rulefiles/api.py +250 -0
- autocoder/common/rulefiles/core/__init__.py +14 -0
- autocoder/common/rulefiles/core/manager.py +241 -0
- autocoder/common/rulefiles/core/selector.py +805 -0
- autocoder/common/rulefiles/models/__init__.py +20 -0
- autocoder/common/rulefiles/models/index.py +16 -0
- autocoder/common/rulefiles/models/init_rule.py +18 -0
- autocoder/common/rulefiles/models/rule_file.py +18 -0
- autocoder/common/rulefiles/models/rule_relevance.py +14 -0
- autocoder/common/rulefiles/models/summary.py +16 -0
- autocoder/common/rulefiles/test_rulefiles.py +776 -0
- autocoder/common/rulefiles/utils/__init__.py +34 -0
- autocoder/common/rulefiles/utils/monitor.py +86 -0
- autocoder/common/rulefiles/utils/parser.py +230 -0
- autocoder/common/save_formatted_log.py +67 -10
- autocoder/common/search_replace.py +8 -1
- autocoder/common/search_replace_patch/__init__.py +24 -0
- autocoder/common/search_replace_patch/base.py +115 -0
- autocoder/common/search_replace_patch/manager.py +248 -0
- autocoder/common/search_replace_patch/patch_replacer.py +304 -0
- autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
- autocoder/common/search_replace_patch/string_replacer.py +181 -0
- autocoder/common/search_replace_patch/tests/__init__.py +3 -0
- autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
- autocoder/common/search_replace_patch/tests/test_base.py +188 -0
- autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
- autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
- autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
- autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
- autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
- autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
- autocoder/common/shell_commands/__init__.py +197 -0
- autocoder/common/shell_commands/background_process_notifier.py +346 -0
- autocoder/common/shell_commands/command_executor.py +1127 -0
- autocoder/common/shell_commands/error_recovery.py +541 -0
- autocoder/common/shell_commands/exceptions.py +120 -0
- autocoder/common/shell_commands/interactive_executor.py +476 -0
- autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
- autocoder/common/shell_commands/interactive_process.py +744 -0
- autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
- autocoder/common/shell_commands/monitoring.py +529 -0
- autocoder/common/shell_commands/process_cleanup.py +386 -0
- autocoder/common/shell_commands/process_manager.py +606 -0
- autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
- autocoder/common/shell_commands/tests/__init__.py +6 -0
- autocoder/common/shell_commands/tests/conftest.py +118 -0
- autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
- autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
- autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
- autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
- autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
- autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
- autocoder/common/shell_commands/tests/test_integration.py +664 -0
- autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
- autocoder/common/shell_commands/tests/test_performance.py +632 -0
- autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
- autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
- autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
- autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
- autocoder/common/shell_commands/timeout_config.py +315 -0
- autocoder/common/shell_commands/timeout_manager.py +352 -0
- autocoder/common/terminal_paste/__init__.py +14 -0
- autocoder/common/terminal_paste/demo.py +145 -0
- autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
- autocoder/common/terminal_paste/paste_handler.py +200 -0
- autocoder/common/terminal_paste/paste_manager.py +118 -0
- autocoder/common/terminal_paste/tests/__init__.py +1 -0
- autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
- autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
- autocoder/common/terminal_paste/utils.py +163 -0
- autocoder/common/test_autocoder_args.py +232 -0
- autocoder/common/test_env_manager.py +173 -0
- autocoder/common/test_env_manager_integration.py +159 -0
- autocoder/common/text_similarity/__init__.py +9 -0
- autocoder/common/text_similarity/demo.py +216 -0
- autocoder/common/text_similarity/examples.py +266 -0
- autocoder/common/text_similarity/test_text_similarity.py +306 -0
- autocoder/common/text_similarity/text_similarity.py +194 -0
- autocoder/common/text_similarity/utils.py +125 -0
- autocoder/common/todos/__init__.py +61 -0
- autocoder/common/todos/cache/__init__.py +16 -0
- autocoder/common/todos/cache/base_cache.py +89 -0
- autocoder/common/todos/cache/cache_manager.py +228 -0
- autocoder/common/todos/cache/memory_cache.py +225 -0
- autocoder/common/todos/config.py +155 -0
- autocoder/common/todos/exceptions.py +35 -0
- autocoder/common/todos/get_todo_manager.py +161 -0
- autocoder/common/todos/manager.py +537 -0
- autocoder/common/todos/models.py +239 -0
- autocoder/common/todos/storage/__init__.py +14 -0
- autocoder/common/todos/storage/base_storage.py +76 -0
- autocoder/common/todos/storage/file_storage.py +278 -0
- autocoder/common/tokens/counter.py +24 -2
- autocoder/common/tools_manager/__init__.py +17 -0
- autocoder/common/tools_manager/examples.py +162 -0
- autocoder/common/tools_manager/manager.py +385 -0
- autocoder/common/tools_manager/models.py +39 -0
- autocoder/common/tools_manager/test_tools_manager.py +303 -0
- autocoder/common/tools_manager/utils.py +191 -0
- autocoder/common/v2/agent/agentic_callbacks.py +270 -0
- autocoder/common/v2/agent/agentic_edit.py +2699 -1856
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
- autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
- autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
- autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +564 -29
- autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
- autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
- autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
- autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +356 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
- autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +410 -86
- autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +207 -192
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
- autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
- autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
- autocoder/common/v2/agent/agentic_edit_types.py +343 -9
- autocoder/common/v2/agent/runner/__init__.py +3 -3
- autocoder/common/v2/agent/runner/base_runner.py +12 -26
- autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
- autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
- autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
- autocoder/common/v2/agent/runner/tool_display.py +557 -159
- autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
- autocoder/common/v2/agent/test_agentic_edit.py +194 -0
- autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
- autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
- autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
- autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
- autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
- autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
- autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
- autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
- autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
- autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
- autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
- autocoder/common/v2/code_auto_generate.py +136 -78
- autocoder/common/v2/code_auto_generate_diff.py +135 -79
- autocoder/common/v2/code_auto_generate_editblock.py +174 -99
- autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
- autocoder/common/v2/code_auto_merge.py +1 -1
- autocoder/common/v2/code_auto_merge_editblock.py +13 -1
- autocoder/common/v2/code_diff_manager.py +3 -3
- autocoder/common/v2/code_editblock_manager.py +4 -14
- autocoder/common/v2/code_manager.py +1 -1
- autocoder/common/v2/code_strict_diff_manager.py +2 -2
- autocoder/common/wrap_llm_hint/__init__.py +10 -0
- autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
- autocoder/common/wrap_llm_hint/utils.py +432 -0
- autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
- autocoder/completer/__init__.py +8 -0
- autocoder/completer/command_completer_v2.py +1094 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +400 -129
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +117 -125
- autocoder/{agent → index/filter}/agentic_filter.py +322 -333
- autocoder/index/filter/normal_filter.py +5 -11
- autocoder/index/filter/quick_filter.py +1 -1
- autocoder/index/index.py +36 -9
- autocoder/index/tests/__init__.py +1 -0
- autocoder/index/tests/run_tests.py +195 -0
- autocoder/index/tests/test_entry.py +303 -0
- autocoder/index/tests/test_index_manager.py +314 -0
- autocoder/index/tests/test_module_integration.py +300 -0
- autocoder/index/tests/test_symbols_utils.py +183 -0
- autocoder/inner/__init__.py +4 -0
- autocoder/inner/agentic.py +923 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +65 -46
- autocoder/pyproject/__init__.py +32 -29
- autocoder/rag/agentic_rag.py +215 -75
- autocoder/rag/cache/simple_cache.py +1 -2
- autocoder/rag/loaders/image_loader.py +1 -1
- autocoder/rag/long_context_rag.py +42 -26
- autocoder/rag/qa_conversation_strategy.py +1 -1
- autocoder/rag/terminal/__init__.py +17 -0
- autocoder/rag/terminal/args.py +581 -0
- autocoder/rag/terminal/bootstrap.py +61 -0
- autocoder/rag/terminal/command_handlers.py +653 -0
- autocoder/rag/terminal/formatters/__init__.py +20 -0
- autocoder/rag/terminal/formatters/base.py +70 -0
- autocoder/rag/terminal/formatters/json_format.py +66 -0
- autocoder/rag/terminal/formatters/stream_json.py +95 -0
- autocoder/rag/terminal/formatters/text.py +28 -0
- autocoder/rag/terminal/init.py +120 -0
- autocoder/rag/terminal/utils.py +106 -0
- autocoder/rag/test_agentic_rag.py +389 -0
- autocoder/rag/test_doc_filter.py +3 -3
- autocoder/rag/test_long_context_rag.py +1 -1
- autocoder/rag/test_token_limiter.py +517 -10
- autocoder/rag/token_counter.py +3 -0
- autocoder/rag/token_limiter.py +19 -15
- autocoder/rag/tools/__init__.py +26 -2
- autocoder/rag/tools/bochaai_example.py +343 -0
- autocoder/rag/tools/bochaai_sdk.py +541 -0
- autocoder/rag/tools/metaso_example.py +268 -0
- autocoder/rag/tools/metaso_sdk.py +417 -0
- autocoder/rag/tools/recall_tool.py +28 -7
- autocoder/rag/tools/run_integration_tests.py +204 -0
- autocoder/rag/tools/test_all_providers.py +318 -0
- autocoder/rag/tools/test_bochaai_integration.py +482 -0
- autocoder/rag/tools/test_final_integration.py +215 -0
- autocoder/rag/tools/test_metaso_integration.py +424 -0
- autocoder/rag/tools/test_metaso_real.py +171 -0
- autocoder/rag/tools/test_web_crawl_tool.py +639 -0
- autocoder/rag/tools/test_web_search_tool.py +509 -0
- autocoder/rag/tools/todo_read_tool.py +202 -0
- autocoder/rag/tools/todo_write_tool.py +412 -0
- autocoder/rag/tools/web_crawl_tool.py +634 -0
- autocoder/rag/tools/web_search_tool.py +558 -0
- autocoder/rag/tools/web_tools_example.py +119 -0
- autocoder/rag/types.py +16 -0
- autocoder/rag/variable_holder.py +4 -2
- autocoder/rags.py +86 -79
- autocoder/regexproject/__init__.py +23 -21
- autocoder/sdk/__init__.py +46 -190
- autocoder/sdk/api.py +370 -0
- autocoder/sdk/async_runner/__init__.py +26 -0
- autocoder/sdk/async_runner/async_executor.py +650 -0
- autocoder/sdk/async_runner/async_handler.py +356 -0
- autocoder/sdk/async_runner/markdown_processor.py +595 -0
- autocoder/sdk/async_runner/task_metadata.py +284 -0
- autocoder/sdk/async_runner/worktree_manager.py +438 -0
- autocoder/sdk/cli/__init__.py +2 -5
- autocoder/sdk/cli/formatters.py +28 -204
- autocoder/sdk/cli/handlers.py +77 -44
- autocoder/sdk/cli/main.py +154 -171
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -109
- autocoder/sdk/core/bridge.py +297 -115
- autocoder/sdk/exceptions.py +18 -12
- autocoder/sdk/formatters/__init__.py +19 -0
- autocoder/sdk/formatters/input.py +64 -0
- autocoder/sdk/formatters/output.py +247 -0
- autocoder/sdk/formatters/stream.py +54 -0
- autocoder/sdk/models/__init__.py +6 -5
- autocoder/sdk/models/options.py +55 -18
- autocoder/sdk/utils/formatters.py +27 -195
- autocoder/suffixproject/__init__.py +28 -25
- autocoder/terminal/__init__.py +14 -0
- autocoder/terminal/app.py +454 -0
- autocoder/terminal/args.py +32 -0
- autocoder/terminal/bootstrap.py +178 -0
- autocoder/terminal/command_processor.py +521 -0
- autocoder/terminal/command_registry.py +57 -0
- autocoder/terminal/help.py +97 -0
- autocoder/terminal/tasks/__init__.py +5 -0
- autocoder/terminal/tasks/background.py +77 -0
- autocoder/terminal/tasks/task_event.py +70 -0
- autocoder/terminal/ui/__init__.py +13 -0
- autocoder/terminal/ui/completer.py +268 -0
- autocoder/terminal/ui/keybindings.py +75 -0
- autocoder/terminal/ui/session.py +41 -0
- autocoder/terminal/ui/toolbar.py +64 -0
- autocoder/terminal/utils/__init__.py +13 -0
- autocoder/terminal/utils/errors.py +18 -0
- autocoder/terminal/utils/paths.py +19 -0
- autocoder/terminal/utils/shell.py +43 -0
- autocoder/terminal_v3/__init__.py +10 -0
- autocoder/terminal_v3/app.py +201 -0
- autocoder/terminal_v3/handlers/__init__.py +5 -0
- autocoder/terminal_v3/handlers/command_handler.py +131 -0
- autocoder/terminal_v3/models/__init__.py +6 -0
- autocoder/terminal_v3/models/conversation_buffer.py +214 -0
- autocoder/terminal_v3/models/message.py +50 -0
- autocoder/terminal_v3/models/tool_display.py +247 -0
- autocoder/terminal_v3/ui/__init__.py +7 -0
- autocoder/terminal_v3/ui/keybindings.py +56 -0
- autocoder/terminal_v3/ui/layout.py +141 -0
- autocoder/terminal_v3/ui/styles.py +43 -0
- autocoder/tsproject/__init__.py +23 -23
- autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
- autocoder/utils/llms.py +88 -80
- autocoder/utils/math_utils.py +101 -0
- autocoder/utils/model_provider_selector.py +16 -4
- autocoder/utils/operate_config_api.py +33 -5
- autocoder/utils/thread_utils.py +2 -2
- autocoder/version.py +4 -2
- autocoder/workflow_agents/__init__.py +84 -0
- autocoder/workflow_agents/agent.py +143 -0
- autocoder/workflow_agents/exceptions.py +573 -0
- autocoder/workflow_agents/executor.py +665 -0
- autocoder/workflow_agents/loader.py +749 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +173 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-1.0.0.dist-info/METADATA +0 -396
- auto_coder-1.0.0.dist-info/RECORD +0 -442
- auto_coder-1.0.0.dist-info/licenses/LICENSE +0 -201
- autocoder/auto_coder_server.py +0 -672
- autocoder/benchmark.py +0 -138
- autocoder/common/ac_style_command_parser/example.py +0 -7
- autocoder/common/cleaner.py +0 -31
- autocoder/common/command_completer_v2.py +0 -615
- autocoder/common/context_pruner.py +0 -477
- autocoder/common/conversation_pruner.py +0 -132
- autocoder/common/directory_cache/__init__.py +0 -1
- autocoder/common/directory_cache/cache.py +0 -192
- autocoder/common/directory_cache/test_cache.py +0 -190
- autocoder/common/file_checkpoint/examples.py +0 -217
- autocoder/common/llm_friendly_package_example.py +0 -138
- autocoder/common/llm_friendly_package_test.py +0 -63
- autocoder/common/pull_requests/test_module.py +0 -1
- autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
- autocoder/common/text.py +0 -30
- autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
- autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
- autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
- autocoder/common/v2/agent/agentic_tool_display.py +0 -183
- autocoder/plugins/dynamic_completion_example.py +0 -148
- autocoder/plugins/sample_plugin.py +0 -160
- autocoder/sdk/cli/__main__.py +0 -26
- autocoder/sdk/cli/completion_wrapper.py +0 -38
- autocoder/sdk/cli/install_completion.py +0 -301
- autocoder/sdk/models/messages.py +0 -209
- autocoder/sdk/session/__init__.py +0 -32
- autocoder/sdk/session/session.py +0 -106
- autocoder/sdk/session/session_manager.py +0 -56
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"""
|
|
2
|
+
File and file group management functionality.
|
|
3
|
+
|
|
4
|
+
This module provides methods for managing current files, file groups,
|
|
5
|
+
group information, and active groups.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Dict, Any, List
|
|
9
|
+
from .models import FileList, GroupsDict, GroupsInfoDict
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FileManagerMixin:
|
|
13
|
+
"""Mixin class providing file and file group management functionality."""
|
|
14
|
+
|
|
15
|
+
# ===== File Management =====
|
|
16
|
+
def get_current_files(self) -> FileList:
|
|
17
|
+
"""Get current files list."""
|
|
18
|
+
return self._memory.current_files.get("files", [])
|
|
19
|
+
|
|
20
|
+
def set_current_files(self, files: FileList):
|
|
21
|
+
"""Set current files list."""
|
|
22
|
+
self._memory.current_files["files"] = files
|
|
23
|
+
self.save_memory()
|
|
24
|
+
|
|
25
|
+
def add_files(self, files: FileList) -> FileList:
|
|
26
|
+
"""Add files to current files list (avoiding duplicates)."""
|
|
27
|
+
current_files = set(self._memory.current_files.get("files", []))
|
|
28
|
+
new_files = [f for f in files if f not in current_files]
|
|
29
|
+
if new_files:
|
|
30
|
+
self._memory.current_files["files"].extend(new_files)
|
|
31
|
+
self.save_memory()
|
|
32
|
+
return new_files
|
|
33
|
+
|
|
34
|
+
def remove_files(self, files: FileList) -> FileList:
|
|
35
|
+
"""Remove files from current files list."""
|
|
36
|
+
current_files = self._memory.current_files.get("files", [])
|
|
37
|
+
removed_files = []
|
|
38
|
+
for file in files:
|
|
39
|
+
if file in current_files:
|
|
40
|
+
current_files.remove(file)
|
|
41
|
+
removed_files.append(file)
|
|
42
|
+
if removed_files:
|
|
43
|
+
self.save_memory()
|
|
44
|
+
return removed_files
|
|
45
|
+
|
|
46
|
+
def clear_files(self):
|
|
47
|
+
"""Clear all current files."""
|
|
48
|
+
self._memory.current_files["files"] = []
|
|
49
|
+
self.save_memory()
|
|
50
|
+
|
|
51
|
+
# ===== File Groups Management =====
|
|
52
|
+
def get_file_groups(self) -> GroupsDict:
|
|
53
|
+
"""Get all file groups."""
|
|
54
|
+
return self._memory.current_files.get("groups", {})
|
|
55
|
+
|
|
56
|
+
def get_file_group(self, name: str) -> FileList:
|
|
57
|
+
"""Get files in a specific group."""
|
|
58
|
+
return self._memory.current_files.get("groups", {}).get(name, [])
|
|
59
|
+
|
|
60
|
+
def set_file_group(self, name: str, files: FileList):
|
|
61
|
+
"""Set files for a group."""
|
|
62
|
+
if "groups" not in self._memory.current_files:
|
|
63
|
+
self._memory.current_files["groups"] = {}
|
|
64
|
+
self._memory.current_files["groups"][name] = files
|
|
65
|
+
self.save_memory()
|
|
66
|
+
|
|
67
|
+
def add_file_group(self, name: str, files: FileList):
|
|
68
|
+
"""Add a new file group with current files or specified files."""
|
|
69
|
+
if not files:
|
|
70
|
+
files = self.get_current_files().copy()
|
|
71
|
+
self.set_file_group(name, files)
|
|
72
|
+
|
|
73
|
+
def delete_file_group(self, name: str) -> bool:
|
|
74
|
+
"""Delete a file group."""
|
|
75
|
+
groups = self._memory.current_files.get("groups", {})
|
|
76
|
+
if name in groups:
|
|
77
|
+
del groups[name]
|
|
78
|
+
# Also remove from groups_info and current_groups
|
|
79
|
+
groups_info = self._memory.current_files.get("groups_info", {})
|
|
80
|
+
if name in groups_info:
|
|
81
|
+
del groups_info[name]
|
|
82
|
+
current_groups = self._memory.current_files.get("current_groups", [])
|
|
83
|
+
if name in current_groups:
|
|
84
|
+
current_groups.remove(name)
|
|
85
|
+
self.save_memory()
|
|
86
|
+
return True
|
|
87
|
+
return False
|
|
88
|
+
|
|
89
|
+
def has_file_group(self, name: str) -> bool:
|
|
90
|
+
"""Check if file group exists."""
|
|
91
|
+
return name in self._memory.current_files.get("groups", {})
|
|
92
|
+
|
|
93
|
+
# ===== File Groups Info Management =====
|
|
94
|
+
def get_groups_info(self) -> GroupsInfoDict:
|
|
95
|
+
"""Get all groups info."""
|
|
96
|
+
return self._memory.current_files.get("groups_info", {})
|
|
97
|
+
|
|
98
|
+
def get_group_info(self, name: str) -> Dict[str, Any]:
|
|
99
|
+
"""Get info for a specific group."""
|
|
100
|
+
return self._memory.current_files.get("groups_info", {}).get(name, {})
|
|
101
|
+
|
|
102
|
+
def set_group_info(self, name: str, info: Dict[str, Any]):
|
|
103
|
+
"""Set info for a group."""
|
|
104
|
+
if "groups_info" not in self._memory.current_files:
|
|
105
|
+
self._memory.current_files["groups_info"] = {}
|
|
106
|
+
self._memory.current_files["groups_info"][name] = info
|
|
107
|
+
self.save_memory()
|
|
108
|
+
|
|
109
|
+
def set_group_query_prefix(self, name: str, query_prefix: str):
|
|
110
|
+
"""Set query prefix for a group."""
|
|
111
|
+
info = self.get_group_info(name)
|
|
112
|
+
info["query_prefix"] = query_prefix
|
|
113
|
+
self.set_group_info(name, info)
|
|
114
|
+
|
|
115
|
+
def get_group_query_prefix(self, name: str) -> str:
|
|
116
|
+
"""Get query prefix for a group."""
|
|
117
|
+
return self.get_group_info(name).get("query_prefix", "")
|
|
118
|
+
|
|
119
|
+
# ===== Current Active Groups Management =====
|
|
120
|
+
def get_current_groups(self) -> List[str]:
|
|
121
|
+
"""Get currently active groups."""
|
|
122
|
+
return self._memory.current_files.get("current_groups", [])
|
|
123
|
+
|
|
124
|
+
def set_current_groups(self, groups: List[str]):
|
|
125
|
+
"""Set currently active groups."""
|
|
126
|
+
self._memory.current_files["current_groups"] = groups
|
|
127
|
+
self.save_memory()
|
|
128
|
+
|
|
129
|
+
def add_current_group(self, group_name: str):
|
|
130
|
+
"""Add group to current active groups."""
|
|
131
|
+
current_groups = self._memory.current_files.get("current_groups", [])
|
|
132
|
+
if group_name not in current_groups:
|
|
133
|
+
current_groups.append(group_name)
|
|
134
|
+
self.save_memory()
|
|
135
|
+
|
|
136
|
+
def remove_current_group(self, group_name: str) -> bool:
|
|
137
|
+
"""Remove group from current active groups."""
|
|
138
|
+
current_groups = self._memory.current_files.get("current_groups", [])
|
|
139
|
+
if group_name in current_groups:
|
|
140
|
+
current_groups.remove(group_name)
|
|
141
|
+
self.save_memory()
|
|
142
|
+
return True
|
|
143
|
+
return False
|
|
144
|
+
|
|
145
|
+
def clear_current_groups(self):
|
|
146
|
+
"""Clear all current active groups."""
|
|
147
|
+
self._memory.current_files["current_groups"] = []
|
|
148
|
+
self.save_memory()
|
|
149
|
+
|
|
150
|
+
def merge_groups_to_current_files(self, group_names: List[str]) -> List[str]:
|
|
151
|
+
"""Merge files from multiple groups and set as current files."""
|
|
152
|
+
merged_files = set()
|
|
153
|
+
existing_groups = []
|
|
154
|
+
missing_groups = []
|
|
155
|
+
|
|
156
|
+
groups = self.get_file_groups()
|
|
157
|
+
for group_name in group_names:
|
|
158
|
+
if group_name in groups:
|
|
159
|
+
merged_files.update(groups[group_name])
|
|
160
|
+
existing_groups.append(group_name)
|
|
161
|
+
else:
|
|
162
|
+
missing_groups.append(group_name)
|
|
163
|
+
|
|
164
|
+
if merged_files:
|
|
165
|
+
self.set_current_files(list(merged_files))
|
|
166
|
+
self.set_current_groups(existing_groups)
|
|
167
|
+
|
|
168
|
+
return missing_groups
|
|
169
|
+
|
|
170
|
+
# ===== Legacy File Group Helpers =====
|
|
171
|
+
def get_groups(self) -> GroupsDict:
|
|
172
|
+
"""Get file groups (legacy method for backward compatibility)."""
|
|
173
|
+
return self.get_file_groups()
|
|
174
|
+
|
|
175
|
+
def set_group(self, name: str, files: FileList):
|
|
176
|
+
"""Set a file group (legacy method for backward compatibility)."""
|
|
177
|
+
self.set_file_group(name, files)
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Human as Model management functionality.
|
|
3
|
+
|
|
4
|
+
This module provides human_as_model configuration management methods for auto-coder sessions,
|
|
5
|
+
including getting, setting, and toggling the human_as_model status.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from .models import CoreMemory
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class HumanAsModelManagerMixin:
|
|
15
|
+
"""Mixin class providing human_as_model management functionality."""
|
|
16
|
+
|
|
17
|
+
# These will be provided by BaseMemoryManager when mixed in
|
|
18
|
+
_memory: 'CoreMemory'
|
|
19
|
+
|
|
20
|
+
def save_memory(self) -> None:
|
|
21
|
+
"""Save memory - provided by BaseMemoryManager."""
|
|
22
|
+
...
|
|
23
|
+
|
|
24
|
+
def get_human_as_model(self) -> bool:
|
|
25
|
+
"""
|
|
26
|
+
Get current human_as_model status.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
True if human_as_model is enabled, False otherwise
|
|
30
|
+
"""
|
|
31
|
+
# Ensure conf dict exists
|
|
32
|
+
if "conf" not in self._memory.__dict__ or self._memory.conf is None:
|
|
33
|
+
self._memory.conf = {}
|
|
34
|
+
|
|
35
|
+
# Get the value, defaulting to "false" if not set
|
|
36
|
+
value = self._memory.conf.get("human_as_model", "false")
|
|
37
|
+
|
|
38
|
+
# Handle both string and boolean values
|
|
39
|
+
if isinstance(value, bool):
|
|
40
|
+
return value
|
|
41
|
+
elif isinstance(value, str):
|
|
42
|
+
return value.lower() == "true"
|
|
43
|
+
else:
|
|
44
|
+
# Convert other types to boolean
|
|
45
|
+
return bool(value)
|
|
46
|
+
|
|
47
|
+
def set_human_as_model(self, enabled: bool):
|
|
48
|
+
"""
|
|
49
|
+
Set human_as_model status.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
enabled: True to enable human_as_model, False to disable
|
|
53
|
+
"""
|
|
54
|
+
# Ensure conf dict exists
|
|
55
|
+
if "conf" not in self._memory.__dict__ or self._memory.conf is None:
|
|
56
|
+
self._memory.conf = {}
|
|
57
|
+
|
|
58
|
+
self._memory.conf["human_as_model"] = "true" if enabled else "false"
|
|
59
|
+
self.save_memory()
|
|
60
|
+
|
|
61
|
+
def toggle_human_as_model(self) -> bool:
|
|
62
|
+
"""
|
|
63
|
+
Toggle human_as_model status between enabled and disabled.
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
New status after toggling (True if enabled, False if disabled)
|
|
67
|
+
"""
|
|
68
|
+
current_status = self.get_human_as_model()
|
|
69
|
+
new_status = not current_status
|
|
70
|
+
self.set_human_as_model(new_status)
|
|
71
|
+
return new_status
|
|
72
|
+
|
|
73
|
+
def enable_human_as_model(self):
|
|
74
|
+
"""Enable human_as_model mode."""
|
|
75
|
+
self.set_human_as_model(True)
|
|
76
|
+
|
|
77
|
+
def disable_human_as_model(self):
|
|
78
|
+
"""Disable human_as_model mode."""
|
|
79
|
+
self.set_human_as_model(False)
|
|
80
|
+
|
|
81
|
+
def is_human_as_model_enabled(self) -> bool:
|
|
82
|
+
"""
|
|
83
|
+
Check if human_as_model is currently enabled.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
True if human_as_model is enabled, False otherwise
|
|
87
|
+
"""
|
|
88
|
+
return self.get_human_as_model()
|
|
89
|
+
|
|
90
|
+
def get_human_as_model_string(self) -> str:
|
|
91
|
+
"""
|
|
92
|
+
Get human_as_model status as string.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
"true" if enabled, "false" if disabled
|
|
96
|
+
"""
|
|
97
|
+
return "true" if self.get_human_as_model() else "false"
|
|
98
|
+
|
|
99
|
+
def set_human_as_model_from_string(self, value: str):
|
|
100
|
+
"""
|
|
101
|
+
Set human_as_model status from string value.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
value: String value ("true"/"false", "1"/"0", "yes"/"no", etc.)
|
|
105
|
+
"""
|
|
106
|
+
# Convert various string representations to boolean
|
|
107
|
+
if isinstance(value, str):
|
|
108
|
+
value_lower = value.lower().strip()
|
|
109
|
+
enabled = value_lower in ("true", "1", "yes", "on", "enable", "enabled")
|
|
110
|
+
else:
|
|
111
|
+
enabled = bool(value)
|
|
112
|
+
|
|
113
|
+
self.set_human_as_model(enabled)
|
|
114
|
+
|
|
115
|
+
def ensure_human_as_model_config(self):
|
|
116
|
+
"""
|
|
117
|
+
Ensure human_as_model configuration exists with default value.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Current human_as_model status
|
|
121
|
+
"""
|
|
122
|
+
if "conf" not in self._memory.__dict__ or self._memory.conf is None:
|
|
123
|
+
self._memory.conf = {}
|
|
124
|
+
|
|
125
|
+
if "human_as_model" not in self._memory.conf:
|
|
126
|
+
self._memory.conf["human_as_model"] = "false"
|
|
127
|
+
self.save_memory()
|
|
128
|
+
|
|
129
|
+
return self.get_human_as_model()
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Library management functionality.
|
|
3
|
+
|
|
4
|
+
This module provides methods for managing libraries and their configurations.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, Any, Optional
|
|
8
|
+
from .models import LibsDict
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class LibManagerMixin:
|
|
12
|
+
"""Mixin class providing library management functionality."""
|
|
13
|
+
|
|
14
|
+
def get_libs(self) -> LibsDict:
|
|
15
|
+
"""Get all libraries."""
|
|
16
|
+
return self._memory.libs.copy()
|
|
17
|
+
|
|
18
|
+
def add_lib(self, name: str, config: Optional[Dict[str, Any]] = None) -> bool:
|
|
19
|
+
"""Add a library."""
|
|
20
|
+
if name not in self._memory.libs:
|
|
21
|
+
self._memory.libs[name] = config or {}
|
|
22
|
+
self.save_memory()
|
|
23
|
+
return True
|
|
24
|
+
return False
|
|
25
|
+
|
|
26
|
+
def remove_lib(self, name: str) -> bool:
|
|
27
|
+
"""Remove a library."""
|
|
28
|
+
if name in self._memory.libs:
|
|
29
|
+
del self._memory.libs[name]
|
|
30
|
+
self.save_memory()
|
|
31
|
+
return True
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
def has_lib(self, name: str) -> bool:
|
|
35
|
+
"""Check if library exists."""
|
|
36
|
+
return name in self._memory.libs
|
|
37
|
+
|
|
38
|
+
def set_lib_config(self, name: str, config: Dict[str, Any]):
|
|
39
|
+
"""Set configuration for a library."""
|
|
40
|
+
if name in self._memory.libs:
|
|
41
|
+
self._memory.libs[name] = config
|
|
42
|
+
self.save_memory()
|
|
43
|
+
|
|
44
|
+
def get_lib_config(self, name: str) -> Dict[str, Any]:
|
|
45
|
+
"""Get configuration for a library."""
|
|
46
|
+
return self._memory.libs.get(name, {})
|
|
47
|
+
|
|
48
|
+
def set_lib_proxy(self, proxy_url: str):
|
|
49
|
+
"""Set library proxy URL."""
|
|
50
|
+
self.set_config("lib-proxy", proxy_url)
|
|
51
|
+
|
|
52
|
+
def get_lib_proxy(self) -> str:
|
|
53
|
+
"""Get library proxy URL."""
|
|
54
|
+
return self.get_config("lib-proxy", "https://github.com/allwefantasy/llm_friendly_packages")
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Main MemoryManager class combining all functionality.
|
|
3
|
+
|
|
4
|
+
This module provides the main MemoryManager class that combines all
|
|
5
|
+
functionality from the various manager mixins.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Optional, cast
|
|
9
|
+
from .base_manager import BaseMemoryManager
|
|
10
|
+
from .config_manager import ConfigManagerMixin
|
|
11
|
+
from .file_manager import FileManagerMixin
|
|
12
|
+
from .exclude_manager import ExcludeManagerMixin
|
|
13
|
+
from .lib_manager import LibManagerMixin
|
|
14
|
+
from .conversation_manager import ConversationManagerMixin
|
|
15
|
+
from .mode_manager import ModeManagerMixin
|
|
16
|
+
from .human_as_model_manager import HumanAsModelManagerMixin
|
|
17
|
+
from .agentic_mode_manager import AgenticModeManagerMixin
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class MemoryManager(
|
|
21
|
+
BaseMemoryManager,
|
|
22
|
+
ConfigManagerMixin,
|
|
23
|
+
FileManagerMixin,
|
|
24
|
+
ExcludeManagerMixin,
|
|
25
|
+
LibManagerMixin,
|
|
26
|
+
ConversationManagerMixin,
|
|
27
|
+
ModeManagerMixin,
|
|
28
|
+
HumanAsModelManagerMixin,
|
|
29
|
+
AgenticModeManagerMixin
|
|
30
|
+
):
|
|
31
|
+
"""
|
|
32
|
+
Complete memory manager for auto-coder sessions.
|
|
33
|
+
|
|
34
|
+
This class combines all functionality from various manager mixins:
|
|
35
|
+
- BaseMemoryManager: Core persistence and singleton functionality
|
|
36
|
+
- ConfigManagerMixin: Configuration management
|
|
37
|
+
- FileManagerMixin: File and file group management
|
|
38
|
+
- ExcludeManagerMixin: Exclude patterns management
|
|
39
|
+
- LibManagerMixin: Library management
|
|
40
|
+
- ConversationManagerMixin: Conversation history management
|
|
41
|
+
- ModeManagerMixin: Mode management functionality
|
|
42
|
+
- HumanAsModelManagerMixin: Human as model configuration management
|
|
43
|
+
- AgenticModeManagerMixin: Agentic mode configuration management
|
|
44
|
+
|
|
45
|
+
Provides thread-safe persistence of configuration and session data.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def __init__(self, project_root: Optional[str] = None):
|
|
49
|
+
"""
|
|
50
|
+
Initialize memory manager with all functionality.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
project_root: Project root directory. If None, uses current working directory.
|
|
54
|
+
"""
|
|
55
|
+
super().__init__(project_root)
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
def get_instance(cls, project_root: Optional[str] = None) -> 'MemoryManager':
|
|
59
|
+
"""
|
|
60
|
+
Get memory manager instance with proper type.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
project_root: Project root directory. If None, uses current working directory.
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
MemoryManager instance
|
|
67
|
+
"""
|
|
68
|
+
return cast('MemoryManager', super().get_instance(project_root))
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def get_memory_manager(project_root: Optional[str] = None) -> MemoryManager:
|
|
72
|
+
"""
|
|
73
|
+
Get memory manager instance.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
project_root: Project root directory. If None, uses current working directory.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
MemoryManager instance
|
|
80
|
+
"""
|
|
81
|
+
return MemoryManager.get_instance(project_root)
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Mode management functionality.
|
|
3
|
+
|
|
4
|
+
This module provides mode management methods for auto-coder sessions,
|
|
5
|
+
including mode setting, getting, and cycling functionality.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import List, TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from .models import CoreMemory
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ModeManagerMixin:
|
|
15
|
+
"""Mixin class providing mode management functionality."""
|
|
16
|
+
|
|
17
|
+
# Available modes in cycle order
|
|
18
|
+
MODE_CYCLE = ["normal", "auto_detect", "voice_input", "shell"]
|
|
19
|
+
DEFAULT_MODE = "normal"
|
|
20
|
+
|
|
21
|
+
# These will be provided by BaseMemoryManager when mixed in
|
|
22
|
+
_memory: 'CoreMemory'
|
|
23
|
+
|
|
24
|
+
def save_memory(self) -> None:
|
|
25
|
+
"""Save memory - provided by BaseMemoryManager."""
|
|
26
|
+
...
|
|
27
|
+
|
|
28
|
+
def get_mode(self) -> str:
|
|
29
|
+
"""
|
|
30
|
+
Get current operation mode.
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
Current mode string, defaults to "normal" if not set
|
|
34
|
+
"""
|
|
35
|
+
mode = self._memory.mode
|
|
36
|
+
if not mode or mode not in self.MODE_CYCLE:
|
|
37
|
+
mode = self.DEFAULT_MODE
|
|
38
|
+
self.set_mode(mode)
|
|
39
|
+
return mode
|
|
40
|
+
|
|
41
|
+
def set_mode(self, mode: str):
|
|
42
|
+
"""
|
|
43
|
+
Set operation mode.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
mode: Mode to set (normal, auto_detect, voice_input, shell)
|
|
47
|
+
"""
|
|
48
|
+
if mode not in self.MODE_CYCLE:
|
|
49
|
+
raise ValueError(f"Invalid mode: {mode}. Valid modes: {self.MODE_CYCLE}")
|
|
50
|
+
|
|
51
|
+
self._memory.mode = mode
|
|
52
|
+
self.save_memory()
|
|
53
|
+
|
|
54
|
+
def cycle_mode(self) -> str:
|
|
55
|
+
"""
|
|
56
|
+
Cycle to next mode in sequence: normal -> auto_detect -> voice_input -> shell -> normal.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
New mode after cycling
|
|
60
|
+
"""
|
|
61
|
+
current_mode = self.get_mode()
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
current_index = self.MODE_CYCLE.index(current_mode)
|
|
65
|
+
next_index = (current_index + 1) % len(self.MODE_CYCLE)
|
|
66
|
+
new_mode = self.MODE_CYCLE[next_index]
|
|
67
|
+
except ValueError:
|
|
68
|
+
# If current mode is not in cycle, default to first mode
|
|
69
|
+
new_mode = self.MODE_CYCLE[0]
|
|
70
|
+
|
|
71
|
+
self.set_mode(new_mode)
|
|
72
|
+
return new_mode
|
|
73
|
+
|
|
74
|
+
def is_mode(self, mode: str) -> bool:
|
|
75
|
+
"""
|
|
76
|
+
Check if current mode matches the specified mode.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
mode: Mode to check against
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
True if current mode matches, False otherwise
|
|
83
|
+
"""
|
|
84
|
+
return self.get_mode() == mode
|
|
85
|
+
|
|
86
|
+
def is_auto_detect_mode(self) -> bool:
|
|
87
|
+
"""Check if current mode is auto_detect."""
|
|
88
|
+
return self.is_mode("auto_detect")
|
|
89
|
+
|
|
90
|
+
def is_voice_input_mode(self) -> bool:
|
|
91
|
+
"""Check if current mode is voice_input."""
|
|
92
|
+
return self.is_mode("voice_input")
|
|
93
|
+
|
|
94
|
+
def is_normal_mode(self) -> bool:
|
|
95
|
+
"""Check if current mode is normal."""
|
|
96
|
+
return self.is_mode("normal")
|
|
97
|
+
|
|
98
|
+
def is_shell_mode(self) -> bool:
|
|
99
|
+
"""Check if current mode is shell."""
|
|
100
|
+
return self.is_mode("shell")
|
|
101
|
+
|
|
102
|
+
def get_available_modes(self) -> List[str]:
|
|
103
|
+
"""
|
|
104
|
+
Get list of available modes.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
List of available mode strings
|
|
108
|
+
"""
|
|
109
|
+
return self.MODE_CYCLE.copy()
|
|
110
|
+
|
|
111
|
+
def reset_mode_to_default(self):
|
|
112
|
+
"""Reset mode to default value."""
|
|
113
|
+
self.set_mode(self.DEFAULT_MODE)
|
|
114
|
+
|
|
115
|
+
def ensure_mode_valid(self):
|
|
116
|
+
"""
|
|
117
|
+
Ensure current mode is valid, reset to default if not.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Current mode after validation
|
|
121
|
+
"""
|
|
122
|
+
current_mode = self._memory.mode
|
|
123
|
+
if not current_mode or current_mode not in self.MODE_CYCLE:
|
|
124
|
+
self.reset_mode_to_default()
|
|
125
|
+
return self.DEFAULT_MODE
|
|
126
|
+
return current_mode
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Core data models for memory management.
|
|
3
|
+
|
|
4
|
+
This module contains the data structures used by the memory management system.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, Any, List
|
|
8
|
+
from dataclasses import dataclass, field
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class CoreMemory:
|
|
13
|
+
"""Core memory data structure for auto-coder sessions."""
|
|
14
|
+
|
|
15
|
+
conversation: List[Dict[str, str]] = field(default_factory=list)
|
|
16
|
+
current_files: Dict[str, Any] = field(default_factory=lambda: {
|
|
17
|
+
"files": [],
|
|
18
|
+
"groups": {},
|
|
19
|
+
"groups_info": {},
|
|
20
|
+
"current_groups": []
|
|
21
|
+
})
|
|
22
|
+
conf: Dict[str, Any] = field(default_factory=dict)
|
|
23
|
+
exclude_dirs: List[str] = field(default_factory=list)
|
|
24
|
+
exclude_files: List[str] = field(default_factory=list)
|
|
25
|
+
libs: Dict[str, Any] = field(default_factory=dict)
|
|
26
|
+
mode: str = "normal"
|
|
27
|
+
|
|
28
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
29
|
+
"""Convert to dictionary for JSON serialization."""
|
|
30
|
+
return {
|
|
31
|
+
"conversation": self.conversation,
|
|
32
|
+
"current_files": self.current_files,
|
|
33
|
+
"conf": self.conf,
|
|
34
|
+
"exclude_dirs": self.exclude_dirs,
|
|
35
|
+
"exclude_files": self.exclude_files,
|
|
36
|
+
"libs": self.libs,
|
|
37
|
+
"mode": self.mode,
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def from_dict(cls, data: Dict[str, Any]) -> 'CoreMemory':
|
|
42
|
+
"""Create CoreMemory instance from dictionary data."""
|
|
43
|
+
# Ensure current_files has all required keys
|
|
44
|
+
current_files = data.get("current_files", {})
|
|
45
|
+
if not isinstance(current_files, dict):
|
|
46
|
+
current_files = {"files": [], "groups": {}, "groups_info": {}, "current_groups": []}
|
|
47
|
+
else:
|
|
48
|
+
current_files.setdefault("files", [])
|
|
49
|
+
current_files.setdefault("groups", {})
|
|
50
|
+
current_files.setdefault("groups_info", {})
|
|
51
|
+
current_files.setdefault("current_groups", [])
|
|
52
|
+
|
|
53
|
+
return cls(
|
|
54
|
+
conversation=data.get("conversation", []),
|
|
55
|
+
current_files=current_files,
|
|
56
|
+
conf=data.get("conf", {}),
|
|
57
|
+
exclude_dirs=data.get("exclude_dirs", []),
|
|
58
|
+
exclude_files=data.get("exclude_files", []),
|
|
59
|
+
libs=data.get("libs", {}),
|
|
60
|
+
mode=data.get("mode", "normal"),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
# Type aliases for better code clarity
|
|
65
|
+
ConfigDict = Dict[str, Any]
|
|
66
|
+
FileList = List[str]
|
|
67
|
+
GroupsDict = Dict[str, List[str]]
|
|
68
|
+
GroupsInfoDict = Dict[str, Dict[str, Any]]
|
|
69
|
+
LibsDict = Dict[str, Any]
|
|
70
|
+
ConversationList = List[Dict[str, str]]
|