auto-coder 0.1.332__tar.gz → 0.1.334__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 (257) hide show
  1. {auto_coder-0.1.332 → auto_coder-0.1.334}/PKG-INFO +1 -1
  2. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/agentic_filter.py +2 -1
  4. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/provided_compiler.py +40 -1
  5. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/events/event_content.py +1 -1
  6. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/helper/project_creator.py +282 -100
  7. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/linters/reactjs_linter.py +55 -61
  8. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/shadows/shadow_manager.py +1 -1
  9. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +2 -39
  10. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/project_structure.py +2 -2
  11. auto_coder-0.1.334/src/autocoder/version.py +1 -0
  12. auto_coder-0.1.332/src/autocoder/version.py +0 -1
  13. {auto_coder-0.1.332 → auto_coder-0.1.334}/LICENSE +0 -0
  14. {auto_coder-0.1.332 → auto_coder-0.1.334}/README.md +0 -0
  15. {auto_coder-0.1.332 → auto_coder-0.1.334}/setup.cfg +0 -0
  16. {auto_coder-0.1.332 → auto_coder-0.1.334}/setup.py +0 -0
  17. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/auto_coder.egg-info/SOURCES.txt +0 -0
  18. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  19. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/auto_coder.egg-info/entry_points.txt +0 -0
  20. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/auto_coder.egg-info/requires.txt +0 -0
  21. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/auto_coder.egg-info/top_level.txt +0 -0
  22. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/__init__.py +0 -0
  23. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/__init__.py +0 -0
  24. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  25. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/auto_filegroup.py +0 -0
  26. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/auto_guess_query.py +0 -0
  27. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  28. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/auto_review_commit.py +0 -0
  29. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/auto_tool.py +0 -0
  30. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/coder.py +0 -0
  31. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/designer.py +0 -0
  32. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/planner.py +0 -0
  33. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/agent/project_reader.py +0 -0
  34. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/auto_coder.py +0 -0
  35. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/auto_coder_rag.py +0 -0
  36. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/auto_coder_runner.py +0 -0
  37. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/auto_coder_server.py +0 -0
  38. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/benchmark.py +0 -0
  39. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/chat/__init__.py +0 -0
  40. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/chat_auto_coder.py +0 -0
  41. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/chat_auto_coder_lang.py +0 -0
  42. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/command_args.py +0 -0
  43. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/command_parser.py +0 -0
  44. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/commands/__init__.py +0 -0
  45. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/commands/auto_command.py +0 -0
  46. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/commands/auto_web.py +0 -0
  47. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/commands/tools.py +0 -0
  48. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/JupyterClient.py +0 -0
  49. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/ShellClient.py +0 -0
  50. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/__init__.py +0 -0
  51. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/action_yml_file_manager.py +0 -0
  52. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/anything2images.py +0 -0
  53. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/anything2img.py +0 -0
  54. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/audio.py +0 -0
  55. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/auto_coder_lang.py +0 -0
  56. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/auto_configure.py +0 -0
  57. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/buildin_tokenizer.py +0 -0
  58. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/chunk_validation.py +0 -0
  59. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/cleaner.py +0 -0
  60. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_execute.py +0 -0
  61. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_generate.py +0 -0
  62. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  63. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  64. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  65. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_merge.py +0 -0
  66. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  67. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  68. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  69. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/code_modification_ranker.py +0 -0
  70. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/command_completer.py +0 -0
  71. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/command_generator.py +0 -0
  72. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/command_templates.py +0 -0
  73. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/computer_use.py +0 -0
  74. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/conf_import_export.py +0 -0
  75. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/conf_utils.py +0 -0
  76. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/conf_validator.py +0 -0
  77. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/const.py +0 -0
  78. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/context_pruner.py +0 -0
  79. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/conversation_pruner.py +0 -0
  80. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/files.py +0 -0
  81. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/git_utils.py +0 -0
  82. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/global_cancel.py +0 -0
  83. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/image_to_page.py +0 -0
  84. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/index_import_export.py +0 -0
  85. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/interpreter.py +0 -0
  86. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/llm_rerank.py +0 -0
  87. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/mcp_hub.py +0 -0
  88. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/mcp_server.py +0 -0
  89. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  90. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  91. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  92. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/mcp_tools.py +0 -0
  93. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/memory_manager.py +0 -0
  94. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/model_speed_test.py +0 -0
  95. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/openai_content.py +0 -0
  96. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/printer.py +0 -0
  97. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/recall_validation.py +0 -0
  98. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/result_manager.py +0 -0
  99. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/screenshots.py +0 -0
  100. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/search.py +0 -0
  101. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/search_replace.py +0 -0
  102. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/shells.py +0 -0
  103. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/stats_panel.py +0 -0
  104. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/stream_out_type.py +0 -0
  105. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/sys_prompt.py +0 -0
  106. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/text.py +0 -0
  107. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/token_cost_caculate.py +0 -0
  108. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/types.py +0 -0
  109. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  110. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/__init__.py +0 -0
  111. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  112. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  113. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  114. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  115. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  116. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  117. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  118. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  119. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  120. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  121. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_manager.py +0 -0
  122. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  123. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/__init__.py +0 -0
  124. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/base_compiler.py +0 -0
  125. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/compiler_config_api.py +0 -0
  126. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  127. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/compiler_factory.py +0 -0
  128. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/java_compiler.py +0 -0
  129. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/models.py +0 -0
  130. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/python_compiler.py +0 -0
  131. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  132. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/shadow_compiler.py +0 -0
  133. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/compilers/vue_compiler.py +0 -0
  134. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/data/byzerllm.md +0 -0
  135. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/data/tokenizer.json +0 -0
  136. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/db/__init__.py +0 -0
  137. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/db/store.py +0 -0
  138. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/dispacher/__init__.py +0 -0
  139. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/dispacher/actions/__init__.py +0 -0
  140. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/dispacher/actions/action.py +0 -0
  141. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/dispacher/actions/copilot.py +0 -0
  142. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  143. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  144. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/events/__init__.py +0 -0
  145. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/events/event_manager.py +0 -0
  146. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/events/event_manager_singleton.py +0 -0
  147. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/events/event_store.py +0 -0
  148. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/events/event_types.py +0 -0
  149. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/helper/__init__.py +0 -0
  150. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/__init__.py +0 -0
  151. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/entry.py +0 -0
  152. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/filter/__init__.py +0 -0
  153. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/filter/normal_filter.py +0 -0
  154. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/filter/quick_filter.py +0 -0
  155. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/for_command.py +0 -0
  156. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/index.py +0 -0
  157. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/symbols_utils.py +0 -0
  158. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/index/types.py +0 -0
  159. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/lang.py +0 -0
  160. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/linters/__init__.py +0 -0
  161. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/linters/base_linter.py +0 -0
  162. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/linters/linter_factory.py +0 -0
  163. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/linters/models.py +0 -0
  164. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/linters/python_linter.py +0 -0
  165. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/linters/shadow_linter.py +0 -0
  166. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/linters/vue_linter.py +0 -0
  167. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/memory/__init__.py +0 -0
  168. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/memory/active_context_manager.py +0 -0
  169. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/memory/active_package.py +0 -0
  170. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/memory/async_processor.py +0 -0
  171. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/memory/directory_mapper.py +0 -0
  172. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/models.py +0 -0
  173. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/plugins/__init__.py +0 -0
  174. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  175. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  176. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/plugins/sample_plugin.py +0 -0
  177. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  178. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/plugins/utils.py +0 -0
  179. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/privacy/__init__.py +0 -0
  180. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/privacy/model_filter.py +0 -0
  181. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/pyproject/__init__.py +0 -0
  182. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/__init__.py +0 -0
  183. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/api_server.py +0 -0
  184. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/__init__.py +0 -0
  185. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/base_cache.py +0 -0
  186. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  187. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  188. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  189. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  190. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  191. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  192. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/cache/simple_cache.py +0 -0
  193. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/conversation_to_queries.py +0 -0
  194. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/doc_filter.py +0 -0
  195. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/document_retriever.py +0 -0
  196. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/lang.py +0 -0
  197. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/llm_wrapper.py +0 -0
  198. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/loaders/__init__.py +0 -0
  199. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  200. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  201. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  202. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  203. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/long_context_rag.py +0 -0
  204. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  205. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/rag_config.py +0 -0
  206. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/rag_entry.py +0 -0
  207. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/raw_rag.py +0 -0
  208. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/relevant_utils.py +0 -0
  209. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/searchable.py +0 -0
  210. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/simple_directory_reader.py +0 -0
  211. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/simple_rag.py +0 -0
  212. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/stream_event/__init__.py +0 -0
  213. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  214. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/stream_event/types.py +0 -0
  215. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/token_checker.py +0 -0
  216. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/token_counter.py +0 -0
  217. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/token_limiter.py +0 -0
  218. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/token_limiter_utils.py +0 -0
  219. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/types.py +0 -0
  220. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/utils.py +0 -0
  221. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/rag/variable_holder.py +0 -0
  222. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/regexproject/__init__.py +0 -0
  223. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/run_context.py +0 -0
  224. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/shadows/__init__.py +0 -0
  225. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/suffixproject/__init__.py +0 -0
  226. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/tsproject/__init__.py +0 -0
  227. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/__init__.py +0 -0
  228. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/_markitdown.py +0 -0
  229. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  230. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/auto_project_type.py +0 -0
  231. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  232. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/conversation_store.py +0 -0
  233. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  234. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/llms.py +0 -0
  235. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/log_capture.py +0 -0
  236. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/model_provider_selector.py +0 -0
  237. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/multi_turn.py +0 -0
  238. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/operate_config_api.py +0 -0
  239. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/print_table.py +0 -0
  240. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/queue_communicate.py +0 -0
  241. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/request_event_queue.py +0 -0
  242. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/request_queue.py +0 -0
  243. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/rest.py +0 -0
  244. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/stream_thinking.py +0 -0
  245. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/tests.py +0 -0
  246. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/thread_utils.py +0 -0
  247. {auto_coder-0.1.332 → auto_coder-0.1.334}/src/autocoder/utils/types.py +0 -0
  248. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_action_regex_project.py +0 -0
  249. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_action_yml_file_manager.py +0 -0
  250. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_chat_auto_coder.py +0 -0
  251. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_code_auto_merge_editblock.py +0 -0
  252. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_command_completer.py +0 -0
  253. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_planner.py +0 -0
  254. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_plugins.py +0 -0
  255. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_privacy.py +0 -0
  256. {auto_coder-0.1.332 → auto_coder-0.1.334}/tests/test_queue_communicate.py +0 -0
  257. {auto_coder-0.1.332 → auto_coder-0.1.334}/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.332
