auto-coder 0.1.327__tar.gz → 0.1.329__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 (256) hide show
  1. {auto_coder-0.1.327 → auto_coder-0.1.329}/PKG-INFO +1 -1
  2. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/auto_coder.egg-info/SOURCES.txt +12 -0
  4. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/auto_coder_runner.py +1 -1
  5. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/__init__.py +5 -0
  6. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/auto_coder_lang.py +16 -0
  7. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/stream_out_type.py +3 -0
  8. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_editblock_manager.py +92 -8
  9. auto_coder-0.1.329/src/autocoder/compilers/__init__.py +51 -0
  10. auto_coder-0.1.329/src/autocoder/compilers/base_compiler.py +107 -0
  11. auto_coder-0.1.329/src/autocoder/compilers/compiler_config_api.py +365 -0
  12. auto_coder-0.1.329/src/autocoder/compilers/compiler_config_manager.py +305 -0
  13. auto_coder-0.1.329/src/autocoder/compilers/compiler_factory.py +271 -0
  14. auto_coder-0.1.329/src/autocoder/compilers/java_compiler.py +680 -0
  15. auto_coder-0.1.329/src/autocoder/compilers/models.py +210 -0
  16. auto_coder-0.1.329/src/autocoder/compilers/provided_compiler.py +343 -0
  17. auto_coder-0.1.329/src/autocoder/compilers/python_compiler.py +413 -0
  18. auto_coder-0.1.329/src/autocoder/compilers/reactjs_compiler.py +491 -0
  19. auto_coder-0.1.329/src/autocoder/compilers/shadow_compiler.py +42 -0
  20. auto_coder-0.1.329/src/autocoder/compilers/vue_compiler.py +548 -0
  21. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/memory/active_context_manager.py +3 -3
  22. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/memory/active_package.py +2 -2
  23. auto_coder-0.1.329/src/autocoder/shadows/shadow_manager.py +487 -0
  24. auto_coder-0.1.329/src/autocoder/version.py +1 -0
  25. auto_coder-0.1.327/src/autocoder/shadows/shadow_manager.py +0 -240
  26. auto_coder-0.1.327/src/autocoder/version.py +0 -1
  27. {auto_coder-0.1.327 → auto_coder-0.1.329}/LICENSE +0 -0
  28. {auto_coder-0.1.327 → auto_coder-0.1.329}/README.md +0 -0
  29. {auto_coder-0.1.327 → auto_coder-0.1.329}/setup.cfg +0 -0
  30. {auto_coder-0.1.327 → auto_coder-0.1.329}/setup.py +0 -0
  31. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  32. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/auto_coder.egg-info/entry_points.txt +0 -0
  33. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/auto_coder.egg-info/requires.txt +0 -0
  34. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/auto_coder.egg-info/top_level.txt +0 -0
  35. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/__init__.py +0 -0
  36. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/__init__.py +0 -0
  37. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  38. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/auto_filegroup.py +0 -0
  39. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/auto_guess_query.py +0 -0
  40. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  41. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/auto_review_commit.py +0 -0
  42. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/auto_tool.py +0 -0
  43. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/coder.py +0 -0
  44. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/designer.py +0 -0
  45. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/planner.py +0 -0
  46. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/agent/project_reader.py +0 -0
  47. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/auto_coder.py +0 -0
  48. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/auto_coder_rag.py +0 -0
  49. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/auto_coder_server.py +0 -0
  50. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/benchmark.py +0 -0
  51. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/chat/__init__.py +0 -0
  52. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/chat_auto_coder.py +0 -0
  53. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/chat_auto_coder_lang.py +0 -0
  54. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/command_args.py +0 -0
  55. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/command_parser.py +0 -0
  56. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/commands/__init__.py +0 -0
  57. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/commands/auto_command.py +0 -0
  58. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/commands/auto_web.py +0 -0
  59. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/commands/tools.py +0 -0
  60. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/JupyterClient.py +0 -0
  61. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/ShellClient.py +0 -0
  62. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/action_yml_file_manager.py +0 -0
  63. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/anything2images.py +0 -0
  64. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/anything2img.py +0 -0
  65. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/audio.py +0 -0
  66. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/auto_configure.py +0 -0
  67. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/buildin_tokenizer.py +0 -0
  68. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/chunk_validation.py +0 -0
  69. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/cleaner.py +0 -0
  70. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_execute.py +0 -0
  71. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_generate.py +0 -0
  72. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  73. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  74. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  75. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_merge.py +0 -0
  76. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  77. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  78. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  79. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/code_modification_ranker.py +0 -0
  80. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/command_completer.py +0 -0
  81. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/command_generator.py +0 -0
  82. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/command_templates.py +0 -0
  83. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/computer_use.py +0 -0
  84. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/conf_import_export.py +0 -0
  85. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/conf_validator.py +0 -0
  86. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/const.py +0 -0
  87. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/context_pruner.py +0 -0
  88. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/conversation_pruner.py +0 -0
  89. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/files.py +0 -0
  90. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/git_utils.py +0 -0
  91. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/global_cancel.py +0 -0
  92. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/image_to_page.py +0 -0
  93. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/index_import_export.py +0 -0
  94. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/interpreter.py +0 -0
  95. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/llm_rerank.py +0 -0
  96. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/mcp_hub.py +0 -0
  97. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/mcp_server.py +0 -0
  98. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  99. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  100. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  101. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/mcp_tools.py +0 -0
  102. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/memory_manager.py +0 -0
  103. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/model_speed_test.py +0 -0
  104. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/openai_content.py +0 -0
  105. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/printer.py +0 -0
  106. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/recall_validation.py +0 -0
  107. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/result_manager.py +0 -0
  108. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/screenshots.py +0 -0
  109. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/search.py +0 -0
  110. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/search_replace.py +0 -0
  111. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/shells.py +0 -0
  112. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/stats_panel.py +0 -0
  113. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/sys_prompt.py +0 -0
  114. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/text.py +0 -0
  115. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/token_cost_caculate.py +0 -0
  116. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/types.py +0 -0
  117. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  118. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/__init__.py +0 -0
  119. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  120. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  121. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  122. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  123. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  124. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  125. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  126. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  127. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  128. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_manager.py +0 -0
  129. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  130. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/data/byzerllm.md +0 -0
  131. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/data/tokenizer.json +0 -0
  132. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/db/__init__.py +0 -0
  133. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/db/store.py +0 -0
  134. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/dispacher/__init__.py +0 -0
  135. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/dispacher/actions/__init__.py +0 -0
  136. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/dispacher/actions/action.py +0 -0
  137. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/dispacher/actions/copilot.py +0 -0
  138. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  139. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  140. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/events/__init__.py +0 -0
  141. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/events/event_content.py +0 -0
  142. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/events/event_manager.py +0 -0
  143. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/events/event_manager_singleton.py +0 -0
  144. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/events/event_store.py +0 -0
  145. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/events/event_types.py +0 -0
  146. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/helper/__init__.py +0 -0
  147. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/helper/project_creator.py +0 -0
  148. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/__init__.py +0 -0
  149. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/entry.py +0 -0
  150. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/filter/__init__.py +0 -0
  151. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/filter/normal_filter.py +0 -0
  152. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/filter/quick_filter.py +0 -0
  153. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/for_command.py +0 -0
  154. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/index.py +0 -0
  155. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/symbols_utils.py +0 -0
  156. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/index/types.py +0 -0
  157. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/lang.py +0 -0
  158. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/linters/__init__.py +0 -0
  159. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/linters/base_linter.py +0 -0
  160. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/linters/linter_factory.py +0 -0
  161. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/linters/models.py +0 -0
  162. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/linters/python_linter.py +0 -0
  163. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/linters/reactjs_linter.py +0 -0
  164. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/linters/shadow_linter.py +0 -0
  165. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/linters/vue_linter.py +0 -0
  166. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/memory/__init__.py +0 -0
  167. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/memory/async_processor.py +0 -0
  168. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/memory/directory_mapper.py +0 -0
  169. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/models.py +0 -0
  170. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/plugins/__init__.py +0 -0
  171. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  172. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  173. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/plugins/sample_plugin.py +0 -0
  174. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  175. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/plugins/utils.py +0 -0
  176. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/privacy/__init__.py +0 -0
  177. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/privacy/model_filter.py +0 -0
  178. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/pyproject/__init__.py +0 -0
  179. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/__init__.py +0 -0
  180. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/api_server.py +0 -0
  181. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/__init__.py +0 -0
  182. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/base_cache.py +0 -0
  183. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  184. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  185. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  186. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  187. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  188. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  189. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/cache/simple_cache.py +0 -0
  190. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/conversation_to_queries.py +0 -0
  191. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/doc_filter.py +0 -0
  192. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/document_retriever.py +0 -0
  193. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/lang.py +0 -0
  194. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/llm_wrapper.py +0 -0
  195. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/loaders/__init__.py +0 -0
  196. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  197. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  198. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  199. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  200. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/long_context_rag.py +0 -0
  201. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  202. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/rag_config.py +0 -0
  203. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/rag_entry.py +0 -0
  204. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/raw_rag.py +0 -0
  205. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/relevant_utils.py +0 -0
  206. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/searchable.py +0 -0
  207. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/simple_directory_reader.py +0 -0
  208. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/simple_rag.py +0 -0
  209. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/stream_event/__init__.py +0 -0
  210. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  211. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/stream_event/types.py +0 -0
  212. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/token_checker.py +0 -0
  213. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/token_counter.py +0 -0
  214. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/token_limiter.py +0 -0
  215. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/token_limiter_utils.py +0 -0
  216. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/types.py +0 -0
  217. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/utils.py +0 -0
  218. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/rag/variable_holder.py +0 -0
  219. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/regexproject/__init__.py +0 -0
  220. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/run_context.py +0 -0
  221. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/shadows/__init__.py +0 -0
  222. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/suffixproject/__init__.py +0 -0
  223. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/tsproject/__init__.py +0 -0
  224. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/__init__.py +0 -0
  225. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/_markitdown.py +0 -0
  226. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  227. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  228. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/auto_project_type.py +0 -0
  229. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  230. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/conversation_store.py +0 -0
  231. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  232. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/llms.py +0 -0
  233. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/log_capture.py +0 -0
  234. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/model_provider_selector.py +0 -0
  235. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/multi_turn.py +0 -0
  236. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/operate_config_api.py +0 -0
  237. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/print_table.py +0 -0
  238. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/project_structure.py +0 -0
  239. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/queue_communicate.py +0 -0
  240. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/request_event_queue.py +0 -0
  241. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/request_queue.py +0 -0
  242. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/rest.py +0 -0
  243. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/stream_thinking.py +0 -0
  244. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/tests.py +0 -0
  245. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/thread_utils.py +0 -0
  246. {auto_coder-0.1.327 → auto_coder-0.1.329}/src/autocoder/utils/types.py +0 -0
  247. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_action_regex_project.py +0 -0
  248. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_action_yml_file_manager.py +0 -0
  249. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_chat_auto_coder.py +0 -0
  250. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_code_auto_merge_editblock.py +0 -0
  251. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_command_completer.py +0 -0
  252. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_planner.py +0 -0
  253. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_plugins.py +0 -0
  254. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_privacy.py +0 -0
  255. {auto_coder-0.1.327 → auto_coder-0.1.329}/tests/test_queue_communicate.py +0 -0
  256. {auto_coder-0.1.327 → auto_coder-0.1.329}/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.327
