auto-coder 0.1.273__tar.gz → 0.1.275__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 (185) hide show
  1. {auto_coder-0.1.273 → auto_coder-0.1.275}/PKG-INFO +1 -1
  2. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/auto_coder_rag.py +30 -5
  4. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/auto_coder_runner.py +1 -1
  5. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/chat_auto_coder.py +3 -0
  6. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/commands/auto_command.py +3 -1
  7. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/__init__.py +1 -0
  8. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_merge.py +1 -2
  9. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_merge_diff.py +1 -1
  10. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_merge_editblock.py +2 -1
  11. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_merge_strict_diff.py +3 -1
  12. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/command_generator.py +3 -1
  13. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/git_utils.py +7 -3
  14. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/shells.py +23 -1
  15. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/index.py +81 -2
  16. auto_coder-0.1.275/src/autocoder/rag/cache/base_cache.py +29 -0
  17. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/cache/byzer_storage_cache.py +74 -47
  18. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/utils.py +1 -1
  19. auto_coder-0.1.275/src/autocoder/version.py +1 -0
  20. auto_coder-0.1.273/src/autocoder/rag/cache/base_cache.py +0 -14
  21. auto_coder-0.1.273/src/autocoder/version.py +0 -1
  22. {auto_coder-0.1.273 → auto_coder-0.1.275}/LICENSE +0 -0
  23. {auto_coder-0.1.273 → auto_coder-0.1.275}/README.md +0 -0
  24. {auto_coder-0.1.273 → auto_coder-0.1.275}/setup.cfg +0 -0
  25. {auto_coder-0.1.273 → auto_coder-0.1.275}/setup.py +0 -0
  26. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/auto_coder.egg-info/SOURCES.txt +0 -0
  27. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  28. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/auto_coder.egg-info/entry_points.txt +0 -0
  29. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/auto_coder.egg-info/requires.txt +0 -0
  30. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/auto_coder.egg-info/top_level.txt +0 -0
  31. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/__init__.py +0 -0
  32. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/__init__.py +0 -0
  33. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  34. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/auto_filegroup.py +0 -0
  35. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/auto_guess_query.py +0 -0
  36. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  37. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/auto_review_commit.py +0 -0
  38. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/auto_tool.py +0 -0
  39. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/coder.py +0 -0
  40. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/designer.py +0 -0
  41. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/planner.py +0 -0
  42. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/agent/project_reader.py +0 -0
  43. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/auto_coder.py +0 -0
  44. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
  45. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/auto_coder_rag_mcp.py +0 -0
  46. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/auto_coder_server.py +0 -0
  47. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/benchmark.py +0 -0
  48. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/chat/__init__.py +0 -0
  49. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/chat_auto_coder_lang.py +0 -0
  50. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/command_args.py +0 -0
  51. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/commands/__init__.py +0 -0
  52. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/commands/tools.py +0 -0
  53. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/JupyterClient.py +0 -0
  54. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/ShellClient.py +0 -0
  55. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/anything2images.py +0 -0
  56. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/anything2img.py +0 -0
  57. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/audio.py +0 -0
  58. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/auto_coder_lang.py +0 -0
  59. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/auto_configure.py +0 -0
  60. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/buildin_tokenizer.py +0 -0
  61. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/chunk_validation.py +0 -0
  62. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/cleaner.py +0 -0
  63. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_execute.py +0 -0
  64. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_generate.py +0 -0
  65. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  66. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  67. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  68. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/code_modification_ranker.py +0 -0
  69. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/command_completer.py +0 -0
  70. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/command_templates.py +0 -0
  71. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/conf_import_export.py +0 -0
  72. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/conf_validator.py +0 -0
  73. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/const.py +0 -0
  74. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/context_pruner.py +0 -0
  75. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/conversation_pruner.py +0 -0
  76. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/files.py +0 -0
  77. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/global_cancel.py +0 -0
  78. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/image_to_page.py +0 -0
  79. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/index_import_export.py +0 -0
  80. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/interpreter.py +0 -0
  81. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/llm_rerank.py +0 -0
  82. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/mcp_hub.py +0 -0
  83. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/mcp_server.py +0 -0
  84. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  85. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  86. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/mcp_tools.py +0 -0
  87. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/memory_manager.py +0 -0
  88. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/model_speed_test.py +0 -0
  89. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/printer.py +0 -0
  90. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/recall_validation.py +0 -0
  91. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/result_manager.py +0 -0
  92. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/screenshots.py +0 -0
  93. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/search.py +0 -0
  94. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/search_replace.py +0 -0
  95. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/stats_panel.py +0 -0
  96. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/sys_prompt.py +0 -0
  97. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/text.py +0 -0
  98. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/types.py +0 -0
  99. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  100. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/data/byzerllm.md +0 -0
  101. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/data/tokenizer.json +0 -0
  102. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/db/__init__.py +0 -0
  103. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/db/store.py +0 -0
  104. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/dispacher/__init__.py +0 -0
  105. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/dispacher/actions/__init__.py +0 -0
  106. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/dispacher/actions/action.py +0 -0
  107. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/dispacher/actions/copilot.py +0 -0
  108. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  109. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  110. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  111. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/__init__.py +0 -0
  112. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/entry.py +0 -0
  113. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/filter/__init__.py +0 -0
  114. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/filter/normal_filter.py +0 -0
  115. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/filter/quick_filter.py +0 -0
  116. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/for_command.py +0 -0
  117. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/symbols_utils.py +0 -0
  118. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/index/types.py +0 -0
  119. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/lang.py +0 -0
  120. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/models.py +0 -0
  121. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/privacy/__init__.py +0 -0
  122. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/privacy/model_filter.py +0 -0
  123. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/pyproject/__init__.py +0 -0
  124. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/__init__.py +0 -0
  125. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/api_server.py +0 -0
  126. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/cache/__init__.py +0 -0
  127. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  128. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/cache/simple_cache.py +0 -0
  129. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/doc_filter.py +0 -0
  130. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/document_retriever.py +0 -0
  131. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/llm_wrapper.py +0 -0
  132. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/loaders/__init__.py +0 -0
  133. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  134. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  135. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  136. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  137. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/long_context_rag.py +0 -0
  138. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/rag_config.py +0 -0
  139. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/rag_entry.py +0 -0
  140. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/raw_rag.py +0 -0
  141. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/relevant_utils.py +0 -0
  142. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/simple_directory_reader.py +0 -0
  143. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/simple_rag.py +0 -0
  144. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/stream_event/__init__.py +0 -0
  145. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  146. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/stream_event/types.py +0 -0
  147. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/token_checker.py +0 -0
  148. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/token_counter.py +0 -0
  149. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/token_limiter.py +0 -0
  150. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/token_limiter_utils.py +0 -0
  151. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/types.py +0 -0
  152. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/rag/variable_holder.py +0 -0
  153. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/regexproject/__init__.py +0 -0
  154. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/suffixproject/__init__.py +0 -0
  155. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/tsproject/__init__.py +0 -0
  156. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/__init__.py +0 -0
  157. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/_markitdown.py +0 -0
  158. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  159. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  160. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/auto_project_type.py +0 -0
  161. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  162. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/conversation_store.py +0 -0
  163. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  164. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/llms.py +0 -0
  165. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/log_capture.py +0 -0
  166. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/model_provider_selector.py +0 -0
  167. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/multi_turn.py +0 -0
  168. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/operate_config_api.py +0 -0
  169. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/print_table.py +0 -0
  170. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/project_structure.py +0 -0
  171. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/queue_communicate.py +0 -0
  172. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/request_event_queue.py +0 -0
  173. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/request_queue.py +0 -0
  174. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/rest.py +0 -0
  175. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/tests.py +0 -0
  176. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/thread_utils.py +0 -0
  177. {auto_coder-0.1.273 → auto_coder-0.1.275}/src/autocoder/utils/types.py +0 -0
  178. {auto_coder-0.1.273 → auto_coder-0.1.275}/tests/test_action_regex_project.py +0 -0
  179. {auto_coder-0.1.273 → auto_coder-0.1.275}/tests/test_chat_auto_coder.py +0 -0
  180. {auto_coder-0.1.273 → auto_coder-0.1.275}/tests/test_code_auto_merge_editblock.py +0 -0
  181. {auto_coder-0.1.273 → auto_coder-0.1.275}/tests/test_command_completer.py +0 -0
  182. {auto_coder-0.1.273 → auto_coder-0.1.275}/tests/test_planner.py +0 -0
  183. {auto_coder-0.1.273 → auto_coder-0.1.275}/tests/test_privacy.py +0 -0
  184. {auto_coder-0.1.273 → auto_coder-0.1.275}/tests/test_queue_communicate.py +0 -0
  185. {auto_coder-0.1.273 → auto_coder-0.1.275}/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.273
