auto-coder 0.1.400__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- auto_coder-2.0.0.dist-info/LICENSE +158 -0
- auto_coder-2.0.0.dist-info/METADATA +558 -0
- auto_coder-2.0.0.dist-info/RECORD +795 -0
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
- autocoder/__init__.py +31 -0
- autocoder/agent/auto_filegroup.py +32 -13
- autocoder/agent/auto_learn_from_commit.py +9 -1
- autocoder/agent/base_agentic/__init__.py +3 -0
- autocoder/agent/base_agentic/agent_hub.py +1 -1
- autocoder/agent/base_agentic/base_agent.py +235 -136
- autocoder/agent/base_agentic/default_tools.py +119 -118
- autocoder/agent/base_agentic/test_base_agent.py +1 -1
- autocoder/agent/base_agentic/tool_registry.py +32 -20
- autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +25 -4
- autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
- autocoder/agent/base_agentic/types.py +42 -0
- autocoder/agent/entry_command_agent/chat.py +73 -59
- autocoder/auto_coder.py +31 -40
- autocoder/auto_coder_rag.py +11 -1084
- autocoder/auto_coder_runner.py +1029 -2310
- autocoder/auto_coder_terminal.py +26 -0
- autocoder/auto_coder_terminal_v3.py +190 -0
- autocoder/chat/conf_command.py +224 -124
- autocoder/chat/models_command.py +361 -299
- autocoder/chat/rules_command.py +79 -31
- autocoder/chat_auto_coder.py +1021 -372
- autocoder/chat_auto_coder_lang.py +23 -732
- autocoder/commands/auto_command.py +26 -9
- autocoder/commands/auto_web.py +1 -1
- autocoder/commands/tools.py +44 -44
- autocoder/common/__init__.py +150 -128
- autocoder/common/ac_style_command_parser/__init__.py +39 -2
- autocoder/common/ac_style_command_parser/config.py +422 -0
- autocoder/common/ac_style_command_parser/parser.py +292 -78
- autocoder/common/ac_style_command_parser/test_parser.py +241 -16
- autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
- autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
- autocoder/common/action_yml_file_manager.py +25 -13
- autocoder/common/agent_events/__init__.py +52 -0
- autocoder/common/agent_events/agent_event_emitter.py +193 -0
- autocoder/common/agent_events/event_factory.py +177 -0
- autocoder/common/agent_events/examples.py +307 -0
- autocoder/common/agent_events/types.py +113 -0
- autocoder/common/agent_events/utils.py +68 -0
- autocoder/common/agent_hooks/__init__.py +44 -0
- autocoder/common/agent_hooks/examples.py +582 -0
- autocoder/common/agent_hooks/hook_executor.py +217 -0
- autocoder/common/agent_hooks/hook_manager.py +288 -0
- autocoder/common/agent_hooks/types.py +133 -0
- autocoder/common/agent_hooks/utils.py +99 -0
- autocoder/common/agent_query_queue/queue_executor.py +324 -0
- autocoder/common/agent_query_queue/queue_manager.py +325 -0
- autocoder/common/agents/__init__.py +11 -0
- autocoder/common/agents/agent_manager.py +323 -0
- autocoder/common/agents/agent_parser.py +189 -0
- autocoder/common/agents/example_usage.py +344 -0
- autocoder/common/agents/integration_example.py +330 -0
- autocoder/common/agents/test_agent_parser.py +545 -0
- autocoder/common/async_utils.py +101 -0
- autocoder/common/auto_coder_lang.py +23 -972
- autocoder/common/autocoderargs_parser/__init__.py +14 -0
- autocoder/common/autocoderargs_parser/parser.py +184 -0
- autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
- autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
- autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
- autocoder/common/autocoderargs_parser/token_parser.py +290 -0
- autocoder/common/buildin_tokenizer.py +2 -4
- autocoder/common/code_auto_generate.py +149 -74
- autocoder/common/code_auto_generate_diff.py +163 -70
- autocoder/common/code_auto_generate_editblock.py +179 -89
- autocoder/common/code_auto_generate_strict_diff.py +167 -72
- autocoder/common/code_auto_merge_editblock.py +13 -6
- autocoder/common/code_modification_ranker.py +1 -1
- autocoder/common/command_completer.py +3 -3
- autocoder/common/command_file_manager/manager.py +183 -47
- autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
- autocoder/common/command_templates.py +1 -1
- autocoder/common/conf_utils.py +2 -4
- autocoder/common/conversations/config.py +11 -3
- autocoder/common/conversations/get_conversation_manager.py +100 -2
- autocoder/common/conversations/llm_stats_models.py +264 -0
- autocoder/common/conversations/manager.py +112 -28
- autocoder/common/conversations/models.py +16 -2
- autocoder/common/conversations/storage/index_manager.py +134 -10
- autocoder/common/core_config/__init__.py +63 -0
- autocoder/common/core_config/agentic_mode_manager.py +109 -0
- autocoder/common/core_config/base_manager.py +123 -0
- autocoder/common/core_config/compatibility.py +151 -0
- autocoder/common/core_config/config_manager.py +156 -0
- autocoder/common/core_config/conversation_manager.py +31 -0
- autocoder/common/core_config/exclude_manager.py +72 -0
- autocoder/common/core_config/file_manager.py +177 -0
- autocoder/common/core_config/human_as_model_manager.py +129 -0
- autocoder/common/core_config/lib_manager.py +54 -0
- autocoder/common/core_config/main_manager.py +81 -0
- autocoder/common/core_config/mode_manager.py +126 -0
- autocoder/common/core_config/models.py +70 -0
- autocoder/common/core_config/test_memory_manager.py +1056 -0
- autocoder/common/env_manager.py +282 -0
- autocoder/common/env_manager_usage_example.py +211 -0
- autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
- autocoder/common/file_checkpoint/manager.py +264 -48
- autocoder/common/file_checkpoint/test_backup.py +1 -18
- autocoder/common/file_checkpoint/test_manager.py +270 -1
- autocoder/common/file_checkpoint/test_store.py +1 -17
- autocoder/common/file_handler/__init__.py +23 -0
- autocoder/common/file_handler/active_context_handler.py +159 -0
- autocoder/common/file_handler/add_files_handler.py +409 -0
- autocoder/common/file_handler/chat_handler.py +180 -0
- autocoder/common/file_handler/coding_handler.py +401 -0
- autocoder/common/file_handler/commit_handler.py +200 -0
- autocoder/common/file_handler/lib_handler.py +156 -0
- autocoder/common/file_handler/list_files_handler.py +111 -0
- autocoder/common/file_handler/mcp_handler.py +268 -0
- autocoder/common/file_handler/models_handler.py +493 -0
- autocoder/common/file_handler/remove_files_handler.py +172 -0
- autocoder/common/file_monitor/test_file_monitor.py +307 -0
- autocoder/common/git_utils.py +51 -10
- autocoder/common/global_cancel.py +15 -6
- autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
- autocoder/common/international/__init__.py +31 -0
- autocoder/common/international/demo_international.py +92 -0
- autocoder/common/international/message_manager.py +157 -0
- autocoder/common/international/messages/__init__.py +56 -0
- autocoder/common/international/messages/async_command_messages.py +507 -0
- autocoder/common/international/messages/auto_coder_messages.py +2208 -0
- autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
- autocoder/common/international/messages/command_help_messages.py +986 -0
- autocoder/common/international/messages/conversation_command_messages.py +191 -0
- autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
- autocoder/common/international/messages/queue_command_messages.py +751 -0
- autocoder/common/international/messages/rules_command_messages.py +77 -0
- autocoder/common/international/messages/sdk_messages.py +1707 -0
- autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
- autocoder/common/international/messages/tool_display_messages.py +1212 -0
- autocoder/common/international/messages/workflow_exception_messages.py +473 -0
- autocoder/common/international/test_international.py +612 -0
- autocoder/common/linter_core/__init__.py +28 -0
- autocoder/common/linter_core/base_linter.py +61 -0
- autocoder/common/linter_core/config_loader.py +271 -0
- autocoder/common/linter_core/formatters/__init__.py +0 -0
- autocoder/common/linter_core/formatters/base_formatter.py +38 -0
- autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
- autocoder/common/linter_core/linter.py +166 -0
- autocoder/common/linter_core/linter_factory.py +216 -0
- autocoder/common/linter_core/linter_manager.py +333 -0
- autocoder/common/linter_core/linters/__init__.py +9 -0
- autocoder/common/linter_core/linters/java_linter.py +342 -0
- autocoder/common/linter_core/linters/python_linter.py +115 -0
- autocoder/common/linter_core/linters/typescript_linter.py +119 -0
- autocoder/common/linter_core/models/__init__.py +7 -0
- autocoder/common/linter_core/models/lint_result.py +91 -0
- autocoder/common/linter_core/models.py +33 -0
- autocoder/common/linter_core/tests/__init__.py +3 -0
- autocoder/common/linter_core/tests/test_config_loader.py +323 -0
- autocoder/common/linter_core/tests/test_config_loading.py +308 -0
- autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
- autocoder/common/linter_core/tests/test_formatters.py +147 -0
- autocoder/common/linter_core/tests/test_integration.py +317 -0
- autocoder/common/linter_core/tests/test_java_linter.py +496 -0
- autocoder/common/linter_core/tests/test_linters.py +265 -0
- autocoder/common/linter_core/tests/test_models.py +81 -0
- autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
- autocoder/common/linter_core/tests/verify_fixes.py +183 -0
- autocoder/common/llm_friendly_package/__init__.py +31 -0
- autocoder/common/llm_friendly_package/base_manager.py +102 -0
- autocoder/common/llm_friendly_package/docs_manager.py +121 -0
- autocoder/common/llm_friendly_package/library_manager.py +171 -0
- autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
- autocoder/common/llm_friendly_package/models.py +40 -0
- autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
- autocoder/common/llms/__init__.py +15 -0
- autocoder/common/llms/demo_error_handling.py +85 -0
- autocoder/common/llms/factory.py +142 -0
- autocoder/common/llms/manager.py +264 -0
- autocoder/common/llms/pricing.py +121 -0
- autocoder/common/llms/registry.py +288 -0
- autocoder/common/llms/schema.py +77 -0
- autocoder/common/llms/simple_demo.py +45 -0
- autocoder/common/llms/test_quick_model.py +116 -0
- autocoder/common/llms/test_remove_functionality.py +182 -0
- autocoder/common/llms/tests/__init__.py +1 -0
- autocoder/common/llms/tests/test_manager.py +330 -0
- autocoder/common/llms/tests/test_registry.py +364 -0
- autocoder/common/mcp_tools/__init__.py +62 -0
- autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
- autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
- autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
- autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
- autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
- autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
- autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
- autocoder/common/mcp_tools/verify_functionality.py +202 -0
- autocoder/common/model_speed_tester.py +32 -26
- autocoder/common/priority_directory_finder/__init__.py +142 -0
- autocoder/common/priority_directory_finder/examples.py +230 -0
- autocoder/common/priority_directory_finder/finder.py +283 -0
- autocoder/common/priority_directory_finder/models.py +236 -0
- autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
- autocoder/common/project_scanner/__init__.py +18 -0
- autocoder/common/project_scanner/compat.py +77 -0
- autocoder/common/project_scanner/scanner.py +436 -0
- autocoder/common/project_tracker/__init__.py +27 -0
- autocoder/common/project_tracker/api.py +228 -0
- autocoder/common/project_tracker/demo.py +272 -0
- autocoder/common/project_tracker/tracker.py +487 -0
- autocoder/common/project_tracker/types.py +53 -0
- autocoder/common/pruner/__init__.py +67 -0
- autocoder/common/pruner/agentic_conversation_pruner.py +746 -0
- autocoder/common/{context_pruner.py → pruner/context_pruner.py} +137 -40
- autocoder/common/pruner/conversation_message_ids_api.py +386 -0
- autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
- autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
- autocoder/common/pruner/conversation_normalizer.py +347 -0
- autocoder/common/{conversation_pruner.py → pruner/conversation_pruner.py} +26 -6
- autocoder/common/pruner/test_agentic_conversation_pruner.py +784 -0
- autocoder/common/pruner/test_context_pruner.py +546 -0
- autocoder/common/pruner/test_conversation_normalizer.py +502 -0
- autocoder/common/pruner/test_tool_content_detector.py +324 -0
- autocoder/common/pruner/tool_content_detector.py +227 -0
- autocoder/common/pruner/tools/__init__.py +18 -0
- autocoder/common/pruner/tools/query_message_ids.py +264 -0
- autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
- autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
- autocoder/common/pull_requests/__init__.py +9 -1
- autocoder/common/pull_requests/utils.py +122 -1
- autocoder/common/rag_manager/rag_manager.py +36 -40
- autocoder/common/rulefiles/__init__.py +53 -1
- autocoder/common/rulefiles/api.py +250 -0
- autocoder/common/rulefiles/core/__init__.py +14 -0
- autocoder/common/rulefiles/core/manager.py +241 -0
- autocoder/common/rulefiles/core/selector.py +805 -0
- autocoder/common/rulefiles/models/__init__.py +20 -0
- autocoder/common/rulefiles/models/index.py +16 -0
- autocoder/common/rulefiles/models/init_rule.py +18 -0
- autocoder/common/rulefiles/models/rule_file.py +18 -0
- autocoder/common/rulefiles/models/rule_relevance.py +14 -0
- autocoder/common/rulefiles/models/summary.py +16 -0
- autocoder/common/rulefiles/test_rulefiles.py +776 -0
- autocoder/common/rulefiles/utils/__init__.py +34 -0
- autocoder/common/rulefiles/utils/monitor.py +86 -0
- autocoder/common/rulefiles/utils/parser.py +230 -0
- autocoder/common/save_formatted_log.py +67 -10
- autocoder/common/search_replace.py +8 -1
- autocoder/common/search_replace_patch/__init__.py +24 -0
- autocoder/common/search_replace_patch/base.py +115 -0
- autocoder/common/search_replace_patch/manager.py +248 -0
- autocoder/common/search_replace_patch/patch_replacer.py +304 -0
- autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
- autocoder/common/search_replace_patch/string_replacer.py +181 -0
- autocoder/common/search_replace_patch/tests/__init__.py +3 -0
- autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
- autocoder/common/search_replace_patch/tests/test_base.py +188 -0
- autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
- autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
- autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
- autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
- autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
- autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
- autocoder/common/shell_commands/__init__.py +197 -0
- autocoder/common/shell_commands/background_process_notifier.py +346 -0
- autocoder/common/shell_commands/command_executor.py +1127 -0
- autocoder/common/shell_commands/error_recovery.py +541 -0
- autocoder/common/shell_commands/exceptions.py +120 -0
- autocoder/common/shell_commands/interactive_executor.py +476 -0
- autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
- autocoder/common/shell_commands/interactive_process.py +744 -0
- autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
- autocoder/common/shell_commands/monitoring.py +529 -0
- autocoder/common/shell_commands/process_cleanup.py +386 -0
- autocoder/common/shell_commands/process_manager.py +606 -0
- autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
- autocoder/common/shell_commands/tests/__init__.py +6 -0
- autocoder/common/shell_commands/tests/conftest.py +118 -0
- autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
- autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
- autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
- autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
- autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
- autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
- autocoder/common/shell_commands/tests/test_integration.py +664 -0
- autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
- autocoder/common/shell_commands/tests/test_performance.py +632 -0
- autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
- autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
- autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
- autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
- autocoder/common/shell_commands/timeout_config.py +315 -0
- autocoder/common/shell_commands/timeout_manager.py +352 -0
- autocoder/common/terminal_paste/__init__.py +14 -0
- autocoder/common/terminal_paste/demo.py +145 -0
- autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
- autocoder/common/terminal_paste/paste_handler.py +200 -0
- autocoder/common/terminal_paste/paste_manager.py +118 -0
- autocoder/common/terminal_paste/tests/__init__.py +1 -0
- autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
- autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
- autocoder/common/terminal_paste/utils.py +163 -0
- autocoder/common/test_autocoder_args.py +232 -0
- autocoder/common/test_env_manager.py +173 -0
- autocoder/common/test_env_manager_integration.py +159 -0
- autocoder/common/text_similarity/__init__.py +9 -0
- autocoder/common/text_similarity/demo.py +216 -0
- autocoder/common/text_similarity/examples.py +266 -0
- autocoder/common/text_similarity/test_text_similarity.py +306 -0
- autocoder/common/text_similarity/text_similarity.py +194 -0
- autocoder/common/text_similarity/utils.py +125 -0
- autocoder/common/todos/__init__.py +61 -0
- autocoder/common/todos/cache/__init__.py +16 -0
- autocoder/common/todos/cache/base_cache.py +89 -0
- autocoder/common/todos/cache/cache_manager.py +228 -0
- autocoder/common/todos/cache/memory_cache.py +225 -0
- autocoder/common/todos/config.py +155 -0
- autocoder/common/todos/exceptions.py +35 -0
- autocoder/common/todos/get_todo_manager.py +161 -0
- autocoder/common/todos/manager.py +537 -0
- autocoder/common/todos/models.py +239 -0
- autocoder/common/todos/storage/__init__.py +14 -0
- autocoder/common/todos/storage/base_storage.py +76 -0
- autocoder/common/todos/storage/file_storage.py +278 -0
- autocoder/common/tokens/__init__.py +15 -0
- autocoder/common/tokens/counter.py +44 -2
- autocoder/common/tools_manager/__init__.py +17 -0
- autocoder/common/tools_manager/examples.py +162 -0
- autocoder/common/tools_manager/manager.py +385 -0
- autocoder/common/tools_manager/models.py +39 -0
- autocoder/common/tools_manager/test_tools_manager.py +303 -0
- autocoder/common/tools_manager/utils.py +191 -0
- autocoder/common/v2/agent/agentic_callbacks.py +270 -0
- autocoder/common/v2/agent/agentic_edit.py +2729 -2052
- autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
- autocoder/common/v2/agent/agentic_edit_tools/__init__.py +43 -2
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
- autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +52 -0
- autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
- autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
- autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
- autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
- autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
- autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +565 -30
- autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
- autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
- autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
- autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
- autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
- autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +244 -51
- autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
- autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
- autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +409 -140
- autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
- autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
- autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +209 -194
- autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +135 -0
- autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +328 -0
- autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
- autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
- autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
- autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
- autocoder/common/v2/agent/agentic_edit_types.py +386 -10
- autocoder/common/v2/agent/runner/__init__.py +31 -0
- autocoder/common/v2/agent/runner/base_runner.py +92 -0
- autocoder/common/v2/agent/runner/file_based_event_runner.py +217 -0
- autocoder/common/v2/agent/runner/sdk_runner.py +182 -0
- autocoder/common/v2/agent/runner/terminal_runner.py +396 -0
- autocoder/common/v2/agent/runner/tool_display.py +589 -0
- autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
- autocoder/common/v2/agent/test_agentic_edit.py +194 -0
- autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
- autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
- autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
- autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
- autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
- autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
- autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
- autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
- autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
- autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
- autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
- autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
- autocoder/common/v2/code_auto_generate.py +136 -78
- autocoder/common/v2/code_auto_generate_diff.py +135 -79
- autocoder/common/v2/code_auto_generate_editblock.py +174 -99
- autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
- autocoder/common/v2/code_auto_merge.py +1 -1
- autocoder/common/v2/code_auto_merge_editblock.py +13 -1
- autocoder/common/v2/code_diff_manager.py +3 -3
- autocoder/common/v2/code_editblock_manager.py +4 -14
- autocoder/common/v2/code_manager.py +1 -1
- autocoder/common/v2/code_strict_diff_manager.py +2 -2
- autocoder/common/wrap_llm_hint/__init__.py +10 -0
- autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
- autocoder/common/wrap_llm_hint/utils.py +432 -0
- autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
- autocoder/completer/__init__.py +8 -0
- autocoder/completer/command_completer_v2.py +1051 -0
- autocoder/default_project/__init__.py +501 -0
- autocoder/dispacher/__init__.py +4 -12
- autocoder/dispacher/actions/action.py +165 -7
- autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
- autocoder/index/entry.py +117 -125
- autocoder/{agent → index/filter}/agentic_filter.py +323 -334
- autocoder/index/filter/normal_filter.py +5 -11
- autocoder/index/filter/quick_filter.py +1 -1
- autocoder/index/index.py +36 -9
- autocoder/index/tests/__init__.py +1 -0
- autocoder/index/tests/run_tests.py +195 -0
- autocoder/index/tests/test_entry.py +303 -0
- autocoder/index/tests/test_index_manager.py +314 -0
- autocoder/index/tests/test_module_integration.py +300 -0
- autocoder/index/tests/test_symbols_utils.py +183 -0
- autocoder/inner/__init__.py +4 -0
- autocoder/inner/agentic.py +932 -0
- autocoder/inner/async_command_handler.py +992 -0
- autocoder/inner/conversation_command_handlers.py +623 -0
- autocoder/inner/merge_command_handler.py +213 -0
- autocoder/inner/queue_command_handler.py +684 -0
- autocoder/models.py +95 -266
- autocoder/plugins/git_helper_plugin.py +31 -29
- autocoder/plugins/token_helper_plugin.py +156 -37
- autocoder/pyproject/__init__.py +32 -29
- autocoder/rag/agentic_rag.py +215 -75
- autocoder/rag/cache/simple_cache.py +1 -2
- autocoder/rag/loaders/image_loader.py +1 -1
- autocoder/rag/long_context_rag.py +42 -26
- autocoder/rag/qa_conversation_strategy.py +1 -1
- autocoder/rag/terminal/__init__.py +17 -0
- autocoder/rag/terminal/args.py +581 -0
- autocoder/rag/terminal/bootstrap.py +61 -0
- autocoder/rag/terminal/command_handlers.py +653 -0
- autocoder/rag/terminal/formatters/__init__.py +20 -0
- autocoder/rag/terminal/formatters/base.py +70 -0
- autocoder/rag/terminal/formatters/json_format.py +66 -0
- autocoder/rag/terminal/formatters/stream_json.py +95 -0
- autocoder/rag/terminal/formatters/text.py +28 -0
- autocoder/rag/terminal/init.py +120 -0
- autocoder/rag/terminal/utils.py +106 -0
- autocoder/rag/test_agentic_rag.py +389 -0
- autocoder/rag/test_doc_filter.py +3 -3
- autocoder/rag/test_long_context_rag.py +1 -1
- autocoder/rag/test_token_limiter.py +517 -10
- autocoder/rag/token_counter.py +3 -0
- autocoder/rag/token_limiter.py +19 -15
- autocoder/rag/tools/__init__.py +26 -2
- autocoder/rag/tools/bochaai_example.py +343 -0
- autocoder/rag/tools/bochaai_sdk.py +541 -0
- autocoder/rag/tools/metaso_example.py +268 -0
- autocoder/rag/tools/metaso_sdk.py +417 -0
- autocoder/rag/tools/recall_tool.py +28 -7
- autocoder/rag/tools/run_integration_tests.py +204 -0
- autocoder/rag/tools/test_all_providers.py +318 -0
- autocoder/rag/tools/test_bochaai_integration.py +482 -0
- autocoder/rag/tools/test_final_integration.py +215 -0
- autocoder/rag/tools/test_metaso_integration.py +424 -0
- autocoder/rag/tools/test_metaso_real.py +171 -0
- autocoder/rag/tools/test_web_crawl_tool.py +639 -0
- autocoder/rag/tools/test_web_search_tool.py +509 -0
- autocoder/rag/tools/todo_read_tool.py +202 -0
- autocoder/rag/tools/todo_write_tool.py +412 -0
- autocoder/rag/tools/web_crawl_tool.py +634 -0
- autocoder/rag/tools/web_search_tool.py +558 -0
- autocoder/rag/tools/web_tools_example.py +119 -0
- autocoder/rag/types.py +16 -0
- autocoder/rag/variable_holder.py +4 -2
- autocoder/rags.py +86 -79
- autocoder/regexproject/__init__.py +23 -21
- autocoder/run_context.py +9 -0
- autocoder/sdk/__init__.py +50 -161
- autocoder/sdk/api.py +370 -0
- autocoder/sdk/async_runner/__init__.py +26 -0
- autocoder/sdk/async_runner/async_executor.py +650 -0
- autocoder/sdk/async_runner/async_handler.py +356 -0
- autocoder/sdk/async_runner/markdown_processor.py +595 -0
- autocoder/sdk/async_runner/task_metadata.py +284 -0
- autocoder/sdk/async_runner/worktree_manager.py +438 -0
- autocoder/sdk/cli/__init__.py +2 -5
- autocoder/sdk/cli/formatters.py +28 -204
- autocoder/sdk/cli/handlers.py +77 -44
- autocoder/sdk/cli/main.py +158 -170
- autocoder/sdk/cli/options.py +95 -22
- autocoder/sdk/constants.py +139 -51
- autocoder/sdk/core/auto_coder_core.py +484 -267
- autocoder/sdk/core/bridge.py +298 -118
- autocoder/sdk/exceptions.py +18 -12
- autocoder/sdk/formatters/__init__.py +19 -0
- autocoder/sdk/formatters/input.py +64 -0
- autocoder/sdk/formatters/output.py +247 -0
- autocoder/sdk/formatters/stream.py +54 -0
- autocoder/sdk/models/__init__.py +6 -5
- autocoder/sdk/models/options.py +55 -18
- autocoder/sdk/utils/formatters.py +27 -195
- autocoder/suffixproject/__init__.py +28 -25
- autocoder/terminal/__init__.py +14 -0
- autocoder/terminal/app.py +454 -0
- autocoder/terminal/args.py +32 -0
- autocoder/terminal/bootstrap.py +178 -0
- autocoder/terminal/command_processor.py +521 -0
- autocoder/terminal/command_registry.py +57 -0
- autocoder/terminal/help.py +97 -0
- autocoder/terminal/tasks/__init__.py +5 -0
- autocoder/terminal/tasks/background.py +77 -0
- autocoder/terminal/tasks/task_event.py +70 -0
- autocoder/terminal/ui/__init__.py +13 -0
- autocoder/terminal/ui/completer.py +268 -0
- autocoder/terminal/ui/keybindings.py +75 -0
- autocoder/terminal/ui/session.py +41 -0
- autocoder/terminal/ui/toolbar.py +64 -0
- autocoder/terminal/utils/__init__.py +13 -0
- autocoder/terminal/utils/errors.py +18 -0
- autocoder/terminal/utils/paths.py +19 -0
- autocoder/terminal/utils/shell.py +43 -0
- autocoder/terminal_v3/__init__.py +10 -0
- autocoder/terminal_v3/app.py +201 -0
- autocoder/terminal_v3/handlers/__init__.py +5 -0
- autocoder/terminal_v3/handlers/command_handler.py +131 -0
- autocoder/terminal_v3/models/__init__.py +6 -0
- autocoder/terminal_v3/models/conversation_buffer.py +214 -0
- autocoder/terminal_v3/models/message.py +50 -0
- autocoder/terminal_v3/models/tool_display.py +247 -0
- autocoder/terminal_v3/ui/__init__.py +7 -0
- autocoder/terminal_v3/ui/keybindings.py +56 -0
- autocoder/terminal_v3/ui/layout.py +141 -0
- autocoder/terminal_v3/ui/styles.py +43 -0
- autocoder/tsproject/__init__.py +23 -23
- autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
- autocoder/utils/llms.py +88 -80
- autocoder/utils/math_utils.py +101 -0
- autocoder/utils/model_provider_selector.py +16 -4
- autocoder/utils/operate_config_api.py +33 -5
- autocoder/utils/thread_utils.py +2 -2
- autocoder/version.py +4 -2
- autocoder/workflow_agents/__init__.py +84 -0
- autocoder/workflow_agents/agent.py +143 -0
- autocoder/workflow_agents/exceptions.py +573 -0
- autocoder/workflow_agents/executor.py +489 -0
- autocoder/workflow_agents/loader.py +737 -0
- autocoder/workflow_agents/runner.py +267 -0
- autocoder/workflow_agents/types.py +172 -0
- autocoder/workflow_agents/utils.py +434 -0
- autocoder/workflow_agents/workflow_manager.py +211 -0
- auto_coder-0.1.400.dist-info/METADATA +0 -396
- auto_coder-0.1.400.dist-info/RECORD +0 -425
- auto_coder-0.1.400.dist-info/licenses/LICENSE +0 -201
- autocoder/auto_coder_server.py +0 -672
- autocoder/benchmark.py +0 -138
- autocoder/common/ac_style_command_parser/example.py +0 -7
- autocoder/common/cleaner.py +0 -31
- autocoder/common/command_completer_v2.py +0 -615
- autocoder/common/directory_cache/__init__.py +0 -1
- autocoder/common/directory_cache/cache.py +0 -192
- autocoder/common/directory_cache/test_cache.py +0 -190
- autocoder/common/file_checkpoint/examples.py +0 -217
- autocoder/common/llm_friendly_package_example.py +0 -138
- autocoder/common/llm_friendly_package_test.py +0 -63
- autocoder/common/pull_requests/test_module.py +0 -1
- autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
- autocoder/common/text.py +0 -30
- autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
- autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
- autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
- autocoder/common/v2/agent/agentic_tool_display.py +0 -183
- autocoder/plugins/dynamic_completion_example.py +0 -148
- autocoder/plugins/sample_plugin.py +0 -160
- autocoder/sdk/cli/__main__.py +0 -26
- autocoder/sdk/cli/completion_wrapper.py +0 -38
- autocoder/sdk/cli/install_completion.py +0 -301
- autocoder/sdk/models/messages.py +0 -209
- autocoder/sdk/session/__init__.py +0 -32
- autocoder/sdk/session/session.py +0 -106
- autocoder/sdk/session/session_manager.py +0 -56
- {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
- /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Sample plugin demonstrating the plugin system functionality.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from typing import Any, Callable, Dict, List, Optional, Tuple
|
|
6
|
-
|
|
7
|
-
from prompt_toolkit.key_binding import KeyBindings
|
|
8
|
-
from prompt_toolkit.formatted_text import FormattedText
|
|
9
|
-
|
|
10
|
-
from autocoder.plugins import Plugin, PluginManager
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class SamplePlugin(Plugin):
|
|
14
|
-
"""A sample plugin demonstrating the plugin system functionality."""
|
|
15
|
-
|
|
16
|
-
name = "sample_plugin"
|
|
17
|
-
description = "A sample plugin demonstrating the plugin system features"
|
|
18
|
-
version = "0.1.0"
|
|
19
|
-
|
|
20
|
-
def __init__(self, manager: PluginManager, config: Optional[Dict[str, Any]] = None, config_path: Optional[str] = None):
|
|
21
|
-
"""Initialize the sample plugin."""
|
|
22
|
-
super().__init__(manager, config, config_path)
|
|
23
|
-
self.counter = 0
|
|
24
|
-
|
|
25
|
-
def initialize(self) -> bool:
|
|
26
|
-
"""Initialize the plugin.
|
|
27
|
-
|
|
28
|
-
Returns:
|
|
29
|
-
True if initialization was successful
|
|
30
|
-
"""
|
|
31
|
-
print(f"[{self.name}] Initializing sample plugin")
|
|
32
|
-
|
|
33
|
-
# Register interest in intercepting functions
|
|
34
|
-
self.manager.register_function_interception(self.name, "ask")
|
|
35
|
-
self.manager.register_function_interception(self.name, "coding")
|
|
36
|
-
|
|
37
|
-
return True
|
|
38
|
-
|
|
39
|
-
def get_commands(self) -> Dict[str, Tuple[Callable, str]]:
|
|
40
|
-
"""Get commands provided by this plugin.
|
|
41
|
-
|
|
42
|
-
Returns:
|
|
43
|
-
A dictionary of command name to handler and description
|
|
44
|
-
"""
|
|
45
|
-
return {
|
|
46
|
-
"sample": (self.sample_command, "Sample plugin command"),
|
|
47
|
-
"counter": (self.counter_command, "Show the plugin counter"),
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
def get_keybindings(self) -> List[Tuple[str, Callable, str]]:
|
|
51
|
-
"""Get keybindings provided by this plugin.
|
|
52
|
-
|
|
53
|
-
Returns:
|
|
54
|
-
A list of (key_combination, handler, description) tuples
|
|
55
|
-
"""
|
|
56
|
-
|
|
57
|
-
def increment_counter(event):
|
|
58
|
-
self.counter += 1
|
|
59
|
-
print(f"[{self.name}] Counter incremented to {self.counter}")
|
|
60
|
-
|
|
61
|
-
return [
|
|
62
|
-
("c-p", increment_counter, "Increment plugin counter"),
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
def get_completions(self) -> Dict[str, List[str]]:
|
|
66
|
-
"""Get completions provided by this plugin.
|
|
67
|
-
|
|
68
|
-
Returns:
|
|
69
|
-
A dictionary mapping command prefixes to completion options
|
|
70
|
-
"""
|
|
71
|
-
return {
|
|
72
|
-
"/sample": ["option1", "option2", "option3"],
|
|
73
|
-
"/counter": ["show", "reset", "increment"],
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
def sample_command(self, args: str) -> None:
|
|
77
|
-
"""Handle the sample command.
|
|
78
|
-
|
|
79
|
-
Args:
|
|
80
|
-
args: Command arguments
|
|
81
|
-
"""
|
|
82
|
-
print(f"[{self.name}] Sample command executed with args: {args}")
|
|
83
|
-
self.counter += 1
|
|
84
|
-
print(f"[{self.name}] Counter incremented to {self.counter}")
|
|
85
|
-
|
|
86
|
-
def counter_command(self, args: str) -> None:
|
|
87
|
-
"""Handle the counter command.
|
|
88
|
-
|
|
89
|
-
Args:
|
|
90
|
-
args: Command arguments
|
|
91
|
-
"""
|
|
92
|
-
if args == "reset":
|
|
93
|
-
self.counter = 0
|
|
94
|
-
print(f"[{self.name}] Counter reset to {self.counter}")
|
|
95
|
-
elif args == "increment":
|
|
96
|
-
self.counter += 1
|
|
97
|
-
print(f"[{self.name}] Counter incremented to {self.counter}")
|
|
98
|
-
else:
|
|
99
|
-
print(f"[{self.name}] Current counter value: {self.counter}")
|
|
100
|
-
|
|
101
|
-
def intercept_command(
|
|
102
|
-
self, command: str, args: str
|
|
103
|
-
) -> Tuple[bool, Optional[str], Optional[str]]:
|
|
104
|
-
"""Intercept commands.
|
|
105
|
-
|
|
106
|
-
Args:
|
|
107
|
-
command: The command name (without the /)
|
|
108
|
-
args: The command arguments
|
|
109
|
-
|
|
110
|
-
Returns:
|
|
111
|
-
A tuple of (should_continue, modified_command, modified_args)
|
|
112
|
-
"""
|
|
113
|
-
# Log all commands
|
|
114
|
-
print(f"[{self.name}] Command intercepted: /{command} {args}")
|
|
115
|
-
|
|
116
|
-
# Example: modify the 'ask' command to add a prefix
|
|
117
|
-
if command == "ask" and args:
|
|
118
|
-
return True, command, f"[From Sample Plugin] {args}"
|
|
119
|
-
|
|
120
|
-
return True, command, args
|
|
121
|
-
|
|
122
|
-
def intercept_function(
|
|
123
|
-
self, func_name: str, args: List[Any], kwargs: Dict[str, Any]
|
|
124
|
-
) -> Tuple[bool, List[Any], Dict[str, Any]]:
|
|
125
|
-
"""Intercept function calls.
|
|
126
|
-
|
|
127
|
-
Args:
|
|
128
|
-
func_name: The function name
|
|
129
|
-
args: The positional arguments
|
|
130
|
-
kwargs: The keyword arguments
|
|
131
|
-
|
|
132
|
-
Returns:
|
|
133
|
-
A tuple of (should_continue, modified_args, modified_kwargs)
|
|
134
|
-
"""
|
|
135
|
-
print(f"[{self.name}] Function intercepted: {func_name}")
|
|
136
|
-
|
|
137
|
-
# Example: modify the 'coding' function to add a prefix to the query
|
|
138
|
-
if func_name == "coding" and args:
|
|
139
|
-
args = list(args) # Convert tuple to list for modification
|
|
140
|
-
if isinstance(args[0], str):
|
|
141
|
-
args[0] = f"[Enhanced by Sample Plugin] {args[0]}"
|
|
142
|
-
|
|
143
|
-
return True, args, kwargs
|
|
144
|
-
|
|
145
|
-
def post_function(self, func_name: str, result: Any) -> Any:
|
|
146
|
-
"""Process function results.
|
|
147
|
-
|
|
148
|
-
Args:
|
|
149
|
-
func_name: The function name
|
|
150
|
-
result: The function result
|
|
151
|
-
|
|
152
|
-
Returns:
|
|
153
|
-
The possibly modified result
|
|
154
|
-
"""
|
|
155
|
-
print(f"[{self.name}] Function completed: {func_name}")
|
|
156
|
-
return result
|
|
157
|
-
|
|
158
|
-
def shutdown(self) -> None:
|
|
159
|
-
"""Shutdown the plugin."""
|
|
160
|
-
print(f"[{self.name}] Shutting down sample plugin (counter: {self.counter})")
|
autocoder/sdk/cli/__main__.py
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
CLI 模块主入口点
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
import sys
|
|
7
|
-
import argparse
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
def main():
|
|
11
|
-
"""主入口点,路由到不同的 CLI 功能"""
|
|
12
|
-
|
|
13
|
-
# 检查是否是自动补全相关的命令
|
|
14
|
-
if len(sys.argv) > 1 and sys.argv[1] in ["install", "uninstall", "test"]:
|
|
15
|
-
# 路由到自动补全安装工具
|
|
16
|
-
from .install_completion import main as install_main
|
|
17
|
-
install_main()
|
|
18
|
-
return
|
|
19
|
-
|
|
20
|
-
# 默认显示自动补全工具的帮助
|
|
21
|
-
from .install_completion import main as install_main
|
|
22
|
-
install_main()
|
|
23
|
-
|
|
24
|
-
if __name__ == "__main__":
|
|
25
|
-
main()
|
|
26
|
-
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
#!/usr/bin/env python3
|
|
4
|
-
"""
|
|
5
|
-
Auto-Coder CLI 自动补全包装器
|
|
6
|
-
|
|
7
|
-
提供一个独立的补全脚本,不依赖于特定的 shell 环境
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
import sys
|
|
11
|
-
import os
|
|
12
|
-
|
|
13
|
-
def main():
|
|
14
|
-
"""主函数,处理自动补全请求"""
|
|
15
|
-
try:
|
|
16
|
-
# 设置环境变量以启用 argcomplete
|
|
17
|
-
os.environ.setdefault('_ARGCOMPLETE_COMPLETE', 'complete')
|
|
18
|
-
|
|
19
|
-
# 导入并运行 CLI
|
|
20
|
-
from autocoder.sdk.cli.main import AutoCoderCLI
|
|
21
|
-
|
|
22
|
-
# 模拟 auto-coder.run 命令
|
|
23
|
-
sys.argv[0] = 'auto-coder.run'
|
|
24
|
-
|
|
25
|
-
# 解析参数(这会触发自动补全)
|
|
26
|
-
AutoCoderCLI.parse_args()
|
|
27
|
-
|
|
28
|
-
except SystemExit:
|
|
29
|
-
# argcomplete 会调用 sys.exit,这是正常的
|
|
30
|
-
pass
|
|
31
|
-
except Exception as e:
|
|
32
|
-
# 在补全过程中出现错误,静默处理
|
|
33
|
-
pass
|
|
34
|
-
|
|
35
|
-
if __name__ == '__main__':
|
|
36
|
-
main()
|
|
37
|
-
|
|
38
|
-
|
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#!/usr/bin/env python3
|
|
3
|
-
"""
|
|
4
|
-
Auto-Coder CLI 自动补全安装脚本
|
|
5
|
-
|
|
6
|
-
该脚本帮助用户在不同的 shell 环境中安装 auto-coder.run 命令的自动补全功能。
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import os
|
|
10
|
-
import sys
|
|
11
|
-
import subprocess
|
|
12
|
-
from pathlib import Path
|
|
13
|
-
from typing import Optional
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class CompletionInstaller:
|
|
17
|
-
"""自动补全安装器"""
|
|
18
|
-
|
|
19
|
-
def __init__(self):
|
|
20
|
-
self.shell = self._detect_shell()
|
|
21
|
-
self.home_dir = Path.home()
|
|
22
|
-
|
|
23
|
-
def _detect_shell(self) -> str:
|
|
24
|
-
"""检测当前使用的 shell"""
|
|
25
|
-
shell = os.environ.get('SHELL', '')
|
|
26
|
-
if 'bash' in shell:
|
|
27
|
-
return 'bash'
|
|
28
|
-
elif 'zsh' in shell:
|
|
29
|
-
return 'zsh'
|
|
30
|
-
elif 'fish' in shell:
|
|
31
|
-
return 'fish'
|
|
32
|
-
else:
|
|
33
|
-
return 'unknown'
|
|
34
|
-
|
|
35
|
-
def _get_completion_script(self, shell: str) -> str:
|
|
36
|
-
"""获取对应 shell 的补全脚本"""
|
|
37
|
-
# 获取当前 Python 环境的路径
|
|
38
|
-
python_path = sys.executable
|
|
39
|
-
register_cmd_path = os.path.join(os.path.dirname(python_path), 'register-python-argcomplete')
|
|
40
|
-
|
|
41
|
-
# 检查 register-python-argcomplete 是否存在
|
|
42
|
-
if not os.path.exists(register_cmd_path):
|
|
43
|
-
# 如果不存在,提供一个简化的解决方案
|
|
44
|
-
return self._get_simple_completion_script(shell)
|
|
45
|
-
|
|
46
|
-
if shell == 'bash':
|
|
47
|
-
return f'''# Auto-Coder CLI 自动补全
|
|
48
|
-
eval "$({register_cmd_path} auto-coder.run 2>/dev/null || echo '')"'''
|
|
49
|
-
elif shell == 'zsh':
|
|
50
|
-
return f'''# Auto-Coder CLI 自动补全
|
|
51
|
-
# 检查是否在 zsh 环境中
|
|
52
|
-
if [[ -n "$ZSH_VERSION" ]]; then
|
|
53
|
-
autoload -U +X bashcompinit && bashcompinit 2>/dev/null
|
|
54
|
-
fi
|
|
55
|
-
eval "$({register_cmd_path} auto-coder.run 2>/dev/null || echo '')"'''
|
|
56
|
-
elif shell == 'fish':
|
|
57
|
-
return f'''# Auto-Coder CLI 自动补全
|
|
58
|
-
{register_cmd_path} --shell fish auto-coder.run 2>/dev/null | source'''
|
|
59
|
-
else:
|
|
60
|
-
return ''
|
|
61
|
-
|
|
62
|
-
def _get_simple_completion_script(self, shell: str) -> str:
|
|
63
|
-
"""获取简化的补全脚本(当 register-python-argcomplete 不可用时)"""
|
|
64
|
-
python_path = sys.executable
|
|
65
|
-
|
|
66
|
-
if shell in ['bash', 'zsh']:
|
|
67
|
-
return f'''# Auto-Coder CLI 自动补全(简化版本)
|
|
68
|
-
# 注意:需要安装 argcomplete 包才能使用完整功能
|
|
69
|
-
_auto_coder_run_completion() {{
|
|
70
|
-
local cur prev opts
|
|
71
|
-
COMPREPLY=()
|
|
72
|
-
cur="${{COMP_WORDS[COMP_CWORD]}}"
|
|
73
|
-
prev="${{COMP_WORDS[COMP_CWORD-1]}}"
|
|
74
|
-
|
|
75
|
-
opts="-h --help -p --print -c --continue -r --resume --output-format --input-format -v --verbose --max-turns --system-prompt --allowed-tools --permission-mode"
|
|
76
|
-
|
|
77
|
-
case "${{prev}}" in
|
|
78
|
-
--allowed-tools)
|
|
79
|
-
COMPREPLY=( $(compgen -W "execute_command read_file write_to_file replace_in_file search_files list_files list_code_definition_names ask_followup_question attempt_completion list_package_info mcp_tool rag_tool" -- ${{cur}}) )
|
|
80
|
-
return 0
|
|
81
|
-
;;
|
|
82
|
-
--output-format|--input-format)
|
|
83
|
-
COMPREPLY=( $(compgen -W "text json stream-json" -- ${{cur}}) )
|
|
84
|
-
return 0
|
|
85
|
-
;;
|
|
86
|
-
--permission-mode)
|
|
87
|
-
COMPREPLY=( $(compgen -W "manual acceptEdits" -- ${{cur}}) )
|
|
88
|
-
return 0
|
|
89
|
-
;;
|
|
90
|
-
esac
|
|
91
|
-
|
|
92
|
-
COMPREPLY=( $(compgen -W "${{opts}}" -- ${{cur}}) )
|
|
93
|
-
}}
|
|
94
|
-
complete -F _auto_coder_run_completion auto-coder.run'''
|
|
95
|
-
else:
|
|
96
|
-
return ''
|
|
97
|
-
|
|
98
|
-
def _get_config_file(self, shell: str) -> Optional[Path]:
|
|
99
|
-
"""获取对应 shell 的配置文件路径"""
|
|
100
|
-
if shell == 'bash':
|
|
101
|
-
# 按优先级检查 bash 配置文件
|
|
102
|
-
candidates = ['.bashrc', '.bash_profile', '.profile']
|
|
103
|
-
for candidate in candidates:
|
|
104
|
-
config_file = self.home_dir / candidate
|
|
105
|
-
if config_file.exists():
|
|
106
|
-
return config_file
|
|
107
|
-
# 如果都不存在,默认使用 .bashrc
|
|
108
|
-
return self.home_dir / '.bashrc'
|
|
109
|
-
elif shell == 'zsh':
|
|
110
|
-
return self.home_dir / '.zshrc'
|
|
111
|
-
elif shell == 'fish':
|
|
112
|
-
config_dir = self.home_dir / '.config' / 'fish'
|
|
113
|
-
config_dir.mkdir(parents=True, exist_ok=True)
|
|
114
|
-
return config_dir / 'config.fish'
|
|
115
|
-
else:
|
|
116
|
-
return None
|
|
117
|
-
|
|
118
|
-
def check_argcomplete_installed(self) -> bool:
|
|
119
|
-
"""检查 argcomplete 是否已安装"""
|
|
120
|
-
try:
|
|
121
|
-
import argcomplete
|
|
122
|
-
return True
|
|
123
|
-
except ImportError:
|
|
124
|
-
return False
|
|
125
|
-
|
|
126
|
-
def check_register_command_available(self) -> bool:
|
|
127
|
-
"""检查 register-python-argcomplete 命令是否可用"""
|
|
128
|
-
try:
|
|
129
|
-
result = subprocess.run(['register-python-argcomplete', '--help'],
|
|
130
|
-
capture_output=True, text=True)
|
|
131
|
-
return result.returncode == 0
|
|
132
|
-
except FileNotFoundError:
|
|
133
|
-
return False
|
|
134
|
-
|
|
135
|
-
def install_completion(self, force: bool = False) -> bool:
|
|
136
|
-
"""安装自动补全功能"""
|
|
137
|
-
print(f"检测到的 shell: {self.shell}")
|
|
138
|
-
|
|
139
|
-
# 检查依赖
|
|
140
|
-
if not self.check_argcomplete_installed():
|
|
141
|
-
print("错误: argcomplete 包未安装")
|
|
142
|
-
print("请运行: pip install argcomplete")
|
|
143
|
-
return False
|
|
144
|
-
|
|
145
|
-
if not self.check_register_command_available():
|
|
146
|
-
print("错误: register-python-argcomplete 命令不可用")
|
|
147
|
-
print("请确保 argcomplete 正确安装并在 PATH 中")
|
|
148
|
-
return False
|
|
149
|
-
|
|
150
|
-
if self.shell == 'unknown':
|
|
151
|
-
print("错误: 无法检测到支持的 shell")
|
|
152
|
-
print("支持的 shell: bash, zsh, fish")
|
|
153
|
-
return False
|
|
154
|
-
|
|
155
|
-
config_file = self._get_config_file(self.shell)
|
|
156
|
-
if not config_file:
|
|
157
|
-
print(f"错误: 无法确定 {self.shell} 的配置文件")
|
|
158
|
-
return False
|
|
159
|
-
|
|
160
|
-
completion_script = self._get_completion_script(self.shell)
|
|
161
|
-
if not completion_script:
|
|
162
|
-
print(f"错误: 不支持的 shell: {self.shell}")
|
|
163
|
-
return False
|
|
164
|
-
|
|
165
|
-
# 检查是否已经安装
|
|
166
|
-
if config_file.exists():
|
|
167
|
-
content = config_file.read_text()
|
|
168
|
-
if 'auto-coder.run' in content and not force:
|
|
169
|
-
print(f"自动补全似乎已经安装在 {config_file}")
|
|
170
|
-
print("使用 --force 参数强制重新安装")
|
|
171
|
-
return True
|
|
172
|
-
|
|
173
|
-
# 添加补全脚本到配置文件
|
|
174
|
-
try:
|
|
175
|
-
with open(config_file, 'a') as f:
|
|
176
|
-
f.write(f'\n# Auto-Coder CLI 自动补全\n')
|
|
177
|
-
f.write(f'{completion_script}\n')
|
|
178
|
-
|
|
179
|
-
print(f"✓ 自动补全已安装到 {config_file}")
|
|
180
|
-
print(f"请重新加载 shell 配置或运行: source {config_file}")
|
|
181
|
-
return True
|
|
182
|
-
|
|
183
|
-
except Exception as e:
|
|
184
|
-
print(f"错误: 无法写入配置文件 {config_file}: {e}")
|
|
185
|
-
return False
|
|
186
|
-
|
|
187
|
-
def uninstall_completion(self) -> bool:
|
|
188
|
-
"""卸载自动补全功能"""
|
|
189
|
-
config_file = self._get_config_file(self.shell)
|
|
190
|
-
if not config_file or not config_file.exists():
|
|
191
|
-
print("未找到配置文件或自动补全未安装")
|
|
192
|
-
return True
|
|
193
|
-
|
|
194
|
-
try:
|
|
195
|
-
lines = config_file.read_text().splitlines()
|
|
196
|
-
new_lines = []
|
|
197
|
-
skip_next = False
|
|
198
|
-
|
|
199
|
-
for line in lines:
|
|
200
|
-
if '# Auto-Coder CLI 自动补全' in line:
|
|
201
|
-
skip_next = True
|
|
202
|
-
continue
|
|
203
|
-
elif skip_next and 'auto-coder.run' in line:
|
|
204
|
-
skip_next = False
|
|
205
|
-
continue
|
|
206
|
-
else:
|
|
207
|
-
skip_next = False
|
|
208
|
-
new_lines.append(line)
|
|
209
|
-
|
|
210
|
-
config_file.write_text('\n'.join(new_lines))
|
|
211
|
-
print(f"✓ 自动补全已从 {config_file} 中移除")
|
|
212
|
-
return True
|
|
213
|
-
|
|
214
|
-
except Exception as e:
|
|
215
|
-
print(f"错误: 无法修改配置文件 {config_file}: {e}")
|
|
216
|
-
return False
|
|
217
|
-
|
|
218
|
-
def test_completion(self) -> bool:
|
|
219
|
-
"""测试自动补全是否工作"""
|
|
220
|
-
print("测试自动补全功能...")
|
|
221
|
-
try:
|
|
222
|
-
# 尝试获取补全建议
|
|
223
|
-
result = subprocess.run([
|
|
224
|
-
'python', '-c',
|
|
225
|
-
'import argcomplete; from autocoder.sdk.cli.main import AutoCoderCLI; '
|
|
226
|
-
'parser = AutoCoderCLI.parse_args.__func__(AutoCoderCLI, []); '
|
|
227
|
-
'print("自动补全功能正常")'
|
|
228
|
-
], capture_output=True, text=True, timeout=5)
|
|
229
|
-
|
|
230
|
-
if result.returncode == 0:
|
|
231
|
-
print("✓ 自动补全功能测试通过")
|
|
232
|
-
return True
|
|
233
|
-
else:
|
|
234
|
-
print(f"✗ 自动补全功能测试失败: {result.stderr}")
|
|
235
|
-
return False
|
|
236
|
-
|
|
237
|
-
except Exception as e:
|
|
238
|
-
print(f"✗ 自动补全功能测试失败: {e}")
|
|
239
|
-
return False
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
def main():
|
|
243
|
-
"""主函数"""
|
|
244
|
-
import argparse
|
|
245
|
-
|
|
246
|
-
parser = argparse.ArgumentParser(
|
|
247
|
-
description="Auto-Coder CLI 自动补全安装工具",
|
|
248
|
-
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
249
|
-
epilog="""
|
|
250
|
-
使用示例:
|
|
251
|
-
# 安装自动补全
|
|
252
|
-
python -m autocoder.sdk.cli.install_completion install
|
|
253
|
-
|
|
254
|
-
# 强制重新安装
|
|
255
|
-
python -m autocoder.sdk.cli.install_completion install --force
|
|
256
|
-
|
|
257
|
-
# 卸载自动补全
|
|
258
|
-
python -m autocoder.sdk.cli.install_completion uninstall
|
|
259
|
-
|
|
260
|
-
# 测试自动补全
|
|
261
|
-
python -m autocoder.sdk.cli.install_completion test
|
|
262
|
-
"""
|
|
263
|
-
)
|
|
264
|
-
|
|
265
|
-
subparsers = parser.add_subparsers(dest='command', help='可用命令')
|
|
266
|
-
|
|
267
|
-
# 安装命令
|
|
268
|
-
install_parser = subparsers.add_parser('install', help='安装自动补全')
|
|
269
|
-
install_parser.add_argument('--force', action='store_true', help='强制重新安装')
|
|
270
|
-
|
|
271
|
-
# 卸载命令
|
|
272
|
-
subparsers.add_parser('uninstall', help='卸载自动补全')
|
|
273
|
-
|
|
274
|
-
# 测试命令
|
|
275
|
-
subparsers.add_parser('test', help='测试自动补全功能')
|
|
276
|
-
|
|
277
|
-
args = parser.parse_args()
|
|
278
|
-
|
|
279
|
-
if not args.command:
|
|
280
|
-
parser.print_help()
|
|
281
|
-
return 1
|
|
282
|
-
|
|
283
|
-
installer = CompletionInstaller()
|
|
284
|
-
|
|
285
|
-
if args.command == 'install':
|
|
286
|
-
success = installer.install_completion(force=args.force)
|
|
287
|
-
return 0 if success else 1
|
|
288
|
-
elif args.command == 'uninstall':
|
|
289
|
-
success = installer.uninstall_completion()
|
|
290
|
-
return 0 if success else 1
|
|
291
|
-
elif args.command == 'test':
|
|
292
|
-
success = installer.test_completion()
|
|
293
|
-
return 0 if success else 1
|
|
294
|
-
else:
|
|
295
|
-
parser.print_help()
|
|
296
|
-
return 1
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
if __name__ == '__main__':
|
|
300
|
-
sys.exit(main())
|
|
301
|
-
|