auto-coder 0.1.298__tar.gz → 0.1.300__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 (205) hide show
  1. {auto_coder-0.1.298 → auto_coder-0.1.300}/PKG-INFO +2 -2
  2. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/auto_coder.egg-info/PKG-INFO +2 -2
  3. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/auto_coder.egg-info/SOURCES.txt +3 -0
  4. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/auto_coder.egg-info/requires.txt +1 -1
  5. auto_coder-0.1.300/src/autocoder/agent/auto_learn_from_commit.py +275 -0
  6. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/auto_review_commit.py +106 -16
  7. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/auto_coder.py +65 -66
  8. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/auto_coder_runner.py +23 -40
  9. auto_coder-0.1.300/src/autocoder/command_parser.py +280 -0
  10. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/commands/auto_command.py +112 -33
  11. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/commands/tools.py +170 -10
  12. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/__init__.py +5 -1
  13. auto_coder-0.1.300/src/autocoder/common/action_yml_file_manager.py +367 -0
  14. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/auto_coder_lang.py +8 -2
  15. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/auto_configure.py +6 -0
  16. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/command_completer.py +8 -1
  17. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/memory_manager.py +5 -1
  18. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/entry.py +17 -0
  19. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +111 -17
  20. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/__init__.py +13 -9
  21. auto_coder-0.1.300/src/autocoder/version.py +1 -0
  22. auto_coder-0.1.300/tests/test_action_yml_file_manager.py +134 -0
  23. auto_coder-0.1.298/src/autocoder/agent/auto_learn_from_commit.py +0 -209
  24. auto_coder-0.1.298/src/autocoder/version.py +0 -1
  25. {auto_coder-0.1.298 → auto_coder-0.1.300}/LICENSE +0 -0
  26. {auto_coder-0.1.298 → auto_coder-0.1.300}/README.md +0 -0
  27. {auto_coder-0.1.298 → auto_coder-0.1.300}/setup.cfg +0 -0
  28. {auto_coder-0.1.298 → auto_coder-0.1.300}/setup.py +0 -0
  29. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  30. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/auto_coder.egg-info/entry_points.txt +0 -0
  31. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/auto_coder.egg-info/top_level.txt +0 -0
  32. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/__init__.py +0 -0
  33. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/__init__.py +0 -0
  34. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  35. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/auto_filegroup.py +0 -0
  36. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/auto_guess_query.py +0 -0
  37. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/auto_tool.py +0 -0
  38. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/coder.py +0 -0
  39. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/designer.py +0 -0
  40. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/planner.py +0 -0
  41. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/agent/project_reader.py +0 -0
  42. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/auto_coder_rag.py +0 -0
  43. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/auto_coder_server.py +0 -0
  44. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/benchmark.py +0 -0
  45. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/chat/__init__.py +0 -0
  46. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/chat_auto_coder.py +0 -0
  47. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/chat_auto_coder_lang.py +0 -0
  48. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/command_args.py +0 -0
  49. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/commands/__init__.py +0 -0
  50. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/commands/auto_web.py +0 -0
  51. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/JupyterClient.py +0 -0
  52. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/ShellClient.py +0 -0
  53. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/anything2images.py +0 -0
  54. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/anything2img.py +0 -0
  55. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/audio.py +0 -0
  56. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/buildin_tokenizer.py +0 -0
  57. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/chunk_validation.py +0 -0
  58. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/cleaner.py +0 -0
  59. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_execute.py +0 -0
  60. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_generate.py +0 -0
  61. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  62. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  63. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  64. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_merge.py +0 -0
  65. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  66. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  67. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  68. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/code_modification_ranker.py +0 -0
  69. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/command_generator.py +0 -0
  70. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/command_templates.py +0 -0
  71. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/computer_use.py +0 -0
  72. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/conf_import_export.py +0 -0
  73. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/conf_validator.py +0 -0
  74. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/const.py +0 -0
  75. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/context_pruner.py +0 -0
  76. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/conversation_pruner.py +0 -0
  77. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/files.py +0 -0
  78. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/git_utils.py +0 -0
  79. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/global_cancel.py +0 -0
  80. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/image_to_page.py +0 -0
  81. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/index_import_export.py +0 -0
  82. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/interpreter.py +0 -0
  83. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/llm_rerank.py +0 -0
  84. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/mcp_hub.py +0 -0
  85. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/mcp_server.py +0 -0
  86. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  87. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  88. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  89. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/mcp_tools.py +0 -0
  90. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/model_speed_test.py +0 -0
  91. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/printer.py +0 -0
  92. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/recall_validation.py +0 -0
  93. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/result_manager.py +0 -0
  94. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/screenshots.py +0 -0
  95. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/search.py +0 -0
  96. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/search_replace.py +0 -0
  97. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/shells.py +0 -0
  98. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/stats_panel.py +0 -0
  99. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/sys_prompt.py +0 -0
  100. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/text.py +0 -0
  101. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/types.py +0 -0
  102. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  103. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/data/byzerllm.md +0 -0
  104. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/data/tokenizer.json +0 -0
  105. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/db/__init__.py +0 -0
  106. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/db/store.py +0 -0
  107. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/dispacher/__init__.py +0 -0
  108. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/dispacher/actions/__init__.py +0 -0
  109. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/dispacher/actions/action.py +0 -0
  110. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/dispacher/actions/copilot.py +0 -0
  111. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  112. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  113. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  114. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/__init__.py +0 -0
  115. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/filter/__init__.py +0 -0
  116. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/filter/normal_filter.py +0 -0
  117. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/filter/quick_filter.py +0 -0
  118. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/for_command.py +0 -0
  119. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/index.py +0 -0
  120. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/symbols_utils.py +0 -0
  121. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/index/types.py +0 -0
  122. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/lang.py +0 -0
  123. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/models.py +0 -0
  124. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/plugins/__init__.py +0 -0
  125. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  126. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  127. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/plugins/sample_plugin.py +0 -0
  128. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  129. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/plugins/utils.py +0 -0
  130. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/privacy/__init__.py +0 -0
  131. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/privacy/model_filter.py +0 -0
  132. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/pyproject/__init__.py +0 -0
  133. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/__init__.py +0 -0
  134. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/api_server.py +0 -0
  135. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/__init__.py +0 -0
  136. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/base_cache.py +0 -0
  137. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  138. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  139. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  140. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  141. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  142. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/cache/simple_cache.py +0 -0
  143. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/conversation_to_queries.py +0 -0
  144. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/doc_filter.py +0 -0
  145. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/document_retriever.py +0 -0
  146. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/lang.py +0 -0
  147. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/llm_wrapper.py +0 -0
  148. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/loaders/__init__.py +0 -0
  149. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  150. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  151. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  152. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  153. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/long_context_rag.py +0 -0
  154. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  155. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/rag_config.py +0 -0
  156. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/rag_entry.py +0 -0
  157. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/raw_rag.py +0 -0
  158. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/relevant_utils.py +0 -0
  159. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/searchable.py +0 -0
  160. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/simple_directory_reader.py +0 -0
  161. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/simple_rag.py +0 -0
  162. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/stream_event/__init__.py +0 -0
  163. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  164. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/stream_event/types.py +0 -0
  165. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/token_checker.py +0 -0
  166. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/token_counter.py +0 -0
  167. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/token_limiter.py +0 -0
  168. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/token_limiter_utils.py +0 -0
  169. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/types.py +0 -0
  170. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/utils.py +0 -0
  171. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/rag/variable_holder.py +0 -0
  172. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/regexproject/__init__.py +0 -0
  173. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/suffixproject/__init__.py +0 -0
  174. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/tsproject/__init__.py +0 -0
  175. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/_markitdown.py +0 -0
  176. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  177. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  178. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/auto_project_type.py +0 -0
  179. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  180. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/conversation_store.py +0 -0
  181. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  182. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/llms.py +0 -0
  183. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/log_capture.py +0 -0
  184. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/model_provider_selector.py +0 -0
  185. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/multi_turn.py +0 -0
  186. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/operate_config_api.py +0 -0
  187. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/print_table.py +0 -0
  188. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/project_structure.py +0 -0
  189. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/queue_communicate.py +0 -0
  190. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/request_event_queue.py +0 -0
  191. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/request_queue.py +0 -0
  192. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/rest.py +0 -0
  193. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/stream_thinking.py +0 -0
  194. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/tests.py +0 -0
  195. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/thread_utils.py +0 -0
  196. {auto_coder-0.1.298 → auto_coder-0.1.300}/src/autocoder/utils/types.py +0 -0
  197. {auto_coder-0.1.298 → auto_coder-0.1.300}/tests/test_action_regex_project.py +0 -0
  198. {auto_coder-0.1.298 → auto_coder-0.1.300}/tests/test_chat_auto_coder.py +0 -0
  199. {auto_coder-0.1.298 → auto_coder-0.1.300}/tests/test_code_auto_merge_editblock.py +0 -0
  200. {auto_coder-0.1.298 → auto_coder-0.1.300}/tests/test_command_completer.py +0 -0
  201. {auto_coder-0.1.298 → auto_coder-0.1.300}/tests/test_planner.py +0 -0
  202. {auto_coder-0.1.298 → auto_coder-0.1.300}/tests/test_plugins.py +0 -0
  203. {auto_coder-0.1.298 → auto_coder-0.1.300}/tests/test_privacy.py +0 -0
  204. {auto_coder-0.1.298 → auto_coder-0.1.300}/tests/test_queue_communicate.py +0 -0
  205. {auto_coder-0.1.298 → auto_coder-0.1.300}/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.298