3
+ Version: 0.1.329
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.327
3
+ Version: 0.1.329
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -111,6 +111,18 @@ src/autocoder/common/v2/code_diff_manager.py
111
111
  src/autocoder/common/v2/code_editblock_manager.py
112
112
  src/autocoder/common/v2/code_manager.py
113
113
  src/autocoder/common/v2/code_strict_diff_manager.py
114
+ src/autocoder/compilers/__init__.py
115
+ src/autocoder/compilers/base_compiler.py
116
+ src/autocoder/compilers/compiler_config_api.py
117
+ src/autocoder/compilers/compiler_config_manager.py
118
+ src/autocoder/compilers/compiler_factory.py
119
+ src/autocoder/compilers/java_compiler.py
120
+ src/autocoder/compilers/models.py
121
+ src/autocoder/compilers/provided_compiler.py
122
+ src/autocoder/compilers/python_compiler.py
123
+ src/autocoder/compilers/reactjs_compiler.py
124
+ src/autocoder/compilers/shadow_compiler.py
125
+ src/autocoder/compilers/vue_compiler.py
114
126
  src/autocoder/data/byzerllm.md
115
127
  src/autocoder/data/tokenizer.json
116
128
  src/autocoder/db/__init__.py
@@ -89,7 +89,7 @@ project_root = os.getcwd()
89
89
 
