auto-coder 0.1.268__tar.gz → 0.1.270__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 (183) hide show
  1. {auto_coder-0.1.268 → auto_coder-0.1.270}/PKG-INFO +2 -2
  2. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/auto_coder.egg-info/PKG-INFO +2 -2
  3. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/auto_coder.egg-info/SOURCES.txt +3 -0
  4. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/auto_coder.egg-info/requires.txt +2 -0
  5. auto_coder-0.1.270/src/autocoder/agent/auto_learn_from_commit.py +209 -0
  6. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/auto_coder.py +4 -0
  7. auto_coder-0.1.268/src/autocoder/chat_auto_coder.py → auto_coder-0.1.270/src/autocoder/auto_coder_runner.py +52 -469
  8. auto_coder-0.1.270/src/autocoder/chat_auto_coder.py +488 -0
  9. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/commands/auto_command.py +23 -33
  10. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/__init__.py +6 -2
  11. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/auto_coder_lang.py +21 -4
  12. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/auto_configure.py +41 -30
  13. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_modification_ranker.py +55 -11
  14. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/command_templates.py +2 -3
  15. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/context_pruner.py +214 -14
  16. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/conversation_pruner.py +11 -10
  17. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/entry.py +44 -22
  18. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/index.py +1 -1
  19. auto_coder-0.1.270/src/autocoder/utils/auto_project_type.py +120 -0
  20. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/model_provider_selector.py +23 -23
  21. auto_coder-0.1.270/src/autocoder/version.py +1 -0
  22. auto_coder-0.1.268/src/autocoder/version.py +0 -1
  23. {auto_coder-0.1.268 → auto_coder-0.1.270}/LICENSE +0 -0
  24. {auto_coder-0.1.268 → auto_coder-0.1.270}/README.md +0 -0
  25. {auto_coder-0.1.268 → auto_coder-0.1.270}/setup.cfg +0 -0
  26. {auto_coder-0.1.268 → auto_coder-0.1.270}/setup.py +0 -0
  27. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  28. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/auto_coder.egg-info/entry_points.txt +0 -0
  29. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/auto_coder.egg-info/top_level.txt +0 -0
  30. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/__init__.py +0 -0
  31. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/__init__.py +0 -0
  32. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  33. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/auto_filegroup.py +0 -0
  34. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/auto_guess_query.py +0 -0
  35. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/auto_review_commit.py +0 -0
  36. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/auto_tool.py +0 -0
  37. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/coder.py +0 -0
  38. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/designer.py +0 -0
  39. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/planner.py +0 -0
  40. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/agent/project_reader.py +0 -0
  41. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/auto_coder_rag.py +0 -0
  42. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
  43. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/auto_coder_rag_mcp.py +0 -0
  44. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/auto_coder_server.py +0 -0
  45. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/benchmark.py +0 -0
  46. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/chat/__init__.py +0 -0
  47. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/chat_auto_coder_lang.py +0 -0
  48. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/command_args.py +0 -0
  49. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/commands/__init__.py +0 -0
  50. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/commands/tools.py +0 -0
  51. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/JupyterClient.py +0 -0
  52. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/ShellClient.py +0 -0
  53. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/anything2images.py +0 -0
  54. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/anything2img.py +0 -0
  55. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/audio.py +0 -0
  56. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/buildin_tokenizer.py +0 -0
  57. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/chunk_validation.py +0 -0
  58. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/cleaner.py +0 -0
  59. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_execute.py +0 -0
  60. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_generate.py +0 -0
  61. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  62. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  63. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  64. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_merge.py +0 -0
  65. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  66. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  67. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  68. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/command_completer.py +0 -0
  69. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/command_generator.py +0 -0
  70. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/conf_import_export.py +0 -0
  71. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/conf_validator.py +0 -0
  72. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/const.py +0 -0
  73. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/files.py +0 -0
  74. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/git_utils.py +0 -0
  75. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/global_cancel.py +0 -0
  76. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/image_to_page.py +0 -0
  77. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/index_import_export.py +0 -0
  78. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/interpreter.py +0 -0
  79. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/llm_rerank.py +0 -0
  80. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/mcp_hub.py +0 -0
  81. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/mcp_server.py +0 -0
  82. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  83. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  84. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/mcp_tools.py +0 -0
  85. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/memory_manager.py +0 -0
  86. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/model_speed_test.py +0 -0
  87. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/printer.py +0 -0
  88. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/recall_validation.py +0 -0
  89. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/result_manager.py +0 -0
  90. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/screenshots.py +0 -0
  91. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/search.py +0 -0
  92. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/search_replace.py +0 -0
  93. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/shells.py +0 -0
  94. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/stats_panel.py +0 -0
  95. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/sys_prompt.py +0 -0
  96. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/text.py +0 -0
  97. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/types.py +0 -0
  98. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  99. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/data/byzerllm.md +0 -0
  100. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/data/tokenizer.json +0 -0
  101. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/db/__init__.py +0 -0
  102. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/db/store.py +0 -0
  103. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/dispacher/__init__.py +0 -0
  104. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/dispacher/actions/__init__.py +0 -0
  105. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/dispacher/actions/action.py +0 -0
  106. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/dispacher/actions/copilot.py +0 -0
  107. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  108. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  109. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  110. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/__init__.py +0 -0
  111. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/filter/__init__.py +0 -0
  112. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/filter/normal_filter.py +0 -0
  113. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/filter/quick_filter.py +0 -0
  114. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/for_command.py +0 -0
  115. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/symbols_utils.py +0 -0
  116. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/index/types.py +0 -0
  117. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/lang.py +0 -0
  118. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/models.py +0 -0
  119. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/privacy/__init__.py +0 -0
  120. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/privacy/model_filter.py +0 -0
  121. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/pyproject/__init__.py +0 -0
  122. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/__init__.py +0 -0
  123. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/api_server.py +0 -0
  124. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/cache/__init__.py +0 -0
  125. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/cache/base_cache.py +0 -0
  126. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  127. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  128. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/cache/simple_cache.py +0 -0
  129. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/doc_filter.py +0 -0
  130. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/document_retriever.py +0 -0
  131. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/llm_wrapper.py +0 -0
  132. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/loaders/__init__.py +0 -0
  133. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  134. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  135. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  136. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  137. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/long_context_rag.py +0 -0
  138. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/rag_config.py +0 -0
  139. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/rag_entry.py +0 -0
  140. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/raw_rag.py +0 -0
  141. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/relevant_utils.py +0 -0
  142. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/simple_directory_reader.py +0 -0
  143. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/simple_rag.py +0 -0
  144. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/stream_event/__init__.py +0 -0
  145. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  146. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/stream_event/types.py +0 -0
  147. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/token_checker.py +0 -0
  148. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/token_counter.py +0 -0
  149. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/token_limiter.py +0 -0
  150. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/types.py +0 -0
  151. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/utils.py +0 -0
  152. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/rag/variable_holder.py +0 -0
  153. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/regexproject/__init__.py +0 -0
  154. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/suffixproject/__init__.py +0 -0
  155. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/tsproject/__init__.py +0 -0
  156. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/__init__.py +0 -0
  157. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/_markitdown.py +0 -0
  158. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  159. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  160. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  161. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/conversation_store.py +0 -0
  162. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  163. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/llms.py +0 -0
  164. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/log_capture.py +0 -0
  165. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/multi_turn.py +0 -0
  166. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/operate_config_api.py +0 -0
  167. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/print_table.py +0 -0
  168. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/project_structure.py +0 -0
  169. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/queue_communicate.py +0 -0
  170. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/request_event_queue.py +0 -0
  171. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/request_queue.py +0 -0
  172. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/rest.py +0 -0
  173. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/tests.py +0 -0
  174. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/thread_utils.py +0 -0
  175. {auto_coder-0.1.268 → auto_coder-0.1.270}/src/autocoder/utils/types.py +0 -0
  176. {auto_coder-0.1.268 → auto_coder-0.1.270}/tests/test_action_regex_project.py +0 -0
  177. {auto_coder-0.1.268 → auto_coder-0.1.270}/tests/test_chat_auto_coder.py +0 -0
  178. {auto_coder-0.1.268 → auto_coder-0.1.270}/tests/test_code_auto_merge_editblock.py +0 -0
  179. {auto_coder-0.1.268 → auto_coder-0.1.270}/tests/test_command_completer.py +0 -0
  180. {auto_coder-0.1.268 → auto_coder-0.1.270}/tests/test_planner.py +0 -0
  181. {auto_coder-0.1.268 → auto_coder-0.1.270}/tests/test_privacy.py +0 -0
  182. {auto_coder-0.1.268 → auto_coder-0.1.270}/tests/test_queue_communicate.py +0 -0
  183. {auto_coder-0.1.268 → auto_coder-0.1.270}/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.268