3
+ Version: 0.1.300
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -27,7 +27,7 @@ Requires-Dist: jupyter_client
27
27
  Requires-Dist: prompt-toolkit
28
28
  Requires-Dist: tokenizers
29
29
  Requires-Dist: aiofiles
30
- Requires-Dist: byzerllm[saas]>=0.1.176
30
+ Requires-Dist: byzerllm[saas]>=0.1.177
31
31
  Requires-Dist: patch
32
32
  Requires-Dist: diff_match_patch
33
33
  Requires-Dist: GitPython
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.298
3
+ Version: 0.1.300
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -27,7 +27,7 @@ Requires-Dist: jupyter_client
27
27
  Requires-Dist: prompt-toolkit
28
28
  Requires-Dist: tokenizers
29
29
  Requires-Dist: aiofiles
30
- Requires-Dist: byzerllm[saas]>=0.1.176
30
+ Requires-Dist: byzerllm[saas]>=0.1.177
31
31
  Requires-Dist: patch
32
32
  Requires-Dist: diff_match_patch
33
33
  Requires-Dist: GitPython
@@ -16,6 +16,7 @@ src/autocoder/benchmark.py
16
16
  src/autocoder/chat_auto_coder.py
17
17
  src/autocoder/chat_auto_coder_lang.py
