auto-coder 0.1.337__tar.gz → 0.1.340__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 (278) hide show
  1. {auto_coder-0.1.337 → auto_coder-0.1.340}/PKG-INFO +1 -1
  2. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/auto_coder_runner.py +16 -9
  4. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/auto_coder_lang.py +36 -0
  5. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit.py +163 -88
  6. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_conversation.py +74 -8
  7. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +17 -8
  8. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_types.py +5 -0
  9. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_tool_display.py +2 -2
  10. auto_coder-0.1.340/src/autocoder/version.py +1 -0
  11. auto_coder-0.1.337/src/autocoder/version.py +0 -1
  12. {auto_coder-0.1.337 → auto_coder-0.1.340}/LICENSE +0 -0
  13. {auto_coder-0.1.337 → auto_coder-0.1.340}/README.md +0 -0
  14. {auto_coder-0.1.337 → auto_coder-0.1.340}/setup.cfg +0 -0
  15. {auto_coder-0.1.337 → auto_coder-0.1.340}/setup.py +0 -0
  16. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/auto_coder.egg-info/SOURCES.txt +0 -0
  17. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  18. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/auto_coder.egg-info/entry_points.txt +0 -0
  19. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/auto_coder.egg-info/requires.txt +0 -0
  20. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/auto_coder.egg-info/top_level.txt +0 -0
  21. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/__init__.py +0 -0
  22. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/__init__.py +0 -0
  23. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/agentic_filter.py +0 -0
  24. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  25. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/auto_filegroup.py +0 -0
  26. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/auto_guess_query.py +0 -0
  27. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  28. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/auto_review_commit.py +0 -0
  29. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/auto_tool.py +0 -0
  30. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/coder.py +0 -0
  31. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/designer.py +0 -0
  32. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/planner.py +0 -0
  33. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/agent/project_reader.py +0 -0
  34. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/auto_coder.py +0 -0
  35. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/auto_coder_rag.py +0 -0
  36. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/auto_coder_server.py +0 -0
  37. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/benchmark.py +0 -0
  38. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/chat/__init__.py +0 -0
  39. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/chat_auto_coder.py +0 -0
  40. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/chat_auto_coder_lang.py +0 -0
  41. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/command_args.py +0 -0
  42. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/command_parser.py +0 -0
  43. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/commands/__init__.py +0 -0
  44. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/commands/auto_command.py +0 -0
  45. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/commands/auto_web.py +0 -0
  46. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/commands/tools.py +0 -0
  47. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/JupyterClient.py +0 -0
  48. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/ShellClient.py +0 -0
  49. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/__init__.py +0 -0
  50. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/action_yml_file_manager.py +0 -0
  51. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/anything2images.py +0 -0
  52. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/anything2img.py +0 -0
  53. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/audio.py +0 -0
  54. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/auto_configure.py +0 -0
  55. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/buildin_tokenizer.py +0 -0
  56. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/chunk_validation.py +0 -0
  57. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/cleaner.py +0 -0
  58. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_execute.py +0 -0
  59. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_generate.py +0 -0
  60. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  61. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  62. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  63. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_merge.py +0 -0
  64. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  65. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  66. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  67. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/code_modification_ranker.py +0 -0
  68. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/command_completer.py +0 -0
  69. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/command_generator.py +0 -0
  70. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/command_templates.py +0 -0
  71. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/computer_use.py +0 -0
  72. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/conf_import_export.py +0 -0
  73. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/conf_utils.py +0 -0
  74. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/conf_validator.py +0 -0
  75. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/const.py +0 -0
  76. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/context_pruner.py +0 -0
  77. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/conversation_pruner.py +0 -0
  78. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/files.py +0 -0
  79. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/git_utils.py +0 -0
  80. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/global_cancel.py +0 -0
  81. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/image_to_page.py +0 -0
  82. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/index_import_export.py +0 -0
  83. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/interpreter.py +0 -0
  84. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/llm_rerank.py +0 -0
  85. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/mcp_hub.py +0 -0
  86. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/mcp_server.py +0 -0
  87. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/mcp_server_install.py +0 -0
  88. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/mcp_server_types.py +0 -0
  89. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  90. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  91. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  92. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/mcp_tools.py +0 -0
  93. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/memory_manager.py +0 -0
  94. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/model_speed_test.py +0 -0
  95. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/openai_content.py +0 -0
  96. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/printer.py +0 -0
  97. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/recall_validation.py +0 -0
  98. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/result_manager.py +0 -0
  99. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/screenshots.py +0 -0
  100. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/search.py +0 -0
  101. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/search_replace.py +0 -0
  102. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/shells.py +0 -0
  103. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/stats_panel.py +0 -0
  104. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/stream_out_type.py +0 -0
  105. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/sys_prompt.py +0 -0
  106. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/text.py +0 -0
  107. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/token_cost_caculate.py +0 -0
  108. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/types.py +0 -0
  109. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  110. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/__init__.py +0 -0
  111. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/__init__.py +0 -0
  112. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
  113. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
  114. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
  115. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  116. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
  117. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
  118. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
  119. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
  120. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
  121. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
  122. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
  123. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -0
  124. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  125. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  126. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  127. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  128. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  129. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  130. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  131. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  132. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  133. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  134. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  135. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_manager.py +0 -0
  136. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  137. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/__init__.py +0 -0
  138. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/base_compiler.py +0 -0
  139. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/compiler_config_api.py +0 -0
  140. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  141. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/compiler_factory.py +0 -0
  142. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/java_compiler.py +0 -0
  143. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/models.py +0 -0
  144. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/provided_compiler.py +0 -0
  145. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/python_compiler.py +0 -0
  146. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  147. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/shadow_compiler.py +0 -0
  148. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/compilers/vue_compiler.py +0 -0
  149. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/data/byzerllm.md +0 -0
  150. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/data/tokenizer.json +0 -0
  151. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/db/__init__.py +0 -0
  152. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/db/store.py +0 -0
  153. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/dispacher/__init__.py +0 -0
  154. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/dispacher/actions/__init__.py +0 -0
  155. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/dispacher/actions/action.py +0 -0
  156. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/dispacher/actions/copilot.py +0 -0
  157. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  158. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  159. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/events/__init__.py +0 -0
  160. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/events/event_content.py +0 -0
  161. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/events/event_manager.py +0 -0
  162. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/events/event_manager_singleton.py +0 -0
  163. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/events/event_store.py +0 -0
  164. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/events/event_types.py +0 -0
  165. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/helper/__init__.py +0 -0
  166. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/helper/project_creator.py +0 -0
  167. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/__init__.py +0 -0
  168. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/entry.py +0 -0
  169. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/filter/__init__.py +0 -0
  170. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/filter/normal_filter.py +0 -0
  171. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/filter/quick_filter.py +0 -0
  172. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/for_command.py +0 -0
  173. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/index.py +0 -0
  174. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/symbols_utils.py +0 -0
  175. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/index/types.py +0 -0
  176. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/lang.py +0 -0
  177. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/linters/__init__.py +0 -0
  178. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/linters/base_linter.py +0 -0
  179. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/linters/linter_factory.py +0 -0
  180. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/linters/models.py +0 -0
  181. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/linters/python_linter.py +0 -0
  182. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/linters/reactjs_linter.py +0 -0
  183. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/linters/shadow_linter.py +0 -0
  184. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/linters/vue_linter.py +0 -0
  185. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/memory/__init__.py +0 -0
  186. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/memory/active_context_manager.py +0 -0
  187. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/memory/active_package.py +0 -0
  188. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/memory/async_processor.py +0 -0
  189. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/memory/directory_mapper.py +0 -0
  190. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/models.py +0 -0
  191. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/plugins/__init__.py +0 -0
  192. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  193. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  194. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/plugins/sample_plugin.py +0 -0
  195. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  196. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/plugins/utils.py +0 -0
  197. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/privacy/__init__.py +0 -0
  198. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/privacy/model_filter.py +0 -0
  199. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/pyproject/__init__.py +0 -0
  200. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/__init__.py +0 -0
  201. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/api_server.py +0 -0
  202. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/__init__.py +0 -0
  203. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/base_cache.py +0 -0
  204. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  205. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  206. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  207. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  208. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  209. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  210. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/cache/simple_cache.py +0 -0
  211. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/conversation_to_queries.py +0 -0
  212. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/doc_filter.py +0 -0
  213. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/document_retriever.py +0 -0
  214. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/lang.py +0 -0
  215. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/llm_wrapper.py +0 -0
  216. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/loaders/__init__.py +0 -0
  217. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  218. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  219. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  220. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  221. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/long_context_rag.py +0 -0
  222. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  223. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/rag_config.py +0 -0
  224. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/rag_entry.py +0 -0
  225. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/raw_rag.py +0 -0
  226. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/relevant_utils.py +0 -0
  227. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/searchable.py +0 -0
  228. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/simple_directory_reader.py +0 -0
  229. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/simple_rag.py +0 -0
  230. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/stream_event/__init__.py +0 -0
  231. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  232. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/stream_event/types.py +0 -0
  233. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/token_checker.py +0 -0
  234. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/token_counter.py +0 -0
  235. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/token_limiter.py +0 -0
  236. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/token_limiter_utils.py +0 -0
  237. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/types.py +0 -0
  238. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/utils.py +0 -0
  239. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/rag/variable_holder.py +0 -0
  240. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/regexproject/__init__.py +0 -0
  241. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/run_context.py +0 -0
  242. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/shadows/__init__.py +0 -0
  243. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/shadows/shadow_manager.py +0 -0
  244. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/suffixproject/__init__.py +0 -0
  245. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/tsproject/__init__.py +0 -0
  246. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/__init__.py +0 -0
  247. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/_markitdown.py +0 -0
  248. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  249. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  250. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/auto_project_type.py +0 -0
  251. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  252. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/conversation_store.py +0 -0
  253. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  254. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/llms.py +0 -0
  255. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/log_capture.py +0 -0
  256. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/model_provider_selector.py +0 -0
  257. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/multi_turn.py +0 -0
  258. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/operate_config_api.py +0 -0
  259. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/print_table.py +0 -0
  260. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/project_structure.py +0 -0
  261. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/queue_communicate.py +0 -0
  262. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/request_event_queue.py +0 -0
  263. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/request_queue.py +0 -0
  264. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/rest.py +0 -0
  265. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/stream_thinking.py +0 -0
  266. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/tests.py +0 -0
  267. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/thread_utils.py +0 -0
  268. {auto_coder-0.1.337 → auto_coder-0.1.340}/src/autocoder/utils/types.py +0 -0
  269. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_action_regex_project.py +0 -0
  270. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_action_yml_file_manager.py +0 -0
  271. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_chat_auto_coder.py +0 -0
  272. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_code_auto_merge_editblock.py +0 -0
  273. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_command_completer.py +0 -0
  274. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_planner.py +0 -0
  275. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_plugins.py +0 -0
  276. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_privacy.py +0 -0
  277. {auto_coder-0.1.337 → auto_coder-0.1.340}/tests/test_queue_communicate.py +0 -0
  278. {auto_coder-0.1.337 → auto_coder-0.1.340}/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.337
