auto-coder 0.1.373__tar.gz → 0.1.374__tar.gz
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-0.1.373 → auto_coder-0.1.374}/PKG-INFO +1 -1
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/auto_coder.egg-info/PKG-INFO +1 -1
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +47 -141
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +47 -102
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/index.py +1 -1
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/linter_factory.py +4 -1
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/normal_linter.py +2 -4
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/python_linter.py +18 -115
- auto_coder-0.1.374/src/autocoder/version.py +2 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_planner.py +0 -3
- auto_coder-0.1.373/src/autocoder/version.py +0 -2
- {auto_coder-0.1.373 → auto_coder-0.1.374}/LICENSE +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/README.md +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/setup.cfg +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/setup.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/auto_coder.egg-info/SOURCES.txt +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/auto_coder.egg-info/dependency_links.txt +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/auto_coder.egg-info/entry_points.txt +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/auto_coder.egg-info/requires.txt +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/auto_coder.egg-info/top_level.txt +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/agentic_filter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/auto_demand_organizer.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/auto_filegroup.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/auto_guess_query.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/auto_learn.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/auto_review_commit.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/auto_tool.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/agent_hub.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/agentic_lang.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/agentic_tool_display.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/base_agent.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/default_tools.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/test_base_agent.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tool_registry.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/base_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/example_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/base_agentic/utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/coder.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/designer.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/planner.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/agent/project_reader.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/auto_coder.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/auto_coder_rag.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/auto_coder_runner.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/auto_coder_server.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/benchmark.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/chat/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/chat/conf_command.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/chat/models_command.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/chat/rules_command.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/chat_auto_coder.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/chat_auto_coder_lang.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/command_args.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/command_parser.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/commands/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/commands/auto_command.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/commands/auto_web.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/commands/tools.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/JupyterClient.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/ShellClient.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/action_yml_file_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/anything2images.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/anything2img.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/audio.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/auto_coder_lang.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/auto_configure.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/buildin_tokenizer.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/chunk_validation.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/cleaner.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_execute.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_generate.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_generate_diff.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_merge.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/code_modification_ranker.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_completer.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_completer_v2.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_file_manager/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_file_manager/examples.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_file_manager/manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_file_manager/models.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_file_manager/utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_generator.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/command_templates.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/computer_use.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/conf_import_export.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/conf_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/conf_validator.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/const.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/context_pruner.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/conversation_pruner.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/conversations/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/conversations/compatibility.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/conversations/conversation_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/conversations/example.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/directory_cache/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/directory_cache/cache.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/directory_cache/test_cache.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/backup.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/conversation_checkpoint.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/examples.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/models.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/store.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/test_backup.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/test_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/test_models.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/test_store.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/test_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_checkpoint/utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_monitor/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/file_monitor/monitor.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/files.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/git_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/global_cancel.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/ignorefiles/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/image_to_page.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/index_import_export.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/interpreter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/mcp_hub.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/mcp_server.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/mcp_server_install.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/mcp_server_types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/mcp_servers/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/mcp_tools.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/memory_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/model_speed_tester.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/openai_content.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/printer.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/recall_validation.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/result_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/rulefiles/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/rulefiles/autocoderrules_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/run_cmd.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/save_formatted_log.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/screenshots.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/search.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/search_replace.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/shells.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/stats_panel.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/stream_out_type.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/sys_prompt.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/test_run_cmd.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/text.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/token_cost_caculate.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/utils_code_auto_generate.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_edit_types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_auto_generate.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_auto_merge.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_diff_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/base_compiler.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/compiler_config_api.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/compiler_config_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/compiler_factory.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/java_compiler.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/models.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/normal_compiler.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/provided_compiler.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/python_compiler.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/reactjs_compiler.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/shadow_compiler.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/compilers/vue_compiler.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/data/byzerllm.md +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/data/tokenizer.json +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/db/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/db/store.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/dispacher/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/dispacher/actions/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/dispacher/actions/action.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/dispacher/actions/copilot.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/events/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/events/event_content.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/events/event_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/events/event_manager_singleton.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/events/event_store.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/events/event_types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/helper/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/helper/project_creator.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/helper/rag_doc_creator.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/entry.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/filter/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/filter/normal_filter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/filter/quick_filter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/for_command.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/symbols_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/index/types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/lang.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/base_linter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/models.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/reactjs_linter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/shadow_linter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/linters/vue_linter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/memory/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/memory/active_context_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/memory/active_package.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/memory/async_processor.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/memory/directory_mapper.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/models.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/plugins/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/plugins/git_helper_plugin.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/plugins/sample_plugin.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/plugins/token_helper_plugin.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/plugins/utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/privacy/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/privacy/model_filter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/pyproject/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/api_server.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/base_cache.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/cache/simple_cache.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/conversation_to_queries.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/doc_filter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/document_retriever.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/lang.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/llm_wrapper.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/loaders/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/loaders/docx_loader.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/loaders/excel_loader.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/loaders/filter_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/loaders/image_loader.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/long_context_rag.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/rag_config.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/rag_entry.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/raw_rag.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/relevant_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/searchable.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/stream_event/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/stream_event/event_writer.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/stream_event/types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/test_doc_filter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/test_long_context_rag.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/test_token_limiter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/token_checker.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/token_counter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/token_limiter.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/token_limiter_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/rag/variable_holder.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/regexproject/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/run_context.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/shadows/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/shadows/shadow_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/suffixproject/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/tsproject/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/_markitdown.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/auto_project_type.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/conversation_store.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/llm_client_interceptors.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/llms.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/log_capture.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/model_provider_selector.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/multi_turn.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/operate_config_api.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/print_table.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/project_structure.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/queue_communicate.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/request_event_queue.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/request_queue.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/rest.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/stream_thinking.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/thread_utils.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/src/autocoder/utils/types.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_action_regex_project.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_action_yml_file_manager.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_chat_auto_coder.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_command_completer.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_plugins.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_privacy.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_queue_communicate.py +0 -0
- {auto_coder-0.1.373 → auto_coder-0.1.374}/tests/test_symbols_utils.py +0 -0
|
@@ -7,6 +7,7 @@ from autocoder.common.v2.agent.agentic_edit_tools.base_tool_resolver import Base
|
|
|
7
7
|
from autocoder.common.v2.agent.agentic_edit_types import ReplaceInFileTool, ToolResult
|
|
8
8
|
from autocoder.common.file_checkpoint.models import FileChange as CheckpointFileChange
|
|
9
9
|
from autocoder.common.file_checkpoint.manager import FileChangeManager as CheckpointFileChangeManager
|
|
10
|
+
from autocoder.linters.models import IssueSeverity, FileLintResult
|
|
10
11
|
from loguru import logger
|
|
11
12
|
from autocoder.common.auto_coder_lang import get_message_with_format
|
|
12
13
|
if typing.TYPE_CHECKING:
|
|
@@ -62,7 +63,38 @@ class ReplaceInFileToolResolver(BaseToolResolver):
|
|
|
62
63
|
logger.warning(f"Could not parse any SEARCH/REPLACE blocks from diff: {diff_content}")
|
|
63
64
|
return blocks
|
|
64
65
|
|
|
65
|
-
def
|
|
66
|
+
def _filter_lint_issues(self, lint_result:FileLintResult, levels: List[IssueSeverity] = [IssueSeverity.ERROR, IssueSeverity.WARNING]):
|
|
67
|
+
"""
|
|
68
|
+
过滤 lint 结果,只保留指定级别的问题
|
|
69
|
+
|
|
70
|
+
参数:
|
|
71
|
+
lint_result: 单个文件的 lint 结果对象
|
|
72
|
+
levels: 要保留的问题级别列表,默认保留 ERROR 和 WARNING 级别
|
|
73
|
+
|
|
74
|
+
返回:
|
|
75
|
+
过滤后的 lint 结果对象(原对象的副本)
|
|
76
|
+
"""
|
|
77
|
+
if not lint_result or not lint_result.issues:
|
|
78
|
+
return lint_result
|
|
79
|
+
|
|
80
|
+
# 创建一个新的 issues 列表,只包含指定级别的问题
|
|
81
|
+
filtered_issues = []
|
|
82
|
+
for issue in lint_result.issues:
|
|
83
|
+
if issue.severity in levels:
|
|
84
|
+
filtered_issues.append(issue)
|
|
85
|
+
|
|
86
|
+
# 更新 lint_result 的副本
|
|
87
|
+
filtered_result = lint_result
|
|
88
|
+
filtered_result.issues = filtered_issues
|
|
89
|
+
|
|
90
|
+
# 更新计数
|
|
91
|
+
filtered_result.error_count = sum(1 for issue in filtered_result.issues if issue.severity == IssueSeverity.ERROR)
|
|
92
|
+
filtered_result.warning_count = sum(1 for issue in filtered_result.issues if issue.severity == IssueSeverity.WARNING)
|
|
93
|
+
filtered_result.info_count = sum(1 for issue in filtered_result.issues if issue.severity == IssueSeverity.INFO)
|
|
94
|
+
|
|
95
|
+
return filtered_result
|
|
96
|
+
|
|
97
|
+
def _format_lint_issues(self, lint_result:FileLintResult):
|
|
66
98
|
"""
|
|
67
99
|
将 lint 结果格式化为可读的文本格式
|
|
68
100
|
|
|
@@ -86,130 +118,7 @@ class ReplaceInFileToolResolver(BaseToolResolver):
|
|
|
86
118
|
|
|
87
119
|
return "\n".join(formatted_issues)
|
|
88
120
|
|
|
89
|
-
|
|
90
|
-
"""Replace content in file using shadow manager for path translation"""
|
|
91
|
-
try:
|
|
92
|
-
# Determine target path: shadow file
|
|
93
|
-
target_path = self.shadow_manager.to_shadow_path(abs_file_path)
|
|
94
|
-
|
|
95
|
-
# Read original content
|
|
96
|
-
if os.path.exists(target_path) and os.path.isfile(target_path):
|
|
97
|
-
with open(target_path, 'r', encoding='utf-8', errors='replace') as f:
|
|
98
|
-
original_content = f.read()
|
|
99
|
-
elif os.path.exists(abs_file_path) and os.path.isfile(abs_file_path):
|
|
100
|
-
# If shadow doesn't exist, but original exists, read original content
|
|
101
|
-
with open(abs_file_path, 'r', encoding='utf-8', errors='replace') as f:
|
|
102
|
-
original_content = f.read()
|
|
103
|
-
# create parent dirs of shadow if needed
|
|
104
|
-
os.makedirs(os.path.dirname(target_path), exist_ok=True)
|
|
105
|
-
# write original content into shadow file as baseline
|
|
106
|
-
with open(target_path, 'w', encoding='utf-8') as f:
|
|
107
|
-
f.write(original_content)
|
|
108
|
-
logger.info(f"[Shadow] Initialized shadow file from original: {target_path}")
|
|
109
|
-
else:
|
|
110
|
-
return ToolResult(success=False, message=get_message_with_format("replace_in_file.file_not_found", file_path=file_path))
|
|
111
|
-
|
|
112
|
-
parsed_blocks = self.parse_diff(diff_content)
|
|
113
|
-
if not parsed_blocks:
|
|
114
|
-
return ToolResult(success=False, message=get_message_with_format("replace_in_file.no_valid_blocks"))
|
|
115
|
-
|
|
116
|
-
current_content = original_content
|
|
117
|
-
applied_count = 0
|
|
118
|
-
errors = []
|
|
119
|
-
|
|
120
|
-
# Apply blocks sequentially
|
|
121
|
-
for i, (search_block, replace_block) in enumerate(parsed_blocks):
|
|
122
|
-
start_index = current_content.find(search_block)
|
|
123
|
-
|
|
124
|
-
if start_index != -1:
|
|
125
|
-
current_content = current_content[:start_index] + replace_block + current_content[start_index + len(search_block):]
|
|
126
|
-
applied_count += 1
|
|
127
|
-
logger.info(f"Applied SEARCH/REPLACE block {i+1} in file {file_path}")
|
|
128
|
-
else:
|
|
129
|
-
error_message = f"SEARCH block {i+1} not found in the current file content. Content to search:\n---\n{search_block}\n---"
|
|
130
|
-
logger.warning(error_message)
|
|
131
|
-
context_start = max(0, original_content.find(search_block[:20]) - 100)
|
|
132
|
-
context_end = min(len(original_content), context_start + 200 + len(search_block[:20]))
|
|
133
|
-
logger.warning(f"Approximate context in file:\n---\n{original_content[context_start:context_end]}\n---")
|
|
134
|
-
errors.append(error_message)
|
|
135
|
-
|
|
136
|
-
if applied_count == 0 and errors:
|
|
137
|
-
return ToolResult(success=False, message=get_message_with_format("replace_in_file.apply_failed", errors="\n".join(errors)))
|
|
138
|
-
|
|
139
|
-
# Write the modified content back to shadow file
|
|
140
|
-
os.makedirs(os.path.dirname(target_path), exist_ok=True)
|
|
141
|
-
with open(target_path, 'w', encoding='utf-8') as f:
|
|
142
|
-
f.write(current_content)
|
|
143
|
-
|
|
144
|
-
logger.info(f"Successfully applied {applied_count}/{len(parsed_blocks)} changes to shadow file: {file_path}")
|
|
145
|
-
|
|
146
|
-
# 新增:执行代码质量检查
|
|
147
|
-
lint_results = None
|
|
148
|
-
lint_message = ""
|
|
149
|
-
formatted_issues = ""
|
|
150
|
-
has_lint_issues = False
|
|
151
|
-
|
|
152
|
-
# 检查是否启用了Lint功能
|
|
153
|
-
enable_lint = self.args.enable_auto_fix_lint
|
|
154
|
-
|
|
155
|
-
if enable_lint:
|
|
156
|
-
try:
|
|
157
|
-
if self.shadow_linter and self.shadow_manager:
|
|
158
|
-
# 对修改后的文件进行 lint 检查
|
|
159
|
-
shadow_path = target_path # 已经是影子路径
|
|
160
|
-
lint_results = self.shadow_linter.lint_shadow_file(shadow_path)
|
|
161
|
-
|
|
162
|
-
if lint_results and lint_results.issues:
|
|
163
|
-
has_lint_issues = True
|
|
164
|
-
# 格式化 lint 问题
|
|
165
|
-
formatted_issues = self._format_lint_issues(lint_results)
|
|
166
|
-
lint_message = f"\n\n代码质量检查发现 {len(lint_results.issues)} 个问题:\n{formatted_issues}"
|
|
167
|
-
else:
|
|
168
|
-
lint_message = "\n\n代码质量检查通过,未发现问题。"
|
|
169
|
-
except Exception as e:
|
|
170
|
-
logger.error(f"Lint 检查失败: {str(e)}")
|
|
171
|
-
lint_message = "\n\n尝试进行代码质量检查时出错。"
|
|
172
|
-
else:
|
|
173
|
-
logger.info("代码质量检查已禁用")
|
|
174
|
-
|
|
175
|
-
# 构建包含 lint 结果的返回消息
|
|
176
|
-
if errors:
|
|
177
|
-
message = get_message_with_format("replace_in_file.apply_success_with_warnings",
|
|
178
|
-
applied=applied_count,
|
|
179
|
-
total=len(parsed_blocks),
|
|
180
|
-
file_path=file_path,
|
|
181
|
-
errors="\n".join(errors))
|
|
182
|
-
else:
|
|
183
|
-
message = get_message_with_format("replace_in_file.apply_success",
|
|
184
|
-
applied=applied_count,
|
|
185
|
-
total=len(parsed_blocks),
|
|
186
|
-
file_path=file_path)
|
|
187
|
-
|
|
188
|
-
# 将 lint 消息添加到结果中,如果启用了Lint
|
|
189
|
-
if enable_lint:
|
|
190
|
-
message += lint_message
|
|
191
|
-
|
|
192
|
-
# 变更跟踪,回调AgenticEdit
|
|
193
|
-
if self.agent:
|
|
194
|
-
rel_path = os.path.relpath(abs_file_path, abs_project_dir)
|
|
195
|
-
self.agent.record_file_change(rel_path, "modified", diff=diff_content, content=current_content)
|
|
196
|
-
|
|
197
|
-
# 附加 lint 结果到返回内容
|
|
198
|
-
result_content = {
|
|
199
|
-
"content": current_content,
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
# 只有在启用Lint时才添加Lint结果
|
|
203
|
-
if enable_lint:
|
|
204
|
-
result_content["lint_results"] = {
|
|
205
|
-
"has_issues": has_lint_issues,
|
|
206
|
-
"issues": formatted_issues if has_lint_issues else None
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
return ToolResult(success=True, message=message, content=result_content)
|
|
210
|
-
except Exception as e:
|
|
211
|
-
logger.error(f"Error writing replaced content to shadow file '{file_path}': {str(e)}")
|
|
212
|
-
return ToolResult(success=False, message=get_message_with_format("replace_in_file.write_error", error=str(e)))
|
|
121
|
+
|
|
213
122
|
|
|
214
123
|
def replace_in_file_normal(self, file_path: str, diff_content: str, source_dir: str, abs_project_dir: str, abs_file_path: str) -> ToolResult:
|
|
215
124
|
"""Replace content in file directly without using shadow manager"""
|
|
@@ -282,16 +191,20 @@ class ReplaceInFileToolResolver(BaseToolResolver):
|
|
|
282
191
|
|
|
283
192
|
# 检查是否启用了Lint功能
|
|
284
193
|
enable_lint = self.args.enable_auto_fix_lint
|
|
194
|
+
logger.info(f"检查Lint功能状态: enable_lint={enable_lint}")
|
|
285
195
|
|
|
286
196
|
if enable_lint:
|
|
287
197
|
try:
|
|
288
198
|
if self.agent.linter:
|
|
289
199
|
lint_results = self.agent.linter.lint_file(file_path)
|
|
290
200
|
if lint_results and lint_results.issues:
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
201
|
+
# 过滤 lint 结果,只保留 ERROR 和 WARNING 级别的问题
|
|
202
|
+
filtered_results = self._filter_lint_issues(lint_results)
|
|
203
|
+
if filtered_results.issues:
|
|
204
|
+
has_lint_issues = True
|
|
205
|
+
# 格式化 lint 问题
|
|
206
|
+
formatted_issues = self._format_lint_issues(filtered_results)
|
|
207
|
+
lint_message = f"\n\n代码质量检查发现 {len(filtered_results.issues)} 个问题"
|
|
295
208
|
except Exception as e:
|
|
296
209
|
logger.error(f"Lint 检查失败: {str(e)}")
|
|
297
210
|
lint_message = "\n\n尝试进行代码质量检查时出错。"
|
|
@@ -309,17 +222,13 @@ class ReplaceInFileToolResolver(BaseToolResolver):
|
|
|
309
222
|
message = get_message_with_format("replace_in_file.apply_success",
|
|
310
223
|
applied=applied_count,
|
|
311
224
|
total=len(parsed_blocks),
|
|
312
|
-
file_path=file_path)
|
|
313
|
-
|
|
314
|
-
# 将 lint 消息添加到结果中,如果启用了Lint
|
|
315
|
-
if enable_lint:
|
|
316
|
-
message += lint_message
|
|
225
|
+
file_path=file_path)
|
|
317
226
|
|
|
318
227
|
# 变更跟踪,回调AgenticEdit
|
|
319
228
|
if self.agent:
|
|
320
229
|
rel_path = os.path.relpath(abs_file_path, abs_project_dir)
|
|
321
230
|
self.agent.record_file_change(rel_path, "modified", diff=diff_content, content=current_content)
|
|
322
|
-
|
|
231
|
+
|
|
323
232
|
# 附加 lint 结果到返回内容
|
|
324
233
|
result_content = {
|
|
325
234
|
"content": current_content,
|
|
@@ -327,6 +236,7 @@ class ReplaceInFileToolResolver(BaseToolResolver):
|
|
|
327
236
|
|
|
328
237
|
# 只有在启用Lint时才添加Lint结果
|
|
329
238
|
if enable_lint:
|
|
239
|
+
message = message + "\n" + lint_message
|
|
330
240
|
result_content["lint_results"] = {
|
|
331
241
|
"has_issues": has_lint_issues,
|
|
332
242
|
"issues": formatted_issues if has_lint_issues else None
|
|
@@ -348,9 +258,5 @@ class ReplaceInFileToolResolver(BaseToolResolver):
|
|
|
348
258
|
# Security check
|
|
349
259
|
if not abs_file_path.startswith(abs_project_dir):
|
|
350
260
|
return ToolResult(success=False, message=get_message_with_format("replace_in_file.access_denied", file_path=file_path))
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
if self.shadow_manager:
|
|
354
|
-
return self.replace_in_file_with_shadow(file_path, diff_content, source_dir, abs_project_dir, abs_file_path)
|
|
355
|
-
else:
|
|
356
|
-
return self.replace_in_file_normal(file_path, diff_content, source_dir, abs_project_dir, abs_file_path)
|
|
261
|
+
|
|
262
|
+
return self.replace_in_file_normal(file_path, diff_content, source_dir, abs_project_dir, abs_file_path)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from typing import Dict, Any, Optional
|
|
2
|
+
from typing import Dict, Any, Optional, List
|
|
3
3
|
from autocoder.common.v2.agent.agentic_edit_types import WriteToFileTool, ToolResult
|
|
4
4
|
from autocoder.common.v2.agent.agentic_edit_tools.base_tool_resolver import BaseToolResolver
|
|
5
5
|
from loguru import logger
|
|
@@ -7,6 +7,7 @@ from autocoder.common import AutoCoderArgs
|
|
|
7
7
|
from autocoder.common.auto_coder_lang import get_message_with_format
|
|
8
8
|
from autocoder.common.file_checkpoint.models import FileChange as CheckpointFileChange
|
|
9
9
|
from autocoder.common.file_checkpoint.manager import FileChangeManager as CheckpointFileChangeManager
|
|
10
|
+
from autocoder.linters.models import IssueSeverity, FileLintResult
|
|
10
11
|
import typing
|
|
11
12
|
|
|
12
13
|
if typing.TYPE_CHECKING:
|
|
@@ -20,7 +21,38 @@ class WriteToFileToolResolver(BaseToolResolver):
|
|
|
20
21
|
self.shadow_manager = self.agent.shadow_manager if self.agent else None
|
|
21
22
|
self.shadow_linter = self.agent.shadow_linter if self.agent else None
|
|
22
23
|
|
|
23
|
-
def
|
|
24
|
+
def _filter_lint_issues(self, lint_result:FileLintResult, levels: List[IssueSeverity] = [IssueSeverity.ERROR, IssueSeverity.WARNING]):
|
|
25
|
+
"""
|
|
26
|
+
过滤 lint 结果,只保留指定级别的问题
|
|
27
|
+
|
|
28
|
+
参数:
|
|
29
|
+
lint_result: 单个文件的 lint 结果对象
|
|
30
|
+
levels: 要保留的问题级别列表,默认保留 ERROR 和 WARNING 级别
|
|
31
|
+
|
|
32
|
+
返回:
|
|
33
|
+
过滤后的 lint 结果对象(原对象的副本)
|
|
34
|
+
"""
|
|
35
|
+
if not lint_result or not lint_result.issues:
|
|
36
|
+
return lint_result
|
|
37
|
+
|
|
38
|
+
# 创建一个新的 issues 列表,只包含指定级别的问题
|
|
39
|
+
filtered_issues = []
|
|
40
|
+
for issue in lint_result.issues:
|
|
41
|
+
if issue.severity in levels:
|
|
42
|
+
filtered_issues.append(issue)
|
|
43
|
+
|
|
44
|
+
# 更新 lint_result 的副本
|
|
45
|
+
filtered_result = lint_result
|
|
46
|
+
filtered_result.issues = filtered_issues
|
|
47
|
+
|
|
48
|
+
# 更新计数
|
|
49
|
+
filtered_result.error_count = sum(1 for issue in filtered_issues if issue.severity == IssueSeverity.ERROR)
|
|
50
|
+
filtered_result.warning_count = sum(1 for issue in filtered_issues if issue.severity == IssueSeverity.WARNING)
|
|
51
|
+
filtered_result.info_count = sum(1 for issue in filtered_issues if issue.severity == IssueSeverity.INFO)
|
|
52
|
+
|
|
53
|
+
return filtered_result
|
|
54
|
+
|
|
55
|
+
def _format_lint_issues(self, lint_result:FileLintResult):
|
|
24
56
|
"""
|
|
25
57
|
将 lint 结果格式化为可读的文本格式
|
|
26
58
|
|
|
@@ -43,74 +75,7 @@ class WriteToFileToolResolver(BaseToolResolver):
|
|
|
43
75
|
)
|
|
44
76
|
|
|
45
77
|
return "\n".join(formatted_issues)
|
|
46
|
-
|
|
47
|
-
def write_file_with_shadow(self, file_path: str, content: str, source_dir: str, abs_project_dir: str, abs_file_path: str) -> ToolResult:
|
|
48
|
-
"""Write file using shadow manager for path translation"""
|
|
49
|
-
try:
|
|
50
|
-
shadow_path = self.shadow_manager.to_shadow_path(abs_file_path)
|
|
51
|
-
# Ensure shadow directory exists
|
|
52
|
-
os.makedirs(os.path.dirname(shadow_path), exist_ok=True)
|
|
53
|
-
with open(shadow_path, 'w', encoding='utf-8') as f:
|
|
54
|
-
f.write(content)
|
|
55
|
-
logger.info(f"[Shadow] Successfully wrote shadow file: {shadow_path}")
|
|
56
|
-
|
|
57
|
-
# 回调AgenticEdit,记录变更
|
|
58
|
-
if self.agent:
|
|
59
|
-
rel_path = os.path.relpath(abs_file_path, abs_project_dir)
|
|
60
|
-
self.agent.record_file_change(rel_path, "added", diff=None, content=content)
|
|
61
|
-
|
|
62
|
-
# 新增:执行代码质量检查
|
|
63
|
-
lint_results = None
|
|
64
|
-
lint_message = ""
|
|
65
|
-
formatted_issues = ""
|
|
66
|
-
has_lint_issues = False
|
|
67
|
-
|
|
68
|
-
# 检查是否启用了Lint功能
|
|
69
|
-
enable_lint = self.args.enable_auto_fix_lint
|
|
70
|
-
|
|
71
|
-
if enable_lint:
|
|
72
|
-
try:
|
|
73
|
-
if self.shadow_linter and self.shadow_manager:
|
|
74
|
-
# 对新创建的文件进行 lint 检查
|
|
75
|
-
shadow_path = self.shadow_manager.to_shadow_path(abs_file_path)
|
|
76
|
-
lint_results = self.shadow_linter.lint_shadow_file(shadow_path)
|
|
77
|
-
|
|
78
|
-
if lint_results and lint_results.issues:
|
|
79
|
-
has_lint_issues = True
|
|
80
|
-
# 格式化 lint 问题
|
|
81
|
-
formatted_issues = self._format_lint_issues(lint_results)
|
|
82
|
-
lint_message = f"\n\n代码质量检查发现 {len(lint_results.issues)} 个问题:\n{formatted_issues}"
|
|
83
|
-
else:
|
|
84
|
-
lint_message = "\n\n代码质量检查通过,未发现问题。"
|
|
85
|
-
except Exception as e:
|
|
86
|
-
logger.error(f"Lint 检查失败: {str(e)}")
|
|
87
|
-
lint_message = "\n\n尝试进行代码质量检查时出错。"
|
|
88
|
-
else:
|
|
89
|
-
logger.info("代码质量检查已禁用")
|
|
90
|
-
|
|
91
|
-
# 构建包含 lint 结果的返回消息
|
|
92
|
-
message = f"Successfully wrote to file (shadow): {file_path}"
|
|
93
|
-
|
|
94
|
-
# 将 lint 消息添加到结果中,如果启用了Lint
|
|
95
|
-
if enable_lint:
|
|
96
|
-
message += lint_message
|
|
97
|
-
|
|
98
|
-
# 附加 lint 结果到返回内容
|
|
99
|
-
result_content = {
|
|
100
|
-
"content": content,
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
# 只有在启用Lint时才添加Lint结果
|
|
104
|
-
if enable_lint:
|
|
105
|
-
result_content["lint_results"] = {
|
|
106
|
-
"has_issues": has_lint_issues,
|
|
107
|
-
"issues": formatted_issues if has_lint_issues else None
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return ToolResult(success=True, message=message, content=result_content)
|
|
111
|
-
except Exception as e:
|
|
112
|
-
logger.error(f"Error writing to shadow file '{file_path}': {str(e)}")
|
|
113
|
-
return ToolResult(success=False, message=f"An error occurred while writing to the shadow file: {str(e)}")
|
|
78
|
+
|
|
114
79
|
|
|
115
80
|
def write_file_normal(self, file_path: str, content: str, source_dir: str, abs_project_dir: str, abs_file_path: str) -> ToolResult:
|
|
116
81
|
"""Write file directly without using shadow manager"""
|
|
@@ -153,31 +118,17 @@ class WriteToFileToolResolver(BaseToolResolver):
|
|
|
153
118
|
enable_lint = self.args.enable_auto_fix_lint
|
|
154
119
|
|
|
155
120
|
if enable_lint:
|
|
156
|
-
try:
|
|
157
|
-
if self.shadow_linter and self.shadow_manager:
|
|
158
|
-
# 对新创建的文件进行 lint 检查
|
|
159
|
-
# 由于没有shadow系统,需要先创建shadow文件
|
|
160
|
-
shadow_path = self.shadow_manager.to_shadow_path(abs_file_path)
|
|
161
|
-
os.makedirs(os.path.dirname(shadow_path), exist_ok=True)
|
|
162
|
-
with open(shadow_path, 'w', encoding='utf-8') as f:
|
|
163
|
-
f.write(content)
|
|
164
|
-
|
|
165
|
-
lint_results = self.shadow_linter.lint_shadow_file(shadow_path)
|
|
166
|
-
|
|
167
|
-
if lint_results and lint_results.issues:
|
|
168
|
-
has_lint_issues = True
|
|
169
|
-
# 格式化 lint 问题
|
|
170
|
-
formatted_issues = self._format_lint_issues(lint_results)
|
|
171
|
-
lint_message = f"\n\n代码质量检查发现 {len(lint_results.issues)} 个问题:\n{formatted_issues}"
|
|
172
|
-
else:
|
|
173
|
-
lint_message = "\n\n代码质量检查通过,未发现问题。"
|
|
121
|
+
try:
|
|
174
122
|
if self.agent.linter:
|
|
175
123
|
lint_results = self.agent.linter.lint_file(file_path)
|
|
176
124
|
if lint_results and lint_results.issues:
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
125
|
+
# 过滤 lint 结果,只保留 ERROR 和 WARNING 级别的问题
|
|
126
|
+
filtered_results = self._filter_lint_issues(lint_results)
|
|
127
|
+
if filtered_results.issues:
|
|
128
|
+
has_lint_issues = True
|
|
129
|
+
# 格式化 lint 问题
|
|
130
|
+
formatted_issues = self._format_lint_issues(filtered_results)
|
|
131
|
+
lint_message = f"\n\n代码质量检查发现 {len(filtered_results.issues)} 个问题"
|
|
181
132
|
except Exception as e:
|
|
182
133
|
logger.error(f"Lint 检查失败: {str(e)}")
|
|
183
134
|
lint_message = "\n\n尝试进行代码质量检查时出错。"
|
|
@@ -186,10 +137,7 @@ class WriteToFileToolResolver(BaseToolResolver):
|
|
|
186
137
|
|
|
187
138
|
# 构建包含 lint 结果的返回消息
|
|
188
139
|
message = f"{file_path}"
|
|
189
|
-
|
|
190
|
-
# 将 lint 消息添加到结果中,如果启用了Lint
|
|
191
|
-
if enable_lint:
|
|
192
|
-
message += lint_message
|
|
140
|
+
|
|
193
141
|
|
|
194
142
|
# 附加 lint 结果到返回内容
|
|
195
143
|
result_content = {
|
|
@@ -198,6 +146,7 @@ class WriteToFileToolResolver(BaseToolResolver):
|
|
|
198
146
|
|
|
199
147
|
# 只有在启用Lint时才添加Lint结果
|
|
200
148
|
if enable_lint:
|
|
149
|
+
message = message + "\n" + lint_message
|
|
201
150
|
result_content["lint_results"] = {
|
|
202
151
|
"has_issues": has_lint_issues,
|
|
203
152
|
"issues": formatted_issues if has_lint_issues else None
|
|
@@ -219,9 +168,5 @@ class WriteToFileToolResolver(BaseToolResolver):
|
|
|
219
168
|
# Security check: ensure the path is within the source directory
|
|
220
169
|
if not abs_file_path.startswith(abs_project_dir):
|
|
221
170
|
return ToolResult(success=False, message=f"Error: Access denied. Attempted to write file outside the project directory: {file_path}")
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
if self.shadow_manager:
|
|
225
|
-
return self.write_file_with_shadow(file_path, content, source_dir, abs_project_dir, abs_file_path)
|
|
226
|
-
else:
|
|
227
|
-
return self.write_file_normal(file_path, content, source_dir, abs_project_dir, abs_file_path)
|
|
171
|
+
|
|
172
|
+
return self.write_file_normal(file_path, content, source_dir, abs_project_dir, abs_file_path)
|
|
@@ -9,6 +9,7 @@ from autocoder.linters.base_linter import BaseLinter
|
|
|
9
9
|
from autocoder.linters.reactjs_linter import ReactJSLinter
|
|
10
10
|
from autocoder.linters.vue_linter import VueLinter
|
|
11
11
|
from autocoder.linters.python_linter import PythonLinter
|
|
12
|
+
from loguru import logger
|
|
12
13
|
|
|
13
14
|
class LinterFactory:
|
|
14
15
|
"""
|
|
@@ -115,9 +116,11 @@ class LinterFactory:
|
|
|
115
116
|
Returns:
|
|
116
117
|
Dict[str, Any]: Lint results.
|
|
117
118
|
"""
|
|
119
|
+
logger.info(f"根据文件路径{file_path}自动查找 linter")
|
|
118
120
|
linter = cls.create_linter(file_path=file_path, verbose=verbose)
|
|
121
|
+
logger.info(f"Linting file: {file_path} with linter: {linter.__class__.__name__}")
|
|
119
122
|
if linter is None:
|
|
120
|
-
return None
|
|
123
|
+
return None
|
|
121
124
|
return linter.lint_file(file_path, fix=fix)
|
|
122
125
|
|
|
123
126
|
@classmethod
|
|
@@ -72,10 +72,8 @@ class NormalLinter:
|
|
|
72
72
|
|
|
73
73
|
# 将原始结果转换为Pydantic模型
|
|
74
74
|
return self._convert_raw_lint_result(raw_lint_result, file_path)
|
|
75
|
-
except Exception as e:
|
|
76
|
-
|
|
77
|
-
print(f"检查 {file_path} 时出错: {str(e)}")
|
|
78
|
-
|
|
75
|
+
except Exception as e:
|
|
76
|
+
self.logger.exception(f"检查 {file_path} 时出错: {e}")
|
|
79
77
|
language = self._detect_language(file_path)
|
|
80
78
|
return FileLintResult(
|
|
81
79
|
file_path=file_path,
|