auto-coder 0.1.392__tar.gz → 0.1.393__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 (369) hide show
  1. {auto_coder-0.1.392 → auto_coder-0.1.393}/PKG-INFO +1 -1
  2. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/auto_coder.egg-info/SOURCES.txt +4 -0
  4. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +1 -9
  5. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/auto_coder_rag.py +67 -20
  6. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/llm_friendly_package.py +36 -3
  7. auto_coder-0.1.393/src/autocoder/common/rag_manager/__init__.py +4 -0
  8. auto_coder-0.1.393/src/autocoder/common/rag_manager/rag_manager.py +144 -0
  9. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit.py +60 -8
  10. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +2 -0
  11. auto_coder-0.1.393/src/autocoder/common/v2/agent/agentic_edit_tools/use_rag_tool_resolver.py +91 -0
  12. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_types.py +5 -0
  13. auto_coder-0.1.393/src/autocoder/rags.py +348 -0
  14. auto_coder-0.1.393/src/autocoder/version.py +1 -0
  15. auto_coder-0.1.392/src/autocoder/version.py +0 -1
  16. {auto_coder-0.1.392 → auto_coder-0.1.393}/LICENSE +0 -0
  17. {auto_coder-0.1.392 → auto_coder-0.1.393}/README.md +0 -0
  18. {auto_coder-0.1.392 → auto_coder-0.1.393}/setup.cfg +0 -0
  19. {auto_coder-0.1.392 → auto_coder-0.1.393}/setup.py +0 -0
  20. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  21. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/auto_coder.egg-info/entry_points.txt +0 -0
  22. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/auto_coder.egg-info/requires.txt +0 -0
  23. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/auto_coder.egg-info/top_level.txt +0 -0
  24. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/__init__.py +0 -0
  25. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/__init__.py +0 -0
  26. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/agentic_filter.py +0 -0
  27. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  28. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/auto_filegroup.py +0 -0
  29. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/auto_guess_query.py +0 -0
  30. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/auto_learn.py +0 -0
  31. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  32. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/auto_review_commit.py +0 -0
  33. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/auto_tool.py +0 -0
  34. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/__init__.py +0 -0
  35. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/agent_hub.py +0 -0
  36. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/agentic_lang.py +0 -0
  37. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/agentic_tool_display.py +0 -0
  38. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/base_agent.py +0 -0
  39. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/default_tools.py +0 -0
  40. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/test_base_agent.py +0 -0
  41. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tool_registry.py +0 -0
  42. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/__init__.py +0 -0
  43. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +0 -0
  44. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +0 -0
  45. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/base_tool_resolver.py +0 -0
  46. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/example_tool_resolver.py +0 -0
  47. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +0 -0
  48. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +0 -0
  49. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +0 -0
  50. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py +0 -0
  51. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +0 -0
  52. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +0 -0
  53. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +0 -0
  54. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +0 -0
  55. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +0 -0
  56. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/types.py +0 -0
  57. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/base_agentic/utils.py +0 -0
  58. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/coder.py +0 -0
  59. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/designer.py +0 -0
  60. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/planner.py +0 -0
  61. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/agent/project_reader.py +0 -0
  62. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/auto_coder.py +0 -0
  63. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/auto_coder_runner.py +0 -0
  64. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/auto_coder_server.py +0 -0
  65. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/benchmark.py +0 -0
  66. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/chat/__init__.py +0 -0
  67. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/chat/conf_command.py +0 -0
  68. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/chat/models_command.py +0 -0
  69. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/chat/rules_command.py +0 -0
  70. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/chat_auto_coder.py +0 -0
  71. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/chat_auto_coder_lang.py +0 -0
  72. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/command_args.py +0 -0
  73. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/command_parser.py +0 -0
  74. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/commands/__init__.py +0 -0
  75. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/commands/auto_command.py +0 -0
  76. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/commands/auto_web.py +0 -0
  77. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/commands/tools.py +0 -0
  78. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/JupyterClient.py +0 -0
  79. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/ShellClient.py +0 -0
  80. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/__init__.py +0 -0
  81. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/action_yml_file_manager.py +0 -0
  82. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/anything2images.py +0 -0
  83. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/anything2img.py +0 -0
  84. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/audio.py +0 -0
  85. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/auto_coder_lang.py +0 -0
  86. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/auto_configure.py +0 -0
  87. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/buildin_tokenizer.py +0 -0
  88. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/chunk_validation.py +0 -0
  89. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/cleaner.py +0 -0
  90. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_execute.py +0 -0
  91. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_generate.py +0 -0
  92. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  93. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  94. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  95. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_merge.py +0 -0
  96. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  97. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  98. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  99. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/code_modification_ranker.py +0 -0
  100. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_completer.py +0 -0
  101. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_completer_v2.py +0 -0
  102. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_file_manager/__init__.py +0 -0
  103. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_file_manager/examples.py +0 -0
  104. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_file_manager/manager.py +0 -0
  105. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_file_manager/models.py +0 -0
  106. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_file_manager/utils.py +0 -0
  107. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_generator.py +0 -0
  108. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/command_templates.py +0 -0
  109. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/computer_use.py +0 -0
  110. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/conf_import_export.py +0 -0
  111. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/conf_utils.py +0 -0
  112. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/conf_validator.py +0 -0
  113. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/const.py +0 -0
  114. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/context_pruner.py +0 -0
  115. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/conversation_pruner.py +0 -0
  116. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/conversations/__init__.py +0 -0
  117. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/conversations/compatibility.py +0 -0
  118. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/conversations/conversation_manager.py +0 -0
  119. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/conversations/example.py +0 -0
  120. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/directory_cache/__init__.py +0 -0
  121. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/directory_cache/cache.py +0 -0
  122. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/directory_cache/test_cache.py +0 -0
  123. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/__init__.py +0 -0
  124. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/backup.py +0 -0
  125. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/conversation_checkpoint.py +0 -0
  126. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/examples.py +0 -0
  127. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/manager.py +0 -0
  128. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/models.py +0 -0
  129. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/store.py +0 -0
  130. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/test_backup.py +0 -0
  131. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/test_manager.py +0 -0
  132. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/test_models.py +0 -0
  133. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/test_store.py +0 -0
  134. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/test_utils.py +0 -0
  135. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_checkpoint/utils.py +0 -0
  136. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_monitor/__init__.py +0 -0
  137. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/file_monitor/monitor.py +0 -0
  138. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/files.py +0 -0
  139. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/git_utils.py +0 -0
  140. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/global_cancel.py +0 -0
  141. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/ignorefiles/__init__.py +0 -0
  142. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
  143. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
  144. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/image_to_page.py +0 -0
  145. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/index_import_export.py +0 -0
  146. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/interpreter.py +0 -0
  147. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/llm_friendly_package_example.py +0 -0
  148. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/llm_friendly_package_test.py +0 -0
  149. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/mcp_hub.py +0 -0
  150. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/mcp_server.py +0 -0
  151. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/mcp_server_install.py +0 -0
  152. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/mcp_server_types.py +0 -0
  153. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  154. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  155. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  156. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/mcp_tools.py +0 -0
  157. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/memory_manager.py +0 -0
  158. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/model_speed_tester.py +0 -0
  159. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/openai_content.py +0 -0
  160. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/printer.py +0 -0
  161. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/recall_validation.py +0 -0
  162. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/result_manager.py +0 -0
  163. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/rulefiles/__init__.py +0 -0
  164. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/rulefiles/autocoderrules_utils.py +0 -0
  165. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/run_cmd.py +0 -0
  166. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/save_formatted_log.py +0 -0
  167. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/screenshots.py +0 -0
  168. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/search.py +0 -0
  169. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/search_replace.py +0 -0
  170. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/shells.py +0 -0
  171. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/stats_panel.py +0 -0
  172. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/stream_out_type.py +0 -0
  173. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/sys_prompt.py +0 -0
  174. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/test_run_cmd.py +0 -0
  175. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/text.py +0 -0
  176. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/token_cost_caculate.py +0 -0
  177. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/types.py +0 -0
  178. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  179. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/__init__.py +0 -0
  180. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/__init__.py +0 -0
  181. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
  182. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
  183. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  184. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/dangerous_command_checker.py +0 -0
  185. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
  186. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
  187. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
  188. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
  189. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
  190. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
  191. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +0 -0
  192. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
  193. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -0
  194. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
  195. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +0 -0
  196. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
  197. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -0
  198. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
  199. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  200. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  201. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  202. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  203. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  204. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  205. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  206. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  207. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  208. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  209. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  210. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_manager.py +0 -0
  211. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  212. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/__init__.py +0 -0
  213. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/base_compiler.py +0 -0
  214. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/compiler_config_api.py +0 -0
  215. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  216. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/compiler_factory.py +0 -0
  217. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/java_compiler.py +0 -0
  218. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/models.py +0 -0
  219. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/normal_compiler.py +0 -0
  220. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/provided_compiler.py +0 -0
  221. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/python_compiler.py +0 -0
  222. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  223. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/shadow_compiler.py +0 -0
  224. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/compilers/vue_compiler.py +0 -0
  225. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/data/byzerllm.md +0 -0
  226. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/data/tokenizer.json +0 -0
  227. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/db/__init__.py +0 -0
  228. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/db/store.py +0 -0
  229. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/dispacher/__init__.py +0 -0
  230. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/dispacher/actions/__init__.py +0 -0
  231. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/dispacher/actions/action.py +0 -0
  232. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/dispacher/actions/copilot.py +0 -0
  233. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  234. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  235. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/events/__init__.py +0 -0
  236. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/events/event_content.py +0 -0
  237. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/events/event_manager.py +0 -0
  238. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/events/event_manager_singleton.py +0 -0
  239. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/events/event_store.py +0 -0
  240. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/events/event_types.py +0 -0
  241. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/helper/__init__.py +0 -0
  242. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/helper/project_creator.py +0 -0
  243. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/helper/rag_doc_creator.py +0 -0
  244. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/__init__.py +0 -0
  245. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/entry.py +0 -0
  246. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/filter/__init__.py +0 -0
  247. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/filter/normal_filter.py +0 -0
  248. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/filter/quick_filter.py +0 -0
  249. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/for_command.py +0 -0
  250. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/index.py +0 -0
  251. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/symbols_utils.py +0 -0
  252. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/index/types.py +0 -0
  253. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/lang.py +0 -0
  254. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/__init__.py +0 -0
  255. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/base_linter.py +0 -0
  256. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/linter_factory.py +0 -0
  257. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/models.py +0 -0
  258. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/normal_linter.py +0 -0
  259. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/python_linter.py +0 -0
  260. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/reactjs_linter.py +0 -0
  261. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/shadow_linter.py +0 -0
  262. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/test_python_linter.py +0 -0
  263. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/test_reactjs_linter.py +0 -0
  264. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/test_vue_linter.py +0 -0
  265. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/linters/vue_linter.py +0 -0
  266. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/__init__.py +0 -0
  267. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/active_changes.py +0 -0
  268. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/active_context_manager.py +0 -0
  269. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/active_diagrams.py +0 -0
  270. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/active_documents.py +0 -0
  271. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/active_header.py +0 -0
  272. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/active_package.py +0 -0
  273. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/async_processor.py +0 -0
  274. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/memory/directory_mapper.py +0 -0
  275. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/models.py +0 -0
  276. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/plugins/__init__.py +0 -0
  277. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  278. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  279. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/plugins/sample_plugin.py +0 -0
  280. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  281. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/plugins/utils.py +0 -0
  282. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/privacy/__init__.py +0 -0
  283. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/privacy/model_filter.py +0 -0
  284. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/pyproject/__init__.py +0 -0
  285. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/__init__.py +0 -0
  286. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/agentic_rag.py +0 -0
  287. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/api_server.py +0 -0
  288. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/__init__.py +0 -0
  289. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/base_cache.py +0 -0
  290. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  291. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  292. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
  293. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  294. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  295. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  296. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  297. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/cache/simple_cache.py +0 -0
  298. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/conversation_to_queries.py +0 -0
  299. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/doc_filter.py +0 -0
  300. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/document_retriever.py +0 -0
  301. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/lang.py +0 -0
  302. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/llm_wrapper.py +0 -0
  303. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/loaders/__init__.py +0 -0
  304. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  305. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  306. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/loaders/filter_utils.py +0 -0
  307. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/loaders/image_loader.py +0 -0
  308. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  309. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  310. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/long_context_rag.py +0 -0
  311. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  312. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/rag_config.py +0 -0
  313. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/rag_entry.py +0 -0
  314. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/relevant_utils.py +0 -0
  315. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/searchable.py +0 -0
  316. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/stream_event/__init__.py +0 -0
  317. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  318. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/stream_event/types.py +0 -0
  319. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/test_doc_filter.py +0 -0
  320. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/test_long_context_rag.py +0 -0
  321. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/test_token_limiter.py +0 -0
  322. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/token_checker.py +0 -0
  323. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/token_counter.py +0 -0
  324. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/token_limiter.py +0 -0
  325. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/token_limiter_utils.py +0 -0
  326. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/tools/__init__.py +0 -0
  327. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/tools/recall_tool.py +0 -0
  328. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/tools/search_tool.py +0 -0
  329. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/types.py +0 -0
  330. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/utils.py +0 -0
  331. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/rag/variable_holder.py +0 -0
  332. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/regexproject/__init__.py +0 -0
  333. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/run_context.py +0 -0
  334. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/shadows/__init__.py +0 -0
  335. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/shadows/shadow_manager.py +0 -0
  336. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/suffixproject/__init__.py +0 -0
  337. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/tsproject/__init__.py +0 -0
  338. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/__init__.py +0 -0
  339. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/_markitdown.py +0 -0
  340. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  341. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  342. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/auto_project_type.py +0 -0
  343. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  344. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/conversation_store.py +0 -0
  345. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  346. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/llms.py +0 -0
  347. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/log_capture.py +0 -0
  348. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/model_provider_selector.py +0 -0
  349. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/multi_turn.py +0 -0
  350. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/operate_config_api.py +0 -0
  351. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/print_table.py +0 -0
  352. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/project_structure.py +0 -0
  353. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/queue_communicate.py +0 -0
  354. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/request_event_queue.py +0 -0
  355. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/request_queue.py +0 -0
  356. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/rest.py +0 -0
  357. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/stream_thinking.py +0 -0
  358. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/thread_utils.py +0 -0
  359. {auto_coder-0.1.392 → auto_coder-0.1.393}/src/autocoder/utils/types.py +0 -0
  360. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_action_regex_project.py +0 -0
  361. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_action_yml_file_manager.py +0 -0
  362. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_chat_auto_coder.py +0 -0
  363. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_code_auto_merge_editblock.py +0 -0
  364. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_command_completer.py +0 -0
  365. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_planner.py +0 -0
  366. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_plugins.py +0 -0
  367. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_privacy.py +0 -0
  368. {auto_coder-0.1.392 → auto_coder-0.1.393}/tests/test_queue_communicate.py +0 -0
  369. {auto_coder-0.1.392 → auto_coder-0.1.393}/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.392