18
18
  src/autocoder/command_args.py
19
+ src/autocoder/command_parser.py
19
20
  src/autocoder/lang.py
20
21
  src/autocoder/models.py
21
22
  src/autocoder/version.py
@@ -38,6 +39,7 @@ src/autocoder/commands/tools.py
38
39
  src/autocoder/common/JupyterClient.py
39
40
  src/autocoder/common/ShellClient.py
40
41
  src/autocoder/common/__init__.py
42
+ src/autocoder/common/action_yml_file_manager.py
41
43
  src/autocoder/common/anything2images.py
42
44
  src/autocoder/common/anything2img.py
43
45
  src/autocoder/common/audio.py
@@ -188,6 +190,7 @@ src/autocoder/utils/auto_coder_utils/__init__.py
188
190
  src/autocoder/utils/auto_coder_utils/chat_stream_out.py
189
191
  src/autocoder/utils/chat_auto_coder_utils/__init__.py
190
192
  tests/test_action_regex_project.py
193
+ tests/test_action_yml_file_manager.py
191
194
  tests/test_chat_auto_coder.py
192
195
  tests/test_code_auto_merge_editblock.py
193
196
  tests/test_command_completer.py
@@ -17,7 +17,7 @@ jupyter_client
17
17
  prompt-toolkit
18
18
  tokenizers
19
19
  aiofiles
20
- byzerllm[saas]>=0.1.176
20
+ byzerllm[saas]>=0.1.177
21
21
  patch
22
22
  diff_match_patch
23
23
  GitPython
