auto-coder 0.1.359__tar.gz → 0.1.360__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.359 → auto_coder-0.1.360}/PKG-INFO +1 -1
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/PKG-INFO +1 -1
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/SOURCES.txt +3 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_review_commit.py +5 -3
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate.py +21 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate_diff.py +26 -2
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate_editblock.py +25 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate_strict_diff.py +26 -1
- auto_coder-0.1.360/src/autocoder/common/directory_cache/__init__.py +1 -0
- auto_coder-0.1.360/src/autocoder/common/directory_cache/cache.py +192 -0
- auto_coder-0.1.360/src/autocoder/common/directory_cache/test_cache.py +190 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/file_monitor/monitor.py +1 -1
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_generate.py +83 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_generate_diff.py +6 -5
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_generate_editblock.py +24 -2
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +25 -3
- auto_coder-0.1.360/src/autocoder/version.py +1 -0
- auto_coder-0.1.359/src/autocoder/version.py +0 -1
- {auto_coder-0.1.359 → auto_coder-0.1.360}/LICENSE +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/README.md +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/setup.cfg +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/setup.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/dependency_links.txt +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/entry_points.txt +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/requires.txt +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/top_level.txt +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/agentic_filter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_demand_organizer.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_filegroup.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_guess_query.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_learn.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_tool.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/coder.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/designer.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/planner.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/project_reader.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/auto_coder.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/auto_coder_rag.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/auto_coder_runner.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/auto_coder_server.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/benchmark.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat/conf_command.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat/models_command.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat/rules_command.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat_auto_coder.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat_auto_coder_lang.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/command_args.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/command_parser.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/commands/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/commands/auto_command.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/commands/auto_web.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/commands/tools.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/JupyterClient.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/ShellClient.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/action_yml_file_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/anything2images.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/anything2img.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/audio.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/auto_coder_lang.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/auto_configure.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/buildin_tokenizer.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/chunk_validation.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/cleaner.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_execute.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_merge.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_modification_ranker.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/command_completer.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/command_completer_v2.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/command_generator.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/command_templates.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/computer_use.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conf_import_export.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conf_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conf_validator.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/const.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/context_pruner.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversation_pruner.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversations/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversations/compatibility.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversations/conversation_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversations/example.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/file_monitor/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/files.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/git_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/global_cancel.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/ignorefiles/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/image_to_page.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/index_import_export.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/interpreter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/llm_rerank.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_hub.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_server.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_server_install.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_server_types.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_servers/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_tools.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/memory_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/model_speed_tester.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/openai_content.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/printer.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/recall_validation.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/result_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/rulefiles/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/rulefiles/autocoderrules_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/run_cmd.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/save_formatted_log.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/screenshots.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/search.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/search_replace.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/shells.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/stats_panel.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/stream_out_type.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/sys_prompt.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/test_run_cmd.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/text.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/token_cost_caculate.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/types.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/utils_code_auto_generate.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_types.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_merge.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_diff_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/base_compiler.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/compiler_config_api.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/compiler_config_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/compiler_factory.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/java_compiler.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/models.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/provided_compiler.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/python_compiler.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/reactjs_compiler.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/shadow_compiler.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/vue_compiler.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/data/byzerllm.md +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/data/tokenizer.json +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/db/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/db/store.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/action.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/copilot.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_content.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_manager_singleton.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_store.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_types.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/helper/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/helper/project_creator.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/helper/rag_doc_creator.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/entry.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/filter/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/filter/normal_filter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/filter/quick_filter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/for_command.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/index.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/symbols_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/types.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/lang.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/base_linter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/linter_factory.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/models.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/python_linter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/reactjs_linter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/shadow_linter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/vue_linter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/active_context_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/active_package.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/async_processor.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/directory_mapper.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/models.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/git_helper_plugin.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/sample_plugin.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/token_helper_plugin.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/privacy/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/privacy/model_filter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/pyproject/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/api_server.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/base_cache.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/simple_cache.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/conversation_to_queries.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/doc_filter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/document_retriever.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/lang.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/llm_wrapper.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/docx_loader.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/excel_loader.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/filter_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/image_loader.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/test_image_loader.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/long_context_rag.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/rag_config.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/rag_entry.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/raw_rag.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/relevant_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/searchable.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/simple_directory_reader.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/simple_rag.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/stream_event/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/stream_event/event_writer.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/stream_event/types.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/token_checker.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/token_counter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/token_limiter.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/token_limiter_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/types.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/variable_holder.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/regexproject/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/run_context.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/shadows/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/shadows/shadow_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/suffixproject/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/tsproject/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/_markitdown.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/auto_project_type.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/conversation_store.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/llm_client_interceptors.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/llms.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/log_capture.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/model_provider_selector.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/multi_turn.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/operate_config_api.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/print_table.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/project_structure.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/queue_communicate.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/request_event_queue.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/request_queue.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/rest.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/stream_thinking.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/tests.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/thread_utils.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/types.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_action_regex_project.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_action_yml_file_manager.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_chat_auto_coder.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_command_completer.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_planner.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_plugins.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_privacy.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_queue_communicate.py +0 -0
- {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_symbols_utils.py +0 -0
|
@@ -111,6 +111,9 @@ src/autocoder/common/conversations/__init__.py
|
|
|
111
111
|
src/autocoder/common/conversations/compatibility.py
|
|
112
112
|
src/autocoder/common/conversations/conversation_manager.py
|
|
113
113
|
src/autocoder/common/conversations/example.py
|
|
114
|
+
src/autocoder/common/directory_cache/__init__.py
|
|
115
|
+
src/autocoder/common/directory_cache/cache.py
|
|
116
|
+
src/autocoder/common/directory_cache/test_cache.py
|
|
114
117
|
src/autocoder/common/file_monitor/__init__.py
|
|
115
118
|
src/autocoder/common/file_monitor/monitor.py
|
|
116
119
|
src/autocoder/common/ignorefiles/__init__.py
|
|
@@ -47,7 +47,7 @@ class AutoReviewCommit:
|
|
|
47
47
|
@byzerllm.prompt()
|
|
48
48
|
def review(self, querie_with_urls_and_changes: List[Tuple[str, List[str], Dict[str, Tuple[str, str]]]], query: str) -> Generator[str,None,None]:
|
|
49
49
|
"""
|
|
50
|
-
|
|
50
|
+
如果前面我们对话提供了文档,请参考上面的文档对提交的代码变更进行审查,提供改进建议,你所有的输出都要以markdown语法输出。
|
|
51
51
|
|
|
52
52
|
下面包含最新一次提交的信息:
|
|
53
53
|
<commit>
|
|
@@ -96,7 +96,7 @@ class AutoReviewCommit:
|
|
|
96
96
|
- 依赖关系:组件耦合是否合理
|
|
97
97
|
- 复用性:是否有重复代码
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
评审结果包含以下内容
|
|
100
100
|
1. issues: 发现的具体问题列表
|
|
101
101
|
3. severity: 问题的严重程度(low/medium/high),从高到底进行描述。
|
|
102
102
|
4. suggestions: 对应的改进建议列表
|
|
@@ -115,7 +115,9 @@ class AutoReviewCommit:
|
|
|
115
115
|
1. 评审意见应该具体且可操作,而不是泛泛而谈
|
|
116
116
|
2. 对于每个问题都应该提供明确的改进建议
|
|
117
117
|
3. 严重程度的判断要考虑问题对系统的潜在影响
|
|
118
|
-
4. 建议应该符合项目的技术栈和开发规范
|
|
118
|
+
4. 建议应该符合项目的技术栈和开发规范
|
|
119
|
+
|
|
120
|
+
注意,请以「纯 Markdown」输出,不要出现 <markdown>、</markdown> 之类标签。
|
|
119
121
|
"""
|
|
120
122
|
return {}
|
|
121
123
|
|
|
@@ -59,16 +59,19 @@ class CodeAutoGenerate:
|
|
|
59
59
|
) -> str:
|
|
60
60
|
"""
|
|
61
61
|
{%- if structure %}
|
|
62
|
+
====
|
|
62
63
|
{{ structure }}
|
|
63
64
|
{%- endif %}
|
|
64
65
|
|
|
65
66
|
{%- if content %}
|
|
67
|
+
====
|
|
66
68
|
下面是一些文件路径以及每个文件对应的源码:
|
|
67
69
|
|
|
68
70
|
{{ content }}
|
|
69
71
|
{%- endif %}
|
|
70
72
|
|
|
71
73
|
{%- if package_context %}
|
|
74
|
+
====
|
|
72
75
|
下面是上面文件的一些信息(包括最近的变更情况):
|
|
73
76
|
<package_context>
|
|
74
77
|
{{ package_context }}
|
|
@@ -76,9 +79,27 @@ class CodeAutoGenerate:
|
|
|
76
79
|
{%- endif %}
|
|
77
80
|
|
|
78
81
|
{%- if context %}
|
|
82
|
+
====
|
|
79
83
|
{{ context }}
|
|
80
84
|
{%- endif %}
|
|
81
85
|
|
|
86
|
+
{%- if extra_docs %}
|
|
87
|
+
====
|
|
88
|
+
|
|
89
|
+
RULES PROVIDED BY USER
|
|
90
|
+
|
|
91
|
+
The following rules are provided by the user, and you must follow them strictly.
|
|
92
|
+
|
|
93
|
+
{% for key, value in extra_docs.items() %}
|
|
94
|
+
<user_rule>
|
|
95
|
+
##File: {{ key }}
|
|
96
|
+
{{ value }}
|
|
97
|
+
</user_rule>
|
|
98
|
+
{% endfor %}
|
|
99
|
+
{% endif %}
|
|
100
|
+
|
|
101
|
+
====
|
|
102
|
+
|
|
82
103
|
下面是用户的需求:
|
|
83
104
|
|
|
84
105
|
{{ instruction }}
|
|
@@ -16,6 +16,7 @@ from autocoder.rag.token_counter import count_tokens
|
|
|
16
16
|
from autocoder.utils import llms as llm_utils
|
|
17
17
|
from autocoder.common import SourceCodeList
|
|
18
18
|
from autocoder.memory.active_context_manager import ActiveContextManager
|
|
19
|
+
from autocoder.common.rulefiles.autocoderrules_utils import get_rules
|
|
19
20
|
|
|
20
21
|
class CodeAutoGenerateDiff:
|
|
21
22
|
def __init__(
|
|
@@ -135,10 +136,12 @@ class CodeAutoGenerateDiff:
|
|
|
135
136
|
现在让我们开始一个新的任务:
|
|
136
137
|
|
|
137
138
|
{%- if structure %}
|
|
139
|
+
====
|
|
138
140
|
{{ structure }}
|
|
139
141
|
{%- endif %}
|
|
140
142
|
|
|
141
143
|
{%- if content %}
|
|
144
|
+
====
|
|
142
145
|
下面是一些文件路径以及每个文件对应的源码:
|
|
143
146
|
<files>
|
|
144
147
|
{{ content }}
|
|
@@ -146,6 +149,7 @@ class CodeAutoGenerateDiff:
|
|
|
146
149
|
{%- endif %}
|
|
147
150
|
|
|
148
151
|
{%- if package_context %}
|
|
152
|
+
====
|
|
149
153
|
下面是上面文件的一些信息(包括最近的变更情况):
|
|
150
154
|
<package_context>
|
|
151
155
|
{{ package_context }}
|
|
@@ -153,11 +157,29 @@ class CodeAutoGenerateDiff:
|
|
|
153
157
|
{%- endif %}
|
|
154
158
|
|
|
155
159
|
{%- if context %}
|
|
160
|
+
====
|
|
156
161
|
<extra_context>
|
|
157
162
|
{{ context }}
|
|
158
163
|
</extra_context>
|
|
159
164
|
{%- endif %}
|
|
160
165
|
|
|
166
|
+
{%- if extra_docs %}
|
|
167
|
+
====
|
|
168
|
+
|
|
169
|
+
RULES PROVIDED BY USER
|
|
170
|
+
|
|
171
|
+
The following rules are provided by the user, and you must follow them strictly.
|
|
172
|
+
|
|
173
|
+
{% for key, value in extra_docs.items() %}
|
|
174
|
+
<user_rule>
|
|
175
|
+
##File: {{ key }}
|
|
176
|
+
{{ value }}
|
|
177
|
+
</user_rule>
|
|
178
|
+
{% endfor %}
|
|
179
|
+
{% endif %}
|
|
180
|
+
|
|
181
|
+
====
|
|
182
|
+
|
|
161
183
|
下面是用户的需求:
|
|
162
184
|
|
|
163
185
|
{{ instruction }}
|
|
@@ -169,13 +191,15 @@ class CodeAutoGenerateDiff:
|
|
|
169
191
|
return {
|
|
170
192
|
"structure": ""
|
|
171
193
|
}
|
|
172
|
-
|
|
194
|
+
|
|
195
|
+
extra_docs = get_rules()
|
|
173
196
|
return {
|
|
174
197
|
"structure": (
|
|
175
198
|
self.action.pp.get_tree_like_directory_structure()
|
|
176
199
|
if self.action
|
|
177
200
|
else ""
|
|
178
|
-
)
|
|
201
|
+
),
|
|
202
|
+
"extra_docs": extra_docs,
|
|
179
203
|
}
|
|
180
204
|
|
|
181
205
|
@byzerllm.prompt(llm=lambda self: self.llm)
|
{auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate_editblock.py
RENAMED
|
@@ -20,6 +20,7 @@ from autocoder.rag.token_counter import count_tokens
|
|
|
20
20
|
from autocoder.utils import llms as llm_utils
|
|
21
21
|
from autocoder.common import SourceCodeList
|
|
22
22
|
from autocoder.memory.active_context_manager import ActiveContextManager
|
|
23
|
+
from autocoder.common.rulefiles.autocoderrules_utils import get_rules
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
|
|
@@ -188,10 +189,12 @@ class CodeAutoGenerateEditBlock:
|
|
|
188
189
|
现在让我们开始一个新的任务:
|
|
189
190
|
|
|
190
191
|
{%- if structure %}
|
|
192
|
+
====
|
|
191
193
|
{{ structure }}
|
|
192
194
|
{%- endif %}
|
|
193
195
|
|
|
194
196
|
{%- if content %}
|
|
197
|
+
====
|
|
195
198
|
下面是一些文件路径以及每个文件对应的源码:
|
|
196
199
|
<files>
|
|
197
200
|
{{ content }}
|
|
@@ -199,6 +202,7 @@ class CodeAutoGenerateEditBlock:
|
|
|
199
202
|
{%- endif %}
|
|
200
203
|
|
|
201
204
|
{%- if package_context %}
|
|
205
|
+
====
|
|
202
206
|
下面是上面文件的一些信息(包括最近的变更情况):
|
|
203
207
|
<package_context>
|
|
204
208
|
{{ package_context }}
|
|
@@ -206,11 +210,29 @@ class CodeAutoGenerateEditBlock:
|
|
|
206
210
|
{%- endif %}
|
|
207
211
|
|
|
208
212
|
{%- if context %}
|
|
213
|
+
====
|
|
209
214
|
<extra_context>
|
|
210
215
|
{{ context }}
|
|
211
216
|
</extra_context>
|
|
212
217
|
{%- endif %}
|
|
213
218
|
|
|
219
|
+
{%- if extra_docs %}
|
|
220
|
+
====
|
|
221
|
+
|
|
222
|
+
RULES PROVIDED BY USER
|
|
223
|
+
|
|
224
|
+
The following rules are provided by the user, and you must follow them strictly.
|
|
225
|
+
|
|
226
|
+
{% for key, value in extra_docs.items() %}
|
|
227
|
+
<user_rule>
|
|
228
|
+
##File: {{ key }}
|
|
229
|
+
{{ value }}
|
|
230
|
+
</user_rule>
|
|
231
|
+
{% endfor %}
|
|
232
|
+
{% endif %}
|
|
233
|
+
|
|
234
|
+
====
|
|
235
|
+
|
|
214
236
|
下面是用户的需求:
|
|
215
237
|
|
|
216
238
|
{{ instruction }}
|
|
@@ -224,6 +246,8 @@ class CodeAutoGenerateEditBlock:
|
|
|
224
246
|
"fence_0": self.fence_0,
|
|
225
247
|
"fence_1": self.fence_1,
|
|
226
248
|
}
|
|
249
|
+
|
|
250
|
+
extra_docs = get_rules()
|
|
227
251
|
|
|
228
252
|
return {
|
|
229
253
|
"structure": (
|
|
@@ -233,6 +257,7 @@ class CodeAutoGenerateEditBlock:
|
|
|
233
257
|
),
|
|
234
258
|
"fence_0": self.fence_0,
|
|
235
259
|
"fence_1": self.fence_1,
|
|
260
|
+
"extra_docs": extra_docs,
|
|
236
261
|
}
|
|
237
262
|
|
|
238
263
|
@byzerllm.prompt()
|
{auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate_strict_diff.py
RENAMED
|
@@ -16,6 +16,8 @@ from autocoder.utils import llms as llm_utils
|
|
|
16
16
|
from autocoder.common import SourceCodeList
|
|
17
17
|
from autocoder.privacy.model_filter import ModelPathFilter
|
|
18
18
|
from autocoder.memory.active_context_manager import ActiveContextManager
|
|
19
|
+
from autocoder.common.rulefiles.autocoderrules_utils import get_rules
|
|
20
|
+
|
|
19
21
|
class CodeAutoGenerateStrictDiff:
|
|
20
22
|
def __init__(
|
|
21
23
|
self, llm: byzerllm.ByzerLLM, args: AutoCoderArgs, action=None
|
|
@@ -118,10 +120,12 @@ class CodeAutoGenerateStrictDiff:
|
|
|
118
120
|
现在让我们开始一个新的任务:
|
|
119
121
|
|
|
120
122
|
{%- if structure %}
|
|
123
|
+
====
|
|
121
124
|
{{ structure }}
|
|
122
125
|
{%- endif %}
|
|
123
126
|
|
|
124
127
|
{%- if content %}
|
|
128
|
+
====
|
|
125
129
|
下面是一些文件路径以及每个文件对应的源码:
|
|
126
130
|
<files>
|
|
127
131
|
{{ content }}
|
|
@@ -129,6 +133,7 @@ class CodeAutoGenerateStrictDiff:
|
|
|
129
133
|
{%- endif %}
|
|
130
134
|
|
|
131
135
|
{%- if package_context %}
|
|
136
|
+
====
|
|
132
137
|
下面是上面文件的一些信息(包括最近的变更情况):
|
|
133
138
|
<package_context>
|
|
134
139
|
{{ package_context }}
|
|
@@ -141,6 +146,23 @@ class CodeAutoGenerateStrictDiff:
|
|
|
141
146
|
</extra_context>
|
|
142
147
|
{%- endif %}
|
|
143
148
|
|
|
149
|
+
{%- if extra_docs %}
|
|
150
|
+
====
|
|
151
|
+
|
|
152
|
+
RULES PROVIDED BY USER
|
|
153
|
+
|
|
154
|
+
The following rules are provided by the user, and you must follow them strictly.
|
|
155
|
+
|
|
156
|
+
{% for key, value in extra_docs.items() %}
|
|
157
|
+
<user_rule>
|
|
158
|
+
##File: {{ key }}
|
|
159
|
+
{{ value }}
|
|
160
|
+
</user_rule>
|
|
161
|
+
{% endfor %}
|
|
162
|
+
{% endif %}
|
|
163
|
+
|
|
164
|
+
====
|
|
165
|
+
|
|
144
166
|
下面是用户的需求:
|
|
145
167
|
|
|
146
168
|
{{ instruction }}
|
|
@@ -152,13 +174,16 @@ class CodeAutoGenerateStrictDiff:
|
|
|
152
174
|
return {
|
|
153
175
|
"structure": "",
|
|
154
176
|
}
|
|
177
|
+
|
|
178
|
+
extra_docs = get_rules()
|
|
155
179
|
|
|
156
180
|
return {
|
|
157
181
|
"structure": (
|
|
158
182
|
self.action.pp.get_tree_like_directory_structure()
|
|
159
183
|
if self.action
|
|
160
184
|
else ""
|
|
161
|
-
)
|
|
185
|
+
),
|
|
186
|
+
"extra_docs": extra_docs,
|
|
162
187
|
}
|
|
163
188
|
|
|
164
189
|
@byzerllm.prompt(llm=lambda self: self.llm)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import os, fnmatch, asyncio
|
|
3
|
+
from watchfiles import Change
|
|
4
|
+
from autocoder.common.ignorefiles.ignore_file_utils import should_ignore
|
|
5
|
+
from autocoder.common.file_monitor.monitor import get_file_monitor
|
|
6
|
+
import logging
|
|
7
|
+
import functools
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
class DirectoryCache:
|
|
12
|
+
_instance: "DirectoryCache|None" = None
|
|
13
|
+
|
|
14
|
+
def __init__(self, root: str):
|
|
15
|
+
self.root = os.path.abspath(root)
|
|
16
|
+
self.files_set: set[str] = set()
|
|
17
|
+
self.lock = asyncio.Lock()
|
|
18
|
+
self._main_loop = asyncio.get_event_loop() # 保存主事件循环引用
|
|
19
|
+
logger.info(f"Initializing DirectoryCache for root: {self.root}")
|
|
20
|
+
|
|
21
|
+
# ---------- 单例获取 ----------
|
|
22
|
+
@classmethod
|
|
23
|
+
def get_instance(cls, root: str | None = None) -> "DirectoryCache":
|
|
24
|
+
if cls._instance is None:
|
|
25
|
+
if root is None:
|
|
26
|
+
raise ValueError("root is required when initializing DirectoryCache for the first time")
|
|
27
|
+
logger.info("Creating new DirectoryCache instance.")
|
|
28
|
+
cls._instance = cls(root)
|
|
29
|
+
cls._instance._build() # 同步首扫
|
|
30
|
+
cls._instance._register_monitor()
|
|
31
|
+
elif root is not None and os.path.abspath(root) != cls._instance.root:
|
|
32
|
+
# 如果请求的 root 与已存在的实例 root 不同,可以选择抛出错误或重新初始化
|
|
33
|
+
logger.warning(f"Requested root {os.path.abspath(root)} differs from existing instance root {cls._instance.root}. Re-initializing cache.")
|
|
34
|
+
cls._instance = cls(root)
|
|
35
|
+
cls._instance._build()
|
|
36
|
+
cls._instance._register_monitor()
|
|
37
|
+
|
|
38
|
+
return cls._instance
|
|
39
|
+
|
|
40
|
+
# ---------- 构建 ----------
|
|
41
|
+
def _build(self) -> None:
|
|
42
|
+
logger.info(f"Building initial file cache for {self.root}...")
|
|
43
|
+
count = 0
|
|
44
|
+
for r, ds, fs in os.walk(self.root, followlinks=True):
|
|
45
|
+
# 过滤掉需要忽略的目录
|
|
46
|
+
ds[:] = [d for d in ds if not should_ignore(os.path.join(r, d))]
|
|
47
|
+
for f in fs:
|
|
48
|
+
fp = os.path.join(r, f)
|
|
49
|
+
abs_fp = os.path.abspath(fp)
|
|
50
|
+
if not should_ignore(abs_fp):
|
|
51
|
+
self.files_set.add(abs_fp)
|
|
52
|
+
count += 1
|
|
53
|
+
logger.info(f"Initial cache build complete. Found {count} files.")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# ---------- 监控回调 ----------
|
|
57
|
+
def _register_monitor(self) -> None:
|
|
58
|
+
try:
|
|
59
|
+
logger.info(f"Registering file monitor for {self.root}")
|
|
60
|
+
mon = get_file_monitor(self.root)
|
|
61
|
+
# 使用 functools.partial 包装异步回调
|
|
62
|
+
async_callback_wrapper = functools.partial(self._on_change_wrapper)
|
|
63
|
+
mon.register("**/*", async_callback_wrapper) # 监听所有文件变化
|
|
64
|
+
if not mon.is_running():
|
|
65
|
+
logger.info("Starting file monitor...")
|
|
66
|
+
mon.start()
|
|
67
|
+
logger.info("File monitor registered and running.")
|
|
68
|
+
except Exception as e:
|
|
69
|
+
logger.error(f"Failed to register or start file monitor: {e}", exc_info=True)
|
|
70
|
+
|
|
71
|
+
# Wrapper to run the async callback in the event loop
|
|
72
|
+
def _on_change_wrapper(self, change: Change, path: str):
|
|
73
|
+
try:
|
|
74
|
+
# 使用run_coroutine_threadsafe在主事件循环中运行协程
|
|
75
|
+
# 注意:主事件循环必须在其他地方运行,如主线程中
|
|
76
|
+
asyncio.run_coroutine_threadsafe(self._on_change(change, path), self._main_loop)
|
|
77
|
+
except Exception as e:
|
|
78
|
+
logger.error(f"Error executing _on_change_wrapper: {e}", exc_info=True)
|
|
79
|
+
# 如果run_coroutine_threadsafe失败,可以考虑一个同步的备用处理方法
|
|
80
|
+
try:
|
|
81
|
+
# 同步备份处理
|
|
82
|
+
ap = os.path.abspath(path)
|
|
83
|
+
if should_ignore(ap):
|
|
84
|
+
return
|
|
85
|
+
|
|
86
|
+
if change is Change.added:
|
|
87
|
+
self.files_set.add(ap)
|
|
88
|
+
elif change is Change.deleted:
|
|
89
|
+
self.files_set.discard(ap)
|
|
90
|
+
# Change.modified不需要更新集合
|
|
91
|
+
except Exception as backup_error:
|
|
92
|
+
logger.error(f"Backup handler also failed: {backup_error}", exc_info=True)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
async def _on_change(self, change: Change, path: str) -> None:
|
|
96
|
+
ap = os.path.abspath(path)
|
|
97
|
+
# Check ignore status again, as gitignore might change
|
|
98
|
+
if should_ignore(ap):
|
|
99
|
+
# If a previously tracked file becomes ignored, remove it
|
|
100
|
+
async with self.lock:
|
|
101
|
+
if ap in self.files_set:
|
|
102
|
+
logger.debug(f"File became ignored, removing from cache: {ap}")
|
|
103
|
+
self.files_set.discard(ap)
|
|
104
|
+
return
|
|
105
|
+
|
|
106
|
+
async with self.lock:
|
|
107
|
+
if change is Change.added:
|
|
108
|
+
logger.debug(f"File added, adding to cache: {ap}")
|
|
109
|
+
self.files_set.add(ap)
|
|
110
|
+
elif change is Change.deleted:
|
|
111
|
+
logger.debug(f"File deleted, removing from cache: {ap}")
|
|
112
|
+
self.files_set.discard(ap)
|
|
113
|
+
elif change is Change.modified:
|
|
114
|
+
# Modification doesn't change existence, but we might want to log or handle metadata updates if needed
|
|
115
|
+
logger.debug(f"File modified: {ap} (ignored in cache set)")
|
|
116
|
+
pass # No change needed for the set itself
|
|
117
|
+
|
|
118
|
+
# ---------- 查询 ----------
|
|
119
|
+
async def query(self, patterns: list[str]) -> list[str]:
|
|
120
|
+
logger.debug(f"Querying cache with patterns: {patterns}")
|
|
121
|
+
async with self.lock:
|
|
122
|
+
# Make a copy to avoid issues if the set is modified during iteration (though lock prevents this here)
|
|
123
|
+
current_files = list(self.files_set)
|
|
124
|
+
|
|
125
|
+
if not patterns or patterns == [""] or patterns == ["*"]:
|
|
126
|
+
logger.debug(f"Returning all {len(current_files)} cached files.")
|
|
127
|
+
return current_files
|
|
128
|
+
|
|
129
|
+
out: set[str] = set()
|
|
130
|
+
|
|
131
|
+
for p in patterns:
|
|
132
|
+
pattern_abs = os.path.abspath(os.path.join(self.root, p)) if not os.path.isabs(p) else p
|
|
133
|
+
is_glob = "*" in p or "?" in p or "[" in p # More robust glob check
|
|
134
|
+
|
|
135
|
+
try:
|
|
136
|
+
if is_glob:
|
|
137
|
+
# fnmatch expects relative paths for matching within a root usually,
|
|
138
|
+
# but here we match against absolute paths in files_set.
|
|
139
|
+
# We need a pattern that works with absolute paths.
|
|
140
|
+
# If pattern 'p' is like '*.py', we need to match '/path/to/root/**/*.py'
|
|
141
|
+
# Let's adjust the pattern logic or filtering logic.
|
|
142
|
+
|
|
143
|
+
# Option 1: Match relative paths within the root
|
|
144
|
+
# Convert absolute paths in files_set to relative for matching
|
|
145
|
+
# relative_files = [os.path.relpath(f, self.root) for f in current_files]
|
|
146
|
+
# matched_relative = fnmatch.filter(relative_files, p)
|
|
147
|
+
# out.update(os.path.join(self.root, rel_f) for rel_f in matched_relative)
|
|
148
|
+
|
|
149
|
+
# Option 2: Match absolute paths directly (might need careful pattern construction)
|
|
150
|
+
# If p is relative, make it absolute based on root for matching
|
|
151
|
+
# Example: p = "src/*.py" -> effective_pattern = "/path/to/root/src/*.py"
|
|
152
|
+
# This requires fnmatch to handle absolute paths correctly or custom logic.
|
|
153
|
+
|
|
154
|
+
# Option 3: Simplified wildcard matching on absolute paths
|
|
155
|
+
# Treat '*' as a general wildcard anywhere in the path.
|
|
156
|
+
# fnmatch.filter might work if the pattern is constructed like `*pattern*`
|
|
157
|
+
# Let's stick to the user's original logic first, assuming it worked for their case
|
|
158
|
+
# The original `*{p}*` suggests substring matching with wildcards? Let's refine.
|
|
159
|
+
|
|
160
|
+
# Refined Glob Matching:
|
|
161
|
+
# If p contains wildcards, assume it's a glob pattern relative to root.
|
|
162
|
+
# Convert files_set paths to relative for matching.
|
|
163
|
+
for f_abs in current_files:
|
|
164
|
+
f_rel = os.path.relpath(f_abs, self.root)
|
|
165
|
+
if fnmatch.fnmatch(f_rel, p) or fnmatch.fnmatch(os.path.basename(f_abs), p):
|
|
166
|
+
out.add(f_abs)
|
|
167
|
+
|
|
168
|
+
else:
|
|
169
|
+
# Exact or substring matching for non-glob patterns
|
|
170
|
+
# Match against filename or full path segment
|
|
171
|
+
p_lower = p.lower()
|
|
172
|
+
for f_abs in current_files:
|
|
173
|
+
if p_lower in os.path.basename(f_abs).lower() or p_lower in f_abs.lower():
|
|
174
|
+
out.add(f_abs)
|
|
175
|
+
|
|
176
|
+
except Exception as e:
|
|
177
|
+
logger.error(f"Error during pattern matching for '{p}': {e}", exc_info=True)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
result = sorted(list(out)) # Sort for consistent output
|
|
181
|
+
logger.debug(f"Query returned {len(result)} files.")
|
|
182
|
+
return result
|
|
183
|
+
|
|
184
|
+
# Helper function (optional, could be integrated into get_instance)
|
|
185
|
+
def initialize_cache(root_path: str):
|
|
186
|
+
"""Initializes the DirectoryCache singleton."""
|
|
187
|
+
try:
|
|
188
|
+
DirectoryCache.get_instance(root_path)
|
|
189
|
+
logger.info("DirectoryCache initialized successfully.")
|
|
190
|
+
except Exception as e:
|
|
191
|
+
logger.error(f"Failed to initialize DirectoryCache: {e}", exc_info=True)
|
|
192
|
+
|