3
+ Version: 0.1.340
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.337
3
+ Version: 0.1.340
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -2821,8 +2821,9 @@ def generate_new_yaml(query: str):
2821
2821
  def auto_command(query: str,extra_args: Dict[str,Any]={}):
2822
2822
  """处理/auto指令"""
2823
2823
  args = get_final_config()
2824
- memory = get_memory()
2825
- if args.enable_agentic_edit:
2824
+ memory = get_memory()
2825
+ if args.enable_agentic_edit:
2826
+ from autocoder.run_context import get_run_context,RunMode
2826
2827
  execute_file,args = generate_new_yaml(query)
2827
2828
  args.file = execute_file
2828
2829
  current_files = memory.get("current_files",{}).get("files",[])
@@ -2831,14 +2832,20 @@ def auto_command(query: str,extra_args: Dict[str,Any]={}):
2831
2832
  with open(file,"r",encoding="utf-8") as f:
2832
2833
  sources.append(SourceCode(module_name=file,source_code=f.read()))
2833
2834
 
2834
- llm = get_single_llm(args.code_model or args.model,product_mode=args.product_mode)
2835
- agent = AgenticEdit(llm=llm,args=args,files=SourceCodeList(sources=sources),
2836
- conversation_history=[],
2837
- memory_config=MemoryConfig(memory=memory,
2838
- save_memory_func=save_memory), command_config=CommandConfig)
2835
+ llm = get_single_llm(args.code_model or args.model,product_mode=args.product_mode)
2836
+ conversation_history = extra_args.get("conversations",[])
2837
+ agent = AgenticEdit(llm=llm,args=args,files=SourceCodeList(sources=sources),
2838
+ conversation_history=conversation_history,
2839
+ memory_config=MemoryConfig(memory=memory,
2840
+ save_memory_func=save_memory), command_config=CommandConfig,
2841
+ conversation_name="current"
2842
+ )
2843
+ if get_run_context() == RunMode.TERMINAL:
2839
2844
  agent.run_in_terminal(AgenticEditRequest(user_input=query))
