auto-coder 0.1.380__tar.gz → 0.1.381__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 (357) hide show
  1. {auto_coder-0.1.380 → auto_coder-0.1.381}/PKG-INFO +1 -1
  2. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/auto_coder.egg-info/SOURCES.txt +3 -0
  4. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +2 -3
  5. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +48 -8
  6. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/python_linter.py +2 -22
  7. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/reactjs_linter.py +8 -1
  8. auto_coder-0.1.381/src/autocoder/linters/test_python_linter.py +166 -0
  9. auto_coder-0.1.381/src/autocoder/linters/test_reactjs_linter.py +183 -0
  10. auto_coder-0.1.381/src/autocoder/linters/test_vue_linter.py +217 -0
  11. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/vue_linter.py +9 -1
  12. auto_coder-0.1.381/src/autocoder/version.py +2 -0
  13. auto_coder-0.1.380/src/autocoder/version.py +0 -2
  14. {auto_coder-0.1.380 → auto_coder-0.1.381}/LICENSE +0 -0
  15. {auto_coder-0.1.380 → auto_coder-0.1.381}/README.md +0 -0
  16. {auto_coder-0.1.380 → auto_coder-0.1.381}/setup.cfg +0 -0
  17. {auto_coder-0.1.380 → auto_coder-0.1.381}/setup.py +0 -0
  18. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  19. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/auto_coder.egg-info/entry_points.txt +0 -0
  20. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/auto_coder.egg-info/requires.txt +0 -0
  21. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/auto_coder.egg-info/top_level.txt +0 -0
  22. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/__init__.py +0 -0
  23. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/__init__.py +0 -0
  24. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/agentic_filter.py +0 -0
  25. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  26. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/auto_filegroup.py +0 -0
  27. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/auto_guess_query.py +0 -0
  28. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/auto_learn.py +0 -0
  29. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  30. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/auto_review_commit.py +0 -0
  31. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/auto_tool.py +0 -0
  32. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/__init__.py +0 -0
  33. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/agent_hub.py +0 -0
  34. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/agentic_lang.py +0 -0
  35. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/agentic_tool_display.py +0 -0
  36. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/base_agent.py +0 -0
  37. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/default_tools.py +0 -0
  38. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/test_base_agent.py +0 -0
  39. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tool_registry.py +0 -0
  40. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/__init__.py +0 -0
  41. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +0 -0
  42. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +0 -0
  43. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/base_tool_resolver.py +0 -0
  44. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/example_tool_resolver.py +0 -0
  45. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +0 -0
  46. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +0 -0
  47. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +0 -0
  48. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py +0 -0
  49. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +0 -0
  50. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +0 -0
  51. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +0 -0
  52. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +0 -0
  53. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +0 -0
  54. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/types.py +0 -0
  55. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/base_agentic/utils.py +0 -0
  56. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/coder.py +0 -0
  57. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/designer.py +0 -0
  58. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/planner.py +0 -0
  59. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/agent/project_reader.py +0 -0
  60. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/auto_coder.py +0 -0
  61. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/auto_coder_rag.py +0 -0
  62. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/auto_coder_runner.py +0 -0
  63. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/auto_coder_server.py +0 -0
  64. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/benchmark.py +0 -0
  65. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/chat/__init__.py +0 -0
  66. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/chat/conf_command.py +0 -0
  67. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/chat/models_command.py +0 -0
  68. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/chat/rules_command.py +0 -0
  69. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/chat_auto_coder.py +0 -0
  70. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/chat_auto_coder_lang.py +0 -0
  71. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/command_args.py +0 -0
  72. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/command_parser.py +0 -0
  73. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/commands/__init__.py +0 -0
  74. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/commands/auto_command.py +0 -0
  75. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/commands/auto_web.py +0 -0
  76. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/commands/tools.py +0 -0
  77. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/JupyterClient.py +0 -0
  78. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/ShellClient.py +0 -0
  79. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/__init__.py +0 -0
  80. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/action_yml_file_manager.py +0 -0
  81. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/anything2images.py +0 -0
  82. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/anything2img.py +0 -0
  83. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/audio.py +0 -0
  84. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/auto_coder_lang.py +0 -0
  85. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/auto_configure.py +0 -0
  86. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/buildin_tokenizer.py +0 -0
  87. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/chunk_validation.py +0 -0
  88. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/cleaner.py +0 -0
  89. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_execute.py +0 -0
  90. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_generate.py +0 -0
  91. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  92. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  93. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  94. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_merge.py +0 -0
  95. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  96. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  97. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  98. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/code_modification_ranker.py +0 -0
  99. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_completer.py +0 -0
  100. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_completer_v2.py +0 -0
  101. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_file_manager/__init__.py +0 -0
  102. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_file_manager/examples.py +0 -0
  103. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_file_manager/manager.py +0 -0
  104. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_file_manager/models.py +0 -0
  105. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_file_manager/utils.py +0 -0
  106. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_generator.py +0 -0
  107. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/command_templates.py +0 -0
  108. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/computer_use.py +0 -0
  109. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/conf_import_export.py +0 -0
  110. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/conf_utils.py +0 -0
  111. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/conf_validator.py +0 -0
  112. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/const.py +0 -0
  113. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/context_pruner.py +0 -0
  114. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/conversation_pruner.py +0 -0
  115. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/conversations/__init__.py +0 -0
  116. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/conversations/compatibility.py +0 -0
  117. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/conversations/conversation_manager.py +0 -0
  118. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/conversations/example.py +0 -0
  119. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/directory_cache/__init__.py +0 -0
  120. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/directory_cache/cache.py +0 -0
  121. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/directory_cache/test_cache.py +0 -0
  122. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/__init__.py +0 -0
  123. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/backup.py +0 -0
  124. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/conversation_checkpoint.py +0 -0
  125. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/examples.py +0 -0
  126. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/manager.py +0 -0
  127. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/models.py +0 -0
  128. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/store.py +0 -0
  129. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/test_backup.py +0 -0
  130. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/test_manager.py +0 -0
  131. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/test_models.py +0 -0
  132. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/test_store.py +0 -0
  133. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/test_utils.py +0 -0
  134. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_checkpoint/utils.py +0 -0
  135. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_monitor/__init__.py +0 -0
  136. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/file_monitor/monitor.py +0 -0
  137. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/files.py +0 -0
  138. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/git_utils.py +0 -0
  139. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/global_cancel.py +0 -0
  140. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/ignorefiles/__init__.py +0 -0
  141. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
  142. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
  143. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/image_to_page.py +0 -0
  144. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/index_import_export.py +0 -0
  145. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/interpreter.py +0 -0
  146. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/mcp_hub.py +0 -0
  147. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/mcp_server.py +0 -0
  148. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/mcp_server_install.py +0 -0
  149. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/mcp_server_types.py +0 -0
  150. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  151. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  152. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  153. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/mcp_tools.py +0 -0
  154. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/memory_manager.py +0 -0
  155. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/model_speed_tester.py +0 -0
  156. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/openai_content.py +0 -0
  157. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/printer.py +0 -0
  158. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/recall_validation.py +0 -0
  159. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/result_manager.py +0 -0
  160. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/rulefiles/__init__.py +0 -0
  161. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/rulefiles/autocoderrules_utils.py +0 -0
  162. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/run_cmd.py +0 -0
  163. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/save_formatted_log.py +0 -0
  164. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/screenshots.py +0 -0
  165. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/search.py +0 -0
  166. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/search_replace.py +0 -0
  167. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/shells.py +0 -0
  168. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/stats_panel.py +0 -0
  169. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/stream_out_type.py +0 -0
  170. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/sys_prompt.py +0 -0
  171. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/test_run_cmd.py +0 -0
  172. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/text.py +0 -0
  173. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/token_cost_caculate.py +0 -0
  174. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/types.py +0 -0
  175. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  176. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/__init__.py +0 -0
  177. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/__init__.py +0 -0
  178. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit.py +0 -0
  179. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
  180. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
  181. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
  182. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  183. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
  184. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
  185. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
  186. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
  187. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
  188. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +0 -0
  189. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
  190. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -0
  191. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
  192. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +0 -0
  193. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
  194. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -0
  195. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_edit_types.py +0 -0
  196. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
  197. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  198. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  199. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  200. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  201. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  202. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  203. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  204. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  205. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  206. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  207. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  208. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_manager.py +0 -0
  209. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  210. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/__init__.py +0 -0
  211. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/base_compiler.py +0 -0
  212. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/compiler_config_api.py +0 -0
  213. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  214. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/compiler_factory.py +0 -0
  215. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/java_compiler.py +0 -0
  216. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/models.py +0 -0
  217. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/normal_compiler.py +0 -0
  218. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/provided_compiler.py +0 -0
  219. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/python_compiler.py +0 -0
  220. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  221. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/shadow_compiler.py +0 -0
  222. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/compilers/vue_compiler.py +0 -0
  223. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/data/byzerllm.md +0 -0
  224. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/data/tokenizer.json +0 -0
  225. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/db/__init__.py +0 -0
  226. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/db/store.py +0 -0
  227. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/dispacher/__init__.py +0 -0
  228. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/dispacher/actions/__init__.py +0 -0
  229. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/dispacher/actions/action.py +0 -0
  230. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/dispacher/actions/copilot.py +0 -0
  231. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  232. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  233. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/events/__init__.py +0 -0
  234. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/events/event_content.py +0 -0
  235. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/events/event_manager.py +0 -0
  236. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/events/event_manager_singleton.py +0 -0
  237. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/events/event_store.py +0 -0
  238. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/events/event_types.py +0 -0
  239. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/helper/__init__.py +0 -0
  240. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/helper/project_creator.py +0 -0
  241. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/helper/rag_doc_creator.py +0 -0
  242. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/__init__.py +0 -0
  243. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/entry.py +0 -0
  244. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/filter/__init__.py +0 -0
  245. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/filter/normal_filter.py +0 -0
  246. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/filter/quick_filter.py +0 -0
  247. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/for_command.py +0 -0
  248. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/index.py +0 -0
  249. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/symbols_utils.py +0 -0
  250. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/index/types.py +0 -0
  251. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/lang.py +0 -0
  252. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/__init__.py +0 -0
  253. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/base_linter.py +0 -0
  254. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/linter_factory.py +0 -0
  255. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/models.py +0 -0
  256. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/normal_linter.py +0 -0
  257. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/linters/shadow_linter.py +0 -0
  258. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/memory/__init__.py +0 -0
  259. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/memory/active_context_manager.py +0 -0
  260. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/memory/active_package.py +0 -0
  261. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/memory/async_processor.py +0 -0
  262. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/memory/directory_mapper.py +0 -0
  263. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/models.py +0 -0
  264. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/plugins/__init__.py +0 -0
  265. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  266. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  267. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/plugins/sample_plugin.py +0 -0
  268. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  269. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/plugins/utils.py +0 -0
  270. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/privacy/__init__.py +0 -0
  271. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/privacy/model_filter.py +0 -0
  272. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/pyproject/__init__.py +0 -0
  273. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/__init__.py +0 -0
  274. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/agentic_rag.py +0 -0
  275. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/api_server.py +0 -0
  276. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/__init__.py +0 -0
  277. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/base_cache.py +0 -0
  278. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  279. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  280. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
  281. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  282. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  283. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  284. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  285. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/cache/simple_cache.py +0 -0
  286. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/conversation_to_queries.py +0 -0
  287. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/doc_filter.py +0 -0
  288. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/document_retriever.py +0 -0
  289. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/lang.py +0 -0
  290. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/llm_wrapper.py +0 -0
  291. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/loaders/__init__.py +0 -0
  292. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  293. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  294. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/loaders/filter_utils.py +0 -0
  295. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/loaders/image_loader.py +0 -0
  296. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  297. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  298. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/long_context_rag.py +0 -0
  299. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  300. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/rag_config.py +0 -0
  301. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/rag_entry.py +0 -0
  302. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/relevant_utils.py +0 -0
  303. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/searchable.py +0 -0
  304. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/stream_event/__init__.py +0 -0
  305. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  306. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/stream_event/types.py +0 -0
  307. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/test_doc_filter.py +0 -0
  308. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/test_long_context_rag.py +0 -0
  309. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/test_token_limiter.py +0 -0
  310. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/token_checker.py +0 -0
  311. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/token_counter.py +0 -0
  312. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/token_limiter.py +0 -0
  313. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/token_limiter_utils.py +0 -0
  314. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/tools/__init__.py +0 -0
  315. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/tools/recall_tool.py +0 -0
  316. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/tools/search_tool.py +0 -0
  317. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/types.py +0 -0
  318. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/utils.py +0 -0
  319. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/rag/variable_holder.py +0 -0
  320. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/regexproject/__init__.py +0 -0
  321. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/run_context.py +0 -0
  322. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/shadows/__init__.py +0 -0
  323. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/shadows/shadow_manager.py +0 -0
  324. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/suffixproject/__init__.py +0 -0
  325. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/tsproject/__init__.py +0 -0
  326. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/__init__.py +0 -0
  327. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/_markitdown.py +0 -0
  328. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  329. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  330. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/auto_project_type.py +0 -0
  331. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  332. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/conversation_store.py +0 -0
  333. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  334. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/llms.py +0 -0
  335. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/log_capture.py +0 -0
  336. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/model_provider_selector.py +0 -0
  337. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/multi_turn.py +0 -0
  338. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/operate_config_api.py +0 -0
  339. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/print_table.py +0 -0
  340. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/project_structure.py +0 -0
  341. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/queue_communicate.py +0 -0
  342. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/request_event_queue.py +0 -0
  343. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/request_queue.py +0 -0
  344. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/rest.py +0 -0
  345. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/stream_thinking.py +0 -0
  346. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/thread_utils.py +0 -0
  347. {auto_coder-0.1.380 → auto_coder-0.1.381}/src/autocoder/utils/types.py +0 -0
  348. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_action_regex_project.py +0 -0
  349. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_action_yml_file_manager.py +0 -0
  350. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_chat_auto_coder.py +0 -0
  351. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_code_auto_merge_editblock.py +0 -0
  352. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_command_completer.py +0 -0
  353. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_planner.py +0 -0
  354. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_plugins.py +0 -0
  355. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_privacy.py +0 -0
  356. {auto_coder-0.1.380 → auto_coder-0.1.381}/tests/test_queue_communicate.py +0 -0
  357. {auto_coder-0.1.380 → auto_coder-0.1.381}/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.380
3
+ Version: 0.1.381
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.380
3
+ Version: 0.1.381
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -250,6 +250,9 @@ src/autocoder/linters/normal_linter.py
250
250
  src/autocoder/linters/python_linter.py
251
251
  src/autocoder/linters/reactjs_linter.py
252
252
  src/autocoder/linters/shadow_linter.py
253
+ src/autocoder/linters/test_python_linter.py
254
+ src/autocoder/linters/test_reactjs_linter.py
255
+ src/autocoder/linters/test_vue_linter.py
253
256
  src/autocoder/linters/vue_linter.py
254
257
  src/autocoder/memory/__init__.py
255
258
  src/autocoder/memory/active_context_manager.py
@@ -19,7 +19,6 @@ class ExecuteCommandToolResolver(BaseToolResolver):
19
19
  self.tool: ExecuteCommandTool = tool # For type hinting
20
20
 
21
21
  def resolve(self) -> ToolResult:
22
- printer = Printer()
23
22
  command = self.tool.command
24
23
  requires_approval = self.tool.requires_approval
25
24
  source_dir = self.args.source_dir or "."
@@ -35,11 +34,11 @@ class ExecuteCommandToolResolver(BaseToolResolver):
35
34
  # Approval mechanism (simplified)
36
35
  if requires_approval:
37
36
  # In a real scenario, this would involve user interaction
38
- printer.print_str_in_terminal(f"Command requires approval: {command}")
37
+ logger.info(f"Command requires approval: {command}")
39
38
  # For now, let's assume approval is granted in non-interactive mode or handled elsewhere
40
39
  pass
41
40
 
42
- printer.print_str_in_terminal(f"Executing command: {command} in {os.path.abspath(source_dir)}")
41
+ logger.info(f"Executing command: {command} in {os.path.abspath(source_dir)}")
43
42
  try:
44
43
  # 使用封装的run_cmd方法执行命令
45
44
  if get_run_context().is_web():
@@ -8,6 +8,9 @@ from autocoder.common import shells
8
8
  from autocoder.common.printer import Printer
9
9
  from loguru import logger
10
10
  import typing
11
+ from autocoder.common.context_pruner import PruneContext
12
+ from autocoder.rag.token_counter import count_tokens
13
+ from autocoder.common import SourceCode
11
14
  from autocoder.common import AutoCoderArgs
12
15
  from autocoder.events.event_manager_singleton import get_event_manager
13
16
  from autocoder.run_context import get_run_context
@@ -18,9 +21,42 @@ class ExecuteCommandToolResolver(BaseToolResolver):
18
21
  def __init__(self, agent: Optional['AgenticEdit'], tool: ExecuteCommandTool, args: AutoCoderArgs):
19
22
  super().__init__(agent, tool, args)
20
23
  self.tool: ExecuteCommandTool = tool # For type hinting
24
+ self.context_pruner = PruneContext(
25
+ max_tokens=self.args.context_prune_safe_zone_tokens,
26
+ args=self.args,
27
+ llm=self.agent.context_prune_llm
28
+ )
21
29
 
22
- def resolve(self) -> ToolResult:
23
- printer = Printer()
30
+ def _prune_file_content(self, content: str, file_path: str) -> str:
31
+ """对文件内容进行剪枝处理"""
32
+ if not self.context_pruner:
33
+ return content
34
+
35
+ # 计算 token 数量
36
+ tokens = count_tokens(content)
37
+ if tokens <= self.args.context_prune_safe_zone_tokens:
38
+ return content
39
+
40
+ # 创建 SourceCode 对象
41
+ source_code = SourceCode(
42
+ module_name=file_path,
43
+ source_code=content,
44
+ tokens=tokens
45
+ )
46
+
47
+ # 使用 context_pruner 进行剪枝
48
+ pruned_sources = self.context_pruner.handle_overflow(
49
+ file_sources=[source_code],
50
+ conversations=self.agent.current_conversations if self.agent else [],
51
+ strategy=self.args.context_prune_strategy
52
+ )
53
+
54
+ if not pruned_sources:
55
+ return content
56
+
57
+ return pruned_sources[0].source_code
58
+
59
+ def resolve(self) -> ToolResult:
24
60
  command = self.tool.command
25
61
  requires_approval = self.tool.requires_approval
26
62
  source_dir = self.args.source_dir or "."
@@ -36,11 +72,11 @@ class ExecuteCommandToolResolver(BaseToolResolver):
36
72
  # Approval mechanism (simplified)
37
73
  if requires_approval:
38
74
  # In a real scenario, this would involve user interaction
39
- printer.print_str_in_terminal(f"Command requires approval: {command}")
75
+ logger.info(f"Command requires approval: {command}")
40
76
  # For now, let's assume approval is granted in non-interactive mode or handled elsewhere
41
77
  pass
42
78
 
43
- printer.print_str_in_terminal(f"Executing command: {command} in {os.path.abspath(source_dir)}")
79
+ logger.info(f"Executing command: {command} in {os.path.abspath(source_dir)}")
44
80
  try:
45
81
  # 使用封装的run_cmd方法执行命令
46
82
  if get_run_context().is_web():
@@ -56,13 +92,17 @@ class ExecuteCommandToolResolver(BaseToolResolver):
56
92
  logger.info(f"Command executed: {command}")
57
93
  logger.info(f"Return Code: {exit_code}")
58
94
  if output:
59
- logger.info(f"Output:\n{output}")
95
+ logger.info(f"Original Output (length: {len(output)} chars)") # Avoid logging potentially huge output directly
96
+
97
+ final_output = self._prune_file_content(output, "command_output")
60
98
 
61
99
  if exit_code == 0:
62
- return ToolResult(success=True, message="Command executed successfully.", content=output)
100
+ return ToolResult(success=True, message="Command executed successfully.", content=final_output)
63
101
  else:
64
- error_message = f"Command failed with return code {exit_code}.\nOutput:\n{output}"
65
- return ToolResult(success=False, message=error_message, content={"output": output, "returncode": exit_code})
102
+ # For the human-readable error message, we might prefer the original full output.
103
+ # For the agent-consumable content, we provide the (potentially pruned) final_output.
104
+ error_message_for_human = f"Command failed with return code {exit_code}.\nOutput:\n{output}"
105
+ return ToolResult(success=False, message=error_message_for_human, content={"output": final_output, "returncode": exit_code})
66
106
 
67
107
  except FileNotFoundError:
68
108
  return ToolResult(success=False, message=f"Error: The command '{command.split()[0]}' was not found. Please ensure it is installed and in the system's PATH.")
@@ -332,17 +332,7 @@ class PythonLinter(BaseLinter):
332
332
  result['warning_count'] += pylint_result['warning_count']
333
333
  except Exception as e:
334
334
  if self.verbose:
335
- print(f"Error running pylint: {str(e)}")
336
-
337
- # Run flake8
338
- try:
339
- flake8_result = self._run_flake8(file_path)
340
- result['issues'].extend(flake8_result['issues'])
341
- result['error_count'] += flake8_result['error_count']
342
- result['warning_count'] += flake8_result['warning_count']
343
- except Exception as e:
344
- if self.verbose:
345
- print(f"Error running flake8: {str(e)}")
335
+ print(f"Error running pylint: {str(e)}")
346
336
 
347
337
  # Mark as successful
348
338
  result['success'] = True
@@ -400,17 +390,7 @@ class PythonLinter(BaseLinter):
400
390
  except Exception as e:
401
391
  if self.verbose:
402
392
  print(f"Error running pylint: {str(e)}")
403
-
404
- # Run flake8
405
- try:
406
- flake8_result = self._run_flake8(project_path)
407
- result['issues'].extend(flake8_result['issues'])
408
- result['error_count'] += flake8_result['error_count']
409
- result['warning_count'] += flake8_result['warning_count']
410
- except Exception as e:
411
- if self.verbose:
412
- print(f"Error running flake8: {str(e)}")
413
-
393
+
414
394
  # Mark as successful
415
395
  result['success'] = True
416
396
 
@@ -243,11 +243,18 @@ class ReactJSLinter(BaseLinter):
243
243
 
244
244
  # Process individual messages
245
245
  for message in file_result.get('messages', []):
246
+ severity = "info"
247
+ if message.get('severity', 1) == 2:
248
+ severity = "error"
249
+ elif message.get('severity', 1) == 1:
250
+ severity = "warning"
251
+ elif message.get('severity', 1) == 0:
252
+ severity = "info"
246
253
  issue = {
247
254
  'file': file_rel_path,
248
255
  'line': message.get('line', 0),
249
256
  'column': message.get('column', 0),
250
- 'severity': 'error' if message.get('severity', 1) == 2 else 'warning',
257
+ 'severity': severity,
251
258
  'message': message.get('message', ''),
252
259
  'rule': message.get('ruleId', 'unknown')
253
260
  }
@@ -0,0 +1,166 @@
1
+ import os
2
+ import pytest
3
+ import json
4
+ from unittest.mock import patch, MagicMock
5
+ from autocoder.linters.python_linter import PythonLinter
6
+
7
+ class TestPythonLinter:
8
+ """测试PythonLinter类"""
9
+
10
+ def setup_method(self):
11
+ """每个测试方法前的设置"""
12
+ self.linter = PythonLinter(verbose=True)
13
+
14
+ def test_lint_file_nonexistent_file(self):
15
+ """测试不存在的文件"""
16
+ result = self.linter.lint_file("nonexistent_file.py")
17
+
18
+ assert result['success'] == False
19
+ assert "不存在" in result.get('error', '') or "does not exist" in result.get('error', '')
20
+
21
+ def test_lint_file_unsupported_file(self):
22
+ """测试不支持的文件类型"""
23
+ # 创建一个临时文件
24
+ with open("temp.txt", "w") as f:
25
+ f.write("这不是Python文件")
26
+
27
+ try:
28
+ result = self.linter.lint_file("temp.txt")
29
+
30
+ assert result['success'] == False
31
+ assert "不支持" in result.get('error', '') or "Unsupported" in result.get('error', '')
32
+ finally:
33
+ # 清理
34
+ if os.path.exists("temp.txt"):
35
+ os.remove("temp.txt")
36
+
37
+ @patch.object(PythonLinter, '_check_dependencies')
38
+ @patch.object(PythonLinter, '_install_dependencies_if_needed')
39
+ def test_lint_file_missing_dependencies(self, mock_install, mock_check):
40
+ """测试缺少依赖项的情况"""
41
+ # 模拟依赖检查失败
42
+ mock_check.return_value = False
43
+ # 模拟安装依赖失败
44
+ mock_install.return_value = False
45
+
46
+ # 创建一个临时Python文件
47
+ with open("temp.py", "w") as f:
48
+ f.write("print('Hello, World!')")
49
+
50
+ try:
51
+ result = self.linter.lint_file("temp.py")
52
+
53
+ assert result['success'] == False
54
+ assert "依赖" in result.get('error', '') or "dependencies" in result.get('error', '')
55
+ finally:
56
+ # 清理
57
+ if os.path.exists("temp.py"):
58
+ os.remove("temp.py")
59
+
60
+ @patch.object(PythonLinter, '_check_dependencies')
61
+ @patch.object(PythonLinter, '_run_pylint')
62
+ def test_lint_file_successful(self, mock_pylint, mock_check):
63
+ """测试成功的lint过程"""
64
+ # 模拟依赖检查成功
65
+ mock_check.return_value = True
66
+
67
+ # 模拟pylint结果
68
+ mock_pylint.return_value = {
69
+ 'error_count': 1,
70
+ 'warning_count': 2,
71
+ 'issues': [
72
+ {
73
+ 'file': 'test.py',
74
+ 'line': 10,
75
+ 'column': 5,
76
+ 'severity': 'error',
77
+ 'message': '未定义变量',
78
+ 'rule': 'undefined-variable',
79
+ 'tool': 'pylint'
80
+ },
81
+ {
82
+ 'file': 'test.py',
83
+ 'line': 15,
84
+ 'column': 1,
85
+ 'severity': 'warning',
86
+ 'message': '不必要的空行',
87
+ 'rule': 'trailing-whitespace',
88
+ 'tool': 'pylint'
89
+ }
90
+ ]
91
+ }
92
+
93
+ # 创建一个临时Python文件
94
+ with open("test.py", "w") as f:
95
+ f.write("print('Hello, World!')")
96
+
97
+ try:
98
+ result = self.linter.lint_file("test.py")
99
+
100
+ assert result['success'] == True
101
+ assert result['language'] == 'python'
102
+ assert result['files_analyzed'] == 1
103
+ assert result['error_count'] == 1
104
+ assert result['warning_count'] == 2 # 只有pylint的警告
105
+ assert len(result['issues']) == 2 # 总共2个问题
106
+ finally:
107
+ # 清理
108
+ if os.path.exists("test.py"):
109
+ os.remove("test.py")
110
+
111
+ # python -m pytest src/autocoder/linters/test_python_linter.py::TestPythonLinter::test_lint_real_file -v -s
112
+ @pytest.mark.integration
113
+ def test_lint_real_file(self):
114
+ """测试对实际文件的lint功能"""
115
+ # 实际存在的Python文件路径
116
+ file_path = "/Users/allwefantasy/projects/auto-coder/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py"
117
+
118
+ # 检查文件是否存在,如果不存在则跳过测试
119
+ if not os.path.exists(file_path):
120
+ pytest.skip(f"测试文件 {file_path} 不存在")
121
+
122
+ # 执行lint操作
123
+ result = self.linter.lint_file(file_path)
124
+
125
+ # 基本断言
126
+ assert result['success'] == True
127
+ assert result['language'] == 'python'
128
+ assert result['files_analyzed'] == 1
129
+
130
+ # 打印完整的lint结果
131
+ print("\n==== Lint结果概述 ====")
132
+ print(f"文件: {file_path}")
133
+ print(f"错误数: {result['error_count']}")
134
+ print(f"警告数: {result['warning_count']}")
135
+ print(f"问题总数: {len(result['issues'])}")
136
+
137
+ print("\n==== 详细问题列表 ====")
138
+ if not result['issues']:
139
+ print("没有发现问题!")
140
+ else:
141
+ for i, issue in enumerate(result['issues'], 1):
142
+ print(f"\n问题 #{i}:")
143
+ print(f" 文件: {issue['file']}")
144
+ print(f" 位置: 第{issue['line']}行, 第{issue['column']}列")
145
+ print(f" 严重性: {issue['severity']}")
146
+ print(f" 信息: {issue['message']}")
147
+ print(f" 规则: {issue['rule']}")
148
+ print(f" 工具: {issue['tool']}")
149
+
150
+ # 可选:打印完整的JSON格式结果
151
+ print("\n==== 完整JSON结果 ====")
152
+ print(json.dumps(result, indent=2, ensure_ascii=False))
153
+
154
+ # 验证结果中包含issues字段,且为列表类型
155
+ assert 'issues' in result
156
+ assert isinstance(result['issues'], list)
157
+
158
+ # 如果有issues,验证其结构
159
+ if result['issues']:
160
+ issue = result['issues'][0]
161
+ assert 'file' in issue
162
+ assert 'line' in issue
163
+ assert 'severity' in issue
164
+ assert 'message' in issue
165
+ assert 'rule' in issue
166
+ assert 'tool' in issue
@@ -0,0 +1,183 @@
1
+ import os
2
+ import pytest
3
+ import json
4
+ from unittest.mock import patch, MagicMock
5
+ from autocoder.linters.reactjs_linter import ReactJSLinter
6
+
7
+ # python -m pytest src/autocoder/linters/test_reactjs_linter.py::TestReactJSLinter::test_lint_real_file -v -s
8
+ class TestReactJSLinter:
9
+ """测试ReactJSLinter类"""
10
+
11
+ def setup_method(self):
12
+ """每个测试方法前的设置"""
13
+ self.linter = ReactJSLinter(verbose=True)
14
+
15
+ def test_lint_file_nonexistent_file(self):
16
+ """测试不存在的文件"""
17
+ result = self.linter.lint_file("nonexistent_file.jsx")
18
+
19
+ assert result['success'] == False
20
+ assert "不存在" in result.get('error', '') or "does not exist" in result.get('error', '')
21
+
22
+ def test_lint_file_unsupported_file(self):
23
+ """测试不支持的文件类型"""
24
+ # 创建一个临时文件
25
+ with open("temp.txt", "w") as f:
26
+ f.write("这不是React文件")
27
+
28
+ try:
29
+ result = self.linter.lint_file("temp.txt")
30
+
31
+ assert result['success'] == False
32
+ assert "不支持" in result.get('error', '') or "Unsupported" in result.get('error', '')
33
+ finally:
34
+ # 清理
35
+ if os.path.exists("temp.txt"):
36
+ os.remove("temp.txt")
37
+
38
+ @patch.object(ReactJSLinter, '_check_dependencies')
39
+ def test_lint_file_missing_dependencies(self, mock_check):
40
+ """测试缺少依赖项的情况"""
41
+ # 模拟依赖检查失败
42
+ mock_check.return_value = False
43
+
44
+ # 创建一个临时React文件
45
+ with open("temp.jsx", "w") as f:
46
+ f.write("import React from 'react';\nfunction App() { return <div>Hello</div>; }")
47
+
48
+ try:
49
+ result = self.linter.lint_file("temp.jsx")
50
+
51
+ assert result['success'] == False
52
+ assert "依赖" in result.get('error', '') or "dependencies" in result.get('error', '')
53
+ finally:
54
+ # 清理
55
+ if os.path.exists("temp.jsx"):
56
+ os.remove("temp.jsx")
57
+
58
+ @patch.object(ReactJSLinter, '_detect_file_type')
59
+ def test_lint_file_not_react_file(self, mock_detect):
60
+ """测试非React文件"""
61
+ # 模拟文件类型检测失败
62
+ mock_detect.return_value = False
63
+
64
+ # 创建一个临时JS文件
65
+ with open("temp.js", "w") as f:
66
+ f.write("function hello() { console.log('Hello'); }")
67
+
68
+ try:
69
+ result = self.linter.lint_file("temp.js")
70
+
71
+ assert result['success'] == False
72
+ assert "Not a React file" in result.get('error', '')
73
+ finally:
74
+ # 清理
75
+ if os.path.exists("temp.js"):
76
+ os.remove("temp.js")
77
+
78
+ @patch.object(ReactJSLinter, '_check_dependencies')
79
+ @patch.object(ReactJSLinter, '_detect_file_type')
80
+ @patch.object(ReactJSLinter, '_install_eslint_if_needed')
81
+ @patch('subprocess.run')
82
+ def test_lint_file_successful(self, mock_run, mock_install, mock_detect, mock_check):
83
+ """测试成功的lint过程"""
84
+ # 模拟依赖检查成功
85
+ mock_check.return_value = True
86
+ # 模拟文件类型检测成功
87
+ mock_detect.return_value = True
88
+ # 模拟安装ESLint成功
89
+ mock_install.return_value = True
90
+
91
+ # 模拟subprocess.run的结果
92
+ mock_process = MagicMock()
93
+ mock_process.stdout = json.dumps([
94
+ {
95
+ 'filePath': os.path.abspath('test.jsx'),
96
+ 'errorCount': 1,
97
+ 'warningCount': 2,
98
+ 'messages': [
99
+ {
100
+ 'line': 10,
101
+ 'column': 5,
102
+ 'severity': 2,
103
+ 'message': '未使用的变量',
104
+ 'ruleId': 'no-unused-vars'
105
+ },
106
+ {
107
+ 'line': 15,
108
+ 'column': 1,
109
+ 'severity': 1,
110
+ 'message': '缺少分号',
111
+ 'ruleId': 'semi'
112
+ },
113
+ {
114
+ 'line': 20,
115
+ 'column': 10,
116
+ 'severity': 1,
117
+ 'message': '建议使用解构赋值',
118
+ 'ruleId': 'prefer-destructuring'
119
+ }
120
+ ]
121
+ }
122
+ ])
123
+ mock_run.return_value = mock_process
124
+
125
+ # 创建一个临时React文件
126
+ with open("test.jsx", "w") as f:
127
+ f.write("import React from 'react';\nfunction App() { return <div>Hello</div>; }")
128
+
129
+ try:
130
+ result = self.linter.lint_file("test.jsx")
131
+
132
+ assert result['success'] == True
133
+ assert result['framework'] == 'reactjs'
134
+ assert result['files_analyzed'] == 1
135
+ assert result['error_count'] == 1
136
+ assert result['warning_count'] == 2
137
+ assert len(result['issues']) == 3
138
+ finally:
139
+ # 清理
140
+ if os.path.exists("test.jsx"):
141
+ os.remove("test.jsx")
142
+
143
+ # python -m pytest src/autocoder/linters/test_reactjs_linter.py::TestReactJSLinter::test_lint_real_file -v -s
144
+ @pytest.mark.integration
145
+ def test_lint_real_file(self):
146
+ """测试对实际文件的lint功能"""
147
+ # 检查是否有React示例文件可用
148
+ file_path = "/Users/allwefantasy/projects/auto-coder.web/frontend/src/components/Sidebar/ChatPanel.tsx"
149
+
150
+ # 执行lint操作
151
+ result = self.linter.lint_file(file_path)
152
+
153
+ # 基本断言
154
+ assert 'success' in result
155
+ assert 'framework' in result
156
+ assert 'files_analyzed' in result
157
+
158
+ # 打印完整的lint结果
159
+ print("\n==== Lint结果概述 ====")
160
+ print(f"文件: {file_path}")
161
+ print(f"成功: {result.get('success', False)}")
162
+ if 'error' in result:
163
+ print(f"错误: {result['error']}")
164
+ else:
165
+ print(f"错误数: {result.get('error_count', 0)}")
166
+ print(f"警告数: {result.get('warning_count', 0)}")
167
+ print(f"问题总数: {len(result.get('issues', []))}")
168
+
169
+ print("\n==== 详细问题列表 ====")
170
+ if not result.get('issues', []):
171
+ print("没有发现问题或执行失败!")
172
+ else:
173
+ for i, issue in enumerate(result['issues'], 1):
174
+ print(f"\n问题 #{i}:")
175
+ print(f" 文件: {issue['file']}")
176
+ print(f" 位置: 第{issue['line']}行, 第{issue['column']}列")
177
+ print(f" 严重性: {issue['severity']}")
178
+ print(f" 信息: {issue['message']}")
179
+ print(f" 规则: {issue['rule']}")
180
+
181
+ # 可选:打印完整的JSON格式结果
182
+ print("\n==== 完整JSON结果 ====")
183
+ print(json.dumps(result, indent=2, ensure_ascii=False))