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.

Files changed (306) hide show
  1. {auto_coder-0.1.359 → auto_coder-0.1.360}/PKG-INFO +1 -1
  2. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/SOURCES.txt +3 -0
  4. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_review_commit.py +5 -3
  5. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate.py +21 -0
  6. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate_diff.py +26 -2
  7. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate_editblock.py +25 -0
  8. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_generate_strict_diff.py +26 -1
  9. auto_coder-0.1.360/src/autocoder/common/directory_cache/__init__.py +1 -0
  10. auto_coder-0.1.360/src/autocoder/common/directory_cache/cache.py +192 -0
  11. auto_coder-0.1.360/src/autocoder/common/directory_cache/test_cache.py +190 -0
  12. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/file_monitor/monitor.py +1 -1
  13. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_generate.py +83 -0
  14. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_generate_diff.py +6 -5
  15. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_generate_editblock.py +24 -2
  16. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +25 -3
  17. auto_coder-0.1.360/src/autocoder/version.py +1 -0
  18. auto_coder-0.1.359/src/autocoder/version.py +0 -1
  19. {auto_coder-0.1.359 → auto_coder-0.1.360}/LICENSE +0 -0
  20. {auto_coder-0.1.359 → auto_coder-0.1.360}/README.md +0 -0
  21. {auto_coder-0.1.359 → auto_coder-0.1.360}/setup.cfg +0 -0
  22. {auto_coder-0.1.359 → auto_coder-0.1.360}/setup.py +0 -0
  23. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  24. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/entry_points.txt +0 -0
  25. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/requires.txt +0 -0
  26. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/auto_coder.egg-info/top_level.txt +0 -0
  27. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/__init__.py +0 -0
  28. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/__init__.py +0 -0
  29. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/agentic_filter.py +0 -0
  30. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  31. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_filegroup.py +0 -0
  32. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_guess_query.py +0 -0
  33. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_learn.py +0 -0
  34. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  35. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/auto_tool.py +0 -0
  36. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/coder.py +0 -0
  37. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/designer.py +0 -0
  38. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/planner.py +0 -0
  39. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/agent/project_reader.py +0 -0
  40. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/auto_coder.py +0 -0
  41. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/auto_coder_rag.py +0 -0
  42. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/auto_coder_runner.py +0 -0
  43. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/auto_coder_server.py +0 -0
  44. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/benchmark.py +0 -0
  45. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat/__init__.py +0 -0
  46. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat/conf_command.py +0 -0
  47. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat/models_command.py +0 -0
  48. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat/rules_command.py +0 -0
  49. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat_auto_coder.py +0 -0
  50. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/chat_auto_coder_lang.py +0 -0
  51. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/command_args.py +0 -0
  52. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/command_parser.py +0 -0
  53. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/commands/__init__.py +0 -0
  54. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/commands/auto_command.py +0 -0
  55. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/commands/auto_web.py +0 -0
  56. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/commands/tools.py +0 -0
  57. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/JupyterClient.py +0 -0
  58. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/ShellClient.py +0 -0
  59. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/__init__.py +0 -0
  60. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/action_yml_file_manager.py +0 -0
  61. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/anything2images.py +0 -0
  62. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/anything2img.py +0 -0
  63. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/audio.py +0 -0
  64. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/auto_coder_lang.py +0 -0
  65. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/auto_configure.py +0 -0
  66. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/buildin_tokenizer.py +0 -0
  67. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/chunk_validation.py +0 -0
  68. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/cleaner.py +0 -0
  69. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_execute.py +0 -0
  70. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_merge.py +0 -0
  71. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  72. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  73. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  74. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/code_modification_ranker.py +0 -0
  75. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/command_completer.py +0 -0
  76. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/command_completer_v2.py +0 -0
  77. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/command_generator.py +0 -0
  78. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/command_templates.py +0 -0
  79. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/computer_use.py +0 -0
  80. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conf_import_export.py +0 -0
  81. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conf_utils.py +0 -0
  82. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conf_validator.py +0 -0
  83. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/const.py +0 -0
  84. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/context_pruner.py +0 -0
  85. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversation_pruner.py +0 -0
  86. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversations/__init__.py +0 -0
  87. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversations/compatibility.py +0 -0
  88. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversations/conversation_manager.py +0 -0
  89. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/conversations/example.py +0 -0
  90. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/file_monitor/__init__.py +0 -0
  91. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/files.py +0 -0
  92. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/git_utils.py +0 -0
  93. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/global_cancel.py +0 -0
  94. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/ignorefiles/__init__.py +0 -0
  95. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
  96. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
  97. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/image_to_page.py +0 -0
  98. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/index_import_export.py +0 -0
  99. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/interpreter.py +0 -0
  100. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/llm_rerank.py +0 -0
  101. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_hub.py +0 -0
  102. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_server.py +0 -0
  103. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_server_install.py +0 -0
  104. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_server_types.py +0 -0
  105. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  106. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  107. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  108. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/mcp_tools.py +0 -0
  109. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/memory_manager.py +0 -0
  110. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/model_speed_tester.py +0 -0
  111. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/openai_content.py +0 -0
  112. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/printer.py +0 -0
  113. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/recall_validation.py +0 -0
  114. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/result_manager.py +0 -0
  115. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/rulefiles/__init__.py +0 -0
  116. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/rulefiles/autocoderrules_utils.py +0 -0
  117. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/run_cmd.py +0 -0
  118. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/save_formatted_log.py +0 -0
  119. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/screenshots.py +0 -0
  120. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/search.py +0 -0
  121. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/search_replace.py +0 -0
  122. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/shells.py +0 -0
  123. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/stats_panel.py +0 -0
  124. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/stream_out_type.py +0 -0
  125. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/sys_prompt.py +0 -0
  126. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/test_run_cmd.py +0 -0
  127. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/text.py +0 -0
  128. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/token_cost_caculate.py +0 -0
  129. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/types.py +0 -0
  130. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  131. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/__init__.py +0 -0
  132. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/__init__.py +0 -0
  133. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit.py +0 -0
  134. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
  135. {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
  136. {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
  137. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  138. {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
  139. {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
  140. {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
  141. {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
  142. {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
  143. {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
  144. {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
  145. {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
  146. {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
  147. {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
  148. {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
  149. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_edit_types.py +0 -0
  150. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
  151. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  152. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  153. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  154. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  155. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  156. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  157. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  158. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_manager.py +0 -0
  159. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  160. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/__init__.py +0 -0
  161. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/base_compiler.py +0 -0
  162. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/compiler_config_api.py +0 -0
  163. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  164. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/compiler_factory.py +0 -0
  165. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/java_compiler.py +0 -0
  166. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/models.py +0 -0
  167. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/provided_compiler.py +0 -0
  168. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/python_compiler.py +0 -0
  169. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  170. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/shadow_compiler.py +0 -0
  171. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/compilers/vue_compiler.py +0 -0
  172. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/data/byzerllm.md +0 -0
  173. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/data/tokenizer.json +0 -0
  174. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/db/__init__.py +0 -0
  175. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/db/store.py +0 -0
  176. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/__init__.py +0 -0
  177. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/__init__.py +0 -0
  178. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/action.py +0 -0
  179. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/copilot.py +0 -0
  180. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  181. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  182. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/__init__.py +0 -0
  183. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_content.py +0 -0
  184. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_manager.py +0 -0
  185. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_manager_singleton.py +0 -0
  186. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_store.py +0 -0
  187. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/events/event_types.py +0 -0
  188. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/helper/__init__.py +0 -0
  189. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/helper/project_creator.py +0 -0
  190. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/helper/rag_doc_creator.py +0 -0
  191. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/__init__.py +0 -0
  192. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/entry.py +0 -0
  193. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/filter/__init__.py +0 -0
  194. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/filter/normal_filter.py +0 -0
  195. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/filter/quick_filter.py +0 -0
  196. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/for_command.py +0 -0
  197. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/index.py +0 -0
  198. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/symbols_utils.py +0 -0
  199. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/index/types.py +0 -0
  200. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/lang.py +0 -0
  201. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/__init__.py +0 -0
  202. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/base_linter.py +0 -0
  203. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/linter_factory.py +0 -0
  204. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/models.py +0 -0
  205. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/python_linter.py +0 -0
  206. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/reactjs_linter.py +0 -0
  207. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/shadow_linter.py +0 -0
  208. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/linters/vue_linter.py +0 -0
  209. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/__init__.py +0 -0
  210. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/active_context_manager.py +0 -0
  211. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/active_package.py +0 -0
  212. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/async_processor.py +0 -0
  213. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/memory/directory_mapper.py +0 -0
  214. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/models.py +0 -0
  215. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/__init__.py +0 -0
  216. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  217. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  218. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/sample_plugin.py +0 -0
  219. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  220. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/plugins/utils.py +0 -0
  221. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/privacy/__init__.py +0 -0
  222. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/privacy/model_filter.py +0 -0
  223. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/pyproject/__init__.py +0 -0
  224. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/__init__.py +0 -0
  225. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/api_server.py +0 -0
  226. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/__init__.py +0 -0
  227. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/base_cache.py +0 -0
  228. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  229. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  230. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
  231. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  232. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  233. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  234. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  235. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/cache/simple_cache.py +0 -0
  236. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/conversation_to_queries.py +0 -0
  237. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/doc_filter.py +0 -0
  238. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/document_retriever.py +0 -0
  239. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/lang.py +0 -0
  240. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/llm_wrapper.py +0 -0
  241. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/__init__.py +0 -0
  242. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  243. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  244. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/filter_utils.py +0 -0
  245. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/image_loader.py +0 -0
  246. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  247. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  248. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/loaders/test_image_loader.py +0 -0
  249. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/long_context_rag.py +0 -0
  250. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  251. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/rag_config.py +0 -0
  252. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/rag_entry.py +0 -0
  253. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/raw_rag.py +0 -0
  254. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/relevant_utils.py +0 -0
  255. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/searchable.py +0 -0
  256. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/simple_directory_reader.py +0 -0
  257. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/simple_rag.py +0 -0
  258. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/stream_event/__init__.py +0 -0
  259. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  260. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/stream_event/types.py +0 -0
  261. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/token_checker.py +0 -0
  262. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/token_counter.py +0 -0
  263. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/token_limiter.py +0 -0
  264. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/token_limiter_utils.py +0 -0
  265. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/types.py +0 -0
  266. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/utils.py +0 -0
  267. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/rag/variable_holder.py +0 -0
  268. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/regexproject/__init__.py +0 -0
  269. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/run_context.py +0 -0
  270. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/shadows/__init__.py +0 -0
  271. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/shadows/shadow_manager.py +0 -0
  272. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/suffixproject/__init__.py +0 -0
  273. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/tsproject/__init__.py +0 -0
  274. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/__init__.py +0 -0
  275. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/_markitdown.py +0 -0
  276. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  277. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  278. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/auto_project_type.py +0 -0
  279. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  280. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/conversation_store.py +0 -0
  281. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  282. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/llms.py +0 -0
  283. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/log_capture.py +0 -0
  284. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/model_provider_selector.py +0 -0
  285. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/multi_turn.py +0 -0
  286. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/operate_config_api.py +0 -0
  287. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/print_table.py +0 -0
  288. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/project_structure.py +0 -0
  289. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/queue_communicate.py +0 -0
  290. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/request_event_queue.py +0 -0
  291. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/request_queue.py +0 -0
  292. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/rest.py +0 -0
  293. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/stream_thinking.py +0 -0
  294. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/tests.py +0 -0
  295. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/thread_utils.py +0 -0
  296. {auto_coder-0.1.359 → auto_coder-0.1.360}/src/autocoder/utils/types.py +0 -0
  297. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_action_regex_project.py +0 -0
  298. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_action_yml_file_manager.py +0 -0
  299. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_chat_auto_coder.py +0 -0
  300. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_code_auto_merge_editblock.py +0 -0
  301. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_command_completer.py +0 -0
  302. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_planner.py +0 -0
  303. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_plugins.py +0 -0
  304. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_privacy.py +0 -0
  305. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_queue_communicate.py +0 -0
  306. {auto_coder-0.1.359 → auto_coder-0.1.360}/tests/test_symbols_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.359
3
+ Version: 0.1.360
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.359
3
+ Version: 0.1.360
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -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
- 评审结果包含以下内容(以美观易于阅读的Markdown格式输出):
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)
@@ -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()
@@ -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,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
+