2840
- return
2841
-
2845
+ else:
2846
+ agent.run_with_events(AgenticEditRequest(user_input=query))
2847
+ return
2848
+
2842
2849
  args = get_final_config()
2843
2850
  # 准备请求参数
2844
2851
  request = AutoCommandRequest(
@@ -837,6 +837,42 @@ MESSAGES = {
837
837
  }
838
838
 
839
839
 
840
+ # 新增 ReplaceInFileToolResolver 国际化消息
841
+ MESSAGES.update({
842
+ "replace_in_file.access_denied": {
843
+ "en": "Error: Access denied. Attempted to modify file outside the project directory: {{file_path}}",
844
+ "zh": "错误:拒绝访问。尝试修改项目目录之外的文件:{{file_path}}"
845
+ },
846
+ "replace_in_file.file_not_found": {
847
+ "en": "Error: File not found at path: {{file_path}}",
848
+ "zh": "错误:未找到文件路径:{{file_path}}"
849
+ },
850
+ "replace_in_file.read_error": {
851
+ "en": "An error occurred while reading the file for replacement: {{error}}",
852
+ "zh": "读取待替换文件时发生错误:{{error}}"
853
+ },
854
+ "replace_in_file.no_valid_blocks": {
855
+ "en": "Error: No valid SEARCH/REPLACE blocks found in the provided diff.",
856
+ "zh": "错误:在提供的diff中未找到有效的SEARCH/REPLACE代码块。"
857
+ },
858
+ "replace_in_file.apply_failed": {
859
+ "en": "Failed to apply any changes. Errors:\n{{errors}}",
860
+ "zh": "未能应用任何更改。错误信息:\n{{errors}}"
861
+ },
862
+ "replace_in_file.apply_success": {
863
+ "en": "Successfully applied {{applied}}/{{total}} changes to file: {{file_path}}.",
864
+ "zh": "成功应用了 {{applied}}/{{total}} 个更改到文件:{{file_path}}。"
865
+ },
866
+ "replace_in_file.apply_success_with_warnings": {
867
+ "en": "Successfully applied {{applied}}/{{total}} changes to file: {{file_path}}.\nWarnings:\n{{errors}}",
868
+ "zh": "成功应用了 {{applied}}/{{total}} 个更改到文件:{{file_path}}。\n警告信息:\n{{errors}}"
869
+ },
870
+ "replace_in_file.write_error": {
871
+ "en": "An error occurred while writing the modified file: {{error}}",
872
+ "zh": "写入修改后的文件时发生错误:{{error}}"
873
+ }
874
+ })
875
+
840
876
  def get_system_language():
841
877
  try:
842
878
  return locale.getdefaultlocale()[0][:2]
@@ -1,3 +1,4 @@
1
+ from autocoder.common.v2.agent.agentic_edit_conversation import AgenticConversation
1
2
  from enum import Enum
2
3
  from enum import Enum
3
4
  import json
@@ -10,6 +11,7 @@ from autocoder.common.printer import Printer
10
11
  from rich.console import Console
11
12
  from rich.panel import Panel
12
13
  from pydantic import SkipValidation
14
+ from byzerllm.utils.types import SingleOutputMeta
13
15
 
14
16
  # Removed ResultManager, stream_out, git_utils, AutoCommandTools, count_tokens, global_cancel, ActionYmlFileManager, get_event_manager, EventContentCreator, get_run_context, AgenticFilterStreamOutType
15
17
  from autocoder.common import AutoCoderArgs, git_utils, SourceCodeList, SourceCode
@@ -64,7 +66,7 @@ from autocoder.common.v2.agent.agentic_edit_types import (AgenticEditRequest, To
64
66
  TOOL_MODEL_MAP,
65
67
  # Event Types
66
68
  LLMOutputEvent, LLMThinkingEvent, ToolCallEvent,
67
- ToolResultEvent, CompletionEvent, ErrorEvent,TokenUsageEvent,
69
+ ToolResultEvent, CompletionEvent, PlanModeRespondEvent, ErrorEvent, TokenUsageEvent,
68
70
  # Import specific tool types for display mapping
69
71
  ReadFileTool, WriteToFileTool, ReplaceInFileTool, ExecuteCommandTool,
70
72
  ListFilesTool, SearchFilesTool, ListCodeDefinitionNamesTool,
@@ -87,6 +89,7 @@ TOOL_RESOLVER_MAP: Dict[Type[BaseTool], Type[BaseToolResolver]] = {
87
89
  UseMcpTool: UseMcpToolResolver,
88
90
  }
89
91
 
92
+
90
93
  # --- Tool Display Customization is now handled by agentic_tool_display.py ---
91
94
 
92
95
 
@@ -99,6 +102,7 @@ class AgenticEdit:
99
102
  args: AutoCoderArgs,
100
103
  memory_config: MemoryConfig,
101
104
  command_config: Optional[CommandConfig] = None,
105
+ conversation_name: str = "current"
102
106
  ):
103
107
  self.llm = llm
104
108
  self.args = args
@@ -113,27 +117,32 @@ class AgenticEdit:
113
117
  self.project_type_analyzer = ProjectTypeAnalyzer(
114
118
  args=args, llm=self.llm)
115
119
 
120
+ self.conversation_manager = AgenticConversation(
121
+ args, self.conversation_history, conversation_name=conversation_name)
122
+ # 当前不开启历史记录,所以清空
123
+ self.conversation_manager.clear_history()
124
+
116
125
  self.shadow_manager = ShadowManager(
117
126
  args.source_dir, args.event_file, args.ignore_clean_shadows)
118
127
  self.shadow_linter = ShadowLinter(self.shadow_manager, verbose=False)
119
128
  self.shadow_compiler = ShadowCompiler(
120
- self.shadow_manager, verbose=False)
121
-
129
+ self.shadow_manager, verbose=False)
130
+
122
131
  self.mcp_server_info = ""