3
+ Version: 0.1.393
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.392
3
+ Version: 0.1.393
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -19,6 +19,7 @@ src/autocoder/command_args.py
19
19
  src/autocoder/command_parser.py
20
20
  src/autocoder/lang.py
21
21
  src/autocoder/models.py
22
+ src/autocoder/rags.py
22
23
  src/autocoder/run_context.py
23
24
  src/autocoder/version.py
24
25
  src/autocoder/agent/__init__.py
@@ -167,6 +168,8 @@ src/autocoder/common/ignorefiles/test_ignore_file_utils.py
167
168
  src/autocoder/common/mcp_servers/__init__.py
168
169
  src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py
169
170
  src/autocoder/common/mcp_servers/mcp_server_perplexity.py
171
+ src/autocoder/common/rag_manager/__init__.py
172
+ src/autocoder/common/rag_manager/rag_manager.py
170
173
  src/autocoder/common/rulefiles/__init__.py
171
174
  src/autocoder/common/rulefiles/autocoderrules_utils.py
172
175
  src/autocoder/common/v2/__init__.py
@@ -204,6 +207,7 @@ src/autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resol
204
207
  src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py
205
208
  src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py
206
209
  src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py
210
+ src/autocoder/common/v2/agent/agentic_edit_tools/use_rag_tool_resolver.py
207
211
  src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py