@@ -0,0 +1,275 @@
1
+ from typing import Generator, List, Dict, Union, Tuple, Optional
2
+ import os
3
+ import yaml
4
+ import byzerllm
5
+ import pydantic
6
+ import git
7
+ from rich.console import Console
8
+ from autocoder.common.printer import Printer
9
+ from autocoder.common import AutoCoderArgs
10
+ from autocoder.common.utils_code_auto_generate import stream_chat_with_continue
11
+ from autocoder.common.action_yml_file_manager import ActionYmlFileManager
12
+ import hashlib
13
+
14
+
15
+ def load_yaml_config(yaml_file: str) -> Dict:
16
+ """加载YAML配置文件"""
17
+ try:
18
+ with open(yaml_file, 'r', encoding='utf-8') as f:
19
+ return yaml.safe_load(f)
20
+ except Exception as e:
21
+ printer = Printer()
22
+ printer.print_in_terminal("yaml_load_error", style="red", yaml_file=yaml_file, error=str(e))
23
+ return {}
24
+
25
+
26
+ class AutoLearnFromCommit:
27
+ def __init__(self, llm: Union[byzerllm.ByzerLLM,byzerllm.SimpleByzerLLM],
28
+ args:AutoCoderArgs,
29
+ skip_diff: bool = False,
30
+ console: Optional[Console] = None):
31
+ """
32
+ 初始化 AutoLearnFromCommit
33
+
34
+ Args:
35
+ llm: ByzerLLM 实例,用于代码学习
36
+ project_dir: 项目根目录
37
+ skip_diff: 是否跳过获取 diff 信息
38
+ """
39
+ self.project_dir = args.source_dir
40
+ self.actions_dir = os.path.join(args.source_dir, "actions")
41
+ self.llm = llm
42
+ self.skip_diff = skip_diff
43
+ self.console = console or Console()
44
+ self.action_manager = ActionYmlFileManager(args.source_dir)
45
+
46
+ @byzerllm.prompt()
47
+ def learn(self, querie_with_urls_and_changes: List[Tuple[str, List[str], Dict[str, Tuple[str, str]]]], query: str) -> Generator[str,None,None]:
48
+ """
49
+ 下面是触发这次代码变更的原始任务需求:
50
+ <goal>
51
+ {{ query }}
52
+ </goal>
53
+
54
+ 下面是本次提交的代码变更:
55
+ <changes>
56
+ {% for query,urls,changes in querie_with_urls_and_changes %}
57
+ ## 原始的任务需求
58
+ {{ query }}
59
+
60
+ 修改的文件:
61
+ {% for url in urls %}
62
+ - {{ url }}
63
+ {% endfor %}
64
+
65
+ 代码变更:
66
+ {% for file_path, (before, after) in changes.items() %}
67
+ ##File: {{ file_path }}
68
+ ##修改前:
69
+
70
+ {{ before or "New file" }}
71
+
72
+ ##File: {{ file_path }}
73
+ ##修改后:
74
+
75
+ {{ after or "File deleted" }}
76
+
77
+ {% endfor %}
78
+ {% endfor %}
79
+ </changes>
80
+
81
+ 你的目标是,总结出这次修改重现步骤,要尽可能详细,达到当用户重新提交相同的需求,系统可以根据你这个流程,可以重新实现这一次修改。
82
+
83
+ 在描述中,如果涉及到文件请用如下示例的格式:
84
+ @src/autocoder/utils/_markitdown.py
85
+ 如果涉及到符号,比如函数名,变量名,类名等等,请用如下示例的格式:
86
+ @@DocxConverter(location: src/autocoder/utils/_markitdown.py)
87
+
88
+ """
89
+ pass
90
+
91
+ def parse_history_tasks(self, commit_file_name: Optional[str] = None) -> List[Dict]:
92
+ """
93
+ 解析历史任务信息
94
+
95
+ Returns:
96
+ List[Dict]: 每个字典包含一个历史任务的信息
97
+ """
98
+ # 使用 ActionManager 获取文件
99
+ if commit_file_name:
100
+ action_file = commit_file_name
101
+ else:
102
+ action_file = self.action_manager.get_latest_action_file()
103
+ if not action_file:
104
+ return []
105
+
106
+ querie_with_urls_and_changes = []
107
+ repo = git.Repo(self.project_dir)
108
+
109
+ # 收集所有query、urls和对应的文件变化
110
+ yaml_content = self.action_manager.load_yaml_content(action_file)
111
+
112
+ if not yaml_content:
113
+ return []
114
+
115
+ query = yaml_content.get('query', '')
116
+ urls = yaml_content.get('urls', [])
117
+
118
+ if query:
119
+ changes = {}
120
+ if not self.skip_diff:
121
+ # 使用 ActionManager 获取 commit ID
122
+ commit_id = self.action_manager.get_commit_id_from_file(action_file)
123
+ if commit_id:
124
+ try:
125
+ for commit in repo.iter_commits():
126
+ if commit_id in commit.message:
127
+ if commit.parents:
128
+ parent = commit.parents[0]
129
+ # 获取所有文件的前后内容
130
+ for diff_item in parent.diff(commit):
131
+ file_path = diff_item.a_path if diff_item.a_path else diff_item.b_path
132
+
133
+ # 获取变更前内容
134
+ before_content = None
135
+ try:
136
+ if diff_item.a_blob:
137
+ before_content = repo.git.show(f"{parent.hexsha}:{file_path}")
138
+ except git.exc.GitCommandError:
139
+ pass # 文件可能是新增的
140
+
141
+ # 获取变更后内容
142
+ after_content = None
143
+ try:
144
+ if diff_item.b_blob:
145
+ after_content = repo.git.show(f"{commit.hexsha}:{file_path}")
146
+ except git.exc.GitCommandError:
147
+ pass # 文件可能被删除
148
+
149
+ changes[file_path] = (before_content, after_content)
150
+ break
151
+ except git.exc.GitCommandError as e:
152
+ printer = Printer()
153
+ printer.print_in_terminal("git_command_error", style="red", error=str(e))
154
+ except Exception as e:
155
+ printer = Printer()
156
+ printer.print_in_terminal("get_commit_changes_error", style="red", error=str(e))
157
+
158
+ querie_with_urls_and_changes.append((query, urls, changes))
159
+
160
+ return querie_with_urls_and_changes,action_file
161
+
162
+ def get_commit_changes(self, commit_id: str) -> List[Tuple[str, List[str], Dict[str, Tuple[str, str]]]]:
163
+ """
164
+ 直接从Git仓库获取指定commit的变更
165
+
166
+ Args:
167
+ commit_id: Git commit的ID
168
+
169
+ Returns:
170
+ List[Tuple[str, List[str], Dict[str, Tuple[str, str]]]]: 与parse_history_tasks格式相同的结果
171
+ """
172
+ printer = Printer()
173
+ querie_with_urls_and_changes = []
174
+ changes = {}
175
+ modified_files = []
176
+ query = f"Review commit: {commit_id}"
177
+
178
+ try:
179
+ repo = git.Repo(self.project_dir)
180
+ commit = repo.commit(commit_id)
181
+
182
+ if not commit.parents:
183
+ # 这是首次提交
184
+ printer.print_in_terminal("commit_is_initial", style="yellow", commit_id=commit_id)
185
+ # 获取首次提交的所有文件
186
+ for item in commit.tree.traverse():
187
+ if item.type == 'blob': # 只处理文件,不处理目录
188
+ file_path = item.path
189
+ modified_files.append(file_path)
190
+ # 首次提交前没有内容
191
+ before_content = None
192
+ # 获取提交后的内容
193
+ after_content = repo.git.show(f"{commit.hexsha}:{file_path}")
194
+ changes[file_path] = (before_content, after_content)
195
+ else:
196
+ # 获取parent commit
197
+ parent = commit.parents[0]
198
+ # 获取变更的文件列表
199
+ for diff_item in parent.diff(commit):
200
+ file_path = diff_item.a_path if diff_item.a_path else diff_item.b_path
201
+ modified_files.append(file_path)
202
+
203
+ # 获取变更前内容
204
+ before_content = None
205
+ try:
206
+ if diff_item.a_blob:
207
+ before_content = repo.git.show(f"{parent.hexsha}:{file_path}")
208
+ except git.exc.GitCommandError:
209
+ pass # 文件可能是新增的
210
+
211
+ # 获取变更后内容
212
+ after_content = None
213
+ try:
214
+ if diff_item.b_blob:
215
+ after_content = repo.git.show(f"{commit.hexsha}:{file_path}")
216
+ except git.exc.GitCommandError:
217
+ pass # 文件可能被删除
218
+
219
+ changes[file_path] = (before_content, after_content)
220
+
221
+ # 使用commit消息作为查询内容
222
+ query = commit.message
223
+ querie_with_urls_and_changes.append((query, modified_files, changes))
224
+
225
+ except git.exc.GitCommandError as e:
226
+ printer.print_in_terminal("git_command_error", style="red", error=str(e))
227
+ except Exception as e:
228
+ printer.print_in_terminal("get_commit_changes_error", style="red", error=str(e))
229
+
230
+ return querie_with_urls_and_changes,None
231
+
232
+ def learn_from_commit(self,query: str, conversations: List[Dict],commit_id: Optional[str] = None) -> Generator[str,None,None]:
233
+ """
234
+ 从最新的代码提交中学习通用模式
235
+
236
+ Args:
237
+ query: 用户的查询/要求
238
+ conversations: 之前的对话历史
239
+ commit_id: 可选的指定commit ID,如果提供则直接学习该commit
240
+
241
+ Returns:
242
+ Optional[Generator]: 学习结果生成器,如果出错则返回None
243
+ """
244
+ printer = Printer()
245
+ commit_file_name = None
246
+ if commit_id:
247
+ # 使用 ActionManager 从 commit ID 获取文件名
248
+ commit_file_name = self.action_manager.get_file_name_from_commit_id(commit_id)
249
+
250
+ if not commit_file_name:
251
+ raise ValueError(printer.get_message_from_key_with_format("no_commit_file_name", commit_id=commit_id))
252
+
253
+ # 获取最新的提交信息
254
+ changes,tmp_file_name = self.parse_history_tasks(commit_file_name=commit_file_name)
255
+ commit_file_name = tmp_file_name
256
+ if not changes:
257
+ printer.print_in_terminal("no_latest_commit", style="red")
258
+ return None, None
259
+
260
+ # 调用LLM进行代码学习
261
+ try:
262
+ # 获取 prompt 内容
263
+ query = self.learn.prompt(changes, query)
264
+ new_conversations = conversations.copy()[0:-1]
265
+ new_conversations.append({"role": "user", "content": query})
266
+ # 构造对话消息
267
+ v = stream_chat_with_continue(
268
+ llm=self.llm,
269
+ conversations=new_conversations,
270
+ llm_config={}
271
+ )
272
+ return v, commit_file_name
273
+ except Exception as e:
274
+ printer.print_in_terminal("code_learn_error", style="red", error=str(e))
275
+ return None, commit_file_name
@@ -116,7 +116,7 @@ class AutoReviewCommit:
116
116
  pass
