auto-coder 0.1.362__tar.gz → 0.1.364__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 (350) hide show
  1. {auto_coder-0.1.362 → auto_coder-0.1.364}/PKG-INFO +2 -2
  2. {auto_coder-0.1.362 → auto_coder-0.1.364}/README.md +1 -0
  3. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/auto_coder.egg-info/PKG-INFO +2 -2
  4. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/auto_coder.egg-info/SOURCES.txt +43 -1
  5. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/auto_coder.egg-info/requires.txt +1 -1
  6. auto_coder-0.1.364/src/autocoder/agent/base_agentic/agent_hub.py +169 -0
  7. auto_coder-0.1.364/src/autocoder/agent/base_agentic/agentic_lang.py +112 -0
  8. auto_coder-0.1.364/src/autocoder/agent/base_agentic/agentic_tool_display.py +180 -0
  9. auto_coder-0.1.364/src/autocoder/agent/base_agentic/base_agent.py +1582 -0
  10. auto_coder-0.1.364/src/autocoder/agent/base_agentic/default_tools.py +683 -0
  11. auto_coder-0.1.364/src/autocoder/agent/base_agentic/test_base_agent.py +82 -0
  12. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tool_registry.py +425 -0
  13. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/__init__.py +12 -0
  14. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +72 -0
  15. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +37 -0
  16. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/base_tool_resolver.py +35 -0
  17. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/example_tool_resolver.py +46 -0
  18. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +72 -0
  19. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +110 -0
  20. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +35 -0
  21. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +54 -0
  22. {auto_coder-0.1.362/src/autocoder/common/v2/agent/agentic_edit_tools → auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools}/replace_in_file_tool_resolver.py +7 -4
  23. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +134 -0
  24. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +96 -0
  25. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +79 -0
  26. auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +44 -0
  27. {auto_coder-0.1.362/src/autocoder/common/v2/agent/agentic_edit_tools → auto_coder-0.1.364/src/autocoder/agent/base_agentic/tools}/write_to_file_tool_resolver.py +4 -4
  28. auto_coder-0.1.364/src/autocoder/agent/base_agentic/types.py +189 -0
  29. auto_coder-0.1.364/src/autocoder/agent/base_agentic/utils.py +100 -0
  30. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/auto_coder_runner.py +6 -4
  31. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/chat/conf_command.py +11 -10
  32. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/__init__.py +2 -0
  33. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/__init__.py +21 -0
  34. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/backup.py +264 -0
  35. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/examples.py +217 -0
  36. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/manager.py +404 -0
  37. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/models.py +156 -0
  38. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/store.py +383 -0
  39. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/test_backup.py +242 -0
  40. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/test_manager.py +570 -0
  41. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/test_models.py +360 -0
  42. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/test_store.py +327 -0
  43. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/test_utils.py +297 -0
  44. auto_coder-0.1.364/src/autocoder/common/file_checkpoint/utils.py +119 -0
  45. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/rulefiles/autocoderrules_utils.py +138 -55
  46. auto_coder-0.1.364/src/autocoder/common/save_formatted_log.py +125 -0
  47. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit.py +339 -216
  48. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +2 -2
  49. auto_coder-0.1.364/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +248 -0
  50. auto_coder-0.1.364/src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +322 -0
  51. auto_coder-0.1.364/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +208 -0
  52. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_types.py +1 -2
  53. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_tool_display.py +2 -3
  54. auto_coder-0.1.364/src/autocoder/compilers/normal_compiler.py +64 -0
  55. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/events/event_manager_singleton.py +133 -4
  56. auto_coder-0.1.364/src/autocoder/linters/normal_linter.py +373 -0
  57. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/linters/python_linter.py +4 -2
  58. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/long_context_rag.py +424 -397
  59. auto_coder-0.1.364/src/autocoder/rag/test_doc_filter.py +393 -0
  60. auto_coder-0.1.364/src/autocoder/rag/test_long_context_rag.py +473 -0
  61. auto_coder-0.1.364/src/autocoder/rag/test_token_limiter.py +342 -0
  62. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/shadows/shadow_manager.py +1 -3
  63. auto_coder-0.1.364/src/autocoder/utils/types.py +0 -0
  64. auto_coder-0.1.364/src/autocoder/version.py +1 -0
  65. auto_coder-0.1.362/src/autocoder/common/save_formatted_log.py +0 -54
  66. auto_coder-0.1.362/src/autocoder/rag/loaders/test_image_loader.py +0 -209
  67. auto_coder-0.1.362/src/autocoder/version.py +0 -1
  68. {auto_coder-0.1.362 → auto_coder-0.1.364}/LICENSE +0 -0
  69. {auto_coder-0.1.362 → auto_coder-0.1.364}/setup.cfg +0 -0
  70. {auto_coder-0.1.362 → auto_coder-0.1.364}/setup.py +0 -0
  71. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  72. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/auto_coder.egg-info/entry_points.txt +0 -0
  73. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/auto_coder.egg-info/top_level.txt +0 -0
  74. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/__init__.py +0 -0
  75. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/__init__.py +0 -0
  76. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/agentic_filter.py +0 -0
  77. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  78. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/auto_filegroup.py +0 -0
  79. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/auto_guess_query.py +0 -0
  80. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/auto_learn.py +0 -0
  81. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  82. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/auto_review_commit.py +0 -0
  83. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/auto_tool.py +0 -0
  84. {auto_coder-0.1.362/src/autocoder/chat → auto_coder-0.1.364/src/autocoder/agent/base_agentic}/__init__.py +0 -0
  85. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/coder.py +0 -0
  86. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/designer.py +0 -0
  87. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/planner.py +0 -0
  88. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/agent/project_reader.py +0 -0
  89. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/auto_coder.py +0 -0
  90. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/auto_coder_rag.py +0 -0
  91. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/auto_coder_server.py +0 -0
  92. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/benchmark.py +0 -0
  93. {auto_coder-0.1.362/src/autocoder/commands → auto_coder-0.1.364/src/autocoder/chat}/__init__.py +0 -0
  94. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/chat/models_command.py +0 -0
  95. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/chat/rules_command.py +0 -0
  96. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/chat_auto_coder.py +0 -0
  97. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/chat_auto_coder_lang.py +0 -0
  98. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/command_args.py +0 -0
  99. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/command_parser.py +0 -0
  100. {auto_coder-0.1.362/src/autocoder/common/mcp_servers → auto_coder-0.1.364/src/autocoder/commands}/__init__.py +0 -0
  101. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/commands/auto_command.py +0 -0
  102. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/commands/auto_web.py +0 -0
  103. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/commands/tools.py +0 -0
  104. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/JupyterClient.py +0 -0
  105. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/ShellClient.py +0 -0
  106. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/action_yml_file_manager.py +0 -0
  107. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/anything2images.py +0 -0
  108. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/anything2img.py +0 -0
  109. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/audio.py +0 -0
  110. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/auto_coder_lang.py +0 -0
  111. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/auto_configure.py +0 -0
  112. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/buildin_tokenizer.py +0 -0
  113. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/chunk_validation.py +0 -0
  114. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/cleaner.py +0 -0
  115. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_execute.py +0 -0
  116. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_generate.py +0 -0
  117. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  118. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  119. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  120. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_merge.py +0 -0
  121. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  122. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  123. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  124. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/code_modification_ranker.py +0 -0
  125. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/command_completer.py +0 -0
  126. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/command_completer_v2.py +0 -0
  127. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/command_generator.py +0 -0
  128. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/command_templates.py +0 -0
  129. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/computer_use.py +0 -0
  130. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/conf_import_export.py +0 -0
  131. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/conf_utils.py +0 -0
  132. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/conf_validator.py +0 -0
  133. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/const.py +0 -0
  134. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/context_pruner.py +0 -0
  135. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/conversation_pruner.py +0 -0
  136. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/conversations/__init__.py +0 -0
  137. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/conversations/compatibility.py +0 -0
  138. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/conversations/conversation_manager.py +0 -0
  139. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/conversations/example.py +0 -0
  140. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/directory_cache/__init__.py +0 -0
  141. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/directory_cache/cache.py +0 -0
  142. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/directory_cache/test_cache.py +0 -0
  143. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/file_monitor/__init__.py +0 -0
  144. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/file_monitor/monitor.py +0 -0
  145. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/files.py +0 -0
  146. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/git_utils.py +0 -0
  147. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/global_cancel.py +0 -0
  148. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/ignorefiles/__init__.py +0 -0
  149. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
  150. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
  151. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/image_to_page.py +0 -0
  152. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/index_import_export.py +0 -0
  153. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/interpreter.py +0 -0
  154. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/llm_rerank.py +0 -0
  155. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/mcp_hub.py +0 -0
  156. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/mcp_server.py +0 -0
  157. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/mcp_server_install.py +0 -0
  158. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/mcp_server_types.py +0 -0
  159. {auto_coder-0.1.362/src/autocoder/common/v2 → auto_coder-0.1.364/src/autocoder/common/mcp_servers}/__init__.py +0 -0
  160. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  161. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  162. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/mcp_tools.py +0 -0
  163. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/memory_manager.py +0 -0
  164. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/model_speed_tester.py +0 -0
  165. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/openai_content.py +0 -0
  166. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/printer.py +0 -0
  167. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/recall_validation.py +0 -0
  168. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/result_manager.py +0 -0
  169. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/rulefiles/__init__.py +0 -0
  170. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/run_cmd.py +0 -0
  171. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/screenshots.py +0 -0
  172. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/search.py +0 -0
  173. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/search_replace.py +0 -0
  174. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/shells.py +0 -0
  175. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/stats_panel.py +0 -0
  176. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/stream_out_type.py +0 -0
  177. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/sys_prompt.py +0 -0
  178. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/test_run_cmd.py +0 -0
  179. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/text.py +0 -0
  180. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/token_cost_caculate.py +0 -0
  181. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/types.py +0 -0
  182. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  183. {auto_coder-0.1.362/src/autocoder/common/v2/agent → auto_coder-0.1.364/src/autocoder/common/v2}/__init__.py +0 -0
  184. {auto_coder-0.1.362/src/autocoder/db → auto_coder-0.1.364/src/autocoder/common/v2/agent}/__init__.py +0 -0
  185. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
  186. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
  187. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
  188. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  189. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
  190. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
  191. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
  192. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
  193. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
  194. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
  195. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
  196. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
  197. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  198. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  199. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  200. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  201. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  202. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  203. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  204. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  205. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  206. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  207. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  208. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_manager.py +0 -0
  209. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  210. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/__init__.py +0 -0
  211. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/base_compiler.py +0 -0
  212. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/compiler_config_api.py +0 -0
  213. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  214. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/compiler_factory.py +0 -0
  215. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/java_compiler.py +0 -0
  216. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/models.py +0 -0
  217. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/provided_compiler.py +0 -0
  218. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/python_compiler.py +0 -0
  219. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  220. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/shadow_compiler.py +0 -0
  221. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/compilers/vue_compiler.py +0 -0
  222. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/data/byzerllm.md +0 -0
  223. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/data/tokenizer.json +0 -0
  224. {auto_coder-0.1.362/src/autocoder/dispacher/actions → auto_coder-0.1.364/src/autocoder/db}/__init__.py +0 -0
  225. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/db/store.py +0 -0
  226. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/dispacher/__init__.py +0 -0
  227. {auto_coder-0.1.362/src/autocoder/dispacher/actions/plugins → auto_coder-0.1.364/src/autocoder/dispacher/actions}/__init__.py +0 -0
  228. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/dispacher/actions/action.py +0 -0
  229. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/dispacher/actions/copilot.py +0 -0
  230. {auto_coder-0.1.362/src/autocoder/helper → auto_coder-0.1.364/src/autocoder/dispacher/actions/plugins}/__init__.py +0 -0
  231. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  232. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/events/__init__.py +0 -0
  233. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/events/event_content.py +0 -0
  234. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/events/event_manager.py +0 -0
  235. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/events/event_store.py +0 -0
  236. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/events/event_types.py +0 -0
  237. {auto_coder-0.1.362/src/autocoder/index → auto_coder-0.1.364/src/autocoder/helper}/__init__.py +0 -0
  238. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/helper/project_creator.py +0 -0
  239. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/helper/rag_doc_creator.py +0 -0
  240. {auto_coder-0.1.362/src/autocoder/index/filter → auto_coder-0.1.364/src/autocoder/index}/__init__.py +0 -0
  241. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/index/entry.py +0 -0
  242. {auto_coder-0.1.362/src/autocoder/linters → auto_coder-0.1.364/src/autocoder/index/filter}/__init__.py +0 -0
  243. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/index/filter/normal_filter.py +0 -0
  244. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/index/filter/quick_filter.py +0 -0
  245. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/index/for_command.py +0 -0
  246. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/index/index.py +0 -0
  247. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/index/symbols_utils.py +0 -0
  248. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/index/types.py +0 -0
  249. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/lang.py +0 -0
  250. {auto_coder-0.1.362/src/autocoder/rag → auto_coder-0.1.364/src/autocoder/linters}/__init__.py +0 -0
  251. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/linters/base_linter.py +0 -0
  252. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/linters/linter_factory.py +0 -0
  253. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/linters/models.py +0 -0
  254. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/linters/reactjs_linter.py +0 -0
  255. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/linters/shadow_linter.py +0 -0
  256. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/linters/vue_linter.py +0 -0
  257. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/memory/__init__.py +0 -0
  258. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/memory/active_context_manager.py +0 -0
  259. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/memory/active_package.py +0 -0
  260. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/memory/async_processor.py +0 -0
  261. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/memory/directory_mapper.py +0 -0
  262. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/models.py +0 -0
  263. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/plugins/__init__.py +0 -0
  264. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  265. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  266. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/plugins/sample_plugin.py +0 -0
  267. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  268. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/plugins/utils.py +0 -0
  269. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/privacy/__init__.py +0 -0
  270. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/privacy/model_filter.py +0 -0
  271. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/pyproject/__init__.py +0 -0
  272. {auto_coder-0.1.362/src/autocoder/rag/cache → auto_coder-0.1.364/src/autocoder/rag}/__init__.py +0 -0
  273. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/api_server.py +0 -0
  274. {auto_coder-0.1.362/src/autocoder/rag/stream_event → auto_coder-0.1.364/src/autocoder/rag/cache}/__init__.py +0 -0
  275. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/base_cache.py +0 -0
  276. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  277. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  278. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
  279. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  280. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  281. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  282. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  283. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/cache/simple_cache.py +0 -0
  284. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/conversation_to_queries.py +0 -0
  285. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/doc_filter.py +0 -0
  286. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/document_retriever.py +0 -0
  287. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/lang.py +0 -0
  288. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/llm_wrapper.py +0 -0
  289. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/loaders/__init__.py +0 -0
  290. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  291. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  292. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/loaders/filter_utils.py +0 -0
  293. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/loaders/image_loader.py +0 -0
  294. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  295. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  296. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  297. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/rag_config.py +0 -0
  298. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/rag_entry.py +0 -0
  299. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/raw_rag.py +0 -0
  300. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/relevant_utils.py +0 -0
  301. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/searchable.py +0 -0
  302. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/simple_directory_reader.py +0 -0
  303. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/simple_rag.py +0 -0
  304. {auto_coder-0.1.362/src/autocoder/shadows → auto_coder-0.1.364/src/autocoder/rag/stream_event}/__init__.py +0 -0
  305. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  306. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/stream_event/types.py +0 -0
  307. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/token_checker.py +0 -0
  308. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/token_counter.py +0 -0
  309. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/token_limiter.py +0 -0
  310. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/token_limiter_utils.py +0 -0
  311. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/types.py +0 -0
  312. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/utils.py +0 -0
  313. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/rag/variable_holder.py +0 -0
  314. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/regexproject/__init__.py +0 -0
  315. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/run_context.py +0 -0
  316. {auto_coder-0.1.362/src/autocoder/utils/auto_coder_utils → auto_coder-0.1.364/src/autocoder/shadows}/__init__.py +0 -0
  317. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/suffixproject/__init__.py +0 -0
  318. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/tsproject/__init__.py +0 -0
  319. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/__init__.py +0 -0
  320. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/_markitdown.py +0 -0
  321. {auto_coder-0.1.362/src/autocoder/utils/chat_auto_coder_utils → auto_coder-0.1.364/src/autocoder/utils/auto_coder_utils}/__init__.py +0 -0
  322. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  323. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/auto_project_type.py +0 -0
  324. /auto_coder-0.1.362/src/autocoder/utils/types.py → /auto_coder-0.1.364/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  325. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/conversation_store.py +0 -0
  326. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  327. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/llms.py +0 -0
  328. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/log_capture.py +0 -0
  329. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/model_provider_selector.py +0 -0
  330. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/multi_turn.py +0 -0
  331. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/operate_config_api.py +0 -0
  332. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/print_table.py +0 -0
  333. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/project_structure.py +0 -0
  334. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/queue_communicate.py +0 -0
  335. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/request_event_queue.py +0 -0
  336. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/request_queue.py +0 -0
  337. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/rest.py +0 -0
  338. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/stream_thinking.py +0 -0
  339. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/tests.py +0 -0
  340. {auto_coder-0.1.362 → auto_coder-0.1.364}/src/autocoder/utils/thread_utils.py +0 -0
  341. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_action_regex_project.py +0 -0
  342. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_action_yml_file_manager.py +0 -0
  343. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_chat_auto_coder.py +0 -0
  344. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_code_auto_merge_editblock.py +0 -0
  345. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_command_completer.py +0 -0
  346. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_planner.py +0 -0
  347. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_plugins.py +0 -0
  348. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_privacy.py +0 -0
  349. {auto_coder-0.1.362 → auto_coder-0.1.364}/tests/test_queue_communicate.py +0 -0
  350. {auto_coder-0.1.362 → auto_coder-0.1.364}/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.362