3
+ Version: 0.1.270
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -58,7 +58,7 @@ Requires-Dist: pydub
58
58
  Requires-Dist: youtube-transcript-api
59
59
  Requires-Dist: SpeechRecognition
60
60
  Requires-Dist: pathvalidate
61
- Requires-Dist: mcp
61
+ Requires-Dist: mcp; python_version >= "3.10"
62
62
 
63
63
  <p align="center">
64
64
  <picture>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.268
3
+ Version: 0.1.270
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -58,7 +58,7 @@ Requires-Dist: pydub
58
58
  Requires-Dist: youtube-transcript-api
59
59
  Requires-Dist: SpeechRecognition
60
60
  Requires-Dist: pathvalidate
61
- Requires-Dist: mcp
61
+ Requires-Dist: mcp; python_version >= "3.10"
62
62
 
63
63
  <p align="center">
64
64
  <picture>
@@ -12,6 +12,7 @@ src/autocoder/auto_coder.py
12
12
  src/autocoder/auto_coder_rag.py
13
13
  src/autocoder/auto_coder_rag_client_mcp.py
14
14
  src/autocoder/auto_coder_rag_mcp.py
15
+ src/autocoder/auto_coder_runner.py
15
16
  src/autocoder/auto_coder_server.py
16
17
  src/autocoder/benchmark.py