117
117
 
118
118
 
119
- def parse_history_tasks(self) -> List[Dict]:
119
+ def parse_history_tasks(self,commit_file_name: Optional[str] = None) -> List[Dict]:
120
120
  """
121
121
  解析历史任务信息
122
122
 
@@ -129,14 +129,17 @@ class AutoReviewCommit:
129
129
  if f[:3].isdigit() and "_" in f and f.endswith('.yml')
130
130
  ]
131
131
 
132
- # 按序号排序
133
- def get_seq(name):
134
- return int(name.split("_")[0])
135
-
136
- # 获取最新的action文件列表
137
- action_files = sorted(action_files, key=get_seq)
138
- action_files.reverse()
132
+ if commit_file_name:
133
+ action_files = [f for f in action_files if f == commit_file_name]
134
+ else:
135
+ # 按序号排序
136
+ def get_seq(name):
137
+ return int(name.split("_")[0])
139
138
 
139
+ # 获取最新的action文件列表
140
+ action_files = sorted(action_files, key=get_seq)
141
+ action_files.reverse()
142
+
140
143
  action_file = action_files[0]
141
144
 
142
145
  querie_with_urls_and_changes = []
@@ -200,27 +203,114 @@ class AutoReviewCommit:
200
203
 
201
204
  return querie_with_urls_and_changes
202
205
 
206
+ def get_commit_changes(self, commit_id: str) -> List[Tuple[str, List[str], Dict[str, Tuple[str, str]]]]:
207
+ """
208
+ 直接从Git仓库获取指定commit的变更
203
209
 
