auto-coder 0.1.363__tar.gz → 0.1.365__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 (355) hide show
  1. {auto_coder-0.1.363 → auto_coder-0.1.365}/PKG-INFO +2 -2
  2. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/auto_coder.egg-info/PKG-INFO +2 -2
  3. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/auto_coder.egg-info/SOURCES.txt +16 -0
  4. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/auto_coder.egg-info/requires.txt +1 -1
  5. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +1 -1
  6. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/auto_coder.py +46 -2
  7. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/auto_coder_runner.py +2 -0
  8. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/__init__.py +5 -0
  9. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/__init__.py +21 -0
  10. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/backup.py +264 -0
  11. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/conversation_checkpoint.py +182 -0
  12. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/examples.py +217 -0
  13. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/manager.py +611 -0
  14. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/models.py +156 -0
  15. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/store.py +383 -0
  16. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/test_backup.py +242 -0
  17. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/test_manager.py +570 -0
  18. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/test_models.py +360 -0
  19. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/test_store.py +327 -0
  20. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/test_utils.py +297 -0
  21. auto_coder-0.1.365/src/autocoder/common/file_checkpoint/utils.py +119 -0
  22. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/rulefiles/autocoderrules_utils.py +114 -55
  23. auto_coder-0.1.365/src/autocoder/common/save_formatted_log.py +125 -0
  24. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/utils_code_auto_generate.py +2 -1
  25. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit.py +545 -225
  26. auto_coder-0.1.365/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +147 -0
  27. auto_coder-0.1.365/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +141 -0
  28. auto_coder-0.1.365/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +356 -0
  29. auto_coder-0.1.365/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +179 -0
  30. auto_coder-0.1.365/src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +322 -0
  31. auto_coder-0.1.365/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +227 -0
  32. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_types.py +4 -0
  33. auto_coder-0.1.365/src/autocoder/compilers/normal_compiler.py +64 -0
  34. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/events/event_manager_singleton.py +133 -4
  35. auto_coder-0.1.365/src/autocoder/linters/normal_linter.py +373 -0
  36. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/linters/python_linter.py +4 -2
  37. auto_coder-0.1.365/src/autocoder/version.py +1 -0
  38. auto_coder-0.1.363/src/autocoder/common/save_formatted_log.py +0 -54
  39. auto_coder-0.1.363/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -107
  40. auto_coder-0.1.363/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -54
  41. auto_coder-0.1.363/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +0 -225
  42. auto_coder-0.1.363/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -134
  43. auto_coder-0.1.363/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -186
  44. auto_coder-0.1.363/src/autocoder/version.py +0 -1
  45. {auto_coder-0.1.363 → auto_coder-0.1.365}/LICENSE +0 -0
  46. {auto_coder-0.1.363 → auto_coder-0.1.365}/README.md +0 -0
  47. {auto_coder-0.1.363 → auto_coder-0.1.365}/setup.cfg +0 -0
  48. {auto_coder-0.1.363 → auto_coder-0.1.365}/setup.py +0 -0
  49. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  50. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/auto_coder.egg-info/entry_points.txt +0 -0
  51. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/auto_coder.egg-info/top_level.txt +0 -0
  52. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/__init__.py +0 -0
  53. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/__init__.py +0 -0
  54. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/agentic_filter.py +0 -0
  55. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  56. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/auto_filegroup.py +0 -0
  57. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/auto_guess_query.py +0 -0
  58. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/auto_learn.py +0 -0
  59. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  60. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/auto_review_commit.py +0 -0
  61. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/auto_tool.py +0 -0
  62. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/__init__.py +0 -0
  63. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/agent_hub.py +0 -0
  64. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/agentic_lang.py +0 -0
  65. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/agentic_tool_display.py +0 -0
  66. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/base_agent.py +0 -0
  67. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/default_tools.py +0 -0
  68. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/test_base_agent.py +0 -0
  69. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tool_registry.py +0 -0
  70. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/__init__.py +0 -0
  71. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +0 -0
  72. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +0 -0
  73. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/base_tool_resolver.py +0 -0
  74. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/example_tool_resolver.py +0 -0
  75. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +0 -0
  76. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +0 -0
  77. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +0 -0
  78. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py +0 -0
  79. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +0 -0
  80. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +0 -0
  81. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +0 -0
  82. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +0 -0
  83. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +0 -0
  84. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/types.py +0 -0
  85. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/base_agentic/utils.py +0 -0
  86. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/coder.py +0 -0
  87. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/designer.py +0 -0
  88. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/planner.py +0 -0
  89. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/agent/project_reader.py +0 -0
  90. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/auto_coder_rag.py +0 -0
  91. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/auto_coder_server.py +0 -0
  92. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/benchmark.py +0 -0
  93. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/chat/__init__.py +0 -0
  94. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/chat/conf_command.py +0 -0
  95. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/chat/models_command.py +0 -0
  96. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/chat/rules_command.py +0 -0
  97. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/chat_auto_coder.py +0 -0
  98. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/chat_auto_coder_lang.py +0 -0
  99. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/command_args.py +0 -0
  100. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/command_parser.py +0 -0
  101. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/commands/__init__.py +0 -0
  102. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/commands/auto_command.py +0 -0
  103. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/commands/auto_web.py +0 -0
  104. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/commands/tools.py +0 -0
  105. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/JupyterClient.py +0 -0
  106. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/ShellClient.py +0 -0
  107. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/action_yml_file_manager.py +0 -0
  108. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/anything2images.py +0 -0
  109. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/anything2img.py +0 -0
  110. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/audio.py +0 -0
  111. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/auto_coder_lang.py +0 -0
  112. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/auto_configure.py +0 -0
  113. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/buildin_tokenizer.py +0 -0
  114. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/chunk_validation.py +0 -0
  115. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/cleaner.py +0 -0
  116. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_execute.py +0 -0
  117. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_generate.py +0 -0
  118. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  119. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  120. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  121. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_merge.py +0 -0
  122. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  123. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  124. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  125. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/code_modification_ranker.py +0 -0
  126. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/command_completer.py +0 -0
  127. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/command_completer_v2.py +0 -0
  128. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/command_generator.py +0 -0
  129. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/command_templates.py +0 -0
  130. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/computer_use.py +0 -0
  131. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/conf_import_export.py +0 -0
  132. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/conf_utils.py +0 -0
  133. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/conf_validator.py +0 -0
  134. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/const.py +0 -0
  135. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/context_pruner.py +0 -0
  136. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/conversation_pruner.py +0 -0
  137. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/conversations/__init__.py +0 -0
  138. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/conversations/compatibility.py +0 -0
  139. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/conversations/conversation_manager.py +0 -0
  140. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/conversations/example.py +0 -0
  141. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/directory_cache/__init__.py +0 -0
  142. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/directory_cache/cache.py +0 -0
  143. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/directory_cache/test_cache.py +0 -0
  144. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/file_monitor/__init__.py +0 -0
  145. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/file_monitor/monitor.py +0 -0
  146. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/files.py +0 -0
  147. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/git_utils.py +0 -0
  148. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/global_cancel.py +0 -0
  149. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/ignorefiles/__init__.py +0 -0
  150. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
  151. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
  152. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/image_to_page.py +0 -0
  153. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/index_import_export.py +0 -0
  154. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/interpreter.py +0 -0
  155. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/llm_rerank.py +0 -0
  156. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/mcp_hub.py +0 -0
  157. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/mcp_server.py +0 -0
  158. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/mcp_server_install.py +0 -0
  159. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/mcp_server_types.py +0 -0
  160. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  161. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  162. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  163. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/mcp_tools.py +0 -0
  164. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/memory_manager.py +0 -0
  165. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/model_speed_tester.py +0 -0
  166. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/openai_content.py +0 -0
  167. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/printer.py +0 -0
  168. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/recall_validation.py +0 -0
  169. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/result_manager.py +0 -0
  170. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/rulefiles/__init__.py +0 -0
  171. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/run_cmd.py +0 -0
  172. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/screenshots.py +0 -0
  173. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/search.py +0 -0
  174. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/search_replace.py +0 -0
  175. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/shells.py +0 -0
  176. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/stats_panel.py +0 -0
  177. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/stream_out_type.py +0 -0
  178. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/sys_prompt.py +0 -0
  179. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/test_run_cmd.py +0 -0
  180. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/text.py +0 -0
  181. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/token_cost_caculate.py +0 -0
  182. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/types.py +0 -0
  183. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/__init__.py +0 -0
  184. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/__init__.py +0 -0
  185. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
  186. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
  187. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
  188. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  189. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
  190. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
  191. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
  192. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
  193. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
  194. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
  195. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
  196. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  197. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  198. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  199. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  200. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  201. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  202. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  203. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  204. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  205. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  206. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  207. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_manager.py +0 -0
  208. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  209. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/__init__.py +0 -0
  210. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/base_compiler.py +0 -0
  211. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/compiler_config_api.py +0 -0
  212. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  213. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/compiler_factory.py +0 -0
  214. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/java_compiler.py +0 -0
  215. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/models.py +0 -0
  216. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/provided_compiler.py +0 -0
  217. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/python_compiler.py +0 -0
  218. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  219. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/shadow_compiler.py +0 -0
  220. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/compilers/vue_compiler.py +0 -0
  221. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/data/byzerllm.md +0 -0
  222. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/data/tokenizer.json +0 -0
  223. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/db/__init__.py +0 -0
  224. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/db/store.py +0 -0
  225. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/dispacher/__init__.py +0 -0
  226. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/dispacher/actions/__init__.py +0 -0
  227. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/dispacher/actions/action.py +0 -0
  228. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/dispacher/actions/copilot.py +0 -0
  229. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  230. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  231. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/events/__init__.py +0 -0
  232. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/events/event_content.py +0 -0
  233. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/events/event_manager.py +0 -0
  234. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/events/event_store.py +0 -0
  235. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/events/event_types.py +0 -0
  236. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/helper/__init__.py +0 -0
  237. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/helper/project_creator.py +0 -0
  238. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/helper/rag_doc_creator.py +0 -0
  239. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/__init__.py +0 -0
  240. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/entry.py +0 -0
  241. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/filter/__init__.py +0 -0
  242. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/filter/normal_filter.py +0 -0
  243. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/filter/quick_filter.py +0 -0
  244. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/for_command.py +0 -0
  245. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/index.py +0 -0
  246. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/symbols_utils.py +0 -0
  247. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/index/types.py +0 -0
  248. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/lang.py +0 -0
  249. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/linters/__init__.py +0 -0
  250. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/linters/base_linter.py +0 -0
  251. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/linters/linter_factory.py +0 -0
  252. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/linters/models.py +0 -0
  253. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/linters/reactjs_linter.py +0 -0
  254. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/linters/shadow_linter.py +0 -0
  255. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/linters/vue_linter.py +0 -0
  256. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/memory/__init__.py +0 -0
  257. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/memory/active_context_manager.py +0 -0
  258. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/memory/active_package.py +0 -0
  259. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/memory/async_processor.py +0 -0
  260. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/memory/directory_mapper.py +0 -0
  261. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/models.py +0 -0
  262. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/plugins/__init__.py +0 -0
  263. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  264. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  265. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/plugins/sample_plugin.py +0 -0
  266. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  267. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/plugins/utils.py +0 -0
  268. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/privacy/__init__.py +0 -0
  269. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/privacy/model_filter.py +0 -0
  270. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/pyproject/__init__.py +0 -0
  271. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/__init__.py +0 -0
  272. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/api_server.py +0 -0
  273. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/__init__.py +0 -0
  274. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/base_cache.py +0 -0
  275. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  276. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  277. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
  278. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  279. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  280. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  281. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  282. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/cache/simple_cache.py +0 -0
  283. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/conversation_to_queries.py +0 -0
  284. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/doc_filter.py +0 -0
  285. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/document_retriever.py +0 -0
  286. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/lang.py +0 -0
  287. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/llm_wrapper.py +0 -0
  288. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/loaders/__init__.py +0 -0
  289. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  290. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  291. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/loaders/filter_utils.py +0 -0
  292. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/loaders/image_loader.py +0 -0
  293. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  294. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  295. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/long_context_rag.py +0 -0
  296. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  297. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/rag_config.py +0 -0
  298. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/rag_entry.py +0 -0
  299. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/raw_rag.py +0 -0
  300. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/relevant_utils.py +0 -0
  301. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/searchable.py +0 -0
  302. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/simple_directory_reader.py +0 -0
  303. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/simple_rag.py +0 -0
  304. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/stream_event/__init__.py +0 -0
  305. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  306. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/stream_event/types.py +0 -0
  307. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/test_doc_filter.py +0 -0
  308. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/test_long_context_rag.py +0 -0
  309. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/test_token_limiter.py +0 -0
  310. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/token_checker.py +0 -0
  311. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/token_counter.py +0 -0
  312. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/token_limiter.py +0 -0
  313. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/token_limiter_utils.py +0 -0
  314. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/types.py +0 -0
  315. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/utils.py +0 -0
  316. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/rag/variable_holder.py +0 -0
  317. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/regexproject/__init__.py +0 -0
  318. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/run_context.py +0 -0
  319. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/shadows/__init__.py +0 -0
  320. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/shadows/shadow_manager.py +0 -0
  321. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/suffixproject/__init__.py +0 -0
  322. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/tsproject/__init__.py +0 -0
  323. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/__init__.py +0 -0
  324. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/_markitdown.py +0 -0
  325. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  326. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  327. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/auto_project_type.py +0 -0
  328. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  329. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/conversation_store.py +0 -0
  330. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  331. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/llms.py +0 -0
  332. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/log_capture.py +0 -0
  333. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/model_provider_selector.py +0 -0
  334. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/multi_turn.py +0 -0
  335. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/operate_config_api.py +0 -0
  336. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/print_table.py +0 -0
  337. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/project_structure.py +0 -0
  338. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/queue_communicate.py +0 -0
  339. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/request_event_queue.py +0 -0
  340. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/request_queue.py +0 -0
  341. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/rest.py +0 -0
  342. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/stream_thinking.py +0 -0
  343. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/tests.py +0 -0
  344. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/thread_utils.py +0 -0
  345. {auto_coder-0.1.363 → auto_coder-0.1.365}/src/autocoder/utils/types.py +0 -0
  346. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_action_regex_project.py +0 -0
  347. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_action_yml_file_manager.py +0 -0
  348. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_chat_auto_coder.py +0 -0
  349. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_code_auto_merge_editblock.py +0 -0
  350. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_command_completer.py +0 -0
  351. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_planner.py +0 -0
  352. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_plugins.py +0 -0
  353. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_privacy.py +0 -0
  354. {auto_coder-0.1.363 → auto_coder-0.1.365}/tests/test_queue_communicate.py +0 -0
  355. {auto_coder-0.1.363 → auto_coder-0.1.365}/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.363