3
+ Version: 0.1.334
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.332
3
+ Version: 0.1.334
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -878,7 +878,8 @@ class AgenticFilter:
878
878
  )
879
879
 
880
880
  if success_flag:
881
- return AgenticFilterResponse(**json.loads(content))
881
+ to_model(content, AgenticFilterResponse)
882
+ # return AgenticFilterResponse(**json.loads(content))
882
883
  else:
883
884
  return None
884
885
 
@@ -11,6 +11,7 @@ from typing import Dict, List, Any, Optional, Union
11
11
  import time
12
12
  from pathlib import Path
13
13
 
14
+ from autocoder.common import AutoCoderArgs
14
15
  from autocoder.compilers.base_compiler import BaseCompiler
15
16
  from autocoder.compilers.models import (
16
17
  CompilationError,
@@ -19,6 +20,7 @@ from autocoder.compilers.models import (
19
20
  CompilationErrorPosition,
20
21
  CompilationErrorSeverity
21
22
  )
23
+ from autocoder.utils.project_structure import EnhancedFileAnalyzer
22
24
 
23
25
 
24
26
  class ProvidedCompiler(BaseCompiler):
@@ -233,6 +235,33 @@ class ProvidedCompiler(BaseCompiler):
233
235
  'file_path': file_path,
234
236
  'language': 'unknown'
235
237
  }