3
+ Version: 0.1.275
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.273
3
+ Version: 0.1.275
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -17,6 +17,7 @@ import shlex
17
17
  from rich.console import Console
18
18
  from rich.table import Table
19
19
  import os
20
+ import hashlib
20
21
  from loguru import logger
21
22
  import asyncio
22
23
  from datetime import datetime
@@ -32,6 +33,21 @@ if platform.system() == "Windows":
32
33
  init()
33
34
 
34
35
 
36
+ def generate_unique_name_from_path(path: str) -> str:
37
+ """
38
+ Generate a unique name (MD5 hash) from a path after normalizing it.
39
+ For Linux/Unix systems, trailing path separators are removed.
40
+ """
41
+ if not path:
42
+ return ""
43
+
44
+ # Normalize the path (resolve absolute path and remove trailing separators)
45
+ normalized_path = os.path.normpath(os.path.abspath(path))
46
+
47
+ # Generate MD5 hash from the normalized path
48
+ return hashlib.md5(normalized_path.encode("utf-8")).hexdigest()
49
+
50
+
35
51
  def initialize_system(args):
36
52
  if args.product_mode == "lite":
37
53
  return
@@ -491,6 +507,10 @@ def main(input_args: Optional[List[str]] = None):
491
507
  }
492
508
  )