3
+ Version: 0.1.365
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -28,7 +28,7 @@ Requires-Dist: prompt-toolkit
28
28
  Requires-Dist: tokenizers
29
29
  Requires-Dist: aiofiles
30
30
  Requires-Dist: readerwriterlock
31
- Requires-Dist: byzerllm[saas]>=0.1.181
31
+ Requires-Dist: byzerllm[saas]>=0.1.182
32
32
  Requires-Dist: patch
33
33
  Requires-Dist: diff_match_patch
34
34
  Requires-Dist: GitPython
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.363
3
+ Version: 0.1.365
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -28,7 +28,7 @@ Requires-Dist: prompt-toolkit
28
28
  Requires-Dist: tokenizers
29
29
  Requires-Dist: aiofiles
30
30
  Requires-Dist: readerwriterlock
31
- Requires-Dist: byzerllm[saas]>=0.1.181
31
+ Requires-Dist: byzerllm[saas]>=0.1.182
32
32
  Requires-Dist: patch
33
33
  Requires-Dist: diff_match_patch
34
34
  Requires-Dist: GitPython
@@ -139,6 +139,19 @@ src/autocoder/common/conversations/example.py
139
139
  src/autocoder/common/directory_cache/__init__.py
140
140
  src/autocoder/common/directory_cache/cache.py