208
212
  src/autocoder/compilers/__init__.py
209
213
  src/autocoder/compilers/base_compiler.py
@@ -21,15 +21,7 @@ class ExecuteCommandToolResolver(BaseToolResolver):
21
21
  def resolve(self) -> ToolResult:
22
22
  command = self.tool.command
23
23
  requires_approval = self.tool.requires_approval
24
- source_dir = self.args.source_dir or "."
25
-
26
- # Basic security check (can be expanded)
27
- if ";" in command or "&&" in command or "|" in command or "`" in command:
28
- # Allow && for cd chaining, but be cautious
29
- if not command.strip().startswith("cd ") and " && " in command:
30
- pass # Allow cd chaining like 'cd subdir && command'
31
- else:
32
- return ToolResult(success=False, message=f"Command '{command}' contains potentially unsafe characters.")
24
+ source_dir = self.args.source_dir or "."
33
25
 
34
26
  # Approval mechanism (simplified)
35
27
  if requires_approval:
@@ -35,6 +35,7 @@ import pkg_resources
35
35
  from autocoder.rag.token_counter import TokenCounter
36
36
  from autocoder.rag.types import RAGServiceInfo
37
37
  from autocoder.version import __version__
38
+ from autocoder.rags import get_rag_config
38
39
 
39
40
  if platform.system() == "Windows":