204
- def review_commit(self,query: str, conversations: List[Dict]) -> Generator[str,None,None]:
210
+ Args:
211
+ commit_id: Git commit的ID
212
+
213
+ Returns:
214
+ List[Tuple[str, List[str], Dict[str, Tuple[str, str]]]]: 与parse_history_tasks格式相同的结果
205
215
  """
206
- 审查最新的代码提交
216
+ printer = Printer()
217
+ querie_with_urls_and_changes = []
218
+ changes = {}
219
+ modified_files = []
220
+ query = f"Review commit: {commit_id}"
221
+
222
+ try:
223
+ repo = git.Repo(self.project_dir)
224
+ commit = repo.commit(commit_id)
225
+
226
+ if not commit.parents:
227
+ # 这是首次提交
228
+ printer.print_in_terminal("commit_is_initial", style="yellow", commit_id=commit_id)
229
+ # 获取首次提交的所有文件
230
+ for item in commit.tree.traverse():
231
+ if item.type == 'blob': # 只处理文件,不处理目录
232
+ file_path = item.path
233
+ modified_files.append(file_path)
234
+ # 首次提交前没有内容
235
+ before_content = None
236
+ # 获取提交后的内容
237
+ after_content = repo.git.show(f"{commit.hexsha}:{file_path}")
238
+ changes[file_path] = (before_content, after_content)
239
+ else:
240
+ # 获取parent commit
241
+ parent = commit.parents[0]
242
+ # 获取变更的文件列表
243
+ for diff_item in parent.diff(commit):
244
+ file_path = diff_item.a_path if diff_item.a_path else diff_item.b_path
245
+ modified_files.append(file_path)
246
+
247
+ # 获取变更前内容
248
+ before_content = None
249
+ try:
250
+ if diff_item.a_blob:
251
+ before_content = repo.git.show(f"{parent.hexsha}:{file_path}")
252
+ except git.exc.GitCommandError:
253
+ pass # 文件可能是新增的
254
+
255
+ # 获取变更后内容
256
+ after_content = None
257
+ try:
258
+ if diff_item.b_blob:
259
+ after_content = repo.git.show(f"{commit.hexsha}:{file_path}")
260
+ except git.exc.GitCommandError:
261
+ pass # 文件可能被删除
262
+
263
+ changes[file_path] = (before_content, after_content)
264
+
265
+ # 使用commit消息作为查询内容
266
+ query = commit.message
267
+ querie_with_urls_and_changes.append((query, modified_files, changes))
268
+
269
+ except git.exc.GitCommandError as e:
270
+ printer.print_in_terminal("git_command_error", style="red", error=str(e))
271
+ except Exception as e:
272
+ printer.print_in_terminal("get_commit_changes_error", style="red", error=str(e))
273
+
274
+ return querie_with_urls_and_changes
275
+
276
+ def review_commit(self,query: str, conversations: List[Dict],commit_id: Optional[str] = None) -> Generator[str,None,None]:
277
+ """
278
+ 审查代码提交
279
+
280
+ Args:
281
+ query: 用户的查询/要求
282
+ conversations: 之前的对话历史
283
+ commit_id: 可选的指定commit ID,如果提供则直接审查该commit
207
284
 