493
509
 
510
+ # Generate unique name for RAG build if doc_dir exists
511
+ if server_args.doc_dir:
512
+ auto_coder_args.rag_build_name = generate_unique_name_from_path(server_args.doc_dir)
513
+ logger.info(f"Generated RAG build name: {auto_coder_args.rag_build_name}")
494
514
 
495
515
  if auto_coder_args.enable_hybrid_index and args.product_mode == "lite":
496
516
  raise Exception("Hybrid index is not supported in lite mode")
@@ -500,7 +520,7 @@ def main(input_args: Optional[List[str]] = None):
500
520
  try:
501
521
  from byzerllm.apps.byzer_storage.simple_api import ByzerStorage
502
522
 
503
- storage = ByzerStorage("byzerai_store", "rag", "files")
523
+ storage = ByzerStorage("byzerai_store", "rag", auto_coder_args.rag_build_name)
504
524
  storage.retrieval.cluster_info("byzerai_store")
505
525
  except Exception as e:
506
526
  logger.error(
@@ -611,6 +631,7 @@ def main(input_args: Optional[List[str]] = None):
611
631
 
612
632
  if server_args.doc_dir:
613
633
  auto_coder_args.rag_type = "simple"
634
+ auto_coder_args.rag_build_name = generate_unique_name_from_path(server_args.doc_dir)
614
635
  rag = RAGFactory.get_rag(
615
636
  llm=llm,
616
637
  args=auto_coder_args,
@@ -618,6 +639,7 @@ def main(input_args: Optional[List[str]] = None):
618
639
  tokenizer_path=server_args.tokenizer_path,
619
640
  )
620
641
  else:
642
+ auto_coder_args.rag_build_name = generate_unique_name_from_path("")
621
643
  rag = RAGFactory.get_rag(llm=llm, args=auto_coder_args, path="")
622
644
 
623
645
  llm_wrapper = LLWrapper(llm=llm, rag=rag)
@@ -636,10 +658,7 @@ def main(input_args: Optional[List[str]] = None):
636
658
  logger.warning(f"Failed to save service info: {str(e)}")
637
659
 
638
660
  serve(llm=llm_wrapper, args=server_args)
639
- elif args.command == "build_hybrid_index":
640
- if not args.quick:
641
- initialize_system()
642
-
661
+ elif args.command == "build_hybrid_index":
643
662
  auto_coder_args = AutoCoderArgs(
644
663
  **{
645
664
  arg: getattr(args, arg)
@@ -648,6 +667,11 @@ def main(input_args: Optional[List[str]] = None):
648
667
  }
649
668
  )
650
669
 
670
+ # Generate unique name for RAG build if doc_dir exists
671
+ if args.doc_dir:
672
+ auto_coder_args.rag_build_name = generate_unique_name_from_path(args.doc_dir)
673
+ logger.info(f"Generated RAG build name: {auto_coder_args.rag_build_name}")
674
+
651
675
  auto_coder_args.enable_hybrid_index = True
652
676
  auto_coder_args.rag_type = "simple"
653
677
 
@@ -675,6 +699,7 @@ def main(input_args: Optional[List[str]] = None):
675
699
  return
676
700
  llm.setup_default_emb_model_name("emb")
677
701
 
702
+ auto_coder_args.rag_build_name = generate_unique_name_from_path(args.doc_dir)
678
703
  rag = RAGFactory.get_rag(
679
704
  llm=llm,
680
705
  args=auto_coder_args,
@@ -1384,7 +1384,7 @@ def commit(query: str):
1384
1384
  md5 = hashlib.md5(file_content.encode("utf-8")).hexdigest()
1385
1385
  file_name = os.path.basename(execute_file)
1386
1386
  commit_result = git_utils.commit_changes(
1387
- ".", f"auto_coder_{file_name}_{md5}\n{commit_message}"
1387
+ ".", f"{commit_message}\nauto_coder_{file_name}_{md5}"
1388
1388
  )
1389
1389
  git_utils.print_commit_info(commit_result=commit_result)
1390
1390
  if commit_message:
@@ -309,6 +309,9 @@ def main():
309
309
  text = voice_input()
310
310
  new_prompt = "/coding " + text
311
311
 
312
+ elif user_input.startswith("/clear") or user_input.startswith("/cls"):
313
+ print("\033c")
314
+
312
315
  elif user_input.startswith("/add_files"):
313
316
  args = user_input[len("/add_files"):].strip().split()
314
317
  add_files(args)
@@ -175,6 +175,7 @@ class CommandAutoTuner:
175
175
  Python版本: {{ env_info.python_version }}
176
176
  终端类型: {{ env_info.shell_type }}
177
177
  终端编码: {{ env_info.shell_encoding }}
178
+ 当前用户: {{ current_user }}
178
179
 
179
180
  {%- if shell_type %}
180
181
  脚本类型:{{ shell_type }}
@@ -284,7 +285,8 @@ class CommandAutoTuner:
284
285
  "shell_type": shell_type,
285
286
  "shell_encoding": shells.get_terminal_encoding(),
286
287
  "conversation_safe_zone_tokens": self.args.conversation_prune_safe_zone_tokens,
287
- "os_distribution": shells.get_os_distribution()
288
+ "os_distribution": shells.get_os_distribution(),
289
+ "current_user": shells.get_current_username()
288
290
  }
289
291
 
290
292
  @byzerllm.prompt()
@@ -320,6 +320,7 @@ class AutoCoderArgs(pydantic.BaseModel):
320
320
 
321
321
  monitor_mode: bool = False
322
322
  enable_hybrid_index: bool = False
323
+ rag_build_name: Optional[str] = None
323
324
  disable_auto_window: bool = False
324
325
  filter_batch_size: Optional[int] = 5
325
326
  disable_segment_reorder: bool = False
@@ -1,4 +1,3 @@
1
-
2
1
  import os
3
2
  from byzerllm.utils.client import code_utils
4
3
  from autocoder.common import AutoCoderArgs, git_utils
@@ -197,5 +196,5 @@ class CodeAutoMerge:
197
196
 
198
197
  self.printer.print_in_terminal("files_merged", total=total)
199
198
  if not force_skip_git and not self.args.skip_commit:
200
- commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}\n{self.args.query}")
199
+ commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}_{md5}")
201
200
  git_utils.print_commit_info(commit_result=commit_result)