141
141
  src/autocoder/common/directory_cache/test_cache.py
142
+ src/autocoder/common/file_checkpoint/__init__.py
143
+ src/autocoder/common/file_checkpoint/backup.py
144
+ src/autocoder/common/file_checkpoint/conversation_checkpoint.py
145
+ src/autocoder/common/file_checkpoint/examples.py
146
+ src/autocoder/common/file_checkpoint/manager.py
147
+ src/autocoder/common/file_checkpoint/models.py
148
+ src/autocoder/common/file_checkpoint/store.py
149
+ src/autocoder/common/file_checkpoint/test_backup.py
150
+ src/autocoder/common/file_checkpoint/test_manager.py
151
+ src/autocoder/common/file_checkpoint/test_models.py
152
+ src/autocoder/common/file_checkpoint/test_store.py
153
+ src/autocoder/common/file_checkpoint/test_utils.py
154
+ src/autocoder/common/file_checkpoint/utils.py
142
155
  src/autocoder/common/file_monitor/__init__.py
143
156
  src/autocoder/common/file_monitor/monitor.py
144
157
  src/autocoder/common/ignorefiles/__init__.py
@@ -180,6 +193,7 @@ src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py
180
193
  src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py
181
194
  src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py
182
195
  src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py
196
+ src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py
183
197
  src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py