238
+
239
+
240
+ def get_all_extensions(self, directory: str = ".") -> str:
241
+ """获取指定目录下所有文件的后缀名,多个按逗号分隔,并且带."""
242
+ args = AutoCoderArgs(
243
+ source_dir=directory,
244
+ # 其他必要参数设置为默认值
245
+ target_file="",
246
+ git_url="",
247
+ project_type="",
248
+ conversation_prune_safe_zone_tokens=0
249
+ )
250
+
251
+ analyzer = EnhancedFileAnalyzer(
252
+ args=args,
253
+ llm=None, # 如果只是获取后缀名,可以不需要LLM
254
+ config=None # 使用默认配置
255
+ )
256
+
257
+ # 获取分析结果
258
+ analysis_result = analyzer.analyze_extensions()
259
+
260
+ # 合并 code 和 config 的后缀名
261
+ all_extensions = set(analysis_result["code"] + analysis_result["config"])
262
+
263
+ # 转换为逗号分隔的字符串
264
+ return ",".join(sorted(all_extensions))
236
265
 
237
266
  def compile_project(self, project_path: str,target_compiler_name:Optional[str] = None) -> ProjectCompilationResult:
238
267
  """
@@ -257,6 +286,16 @@ class ProvidedCompiler(BaseCompiler):
257
286
  return result
258
287
 
259
288
  target_compiler_config = None
289
+ if not target_compiler_name:
290
+ for compiler_config in self.config.get('compilers', []):
291
+ working_dir = os.path.join(project_path,compiler_config.get('working_dir', '.'))
292
+ print(working_dir)
293
+ all_extensions = self.get_all_extensions(working_dir)
294
+ triggers = compiler_config.get("triggers",[])
295
+ if any(trigger in all_extensions for trigger in triggers):
296
+ target_compiler_config = compiler_config
297
+ break
298
+
260
299
  if target_compiler_name:
261
300
  for compiler_config in self.config.get('compilers', []):
262
301
  if compiler_config.get("name","") == target_compiler_name:
@@ -279,7 +318,7 @@ class ProvidedCompiler(BaseCompiler):
279
318
  result = ProjectCompilationResult(
280
319
  project_path=project_path,
281
320
  success=compile_result['success'],
282
- error_message=compile_result['error_message'],
321
+ error_message=compile_result.get('error_message',''),
283
322
  file_results={
284
323
  "1":FileCompilationResult(
285
324
  file_path="1",
@@ -99,7 +99,7 @@ class ResultContent(BaseEventContent):
99
99
  }
100
100
  }
101
101
  )
102
- ## ResultContent.content 字段的类型
102
+
103
103
  ## begin===============================
104
104
  class ResultTokenStatContent(BaseModel):
105
105
  model_name:str = ""
@@ -130,34 +130,40 @@ if __name__ == "__main__":
130
130
 
131
131
  class ReactJSFileCreator(FileCreator):
132
132
  """