@@ -579,7 +579,7 @@ class CodeAutoMergeDiff:
579
579
 
580
580
  self.printer.print_in_terminal("files_merged_total", total=total)
581
581
  if not force_skip_git and not self.args.skip_commit:
582
- commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}\n{self.args.query}")
582
+ commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}_{md5}")
583
583
  git_utils.print_commit_info(commit_result=commit_result)
584
584
  else:
585
585
  # Print edits for review
@@ -425,7 +425,8 @@ class CodeAutoMergeEditBlock:
425
425
  if not force_skip_git and not self.args.skip_commit:
426
426
  try:
427
427
  commit_result = git_utils.commit_changes(
428
- self.args.source_dir, f"auto_coder_{file_name}_{md5}\n{self.args.query}"
428
+ self.args.source_dir,
429
+ f"{self.args.query}\nauto_coder_{file_name}_{md5}",
429
430
  )
430
431
  git_utils.print_commit_info(commit_result=commit_result)
431
432
  except Exception as e:
@@ -285,7 +285,9 @@ class CodeAutoMergeStrictDiff:
285
285
 
286
286
  self.printer.print_in_terminal("files_merged_total", total=total)
287
287
  if not force_skip_git and not self.args.skip_commit:
288
- commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}\n{self.args.query}")
288
+ commit_result = git_utils.commit_changes(
289
+ self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}_{md5}"
290
+ )
289
291
  git_utils.print_commit_info(commit_result=commit_result)