40
41
  from colorama import init
@@ -169,6 +170,40 @@ def initialize_system(args):
169
170
  print_status(get_message("init_complete_final"), "success")
170
171
 
171
172
 
173
+ def merge_args_with_config(args, config, arg_class, parser):
174
+ """
175
+ 合并命令行参数和配置文件参数,优先级如下:
176
+ 1. 命令行参数非默认值,以命令行为准
177
+ 2. 命令行参数为默认值,且配置文件有值,以配置文件为准
178
+ 3. 否则用命令行参数
179
+ """
180
+ merged = {}
181
+ for arg in vars(arg_class()):
182
+ # 获取默认值
183
+ try:
184
+ default = parser.get_default(arg)
185
+ except Exception:
186
+ default = None
187
+
188
+
189
+ if not hasattr(args,arg) and arg not in config:
190
+ continue
191
+
192
+ cli_value = getattr(args, arg, None)
193
+ config_value = config.get(arg, None)
194
+
195
+
196
+ # 判断优先级
197
+ if cli_value != default:
198
+ merged[arg] = cli_value
199
+ elif config_value is not None:
200
+ merged[arg] = config_value
201
+ else:
202
+ merged[arg] = cli_value
203
+
204
+ return arg_class(**merged)
205
+
206
+
172
207
  def main(input_args: Optional[List[str]] = None):