123
- # try:
124
- # self.mcp_server = get_mcp_server()
125
- # mcp_server_info_response = self.mcp_server.send_request(
126
- # McpServerInfoRequest(
127
- # model=args.inference_model or args.model,
128
- # product_mode=args.product_mode,
129
- # )
130
- # )
131
- # self.mcp_server_info = mcp_server_info_response.result
132
- # except Exception as e:
133
- # logger.error(f"Error getting MCP server info: {str(e)}")
132
+ try:
133
+ self.mcp_server = get_mcp_server()
134
+ mcp_server_info_response = self.mcp_server.send_request(
135
+ McpServerInfoRequest(
136
+ model=args.inference_model or args.model,
137
+ product_mode=args.product_mode,
138
+ )
139
+ )
140
+ self.mcp_server_info = mcp_server_info_response.result
141
+ except Exception as e:
142
+ logger.error(f"Error getting MCP server info: {str(e)}")
134
143
 
135
144
  # 变更跟踪信息
136
- # 格式: { file_path: FileChangeEntry(...) }
145
+ # 格式: { file_path: FileChangeEntry(...) }
137
146
  self.file_changes: Dict[str, FileChangeEntry] = {}
138
147
 
139
148
  def record_file_change(self, file_path: str, change_type: str, diff: Optional[str] = None, content: Optional[str] = None):