184
198
  src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py
185
199
  src/autocoder/compilers/__init__.py
@@ -189,6 +203,7 @@ src/autocoder/compilers/compiler_config_manager.py
189
203
  src/autocoder/compilers/compiler_factory.py
190
204
  src/autocoder/compilers/java_compiler.py
191
205
  src/autocoder/compilers/models.py
206
+ src/autocoder/compilers/normal_compiler.py
192
207
  src/autocoder/compilers/provided_compiler.py
193
208
  src/autocoder/compilers/python_compiler.py
194
209
  src/autocoder/compilers/reactjs_compiler.py
@@ -226,6 +241,7 @@ src/autocoder/linters/__init__.py
226
241
  src/autocoder/linters/base_linter.py
227
242
  src/autocoder/linters/linter_factory.py
228
243
  src/autocoder/linters/models.py
244
+ src/autocoder/linters/normal_linter.py
229
245
  src/autocoder/linters/python_linter.py
230
246
  src/autocoder/linters/reactjs_linter.py
231
247
  src/autocoder/linters/shadow_linter.py
@@ -18,7 +18,7 @@ prompt-toolkit
18
18
  tokenizers
19
19
  aiofiles
20
20
  readerwriterlock
21
- byzerllm[saas]>=0.1.181
21
+ byzerllm[saas]>=0.1.182
22
22
  patch
23
23
  diff_match_patch
24
24
  GitPython
@@ -3,13 +3,13 @@ import subprocess
3
3
  from typing import Dict, Any, Optional
4
4
  from autocoder.agent.base_agentic.tools.base_tool_resolver import BaseToolResolver
5
5
  from autocoder.agent.base_agentic.types import ExecuteCommandTool, ToolResult # Import ToolResult from types
6
- from autocoder.common import shells
7
6
  from autocoder.common.printer import Printer
8
7
  from loguru import logger
9
8
  import typing
10
9
  from autocoder.common import AutoCoderArgs
11
10
  from autocoder.events.event_manager_singleton import get_event_manager
12
11
  from autocoder.run_context import get_run_context
12
+ from autocoder.common.run_cmd import run_cmd_subprocess
13
13
  if typing.TYPE_CHECKING:
14
14
  from ..base_agent import BaseAgent
15
15
 
@@ -376,8 +376,8 @@ def main(input_args: Optional[List[str]] = None):
376
376
  llm.setup_sub_client("inference_model", inference_model)
377
377
 
378
378
  if args.index_filter_model:
379
- model_info = models_module.get_model_by_name(args.index_filter_model)
380
- model_name = args.index_filter_model
379
+ model_name = args.index_filter_model.strip()
380
+ model_info = models_module.get_model_by_name(model_name)
381
381
  index_filter_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
382
382
  index_filter_model.deploy(
383
383
  model_path="",
@@ -393,6 +393,41 @@ def main(input_args: Optional[List[str]] = None):
393
393
  )
394
394
  llm.setup_sub_client("index_filter_model", index_filter_model)
395
395
 