17
18
  src/autocoder/chat_auto_coder.py
@@ -24,6 +25,7 @@ src/autocoder/agent/__init__.py
24
25
  src/autocoder/agent/auto_demand_organizer.py
25
26
  src/autocoder/agent/auto_filegroup.py
26
27
  src/autocoder/agent/auto_guess_query.py
28
+ src/autocoder/agent/auto_learn_from_commit.py
27
29
  src/autocoder/agent/auto_review_commit.py
28
30
  src/autocoder/agent/auto_tool.py
29
31
  src/autocoder/agent/coder.py
@@ -148,6 +150,7 @@ src/autocoder/suffixproject/__init__.py
148
150
  src/autocoder/tsproject/__init__.py
149
151
  src/autocoder/utils/__init__.py
150
152
  src/autocoder/utils/_markitdown.py
153
+ src/autocoder/utils/auto_project_type.py
151
154
  src/autocoder/utils/conversation_store.py
152
155
  src/autocoder/utils/llm_client_interceptors.py
153
156
  src/autocoder/utils/llms.py
@@ -48,4 +48,6 @@ pydub
48
48
  youtube-transcript-api
49
49
  SpeechRecognition
50
50
  pathvalidate
51
+
52
+ [:python_version >= "3.10"]
51
53
  mcp