290
292
  else:
291
293
  # Print diff blocks for review
@@ -16,6 +16,7 @@ def _generate_shell_script(user_input: str) -> str:
16
16
  Python版本: {{ env_info.python_version }}
17
17
  终端类型: {{ env_info.shell_type }}
18
18
  终端编码: {{ env_info.shell_encoding }}
19
+ 当前用户: {{ current_user }}
19
20
 
20
21
  {%- if shell_type %}
21
22
  脚本类型:{{ shell_type }}
@@ -51,7 +52,8 @@ def _generate_shell_script(user_input: str) -> str:
51
52
  "env_info": env_info,
52
53
  "shell_type": shell_type,
53
54
  "shell_encoding": shells.get_terminal_encoding(),
54
- "os_distribution": shells.get_os_distribution()
55
+ "os_distribution": shells.get_os_distribution(),
56
+ "current_user": shells.get_current_username()
55
57
  }
56
58
 
57
59
 
@@ -118,7 +118,8 @@ def revert_changes(repo_path: str, message: str) -> bool:
118
118
  return False
119
119
 
120
120
  # 通过message定位到commit_hash
121
- commit = repo.git.log("--all", f"--grep={message}", "--format=%H", "-n", "1")
121
+ # --grep 默认只搜索第一行 -F 参数将搜索模式视为固定字符串而非正则表达式
122
+ commit = repo.git.log("--all", f"--grep={message}", "-F", "--format=%H", "-n", "1")
122
123
  if not commit:
123
124
  logger.warning(f"No commit found with message: {message}")
124
125
  return False
@@ -170,7 +171,8 @@ def revert_change(repo_path: str, message: str) -> bool:
170
171
  repo = get_repo(repo_path)
171
172
  if repo is None:
172
173
  return False
173
- commit = repo.git.log("--all", f"--grep={message}", "--format=%H", "-n", "1")
174
+ # --grep 默认只搜索第一行 -F 参数将搜索模式视为固定字符串而非正则表达式
175
+ commit = repo.git.log("--all", f"--grep={message}", "-F", "--format=%H", "-n", "1")
174
176
  if commit:
