auto-coder 1.0.0__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.0.dist-info/LICENSE +158 -0
- auto_coder-2.0.0.dist-info/METADATA +558 -0
- auto_coder-2.0.0.dist-info/RECORD +795 -0
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +24 -3
- autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
- autocoder/agent/base_agentic/types.py +42 -0
- autocoder/agent/entry_command_agent/chat.py +73 -59
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +970 -2345
- autocoder/auto_coder_terminal.py +26 -0
- autocoder/auto_coder_terminal_v3.py +190 -0
- autocoder/chat/conf_command.py +224 -124
- autocoder/chat/models_command.py +361 -299
- autocoder/chat/rules_command.py +79 -31
- autocoder/chat_auto_coder.py +988 -398
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +25 -8
- autocoder/commands/auto_web.py +1 -1
- autocoder/commands/tools.py +44 -44
- autocoder/common/__init__.py +150 -128
- autocoder/common/ac_style_command_parser/__init__.py +39 -2
- autocoder/common/ac_style_command_parser/config.py +422 -0
- autocoder/common/ac_style_command_parser/parser.py +292 -78
- autocoder/common/ac_style_command_parser/test_parser.py +241 -16
- autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
- autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
- autocoder/common/action_yml_file_manager.py +25 -13
- autocoder/common/agent_events/__init__.py +52 -0
- autocoder/common/agent_events/agent_event_emitter.py +193 -0
- autocoder/common/agent_events/event_factory.py +177 -0
- autocoder/common/agent_events/examples.py +307 -0
- autocoder/common/agent_events/types.py +113 -0
- autocoder/common/agent_events/utils.py +68 -0
- autocoder/common/agent_hooks/__init__.py +44 -0
- autocoder/common/agent_hooks/examples.py +582 -0
- autocoder/common/agent_hooks/hook_executor.py +217 -0
- autocoder/common/agent_hooks/hook_manager.py +288 -0
- autocoder/common/agent_hooks/types.py +133 -0
- autocoder/common/agent_hooks/utils.py +99 -0
- autocoder/common/agent_query_queue/queue_executor.py +324 -0
- autocoder/common/agent_query_queue/queue_manager.py +325 -0
- autocoder/common/agents/__init__.py +11 -0
- autocoder/common/agents/agent_manager.py +323 -0
- autocoder/common/agents/agent_parser.py +189 -0
- autocoder/common/agents/example_usage.py +344 -0
- autocoder/common/agents/integration_example.py +330 -0
- autocoder/common/agents/test_agent_parser.py +545 -0
- autocoder/common/async_utils.py +101 -0
- autocoder/common/auto_coder_lang.py +23 -972
- autocoder/common/autocoderargs_parser/__init__.py +14 -0
- autocoder/common/autocoderargs_parser/parser.py +184 -0
- autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
- autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
- autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
- autocoder/common/autocoderargs_parser/token_parser.py +290 -0
- autocoder/common/buildin_tokenizer.py +2 -4
- autocoder/common/code_auto_generate.py +149 -74
- autocoder/common/code_auto_generate_diff.py +163 -70
- autocoder/common/code_auto_generate_editblock.py +179 -89
- autocoder/common/code_auto_generate_strict_diff.py +167 -72
- autocoder/common/code_auto_merge_editblock.py +13 -6
- autocoder/common/code_modification_ranker.py +1 -1
- autocoder/common/command_completer.py +3 -3
- autocoder/common/command_file_manager/manager.py +183 -47
- autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
- autocoder/common/command_templates.py +1 -1
- autocoder/common/conf_utils.py +2 -4
- autocoder/common/conversations/config.py +11 -3
- autocoder/common/conversations/get_conversation_manager.py +100 -2
- autocoder/common/conversations/llm_stats_models.py +264 -0
- autocoder/common/conversations/manager.py +112 -28
- autocoder/common/conversations/models.py +16 -2
- autocoder/common/conversations/storage/index_manager.py +134 -10
- autocoder/common/core_config/__init__.py +63 -0
- autocoder/common/core_config/agentic_mode_manager.py +109 -0
- autocoder/common/core_config/base_manager.py +123 -0
- autocoder/common/core_config/compatibility.py +151 -0
- autocoder/common/core_config/config_manager.py +156 -0
- autocoder/common/core_config/conversation_manager.py +31 -0
- autocoder/common/core_config/exclude_manager.py +72 -0
- autocoder/common/core_config/file_manager.py +177 -0
- autocoder/common/core_config/human_as_model_manager.py +129 -0
- autocoder/common/core_config/lib_manager.py +54 -0
- autocoder/common/core_config/main_manager.py +81 -0
- autocoder/common/core_config/mode_manager.py +126 -0
- autocoder/common/core_config/models.py +70 -0
- autocoder/common/core_config/test_memory_manager.py +1056 -0
- autocoder/common/env_manager.py +282 -0
- autocoder/common/env_manager_usage_example.py +211 -0
- autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
- autocoder/common/file_checkpoint/manager.py +264 -48
- autocoder/common/file_checkpoint/test_backup.py +1 -18
- autocoder/common/file_checkpoint/test_manager.py +270 -1
- autocoder/common/file_checkpoint/test_store.py +1 -17
- autocoder/common/file_handler/__init__.py +23 -0
- autocoder/common/file_handler/active_context_handler.py +159 -0
- autocoder/common/file_handler/add_files_handler.py +409 -0
- autocoder/common/file_handler/chat_handler.py +180 -0
- autocoder/common/file_handler/coding_handler.py +401 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/git_utils.py +44 -8
- autocoder/common/global_cancel.py +15 -6
- autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
- autocoder/common/international/__init__.py +31 -0
- autocoder/common/international/demo_international.py +92 -0
- autocoder/common/international/message_manager.py +157 -0
- autocoder/common/international/messages/__init__.py +56 -0
- autocoder/common/international/messages/async_command_messages.py +507 -0
- autocoder/common/international/messages/auto_coder_messages.py +2208 -0
- autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
- autocoder/common/international/messages/command_help_messages.py +986 -0
- autocoder/common/international/messages/conversation_command_messages.py +191 -0
- autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
- autocoder/common/international/messages/queue_command_messages.py +751 -0
- autocoder/common/international/messages/rules_command_messages.py +77 -0
- autocoder/common/international/messages/sdk_messages.py +1707 -0
- autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
- autocoder/common/international/messages/tool_display_messages.py +1212 -0
- autocoder/common/international/messages/workflow_exception_messages.py +473 -0
- autocoder/common/international/test_international.py +612 -0
- autocoder/common/linter_core/__init__.py +28 -0
- autocoder/common/linter_core/base_linter.py +61 -0
- autocoder/common/linter_core/config_loader.py +271 -0
- autocoder/common/linter_core/formatters/__init__.py +0 -0
- autocoder/common/linter_core/formatters/base_formatter.py +38 -0
- autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
- autocoder/common/linter_core/linter.py +166 -0
- autocoder/common/linter_core/linter_factory.py +216 -0
- autocoder/common/linter_core/linter_manager.py +333 -0
- autocoder/common/linter_core/linters/__init__.py +9 -0
- autocoder/common/linter_core/linters/java_linter.py +342 -0
- autocoder/common/linter_core/linters/python_linter.py +115 -0
- autocoder/common/linter_core/linters/typescript_linter.py +119 -0
- autocoder/common/linter_core/models/__init__.py +7 -0
- autocoder/common/linter_core/models/lint_result.py +91 -0
- autocoder/common/linter_core/models.py +33 -0
- autocoder/common/linter_core/tests/__init__.py +3 -0
- autocoder/common/linter_core/tests/test_config_loader.py +323 -0
- autocoder/common/linter_core/tests/test_config_loading.py +308 -0
- autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
- autocoder/common/linter_core/tests/test_formatters.py +147 -0
- autocoder/common/linter_core/tests/test_integration.py +317 -0
- autocoder/common/linter_core/tests/test_java_linter.py +496 -0
- autocoder/common/linter_core/tests/test_linters.py +265 -0
- autocoder/common/linter_core/tests/test_models.py +81 -0
- autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
- autocoder/common/linter_core/tests/verify_fixes.py +183 -0
- autocoder/common/llm_friendly_package/__init__.py +31 -0
- autocoder/common/llm_friendly_package/base_manager.py +102 -0
- autocoder/common/llm_friendly_package/docs_manager.py +121 -0
- autocoder/common/llm_friendly_package/library_manager.py +171 -0
- autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
- autocoder/common/llm_friendly_package/models.py +40 -0
- autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
- autocoder/common/llms/__init__.py +15 -0
- autocoder/common/llms/demo_error_handling.py +85 -0
- autocoder/common/llms/factory.py +142 -0
- autocoder/common/llms/manager.py +264 -0
- autocoder/common/llms/pricing.py +121 -0
- autocoder/common/llms/registry.py +288 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +651 -102
- autocoder/common/pruner/conversation_message_ids_api.py +386 -0
- autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
- autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
- autocoder/common/pruner/conversation_normalizer.py +347 -0
- autocoder/common/pruner/conversation_pruner.py +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
- autocoder/common/pruner/test_conversation_normalizer.py +502 -0
- autocoder/common/pruner/test_tool_content_detector.py +324 -0
- autocoder/common/pruner/tool_content_detector.py +227 -0
- autocoder/common/pruner/tools/__init__.py +18 -0
- autocoder/common/pruner/tools/query_message_ids.py +264 -0
- autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
- autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
- autocoder/common/pull_requests/__init__.py +9 -1
- autocoder/common/pull_requests/utils.py +122 -1
- autocoder/common/rag_manager/rag_manager.py +36 -40
- autocoder/common/rulefiles/__init__.py +53 -1
- autocoder/common/rulefiles/api.py +250 -0
- autocoder/common/rulefiles/core/__init__.py +14 -0
- autocoder/common/rulefiles/core/manager.py +241 -0
- autocoder/common/rulefiles/core/selector.py +805 -0
- autocoder/common/rulefiles/models/__init__.py +20 -0
- autocoder/common/rulefiles/models/index.py +16 -0
- autocoder/common/rulefiles/models/init_rule.py +18 -0
- autocoder/common/rulefiles/models/rule_file.py +18 -0
- autocoder/common/rulefiles/models/rule_relevance.py +14 -0
- autocoder/common/rulefiles/models/summary.py +16 -0
- autocoder/common/rulefiles/test_rulefiles.py +776 -0
- autocoder/common/rulefiles/utils/__init__.py +34 -0
- autocoder/common/rulefiles/utils/monitor.py +86 -0
- autocoder/common/rulefiles/utils/parser.py +230 -0
- autocoder/common/save_formatted_log.py +67 -10
- autocoder/common/search_replace.py +8 -1
- autocoder/common/search_replace_patch/__init__.py +24 -0
- autocoder/common/search_replace_patch/base.py +115 -0
- autocoder/common/search_replace_patch/manager.py +248 -0
- autocoder/common/search_replace_patch/patch_replacer.py +304 -0
- autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
- autocoder/common/search_replace_patch/string_replacer.py +181 -0
- autocoder/common/search_replace_patch/tests/__init__.py +3 -0
- autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
- autocoder/common/search_replace_patch/tests/test_base.py +188 -0
- autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
- autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
- autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
- autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
- autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
- autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
- autocoder/common/shell_commands/__init__.py +197 -0
- autocoder/common/shell_commands/background_process_notifier.py +346 -0
- autocoder/common/shell_commands/command_executor.py +1127 -0
- autocoder/common/shell_commands/error_recovery.py +541 -0
- autocoder/common/shell_commands/exceptions.py +120 -0
- autocoder/common/shell_commands/interactive_executor.py +476 -0
- autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
- autocoder/common/shell_commands/interactive_process.py +744 -0
- autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
- autocoder/common/shell_commands/monitoring.py +529 -0
- autocoder/common/shell_commands/process_cleanup.py +386 -0
- autocoder/common/shell_commands/process_manager.py +606 -0
- autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
- autocoder/common/shell_commands/tests/__init__.py +6 -0
- autocoder/common/shell_commands/tests/conftest.py +118 -0
- autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
- autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
- autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
- autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
- autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
- autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
- autocoder/common/shell_commands/tests/test_integration.py +664 -0
- autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
- autocoder/common/shell_commands/tests/test_performance.py +632 -0
- autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
- autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
- autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
- autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
- autocoder/common/shell_commands/timeout_config.py +315 -0
- autocoder/common/shell_commands/timeout_manager.py +352 -0
- autocoder/common/terminal_paste/__init__.py +14 -0
- autocoder/common/terminal_paste/demo.py +145 -0
- autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
- autocoder/common/terminal_paste/paste_handler.py +200 -0
- autocoder/common/terminal_paste/paste_manager.py +118 -0
- autocoder/common/terminal_paste/tests/__init__.py +1 -0
- autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
- autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
- autocoder/common/terminal_paste/utils.py +163 -0
- autocoder/common/test_autocoder_args.py +232 -0
- autocoder/common/test_env_manager.py +173 -0
- autocoder/common/test_env_manager_integration.py +159 -0
- autocoder/common/text_similarity/__init__.py +9 -0
- autocoder/common/text_similarity/demo.py +216 -0
- autocoder/common/text_similarity/examples.py +266 -0
- autocoder/common/text_similarity/test_text_similarity.py +306 -0
- autocoder/common/text_similarity/text_similarity.py +194 -0
- autocoder/common/text_similarity/utils.py +125 -0
- autocoder/common/todos/__init__.py +61 -0
- autocoder/common/todos/cache/__init__.py +16 -0
- autocoder/common/todos/cache/base_cache.py +89 -0
- autocoder/common/todos/cache/cache_manager.py +228 -0
- autocoder/common/todos/cache/memory_cache.py +225 -0
- autocoder/common/todos/config.py +155 -0
- autocoder/common/todos/exceptions.py +35 -0
- autocoder/common/todos/get_todo_manager.py +161 -0
- autocoder/common/todos/manager.py +537 -0
- autocoder/common/todos/models.py +239 -0
- autocoder/common/todos/storage/__init__.py +14 -0
- autocoder/common/todos/storage/base_storage.py +76 -0
- autocoder/common/todos/storage/file_storage.py +278 -0
- autocoder/common/tokens/counter.py +24 -2
- autocoder/common/tools_manager/__init__.py +17 -0
- autocoder/common/tools_manager/examples.py +162 -0
- autocoder/common/tools_manager/manager.py +385 -0
- autocoder/common/tools_manager/models.py +39 -0
- autocoder/common/tools_manager/test_tools_manager.py +303 -0
- autocoder/common/tools_manager/utils.py +191 -0
- autocoder/common/v2/agent/agentic_callbacks.py +270 -0
- autocoder/common/v2/agent/agentic_edit.py +2699 -1856
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
- autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
- autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
- autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +564 -29
- autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
- autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
- autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
- autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
- autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +410 -86
- autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +207 -192
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
- autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
- autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
- autocoder/common/v2/agent/agentic_edit_types.py +343 -9
- autocoder/common/v2/agent/runner/__init__.py +3 -3
- autocoder/common/v2/agent/runner/base_runner.py +12 -26
- autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
- autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
- autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
- autocoder/common/v2/agent/runner/tool_display.py +557 -159
- autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
- autocoder/common/v2/agent/test_agentic_edit.py +194 -0
- autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
- autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
- autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
- autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
- autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
- autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
- autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
- autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
- autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
- autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
- autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
- autocoder/common/v2/code_auto_generate.py +136 -78
- autocoder/common/v2/code_auto_generate_diff.py +135 -79
- autocoder/common/v2/code_auto_generate_editblock.py +174 -99
- autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
- autocoder/common/v2/code_auto_merge.py +1 -1
- autocoder/common/v2/code_auto_merge_editblock.py +13 -1
- autocoder/common/v2/code_diff_manager.py +3 -3
- autocoder/common/v2/code_editblock_manager.py +4 -14
- autocoder/common/v2/code_manager.py +1 -1
- autocoder/common/v2/code_strict_diff_manager.py +2 -2
- autocoder/common/wrap_llm_hint/__init__.py +10 -0
- autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
- autocoder/common/wrap_llm_hint/utils.py +432 -0
- autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
- autocoder/completer/__init__.py +8 -0
- autocoder/completer/command_completer_v2.py +1051 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +165 -7
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +116 -124
- autocoder/{agent → index/filter}/agentic_filter.py +322 -333
- autocoder/index/filter/normal_filter.py +5 -11
- autocoder/index/filter/quick_filter.py +1 -1
- autocoder/index/index.py +36 -9
- autocoder/index/tests/__init__.py +1 -0
- autocoder/index/tests/run_tests.py +195 -0
- autocoder/index/tests/test_entry.py +303 -0
- autocoder/index/tests/test_index_manager.py +314 -0
- autocoder/index/tests/test_module_integration.py +300 -0
- autocoder/index/tests/test_symbols_utils.py +183 -0
- autocoder/inner/__init__.py +4 -0
- autocoder/inner/agentic.py +932 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +65 -46
- autocoder/pyproject/__init__.py +32 -29
- autocoder/rag/agentic_rag.py +215 -75
- autocoder/rag/cache/simple_cache.py +1 -2
- autocoder/rag/loaders/image_loader.py +1 -1
- autocoder/rag/long_context_rag.py +42 -26
- autocoder/rag/qa_conversation_strategy.py +1 -1
- autocoder/rag/terminal/__init__.py +17 -0
- autocoder/rag/terminal/args.py +581 -0
- autocoder/rag/terminal/bootstrap.py +61 -0
- autocoder/rag/terminal/command_handlers.py +653 -0
- autocoder/rag/terminal/formatters/__init__.py +20 -0
- autocoder/rag/terminal/formatters/base.py +70 -0
- autocoder/rag/terminal/formatters/json_format.py +66 -0
- autocoder/rag/terminal/formatters/stream_json.py +95 -0
- autocoder/rag/terminal/formatters/text.py +28 -0
- autocoder/rag/terminal/init.py +120 -0
- autocoder/rag/terminal/utils.py +106 -0
- autocoder/rag/test_agentic_rag.py +389 -0
- autocoder/rag/test_doc_filter.py +3 -3
- autocoder/rag/test_long_context_rag.py +1 -1
- autocoder/rag/test_token_limiter.py +517 -10
- autocoder/rag/token_counter.py +3 -0
- autocoder/rag/token_limiter.py +19 -15
- autocoder/rag/tools/__init__.py +26 -2
- autocoder/rag/tools/bochaai_example.py +343 -0
- autocoder/rag/tools/bochaai_sdk.py +541 -0
- autocoder/rag/tools/metaso_example.py +268 -0
- autocoder/rag/tools/metaso_sdk.py +417 -0
- autocoder/rag/tools/recall_tool.py +28 -7
- autocoder/rag/tools/run_integration_tests.py +204 -0
- autocoder/rag/tools/test_all_providers.py +318 -0
- autocoder/rag/tools/test_bochaai_integration.py +482 -0
- autocoder/rag/tools/test_final_integration.py +215 -0
- autocoder/rag/tools/test_metaso_integration.py +424 -0
- autocoder/rag/tools/test_metaso_real.py +171 -0
- autocoder/rag/tools/test_web_crawl_tool.py +639 -0
- autocoder/rag/tools/test_web_search_tool.py +509 -0
- autocoder/rag/tools/todo_read_tool.py +202 -0
- autocoder/rag/tools/todo_write_tool.py +412 -0
- autocoder/rag/tools/web_crawl_tool.py +634 -0
- autocoder/rag/tools/web_search_tool.py +558 -0
- autocoder/rag/tools/web_tools_example.py +119 -0
- autocoder/rag/types.py +16 -0
- autocoder/rag/variable_holder.py +4 -2
- autocoder/rags.py +86 -79
- autocoder/regexproject/__init__.py +23 -21
- autocoder/sdk/__init__.py +46 -190
- autocoder/sdk/api.py +370 -0
- autocoder/sdk/async_runner/__init__.py +26 -0
- autocoder/sdk/async_runner/async_executor.py +650 -0
- autocoder/sdk/async_runner/async_handler.py +356 -0
- autocoder/sdk/async_runner/markdown_processor.py +595 -0
- autocoder/sdk/async_runner/task_metadata.py +284 -0
- autocoder/sdk/async_runner/worktree_manager.py +438 -0
- autocoder/sdk/cli/__init__.py +2 -5
- autocoder/sdk/cli/formatters.py +28 -204
- autocoder/sdk/cli/handlers.py +77 -44
- autocoder/sdk/cli/main.py +154 -171
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -109
- autocoder/sdk/core/bridge.py +297 -115
- autocoder/sdk/exceptions.py +18 -12
- autocoder/sdk/formatters/__init__.py +19 -0
- autocoder/sdk/formatters/input.py +64 -0
- autocoder/sdk/formatters/output.py +247 -0
- autocoder/sdk/formatters/stream.py +54 -0
- autocoder/sdk/models/__init__.py +6 -5
- autocoder/sdk/models/options.py +55 -18
- autocoder/sdk/utils/formatters.py +27 -195
- autocoder/suffixproject/__init__.py +28 -25
- autocoder/terminal/__init__.py +14 -0
- autocoder/terminal/app.py +454 -0
- autocoder/terminal/args.py +32 -0
- autocoder/terminal/bootstrap.py +178 -0
- autocoder/terminal/command_processor.py +521 -0
- autocoder/terminal/command_registry.py +57 -0
- autocoder/terminal/help.py +97 -0
- autocoder/terminal/tasks/__init__.py +5 -0
- autocoder/terminal/tasks/background.py +77 -0
- autocoder/terminal/tasks/task_event.py +70 -0
- autocoder/terminal/ui/__init__.py +13 -0
- autocoder/terminal/ui/completer.py +268 -0
- autocoder/terminal/ui/keybindings.py +75 -0
- autocoder/terminal/ui/session.py +41 -0
- autocoder/terminal/ui/toolbar.py +64 -0
- autocoder/terminal/utils/__init__.py +13 -0
- autocoder/terminal/utils/errors.py +18 -0
- autocoder/terminal/utils/paths.py +19 -0
- autocoder/terminal/utils/shell.py +43 -0
- autocoder/terminal_v3/__init__.py +10 -0
- autocoder/terminal_v3/app.py +201 -0
- autocoder/terminal_v3/handlers/__init__.py +5 -0
- autocoder/terminal_v3/handlers/command_handler.py +131 -0
- autocoder/terminal_v3/models/__init__.py +6 -0
- autocoder/terminal_v3/models/conversation_buffer.py +214 -0
- autocoder/terminal_v3/models/message.py +50 -0
- autocoder/terminal_v3/models/tool_display.py +247 -0
- autocoder/terminal_v3/ui/__init__.py +7 -0
- autocoder/terminal_v3/ui/keybindings.py +56 -0
- autocoder/terminal_v3/ui/layout.py +141 -0
- autocoder/terminal_v3/ui/styles.py +43 -0
- autocoder/tsproject/__init__.py +23 -23
- autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
- autocoder/utils/llms.py +88 -80
- autocoder/utils/math_utils.py +101 -0
- autocoder/utils/model_provider_selector.py +16 -4
- autocoder/utils/operate_config_api.py +33 -5
- autocoder/utils/thread_utils.py +2 -2
- autocoder/version.py +4 -2
- autocoder/workflow_agents/__init__.py +84 -0
- autocoder/workflow_agents/agent.py +143 -0
- autocoder/workflow_agents/exceptions.py +573 -0
- autocoder/workflow_agents/executor.py +489 -0
- autocoder/workflow_agents/loader.py +737 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +172 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-1.0.0.dist-info/METADATA +0 -396
- auto_coder-1.0.0.dist-info/RECORD +0 -442
- auto_coder-1.0.0.dist-info/licenses/LICENSE +0 -201
- autocoder/auto_coder_server.py +0 -672
- autocoder/benchmark.py +0 -138
- autocoder/common/ac_style_command_parser/example.py +0 -7
- autocoder/common/cleaner.py +0 -31
- autocoder/common/command_completer_v2.py +0 -615
- autocoder/common/context_pruner.py +0 -477
- autocoder/common/conversation_pruner.py +0 -132
- autocoder/common/directory_cache/__init__.py +0 -1
- autocoder/common/directory_cache/cache.py +0 -192
- autocoder/common/directory_cache/test_cache.py +0 -190
- autocoder/common/file_checkpoint/examples.py +0 -217
- autocoder/common/llm_friendly_package_example.py +0 -138
- autocoder/common/llm_friendly_package_test.py +0 -63
- autocoder/common/pull_requests/test_module.py +0 -1
- autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
- autocoder/common/text.py +0 -30
- autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
- autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
- autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
- autocoder/common/v2/agent/agentic_tool_display.py +0 -183
- autocoder/plugins/dynamic_completion_example.py +0 -148
- autocoder/plugins/sample_plugin.py +0 -160
- autocoder/sdk/cli/__main__.py +0 -26
- autocoder/sdk/cli/completion_wrapper.py +0 -38
- autocoder/sdk/cli/install_completion.py +0 -301
- autocoder/sdk/models/messages.py +0 -209
- autocoder/sdk/session/__init__.py +0 -32
- autocoder/sdk/session/session.py +0 -106
- autocoder/sdk/session/session_manager.py +0 -56
- {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Agentic Mode management functionality.
|
|
3
|
+
|
|
4
|
+
This module provides agentic_mode configuration management methods for auto-coder sessions,
|
|
5
|
+
including getting, setting, and toggling the agentic_mode between plan and act.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from .models import CoreMemory
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class AgenticModeManagerMixin:
|
|
15
|
+
"""Mixin class providing agentic_mode management functionality."""
|
|
16
|
+
|
|
17
|
+
# Available modes
|
|
18
|
+
AGENTIC_MODES = ["plan", "act"]
|
|
19
|
+
DEFAULT_AGENTIC_MODE = "act"
|
|
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_agentic_mode(self) -> str:
|
|
29
|
+
"""
|
|
30
|
+
Get current agentic_mode status.
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
Current agentic_mode ("plan" or "act"), defaults to "act"
|
|
34
|
+
"""
|
|
35
|
+
# Ensure conf dict exists
|
|
36
|
+
if "conf" not in self._memory.__dict__ or self._memory.conf is None:
|
|
37
|
+
self._memory.conf = {}
|
|
38
|
+
|
|
39
|
+
# Get the value, defaulting to "act" if not set
|
|
40
|
+
mode = self._memory.conf.get("agentic_mode", self.DEFAULT_AGENTIC_MODE)
|
|
41
|
+
|
|
42
|
+
# Validate mode
|
|
43
|
+
if mode not in self.AGENTIC_MODES:
|
|
44
|
+
mode = self.DEFAULT_AGENTIC_MODE
|
|
45
|
+
self._memory.conf["agentic_mode"] = mode
|
|
46
|
+
|
|
47
|
+
return mode
|
|
48
|
+
|
|
49
|
+
def set_agentic_mode(self, mode: str):
|
|
50
|
+
"""
|
|
51
|
+
Set agentic_mode.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
mode: Mode to set ("plan" or "act")
|
|
55
|
+
"""
|
|
56
|
+
if mode not in self.AGENTIC_MODES:
|
|
57
|
+
raise ValueError(f"Invalid agentic_mode: {mode}. Valid modes: {self.AGENTIC_MODES}")
|
|
58
|
+
|
|
59
|
+
# Ensure conf dict exists
|
|
60
|
+
if "conf" not in self._memory.__dict__ or self._memory.conf is None:
|
|
61
|
+
self._memory.conf = {}
|
|
62
|
+
|
|
63
|
+
self._memory.conf["agentic_mode"] = mode
|
|
64
|
+
self.save_memory()
|
|
65
|
+
|
|
66
|
+
def toggle_agentic_mode(self) -> str:
|
|
67
|
+
"""
|
|
68
|
+
Toggle agentic_mode between plan and act.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
New mode after toggling ("plan" or "act")
|
|
72
|
+
"""
|
|
73
|
+
current_mode = self.get_agentic_mode()
|
|
74
|
+
new_mode = "act" if current_mode == "plan" else "plan"
|
|
75
|
+
self.set_agentic_mode(new_mode)
|
|
76
|
+
return new_mode
|
|
77
|
+
|
|
78
|
+
def is_agentic_plan_mode(self) -> bool:
|
|
79
|
+
"""Check if current agentic_mode is plan."""
|
|
80
|
+
return self.get_agentic_mode() == "plan"
|
|
81
|
+
|
|
82
|
+
def is_agentic_act_mode(self) -> bool:
|
|
83
|
+
"""Check if current agentic_mode is act."""
|
|
84
|
+
return self.get_agentic_mode() == "act"
|
|
85
|
+
|
|
86
|
+
def get_agentic_mode_string(self) -> str:
|
|
87
|
+
"""
|
|
88
|
+
Get agentic_mode status as string for display.
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
Current agentic_mode ("plan" or "act")
|
|
92
|
+
"""
|
|
93
|
+
return self.get_agentic_mode()
|
|
94
|
+
|
|
95
|
+
def ensure_agentic_mode_config(self):
|
|
96
|
+
"""
|
|
97
|
+
Ensure agentic_mode configuration exists with default value.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
Current agentic_mode
|
|
101
|
+
"""
|
|
102
|
+
if "conf" not in self._memory.__dict__ or self._memory.conf is None:
|
|
103
|
+
self._memory.conf = {}
|
|
104
|
+
|
|
105
|
+
if "agentic_mode" not in self._memory.conf:
|
|
106
|
+
self._memory.conf["agentic_mode"] = self.DEFAULT_AGENTIC_MODE
|
|
107
|
+
self.save_memory()
|
|
108
|
+
|
|
109
|
+
return self.get_agentic_mode()
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Base memory manager providing core persistence functionality.
|
|
3
|
+
|
|
4
|
+
This module contains the base MemoryManager class with core functionality
|
|
5
|
+
for loading, saving, and managing memory persistence.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
import json
|
|
10
|
+
import threading
|
|
11
|
+
from typing import Dict, Any, Optional
|
|
12
|
+
from filelock import FileLock
|
|
13
|
+
from loguru import logger
|
|
14
|
+
|
|
15
|
+
from .models import CoreMemory
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class BaseMemoryManager:
|
|
19
|
+
"""
|
|
20
|
+
Base memory manager providing core persistence functionality.
|
|
21
|
+
|
|
22
|
+
This class handles:
|
|
23
|
+
- Memory persistence (load/save)
|
|
24
|
+
- File locking for thread safety
|
|
25
|
+
- Singleton pattern management
|
|
26
|
+
- Directory creation
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
_instances: Dict[str, 'BaseMemoryManager'] = {}
|
|
30
|
+
_lock = threading.Lock()
|
|
31
|
+
|
|
32
|
+
def __new__(cls, project_root: Optional[str] = None):
|
|
33
|
+
"""Ensure singleton pattern for each project root."""
|
|
34
|
+
root = os.path.abspath(project_root or os.getcwd())
|
|
35
|
+
with cls._lock:
|
|
36
|
+
if root not in cls._instances:
|
|
37
|
+
instance = super().__new__(cls)
|
|
38
|
+
cls._instances[root] = instance
|
|
39
|
+
return cls._instances[root]
|
|
40
|
+
|
|
41
|
+
def __init__(self, project_root: Optional[str] = None):
|
|
42
|
+
"""
|
|
43
|
+
Initialize base memory manager.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
project_root: Project root directory. If None, uses current working directory.
|
|
47
|
+
"""
|
|
48
|
+
# Prevent re-initialization of singleton
|
|
49
|
+
if hasattr(self, '_initialized'):
|
|
50
|
+
return
|
|
51
|
+
|
|
52
|
+
self.project_root = os.path.abspath(project_root or os.getcwd())
|
|
53
|
+
self.base_persist_dir = os.path.join(
|
|
54
|
+
self.project_root, ".auto-coder", "plugins", "chat-auto-coder"
|
|
55
|
+
)
|
|
56
|
+
self._memory = CoreMemory()
|
|
57
|
+
self._ensure_dirs()
|
|
58
|
+
self.load_memory()
|
|
59
|
+
self._initialized = True
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def get_instance(cls, project_root: Optional[str] = None) -> 'BaseMemoryManager':
|
|
63
|
+
"""
|
|
64
|
+
Get singleton instance for a project root.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
project_root: Project root directory. If None, uses current working directory.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
BaseMemoryManager instance
|
|
71
|
+
"""
|
|
72
|
+
root = os.path.abspath(project_root or os.getcwd())
|
|
73
|
+
return cls(root)
|
|
74
|
+
|
|
75
|
+
def _ensure_dirs(self):
|
|
76
|
+
"""Ensure persistence directories exist."""
|
|
77
|
+
os.makedirs(self.base_persist_dir, exist_ok=True)
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def memory_path(self) -> str:
|
|
81
|
+
"""Get memory file path."""
|
|
82
|
+
return os.path.join(self.base_persist_dir, "memory.json")
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def lock_path(self) -> str:
|
|
86
|
+
"""Get lock file path."""
|
|
87
|
+
return self.memory_path + ".lock"
|
|
88
|
+
|
|
89
|
+
def save_memory(self):
|
|
90
|
+
"""Save current memory to disk."""
|
|
91
|
+
with FileLock(self.lock_path, timeout=30):
|
|
92
|
+
with open(self.memory_path, "w", encoding="utf-8") as f:
|
|
93
|
+
json.dump(self._memory.to_dict(), f, indent=2, ensure_ascii=False)
|
|
94
|
+
|
|
95
|
+
logger.debug(f"Memory saved to {self.memory_path}")
|
|
96
|
+
|
|
97
|
+
def save_memory_with_new_memory(self, new_memory: Dict[str, Any]):
|
|
98
|
+
"""Save new memory data to disk."""
|
|
99
|
+
with FileLock(self.lock_path, timeout=30):
|
|
100
|
+
with open(self.memory_path, "w", encoding="utf-8") as f:
|
|
101
|
+
json.dump(new_memory, f, indent=2, ensure_ascii=False)
|
|
102
|
+
# Update internal memory state while we have the lock
|
|
103
|
+
self._memory = CoreMemory.from_dict(new_memory)
|
|
104
|
+
|
|
105
|
+
logger.debug(f"New memory saved to {self.memory_path}")
|
|
106
|
+
|
|
107
|
+
def load_memory(self) -> CoreMemory:
|
|
108
|
+
"""Load memory from disk."""
|
|
109
|
+
if os.path.exists(self.memory_path):
|
|
110
|
+
with FileLock(self.lock_path, timeout=30):
|
|
111
|
+
with open(self.memory_path, "r", encoding="utf-8") as f:
|
|
112
|
+
data = json.load(f)
|
|
113
|
+
self._memory = CoreMemory.from_dict(data)
|
|
114
|
+
logger.debug(f"Memory loaded from {self.memory_path}")
|
|
115
|
+
return self._memory
|
|
116
|
+
|
|
117
|
+
def get_memory(self) -> CoreMemory:
|
|
118
|
+
"""Get current memory (reloads from disk)."""
|
|
119
|
+
return self.load_memory()
|
|
120
|
+
|
|
121
|
+
def get_memory_dict(self) -> Dict[str, Any]:
|
|
122
|
+
"""Get memory as dictionary."""
|
|
123
|
+
return self.get_memory().to_dict()
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Compatibility functions for backward compatibility.
|
|
3
|
+
|
|
4
|
+
This module provides functions that maintain compatibility with
|
|
5
|
+
existing code that uses the old memory management interface.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import threading
|
|
9
|
+
from typing import Dict, Any, Optional, TYPE_CHECKING
|
|
10
|
+
from .main_manager import get_memory_manager
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from .main_manager import MemoryManager
|
|
14
|
+
|
|
15
|
+
# Global instance cache for compatibility
|
|
16
|
+
_default_memory_manager: Optional['MemoryManager'] = None
|
|
17
|
+
_default_memory_manager_lock = threading.Lock()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def save_memory():
|
|
21
|
+
"""Save memory (compatibility function)."""
|
|
22
|
+
global _default_memory_manager
|
|
23
|
+
with _default_memory_manager_lock:
|
|
24
|
+
if _default_memory_manager is None:
|
|
25
|
+
_default_memory_manager = get_memory_manager()
|
|
26
|
+
_default_memory_manager.save_memory()
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def save_memory_with_new_memory(new_memory: Dict[str, Any]):
|
|
30
|
+
"""Save new memory (compatibility function)."""
|
|
31
|
+
global _default_memory_manager
|
|
32
|
+
with _default_memory_manager_lock:
|
|
33
|
+
if _default_memory_manager is None:
|
|
34
|
+
_default_memory_manager = get_memory_manager()
|
|
35
|
+
_default_memory_manager.save_memory_with_new_memory(new_memory)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def load_memory() -> Dict[str, Any]:
|
|
39
|
+
"""Load memory (compatibility function)."""
|
|
40
|
+
global _default_memory_manager
|
|
41
|
+
with _default_memory_manager_lock:
|
|
42
|
+
if _default_memory_manager is None:
|
|
43
|
+
_default_memory_manager = get_memory_manager()
|
|
44
|
+
return _default_memory_manager.get_memory_dict()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def get_memory() -> Dict[str, Any]:
|
|
48
|
+
"""Get memory (compatibility function)."""
|
|
49
|
+
return load_memory()
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# Mode management compatibility functions
|
|
53
|
+
def get_mode() -> str:
|
|
54
|
+
"""Get current mode (compatibility function)."""
|
|
55
|
+
global _default_memory_manager
|
|
56
|
+
with _default_memory_manager_lock:
|
|
57
|
+
if _default_memory_manager is None:
|
|
58
|
+
_default_memory_manager = get_memory_manager()
|
|
59
|
+
return _default_memory_manager.get_mode()
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def set_mode(mode: str):
|
|
63
|
+
"""Set mode (compatibility function)."""
|
|
64
|
+
global _default_memory_manager
|
|
65
|
+
with _default_memory_manager_lock:
|
|
66
|
+
if _default_memory_manager is None:
|
|
67
|
+
_default_memory_manager = get_memory_manager()
|
|
68
|
+
_default_memory_manager.set_mode(mode)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def cycle_mode() -> str:
|
|
72
|
+
"""Cycle mode (compatibility function)."""
|
|
73
|
+
global _default_memory_manager
|
|
74
|
+
with _default_memory_manager_lock:
|
|
75
|
+
if _default_memory_manager is None:
|
|
76
|
+
_default_memory_manager = get_memory_manager()
|
|
77
|
+
return _default_memory_manager.cycle_mode()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# Human as model management compatibility functions
|
|
81
|
+
def get_human_as_model() -> bool:
|
|
82
|
+
"""Get human_as_model status (compatibility function)."""
|
|
83
|
+
global _default_memory_manager
|
|
84
|
+
with _default_memory_manager_lock:
|
|
85
|
+
if _default_memory_manager is None:
|
|
86
|
+
_default_memory_manager = get_memory_manager()
|
|
87
|
+
return _default_memory_manager.get_human_as_model()
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def set_human_as_model(enabled: bool):
|
|
91
|
+
"""Set human_as_model status (compatibility function)."""
|
|
92
|
+
global _default_memory_manager
|
|
93
|
+
with _default_memory_manager_lock:
|
|
94
|
+
if _default_memory_manager is None:
|
|
95
|
+
_default_memory_manager = get_memory_manager()
|
|
96
|
+
_default_memory_manager.set_human_as_model(enabled)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def toggle_human_as_model() -> bool:
|
|
100
|
+
"""Toggle human_as_model status (compatibility function)."""
|
|
101
|
+
global _default_memory_manager
|
|
102
|
+
with _default_memory_manager_lock:
|
|
103
|
+
if _default_memory_manager is None:
|
|
104
|
+
_default_memory_manager = get_memory_manager()
|
|
105
|
+
return _default_memory_manager.toggle_human_as_model()
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def get_human_as_model_string() -> str:
|
|
109
|
+
"""Get human_as_model status as string (compatibility function)."""
|
|
110
|
+
global _default_memory_manager
|
|
111
|
+
with _default_memory_manager_lock:
|
|
112
|
+
if _default_memory_manager is None:
|
|
113
|
+
_default_memory_manager = get_memory_manager()
|
|
114
|
+
return _default_memory_manager.get_human_as_model_string()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
# Agentic mode management compatibility functions
|
|
118
|
+
def get_agentic_mode() -> str:
|
|
119
|
+
"""Get agentic_mode status (compatibility function)."""
|
|
120
|
+
global _default_memory_manager
|
|
121
|
+
with _default_memory_manager_lock:
|
|
122
|
+
if _default_memory_manager is None:
|
|
123
|
+
_default_memory_manager = get_memory_manager()
|
|
124
|
+
return _default_memory_manager.get_agentic_mode()
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def set_agentic_mode(mode: str):
|
|
128
|
+
"""Set agentic_mode (compatibility function)."""
|
|
129
|
+
global _default_memory_manager
|
|
130
|
+
with _default_memory_manager_lock:
|
|
131
|
+
if _default_memory_manager is None:
|
|
132
|
+
_default_memory_manager = get_memory_manager()
|
|
133
|
+
_default_memory_manager.set_agentic_mode(mode)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def toggle_agentic_mode() -> str:
|
|
137
|
+
"""Toggle agentic_mode (compatibility function)."""
|
|
138
|
+
global _default_memory_manager
|
|
139
|
+
with _default_memory_manager_lock:
|
|
140
|
+
if _default_memory_manager is None:
|
|
141
|
+
_default_memory_manager = get_memory_manager()
|
|
142
|
+
return _default_memory_manager.toggle_agentic_mode()
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def get_agentic_mode_string() -> str:
|
|
146
|
+
"""Get agentic_mode status as string (compatibility function)."""
|
|
147
|
+
global _default_memory_manager
|
|
148
|
+
with _default_memory_manager_lock:
|
|
149
|
+
if _default_memory_manager is None:
|
|
150
|
+
_default_memory_manager = get_memory_manager()
|
|
151
|
+
return _default_memory_manager.get_agentic_mode_string()
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configuration management functionality.
|
|
3
|
+
|
|
4
|
+
This module provides configuration management methods including
|
|
5
|
+
basic configuration, batch operations, and nested configuration support.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Dict, Any, List
|
|
9
|
+
from .base_manager import BaseMemoryManager
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ConfigManagerMixin:
|
|
13
|
+
"""Mixin class providing configuration management functionality."""
|
|
14
|
+
|
|
15
|
+
def get_config(self, key: str, default: Any = None) -> Any:
|
|
16
|
+
"""Get configuration value."""
|
|
17
|
+
return self._memory.conf.get(key, default)
|
|
18
|
+
|
|
19
|
+
def set_config(self, key: str, value: Any):
|
|
20
|
+
"""Set configuration value."""
|
|
21
|
+
self._memory.conf[key] = value
|
|
22
|
+
self.save_memory()
|
|
23
|
+
|
|
24
|
+
def delete_config(self, key: str) -> bool:
|
|
25
|
+
"""Delete configuration value."""
|
|
26
|
+
if key in self._memory.conf:
|
|
27
|
+
del self._memory.conf[key]
|
|
28
|
+
self.save_memory()
|
|
29
|
+
return True
|
|
30
|
+
return False
|
|
31
|
+
|
|
32
|
+
def has_config(self, key: str) -> bool:
|
|
33
|
+
"""Check if configuration key exists."""
|
|
34
|
+
return key in self._memory.conf
|
|
35
|
+
|
|
36
|
+
# Extended configuration management methods
|
|
37
|
+
def get_all_config(self) -> Dict[str, Any]:
|
|
38
|
+
"""Get all configuration as a dictionary."""
|
|
39
|
+
return self._memory.conf.copy()
|
|
40
|
+
|
|
41
|
+
def set_configs(self, config_dict: Dict[str, Any]):
|
|
42
|
+
"""Set multiple configuration values at once."""
|
|
43
|
+
for key, value in config_dict.items():
|
|
44
|
+
self._memory.conf[key] = value
|
|
45
|
+
self.save_memory()
|
|
46
|
+
|
|
47
|
+
def update_config(self, config_dict: Dict[str, Any]):
|
|
48
|
+
"""Update configuration with new values (alias for set_configs)."""
|
|
49
|
+
self.set_configs(config_dict)
|
|
50
|
+
|
|
51
|
+
def clear_config(self):
|
|
52
|
+
"""Clear all configuration."""
|
|
53
|
+
self._memory.conf.clear()
|
|
54
|
+
self.save_memory()
|
|
55
|
+
|
|
56
|
+
def get_config_keys(self) -> List[str]:
|
|
57
|
+
"""Get list of all configuration keys."""
|
|
58
|
+
return list(self._memory.conf.keys())
|
|
59
|
+
|
|
60
|
+
def get_config_count(self) -> int:
|
|
61
|
+
"""Get number of configuration items."""
|
|
62
|
+
return len(self._memory.conf)
|
|
63
|
+
|
|
64
|
+
# Nested configuration support (for keys like "model.name")
|
|
65
|
+
def get_nested_config(self, key: str, default: Any = None) -> Any:
|
|
66
|
+
"""
|
|
67
|
+
Get nested configuration value using dot notation.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
key: Nested key like "model.name" or "database.host"
|
|
71
|
+
default: Default value if key not found
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Configuration value or default
|
|
75
|
+
"""
|
|
76
|
+
keys = key.split('.')
|
|
77
|
+
value = self._memory.conf
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
for k in keys:
|
|
81
|
+
value = value[k]
|
|
82
|
+
return value
|
|
83
|
+
except (KeyError, TypeError):
|
|
84
|
+
return default
|
|
85
|
+
|
|
86
|
+
def set_nested_config(self, key: str, value: Any):
|
|
87
|
+
"""
|
|
88
|
+
Set nested configuration value using dot notation.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
key: Nested key like "model.name" or "database.host"
|
|
92
|
+
value: Value to set
|
|
93
|
+
"""
|
|
94
|
+
keys = key.split('.')
|
|
95
|
+
config = self._memory.conf
|
|
96
|
+
|
|
97
|
+
# Navigate to the parent of the final key
|
|
98
|
+
for k in keys[:-1]:
|
|
99
|
+
if k not in config:
|
|
100
|
+
config[k] = {}
|
|
101
|
+
elif not isinstance(config[k], dict):
|
|
102
|
+
# If existing value is not a dict, replace it
|
|
103
|
+
config[k] = {}
|
|
104
|
+
config = config[k]
|
|
105
|
+
|
|
106
|
+
# Set the final value
|
|
107
|
+
config[keys[-1]] = value
|
|
108
|
+
self.save_memory()
|
|
109
|
+
|
|
110
|
+
def delete_nested_config(self, key: str) -> bool:
|
|
111
|
+
"""
|
|
112
|
+
Delete nested configuration value using dot notation.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
key: Nested key like "model.name" or "database.host"
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
True if key was found and deleted, False otherwise
|
|
119
|
+
"""
|
|
120
|
+
keys = key.split('.')
|
|
121
|
+
config = self._memory.conf
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
# Navigate to the parent of the final key
|
|
125
|
+
for k in keys[:-1]:
|
|
126
|
+
config = config[k]
|
|
127
|
+
|
|
128
|
+
# Delete the final key
|
|
129
|
+
if keys[-1] in config:
|
|
130
|
+
del config[keys[-1]]
|
|
131
|
+
self.save_memory()
|
|
132
|
+
return True
|
|
133
|
+
else:
|
|
134
|
+
return False
|
|
135
|
+
except (KeyError, TypeError):
|
|
136
|
+
return False
|
|
137
|
+
|
|
138
|
+
def has_nested_config(self, key: str) -> bool:
|
|
139
|
+
"""
|
|
140
|
+
Check if nested configuration key exists using dot notation.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
key: Nested key like "model.name" or "database.host"
|
|
144
|
+
|
|
145
|
+
Returns:
|
|
146
|
+
True if key exists, False otherwise
|
|
147
|
+
"""
|
|
148
|
+
keys = key.split('.')
|
|
149
|
+
config = self._memory.conf
|
|
150
|
+
|
|
151
|
+
try:
|
|
152
|
+
for k in keys:
|
|
153
|
+
config = config[k]
|
|
154
|
+
return True
|
|
155
|
+
except (KeyError, TypeError):
|
|
156
|
+
return False
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Conversation management functionality.
|
|
3
|
+
|
|
4
|
+
This module provides methods for managing conversation history.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, Any, List
|
|
8
|
+
from .models import ConversationList
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ConversationManagerMixin:
|
|
12
|
+
"""Mixin class providing conversation management functionality."""
|
|
13
|
+
|
|
14
|
+
def get_conversation(self) -> ConversationList:
|
|
15
|
+
"""Get conversation history."""
|
|
16
|
+
return self._memory.conversation.copy()
|
|
17
|
+
|
|
18
|
+
def add_conversation_message(self, role: str, content: str):
|
|
19
|
+
"""Add a message to conversation history."""
|
|
20
|
+
self._memory.conversation.append({"role": role, "content": content})
|
|
21
|
+
self.save_memory()
|
|
22
|
+
|
|
23
|
+
def clear_conversation(self):
|
|
24
|
+
"""Clear conversation history."""
|
|
25
|
+
self._memory.conversation = []
|
|
26
|
+
self.save_memory()
|
|
27
|
+
|
|
28
|
+
def set_conversation(self, conversation: ConversationList):
|
|
29
|
+
"""Set entire conversation history."""
|
|
30
|
+
self._memory.conversation = conversation
|
|
31
|
+
self.save_memory()
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Exclude management functionality.
|
|
3
|
+
|
|
4
|
+
This module provides methods for managing excluded files and directories.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import List
|
|
8
|
+
from .models import FileList
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ExcludeManagerMixin:
|
|
12
|
+
"""Mixin class providing exclude management functionality."""
|
|
13
|
+
|
|
14
|
+
# ===== Exclude Files Management =====
|
|
15
|
+
def get_exclude_files(self) -> FileList:
|
|
16
|
+
"""Get exclude file patterns."""
|
|
17
|
+
return self._memory.exclude_files.copy()
|
|
18
|
+
|
|
19
|
+
def add_exclude_files(self, patterns: FileList) -> FileList:
|
|
20
|
+
"""Add exclude file patterns (avoiding duplicates)."""
|
|
21
|
+
existing_patterns = set(self._memory.exclude_files)
|
|
22
|
+
new_patterns = [p for p in patterns if p not in existing_patterns]
|
|
23
|
+
if new_patterns:
|
|
24
|
+
self._memory.exclude_files.extend(new_patterns)
|
|
25
|
+
self.save_memory()
|
|
26
|
+
return new_patterns
|
|
27
|
+
|
|
28
|
+
def remove_exclude_files(self, patterns: FileList) -> FileList:
|
|
29
|
+
"""Remove exclude file patterns."""
|
|
30
|
+
removed_patterns = []
|
|
31
|
+
for pattern in patterns:
|
|
32
|
+
if pattern in self._memory.exclude_files:
|
|
33
|
+
self._memory.exclude_files.remove(pattern)
|
|
34
|
+
removed_patterns.append(pattern)
|
|
35
|
+
if removed_patterns:
|
|
36
|
+
self.save_memory()
|
|
37
|
+
return removed_patterns
|
|
38
|
+
|
|
39
|
+
def clear_exclude_files(self):
|
|
40
|
+
"""Clear all exclude file patterns."""
|
|
41
|
+
self._memory.exclude_files = []
|
|
42
|
+
self.save_memory()
|
|
43
|
+
|
|
44
|
+
# ===== Exclude Directories Management =====
|
|
45
|
+
def get_exclude_dirs(self) -> List[str]:
|
|
46
|
+
"""Get exclude directories."""
|
|
47
|
+
return self._memory.exclude_dirs.copy()
|
|
48
|
+
|
|
49
|
+
def add_exclude_dirs(self, dirs: List[str]) -> List[str]:
|
|
50
|
+
"""Add exclude directories (avoiding duplicates)."""
|
|
51
|
+
existing_dirs = set(self._memory.exclude_dirs)
|
|
52
|
+
new_dirs = [d for d in dirs if d not in existing_dirs]
|
|
53
|
+
if new_dirs:
|
|
54
|
+
self._memory.exclude_dirs.extend(new_dirs)
|
|
55
|
+
self.save_memory()
|
|
56
|
+
return new_dirs
|
|
57
|
+
|
|
58
|
+
def remove_exclude_dirs(self, dirs: List[str]) -> List[str]:
|
|
59
|
+
"""Remove exclude directories."""
|
|
60
|
+
removed_dirs = []
|
|
61
|
+
for dir_name in dirs:
|
|
62
|
+
if dir_name in self._memory.exclude_dirs:
|
|
63
|
+
self._memory.exclude_dirs.remove(dir_name)
|
|
64
|
+
removed_dirs.append(dir_name)
|
|
65
|
+
if removed_dirs:
|
|
66
|
+
self.save_memory()
|
|
67
|
+
return removed_dirs
|
|
68
|
+
|
|
69
|
+
def clear_exclude_dirs(self):
|
|
70
|
+
"""Clear all exclude directories."""
|
|
71
|
+
self._memory.exclude_dirs = []
|
|
72
|
+
self.save_memory()
|