@@ -148,7 +157,8 @@ class AgenticEdit:
148
157
  """
149
158
  entry = self.file_changes.get(file_path)
150
159
  if entry is None:
151
- entry = FileChangeEntry(type=change_type, diffs=[], content=content)
160
+ entry = FileChangeEntry(
161
+ type=change_type, diffs=[], content=content)
152
162
  self.file_changes[file_path] = entry
153
163
  else:
154
164
  # 文件已经存在,可能之前是 added,现在又被 modified,或者多次 modified
@@ -185,8 +195,10 @@ class AgenticEdit:
185
195
  for fname in files:
186
196
  shadow_file_path = os.path.join(root, fname)
187
197
  try:
188
- project_file_path = self.shadow_manager.from_shadow_path(shadow_file_path)
189
- rel_path = os.path.relpath(project_file_path, self.args.source_dir)
198
+ project_file_path = self.shadow_manager.from_shadow_path(
199
+ shadow_file_path)
200
+ rel_path = os.path.relpath(
201
+ project_file_path, self.args.source_dir)
190
202
  changed_files.append(rel_path)
191
203
  except Exception:
192
204
  # 非映射关系,忽略
@@ -377,7 +389,7 @@ class AgenticEdit:
377
389
  </options>
378
390
  </plan_mode_respond>
379
391
 
380
- ## MCP_TOOL
392
+ ## mcp_tool
381
393
  Description: Request to execute a tool via the Model Context Protocol (MCP) server. Use this when you need to execute a tool that is not natively supported by the agentic edit tools.
382
394
  Parameters:
383
395
  - server_name: (optional) The name of the MCP server to use. If not provided, the tool will automatically choose the best server based on the query.
@@ -391,7 +403,7 @@ class AgenticEdit:
391
403
  Your query here
392
404
  </query>
393
405
  </use_mcp_tool>
394
-
406
+
395
407
  {%if mcp_server_info %}
396
408
  ### MCP_SERVER_LIST
397
409
  {{mcp_server_info}}
@@ -463,24 +475,13 @@ class AgenticEdit:
463
475
  </diff>
464
476
  </replace_in_file>
465
477
 
466
- ## Example 4: Another example of using an MCP tool (where the server name is a unique identifier such as a URL)
478
+ ## Example 4: Another example of using an MCP tool (where the server name is a unique identifier listed in MCP_SERVER_LIST)
467
479
 
468
480
  <use_mcp_tool>
469
- <server_name>github.com/modelcontextprotocol/servers/tree/main/src/github</server_name>
481
+ <server_name>github</server_name>
470
482
  <tool_name>create_issue</tool_name>
471
- <arguments>
472
- {
473
- "owner": "octocat",
474
- "repo": "hello-world",
475
- "title": "Found a bug",
476
- "body": "I'm having a problem with this.",
477
- "labels": ["bug", "help wanted"],
478
- "assignees": ["octocat"]
479
- }
480
- </arguments>
481
- </use_mcp_tool>`
482
- : ""
483
- }
483
+ <query>ower is octocat, repo is hello-world, title is Found a bug, body is I'm having a problem with this. labels is "bug" and "help wanted",assignees is "octocat"</query>
484
+ </use_mcp_tool>
484
485
 
485
486
  # Tool Use Guidelines
486
487
 
@@ -660,12 +661,12 @@ class AgenticEdit:
660
661
  4. Once you've completed the user's task, you must use the attempt_completion tool to present the result of the task to the user. You may also provide a CLI command to showcase the result of your task; this can be particularly useful for web development tasks, where you can run e.g. \`open index.html\` to show the website you've built.
661
662
  5. The user may provide feedback, which you can use to make improvements and try again. But DO NOT continue in pointless back and forth conversations, i.e. don't end your responses with questions or offers for further assistance.
662
663
 
663
- {{ enable_active_context }}
664
+ {% if enable_active_context %}
664
665
  **Very Important Notice**
665
666
  Each directory has a description file stored separately. For example, the description for the directory `{{ current_project }}/src/abc/bbc` can be found in the file `{{ current_project }}/.auto-coder/active-context/src/abc/bbc/active.md`.
666
667
  You can use the tool `read_file` to read these description files, which helps you decide exactly which files need detailed attention. Note that the `active.md` file does not contain information about all files within the directory—it only includes information
667
668
  about the files that were recently changed.
668
- {{ enable_active_context }}
669
+ {% endif %}
669
670
  """
670
671
  env_info = detect_env()
671
672
  shell_type = "bash"
@@ -735,31 +736,36 @@ class AgenticEdit:
735
736
  Analyzes the user request, interacts with the LLM, parses responses,
736
737
  executes tools, and yields structured events for visualization until completion or error.