90
90
  base_persist_dir = os.path.join(project_root,".auto-coder", "plugins", "chat-auto-coder")
91
91
 
92
- defaut_exclude_dirs = [".git", "node_modules", "dist", "build", "__pycache__"]
92
+ defaut_exclude_dirs = [".git", "node_modules", "dist", "build", "__pycache__",".auto-coder"]
93
93
 
94
94
  commands = [
95
95
  "/add_files",
@@ -419,7 +419,12 @@ class AutoCoderArgs(pydantic.BaseModel):
419
419
  revert_commit_id: Optional[str] = None
420
420
 
421
421
  enable_auto_fix_lint: Optional[bool] = False
422
+ enable_auto_fix_compile: Optional[bool] = False
423
+
422
424
  auto_fix_lint_max_attempts: Optional[int] = 5
425
+ auto_fix_compile_max_attempts: Optional[int] = 5
426
+
427
+ ignore_clean_shadows: Optional[bool] = False
423
428
 
424
429
  class Config:
425
430
  protected_namespaces = ()
@@ -757,6 +757,22 @@ MESSAGES = {
757
757
  "max_attempts_reached": {
758
758
  "en": "Maximum correction attempts reached",
759
759
  "zh": "已达到最大修复尝试次数"
760
+ },
761
+ "compile_success": {
762
+ "en": "Compile success",
763
+ "zh": "编译成功"
764
+ },
765
+ "compile_failed": {
766
+ "en": "Compile failed",
767
+ "zh": "编译失败"
768
+ },
769
+ "compile_attempt_status": {
770
+ "en": "Compile attempt {{attempt}}/{{max_correction_attempts}}: {{error_count}} errors found. {{ formatted_issues }}",
771
+ "zh": "编译尝试 {{attempt}}/{{max_correction_attempts}}: 发现 {{error_count}} 个错误. {{ formatted_issues }}"
772
+ },
773
+ "max_compile_attempts_reached": {
774
+ "en": "Maximum compilation attempts reached",
775
+ "zh": "已达到最大编译尝试次数"
760
776
  }
761
777
  }
762
778
 
@@ -16,5 +16,8 @@ class CodeRankStreamOutType(Enum):
16
16
  class LintStreamOutType(Enum):
17
17
  LINT = "lint"
18
18
 
19
+ class CompileStreamOutType(Enum):
20
+ COMPILE = "compile"
21
+
19
22
  class IndexStreamOutType(Enum):
20
23
  INDEX_BUILD = "index_build"
@@ -10,10 +10,11 @@ from byzerllm.utils.client import code_utils
10
10
  from autocoder.common.types import Mode, CodeGenerateResult, MergeCodeWithoutEffect
11
11
  from autocoder.common import AutoCoderArgs, git_utils, SourceCodeList
12
12
  from autocoder.common import sys_prompt
13
+ from autocoder.compilers.shadow_compiler import ShadowCompiler
13
14
  from autocoder.privacy.model_filter import ModelPathFilter
14
15
  from autocoder.common.utils_code_auto_generate import chat_with_continue, stream_chat_with_continue, ChatWithContinueResult
15
16
  from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
16
- from autocoder.common.stream_out_type import LintStreamOutType
17
+ from autocoder.common.stream_out_type import LintStreamOutType, CompileStreamOutType
17
18
  from autocoder.common.auto_coder_lang import get_message_with_format
18
19
  from autocoder.common.printer import Printer
19
20
  from autocoder.rag.token_counter import count_tokens
@@ -54,7 +55,8 @@ class CodeEditBlockManager:
54
55
  self.fence_0 = fence_0
55
56
  self.fence_1 = fence_1
56
57
  self.generate_times_same_model = args.generate_times_same_model
57
- self.max_correction_attempts = args.auto_fix_lint_max_attempts
58
+ self.auto_fix_lint_max_attempts = args.auto_fix_lint_max_attempts
59
+ self.auto_fix_compile_max_attempts = args.auto_fix_compile_max_attempts
58
60
  self.printer = Printer()
59
61
 
60
62
  # Initialize sub-components
@@ -63,8 +65,11 @@ class CodeEditBlockManager:
63
65
  self.code_merger = CodeAutoMergeEditBlock(llm, args, fence_0, fence_1)
64
66
 
65
67
  # Create shadow manager for linting
66
- self.shadow_manager = ShadowManager(args.source_dir, args.event_file)
68
+ self.shadow_manager = ShadowManager(
69
+ args.source_dir, args.event_file, args.ignore_clean_shadows)
67
70
  self.shadow_linter = ShadowLinter(self.shadow_manager, verbose=False)
71
+ self.shadow_compiler = ShadowCompiler(
72
+ self.shadow_manager, verbose=False)
68
73
 
69
74
  @byzerllm.prompt()
70
75
  def fix_linter_errors(self, query: str, lint_issues: str) -> str:
@@ -83,6 +88,22 @@ class CodeEditBlockManager:
83
88
  请严格遵守*SEARCH/REPLACE block*的格式。
84
89
  """
85
90
 
91
+ def fix_compile_errors(self, query: str, compile_errors: str) -> str:
92
+ """
93
+ 编译错误:
94
+ <compile_errors>
95
+ {{ compile_errors }}
96
+ </compile_errors>
97
+
98
+ 用户原始需求:
99
+ <user_query_wrapper>
100
+ {{ query }}
101
+ </user_query_wrapper>
102
+
103
+ 修复上述问题,请确保代码质量问题被解决,同时保持代码的原有功能。
104
+ 请严格遵守*SEARCH/REPLACE block*的格式。
105
+ """
106
+
86
107
  def _create_shadow_files_from_edits(self, generation_result: CodeGenerateResult) -> Dict[str, str]:
87
108
  """
88
109
  从编辑块内容中提取代码并创建临时影子文件用于检查。
@@ -169,7 +190,7 @@ class CodeEditBlockManager:
169
190
 
170
191
  def generate_and_fix(self, query: str, source_code_list: SourceCodeList) -> CodeGenerateResult:
171
192
  """
172
- 生成代码,运行linter,修复错误,最多尝试指定次数
193
+ 生成代码,运行linter/compile,修复错误,最多尝试指定次数
173
194
 
174
195
  参数:
175
196
  query (str): 用户查询
@@ -199,7 +220,7 @@ class CodeEditBlockManager:
199
220
  return generation_result
200
221
 
201
222
  # 最多尝试修复5次
202
- for attempt in range(self.max_correction_attempts):
223
+ for attempt in range(self.auto_fix_lint_max_attempts):
203
224
  global_cancel.check_and_raise()
204
225
  # 代码生成结果更新到影子文件里去
205
226
  shadow_files = self._create_shadow_files_from_edits(
@@ -231,13 +252,14 @@ class CodeEditBlockManager:
231
252
  "lint_attempt_status",
232
253
  style="yellow",
233
254
  attempt=(attempt + 1),
234
- max_correction_attempts=self.max_correction_attempts,
255
+ max_correction_attempts=self.auto_fix_lint_max_attempts,
235
256
  error_count=error_count,
236
257
  formatted_issues=formatted_issues
237
258
  )
238
259
 
260
+ # 把lint结果记录到事件系统
239
261
  get_event_manager(self.args.event_file).write_result(EventContentCreator.create_result(
240
- content=EventContentCreator.ResultContent(content=f"Lint attempt {attempt + 1}/{self.max_correction_attempts}: Found {error_count} issues:\n {formatted_issues}",
262
+ content=EventContentCreator.ResultContent(content=f"Lint attempt {attempt + 1}/{self.auto_fix_lint_max_attempts}: Found {error_count} issues:\n {formatted_issues}",
241
263
  metadata={}
242
264
  ).to_dict(),
243
265
  metadata={
@@ -246,7 +268,7 @@ class CodeEditBlockManager:
246
268
  }
247
269
  ))
248
270
 
249
- if attempt == self.max_correction_attempts - 1:
271
+ if attempt == self.auto_fix_lint_max_attempts - 1:
250
272
  self.printer.print_in_terminal(
251
273
  "max_attempts_reached", style="yellow")
252
274
  break
@@ -267,6 +289,8 @@ class CodeEditBlockManager:
267
289
  shadow_files)
268
290
  generation_result = self.code_generator.single_round_run(
269
291
  fix_prompt, source_code_list)
292
+
293
+ # 计算这次修复lint 问题花费的token情况
270
294
  token_cost_calculator.track_token_usage_by_generate(
271
295
  llm=self.llm,
272
296
  generate=generation_result,
@@ -274,6 +298,66 @@ class CodeEditBlockManager:
274
298
  start_time=start_time,
275
299
  end_time=time.time()
276
300
  )
301
+
302
+ # 如果开启了自动修复compile问题,则进行compile修复
303
+ if self.args.enable_auto_fix_compile:
304
+ for attempt in range(self.auto_fix_compile_max_attempts):
305
+ global_cancel.check_and_raise()
306
+ # 先更新增量影子系统的文件
307
+ shadow_files = self._create_shadow_files_from_edits(generation_result)
308
+
309
+ # 在影子系统生成完整的项目,然后编译
310
+ compile_result = self.shadow_compiler.compile_all_shadow_files()
311
+
312
+ # 如果编译成功,则退出,继续往后走
313
+ if compile_result.success or compile_result.total_errors == 0:
314
+ self.printer.print_in_terminal(
315
+ "compile_success", style="green")
316
+ break
317
+
318
+ # 如果有错误,则把compile结果记录到事件系统
319
+ get_event_manager(self.args.event_file).write_result(EventContentCreator.create_result(
320
+ content=EventContentCreator.ResultContent(content=f"Compile attempt {attempt + 1}/{self.auto_fix_compile_max_attempts}: Found {compile_result.total_errors} errors:\n {compile_result.to_str()}",
321
+ metadata={}
322
+ ).to_dict(),
323
+ metadata={
324
+ "stream_out_type": CompileStreamOutType.COMPILE.value,
325
+ "action_file": self.args.file
326
+ }
327
+ ))
328
+
329
+ if attempt == self.auto_fix_compile_max_attempts - 1:
330
+ self.printer.print_in_terminal(
331
+ "max_compile_attempts_reached", style="yellow")
332
+ break
333
+
334
+ # 打印当前compile错误
335
+ self.printer.print_in_terminal("compile_attempt_status",
336
+ style="yellow",
337
+ attempt=(attempt + 1), max_correction_attempts=self.auto_fix_compile_max_attempts,
338
+ error_count=compile_result.total_errors,
339
+ formatted_issues=compile_result.to_str())
340
+
341
+ fix_compile_prompt = self.fix_compile_errors.prompt(
342
+ query=query,
343
+ compile_errors=compile_result.to_str()
344
+ )
345
+
346
+ # 将 shadow_files 转化为 source_code_list
347
+ start_time = time.time()
348
+ source_code_list = self.code_merger.get_source_code_list_from_shadow_files(
349
+ shadow_files)
350
+ generation_result = self.code_generator.single_round_run(
351
+ fix_compile_prompt, source_code_list)
352
+
353
+ # 计算这次修复compile 问题花费的token情况
354
+ token_cost_calculator.track_token_usage_by_generate(
355
+ llm=self.llm,
356
+ generate=generation_result,
357
+ operation_name="code_generation_complete",
358
+ start_time=start_time,
359
+ end_time=time.time()
360
+ )
277
361
 
278
362
  # 清理临时影子文件
279
363
  self.shadow_manager.clean_shadows()
@@ -0,0 +1,51 @@
1
+ """
2
+ Package for compiling code across multiple programming languages.
3
+ This package provides functionality for compiling and checking code in Python, Java, ReactJS, and Vue.js.
4
+ """
5
+
6
+ from autocoder.compilers.compiler_factory import (
7
+ CompilerFactory,
8
+ compile_file,
9
+ compile_project,
10
+ format_compile_result
11
+ )
12
+
13
+ from autocoder.compilers.models import (
14
+ CompilationError,
15
+ CompilationErrorSeverity,
16
+ CompilationErrorPosition,
17
+ FileCompilationResult,
18
+ ProjectCompilationResult
19
+ )
20
+
21
+ from autocoder.compilers.base_compiler import BaseCompiler
22
+ from autocoder.compilers.python_compiler import PythonCompiler
23
+ from autocoder.compilers.java_compiler import JavaCompiler
24
+ from autocoder.compilers.reactjs_compiler import ReactJSCompiler
25
+ from autocoder.compilers.vue_compiler import VueCompiler
26
+ from autocoder.compilers.provided_compiler import ProvidedCompiler, compile_with_provided_config
27
+ from autocoder.compilers.compiler_config_manager import CompilerConfigManager, get_compiler_config_manager
28
+ from autocoder.compilers.compiler_config_api import CompilerConfigAPI, get_compiler_config_api
29
+
30
+ __all__ = [
31
+ 'CompilerFactory',
32
+ 'compile_file',
33
+ 'compile_project',
34
+ 'format_compile_result',
35
+ 'CompilationError',
36
+ 'CompilationErrorSeverity',
37
+ 'CompilationErrorPosition',
38
+ 'FileCompilationResult',
39
+ 'ProjectCompilationResult',
40
+ 'BaseCompiler',
41
+ 'PythonCompiler',
42
+ 'JavaCompiler',
43
+ 'ReactJSCompiler',
44
+ 'VueCompiler',
45
+ 'ProvidedCompiler',
46
+ 'compile_with_provided_config',
47
+ 'CompilerConfigManager',
48
+ 'get_compiler_config_manager',
49
+ 'CompilerConfigAPI',
50
+ 'get_compiler_config_api'
51
+ ]
@@ -0,0 +1,107 @@
1
+ """
2
+ Module for code compilation capabilities across multiple programming languages.
3
+ This module provides a base abstract class for various language-specific compilers.
4
+ """
5
+
6
+ import os
7
+ from abc import ABC, abstractmethod
8
+ from typing import Dict, Any, List, Optional,Union
9
+ from autocoder.compilers.models import ProjectCompilationResult,FileCompilationResult
10
+
11
+ class BaseCompiler(ABC):
12
+ """
13
+ Base abstract class for all language-specific compilers.
14
+ """
15
+
16
+ def __init__(self, verbose: bool = False):
17
+ """
18
+ Initialize the base compiler.
19
+
20
+ Args:
21
+ verbose (bool): Whether to display verbose output.
22
+ """
23
+ self.verbose = verbose
24
+
25
+ @abstractmethod
26
+ def _check_dependencies(self) -> bool:
27
+ """
28
+ Check if required dependencies are installed.
29
+
30
+ Returns:
31
+ bool: True if all dependencies are available, False otherwise.
32
+ """
33
+ pass
34
+
35
+ @abstractmethod
36
+ def compile_file(self, file_path: str,target_compiler_name:Optional[str] = None) -> FileCompilationResult:
37
+ """
38
+ Compile a single file.
39
+
40
+ Args:
41
+ file_path (str): Path to the file to compile.
42
+
43
+ Returns:
44
+ FileCompilationResult: Compilation results.
45
+ """
46
+ pass
47
+
48
+ @abstractmethod
49
+ def compile_project(self, project_path: str,target_compiler_name:Optional[str] = None) -> ProjectCompilationResult:
50
+ """
51
+ Compile an entire project.
52
+
53
+ Args:
54
+ project_path (str): Path to the project directory.
55
+
56
+ Returns:
57
+ ProjectCompilationResult: Compilation results.
58
+ """
59
+ pass
60
+
61
+ @abstractmethod
62
+ def format_compile_result(self, compile_result: Union[ProjectCompilationResult, FileCompilationResult]) -> str:
63
+ """
64
+ Format compilation results into a human-readable string.
65
+
66
+ Args:
67
+ compile_result (Union[ProjectCompilationResult, FileCompilationResult]): The compilation result.
68
+
69
+ Returns:
70
+ str: A formatted string representation of the compilation results.
71
+ """
72
+ pass
73
+
74
+ def get_file_extension(self, file_path: str) -> str:
75
+ """
76
+ Get the file extension from a file path.
77
+
78
+ Args:
79
+ file_path (str): Path to the file.
80
+
81
+ Returns:
82
+ str: The file extension (lowercase, with dot).
83
+ """
84
+ _, ext = os.path.splitext(file_path)
85
+ return ext.lower()
86
+
87
+ def is_supported_file(self, file_path: str) -> bool:
88
+ """
89
+ Check if a file is supported by this compiler.
90
+
91
+ Args:
92
+ file_path (str): Path to the file.
93
+
94
+ Returns:
95
+ bool: True if the file is supported, False otherwise.
96
+ """
97
+ return self.get_file_extension(file_path) in self.get_supported_extensions()
98
+
99
+ @abstractmethod
100
+ def get_supported_extensions(self) -> List[str]:
101
+ """
102
+ Get the list of file extensions supported by this compiler.
103
+
104
+ Returns:
105
+ List[str]: List of supported file extensions (lowercase, with dot).
106
+ """
107
+ pass