3
+ Version: 0.1.364
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
@@ -42,3 +42,4 @@ auto-coder.chat
42
42
  0. [Auto-Coder.Chat: 通向智能编程之路](https://uelng8wukz.feishu.cn/wiki/QIpkwpQo2iSdkwk9nP6cNSPlnPc)
43
43
 
44
44
 
45
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.362
3
+ Version: 0.1.364
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
@@ -34,6 +34,31 @@ src/autocoder/agent/coder.py
34
34
  src/autocoder/agent/designer.py
35
35
  src/autocoder/agent/planner.py
36
36
  src/autocoder/agent/project_reader.py
37
+ src/autocoder/agent/base_agentic/__init__.py
38
+ src/autocoder/agent/base_agentic/agent_hub.py
39
+ src/autocoder/agent/base_agentic/agentic_lang.py
40
+ src/autocoder/agent/base_agentic/agentic_tool_display.py
41
+ src/autocoder/agent/base_agentic/base_agent.py
42
+ src/autocoder/agent/base_agentic/default_tools.py
43
+ src/autocoder/agent/base_agentic/test_base_agent.py
44
+ src/autocoder/agent/base_agentic/tool_registry.py
45
+ src/autocoder/agent/base_agentic/types.py
46
+ src/autocoder/agent/base_agentic/utils.py
47
+ src/autocoder/agent/base_agentic/tools/__init__.py
48
+ src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py
49
+ src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py
50
+ src/autocoder/agent/base_agentic/tools/base_tool_resolver.py
51
+ src/autocoder/agent/base_agentic/tools/example_tool_resolver.py
52
+ src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py
53
+ src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py
54
+ src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py
55
+ src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py
56
+ src/autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py
57
+ src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py
58
+ src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py
59
+ src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py
60
+ src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py
61
+ src/autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py
37
62
  src/autocoder/chat/__init__.py
38
63
  src/autocoder/chat/conf_command.py
39
64
  src/autocoder/chat/models_command.py
@@ -114,6 +139,18 @@ src/autocoder/common/conversations/example.py
114
139
  src/autocoder/common/directory_cache/__init__.py
115
140
  src/autocoder/common/directory_cache/cache.py
116
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/examples.py
145
+ src/autocoder/common/file_checkpoint/manager.py
146
+ src/autocoder/common/file_checkpoint/models.py
147
+ src/autocoder/common/file_checkpoint/store.py
148
+ src/autocoder/common/file_checkpoint/test_backup.py
149
+ src/autocoder/common/file_checkpoint/test_manager.py
150
+ src/autocoder/common/file_checkpoint/test_models.py
151
+ src/autocoder/common/file_checkpoint/test_store.py
152
+ src/autocoder/common/file_checkpoint/test_utils.py
153
+ src/autocoder/common/file_checkpoint/utils.py
117
154
  src/autocoder/common/file_monitor/__init__.py
118
155
  src/autocoder/common/file_monitor/monitor.py
119
156
  src/autocoder/common/ignorefiles/__init__.py
@@ -155,6 +192,7 @@ src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py
155
192
  src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py
156
193
  src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py
157
194
  src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py
195
+ src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py
158
196
  src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py
159
197
  src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py
160
198
  src/autocoder/compilers/__init__.py
@@ -164,6 +202,7 @@ src/autocoder/compilers/compiler_config_manager.py
164
202
  src/autocoder/compilers/compiler_factory.py
165
203
  src/autocoder/compilers/java_compiler.py
166
204
  src/autocoder/compilers/models.py
205
+ src/autocoder/compilers/normal_compiler.py
167
206
  src/autocoder/compilers/provided_compiler.py
168
207
  src/autocoder/compilers/python_compiler.py
169
208
  src/autocoder/compilers/reactjs_compiler.py
@@ -201,6 +240,7 @@ src/autocoder/linters/__init__.py
201
240
  src/autocoder/linters/base_linter.py
202
241
  src/autocoder/linters/linter_factory.py
203
242
  src/autocoder/linters/models.py
243
+ src/autocoder/linters/normal_linter.py
204
244
  src/autocoder/linters/python_linter.py
205
245
  src/autocoder/linters/reactjs_linter.py
206
246
  src/autocoder/linters/shadow_linter.py
@@ -235,6 +275,9 @@ src/autocoder/rag/relevant_utils.py
235
275
  src/autocoder/rag/searchable.py
236
276
  src/autocoder/rag/simple_directory_reader.py
237
277
  src/autocoder/rag/simple_rag.py
278
+ src/autocoder/rag/test_doc_filter.py
279
+ src/autocoder/rag/test_long_context_rag.py
280
+ src/autocoder/rag/test_token_limiter.py
238
281
  src/autocoder/rag/token_checker.py
239
282
  src/autocoder/rag/token_counter.py
240
283
  src/autocoder/rag/token_limiter.py
@@ -259,7 +302,6 @@ src/autocoder/rag/loaders/filter_utils.py
259
302
  src/autocoder/rag/loaders/image_loader.py
260
303
  src/autocoder/rag/loaders/pdf_loader.py
261
304
  src/autocoder/rag/loaders/ppt_loader.py
262
- src/autocoder/rag/loaders/test_image_loader.py
263
305
  src/autocoder/rag/stream_event/__init__.py
264
306
  src/autocoder/rag/stream_event/event_writer.py
265
307
  src/autocoder/rag/stream_event/types.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
@@ -0,0 +1,169 @@
1
+ import typing
2
+ import byzerllm
3
+ from typing import List, Dict, Optional, Literal, Any, Union
4
+ from pydantic import BaseModel
5
+ from loguru import logger
6
+ import threading
7
+ from concurrent.futures import ThreadPoolExecutor
8
+ import os
9
+ from datetime import datetime
10
+ from .types import Message, ReplyDecision
11
+ from .utils import GroupUtils,GroupMemberResponse
12
+
13
+ if typing.TYPE_CHECKING:
14
+ from .base_agent import BaseAgent
15
+
16
+ class AgentHub:
17
+ """管理所有Agent实例的全局中心"""
18
+ _instance = None
19
+ agents: Dict[str, 'BaseAgent'] = {}
20
+
21
+ def __new__(cls):
22
+ if cls._instance is None:
23
+ cls._instance = super().__new__(cls)
24
+ return cls._instance
25
+
26
+ @classmethod
27
+ def register_agent(cls, agent: 'BaseAgent'):
28
+ """注册一个新的Agent"""
29
+ if agent.name in cls.agents:
30
+ raise ValueError(f"Agent with name {agent.name} already exists")
31
+ cls.agents[agent.name] = agent
32
+
33
+ @classmethod
34
+ def get_agent(cls, name: str) -> Optional['BaseAgent']:
35
+ """根据名称获取Agent"""
36
+ return cls.agents.get(name)
37
+
38
+ @classmethod
39
+ def list_agents(cls) -> List[str]:
40
+ """获取所有Agent名称"""
41
+ return list(cls.agents.keys())
42
+
43
+ @classmethod
44
+ def get_all_groups(cls) -> List['Group']:
45
+ """获取所有群组实例"""
46
+ return list(GroupHub.groups.values())
47
+
48
+ class GroupHub:
49
+ """管理所有Group实例的全局中心"""
50
+ _instance = None
51
+ groups: Dict[str, 'Group'] = {}
52
+ _groups_lock = threading.RLock()
53
+
54
+ def __new__(cls):
55
+ if cls._instance is None:
56
+ cls._instance = super().__new__(cls)
57
+ return cls._instance
58
+
59
+ @classmethod
60
+ def register_group(cls, group: 'Group'):
61
+ """注册一个新的Group"""
62
+ with cls._groups_lock:
63
+ if group.name in cls.groups:
64
+ raise ValueError(f"Group with name {group.name} already exists")
65
+ cls.groups[group.name] = group
66
+
67
+ @classmethod
68
+ def get_group(cls, name: str) -> Optional['Group']:
69
+ """根据名称获取Group"""
70
+ with cls._groups_lock:
71
+ return cls.groups.get(name)
72
+
73
+ @classmethod
74
+ def list_groups(cls) -> List[str]:
75
+ """获取所有Group名称"""
76
+ with cls._groups_lock:
77
+ return list(cls.groups.keys())
78
+
79
+
80
+
81
+ class Group:
82
+ # 类级线程池(所有 Group 实例共享)
83
+ _executor = ThreadPoolExecutor(max_workers=min(32, (os.cpu_count() or 1) * 4 + 4))
84
+
85
+ def __init__(self, name: str):
86
+ self.name = name
87
+ self.members: List[Agent] = []
88
+ self.history: List[Message] = []
89
+ # 成员列表和消息历史的读写锁
90
+ self._members_lock = threading.RLock()
91
+ self._history_lock = threading.RLock()
92
+ # 自动注册到GroupHub
93
+ GroupHub.register_group(self)
94
+
95
+ def add_member(self, agent: 'Agent'):
96
+ with self._members_lock:
97
+ if agent not in self.members:
98
+ self.members.append(agent)
99
+ with agent._group_lock: # 访问 Agent 的锁
100
+ agent.joined_groups[self.name] = self
101
+
102
+ def _safe_send_message(self, member: 'Agent', message: Message, print_conversation: bool):
103
+ try:
104
+ # 调用 Agent 的线程安全接收方法
105
+ member.threadsafe_receive(message,print_conversation=print_conversation)
106
+ except Exception as e:
107
+ import traceback
108
+ traceback.print_exc()
109
+ logger.error(f"Message delivery failed to {member.name}: {str(e)}")
110
+
111
+ def _handle_send_result(self, future):
112
+ try:
113
+ future.result()
114
+ except Exception as e:
115
+ logger.error(f"Message delivery error: {str(e)}")
116
+
117
+ def broadcast(self, message: Message, print_conversation: bool = False):
118
+ # 消息历史写入需要同步
119
+ with self._history_lock:
120
+ self.history.append(message)
121
+
122
+ # 使用线程池并行发送
123
+ futures = []
124
+ with self._members_lock: # 保护成员列表遍历
125
+ current_members = self.members.copy()
126
+
127
+ for member in current_members:
128
+ if member.name == message.sender:
129
+ continue
130
+
131
+ futures.append(
132
+ self._executor.submit(
133
+ self._safe_send_message,
134
+ member, message, print_conversation
135
+ )
136
+ )
137
+
138
+ # 异步等待所有任务完成(可选)
139
+ for future in futures:
140
+ future.add_done_callback(self._handle_send_result)
141
+
142
+ if print_conversation:
143
+ with self._history_lock: # 同步打印
144
+ print(f"[Group Broadcast End] {message.sender} finished broadcasting to {self.name} group")
145
+
146
+
147
+ class GroupMembership:
148
+ def __init__(self, agent: 'BaseAgent', group: 'Group'):
149
+ self.agent = agent
150
+ self.group = group
151
+
152
+ def talk_to_all(self, content: str):
153
+ message = Message(
154
+ sender=self.agent.name,
155
+ content=content,
156
+ is_group=True,
157
+ group_name=self.group.name
158
+ )
159
+ self.group.broadcast(message)
160
+
161
+ def talk_to(self, content: str, mentions: List['BaseAgent']):
162
+ message = Message(
163
+ sender=self.agent.name,
164
+ content=f"@{' @'.join([a.name for a in mentions])} {content}",
165
+ is_group=True,
166
+ group_name=self.group.name,
167
+ mentions=[a.name for a in mentions]
168
+ )
169
+ self.group.broadcast(message)
@@ -0,0 +1,112 @@
1
+ import locale
2
+ from byzerllm.utils import format_str_jinja2
3
+
4
+ MESSAGES = {
5
+ "auto_command_analyzing": {
6
+ "en": "Analyzing Command Request",
7
+ "zh": "正在分析命令请求"
8
+ },
9
+ # run_in_terminal方法的国际化文本
10
+ "agent_start": {
11
+ "en": "[bold cyan]Starting Agent: {{ project_name }}[/]",
12
+ "zh": "[bold cyan]启动代理: {{ project_name }}[/]"
13
+ },
14
+ "user_input": {
15
+ "en": "[bold]User Input:[/bold]\n{{ input }}",
16
+ "zh": "[bold]用户输入:[/bold]\n{{ input }}"
17
+ },
18
+ "user_input_title": {
19
+ "en": "Objective",
20
+ "zh": "目标"
21
+ },
22
+ "token_usage_log": {
23
+ "en": "Token Usage: Model={{ model }}, Input Tokens={{ input_tokens }}, Output Tokens={{ output_tokens }}, Input Cost=${{ input_cost }}, Output Cost=${{ output_cost }}",
24
+ "zh": "Token使用情况: 模型={{ model }}, 输入Token={{ input_tokens }}, 输出Token={{ output_tokens }}, 输入成本=${{ input_cost }}, 输出成本=${{ output_cost }}"
25
+ },
26
+ "tool_operation_title": {
27
+ "en": "🛠️ Operation: {{ tool_name }}",
28
+ "zh": "🛠️ 操作: {{ tool_name }}"
29
+ },
30
+ "tool_result_success_title": {
31
+ "en": "✅ Tool Result: {{ tool_name }}",
32
+ "zh": "✅ 工具结果: {{ tool_name }}"
33
+ },
34
+ "tool_result_failure_title": {
35
+ "en": "❌ Tool Result: {{ tool_name }}",
36
+ "zh": "❌ 工具结果: {{ tool_name }}"
37
+ },
38
+ "status": {
39
+ "en": "[bold]Status:[/bold] {{ status }}",
40
+ "zh": "[bold]状态:[/bold] {{ status }}"
41
+ },
42
+ "message": {
43
+ "en": "[bold]Message:[/bold] {{ message }}",
44
+ "zh": "[bold]消息:[/bold] {{ message }}"
45
+ },
46
+ "success_status": {
47
+ "en": "Success",
48
+ "zh": "成功"
49
+ },
50
+ "failure_status": {
51
+ "en": "Failure",
52
+ "zh": "失败"
53
+ },
54
+ "format_tool_error": {
55
+ "en": "Error formatting tool result content: {{ error }}",
56
+ "zh": "格式化工具结果内容时出错: {{ error }}"
57
+ },
58
+ "completion_title": {
59
+ "en": "🏁 Task Completed",
60
+ "zh": "🏁 任务完成"
61
+ },
62
+ "suggested_command": {
63
+ "en": "[dim]Suggested Command:[/dim] [bold cyan]{{ command }}[/]",
64
+ "zh": "[dim]建议命令:[/dim] [bold cyan]{{ command }}[/]"
65
+ },
66
+ "error_title": {
67
+ "en": "🔥 Error",
68
+ "zh": "🔥 错误"
69
+ },
70
+ "error_content": {
71
+ "en": "[bold red]Error:[/bold red] {{ message }}",
72
+ "zh": "[bold red]错误:[/bold red] {{ message }}"
73
+ },
74
+ "fatal_error_title": {
75
+ "en": "🔥 System Error",
76
+ "zh": "🔥 系统错误"
77
+ },
78
+ "fatal_error_content": {
79
+ "en": "[bold red]Fatal Error:[/bold red]\n{{ error }}",
80
+ "zh": "[bold red]致命错误:[/bold red]\n{{ error }}"
81
+ },
82
+ "shadow_merge_error": {
83
+ "en": "Error merging shadow changes to project: {{ error }}",
84
+ "zh": "合并影子更改到项目时出错: {{ error }}"
85
+ },
86
+ "agent_execution_complete": {
87
+ "en": "[bold cyan]Agent Execution Completed[/]",
88
+ "zh": "[bold cyan]代理执行完成[/]"
89
+ },
90
+ "unexpected_error": {
91
+ "en": "Unexpected error during agent execution:",
92
+ "zh": "代理执行过程中发生意外错误:"
93
+ }
94
+ }
95
+
96
+
97
+ def get_system_language():
98
+ try:
99
+ return locale.getdefaultlocale()[0][:2]
100
+ except:
101
+ return "en"
102
+
103
+
104
+ def get_message(key):
105
+ lang = get_system_language()
106
+ if key in MESSAGES:
107
+ return MESSAGES[key].get(lang, MESSAGES[key].get("en", ""))
108
+ return ""
109
+
110
+
111
+ def get_message_with_format(msg_key: str, **kwargs):
112
+ return format_str_jinja2(get_message(msg_key), **kwargs)
@@ -0,0 +1,180 @@
1
+ import json
2
+ from typing import Dict, Callable, Type
3
+ from autocoder.common.auto_coder_lang import get_system_language, format_str_jinja2
4
+ from autocoder.agent.base_agentic.types import (
5
+ BaseTool,
6
+ ReadFileTool, WriteToFileTool, ReplaceInFileTool, ExecuteCommandTool,
7
+ ListFilesTool, SearchFilesTool,
8
+ AskFollowupQuestionTool, UseMcpTool, AttemptCompletionTool
9
+ )
10
+
11
+ # Define message templates for each tool in English and Chinese
12
+ TOOL_DISPLAY_MESSAGES: Dict[Type[BaseTool], Dict[str, str]] = {
13
+ ReadFileTool: {
14
+ "en": "AutoCoder wants to read this file:\n[bold cyan]{{ path }}[/]",
15
+ "zh": "AutoCoder 想要读取此文件:\n[bold cyan]{{ path }}[/]"
16
+ },
17
+ WriteToFileTool: {
18
+ "en": (
19
+ "AutoCoder wants to write to this file:\n[bold cyan]{{ path }}[/]\n\n"
20
+ "[dim]Content Snippet:[/dim]\n{{ content_snippet }}{{ ellipsis }}"
21
+ ),
22
+ "zh": (
23
+ "AutoCoder 想要写入此文件:\n[bold cyan]{{ path }}[/]\n\n"
24
+ "[dim]内容片段:[/dim]\n{{ content_snippet }}{{ ellipsis }}"
25
+ )
26
+ },
27
+ ReplaceInFileTool: {
28
+ "en": (
29
+ "AutoCoder wants to replace content in this file:\n[bold cyan]{{ path }}[/]\n\n"
30
+ "[dim]Diff Snippet:[/dim]\n{{ diff_snippet }}{{ ellipsis }}"
31
+ ),
32
+ "zh": (
33
+ "AutoCoder 想要替换此文件中的内容:\n[bold cyan]{{ path }}[/]\n\n"
34
+ "[dim]差异片段:[/dim]\n{{ diff_snippet }}{{ ellipsis }}"
35
+ )
36
+ },
37
+ ExecuteCommandTool: {
38
+ "en": (
39
+ "AutoCoder wants to execute this command:\n[bold yellow]{{ command }}[/]\n"
40
+ "[dim](Requires Approval: {{ requires_approval }})[/]"
41
+ ),
42
+ "zh": (
43
+ "AutoCoder 想要执行此命令:\n[bold yellow]{{ command }}[/]\n"
44
+ "[dim](需要批准:{{ requires_approval }})[/]"
45
+ )
46
+ },
47
+ ListFilesTool: {
48
+ "en": (
49
+ "AutoCoder wants to list files in:\n[bold green]{{ path }}[/] "
50
+ "{{ recursive_text }}"
51
+ ),
52
+ "zh": (
53
+ "AutoCoder 想要列出此目录中的文件:\n[bold green]{{ path }}[/] "
54
+ "{{ recursive_text }}"
55
+ )
56
+ },
57
+ SearchFilesTool: {
58
+ "en": (
59
+ "AutoCoder wants to search files in:\n[bold green]{{ path }}[/]\n"
60
+ "[dim]File Pattern:[/dim] [yellow]{{ file_pattern }}[/]\n"
61
+ "[dim]Regex:[/dim] [yellow]{{ regex }}[/]"
62
+ ),
63
+ "zh": (
64
+ "AutoCoder 想要在此目录中搜索文件:\n[bold green]{{ path }}[/]\n"
65
+ "[dim]文件模式:[/dim] [yellow]{{ file_pattern }}[/]\n"
66
+ "[dim]正则表达式:[/dim] [yellow]{{ regex }}[/]"
67
+ )
68
+ },
69
+
70
+ AskFollowupQuestionTool: {
71
+ "en": (
72
+ "AutoCoder is asking a question:\n[bold magenta]{{ question }}[/]\n"
73
+ "{{ options_text }}"
74
+ ),
75
+ "zh": (
76
+ "AutoCoder 正在提问:\n[bold magenta]{{ question }}[/]\n"
77
+ "{{ options_text }}"
78
+ )
79
+ },
80
+ UseMcpTool: {
81
+ "en": (
82
+ "AutoCoder wants to use an MCP tool:\n"
83
+ "[dim]Server:[/dim] [blue]{{ server_name }}[/]\n"
84
+ "[dim]Tool:[/dim] [blue]{{ tool_name }}[/]\n"
85
+ "[dim]Args:[/dim] {{ arguments_snippet }}{{ ellipsis }}"
86
+ ),
87
+ "zh": (
88
+ "AutoCoder 想要使用 MCP 工具:\n"
89
+ "[dim]服务器:[/dim] [blue]{{ server_name }}[/]\n"
90
+ "[dim]工具:[/dim] [blue]{{ tool_name }}[/]\n"
91
+ "[dim]参数:[/dim] {{ arguments_snippet }}{{ ellipsis }}"
92
+ )
93
+ }
94
+ }
95
+
96
+ def get_tool_display_message(tool: BaseTool) -> str:
97
+ """
98
+ Generates a user-friendly, internationalized string representation for a tool call.
99
+
100
+ Args:
101
+ tool: The tool instance (Pydantic model).
102
+
103
+ Returns:
104
+ A formatted string for display in the terminal.
105
+ """
106
+ lang = get_system_language()
107
+ tool_type = type(tool)
108
+
109
+ if tool_type not in TOOL_DISPLAY_MESSAGES:
110
+ # Fallback for unknown tools
111
+ return f"Unknown tool type: {tool_type.__name__}\nData: {tool.model_dump_json(indent=2)}"
112
+
113
+ templates = TOOL_DISPLAY_MESSAGES[tool_type]
114
+ template = templates.get(lang, templates.get("en", "Tool display template not found")) # Fallback to English
115
+
116
+ # Prepare context specific to each tool type
117
+ context = {}
118
+ if isinstance(tool, ReadFileTool):
119
+ context = {"path": tool.path}
120
+ elif isinstance(tool, WriteToFileTool):
121
+ snippet = tool.content[:150]
122
+ context = {
123
+ "path": tool.path,
124
+ "content_snippet": snippet,
125
+ "ellipsis": '...' if len(tool.content) > 150 else ''
126
+ }
127
+ elif isinstance(tool, ReplaceInFileTool):
128
+ snippet = tool.diff
129
+ context = {
130
+ "path": tool.path,
131
+ "diff_snippet": snippet,
132
+ "ellipsis": ''
133
+ }
134
+ elif isinstance(tool, ExecuteCommandTool):
135
+ context = {"command": tool.command, "requires_approval": tool.requires_approval}
136
+ elif isinstance(tool, ListFilesTool):
137
+ rec_text_en = '(Recursively)' if tool.recursive else '(Top Level)'
138
+ rec_text_zh = '(递归)' if tool.recursive else '(顶层)'
139
+ context = {
140
+ "path": tool.path,
141
+ "recursive_text": rec_text_zh if lang == 'zh' else rec_text_en
142
+ }
143
+ elif isinstance(tool, SearchFilesTool):
144
+ context = {
145
+ "path": tool.path,
146
+ "file_pattern": tool.file_pattern or '*',
147
+ "regex": tool.regex
148
+ }
149
+ elif isinstance(tool, ListCodeDefinitionNamesTool):
150
+ context = {"path": tool.path}
151
+ elif isinstance(tool, AskFollowupQuestionTool):
152
+ options_text_en = ""
153
+ options_text_zh = ""
154
+ if tool.options:
155
+ options_list_en = "\n".join([f"- {opt}" for opt in tool.options])
156
+ options_list_zh = "\n".join([f"- {opt}" for opt in tool.options]) # Assuming options are simple enough not to need translation
157
+ options_text_en = f"[dim]Options:[/dim]\n{options_list_en}"
158
+ options_text_zh = f"[dim]选项:[/dim]\n{options_list_zh}"
159
+ context = {
160
+ "question": tool.question,
161
+ "options_text": options_text_zh if lang == 'zh' else options_text_en
162
+ }
163
+ elif isinstance(tool, UseMcpTool):
164
+ args_str = tool.query
165
+ snippet = args_str[:100]
166
+ context = {
167
+ "server_name": tool.server_name,
168
+ "tool_name": tool.tool_name,
169
+ "arguments_snippet": snippet,
170
+ "ellipsis": '...' if len(args_str) > 100 else ''
171
+ }
172
+ else:
173
+ # Generic context for tools not specifically handled above
174
+ context = tool.model_dump()
175
+
176
+ try:
177
+ return format_str_jinja2(template, **context)
178
+ except Exception as e:
179
+ # Fallback in case of formatting errors
180
+ return f"Error formatting display for {tool_type.__name__}: {e}\nTemplate: {template}\nContext: {context}"