396
+ if args.context_prune_model:
397
+ model_name = args.context_prune_model.strip()
398
+ model_info = models_module.get_model_by_name(model_name)
399
+ context_prune_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
400
+ context_prune_model.deploy(
401
+ model_path="",
402
+ pretrained_model_type=model_info["model_type"],
403
+ udf_name=model_name,
404
+ infer_params={
405
+ "saas.base_url": model_info["base_url"],
406
+ "saas.api_key": model_info["api_key"],
407
+ "saas.model": model_info["model_name"],
408
+ "saas.is_reasoning": model_info["is_reasoning"],
409
+ "saas.max_output_tokens": model_info.get("max_output_tokens", 8096)
410
+ }
411
+ )
412
+ llm.setup_sub_client("context_prune_model", context_prune_model)
413
+
414
+ if args.conversation_prune_model:
415
+ model_name = args.conversation_prune_model.strip()
416
+ model_info = models_module.get_model_by_name(model_name)
417
+ conversation_prune_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
418
+ conversation_prune_model.deploy(
419
+ model_path="",
420
+ pretrained_model_type=model_info["model_type"],
421
+ udf_name=model_name,
422
+ infer_params={
423
+ "saas.base_url": model_info["base_url"],
424
+ "saas.api_key": model_info["api_key"],
425
+ "saas.model": model_info["model_name"],
426
+ "saas.is_reasoning": model_info["is_reasoning"],
427
+ "saas.max_output_tokens": model_info.get("max_output_tokens", 8096)
428
+ }
429
+ )
430
+ llm.setup_sub_client("conversation_prune_model", conversation_prune_model)
396
431
 
397
432
  if args.product_mode == "pro":
398
433
  if args.code_model:
@@ -437,6 +472,15 @@ def main(input_args: Optional[List[str]] = None):
437
472
  index_filter_model.setup_default_model_name(args.index_filter_model)
438
473
  llm.setup_sub_client("index_filter_model", index_filter_model)
439
474
 
475
+ if args.context_prune_model:
476
+ context_prune_model = byzerllm.ByzerLLM()
477
+ context_prune_model.setup_default_model_name(args.context_prune_model)
478
+ llm.setup_sub_client("context_prune_model", context_prune_model)
479
+
480
+ if args.conversation_prune_model:
481
+ conversation_prune_model = byzerllm.ByzerLLM()
482
+ conversation_prune_model.setup_default_model_name(args.conversation_prune_model)
483
+ llm.setup_sub_client("conversation_prune_model", conversation_prune_model)
440
484
 
441
485
  if get_run_context().mode != RunMode.WEB and args.human_as_model:
442
486
 
@@ -2850,6 +2850,7 @@ def auto_command(query: str,extra_args: Dict[str,Any]={}):
2850
2850
  else:
2851
2851
  agent.run_in_terminal(AgenticEditRequest(user_input=query))
2852
2852
 
2853
+ completer.refresh_files()
2853
2854
  return
2854
2855
 
2855
2856
  args = get_final_config()
@@ -2902,3 +2903,4 @@ def auto_command(query: str,extra_args: Dict[str,Any]={}):
2902
2903
  border_style="blue",
2903
2904
  padding=(1, 2)
2904
2905
  ))
2906
+ completer.refresh_files()
@@ -254,6 +254,8 @@ class AutoCoderArgs(pydantic.BaseModel):
254
254
  emb_model: Optional[str] = ""
255
255
  code_model: Optional[str] = ""
256
256
  generate_rerank_model: Optional[str] = ""
257
+ context_prune_model: Optional[str] = ""
258
+ conversation_prune_model: Optional[str] = ""
257
259
  inference_model: Optional[str] = ""
258
260
  system_prompt: Optional[str] = ""
259
261
  planner_model: Optional[str] = ""
@@ -399,6 +401,7 @@ class AutoCoderArgs(pydantic.BaseModel):
399
401
 
400
402
  context_prune_strategy: Optional[str] = "extract"
401
403
  context_prune: Optional[bool] = True
404
+ context_prune_safe_zone_tokens: Optional[int] = 32*1024
402
405
  context_prune_sliding_window_size: Optional[int] = 1000
403
406
  context_prune_sliding_window_overlap: Optional[int] = 100
404
407
 
@@ -432,6 +435,8 @@ class AutoCoderArgs(pydantic.BaseModel):
432
435
  auto_fix_lint_max_attempts: Optional[int] = 5
433
436
  auto_fix_compile_max_attempts: Optional[int] = 5
434
437
  auto_fix_merge_max_attempts: Optional[int] = 5
438
+
439
+ enable_auto_select_rules: Optional[bool] = True
435
440
 
436
441
  ignore_clean_shadows: Optional[bool] = False
437
442
 