208
285
  Returns:
209
- Optional[ReviewResult]: 审查结果,如果出错则返回None
286
+ Generator[str,None,None]: 审查结果的生成器
210
287
  """
211
288
  printer = Printer()
212
- # 获取最新的提交信息
213
- changes = self.parse_history_tasks()
289
+ commit_file_name = None
290
+ if commit_id:
291
+ repo = git.Repo(self.project_dir)
292
+ commit = repo.commit(commit_id)
293
+ # auto_coder_000000001926_chat_action.yml_88614d5bd4046a068786c252fbc39c13
294
+ msg = commit.message
295
+ commit_file_info = msg.split("_")[0]
296
+ if commit_file_info.startswith("auto_coder_"):
297
+ commit_file_name = "_".join(msg.split("_",)[0:-1])
298
+
299
+ if not commit_file_name:
300
+ raise ValueError(printer.get_message_from_key_with_format("no_commit_file_name",commit_id=commit_id))
301
+
302
+ changes = self.parse_history_tasks(commit_file_name=commit_file_name)
303
+
214
304
  if not changes:
215
- printer.print_in_terminal("no_latest_commit", style="red")
305
+ printer.print_in_terminal("no_commit_found", style="red")
216
306
  return None
217
307
 
218
308
  # 调用LLM进行代码审查
219
309
  try:
220
310
  # 获取 prompt 内容
221
- query = self.review.prompt(changes, query)
311
+ prompt_content = self.review.prompt(changes, query)
222
312
  new_conversations = conversations.copy()[0:-1]
223
- new_conversations.append({"role": "user", "content": query})
313
+ new_conversations.append({"role": "user", "content": prompt_content})
224
314
  # 构造对话消息
225
315
  v = stream_chat_with_continue(
226
316
  llm=self.llm,