@@ -0,0 +1,209 @@
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
+ import hashlib
12
+
13
+
14
+ def load_yaml_config(yaml_file: str) -> Dict:
15
+ """加载YAML配置文件"""
16
+ try:
17
+ with open(yaml_file, 'r', encoding='utf-8') as f:
18
+ return yaml.safe_load(f)
19
+ except Exception as e:
20
+ printer = Printer()
21
+ printer.print_in_terminal("yaml_load_error", style="red", yaml_file=yaml_file, error=str(e))
22
+ return {}
23
+
24
+
25
+ class AutoLearnFromCommit:
26
+ def __init__(self, llm: Union[byzerllm.ByzerLLM,byzerllm.SimpleByzerLLM],
27
+ args:AutoCoderArgs,
28
+ skip_diff: bool = False,
29
+ console: Optional[Console] = None):
30
+ """
31
+ 初始化 AutoLearnFromCommit
32
+
33
+ Args:
34
+ llm: ByzerLLM 实例,用于代码学习
35
+ project_dir: 项目根目录
36
+ skip_diff: 是否跳过获取 diff 信息
37
+ """
38
+ self.project_dir = args.source_dir
39
+ self.actions_dir = os.path.join(args.source_dir, "actions")
40
+ self.llm = llm
41
+ self.skip_diff = skip_diff
42
+ self.console = console or Console()
43
+
44
+ @byzerllm.prompt()
45
+ def learn(self, querie_with_urls_and_changes: List[Tuple[str, List[str], Dict[str, Tuple[str, str]]]], query: str) -> Generator[str,None,None]:
46
+ """
47
+ 请根据下面的代码变更,总结出通用的代码调整模式,以帮助实现类似的需求。
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
+ 1. 代码调整模式:描述为了实现这个目标,通常需要对代码做出哪些通用调整
83
+ 2. 关键修改点:指出本次提交中最关键或最具代表性的修改点
84
+ 3. 潜在扩展:基于这些修改,未来类似需求可能需要进行哪些扩展
85
+ 4. 注意事项:在实现类似功能时需要注意哪些问题
86
+
87
+ 总结要求:
88
+ 1. 总结应该抽象化,不要局限于具体实现细节
89
+ 2. 对于每个模式都应该提供明确的适用场景
90
+ 3. 应该考虑代码的可维护性和可扩展性
91
+ 4. 应该指出在不同技术栈或框架下的通用性
92
+ """
93
+ pass
94
+
95
+ def parse_history_tasks(self) -> List[Dict]:
96
+ """
97
+ 解析历史任务信息
98
+
99
+ Returns:
100
+ List[Dict]: 每个字典包含一个历史任务的信息
101
+ """
102
+ # 获取所有YAML文件
103
+ action_files = [
104
+ f for f in os.listdir(self.actions_dir)
105
+ if f[:3].isdigit() and "_" in f and f.endswith('.yml')
106
+ ]
107
+
108
+ # 按序号排序
109
+ def get_seq(name):
110
+ return int(name.split("_")[0])
111
+
112
+ # 获取最新的action文件列表
113
+ action_files = sorted(action_files, key=get_seq)
114
+ action_files.reverse()
115
+
116
+ action_file = action_files[0]
117
+
118
+ querie_with_urls_and_changes = []
119
+ repo = git.Repo(self.project_dir)
120
+
121
+ # 收集所有query、urls和对应的文件变化
122
+ for yaml_file in [action_file]:
123
+ yaml_path = os.path.join(self.actions_dir, yaml_file)
124
+ config = load_yaml_config(yaml_path)
125
+
126
+ if not config:
127
+ continue
128
+
129
+ query = config.get('query', '')
130
+ urls = config.get('urls', [])
131
+
132
+ if query:
133
+ changes = {}
134
+ if not self.skip_diff:
135
+ # 计算文件的MD5用于匹配commit
136
+ with open(yaml_path, 'r', encoding='utf-8') as f:
137
+ yaml_content = f.read()
138
+ file_md5 = hashlib.md5(yaml_content.encode("utf-8")).hexdigest()
139
+ response_id = f"auto_coder_{yaml_file}_{file_md5}"
140
+ # 查找对应的commit
141
+ try:
142
+ for commit in repo.iter_commits():
143
+ if response_id in commit.message:
144
+ if commit.parents:
145
+ parent = commit.parents[0]
146
+ # 获取所有文件的前后内容
147
+ for diff_item in parent.diff(commit):
148
+ file_path = diff_item.a_path if diff_item.a_path else diff_item.b_path
149
+
150
+ # 获取变更前内容
151
+ before_content = None
152
+ try:
153
+ if diff_item.a_blob:
154
+ before_content = repo.git.show(f"{parent.hexsha}:{file_path}")
155
+ except git.exc.GitCommandError:
156
+ pass # 文件可能是新增的
157
+
158
+ # 获取变更后内容
159
+ after_content = None
160
+ try:
161
+ if diff_item.b_blob:
162
+ after_content = repo.git.show(f"{commit.hexsha}:{file_path}")
163
+ except git.exc.GitCommandError:
164
+ pass # 文件可能被删除
165
+
166
+ changes[file_path] = (before_content, after_content)
167
+ break
168
+ except git.exc.GitCommandError as e:
169
+ printer = Printer()
170
+ printer.print_in_terminal("git_command_error", style="red", error=str(e))
171
+ except Exception as e:
172
+ printer = Printer()
173
+ printer.print_in_terminal("get_commit_changes_error", style="red", error=str(e))
174
+
175
+ querie_with_urls_and_changes.append((query, urls, changes))
176
+
177
+ return querie_with_urls_and_changes
178
+
179
+
180
+ def learn_from_commit(self,query: str, conversations: List[Dict]) -> Generator[str,None,None]:
181
+ """
182
+ 从最新的代码提交中学习通用模式
183
+
184
+ Returns:
185
+ Optional[Generator]: 学习结果生成器,如果出错则返回None
186
+ """
187
+ printer = Printer()
188
+ # 获取最新的提交信息
189
+ changes = self.parse_history_tasks()
190
+ if not changes:
191
+ printer.print_in_terminal("no_latest_commit", style="red")
192
+ return None
193
+
194
+ # 调用LLM进行代码学习
195
+ try:
196
+ # 获取 prompt 内容
197
+ query = self.learn.prompt(changes, query)
198
+ new_conversations = conversations.copy()[0:-1]
199
+ new_conversations.append({"role": "user", "content": query})
200
+ # 构造对话消息
201
+ v = stream_chat_with_continue(
202
+ llm=self.llm,
203
+ conversations=new_conversations,
204
+ llm_config={}
205
+ )
206
+ return v
207
+ except Exception as e:
208
+ printer.print_in_terminal("code_learn_error", style="red", error=str(e))
209
+ return None
@@ -1339,6 +1339,10 @@ def main(input_args: Optional[List[str]] = None):
1339
1339
  from autocoder.agent.auto_review_commit import AutoReviewCommit
1340
1340
  reviewer = AutoReviewCommit(llm=chat_llm, args=args)
1341
1341
  v = reviewer.review_commit(query=args.query,conversations=loaded_conversations)
1342
+ elif "learn_from_commit" in args.action:
1343
+ from autocoder.agent.auto_learn_from_commit import AutoLearnFromCommit
1344
+ learner = AutoLearnFromCommit(llm=chat_llm, args=args)
1345
+ v = learner.learn_from_commit(query=args.query,conversations=loaded_conversations)
1342
1346
  else:
1343
1347
  # 预估token数量
1344
1348
  estimated_input_tokens = count_tokens(json.dumps(loaded_conversations, ensure_ascii=False))