@@ -0,0 +1,21 @@
1
+ """
2
+ 文件变更管理模块
3
+
4
+ 该模块提供了一种可靠的机制来应用、记录和撤销对项目文件的修改。
5
+ 主要功能包括:
6
+ 1. 将影子系统中的文件变更安全地应用到用户的实际项目中
7
+ 2. 记录每次变更的历史,支持多版本撤销功能
8
+ 3. 提供简单直观的API,便于集成到现有的编辑流程中
9
+ """
10
+
11
+ from autocoder.common.file_checkpoint.models import (
12
+ FileChange, ChangeRecord, ApplyResult, UndoResult, DiffResult
13
+ )
14
+ from autocoder.common.file_checkpoint.manager import FileChangeManager
15
+ from autocoder.common.file_checkpoint.store import FileChangeStore
16
+ from autocoder.common.file_checkpoint.backup import FileBackupManager
17
+
18
+ __all__ = [
19
+ 'FileChange', 'ChangeRecord', 'ApplyResult', 'UndoResult', 'DiffResult',
20
+ 'FileChangeManager', 'FileChangeStore', 'FileBackupManager'
21
+ ]
@@ -0,0 +1,264 @@
1
+ """
2
+ 文件备份管理器
3
+
4
+ 负责文件的备份和恢复操作,支持多版本文件备份。
5
+ """
6
+
7
+ import os
8
+ import uuid
9
+ import shutil
10
+ import logging
11
+ from typing import Optional, Dict, List, Tuple
12
+ from datetime import datetime
13
+ import json
14
+ import threading
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ class FileBackupManager:
20
+ """负责文件的备份和恢复操作"""
21
+
22
+ def __init__(self, backup_dir: Optional[str] = None):
23
+ """
24
+ 初始化备份管理器
25
+
26
+ Args:
27
+ backup_dir: 备份文件存储目录,如果为None则使用默认目录
28
+ """
29
+ if backup_dir is None:
30
+ # 默认备份目录为项目根目录下的.auto-coder/checkpoint
31
+ backup_dir = os.path.join(os.getcwd(), ".auto-coder", "checkpoint")
32
+
33
+ self.backup_dir = backup_dir
34
+ self.metadata_file = os.path.join(backup_dir, "backup_metadata.json")
35
+ self.lock = threading.RLock()
36
+
37
+ # 确保备份目录存在
38
+ os.makedirs(backup_dir, exist_ok=True)
39
+
40
+ # 加载备份元数据
41
+ self.metadata = self._load_metadata()
42
+
43
+ def backup_file(self, file_path: str) -> Optional[str]:
44
+ """
45
+ 备份指定文件
46
+
47
+ Args:
48
+ file_path: 文件路径
49
+
50
+ Returns:
51
+ str: 备份文件ID,如果文件不存在则返回None
52
+ """
53
+ if not os.path.exists(file_path):
54
+ return None
55
+
56
+ with self.lock:
57
+ # 生成唯一的备份ID
58
+ backup_id = str(uuid.uuid4())
59
+
60
+ # 构建备份文件路径
61
+ backup_file_path = os.path.join(self.backup_dir, backup_id)
62
+
63
+ try:
64
+ # 复制文件到备份目录
65
+ shutil.copy2(file_path, backup_file_path)
66
+
67
+ # 更新元数据
68
+ self.metadata[backup_id] = {
69
+ "original_path": file_path,
70
+ "timestamp": datetime.now().timestamp(),
71
+ "size": os.path.getsize(file_path)
72
+ }
73
+
74
+ # 保存元数据
75
+ self._save_metadata()
76
+
77
+ logger.debug(f"已备份文件 {file_path} 到 {backup_file_path}")
78
+ return backup_id
79
+
80
+ except Exception as e:
81
+ logger.error(f"备份文件 {file_path} 失败: {str(e)}")
82
+ # 清理可能部分创建的备份文件
83
+ if os.path.exists(backup_file_path):
84
+ os.remove(backup_file_path)
85
+ return None
86
+
87
+ def restore_file(self, file_path: str, backup_id: str) -> bool:
88
+ """
89
+ 从备份恢复文件
90
+
91
+ Args:
92
+ file_path: 目标文件路径
93
+ backup_id: 备份文件ID
94
+
95
+ Returns:
96
+ bool: 恢复是否成功
97
+ """
98
+ with self.lock:
99
+ # 检查备份ID是否存在
100
+ if backup_id not in self.metadata:
101
+ logger.error(f"备份ID {backup_id} 不存在")
102
+ return False
103
+
104
+ # 构建备份文件路径
105
+ backup_file_path = os.path.join(self.backup_dir, backup_id)
106
+
107
+ # 检查备份文件是否存在
108
+ if not os.path.exists(backup_file_path):
109
+ logger.error(f"备份文件 {backup_file_path} 不存在")
110
+ return False
111
+
112
+ try:
113
+ # 确保目标目录存在
114
+ os.makedirs(os.path.dirname(file_path), exist_ok=True)
115
+
116
+ # 复制备份文件到目标路径
117
+ shutil.copy2(backup_file_path, file_path)
118
+
119
+ logger.debug(f"已从 {backup_file_path} 恢复文件到 {file_path}")
120
+ return True
121
+
122
+ except Exception as e:
123
+ logger.error(f"恢复文件 {file_path} 失败: {str(e)}")
124
+ return False
125
+
126
+ def get_backup_content(self, backup_id: str) -> Optional[str]:
127
+ """
128
+ 获取备份文件的内容
129
+
130
+ Args:
131
+ backup_id: 备份文件ID
132
+
133
+ Returns:
134
+ str: 备份文件内容,如果备份不存在则返回None
135
+ """
136
+ with self.lock:
137
+ # 检查备份ID是否存在
138
+ if backup_id not in self.metadata:
139
+ logger.error(f"备份ID {backup_id} 不存在")
140
+ return None
141
+
142
+ # 构建备份文件路径
143
+ backup_file_path = os.path.join(self.backup_dir, backup_id)
144
+
145
+ # 检查备份文件是否存在
146
+ if not os.path.exists(backup_file_path):
147
+ logger.error(f"备份文件 {backup_file_path} 不存在")
148
+ return None
149
+
150
+ try:
151
+ # 读取备份文件内容
152
+ with open(backup_file_path, 'r', encoding='utf-8') as f:
153
+ return f.read()
154
+
155
+ except Exception as e:
156
+ logger.error(f"读取备份文件 {backup_file_path} 失败: {str(e)}")
157
+ return None
158
+
159
+ def delete_backup(self, backup_id: str) -> bool:
160
+ """
161
+ 删除指定的备份文件
162
+
163
+ Args:
164
+ backup_id: 备份文件ID
165
+
166
+ Returns:
167
+ bool: 删除是否成功
168
+ """
169
+ with self.lock:
170
+ # 检查备份ID是否存在
171
+ if backup_id not in self.metadata:
172
+ logger.error(f"备份ID {backup_id} 不存在")
173
+ return False
174
+
175
+ # 构建备份文件路径
176
+ backup_file_path = os.path.join(self.backup_dir, backup_id)
177
+
178
+ try:
179
+ # 删除备份文件
180
+ if os.path.exists(backup_file_path):
181
+ os.remove(backup_file_path)
182
+
183
+ # 更新元数据
184
+ del self.metadata[backup_id]
185
+
186
+ # 保存元数据
187
+ self._save_metadata()
188
+
189
+ logger.debug(f"已删除备份 {backup_id}")
190
+ return True
191
+
192
+ except Exception as e:
193
+ logger.error(f"删除备份 {backup_id} 失败: {str(e)}")
194
+ return False
195
+
196
+ def clean_old_backups(self, max_age_days: int = 30) -> int:
197
+ """
198
+ 清理过旧的备份文件
199
+
200
+ Args:
201
+ max_age_days: 最大保留天数
202
+
203
+ Returns:
204
+ int: 清理的备份文件数量
205
+ """
206
+ with self.lock:
207
+ now = datetime.now().timestamp()
208
+ max_age_seconds = max_age_days * 24 * 60 * 60
209
+
210
+ backup_ids_to_delete = []
211
+
212
+ # 找出过旧的备份
213
+ for backup_id, metadata in self.metadata.items():
214
+ if now - metadata["timestamp"] > max_age_seconds:
215
+ backup_ids_to_delete.append(backup_id)
216
+
217
+ # 删除过旧的备份
218
+ deleted_count = 0
219
+ for backup_id in backup_ids_to_delete:
220
+ if self.delete_backup(backup_id):
221
+ deleted_count += 1
222
+
223
+ return deleted_count
224
+
225
+ def get_backups_for_file(self, file_path: str) -> List[Tuple[str, float]]:
226
+ """
227
+ 获取指定文件的所有备份
228
+
229
+ Args:
230
+ file_path: 文件路径
231
+
232
+ Returns:
233
+ List[Tuple[str, float]]: 备份ID和时间戳的列表,按时间戳降序排序
234
+ """
235
+ with self.lock:
236
+ backups = []
237
+
238
+ for backup_id, metadata in self.metadata.items():
239
+ if metadata["original_path"] == file_path:
240
+ backups.append((backup_id, metadata["timestamp"]))
241
+
242
+ # 按时间戳降序排序
243
+ backups.sort(key=lambda x: x[1], reverse=True)
244
+
245
+ return backups
246
+
247
+ def _load_metadata(self) -> Dict:
248
+ """加载备份元数据"""
249
+ if os.path.exists(self.metadata_file):
250
+ try:
251
+ with open(self.metadata_file, 'r', encoding='utf-8') as f:
252
+ return json.load(f)
253
+ except Exception as e:
254
+ logger.error(f"加载备份元数据失败: {str(e)}")
255
+
256
+ return {}
257
+
258
+ def _save_metadata(self) -> None:
259
+ """保存备份元数据"""
260
+ try:
261
+ with open(self.metadata_file, 'w', encoding='utf-8') as f:
262
+ json.dump(self.metadata, f, indent=2)
263
+ except Exception as e:
264
+ logger.error(f"保存备份元数据失败: {str(e)}")
@@ -0,0 +1,182 @@
1
+ import os
2
+ import json
3
+ import time
4
+ import uuid
5
+ from typing import List, Dict, Any, Optional
6
+ from pydantic import BaseModel
7
+ from loguru import logger
8
+
9
+
10
+ class ConversationCheckpoint(BaseModel):
11
+ """对话检查点,用于保存特定时刻的对话状态"""
12
+
13
+ checkpoint_id: str # 检查点ID,与变更组ID对应
14
+ timestamp: float # 创建时间戳
15
+ conversations: List[Dict[str, Any]] # 对话历史
16
+ metadata: Optional[Dict[str, Any]] = None # 元数据,可包含额外信息
17
+
18
+
19
+ class ConversationCheckpointStore:
20
+ """对话检查点存储管理器"""
21
+
22
+ def __init__(self, store_dir: Optional[str] = None, max_history: int = 50):
23
+ """
24
+ 初始化对话检查点存储
25
+
26
+ Args:
27
+ store_dir: 存储目录,默认为用户主目录下的.autocoder/conversation_checkpoints
28
+ max_history: 最大保存的历史版本数量
29
+ """
30
+ if store_dir is None:
31
+ home_dir = os.path.expanduser("~")
32
+ store_dir = os.path.join(home_dir, ".autocoder", "conversation_checkpoints")
33
+
34
+ self.store_dir = os.path.abspath(store_dir)
35
+ self.max_history = max_history
36
+
37
+ # 确保存储目录存在
38
+ os.makedirs(self.store_dir, exist_ok=True)
39
+ logger.info(f"对话检查点存储目录: {self.store_dir}")
40
+
41
+ def save_checkpoint(self, checkpoint: ConversationCheckpoint) -> str:
42
+ """
43
+ 保存对话检查点
44
+
45
+ Args:
46
+ checkpoint: 对话检查点对象
47
+
48
+ Returns:
49
+ str: 检查点ID
50
+ """
51
+ # 确保检查点有ID
52
+ if not checkpoint.checkpoint_id:
53
+ checkpoint.checkpoint_id = str(uuid.uuid4())
54
+
55
+ # 确保时间戳存在
56
+ if not checkpoint.timestamp:
57
+ checkpoint.timestamp = time.time()
58
+
59
+ # 构建文件路径
60
+ file_path = os.path.join(self.store_dir, f"{checkpoint.checkpoint_id}.json")
61
+
62
+ # 保存为JSON文件
63
+ try:
64
+ with open(file_path, 'w', encoding='utf-8') as f:
65
+ f.write(checkpoint.json(ensure_ascii=False, indent=2))
66
+
67
+ logger.info(f"已保存对话检查点: {checkpoint.checkpoint_id}")
68
+
69
+ # 检查并清理过期的检查点
70
+ self._cleanup_old_checkpoints()
71
+
72
+ return checkpoint.checkpoint_id
73
+ except Exception as e:
74
+ logger.error(f"保存对话检查点失败: {str(e)}")
75
+ return ""
76
+
77
+ def get_checkpoint(self, checkpoint_id: str) -> Optional[ConversationCheckpoint]:
78
+ """
79
+ 获取指定ID的对话检查点
80
+
81
+ Args:
82
+ checkpoint_id: 检查点ID
83
+
84
+ Returns:
85
+ Optional[ConversationCheckpoint]: 对话检查点对象,如果不存在则返回None
86
+ """
87
+ file_path = os.path.join(self.store_dir, f"{checkpoint_id}.json")
88
+
89
+ if not os.path.exists(file_path):
90
+ logger.warning(f"对话检查点不存在: {checkpoint_id}")
91
+ return None
92
+
93
+ try:
94
+ with open(file_path, 'r', encoding='utf-8') as f:
95
+ data = json.load(f)
96
+
97
+ return ConversationCheckpoint(**data)
98
+ except Exception as e:
99
+ logger.error(f"读取对话检查点失败: {str(e)}")
100
+ return None
101
+
102
+ def get_latest_checkpoint(self) -> Optional[ConversationCheckpoint]:
103
+ """
104
+ 获取最新的对话检查点
105
+
106
+ Returns:
107
+ Optional[ConversationCheckpoint]: 最新的对话检查点对象,如果不存在则返回None
108
+ """
109
+ checkpoints = self._get_all_checkpoints()
110
+
111
+ if not checkpoints:
112
+ return None
113
+
114
+ # 按时间戳降序排序
115
+ checkpoints.sort(key=lambda x: x.timestamp, reverse=True)
116
+
117
+ return checkpoints[0] if checkpoints else None
118
+
119
+ def delete_checkpoint(self, checkpoint_id: str) -> bool:
120
+ """
121
+ 删除指定的对话检查点
122
+
123
+ Args:
124
+ checkpoint_id: 检查点ID
125
+
126
+ Returns:
127
+ bool: 是否成功删除
128
+ """
129
+ file_path = os.path.join(self.store_dir, f"{checkpoint_id}.json")
130
+
131
+ if not os.path.exists(file_path):
132
+ logger.warning(f"要删除的对话检查点不存在: {checkpoint_id}")
133
+ return False
134
+
135
+ try:
136
+ os.remove(file_path)
137
+ logger.info(f"已删除对话检查点: {checkpoint_id}")
138
+ return True
139
+ except Exception as e:
140
+ logger.error(f"删除对话检查点失败: {str(e)}")
141
+ return False
142
+
143
+ def _get_all_checkpoints(self) -> List[ConversationCheckpoint]:
144
+ """
145
+ 获取所有对话检查点
146
+
147
+ Returns:
148
+ List[ConversationCheckpoint]: 对话检查点列表
149
+ """
150
+ checkpoints = []
151
+
152
+ try:
153
+ for filename in os.listdir(self.store_dir):
154
+ if filename.endswith('.json'):
155
+ file_path = os.path.join(self.store_dir, filename)
156
+
157
+ try:
158
+ with open(file_path, 'r', encoding='utf-8') as f:
159
+ data = json.load(f)
160
+
161
+ checkpoint = ConversationCheckpoint(**data)
162
+ checkpoints.append(checkpoint)
163
+ except Exception as e:
164
+ logger.error(f"读取对话检查点文件失败 {filename}: {str(e)}")
165
+ except Exception as e:
166
+ logger.error(f"获取所有对话检查点失败: {str(e)}")
167
+
168
+ return checkpoints
169
+
170
+ def _cleanup_old_checkpoints(self):
171
+ """清理过期的检查点,保持历史记录数量在限制范围内"""
172
+ checkpoints = self._get_all_checkpoints()
173
+
174
+ if len(checkpoints) <= self.max_history:
175
+ return
176
+
177
+ # 按时间戳降序排序
178
+ checkpoints.sort(key=lambda x: x.timestamp, reverse=True)
179
+
180
+ # 删除超出限制的旧检查点
181
+ for checkpoint in checkpoints[self.max_history:]:
182
+ self.delete_checkpoint(checkpoint.checkpoint_id)