175
177
  repo.git.revert(commit, no_edit=True)
176
178
  logger.info(f"Reverted changes with commit message: {message}")
@@ -618,7 +620,9 @@ def generate_commit_message(changes_report: str) -> str:
618
620
  def get_commit_by_message(repo_path: str, message: str):
619
621
  repo = get_repo(repo_path)
620
622
  try:
621
- commit_hash = repo.git.log("--all", f"--grep={message}", "--format=%H", "-n", "1")
623
+ commit_hash = repo.git.log(
624
+ "--all", f"--grep={message}", "-F", "--format=%H", "-n", "1"
625
+ )
622
626
  if not commit_hash:
623
627
  return None
624
628
  return repo.commit(commit_hash.strip())
@@ -10,6 +10,7 @@ from rich.console import Console
10
10
  from rich.panel import Panel
11
11
  from rich.text import Text
12
12
  from rich.live import Live
13
+ import getpass
13
14
 
14
15
  from autocoder.common.result_manager import ResultManager
15
16
 
@@ -547,4 +548,25 @@ set PYTHONIOENCODING=utf-8
547
548
  try:
548
549
  os.unlink(temp_file.name)
549
550
  except Exception:
550
- pass
551
+ pass
552
+
553
+ def get_current_username():
554
+ """
555
+ Get the current username across different operating systems.
556
+
557
+ Returns:
558
+ str: The current username.
559
+ """
560
+ try:
561
+ # getpass.getuser() works on Windows, macOS, and Linux
562
+ username = getpass.getuser()
563
+ return username
564
+ except Exception:
565
+ # Fallback methods if getpass.getuser() fails
566
+ try:
567
+ if platform.system() == 'Windows':
568
+ return os.environ.get('USERNAME', '')
569
+ else: # macOS/Linux
570
+ return os.environ.get('USER', '')
571
+ except Exception:
572
+ return ''
@@ -157,6 +157,78 @@ class IndexManager:
157
157
  3. 用途的长度不能超过100字符
158
158
  4. 导入语句的分隔符为^^
159
159
 