737
738
  """
738
- system_prompt = self._analyze.prompt(request)
739
+ system_prompt = self._analyze.prompt(request)
740
+ # print(system_prompt)
739
741
  conversations = [
740
742
  {"role": "system", "content": system_prompt},
741
- {"role": "user", "content": request.user_input}
742
- ]
743
+ ] + self.conversation_manager.get_history()
744
+ conversations.append({
745
+ "role": "user", "content": request.user_input
746
+ })
747
+ self.conversation_manager.add_user_message(request.user_input)
743
748
  logger.debug(
744
749
  f"Initial conversation history size: {len(conversations)}")
745
-
750
+
751
+ tool_executed = False
746
752
  while True:
747
753
  global_cancel.check_and_raise()
748
754
  logger.info(
749
755
  f"Starting LLM interaction cycle. History size: {len(conversations)}")
750
- tool_executed = False
751
- assistant_buffer = ""
752
756
 
757
+ assistant_buffer = ""
758
+
753
759
  llm_response_gen = stream_chat_with_continue(
754
760
  llm=self.llm,
755
761
  conversations=conversations,
756
762
  llm_config={}, # Placeholder for future LLM configs
757
763
  args=self.args
758
764
  )
759
-
765
+
760
766
  meta_holder = byzerllm.MetaHolder()
761
767
  parsed_events = self.stream_and_parse_llm_response(
762
- llm_response_gen,meta_holder)
768
+ llm_response_gen, meta_holder)
763
769
 
764
770
  for event in parsed_events:
765
771
  global_cancel.check_and_raise()
@@ -777,6 +783,8 @@ class AgenticEdit:
777
783
  "role": "assistant",
778
784
  "content": assistant_buffer + tool_xml
779
785
  })
786
+ self.conversation_manager.add_assistant_message(
787
+ assistant_buffer + tool_xml)
780
788
  assistant_buffer = "" # Reset buffer after tool call
781
789
 
782
790
  yield event # Yield the ToolCallEvent for display
@@ -790,6 +798,14 @@ class AgenticEdit:
790
798
  "AgenticEdit analyze loop finished due to AttemptCompletion.")
791
799
  return
792
800
 
801
+ if isinstance(tool_obj, PlanModeRespondTool):
802
+ logger.info(
803
+ "PlanModeRespondTool received. Finalizing session.")
804
+ yield PlanModeRespondEvent(completion=tool_obj, completion_xml=tool_xml)
805
+ logger.info(
806
+ "AgenticEdit analyze loop finished due to PlanModeRespond.")
807
+ return
808
+
793
809
  # Resolve the tool
794
810
  resolver_cls = TOOL_RESOLVER_MAP.get(type(tool_obj))
795
811
  if not resolver_cls:
@@ -844,6 +860,7 @@ class AgenticEdit:
844
860
  "role": "user", # Simulating the user providing the tool result
845
861
  "content": error_xml
846
862
  })
863
+ self.conversation_manager.add_user_message(error_xml)
847
864
  logger.debug(
848
865
  f"Added tool result to conversations for tool {type(tool_obj).__name__}")
849
866
  break # After tool execution and result, break to start a new LLM cycle
@@ -862,6 +879,8 @@ class AgenticEdit:
862
879
  if assistant_buffer:
863
880
  conversations.append(
864
881
  {"role": "assistant", "content": assistant_buffer})
882
+ self.conversation_manager.add_assistant_message(
883
+ assistant_buffer)
865
884
  # If the loop ends without AttemptCompletion, it means the LLM finished talking
866
885
  # without signaling completion. We might just stop or yield a final message.
867
886
  # Let's assume it stops here.
@@ -870,7 +889,7 @@ class AgenticEdit:
870
889
  logger.info("AgenticEdit analyze loop finished.")
871
890
 
872
891
  def stream_and_parse_llm_response(
873
- self, generator: Generator[Tuple[str, Any], None, None],meta_holder: byzerllm.MetaHolder
892
+ self, generator: Generator[Tuple[str, Any], None, None], meta_holder: byzerllm.MetaHolder
874
893
  ) -> Generator[Union[LLMOutputEvent, LLMThinkingEvent, ToolCallEvent, ErrorEvent], None, None]:
875
894
  """
876
895
  Streamingly parses the LLM response generator, distinguishing between
@@ -920,19 +939,18 @@ class AgenticEdit:
920
939
  params['requires_approval'] = params['requires_approval'].lower(
921
940
  ) == 'true'
922
941
  # Attempt to handle JSON parsing for arguments in use_mcp_tool
923
- if tool_tag == 'use_mcp_tool' and 'arguments' in params:
924
- try:
925
- params['arguments'] = json.loads(
926
- params['arguments'])
927
- except json.JSONDecodeError:
928
- logger.warning(
929
- f"Could not decode JSON arguments for use_mcp_tool: {params['arguments']}")
930
- # Keep as string or handle error? Let's keep as string for now.
931
- pass
942
+ # if tool_tag == 'use_mcp_tool' and 'query' in params:
943
+ # try:
944
+ # params['arguments'] = json.loads(
945
+ # params['arguments'])
946
+ # except json.JSONDecodeError:
947
+ # logger.warning(
948
+ # f"Could not decode JSON arguments for use_mcp_tool: {params['arguments']}")
949
+ # # Keep as string or handle error? Let's keep as string for now.
950
+ # pass
932
951
  # Handle recursive for list_files
933
952
  if tool_tag == 'list_files' and 'recursive' in params:
934
- params['recursive'] = params['recursive'].lower() == 'true'
935
-
953
+ params['recursive'] = params['recursive'].lower() == 'true'
936
954
  return tool_cls(**params)
937
955
  else:
938
956
  logger.error(f"Tool class not found for tag: {tool_tag}")
@@ -970,7 +988,7 @@ class AgenticEdit:
970
988
  break
971
989
 
972
990
  # 2. Check for </tool_tag> if inside tool block
973
- elif in_tool_block:
991
+ elif in_tool_block:
974
992
  end_tag = f"</{current_tool_tag}>"
975
993
  end_tool_pos = buffer.find(end_tag)
976
994
  if end_tool_pos != -1:
@@ -1081,17 +1099,17 @@ class AgenticEdit:
1081
1099
  Runs the agentic edit process, converting internal events to the
1082
1100
  standard event system format and writing them using the event manager.