173
208
  print(
174
209
  f"""
@@ -297,6 +332,7 @@ def main(input_args: Optional[List[str]] = None):
297
332
  serve_parser.add_argument("--source_dir", default=".", help="")
298
333
  serve_parser.add_argument("--host", default="", help="")
299
334
  serve_parser.add_argument("--port", type=int, default=8000, help="")
335
+ serve_parser.add_argument("--name", default="", help="RAG服务的名称(可选)")
300
336
  serve_parser.add_argument("--workers", type=int, default=4, help="")
301
337
  serve_parser.add_argument("--uvicorn_log_level", default="info", help="")
302
338
  serve_parser.add_argument("--allow_credentials", action="store_true", help="")
@@ -565,29 +601,40 @@ def main(input_args: Optional[List[str]] = None):
565
601
  benchmark_byzerllm(args.model, args.parallel, args.rounds, args.query)
566
602
 
567
603
  elif args.command == "serve":
568
- # Handle lite/pro flags
569
- if args.lite:
570
- args.product_mode = "lite"
571
- elif args.pro:
604
+ # 如果用户传递了 --name 参数,则加载已保存的配置并与命令行参数合并
605
+ server_args_config = {}
606
+ auto_coder_args_config = {}
607
+ if args.name:
608
+ saved_config = get_rag_config(args.name)
609
+ if saved_config:
610
+ logger.info(f"加载已保存的RAG配置: {args.name}")
611
+ # 将保存的配置合并到 args 中(命令行参数优先)
612
+ for key, value in saved_config.items():
613
+ # 跳过一些不应该被合并的字段
614
+ skip_fields = {'name', 'status', 'created_at', 'updated_at', 'process_id', 'stdout_fd', 'stderr_fd', 'cache_build_task_id'}
615
+ if key in skip_fields:
616
+ continue
617
+ server_args_config[key] = value
618
+ # 特殊处理 infer_params 字段
619
+ if 'infer_params' in saved_config and saved_config['infer_params']:
620
+ for infer_key, infer_value in saved_config['infer_params'].items():
621
+ auto_coder_args_config[infer_key] = infer_value
622
+ logger.info(f"配置合并完成,使用文档目录: {getattr(args, 'doc_dir', 'N/A')}")
623
+ else:
624
+ logger.warning(f"未找到名为 '{args.name}' 的RAG配置")
625
+
626
+ # Handle lite/pro flags
627
+ if args.pro:
572
628
  args.product_mode = "pro"
573
-
629
+ else:
630
+ args.product_mode = "lite"
631
+
574
632
  if not args.quick:
575
633
  initialize_system(args)
576
-
577
- server_args = ServerArgs(
578
- **{
579
- arg: getattr(args, arg)
580
- for arg in vars(ServerArgs())
581
- if hasattr(args, arg)
582
- }
583
- )
584
- auto_coder_args = AutoCoderArgs(
585
- **{
586
- arg: getattr(args, arg)
587
- for arg in vars(AutoCoderArgs())
588
- if hasattr(args, arg)
589
- }
590
- )
634
+
635
+ # 使用新的合并逻辑
636
+ server_args = merge_args_with_config(args, server_args_config, ServerArgs, serve_parser)
637
+ auto_coder_args = merge_args_with_config(args, server_args_config, AutoCoderArgs, serve_parser)
591
638
  # 设置本地图床的地址
592
639
  if args.enable_local_image_host:
593
640
  host = server_args.host or "127.0.0.1"
@@ -178,6 +178,41 @@ class LLMFriendlyPackageManager:
178
178
 
179
179
  return docs
180
180
 
181
+ def get_package_path(self, package_name: str) -> Optional[str]:
182
+ """
183
+ Get the full path of a package by its name
184
+
185
+ Args:
186
+ package_name: Package name (can be just lib_name or username/lib_name)
187
+
188
+ Returns:
189
+ Full path to the package directory, or None if not found
190
+ """
191
+ if not os.path.exists(self.llm_friendly_packages_dir):
192
+ return None
193
+
194
+ for domain in os.listdir(self.llm_friendly_packages_dir):
195
+ domain_path = os.path.join(self.llm_friendly_packages_dir, domain)
196
+ if not os.path.isdir(domain_path):
197
+ continue
198
+
199
+ for username in os.listdir(domain_path):
200
+ username_path = os.path.join(domain_path, username)
201
+ if not os.path.isdir(username_path):
202
+ continue
203
+
204
+ for lib_name in os.listdir(username_path):
205
+ lib_path = os.path.join(username_path, lib_name)
206
+ if not os.path.isdir(lib_path):
207
+ continue
208
+
209
+ # Check if this matches the requested package
210
+ if (lib_name == package_name or
211
+ package_name == os.path.join(username, lib_name)):
212
+ return lib_path
213
+
214
+ return None
215
+
181
216
  def list_added_libraries(self) -> List[str]:
182
217
  """List all added libraries"""
183
218
  memory = self._load_memory()
@@ -405,6 +440,4 @@ class LLMFriendlyPackageManager:
405
440
  table.add_column("File Path", style="cyan")
406
441
 
407
442
  for doc in docs:
408
- table.add_row(doc)
409
-
410
- self.console.print(table)
443
+ table.add_row(doc)
@@ -0,0 +1,4 @@
1
+ # flake8: noqa
2
+ from .rag_manager import RAGManager
3
+
4
+ __all__ = ["RAGManager"]
@@ -0,0 +1,144 @@
1
+ import os
2
+ import json
3
+ from typing import List, Dict, Any, Optional
4
+ from pydantic import BaseModel
5
+ from autocoder.common import AutoCoderArgs
6
+ from loguru import logger
7
+
8
+
9
+ class RAGConfig(BaseModel):
10
+ """RAG 配置项模型"""
11
+ name: str
12
+ server_name: str # 实际的服务器地址,如 http://127.0.0.1:8107/v1
13
+ api_key: Optional[str] = None
14
+ description: Optional[str] = None
15
+
16
+
17
+ class RAGManager:
18
+ """RAG 管理器,用于读取和管理 RAG 服务器配置"""
19
+
20
+ def __init__(self, args: AutoCoderArgs):
21
+ self.args = args
22
+ self.configs: List[RAGConfig] = []
23
+ self._load_configs()
24
+
25
+ def _load_configs(self):
26
+ """加载 RAG 配置,优先从项目配置,然后从全局配置"""
27
+ # 优先读取项目级别配置
28
+ project_config_path = os.path.join(
29
+ self.args.source_dir,
30
+ ".auto-coder",
31
+ "auto-coder.web",
32
+ "rags",
33
+ "rags.json"
34
+ )
35
+
36
+ if os.path.exists(project_config_path):
37
+ logger.info(f"正在加载项目级别 RAG 配置: {project_config_path}")
38
+ self._load_project_config(project_config_path)
39
+ else:
40
+ logger.info("未找到项目级别 RAG 配置,尝试加载全局配置")
41
+ # 读取全局配置
42
+ global_config_path = os.path.expanduser("~/.auto-coder/keys/rags.json")
43
+ if os.path.exists(global_config_path):
44
+ logger.info(f"正在加载全局 RAG 配置: {global_config_path}")
45
+ self._load_global_config(global_config_path)
46
+ else:
47
+ logger.warning("未找到任何 RAG 配置文件")
48
+
49
+ def _load_project_config(self, config_path: str):
50
+ """加载项目级别的 RAG 配置"""
51
+ try:
52
+ with open(config_path, 'r', encoding='utf-8') as f:
53
+ config_data = json.load(f)
54
+
55
+ if "data" in config_data and isinstance(config_data["data"], list):
56
+ for item in config_data["data"]:
57
+ try:
58
+ rag_config = RAGConfig(
59
+ name=item.get("name", ""),
60
+ server_name=item.get("base_url", ""),
61
+ api_key=item.get("api_key"),
62
+ description=item.get("description")
63
+ )
64
+ self.configs.append(rag_config)
65
+ logger.info(f"已加载 RAG 配置: {rag_config.name} -> {rag_config.server_name}")
66
+ except Exception as e:
67
+ logger.error(f"解析项目级别 RAG 配置项时出错: {e}, 配置项: {item}")
68
+ else:
69
+ logger.error(f"项目级别 RAG 配置格式错误,缺少 'data' 字段或 'data' 不是列表")
70
+
71
+ except json.JSONDecodeError as e:
72
+ logger.error(f"项目级别 RAG 配置文件 JSON 格式错误: {e}")
73
+ except Exception as e:
74
+ logger.error(f"读取项目级别 RAG 配置文件时出错: {e}")
75
+
76
+ def _load_global_config(self, config_path: str):
77
+ """加载全局级别的 RAG 配置"""
78
+ try:
79
+ with open(config_path, 'r', encoding='utf-8') as f:
80
+ config_data = json.load(f)
81
+
82
+ for key, item in config_data.items():
83
+ try:
84
+ # 构造 server_name: http://host:port/v1
85
+ host = item.get("host", "127.0.0.1")
86
+ port = item.get("port", 8080)
87
+ server_name = f"http://{host}:{port}/v1"
88
+
89
+ rag_config = RAGConfig(
90
+ name=item.get("name", key),
91
+ server_name=server_name,
92
+ api_key=None, # 全局配置中没有 api_key
93
+ description=item.get("description", f"{key} RAG 服务")
94
+ )
95
+ self.configs.append(rag_config)
96
+ logger.info(f"已加载 RAG 配置: {rag_config.name} -> {rag_config.server_name}")
97
+ except Exception as e:
98
+ logger.error(f"解析全局 RAG 配置项时出错: {e}, 配置项: {item}")
99
+
100
+ except json.JSONDecodeError as e:
101
+ logger.error(f"全局 RAG 配置文件 JSON 格式错误: {e}")
102
+ except Exception as e:
103
+ logger.error(f"读取全局 RAG 配置文件时出错: {e}")
104
+
105
+ def get_all_configs(self) -> List[RAGConfig]:
106
+ """获取所有 RAG 配置"""
107
+ return self.configs
108
+
109
+ def get_config_by_name(self, name: str) -> Optional[RAGConfig]:
110
+ """根据名称获取特定的 RAG 配置"""
111
+ for config in self.configs:
112
+ if config.name == name:
113
+ return config
114
+ return None
115
+
116
+ def get_server_names(self) -> List[str]:
117
+ """获取所有服务器名称列表"""
118
+ return [config.server_name for config in self.configs]
119
+
120
+ def get_config_info(self) -> str:
121
+ """获取格式化的配置信息,用于显示"""
122
+ if not self.configs:
123
+ return "未找到可用的 RAG 服务器配置"
124
+
125
+ info_lines = []
126
+ info_lines.append("可用的 RAG 服务器配置")
127
+
128
+ for i, config in enumerate(self.configs, 1):
129
+ info_lines.append(f"\n{i}. 配置名称: {config.name}")
130
+ info_lines.append(f" 服务器地址: {config.server_name}")
131
+
132
+ if config.description:
133
+ info_lines.append(f" 描述信息: {config.description}")
134
+ else:
135
+ info_lines.append(f" 描述信息: 无")
136
+
137
+ if i < len(self.configs):
138
+ info_lines.append("-" * 30)
139
+
140
+ return "\n".join(info_lines)
141
+
142
+ def has_configs(self) -> bool:
143
+ """检查是否有可用的配置"""
144
+ return len(self.configs) > 0
@@ -10,6 +10,10 @@ from rich.panel import Panel
10
10
  from pydantic import SkipValidation
11
11
  from byzerllm.utils.types import SingleOutputMeta
12
12
 
13
+ from byzerllm.utils import (
14
+ format_str_jinja2
15
+ )
16
+
13
17
  from autocoder.common import AutoCoderArgs, git_utils, SourceCodeList, SourceCode
14
18
  from autocoder.common.global_cancel import global_cancel
15
19
  from autocoder.common import detect_env
@@ -56,7 +60,7 @@ from autocoder.common.v2.agent.agentic_edit_tools import ( # Import specific re
56
60
  ReplaceInFileToolResolver, SearchFilesToolResolver, ListFilesToolResolver,
57
61
  ListCodeDefinitionNamesToolResolver, AskFollowupQuestionToolResolver,
58
62
  AttemptCompletionToolResolver, PlanModeRespondToolResolver, UseMcpToolResolver,
59
- ListPackageInfoToolResolver
63
+ UseRAGToolResolver, ListPackageInfoToolResolver
60
64
  )
61
65
  from autocoder.common.llm_friendly_package import LLMFriendlyPackageManager
62
66
  from autocoder.common.rulefiles.autocoderrules_utils import get_rules,auto_select_rules,get_required_and_index_rules
@@ -69,7 +73,7 @@ from autocoder.common.v2.agent.agentic_edit_types import (AgenticEditRequest, To
69
73
  ListFilesTool,
70
74
  ListCodeDefinitionNamesTool, AskFollowupQuestionTool,
71
75
  AttemptCompletionTool, PlanModeRespondTool, UseMcpTool,
72
- ListPackageInfoTool,
76
+ UseRAGTool, ListPackageInfoTool,
73
77
  TOOL_MODEL_MAP,
74
78
  # Event Types
75
79
  LLMOutputEvent, LLMThinkingEvent, ToolCallEvent,
@@ -80,7 +84,7 @@ from autocoder.common.v2.agent.agentic_edit_types import (AgenticEditRequest, To
80
84
  ListFilesTool, SearchFilesTool, ListCodeDefinitionNamesTool,
81
85
  AskFollowupQuestionTool, UseMcpTool, AttemptCompletionTool
82
86
  )
83
-
87
+ from autocoder.common.rag_manager import RAGManager
84
88
  from autocoder.rag.token_counter import count_tokens
85
89
 
86
90
  # Map Pydantic Tool Models to their Resolver Classes
@@ -96,7 +100,8 @@ TOOL_RESOLVER_MAP: Dict[Type[BaseTool], Type[BaseToolResolver]] = {
96
100
  AskFollowupQuestionTool: AskFollowupQuestionToolResolver,
97
101
  AttemptCompletionTool: AttemptCompletionToolResolver, # Will stop the loop anyway
98
102
  PlanModeRespondTool: PlanModeRespondToolResolver,
99
- UseMcpTool: UseMcpToolResolver
103
+ UseMcpTool: UseMcpToolResolver,
104
+ UseRAGTool: UseRAGToolResolver
100
105
  }
101
106
 
102
107
 
@@ -161,12 +166,25 @@ class AgenticEdit:
161
166
  except Exception as e:
162
167
  logger.error(f"Error getting MCP server info: {str(e)}")
163
168
 
169
+ # 初始化 RAG 管理器并获取服务器信息
170
+ self.rag_server_info = ""
171
+ try:
172
+ self.rag_manager = RAGManager(args)
173
+ if self.rag_manager.has_configs():
174
+ self.rag_server_info = self.rag_manager.get_config_info()
175
+ logger.info(f"RAG manager initialized with {len(self.rag_manager.get_all_configs())} configurations")
176
+ else:
177
+ logger.info("No RAG configurations found")
178
+ except Exception as e:
179
+ logger.error(f"Error initializing RAG manager: {str(e)}")
180
+ self.rag_manager = None
181
+
164
182
  # 变更跟踪信息
165
183
  # 格式: { file_path: FileChangeEntry(...) }
166
184
  self.file_changes: Dict[str, FileChangeEntry] = {}
167
185
 
168
186
  @byzerllm.prompt()
169
- def generate_library_docs_prompt(self, libraries: List[str], docs_content: str) -> Dict[str, Any]:
187
+ def generate_library_docs_prompt(self, libraries_with_paths: List[Dict[str, str]], docs_content: str) -> Dict[str, Any]:
170
188
  """
171
189
  ====
172
190
 
@@ -187,8 +205,15 @@ class AgenticEdit:
187
205
  4. You need to understand the API or usage patterns of these libraries
188
206
  ====
189
207
  """
208
+ # 格式化库列表,包含名称和路径
209
+ libraries_list = []
210
+ for lib_info in libraries_with_paths:
211
+ name = lib_info.get('name', '')
212
+ path = lib_info.get('path', 'Path not found')
213
+ libraries_list.append(f"{name} (路径: {path})")
214
+
190
215
  return {
191
- "libraries_list": ", ".join(libraries),
216
+ "libraries_list": ", ".join(libraries_list),
192
217
  "combined_docs": docs_content
193
218
  }
194
219
 
@@ -442,6 +467,22 @@ class AgenticEdit:
442
467
  {{mcp_server_info}}
443
468
  {%endif%}
444
469
 
470
+ ## rag_tool
471
+ Description: Request to query the RAG server for information. Use this when you need to query the RAG server for information.
472
+ Parameters:
473
+ - server_name: (required) The url of the RAG server to use.
474
+ - query: (required) The query to pass to the tool.
475
+ Usage:
476
+ <use_rag_tool>
477
+ <server_name>xxx</server_name>
478
+ <query>Your query here</query>
479
+ </use_rag_tool>
480
+
481
+ {%if rag_server_info %}
482
+ ### RAG_SERVER_LIST
483
+ {{rag_server_info}}
484
+ {%endif%}
485
+
445
486
  # Tool Use Examples
446
487
 
447
488
  ## Example 1: Requesting to execute a command
@@ -688,6 +729,7 @@ class AgenticEdit:
688
729
  - It is critical you wait for the user's response after each tool use, in order to confirm the success of the tool use. For example, if asked to make a todo app, you would create a file, wait for the user's response it was created successfully, then create another file if needed, wait for the user's response it was created successfully, etc.
689
730
  - To display LaTeX formulas, use a single dollar sign to wrap inline formulas, like `$E=mc^2$`, and double dollar signs to wrap block-level formulas, like `$$\frac{d}{dx}e^x = e^x$$`.
690
731
  - To include flowcharts or diagrams, you can use Mermaid syntax.
732
+ - If you come across some unknown or unfamiliar concepts or terms, or if the user is asking a question, you can try using appropriate MCP or RAG services to obtain the information.
691
733
 
692
734
 
693
735
  {% if extra_docs %}
@@ -769,6 +811,7 @@ class AgenticEdit:
769
811
  "home_dir": os.path.expanduser("~"),
770
812
  "files": self.files.to_str(),
771
813
  "mcp_server_info": self.mcp_server_info,
814
+ "rag_server_info": self.rag_server_info,
772
815
  "enable_active_context_in_generate": self.args.enable_active_context_in_generate,
773
816
  "extra_docs": extra_docs,
774
817
  "file_paths_str": file_paths_str,
@@ -842,6 +885,15 @@ class AgenticEdit:
842
885
  added_libraries = package_manager.list_added_libraries()
843
886
 
844
887
  if added_libraries:
888
+ # Build libraries with paths information
889
+ libraries_with_paths = []
890
+ for lib_name in added_libraries:
891
+ lib_path = package_manager.get_package_path(lib_name)
892
+ libraries_with_paths.append({
893
+ 'name': lib_name,
894
+ 'path': lib_path if lib_path else 'Path not found'
895
+ })
896
+
845
897
  # Get documentation content for all added libraries
846
898
  docs_content = package_manager.get_docs(return_paths=False)
847
899
 
@@ -851,9 +903,9 @@ class AgenticEdit:
851
903
 
852
904
  # Generate library documentation prompt using decorator
853
905
  library_docs_prompt = self.generate_library_docs_prompt.prompt(
854
- libraries=added_libraries,
906
+ libraries_with_paths=libraries_with_paths,
855
907
  docs_content=combined_docs
856
- )
908
+ )
857
909
 
858
910
  conversations.append({
859
911
  "role": "user",
@@ -11,6 +11,7 @@ from .ask_followup_question_tool_resolver import AskFollowupQuestionToolResolver
11
11
  from .attempt_completion_tool_resolver import AttemptCompletionToolResolver
12
12
  from .plan_mode_respond_tool_resolver import PlanModeRespondToolResolver
13
13
  from .use_mcp_tool_resolver import UseMcpToolResolver
14
+ from .use_rag_tool_resolver import UseRAGToolResolver
14
15
  from .list_package_info_tool_resolver import ListPackageInfoToolResolver
15
16
 
16
17
  __all__ = [
@@ -26,5 +27,6 @@ __all__ = [
26
27
  "AttemptCompletionToolResolver",
27
28
  "PlanModeRespondToolResolver",
28
29
  "UseMcpToolResolver",
30
+ "UseRAGToolResolver",
29
31
  "ListPackageInfoToolResolver",
30
32
  ]
@@ -0,0 +1,91 @@
1
+ from typing import Dict, Any, Optional
2
+ import typing
3
+ import openai
4
+ from autocoder.common import AutoCoderArgs
5
+ from autocoder.common.v2.agent.agentic_edit_tools.base_tool_resolver import BaseToolResolver
6
+ from autocoder.common.v2.agent.agentic_edit_types import UseRAGTool, ToolResult
7
+ from autocoder.common.rag_manager import RAGManager
8
+ from loguru import logger
9
+
10
+ if typing.TYPE_CHECKING:
11
+ from autocoder.common.v2.agent.agentic_edit import AgenticEdit
12
+
13
+
14
+ class UseRAGToolResolver(BaseToolResolver):
15
+ def __init__(self, agent: Optional['AgenticEdit'], tool: UseRAGTool, args: AutoCoderArgs):
16
+ super().__init__(agent, tool, args)
17
+ self.tool: UseRAGTool = tool # For type hinting
18
+ self.rag_manager = RAGManager(args)
19
+
20
+ def resolve(self) -> ToolResult:
21
+ """
22
+ 通过 OpenAI SDK 访问 RAG server 来执行查询。
23
+ """
24
+ server_name = self.tool.server_name
25
+ query = self.tool.query
26
+
27
+ logger.info(f"正在解析 UseRAGTool: Server='{server_name}', Query='{query}'")
28
+
29
+ # 检查是否有可用的 RAG 配置
30
+ if not self.rag_manager.has_configs():
31
+ error_msg = "未找到可用的 RAG 服务器配置,请确保配置文件存在并格式正确"
32
+ logger.error(error_msg)
33
+ return ToolResult(success=False, message=error_msg)
34
+
35
+ try:
36
+ # 查找指定的 RAG 配置
37
+ rag_config = None
38
+ if server_name:
39
+ # 尝试通过名称查找
40
+ rag_config = self.rag_manager.get_config_by_name(server_name)
41
+ # 如果按名称找不到,尝试直接使用 server_name 作为 URL
42
+ if not rag_config:
43
+ # 检查是否是直接的 URL
44
+ if server_name.startswith('http'):
45
+ # 使用提供的 server_name 作为 base_url
46
+ base_url = server_name
47
+ api_key = "dummy-key"
48
+ else:
49
+ error_msg = f"未找到名为 '{server_name}' 的 RAG 服务器配置\n\n{self.rag_manager.get_config_info()}"
50
+ logger.error(error_msg)
51
+ return ToolResult(success=False, message=error_msg)
52
+ else:
53
+ base_url = rag_config.server_name
54
+ api_key = rag_config.api_key or "dummy-key"
55
+ else:
56
+ # 如果没有指定 server_name,使用第一个可用的配置
57
+ rag_config = self.rag_manager.get_all_configs()[0]
58
+ base_url = rag_config.server_name
59
+ api_key = rag_config.api_key or "dummy-key"
60
+ logger.info(f"未指定服务器名称,使用默认配置: {rag_config.name}")
61
+
62
+ logger.info(f"使用 RAG 服务器: {base_url}")
63
+
64
+ # 使用 OpenAI SDK 访问 RAG server
65
+ client = openai.OpenAI(
66
+ base_url=base_url,
67
+ api_key=api_key
68
+ )
69
+
70
+ response = client.chat.completions.create(
71
+ model="default",
72
+ messages=[
73
+ {
74
+ "role": "user",
75
+ "content": query
76
+ }
77
+ ],
78
+ max_tokens=8024
79
+ )
80
+
81
+ result_content = response.choices[0].message.content
82
+ logger.info(f"RAG server 响应成功,内容长度: {len(result_content)}")
83
+
84
+ return ToolResult(success=True, message=result_content)
85
+
86
+ except Exception as e:
87
+ error_msg = f"访问 RAG server 时出错: {str(e)}"
88
+ if not self.rag_manager.has_configs():
89
+ error_msg += f"\n\n{self.rag_manager.get_config_info()}"
90
+ logger.error(error_msg)
91
+ return ToolResult(success=False, message=error_msg)
@@ -56,6 +56,10 @@ class UseMcpTool(BaseTool):
56
56
  tool_name: str
57
57
  query:str
58
58
 
59
+ class UseRAGTool(BaseTool):
60
+ server_name: str
61
+ query: str
62
+
59
63
  class ListPackageInfoTool(BaseTool):
60
64
  path: str # 源码包目录,相对路径或绝对路径
61
65
 
@@ -118,6 +122,7 @@ TOOL_MODEL_MAP: Dict[str, Type[BaseTool]] = {
118
122
  "attempt_completion": AttemptCompletionTool,
119
123
  "plan_mode_respond": PlanModeRespondTool,
120
124
  "use_mcp_tool": UseMcpTool,
125
+ "use_rag_tool": UseRAGTool,
121
126
  "list_package_info": ListPackageInfoTool,
122
127
  }
123
128