133
- React TypeScript 计算器项目文件创建器
133
+ Vite + React TypeScript 计算器项目文件创建器
134
134
  """
135
135
 
136
136
  def create_files(self, project_dir: str) -> None:
137
- """创建 React TypeScript 项目文件"""
137
+ """创建 Vite + React TypeScript 项目文件"""
138
138
  # 创建 package.json
139
139
  self._create_package_json(project_dir)
140
140
  # 创建 index.html
141
141
  self._create_index_html(project_dir)
142
+ # 创建 vite.config.ts
143
+ self._create_vite_config(project_dir)
142
144
  # 创建 src 目录
143
145
  src_dir = os.path.join(project_dir, "src")
144
146
  os.makedirs(src_dir, exist_ok=True)
145
147
  # 创建 App.tsx 和 Calculator.tsx 组件
146
148
  self._create_app_tsx(src_dir)
147
149
  self._create_calculator_component(src_dir)
148
- self._create_index_tsx(src_dir)
149
- # 创建 tsconfig.json
150
+ self._create_main_tsx(src_dir)
151
+ # 创建 tsconfig.json 和 tsconfig.node.json
150
152
  self._create_tsconfig_json(project_dir)
153
+ self._create_tsconfig_node_json(project_dir)
154
+ # 创建 .gitignore
155
+ self._create_gitignore(project_dir)
151
156
 
152
157
  def get_file_paths(self, project_dir: str) -> List[str]:
153
- """获取 React TypeScript 项目的主要文件路径"""
158
+ """获取 Vite + React TypeScript 项目的主要文件路径"""
154
159
  abs_project_dir = os.path.abspath(project_dir)
155
160
  return [
156
161
  os.path.join(abs_project_dir, "package.json"),
162
+ os.path.join(abs_project_dir, "vite.config.ts"),
157
163
  os.path.join(abs_project_dir, "tsconfig.json"),
158
164
  os.path.join(abs_project_dir, "src", "App.tsx"),
159
165
  os.path.join(abs_project_dir, "src", "Calculator.tsx"),
160
- os.path.join(abs_project_dir, "src", "index.tsx")
166
+ os.path.join(abs_project_dir, "src", "main.tsx")
161
167
  ]
162
168
 
163
169
  @property
@@ -167,20 +173,17 @@ class ReactJSFileCreator(FileCreator):
167
173
 
168
174
  def _create_index_html(self, project_dir: str) -> None:
169
175
  """创建 index.html 文件"""
170
- index_html_path = os.path.join(project_dir, "public", "index.html")
171
- os.makedirs(os.path.dirname(index_html_path), exist_ok=True)
176
+ index_html_path = os.path.join(project_dir, "index.html")
172
177
  index_html_content = """<!DOCTYPE html>