1083
1101
  """
1084
- event_manager = get_event_manager(self.args.event_file)
1102
+ event_manager = get_event_manager(self.args.event_file)
1085
1103
 
1086
1104
  try:
1087
1105
  event_stream = self.analyze(request)
1088
1106
  for agent_event in event_stream:
1089
1107
  content = None
1090
1108
  metadata = EventMetadata(
1091
- action_file=self.args.event_file,
1092
- is_streaming=False,
1109
+ action_file=self.args.event_file,
1110
+ is_streaming=False,
1093
1111
  stream_out_type="/agent/edit")
1094
-
1112
+
1095
1113
  if isinstance(agent_event, LLMThinkingEvent):
1096
1114
  content = EventContentCreator.create_stream_thinking(
1097
1115
  content=agent_event.text)
@@ -1128,23 +1146,62 @@ class AgenticEdit:
1128
1146
  metadata={}
1129
1147
  )
1130
1148
  event_manager.write_result(
1131
- content=content.to_dict(), metadata=metadata)
1149
+ content=content.to_dict(), metadata=metadata.to_dict())
1150
+ elif isinstance(agent_event, PlanModeRespondEvent):
1151
+ metadata.path = "/agent/edit/plan_mode_respond"
1152
+ content = EventContentCreator.create_markdown_result(
1153
+ content=agent_event.completion.response,
1154
+ metadata={}
1155
+ )
1156
+ event_manager.write_result(
1157
+ content=content.to_dict(), metadata=metadata.to_dict())
1158
+
1159
+ elif isinstance(agent_event, TokenUsageEvent):
1160
+ last_meta: SingleOutputMeta = agent_event.usage
1161
+ # Get model info for pricing
1162
+ from autocoder.utils import llms as llm_utils
1163
+ model_name = ",".join(llm_utils.get_llm_names(self.llm))
1164
+ model_info = llm_utils.get_model_info(
1165
+ model_name, self.args.product_mode) or {}
1166
+ input_price = model_info.get(
1167
+ "input_price", 0.0) if model_info else 0.0
1168
+ output_price = model_info.get(
1169
+ "output_price", 0.0) if model_info else 0.0
1170
+
1171
+ # Calculate costs
1172
+ input_cost = (last_meta.input_tokens_count *
1173
+ input_price) / 1000000 # Convert to millions
1174
+ # Convert to millions
1175
+ output_cost = (
1176
+ last_meta.generated_tokens_count * output_price) / 1000000
1177
+
1178
+ get_event_manager(self.args.event_file).write_result(
1179
+ EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
1180
+ model_name=model_name,
1181
+ elapsed_time=0.0,
1182
+ first_token_time=last_meta.first_token_time,
1183
+ input_tokens=last_meta.input_tokens_count,
1184
+ output_tokens=last_meta.generated_tokens_count,
1185
+ ).to_dict()),metadata=metadata.to_dict())
1186
+
1132
1187
  elif isinstance(agent_event, CompletionEvent):
1133
1188
  # 在这里完成实际合并
1134
1189
  try:
1135
1190
  self.apply_changes()
1136
1191
  except Exception as e:
1137
- logger.exception(f"Error merging shadow changes to project: {e}")
1192
+ logger.exception(
1193
+ f"Error merging shadow changes to project: {e}")
1138
1194
 
1139
1195
  metadata.path = "/agent/edit/completion"
1140
1196
  content = EventContentCreator.create_completion(
1141
1197
  success_code="AGENT_COMPLETE",
1142
1198
  success_message="Agent attempted task completion.",
1143
1199
  result={
1144
- **agent_event.completion.model_dump()
1200
+ "response": agent_event.completion.result
1145
1201
  }
1146
1202
  )
1147
- event_manager.write_completion(content=content.to_dict(), metadata=metadata.to_dict())
1203
+ event_manager.write_completion(
1204
+ content=content.to_dict(), metadata=metadata.to_dict())
1148
1205
  elif isinstance(agent_event, ErrorEvent):
1149
1206
  metadata.path = "/agent/edit/error"
1150
1207
  content = EventContentCreator.create_error(
@@ -1152,7 +1209,8 @@ class AgenticEdit:
1152
1209
  error_message=agent_event.message,
1153
1210
  details={"agent_event_type": "ErrorEvent"}
1154
1211
  )
1155
- event_manager.write_error(content=content.to_dict(), metadata=metadata.to_dict())
1212
+ event_manager.write_error(
1213
+ content=content.to_dict(), metadata=metadata.to_dict())
1156
1214
  else:
1157
1215
  metadata.path = "/agent/edit/error"
1158
1216
  logger.warning(
@@ -1163,7 +1221,8 @@ class AgenticEdit:
1163
1221
  details={"agent_event_type": type(
1164
1222
  agent_event).__name__}
1165
1223
  )
1166
- event_manager.write_error(content=content.to_dict(), metadata=metadata.to_dict())
1224
+ event_manager.write_error(
1225
+ content=content.to_dict(), metadata=metadata.to_dict())
1167
1226
 
1168
1227
  except Exception as e:
1169
1228
  logger.exception(
@@ -1174,15 +1233,16 @@ class AgenticEdit:
1174
1233
  error_message=f"An unexpected error occurred: {str(e)}",
1175
1234
  details={"exception_type": type(e).__name__}
1176
1235
  )
1177
- event_manager.write_error(content=error_content.to_dict(), metadata=metadata.to_dict())
1236
+ event_manager.write_error(
1237
+ content=error_content.to_dict(), metadata=metadata.to_dict())
1178
1238
  # Re-raise the exception if needed, or handle appropriately
1179
1239
  raise e
1180
1240
 
1181
1241
  def apply_changes(self):
1182
1242
  """
1183
1243
  Apply all tracked file changes to the original project directory.