160
+ 一些根据指定条件需要遵守的特殊规则:
161
+ - 当你遇到文件.jsp文件, 导入语句中需要包含 jsp:include 标签中的文件
162
+
163
+ 下面是一段示例:
164
+
165
+ ## 输入
166
+ 下列是文件 /test.py 的源码:
167
+
168
+ import os
169
+ import time
170
+ from loguru import logger
171
+ import byzerllm
172
+
173
+ a = ""
174
+
175
+ @byzerllm.prompt(render="jinja")
176
+ def auto_implement_function_template(instruction:str, content:str)->str:
177
+
178
+ ## 输出
179
+ 用途:主要用于提供自动实现函数模板的功能。
180
+ 函数:auto_implement_function_template
181
+ 变量:a
182
+ 类:
183
+ 导入语句:import os^^import time^^from loguru import logger^^import byzerllm
184
+
185
+ 现在,让我们开始一个新的任务:
186
+
187
+ ## 输入
188
+ 下列是文件 {{ path }} 的源码:
189
+
190
+ {{ code }}
191
+
192
+ ## 输出
193
+ """
194
+
195
+ @byzerllm.prompt()
196
+ def jsp_get_all_file_symbols(self, path: str, code: str) -> str:
197
+ """
198
+ 你的目标是从给定的jsp代码中获取代码里的符号,需要获取的符号类型包括:
199
+
200
+ 1. 函数
201
+ 2. 类
202
+ 3. 变量
203
+ 4. 所有导入语句
204
+
205
+ 如果没有任何符号,返回空字符串就行。
206
+ 如果有符号,按如下格式返回:
207
+
208
+ ```
209
+ 用途:主要用于提供自动实现函数模板的功能。
210
+ {符号类型}: {符号名称}, {符号名称}, ...
211
+ ```
212
+
213
+ 注意:
214
+ 1. 直接输出结果,不要尝试使用任何代码
215
+ 2. 不要分析代码的内容和目的
216
+ 3. 用途的长度不能超过100字符
217
+ 4. 导入语句的分隔符为^^
218
+ 5. 导入语句中需要包含 jsp:include 整个标签,类似 <jsp:include page="/jspf/prelude.jspf" />
219
+ 6. 导入语句中需要包含 form 标签,类似 <form name="ActionPlanLinkedForm" action="/ri/ActionPlanController.do" method="post">
220
+ 7. 导入语句中需要包含 有 src 属性的 script 标签。比如 <script language="script" src="xxx">
221
+ 8. 导入语句中需要包含 有 src 属性的 link 标签。 比如 <link rel="stylesheet" type="text/css" href="/ri/ui/styles/xptheme.css">
222
+ 9. 导入语句中需要包含 ajax 请求里的url,比如 $.ajax({
223
+ type : "post",
224
+ url : "admWorkingDay!updateAdmWorkingDayList.action", 中,那么对应的为 <ajax method="post" url="admWorkingDay!updateAdmWorkingDayList.action">
225
+ 10. 导入语句中需要包含超连接,比如 <a href="admRiskLimits!queryAdmRiskLimitsById.action?admRiskLimits.id=${fn:escapeXml(item.id)}">${fn:escapeXml(item.classification)}, 对应的为 <a href="admRiskLimits!queryAdmRiskLimitsById.action"}
226
+ 11. 导入语句中需要包含一些js函数里的值,比如 window.onbeforeunload = function() {
227
+ var actionType = document.ap_ActionPlanForm.action.value;
228
+ if(typeof(window.opener.reloadApCount)!="undefined"&&(actionType&&actionType!='Discard')){
229
+ }
230
+ } 对应为 <window.onbeforeunload url="from 表单名字为ap_ActionPlanForm的action的值">
231
+
160
232
  下面是一段示例:
161
233
 
162
234
  ## 输入
@@ -291,8 +363,15 @@ class IndexManager:
291
363
  symbols = "\n".join(symbols)
292
364
  else:
293
365
  meta_holder = byzerllm.MetaHolder()
294
- symbols = self.get_all_file_symbols.with_llm(
295
- self.index_llm).with_meta(meta_holder).run(source.module_name, source_code)
366
+ ext = os.path.splitext(file_path)[1].lower()
367
+ ## 需要有特殊prompt
368
+ if ext == ".jsp":
369
+ symbols = self.jsp_get_all_file_symbols.with_llm(
370
+ self.index_llm).with_meta(meta_holder).run(source.module_name, source_code)
371
+ else:
372
+ symbols = self.get_all_file_symbols.with_llm(
373
+ self.index_llm).with_meta(meta_holder).run(source.module_name, source_code)
374
+
296
375
  time.sleep(self.anti_quota_limit)
297
376
 
298
377
  if meta_holder.get_meta():
@@ -0,0 +1,29 @@
1
+ from pydantic import BaseModel
2
+ from typing import List, Tuple,Dict,Optional,Any
3
+ from abc import ABC, abstractmethod
4
+
5
+ # New model class for file information
6
+ class FileInfo(BaseModel):
7
+ file_path: str
8
+ relative_path: str
9
+ modify_time: float
10
+ file_md5: str
11
+
12
+ # New model class for cache items
13
+ class CacheItem(BaseModel):
14
+ file_path: str
15
+ relative_path: str
16
+ content: List[Dict[str, Any]] # Serialized SourceCode objects
17
+ modify_time: float
18
+ md5: str
19
+
20
+ class DeleteEvent(BaseModel):
21
+ file_paths: List[str]
22
+
23
+ class AddOrUpdateEvent(BaseModel):
24
+ file_infos: List[FileInfo]
25
+
26
+ class BaseCacheManager(ABC):
27
+ @abstractmethod
28
+ def get_cache(self,options:Optional[Dict[str,Any]]=None) -> Dict[str, Dict]:
29
+ pass