173
178
  <html lang="en">
174
179
  <head>
175
- <meta charset="utf-8" />
176
- <meta name="viewport" content="width=device-width, initial-scale=1" />
177
- <meta name="theme-color" content="#000000" />
178
- <meta name="description" content="React Calculator App" />
179
- <title>React Calculator</title>
180
+ <meta charset="UTF-8" />
181
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
182
+ <title>Vite + React Calculator</title>
180
183
  </head>
181
184
  <body>
182
- <noscript>You need to enable JavaScript to run this app.</noscript>
183
185
  <div id="root"></div>
186
+ <script type="module" src="/src/main.tsx"></script>
184
187
  </body>
185
188
  </html>"""
186
189
  with open(index_html_path, "w", encoding="utf-8") as f:
@@ -191,133 +194,213 @@ class ReactJSFileCreator(FileCreator):
191
194
  package_path = os.path.join(project_dir, "package.json")
192
195
  package_content = """{
193
196
  "name": "calculator-app",
194
- "version": "0.1.0",
195
197
  "private": true,
196
- "dependencies": {
197
- "react": "^18.2.0",
198
- "react-dom": "^18.2.0",
199
- "react-scripts": "5.0.1",
200
- "@types/node": "^16.18.0",
201
- "@types/react": "^18.2.0",
202
- "@types/react-dom": "^18.2.0",
203
- "typescript": "^4.9.5"
204
- },
198
+ "version": "0.1.0",
199
+ "type": "module",
205
200
  "scripts": {
206
- "start": "react-scripts start",
207
- "build": "react-scripts build",
208
- "test": "react-scripts test",
209
- "eject": "react-scripts eject"
201
+ "dev": "vite",
202
+ "build": "tsc && vite build",
203
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
204
+ "preview": "vite preview"
210
205
  },
211
- "eslintConfig": {
212
- "extends": [
213
- "react-app",
214
- "react-app/jest"
215
- ]
206
+ "dependencies": {
207
+ "react": "^18.2.0",
208
+ "react-dom": "^18.2.0"
216
209
  },
217
- "browserslist": {
218
- "production": [
219
- ">0.2%",
220
- "not dead",
221
- "not op_mini all"
222
- ],
223
- "development": [
224
- "last 1 chrome version",
225
- "last 1 firefox version",
226
- "last 1 safari version"
227
- ]
210
+ "devDependencies": {
211
+ "@types/react": "^18.2.15",
212
+ "@types/react-dom": "^18.2.7",
213
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
214
+ "@typescript-eslint/parser": "^6.0.0",
215
+ "@vitejs/plugin-react": "^4.0.3",
216
+ "eslint": "^8.45.0",
217
+ "eslint-plugin-react-hooks": "^4.6.0",
218
+ "eslint-plugin-react-refresh": "^0.4.3",
219
+ "typescript": "^5.0.2",
220
+ "vite": "^4.4.5"
228
221
  }
229
222
  }"""
230
223
  with open(package_path, "w", encoding="utf-8") as f:
231
224
  f.write(package_content)
232
225
 
226
+ def _create_vite_config(self, project_dir: str) -> None:
227
+ """创建 vite.config.ts 文件"""
228
+ vite_config_path = os.path.join(project_dir, "vite.config.ts")
229
+ vite_config_content = """import { defineConfig } from 'vite'
230
+ import react from '@vitejs/plugin-react'
231
+
232
+ // https://vitejs.dev/config/
233
+ export default defineConfig({
234
+ plugins: [react()],
235
+ })
236
+ """
237
+ with open(vite_config_path, "w", encoding="utf-8") as f:
238
+ f.write(vite_config_content)
239
+
233
240
  def _create_tsconfig_json(self, project_dir: str) -> None:
234
241
  """创建 tsconfig.json 文件"""
235
242
  tsconfig_path = os.path.join(project_dir, "tsconfig.json")
236
243
  tsconfig_content = """{
237
244
  "compilerOptions": {
238
- "target": "es5",
239
- "lib": ["dom", "dom.iterable", "esnext"],
240
- "allowJs": true,
245
+ "target": "ES2020",
246
+ "useDefineForClassFields": true,
247
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
248
+ "module": "ESNext",
241
249
  "skipLibCheck": true,
242
- "esModuleInterop": true,
243
- "allowSyntheticDefaultImports": true,
244
- "strict": true,
245
- "forceConsistentCasingInFileNames": true,
246
- "noFallthroughCasesInSwitch": true,
247
- "module": "esnext",
248
- "moduleResolution": "node",
250
+
251
+ /* Bundler mode */
252
+ "moduleResolution": "bundler",
253
+ "allowImportingTsExtensions": true,
249
254
  "resolveJsonModule": true,
250
255
  "isolatedModules": true,
251
256
  "noEmit": true,
252
- "jsx": "react-jsx"
257
+ "jsx": "react-jsx",
258
+
259
+ /* Linting */
260
+ "strict": true,
261
+ "noUnusedLocals": true,
262
+ "noUnusedParameters": true,
263
+ "noFallthroughCasesInSwitch": true
253
264
  },
254
- "include": ["src"]
265
+ "include": ["src"],
266
+ "references": [{ "path": "./tsconfig.node.json" }]
255
267
  }"""
256
268
  with open(tsconfig_path, "w", encoding="utf-8") as f:
257
269
  f.write(tsconfig_content)
258
270
 
271
+ def _create_tsconfig_node_json(self, project_dir: str) -> None:
272
+ """创建 tsconfig.node.json 文件"""
273
+ tsconfig_node_path = os.path.join(project_dir, "tsconfig.node.json")
274
+ tsconfig_node_content = """{
275
+ "compilerOptions": {
276
+ "composite": true,
277
+ "skipLibCheck": true,
278
+ "module": "ESNext",
279
+ "moduleResolution": "bundler",
280
+ "allowSyntheticDefaultImports": true
281
+ },
282
+ "include": ["vite.config.ts"]
283
+ }"""
284
+ with open(tsconfig_node_path, "w", encoding="utf-8") as f:
285
+ f.write(tsconfig_node_content)
286
+
287
+ def _create_gitignore(self, project_dir: str) -> None:
288
+ """创建 .gitignore 文件"""
289
+ gitignore_path = os.path.join(project_dir, ".gitignore")
290
+ gitignore_content = """# Logs
291
+ logs
292
+ *.log
293
+ npm-debug.log*
294
+ yarn-debug.log*
295
+ yarn-error.log*
296
+ pnpm-debug.log*
297
+ lerna-debug.log*
298
+
299
+ node_modules
300
+ dist
301
+ dist-ssr
302
+ *.local
303
+
304
+ # Editor directories and files
305
+ .vscode/*
306
+ !.vscode/extensions.json
307
+ .idea
308
+ .DS_Store
309
+ *.suo
310
+ *.ntvs*
311
+ *.njsproj
312
+ *.sln
313
+ *.sw?
314
+ """
315
+ with open(gitignore_path, "w", encoding="utf-8") as f:
316
+ f.write(gitignore_content)
317
+
259
318
  def _create_app_tsx(self, src_dir: str) -> None:
260
319
  """创建 App.tsx 文件"""
261
320
  app_path = os.path.join(src_dir, "App.tsx")
262
- app_content = """import React from 'react';
263
- import Calculator from './Calculator';
321
+ app_content = """import { useState } from 'react'
322
+ import Calculator from './Calculator'
323
+ import './App.css'
264
324
 
265
- const App: React.FC = () => {
325
+ function App() {
266
326
  return (
267
327
  <div className="App">
268
328
  <header className="App-header">
269
- <h1>React Calculator</h1>
329
+ <h1>Vite + React Calculator</h1>
270
330
  </header>
271
331
  <main>
272
332
  <Calculator />
273
333
  </main>
274
334
  </div>
275
- );
276
- };
335
+ )
336
+ }
277
337
 
278
- export default App;"""
338
+ export default App
339
+ """
279
340
  with open(app_path, "w", encoding="utf-8") as f:
280
341
  f.write(app_content)
342
+
343
+ # 创建 App.css 文件
344
+ app_css_path = os.path.join(src_dir, "App.css")
345
+ app_css_content = """.App {
346
+ max-width: 1280px;
347
+ margin: 0 auto;
348
+ padding: 2rem;
349
+ text-align: center;
350
+ }
351
+
352
+ .App-header {
353
+ margin-bottom: 2rem;
354
+ }
355
+
356
+ .App-header h1 {
357
+ font-size: 2.5em;
358
+ line-height: 1.1;
359
+ }
360
+ """
361
+ with open(app_css_path, "w", encoding="utf-8") as f:
362
+ f.write(app_css_content)
281
363
 
282
364
  def _create_calculator_component(self, src_dir: str) -> None:
283
365
  """创建 Calculator.tsx 组件"""
284
366
  calculator_path = os.path.join(src_dir, "Calculator.tsx")
285
- calculator_content = """import React, { useState } from 'react';
367
+ calculator_content = """import { useState } from 'react'
368
+ import './Calculator.css'
286
369
 
287
370
  interface CalculatorProps {}
288
371
 
289
372
  const Calculator: React.FC<CalculatorProps> = () => {
290
- const [display, setDisplay] = useState<string>('0');
291
- const [equation, setEquation] = useState<string>('');
373
+ const [display, setDisplay] = useState<string>('0')
374
+ const [equation, setEquation] = useState<string>('')
292
375
 
293
376
  const handleNumber = (num: string) => {
294
377
  if (display === '0') {
295
- setDisplay(num);
378
+ setDisplay(num)
296
379
  } else {
297
- setDisplay(display + num);
380
+ setDisplay(display + num)
298
381
  }
299
- };
382
+ }
300
383
 
301
384
  const handleOperator = (operator: string) => {
302
- setEquation(display + ' ' + operator + ' ');
303
- setDisplay('0');
304
- };
385
+ setEquation(display + ' ' + operator + ' ')
386
+ setDisplay('0')
387
+ }
305
388
 
306
389
  const handleEqual = () => {
307
390
  try {
308
- const result = eval(equation + display);
309
- setDisplay(result.toString());
310
- setEquation('');
391
+ const result = eval(equation + display)
392
+ setDisplay(result.toString())
393
+ setEquation('')
311
394
  } catch (error) {
312
- setDisplay('Error');
313
- setEquation('');
395
+ setDisplay('Error')
396
+ setEquation('')
314
397
  }
315
- };
398
+ }
316
399
 
317
400
  const handleClear = () => {
318
- setDisplay('0');
319
- setEquation('');
320
- };
401
+ setDisplay('0')
402
+ setEquation('')
403
+ }
321
404
 
322
405
  return (
323
406
  <div className="calculator">
@@ -345,31 +428,130 @@ const Calculator: React.FC<CalculatorProps> = () => {
345
428
  <button onClick={() => handleNumber('.')}>.</button>
346
429
  </div>
347
430
  </div>
348
- );
349
- };
431
+ )
432
+ }
350
433
 
351
- export default Calculator;"""
434
+ export default Calculator
435
+ """
352
436
  with open(calculator_path, "w", encoding="utf-8") as f:
353
437
  f.write(calculator_content)
438
+
439
+ # 创建 Calculator.css 文件
440
+ calculator_css_path = os.path.join(src_dir, "Calculator.css")
441
+ calculator_css_content = """.calculator {
442
+ width: 300px;
443
+ margin: 0 auto;
444
+ border: 1px solid #ccc;
445
+ border-radius: 5px;
446
+ padding: 10px;
447
+ background-color: #f7f7f7;
448
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
449
+ }
450
+
451
+ .display {
452
+ background-color: #fff;
453
+ border: 1px solid #ddd;
454
+ border-radius: 3px;
455
+ margin-bottom: 10px;
456
+ padding: 10px;
457
+ text-align: right;
458
+ min-height: 60px;
459
+ }
460
+
461
+ .equation {
462
+ color: #777;
463
+ font-size: 14px;
464
+ min-height: 20px;
465
+ }
466
+
467
+ .current {
468
+ font-size: 24px;
469
+ font-weight: bold;
470
+ margin-top: 5px;
471
+ }
472
+
473
+ .buttons {
474
+ display: grid;
475
+ grid-template-columns: repeat(4, 1fr);
476
+ gap: 5px;
477
+ }
478
+
479
+ button {
480
+ background-color: #e0e0e0;
481
+ border: 1px solid #ccc;
482
+ border-radius: 3px;
483
+ font-size: 18px;
484
+ padding: 10px;
485
+ cursor: pointer;
486
+ transition: background-color 0.2s;
487
+ }
488
+
489
+ button:hover {
490
+ background-color: #d0d0d0;
491
+ }
492
+
493
+ button:active {
494
+ background-color: #c0c0c0;
495
+ }
496
+ """
497
+ with open(calculator_css_path, "w", encoding="utf-8") as f:
498
+ f.write(calculator_css_content)
354
499
 
355
- def _create_index_tsx(self, src_dir: str) -> None:
356
- """创建 index.tsx 文件"""
357
- index_path = os.path.join(src_dir, "index.tsx")
358
- index_content = """import React from 'react';
359
- import ReactDOM from 'react-dom/client';
360
- import App from './App';
361
-
362
- const root = ReactDOM.createRoot(
363
- document.getElementById('root') as HTMLElement
364
- );
365
-
366
- root.render(
500
+ def _create_main_tsx(self, src_dir: str) -> None:
501
+ """创建 main.tsx 文件"""
502
+ main_path = os.path.join(src_dir, "main.tsx")
503
+ main_content = """import React from 'react'
504
+ import ReactDOM from 'react-dom/client'
505
+ import App from './App'
506
+ import './index.css'
507
+
508
+ ReactDOM.createRoot(document.getElementById('root')!).render(
367
509
  <React.StrictMode>
368
510
  <App />
369
- </React.StrictMode>
370
- );"""
371
- with open(index_path, "w", encoding="utf-8") as f:
372
- f.write(index_content)
511
+ </React.StrictMode>,
512
+ )
513
+ """
514
+ with open(main_path, "w", encoding="utf-8") as f:
515
+ f.write(main_content)
516
+
517
+ # 创建 index.css 文件
518
+ index_css_path = os.path.join(src_dir, "index.css")
519
+ index_css_content = """:root {
520
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
521
+ line-height: 1.5;
522
+ font-weight: 400;
523
+
524
+ color-scheme: light dark;
525
+ color: rgba(255, 255, 255, 0.87);
526
+ background-color: #242424;
527
+
528
+ font-synthesis: none;
529
+ text-rendering: optimizeLegibility;
530
+ -webkit-font-smoothing: antialiased;
531
+ -moz-osx-font-smoothing: grayscale;
532
+ }
533
+
534
+ @media (prefers-color-scheme: light) {
535
+ :root {
536
+ color: #213547;
537
+ background-color: #ffffff;
538
+ }
539
+ }
540
+
541
+ body {
542
+ margin: 0;
543
+ display: flex;
544
+ place-items: center;
545
+ min-width: 320px;
546
+ min-height: 100vh;
547
+ }
548
+
549
+ * {
550
+ box-sizing: border-box;
551
+ }
552
+ """
553
+ with open(index_css_path, "w", encoding="utf-8") as f:
554
+ f.write(index_css_content)
373
555
 
374
556
 
375
557
  class FileCreatorFactory: