auto-coder 0.1.352__tar.gz → 0.1.353__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 (290) hide show
  1. {auto_coder-0.1.352 → auto_coder-0.1.353}/PKG-INFO +1 -1
  2. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/auto_coder.egg-info/SOURCES.txt +1 -0
  4. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/git_utils.py +1 -1
  5. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit.py +33 -0
  6. auto_coder-0.1.353/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +163 -0
  7. auto_coder-0.1.353/src/autocoder/version.py +1 -0
  8. auto_coder-0.1.352/src/autocoder/version.py +0 -1
  9. {auto_coder-0.1.352 → auto_coder-0.1.353}/LICENSE +0 -0
  10. {auto_coder-0.1.352 → auto_coder-0.1.353}/README.md +0 -0
  11. {auto_coder-0.1.352 → auto_coder-0.1.353}/setup.cfg +0 -0
  12. {auto_coder-0.1.352 → auto_coder-0.1.353}/setup.py +0 -0
  13. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  14. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/auto_coder.egg-info/entry_points.txt +0 -0
  15. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/auto_coder.egg-info/requires.txt +0 -0
  16. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/auto_coder.egg-info/top_level.txt +0 -0
  17. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/__init__.py +0 -0
  18. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/__init__.py +0 -0
  19. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/agentic_filter.py +0 -0
  20. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  21. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/auto_filegroup.py +0 -0
  22. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/auto_guess_query.py +0 -0
  23. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  24. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/auto_review_commit.py +0 -0
  25. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/auto_tool.py +0 -0
  26. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/coder.py +0 -0
  27. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/designer.py +0 -0
  28. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/planner.py +0 -0
  29. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/agent/project_reader.py +0 -0
  30. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/auto_coder.py +0 -0
  31. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/auto_coder_rag.py +0 -0
  32. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/auto_coder_runner.py +0 -0
  33. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/auto_coder_server.py +0 -0
  34. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/benchmark.py +0 -0
  35. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/chat/__init__.py +0 -0
  36. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/chat_auto_coder.py +0 -0
  37. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/chat_auto_coder_lang.py +0 -0
  38. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/command_args.py +0 -0
  39. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/command_parser.py +0 -0
  40. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/commands/__init__.py +0 -0
  41. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/commands/auto_command.py +0 -0
  42. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/commands/auto_web.py +0 -0
  43. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/commands/tools.py +0 -0
  44. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/JupyterClient.py +0 -0
  45. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/ShellClient.py +0 -0
  46. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/__init__.py +0 -0
  47. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/action_yml_file_manager.py +0 -0
  48. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/anything2images.py +0 -0
  49. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/anything2img.py +0 -0
  50. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/audio.py +0 -0
  51. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/auto_coder_lang.py +0 -0
  52. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/auto_configure.py +0 -0
  53. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/buildin_tokenizer.py +0 -0
  54. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/chunk_validation.py +0 -0
  55. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/cleaner.py +0 -0
  56. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_execute.py +0 -0
  57. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_generate.py +0 -0
  58. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  59. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  60. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  61. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_merge.py +0 -0
  62. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  63. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  64. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  65. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/code_modification_ranker.py +0 -0
  66. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/command_completer.py +0 -0
  67. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/command_generator.py +0 -0
  68. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/command_templates.py +0 -0
  69. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/computer_use.py +0 -0
  70. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/conf_import_export.py +0 -0
  71. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/conf_utils.py +0 -0
  72. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/conf_validator.py +0 -0
  73. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/const.py +0 -0
  74. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/context_pruner.py +0 -0
  75. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/conversation_pruner.py +0 -0
  76. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/files.py +0 -0
  77. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/global_cancel.py +0 -0
  78. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/image_to_page.py +0 -0
  79. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/index_import_export.py +0 -0
  80. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/interpreter.py +0 -0
  81. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/llm_rerank.py +0 -0
  82. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/mcp_hub.py +0 -0
  83. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/mcp_server.py +0 -0
  84. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/mcp_server_install.py +0 -0
  85. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/mcp_server_types.py +0 -0
  86. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  87. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  88. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  89. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/mcp_tools.py +0 -0
  90. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/memory_manager.py +0 -0
  91. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/model_speed_tester.py +0 -0
  92. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/openai_content.py +0 -0
  93. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/printer.py +0 -0
  94. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/recall_validation.py +0 -0
  95. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/result_manager.py +0 -0
  96. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/run_cmd.py +0 -0
  97. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/screenshots.py +0 -0
  98. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/search.py +0 -0
  99. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/search_replace.py +0 -0
  100. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/shells.py +0 -0
  101. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/stats_panel.py +0 -0
  102. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/stream_out_type.py +0 -0
  103. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/sys_prompt.py +0 -0
  104. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/test_run_cmd.py +0 -0
  105. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/text.py +0 -0
  106. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/token_cost_caculate.py +0 -0
  107. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/types.py +0 -0
  108. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  109. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/__init__.py +0 -0
  110. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/__init__.py +0 -0
  111. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_conversation.py +0 -0
  112. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
  113. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
  114. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
  115. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  116. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
  117. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
  118. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
  119. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
  120. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
  121. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
  122. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +0 -0
  123. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
  124. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
  125. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -0
  126. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_edit_types.py +0 -0
  127. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
  128. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  129. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  130. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  131. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  132. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  133. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  134. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  135. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  136. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  137. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  138. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  139. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_manager.py +0 -0
  140. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  141. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/__init__.py +0 -0
  142. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/base_compiler.py +0 -0
  143. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/compiler_config_api.py +0 -0
  144. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  145. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/compiler_factory.py +0 -0
  146. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/java_compiler.py +0 -0
  147. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/models.py +0 -0
  148. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/provided_compiler.py +0 -0
  149. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/python_compiler.py +0 -0
  150. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  151. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/shadow_compiler.py +0 -0
  152. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/compilers/vue_compiler.py +0 -0
  153. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/data/byzerllm.md +0 -0
  154. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/data/tokenizer.json +0 -0
  155. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/db/__init__.py +0 -0
  156. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/db/store.py +0 -0
  157. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/dispacher/__init__.py +0 -0
  158. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/dispacher/actions/__init__.py +0 -0
  159. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/dispacher/actions/action.py +0 -0
  160. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/dispacher/actions/copilot.py +0 -0
  161. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  162. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  163. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/events/__init__.py +0 -0
  164. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/events/event_content.py +0 -0
  165. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/events/event_manager.py +0 -0
  166. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/events/event_manager_singleton.py +0 -0
  167. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/events/event_store.py +0 -0
  168. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/events/event_types.py +0 -0
  169. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/helper/__init__.py +0 -0
  170. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/helper/project_creator.py +0 -0
  171. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/helper/rag_doc_creator.py +0 -0
  172. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/ignorefiles/__init__.py +0 -0
  173. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/ignorefiles/ignore_file_utils.py +0 -0
  174. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/ignorefiles/test_ignore_file_utils.py +0 -0
  175. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/__init__.py +0 -0
  176. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/entry.py +0 -0
  177. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/filter/__init__.py +0 -0
  178. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/filter/normal_filter.py +0 -0
  179. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/filter/quick_filter.py +0 -0
  180. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/for_command.py +0 -0
  181. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/index.py +0 -0
  182. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/symbols_utils.py +0 -0
  183. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/index/types.py +0 -0
  184. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/lang.py +0 -0
  185. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/linters/__init__.py +0 -0
  186. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/linters/base_linter.py +0 -0
  187. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/linters/linter_factory.py +0 -0
  188. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/linters/models.py +0 -0
  189. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/linters/python_linter.py +0 -0
  190. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/linters/reactjs_linter.py +0 -0
  191. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/linters/shadow_linter.py +0 -0
  192. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/linters/vue_linter.py +0 -0
  193. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/memory/__init__.py +0 -0
  194. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/memory/active_context_manager.py +0 -0
  195. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/memory/active_package.py +0 -0
  196. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/memory/async_processor.py +0 -0
  197. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/memory/directory_mapper.py +0 -0
  198. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/models.py +0 -0
  199. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/plugins/__init__.py +0 -0
  200. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  201. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  202. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/plugins/sample_plugin.py +0 -0
  203. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  204. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/plugins/utils.py +0 -0
  205. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/privacy/__init__.py +0 -0
  206. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/privacy/model_filter.py +0 -0
  207. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/pyproject/__init__.py +0 -0
  208. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/__init__.py +0 -0
  209. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/api_server.py +0 -0
  210. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/__init__.py +0 -0
  211. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/base_cache.py +0 -0
  212. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  213. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  214. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
  215. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  216. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  217. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  218. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  219. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/cache/simple_cache.py +0 -0
  220. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/conversation_to_queries.py +0 -0
  221. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/doc_filter.py +0 -0
  222. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/document_retriever.py +0 -0
  223. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/lang.py +0 -0
  224. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/llm_wrapper.py +0 -0
  225. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/loaders/__init__.py +0 -0
  226. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  227. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  228. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/loaders/filter_utils.py +0 -0
  229. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/loaders/image_loader.py +0 -0
  230. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  231. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  232. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/loaders/test_image_loader.py +0 -0
  233. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/long_context_rag.py +0 -0
  234. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  235. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/rag_config.py +0 -0
  236. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/rag_entry.py +0 -0
  237. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/raw_rag.py +0 -0
  238. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/relevant_utils.py +0 -0
  239. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/searchable.py +0 -0
  240. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/simple_directory_reader.py +0 -0
  241. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/simple_rag.py +0 -0
  242. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/stream_event/__init__.py +0 -0
  243. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  244. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/stream_event/types.py +0 -0
  245. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/token_checker.py +0 -0
  246. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/token_counter.py +0 -0
  247. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/token_limiter.py +0 -0
  248. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/token_limiter_utils.py +0 -0
  249. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/types.py +0 -0
  250. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/utils.py +0 -0
  251. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/rag/variable_holder.py +0 -0
  252. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/regexproject/__init__.py +0 -0
  253. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/run_context.py +0 -0
  254. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/shadows/__init__.py +0 -0
  255. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/shadows/shadow_manager.py +0 -0
  256. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/suffixproject/__init__.py +0 -0
  257. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/tsproject/__init__.py +0 -0
  258. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/__init__.py +0 -0
  259. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/_markitdown.py +0 -0
  260. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  261. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  262. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/auto_project_type.py +0 -0
  263. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  264. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/conversation_store.py +0 -0
  265. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  266. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/llms.py +0 -0
  267. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/log_capture.py +0 -0
  268. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/model_provider_selector.py +0 -0
  269. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/multi_turn.py +0 -0
  270. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/operate_config_api.py +0 -0
  271. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/print_table.py +0 -0
  272. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/project_structure.py +0 -0
  273. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/queue_communicate.py +0 -0
  274. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/request_event_queue.py +0 -0
  275. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/request_queue.py +0 -0
  276. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/rest.py +0 -0
  277. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/stream_thinking.py +0 -0
  278. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/tests.py +0 -0
  279. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/thread_utils.py +0 -0
  280. {auto_coder-0.1.352 → auto_coder-0.1.353}/src/autocoder/utils/types.py +0 -0
  281. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_action_regex_project.py +0 -0
  282. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_action_yml_file_manager.py +0 -0
  283. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_chat_auto_coder.py +0 -0
  284. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_code_auto_merge_editblock.py +0 -0
  285. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_command_completer.py +0 -0
  286. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_planner.py +0 -0
  287. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_plugins.py +0 -0
  288. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_privacy.py +0 -0
  289. {auto_coder-0.1.352 → auto_coder-0.1.353}/tests/test_queue_communicate.py +0 -0
  290. {auto_coder-0.1.352 → auto_coder-0.1.353}/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.352
3
+ Version: 0.1.353
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.352
3
+ Version: 0.1.353
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -135,6 +135,7 @@ src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver
135
135
  src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py
136
136
  src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py
137
137
  src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py
138
+ src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py
138
139
  src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py
139
140
  src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py
140
141
  src/autocoder/compilers/__init__.py
@@ -64,7 +64,7 @@ def commit_changes(repo_path: str, message: str) -> CommitResult:
64
64
  try:
65
65
  repo.git.add(all=True)
66
66
  if repo.is_dirty():
67
- commit = repo.index.commit(message)
67
+ commit = repo.index.commit(message,skip_hooks=True)
68
68
  result = CommitResult(
69
69
  success=True,
70
70
  commit_message=message,
@@ -1177,6 +1177,8 @@ Below are some files the user is focused on, and the content is up to date. Thes
1177
1177
  # If no event was processed in this iteration, break inner loop
1178
1178
  if not found_event:
1179
1179
  break
1180
+
1181
+ yield TokenUsageEvent(usage=meta_holder.meta)
1180
1182
 
1181
1183
  # After generator exhausted, yield any remaining content
1182
1184
  if in_thinking_block:
@@ -1440,6 +1442,37 @@ Below are some files the user is focused on, and the content is up to date. Thes
1440
1442
  self.apply_pre_changes()
1441
1443
  event_stream = self.analyze(request)
1442
1444
  for event in event_stream:
1445
+ if isinstance(event, TokenUsageEvent):
1446
+ last_meta: SingleOutputMeta = event.usage
1447
+ # Get model info for pricing
1448
+ from autocoder.utils import llms as llm_utils
1449
+ model_name = ",".join(llm_utils.get_llm_names(self.llm))
1450
+ model_info = llm_utils.get_model_info(
1451
+ model_name, self.args.product_mode) or {}
1452
+ input_price = model_info.get(
1453
+ "input_price", 0.0) if model_info else 0.0
1454
+ output_price = model_info.get(
1455
+ "output_price", 0.0) if model_info else 0.0
1456
+
1457
+ # Calculate costs
1458
+ input_cost = (last_meta.input_tokens_count *
1459
+ input_price) / 1000000 # Convert to millions
1460
+ # Convert to millions
1461
+ output_cost = (
1462
+ last_meta.generated_tokens_count * output_price) / 1000000
1463
+
1464
+ self.printer.print_in_terminal(
1465
+ "code_generation_complete",
1466
+ duration=0.0,
1467
+ input_tokens=last_meta.input_tokens_count,
1468
+ output_tokens=last_meta.generated_tokens_count,
1469
+ input_cost=input_cost,
1470
+ output_cost=output_cost,
1471
+ speed=0.0,
1472
+ model_names=model_name,
1473
+ sampling_count=1
1474
+ )
1475
+
1443
1476
  if isinstance(event, LLMThinkingEvent):
1444
1477
  # Render thinking within a less prominent style, maybe grey?
1445
1478
  console.print(f"[grey50]{event.text}[/grey50]", end="")
@@ -0,0 +1,163 @@
1
+ import pytest
2
+ import os
3
+ import tempfile
4
+ import shutil
5
+ from unittest.mock import patch, MagicMock
6
+
7
+ from autocoder.common.v2.agent.agentic_edit_tools.search_files_tool_resolver import SearchFilesToolResolver
8
+ from autocoder.common.v2.agent.agentic_edit_types import SearchFilesTool, ToolResult
9
+ from autocoder.common import AutoCoderArgs
10
+
11
+ # Helper function to create a directory structure with files for testing
12
+ def create_test_files(base_dir, structure):
13
+ """
14
+ Creates a directory structure with files based on the provided dictionary.
15
+ Keys are filenames (relative to base_dir), values are file contents.
16
+ Directories are created automatically.
17
+ """
18
+ for path, content in structure.items():
19
+ full_path = os.path.join(base_dir, path)
20
+ os.makedirs(os.path.dirname(full_path), exist_ok=True)
21
+ with open(full_path, 'w') as f:
22
+ f.write(content)
23
+
24
+ @pytest.fixture
25
+ def search_tool_resolver(temp_search_dir):
26
+ """Fixture to provide an instance of SearchFilesToolResolver."""
27
+ # Create AutoCoderArgs with the temp directory as source_dir to allow the security check to pass
28
+ args = AutoCoderArgs()
29
+ args.source_dir = temp_search_dir # Set the source_dir to our temp directory
30
+ return SearchFilesToolResolver(None, SearchFilesTool(path="", regex=""), args)
31
+
32
+ @pytest.fixture(scope="function")
33
+ def temp_search_dir():
34
+ """Fixture to create a temporary directory with test files for searching."""
35
+ temp_dir = tempfile.mkdtemp()
36
+ test_structure = {
37
+ "file1.txt": "Hello world\nThis is a test file.",
38
+ "subdir/file2.py": "import sys\n\ndef main():\n print('Python script')\n",
39
+ "subdir/another.txt": "Another text file with world.",
40
+ ".hiddenfile": "This should be ignored by default",
41
+ "no_match.md": "Markdown file."
42
+ }
43
+ create_test_files(temp_dir, test_structure)
44
+ yield temp_dir # Provide the path to the test function
45
+ shutil.rmtree(temp_dir) # Cleanup after test
46
+
47
+ # --- Test Cases ---
48
+
49
+ def test_resolve_finds_matches(search_tool_resolver, temp_search_dir):
50
+ """Test that resolve finds matches correctly."""
51
+ # Set up the tool with the pattern we want to search for
52
+ tool = SearchFilesTool(
53
+ path="", # Use empty path to search in the source_dir itself
54
+ regex="world",
55
+ file_pattern="*.txt"
56
+ )
57
+ search_tool_resolver.tool = tool
58
+
59
+ # Call the resolve method directly
60
+ response = search_tool_resolver.resolve()
61
+
62
+ # Check the response
63
+ assert isinstance(response, ToolResult)
64
+ assert response.success
65
+ assert "Search completed. Found 2 matches" in response.message
66
+
67
+ # Check that the correct files were found
68
+ assert len(response.content) == 2
69
+ paths = [result["path"] for result in response.content]
70
+ assert any("file1.txt" in path for path in paths)
71
+ assert any("another.txt" in path for path in paths)
72
+
73
+ # Check that the match lines contain our search pattern
74
+ for result in response.content:
75
+ assert "world" in result["match_line"]
76
+
77
+ def test_resolve_no_matches(search_tool_resolver, temp_search_dir):
78
+ """Test that resolve handles no matches correctly."""
79
+ tool = SearchFilesTool(
80
+ path="", # Use empty path to search in the source_dir itself
81
+ regex="nonexistent_pattern",
82
+ file_pattern="*"
83
+ )
84
+ search_tool_resolver.tool = tool
85
+
86
+ response = search_tool_resolver.resolve()
87
+
88
+ assert isinstance(response, ToolResult)
89
+ assert response.success # Still success, just no results
90
+ assert "Search completed. Found 0 matches" in response.message
91
+ assert len(response.content) == 0
92
+
93
+ def test_resolve_file_pattern(search_tool_resolver, temp_search_dir):
94
+ """Test that the file_pattern is correctly applied."""
95
+ # Test .txt pattern
96
+ tool_txt = SearchFilesTool(
97
+ path="", # Use empty path to search in the source_dir itself
98
+ regex="world",
99
+ file_pattern="*.txt" # Only search .txt files
100
+ )
101
+ search_tool_resolver.tool = tool_txt
102
+
103
+ response_txt = search_tool_resolver.resolve()
104
+
105
+ assert isinstance(response_txt, ToolResult)
106
+ assert response_txt.success
107
+ assert "Search completed. Found 2 matches" in response_txt.message
108
+ # Ensure only .txt files were matched
109
+ for result in response_txt.content:
110
+ assert result["path"].endswith(".txt")
111
+
112
+ # Test .py pattern
113
+ tool_py = SearchFilesTool(
114
+ path="", # Use empty path to search in the source_dir itself
115
+ regex="print",
116
+ file_pattern="*.py" # Only search .py files
117
+ )
118
+ search_tool_resolver.tool = tool_py
119
+
120
+ response_py = search_tool_resolver.resolve()
121
+
122
+ assert isinstance(response_py, ToolResult)
123
+ assert response_py.success
124
+ assert "Search completed. Found 1 matches" in response_py.message
125
+ # Ensure only .py files were matched
126
+ for result in response_py.content:
127
+ assert result["path"].endswith(".py")
128
+
129
+ def test_invalid_regex(search_tool_resolver, temp_search_dir):
130
+ """Test that an invalid regex pattern is properly handled."""
131
+ tool = SearchFilesTool(
132
+ path="", # Use empty path to search in the source_dir itself
133
+ regex="[invalid regex", # Invalid regex pattern
134
+ file_pattern="*"
135
+ )
136
+ search_tool_resolver.tool = tool
137
+
138
+ response = search_tool_resolver.resolve()
139
+
140
+ assert isinstance(response, ToolResult)
141
+ assert not response.success
142
+ assert "Invalid regex pattern" in response.message
143
+
144
+ def test_nonexistent_path(search_tool_resolver, temp_search_dir):
145
+ """Test that a nonexistent path is properly handled."""
146
+ # Create a path that we know doesn't exist under temp_search_dir
147
+ nonexistent_path = "nonexistent_subdirectory"
148
+
149
+ tool = SearchFilesTool(
150
+ path=nonexistent_path, # This path doesn't exist in our temp directory
151
+ regex="pattern",
152
+ file_pattern="*"
153
+ )
154
+ search_tool_resolver.tool = tool
155
+
156
+ response = search_tool_resolver.resolve()
157
+
158
+ assert isinstance(response, ToolResult)
159
+ assert not response.success
160
+ assert "Error: Search path not found" in response.message
161
+
162
+ # Add more tests as needed
163
+
@@ -0,0 +1 @@
1
+ __version__ = "0.1.353"
@@ -1 +0,0 @@
1
- __version__ = "0.1.352"
File without changes
File without changes
File without changes
File without changes