1184
- """
1185
- for (file_path,change) in self.get_all_file_changes().items():
1244
+ """
1245
+ for (file_path, change) in self.get_all_file_changes().items():
1186
1246
  with open(file_path, 'w', encoding='utf-8') as f:
1187
1247
  f.write(change.content)
1188
1248
 
@@ -1194,33 +1254,40 @@ class AgenticEdit:
1194
1254
  self.args.source_dir,
1195
1255
  f"{self.args.query}\nauto_coder_{file_name}",
1196
1256
  )
1197
-
1198
- action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
1257
+
1258
+ action_yml_file_manager = ActionYmlFileManager(
1259
+ self.args.source_dir)
1199
1260
  action_file_name = os.path.basename(self.args.file)
1200
1261
  add_updated_urls = []
1201
1262
  commit_result.changed_files
1202
1263
  for file in commit_result.changed_files:
1203
- add_updated_urls.append(os.path.join(self.args.source_dir, file))
1264
+ add_updated_urls.append(
1265
+ os.path.join(self.args.source_dir, file))
1204
1266
 
1205
1267
  self.args.add_updated_urls = add_updated_urls
1206
- update_yaml_success = action_yml_file_manager.update_yaml_field(action_file_name, "add_updated_urls", add_updated_urls)
1207
- if not update_yaml_success:
1208
- self.printer.print_in_terminal("yaml_save_error", style="red", yaml_file=action_file_name)
1268
+ update_yaml_success = action_yml_file_manager.update_yaml_field(
1269
+ action_file_name, "add_updated_urls", add_updated_urls)
1270
+ if not update_yaml_success:
1271
+ self.printer.print_in_terminal(
1272
+ "yaml_save_error", style="red", yaml_file=action_file_name)
1209
1273
 
1210
1274
  if self.args.enable_active_context:
1211
- active_context_manager = ActiveContextManager(self.llm, self.args.source_dir)
1212
- task_id = active_context_manager.process_changes(self.args)
1213
- self.printer.print_in_terminal("active_context_background_task",
1214
- style="blue",
1215
- task_id=task_id)
1275
+ active_context_manager = ActiveContextManager(
1276
+ self.llm, self.args.source_dir)
1277
+ task_id = active_context_manager.process_changes(
1278
+ self.args)
1279
+ self.printer.print_in_terminal("active_context_background_task",
1280
+ style="blue",
1281
+ task_id=task_id)
1216
1282
  git_utils.print_commit_info(commit_result=commit_result)
1217
1283
  except Exception as e:
1218
1284
  self.printer.print_str_in_terminal(
1219
- self.git_require_msg(source_dir=self.args.source_dir, error=str(e)),
1285
+ self.git_require_msg(
1286
+ source_dir=self.args.source_dir, error=str(e)),
1220
1287
  style="red"
1221
- )
1288
+ )
1222
1289
  else:
1223
- self.printer.print_in_terminal("no_changes_made")
1290
+ self.printer.print_in_terminal("no_changes_made")
1224
1291
 
1225
1292
  def run_in_terminal(self, request: AgenticEditRequest):
1226
1293
  """
@@ -1258,6 +1325,9 @@ class AgenticEdit:
1258
1325
  if event.tool_name == "AttemptCompletionTool":
1259
1326
  continue # Do not display AttemptCompletionTool result
1260
1327
 
1328
+ if event.tool_name == "PlanModeRespondTool":
1329
+ continue
1330
+
1261
1331
  result = event.result
1262
1332
  title = f"✅ Tool Result: {event.tool_name}" if result.success else f"❌ Tool Result: {event.tool_name}"
1263
1333
  border_style = "green" if result.success else "red"
@@ -1274,7 +1344,7 @@ class AgenticEdit:
1274
1344
  panel_content = [base_content]
1275
1345
  syntax_content = None
1276
1346
 
1277
- if result.content is not None:
1347
+ if result.content is not None:
1278
1348
  content_str = ""
1279
1349
  try:
1280
1350
  if isinstance(result.content, (dict, list)):
@@ -1316,7 +1386,8 @@ class AgenticEdit:
1316
1386
  else:
1317
1387
  content_str = str(result.content)
1318
1388
  # Append simple string content directly
1319
- panel_content.append(_format_content(content_str))
1389
+ panel_content.append(
1390
+ _format_content(content_str))
1320
1391
  except Exception as e:
1321
1392
  logger.warning(
1322
1393
  f"Error formatting tool result content: {e}")
@@ -1329,13 +1400,17 @@ class AgenticEdit:
1329
1400
  # Print syntax highlighted content separately if it exists
1330
1401
  if syntax_content:
1331
1402
  console.print(syntax_content)
1403
+ elif isinstance(event, PlanModeRespondEvent):
1404
+ console.print(Panel(Markdown(event.completion.response),
1405
+ title="🏁 Task Completion", border_style="green", title_align="left"))
1332
1406
 
1333
1407
  elif isinstance(event, CompletionEvent):
1334
1408
  # 在这里完成实际合并
1335
1409
  try:
1336
1410
  self.apply_changes()
1337
1411
  except Exception as e:
1338
- logger.exception(f"Error merging shadow changes to project: {e}")
1412
+ logger.exception(
1413
+ f"Error merging shadow changes to project: {e}")
1339
1414
 
1340
1415
  console.print(Panel(Markdown(event.completion.result),
1341
1416
  title="🏁 Task Completion", border_style="green", title_align="left"))