auto-coder 0.1.268__tar.gz → 0.1.269__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 (182) hide show
  1. {auto_coder-0.1.268 → auto_coder-0.1.269}/PKG-INFO +2 -2
  2. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/auto_coder.egg-info/PKG-INFO +2 -2
  3. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/auto_coder.egg-info/SOURCES.txt +2 -0
  4. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/auto_coder.egg-info/requires.txt +2 -0
  5. auto_coder-0.1.268/src/autocoder/chat_auto_coder.py → auto_coder-0.1.269/src/autocoder/auto_coder_runner.py +26 -455
  6. auto_coder-0.1.269/src/autocoder/chat_auto_coder.py +488 -0
  7. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/commands/auto_command.py +23 -33
  8. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/__init__.py +6 -2
  9. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/auto_coder_lang.py +5 -1
  10. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/auto_configure.py +41 -30
  11. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/command_templates.py +2 -3
  12. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/context_pruner.py +185 -12
  13. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/conversation_pruner.py +11 -10
  14. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/entry.py +42 -22
  15. auto_coder-0.1.269/src/autocoder/utils/auto_project_type.py +120 -0
  16. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/model_provider_selector.py +23 -23
  17. auto_coder-0.1.269/src/autocoder/version.py +1 -0
  18. auto_coder-0.1.268/src/autocoder/version.py +0 -1
  19. {auto_coder-0.1.268 → auto_coder-0.1.269}/LICENSE +0 -0
  20. {auto_coder-0.1.268 → auto_coder-0.1.269}/README.md +0 -0
  21. {auto_coder-0.1.268 → auto_coder-0.1.269}/setup.cfg +0 -0
  22. {auto_coder-0.1.268 → auto_coder-0.1.269}/setup.py +0 -0
  23. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  24. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/auto_coder.egg-info/entry_points.txt +0 -0
  25. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/auto_coder.egg-info/top_level.txt +0 -0
  26. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/__init__.py +0 -0
  27. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/__init__.py +0 -0
  28. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  29. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/auto_filegroup.py +0 -0
  30. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/auto_guess_query.py +0 -0
  31. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/auto_review_commit.py +0 -0
  32. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/auto_tool.py +0 -0
  33. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/coder.py +0 -0
  34. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/designer.py +0 -0
  35. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/planner.py +0 -0
  36. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/agent/project_reader.py +0 -0
  37. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/auto_coder.py +0 -0
  38. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/auto_coder_rag.py +0 -0
  39. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
  40. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/auto_coder_rag_mcp.py +0 -0
  41. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/auto_coder_server.py +0 -0
  42. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/benchmark.py +0 -0
  43. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/chat/__init__.py +0 -0
  44. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/chat_auto_coder_lang.py +0 -0
  45. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/command_args.py +0 -0
  46. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/commands/__init__.py +0 -0
  47. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/commands/tools.py +0 -0
  48. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/JupyterClient.py +0 -0
  49. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/ShellClient.py +0 -0
  50. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/anything2images.py +0 -0
  51. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/anything2img.py +0 -0
  52. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/audio.py +0 -0
  53. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/buildin_tokenizer.py +0 -0
  54. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/chunk_validation.py +0 -0
  55. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/cleaner.py +0 -0
  56. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_execute.py +0 -0
  57. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_generate.py +0 -0
  58. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  59. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  60. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  61. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_merge.py +0 -0
  62. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  63. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  64. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  65. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/code_modification_ranker.py +0 -0
  66. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/command_completer.py +0 -0
  67. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/command_generator.py +0 -0
  68. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/conf_import_export.py +0 -0
  69. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/conf_validator.py +0 -0
  70. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/const.py +0 -0
  71. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/files.py +0 -0
  72. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/git_utils.py +0 -0
  73. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/global_cancel.py +0 -0
  74. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/image_to_page.py +0 -0
  75. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/index_import_export.py +0 -0
  76. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/interpreter.py +0 -0
  77. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/llm_rerank.py +0 -0
  78. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/mcp_hub.py +0 -0
  79. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/mcp_server.py +0 -0
  80. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  81. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  82. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/mcp_tools.py +0 -0
  83. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/memory_manager.py +0 -0
  84. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/model_speed_test.py +0 -0
  85. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/printer.py +0 -0
  86. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/recall_validation.py +0 -0
  87. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/result_manager.py +0 -0
  88. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/screenshots.py +0 -0
  89. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/search.py +0 -0
  90. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/search_replace.py +0 -0
  91. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/shells.py +0 -0
  92. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/stats_panel.py +0 -0
  93. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/sys_prompt.py +0 -0
  94. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/text.py +0 -0
  95. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/types.py +0 -0
  96. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  97. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/data/byzerllm.md +0 -0
  98. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/data/tokenizer.json +0 -0
  99. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/db/__init__.py +0 -0
  100. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/db/store.py +0 -0
  101. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/dispacher/__init__.py +0 -0
  102. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/dispacher/actions/__init__.py +0 -0
  103. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/dispacher/actions/action.py +0 -0
  104. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/dispacher/actions/copilot.py +0 -0
  105. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  106. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  107. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  108. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/__init__.py +0 -0
  109. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/filter/__init__.py +0 -0
  110. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/filter/normal_filter.py +0 -0
  111. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/filter/quick_filter.py +0 -0
  112. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/for_command.py +0 -0
  113. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/index.py +0 -0
  114. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/symbols_utils.py +0 -0
  115. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/index/types.py +0 -0
  116. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/lang.py +0 -0
  117. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/models.py +0 -0
  118. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/privacy/__init__.py +0 -0
  119. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/privacy/model_filter.py +0 -0
  120. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/pyproject/__init__.py +0 -0
  121. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/__init__.py +0 -0
  122. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/api_server.py +0 -0
  123. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/cache/__init__.py +0 -0
  124. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/cache/base_cache.py +0 -0
  125. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  126. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  127. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/cache/simple_cache.py +0 -0
  128. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/doc_filter.py +0 -0
  129. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/document_retriever.py +0 -0
  130. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/llm_wrapper.py +0 -0
  131. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/loaders/__init__.py +0 -0
  132. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  133. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  134. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  135. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  136. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/long_context_rag.py +0 -0
  137. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/rag_config.py +0 -0
  138. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/rag_entry.py +0 -0
  139. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/raw_rag.py +0 -0
  140. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/relevant_utils.py +0 -0
  141. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/simple_directory_reader.py +0 -0
  142. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/simple_rag.py +0 -0
  143. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/stream_event/__init__.py +0 -0
  144. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  145. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/stream_event/types.py +0 -0
  146. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/token_checker.py +0 -0
  147. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/token_counter.py +0 -0
  148. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/token_limiter.py +0 -0
  149. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/types.py +0 -0
  150. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/utils.py +0 -0
  151. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/rag/variable_holder.py +0 -0
  152. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/regexproject/__init__.py +0 -0
  153. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/suffixproject/__init__.py +0 -0
  154. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/tsproject/__init__.py +0 -0
  155. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/__init__.py +0 -0
  156. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/_markitdown.py +0 -0
  157. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  158. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  159. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  160. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/conversation_store.py +0 -0
  161. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  162. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/llms.py +0 -0
  163. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/log_capture.py +0 -0
  164. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/multi_turn.py +0 -0
  165. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/operate_config_api.py +0 -0
  166. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/print_table.py +0 -0
  167. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/project_structure.py +0 -0
  168. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/queue_communicate.py +0 -0
  169. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/request_event_queue.py +0 -0
  170. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/request_queue.py +0 -0
  171. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/rest.py +0 -0
  172. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/tests.py +0 -0
  173. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/thread_utils.py +0 -0
  174. {auto_coder-0.1.268 → auto_coder-0.1.269}/src/autocoder/utils/types.py +0 -0
  175. {auto_coder-0.1.268 → auto_coder-0.1.269}/tests/test_action_regex_project.py +0 -0
  176. {auto_coder-0.1.268 → auto_coder-0.1.269}/tests/test_chat_auto_coder.py +0 -0
  177. {auto_coder-0.1.268 → auto_coder-0.1.269}/tests/test_code_auto_merge_editblock.py +0 -0
  178. {auto_coder-0.1.268 → auto_coder-0.1.269}/tests/test_command_completer.py +0 -0
  179. {auto_coder-0.1.268 → auto_coder-0.1.269}/tests/test_planner.py +0 -0
  180. {auto_coder-0.1.268 → auto_coder-0.1.269}/tests/test_privacy.py +0 -0
  181. {auto_coder-0.1.268 → auto_coder-0.1.269}/tests/test_queue_communicate.py +0 -0
  182. {auto_coder-0.1.268 → auto_coder-0.1.269}/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.268
3
+ Version: 0.1.269
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -58,7 +58,7 @@ Requires-Dist: pydub
58
58
  Requires-Dist: youtube-transcript-api
59
59
  Requires-Dist: SpeechRecognition
60
60
  Requires-Dist: pathvalidate
61
- Requires-Dist: mcp
61
+ Requires-Dist: mcp; python_version >= "3.10"
62
62
 
63
63
  <p align="center">
64
64
  <picture>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.268
3
+ Version: 0.1.269
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -58,7 +58,7 @@ Requires-Dist: pydub
58
58
  Requires-Dist: youtube-transcript-api
59
59
  Requires-Dist: SpeechRecognition
60
60
  Requires-Dist: pathvalidate
61
- Requires-Dist: mcp
61
+ Requires-Dist: mcp; python_version >= "3.10"
62
62
 
63
63
  <p align="center">
64
64
  <picture>
@@ -12,6 +12,7 @@ src/autocoder/auto_coder.py
12
12
  src/autocoder/auto_coder_rag.py
13
13
  src/autocoder/auto_coder_rag_client_mcp.py
14
14
  src/autocoder/auto_coder_rag_mcp.py
15
+ src/autocoder/auto_coder_runner.py
15
16
  src/autocoder/auto_coder_server.py
16
17
  src/autocoder/benchmark.py
17
18
  src/autocoder/chat_auto_coder.py
@@ -148,6 +149,7 @@ src/autocoder/suffixproject/__init__.py
148
149
  src/autocoder/tsproject/__init__.py
149
150
  src/autocoder/utils/__init__.py
150
151
  src/autocoder/utils/_markitdown.py
152
+ src/autocoder/utils/auto_project_type.py
151
153
  src/autocoder/utils/conversation_store.py
152
154
  src/autocoder/utils/llm_client_interceptors.py
153
155
  src/autocoder/utils/llms.py
@@ -48,4 +48,6 @@ pydub
48
48
  youtube-transcript-api
49
49
  SpeechRecognition
50
50
  pathvalidate
51
+
52
+ [:python_version >= "3.10"]
51
53
  mcp
@@ -13,20 +13,11 @@ import time
13
13
  import hashlib
14
14
  from contextlib import contextmanager
15
15
  from typing import List, Dict, Any, Optional
16
- from prompt_toolkit import PromptSession
17
- from prompt_toolkit.history import InMemoryHistory
18
- from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
19
- from prompt_toolkit.styles import Style
20
- from prompt_toolkit.formatted_text import FormattedText
21
- from prompt_toolkit.key_binding import KeyBindings
22
- from prompt_toolkit.completion import WordCompleter, Completer, Completion
23
- from prompt_toolkit.shortcuts import confirm
24
16
  from autocoder.common import AutoCoderArgs
25
- from pydantic import Field, BaseModel
17
+ from pydantic import BaseModel
26
18
  from autocoder.common.result_manager import ResultManager
27
19
  from autocoder.version import __version__
28
20
  from autocoder.auto_coder import main as auto_coder_main
29
- from autocoder.common.command_completer import CommandTextParser
30
21
  from autocoder.utils import get_last_yaml_file
31
22
  from autocoder.index.symbols_utils import (
32
23
  extract_symbols,
@@ -45,7 +36,6 @@ from byzerllm.utils.nontext import Image
45
36
  import git
46
37
  from autocoder.common import git_utils
47
38
  from autocoder.chat_auto_coder_lang import get_message
48
- from autocoder.utils import operate_config_api
49
39
  from autocoder.agent.auto_guess_query import AutoGuessQuery
50
40
  from autocoder.common.mcp_server import get_mcp_server, McpRequest, McpInstallRequest, McpRemoveRequest, McpListRequest, McpListRunningRequest, McpRefreshRequest
51
41
  import byzerllm
@@ -56,7 +46,7 @@ import shlex
56
46
  from autocoder.utils.llms import get_single_llm
57
47
  import pkg_resources
58
48
  from autocoder.common.printer import Printer
59
- from autocoder.utils.thread_utils import run_in_thread,run_in_raw_thread
49
+ from autocoder.utils.thread_utils import run_in_raw_thread
60
50
  from autocoder.common.command_completer import CommandCompleter,FileSystemModel as CCFileSystemModel,MemoryConfig as CCMemoryModel
61
51
  from autocoder.common.conf_validator import ConfigValidator
62
52
 
@@ -65,39 +55,14 @@ class SymbolItem(BaseModel):
65
55
  symbol_type: SymbolType
66
56
  file_name: str
67
57
 
58
+ class InitializeSystemRequest(BaseModel):
59
+ product_mode: str
60
+ skip_provider_selection: bool
61
+ debug: bool
62
+ quick: bool
63
+ lite: bool
64
+ pro: bool
68
65
 
69
- def parse_arguments():
70
- import argparse
71
-
72
- parser = argparse.ArgumentParser(description="Chat Auto Coder")
73
- parser.add_argument("--debug", action="store_true",
74
- help="Enable debug mode")
75
- parser.add_argument(
76
- "--quick",
77
- action="store_true",
78
- help="Enter the auto-coder.chat without initializing the system",
79
- )
80
-
81
- parser.add_argument(
82
- "--skip_provider_selection",
83
- action="store_true",
84
- help="Skip the provider selection",
85
- )
86
-
87
- parser.add_argument(
88
- "--product_mode",
89
- type=str,
90
- default="lite",
91
- help="The mode of the auto-coder.chat, lite/pro default is lite",
92
- )
93
-
94
- parser.add_argument("--lite", action="store_true", help="Lite mode")
95
- parser.add_argument("--pro", action="store_true", help="Pro mode")
96
-
97
- return parser.parse_args()
98
-
99
-
100
- ARGS = None
101
66
 
102
67
  if platform.system() == "Windows":
103
68
  from colorama import init
@@ -150,67 +115,17 @@ commands = [
150
115
  "/exclude_dirs",
151
116
  ]
152
117
 
153
-
154
- def show_help():
155
- print(f"\033[1m{get_message('official_doc')}\033[0m")
156
- print()
157
- print(f"\033[1m{get_message('supported_commands')}\033[0m")
158
- print()
159
- print(
160
- f" \033[94m{get_message('commands')}\033[0m - \033[93m{get_message('description')}\033[0m"
161
- )
162
- print(
163
- f" \033[94m/add_files\033[0m \033[93m<file1> <file2> ...\033[0m - \033[92m{get_message('add_files_desc')}\033[0m"
164
- )
165
- print(
166
- f" \033[94m/remove_files\033[0m \033[93m<file1>,<file2> ...\033[0m - \033[92m{get_message('remove_files_desc')}\033[0m"
167
- )
168
- print(
169
- f" \033[94m/chat\033[0m \033[93m<query>\033[0m - \033[92m{get_message('chat_desc')}\033[0m"
170
- )
171
- print(
172
- f" \033[94m/coding\033[0m \033[93m<query>\033[0m - \033[92m{get_message('coding_desc')}\033[0m"
173
- )
174
- print(
175
- f" \033[94m/ask\033[0m \033[93m<query>\033[0m - \033[92m{get_message('ask_desc')}\033[0m"
176
- )
177
- print(
178
- f" \033[94m/summon\033[0m \033[93m<query>\033[0m - \033[92m{get_message('summon_desc')}\033[0m"
179
- )
180
- print(
181
- f" \033[94m/revert\033[0m - \033[92m{get_message('revert_desc')}\033[0m")
182
- print(
183
- f" \033[94m/commit\033[0m - \033[92m{get_message('commit_desc')}\033[0m")
184
- print(
185
- f" \033[94m/conf\033[0m \033[93m<key>:<value>\033[0m - \033[92m{get_message('conf_desc')}\033[0m"
186
- )
187
- print(
188
- f" \033[94m/index/query\033[0m \033[93m<args>\033[0m - \033[92m{get_message('index_query_desc')}\033[0m"
189
- )
190
- print(
191
- f" \033[94m/index/build\033[0m - \033[92m{get_message('index_build_desc')}\033[0m"
192
- )
193
- print(
194
- f" \033[94m/list_files\033[0m - \033[92m{get_message('list_files_desc')}\033[0m"
195
- )
196
- print(
197
- f" \033[94m/help\033[0m - \033[92m{get_message('help_desc')}\033[0m")
198
- print(
199
- f" \033[94m/exclude_dirs\033[0m \033[93m<dir1>,<dir2> ...\033[0m - \033[92m{get_message('exclude_dirs_desc')}\033[0m"
200
- )
201
- print(
202
- f" \033[94m/shell\033[0m \033[93m<command>\033[0m - \033[92m{get_message('shell_desc')}\033[0m"
203
- )
204
- print(
205
- f" \033[94m/voice_input\033[0m - \033[92m{get_message('voice_input_desc')}\033[0m"
206
- )
207
- print(
208
- f" \033[94m/mode\033[0m - \033[92m{get_message('mode_desc')}\033[0m")
209
- print(f" \033[94m/lib\033[0m - \033[92m{get_message('lib_desc')}\033[0m")
210
- print(f" \033[94m/models\033[0m - \033[92m{get_message('models_desc')}\033[0m")
211
- print(
212
- f" \033[94m/exit\033[0m - \033[92m{get_message('exit_desc')}\033[0m")
213
- print()
118
+ def load_tokenizer():
119
+ from autocoder.rag.variable_holder import VariableHolder
120
+ from tokenizers import Tokenizer
121
+ try:
122
+ tokenizer_path = pkg_resources.resource_filename(
123
+ "autocoder", "data/tokenizer.json"
124
+ )
125
+ VariableHolder.TOKENIZER_PATH = tokenizer_path
126
+ VariableHolder.TOKENIZER_MODEL = Tokenizer.from_file(tokenizer_path)
127
+ except FileNotFoundError:
128
+ tokenizer_path = None
214
129
 
215
130
 
216
131
  def configure_project_type():
@@ -267,7 +182,7 @@ def configure_project_type():
267
182
  return project_type
268
183
 
269
184
 
270
- def initialize_system(args):
185
+ def initialize_system(args:InitializeSystemRequest):
271
186
  from autocoder.utils.model_provider_selector import ModelProviderSelector
272
187
  from autocoder import models as models_module
273
188
  print(f"\n\033[1;34m{get_message('initializing')}\033[0m")
@@ -649,7 +564,7 @@ def save_memory():
649
564
  load_memory()
650
565
 
651
566
 
652
- def load_memory():
567
+ def load_memory():
653
568
  global memory
654
569
  memory_path = os.path.join(base_persist_dir, "memory.json")
655
570
  if os.path.exists(memory_path):
@@ -657,6 +572,10 @@ def load_memory():
657
572
  memory = json.load(f)
658
573
  completer.update_current_files(memory["current_files"]["files"])
659
574
 
575
+ def get_memory():
576
+ global memory
577
+ return memory
578
+
660
579
 
661
580
  completer = CommandCompleter(commands,
662
581
  file_system_model=CCFileSystemModel(project_root=project_root,
@@ -2714,351 +2633,3 @@ def auto_command(params,query: str):
2714
2633
  border_style="blue",
2715
2634
  padding=(1, 2)
2716
2635
  ))
2717
-
2718
-
2719
- def main():
2720
- from autocoder.rag.variable_holder import VariableHolder
2721
- from tokenizers import Tokenizer
2722
- try:
2723
- tokenizer_path = pkg_resources.resource_filename(
2724
- "autocoder", "data/tokenizer.json"
2725
- )
2726
- VariableHolder.TOKENIZER_PATH = tokenizer_path
2727
- VariableHolder.TOKENIZER_MODEL = Tokenizer.from_file(tokenizer_path)
2728
- except FileNotFoundError:
2729
- tokenizer_path = None
2730
-
2731
- ARGS = parse_arguments()
2732
-
2733
- if ARGS.lite:
2734
- ARGS.product_mode = "lite"
2735
-
2736
- if ARGS.pro:
2737
- ARGS.product_mode = "pro"
2738
-
2739
- if not ARGS.quick:
2740
- initialize_system(ARGS)
2741
-
2742
- load_memory()
2743
-
2744
- configure(f"product_mode:{ARGS.product_mode}")
2745
-
2746
- MODES = {
2747
- "normal": "normal",
2748
- "auto_detect": "nature language auto detect",
2749
- "voice_input": "voice input",
2750
- }
2751
-
2752
- kb = KeyBindings()
2753
-
2754
- @kb.add("c-c")
2755
- def _(event):
2756
- event.app.exit()
2757
-
2758
- @kb.add("tab")
2759
- def _(event):
2760
- b = event.current_buffer
2761
- if b.complete_state:
2762
- b.complete_next()
2763
- else:
2764
- b.start_completion(select_first=False)
2765
-
2766
- @kb.add("c-g")
2767
- def _(event):
2768
- transcription = voice_input()
2769
- if transcription:
2770
- event.app.current_buffer.insert_text(transcription)
2771
-
2772
- @kb.add("c-k")
2773
- def _(event):
2774
- if "mode" not in memory:
2775
- memory["mode"] = "auto_detect"
2776
-
2777
- current_mode = memory["mode"]
2778
- if current_mode == "normal":
2779
- memory["mode"] = "auto_detect"
2780
- elif current_mode == "auto_detect":
2781
- memory["mode"] = "voice_input"
2782
- else: # voice_input
2783
- memory["mode"] = "normal"
2784
-
2785
- event.app.invalidate()
2786
-
2787
- @kb.add("c-n")
2788
- def _(event):
2789
- if "human_as_model" not in memory["conf"]:
2790
- memory["conf"]["human_as_model"] = "false"
2791
-
2792
- current_status = memory["conf"]["human_as_model"]
2793
- new_status = "true" if current_status == "false" else "false"
2794
- configure(f"human_as_model:{new_status}", skip_print=True)
2795
- event.app.invalidate()
2796
-
2797
- def get_bottom_toolbar():
2798
- if "mode" not in memory:
2799
- memory["mode"] = "auto_detect"
2800
- mode = memory["mode"]
2801
- human_as_model = memory["conf"].get("human_as_model", "false")
2802
- if mode not in MODES:
2803
- mode = "auto_detect"
2804
- pwd = os.getcwd()
2805
- pwd_parts = pwd.split(os.sep)
2806
- if len(pwd_parts) > 3:
2807
- pwd = os.sep.join(pwd_parts[-3:])
2808
- return f"Current Dir: {pwd} \nMode: {MODES[mode]} | Human as Model: {human_as_model} "
2809
-
2810
- session = PromptSession(
2811
- history=InMemoryHistory(),
2812
- auto_suggest=AutoSuggestFromHistory(),
2813
- enable_history_search=False,
2814
- completer=completer,
2815
- complete_while_typing=True,
2816
- key_bindings=kb,
2817
- bottom_toolbar=get_bottom_toolbar,
2818
- )
2819
- print(
2820
- f"""
2821
- \033[1;32m ____ _ _ _ _ ____ _
2822
- / ___| |__ __ _| |_ / \ _ _| |_ ___ / ___|___ __| | ___ _ __
2823
- | | | '_ \ / _` | __|____ / _ \| | | | __/ _ \ _____| | / _ \ / _` |/ _ \ '__|
2824
- | |___| | | | (_| | ||_____/ ___ \ |_| | || (_) |_____| |__| (_) | (_| | __/ |
2825
- \____|_| |_|\__,_|\__| /_/ \_\__,_|\__\___/ \____\___/ \__,_|\___|_|
2826
- v{__version__}
2827
- \033[0m"""
2828
- )
2829
- print("\033[1;34mType /help to see available commands.\033[0m\n")
2830
- show_help()
2831
-
2832
- style = Style.from_dict(
2833
- {
2834
- "username": "#884444",
2835
- "at": "#00aa00",
2836
- "colon": "#0000aa",
2837
- "pound": "#00aa00",
2838
- "host": "#00ffff bg:#444400",
2839
- }
2840
- )
2841
-
2842
- new_prompt = ""
2843
-
2844
- while True:
2845
- try:
2846
- prompt_message = [
2847
- ("class:username", "coding"),
2848
- ("class:at", "@"),
2849
- ("class:host", "auto-coder.chat"),
2850
- ("class:colon", ":"),
2851
- ("class:path", "~"),
2852
- ("class:dollar", "$ "),
2853
- ]
2854
-
2855
- if new_prompt:
2856
- user_input = session.prompt(
2857
- FormattedText(prompt_message), default=new_prompt, style=style
2858
- )
2859
- else:
2860
- user_input = session.prompt(
2861
- FormattedText(prompt_message), style=style)
2862
- new_prompt = ""
2863
-
2864
- if "mode" not in memory:
2865
- memory["mode"] = "auto_detect"
2866
-
2867
- # 处理 user_input 的空格
2868
- if user_input:
2869
- temp_user_input = user_input.lstrip() # 去掉左侧空格
2870
- if temp_user_input.startswith('/'):
2871
- user_input = temp_user_input
2872
-
2873
- if (
2874
- memory["mode"] == "auto_detect"
2875
- and user_input
2876
- and not user_input.startswith("/")
2877
- ):
2878
- auto_command(ARGS,user_input)
2879
-
2880
- elif memory["mode"] == "voice_input" and not user_input.startswith("/"):
2881
- text = voice_input()
2882
- new_prompt = "/coding " + text
2883
-
2884
- elif user_input.startswith("/voice_input"):
2885
- text = voice_input()
2886
- new_prompt = "/coding " + text
2887
-
2888
- elif user_input.startswith("/add_files"):
2889
- args = user_input[len("/add_files"):].strip().split()
2890
- add_files(args)
2891
- elif user_input.startswith("/remove_files"):
2892
- file_names = user_input[len(
2893
- "/remove_files"):].strip().split(",")
2894
- remove_files(file_names)
2895
- elif user_input.startswith("/index/query"):
2896
- query = user_input[len("/index/query"):].strip()
2897
- index_query(query)
2898
-
2899
- elif user_input.startswith("/index/build"):
2900
- index_build()
2901
-
2902
- elif user_input.startswith("/index/export"):
2903
- export_path = user_input[len("/index/export"):].strip()
2904
- index_export(export_path)
2905
-
2906
- elif user_input.startswith("/index/import"):
2907
- import_path = user_input[len("/index/import"):].strip()
2908
- index_import(import_path)
2909
-
2910
- elif user_input.startswith("/list_files"):
2911
- list_files()
2912
-
2913
- elif user_input.startswith("/models"):
2914
- query = user_input[len("/models"):].strip()
2915
- if not query:
2916
- print("Please enter your query.")
2917
- else:
2918
- manage_models(query)
2919
-
2920
- elif user_input.startswith("/mode"):
2921
- conf = user_input[len("/mode"):].strip()
2922
- if not conf:
2923
- print(memory["mode"])
2924
- else:
2925
- memory["mode"] = conf
2926
-
2927
- elif user_input.startswith("/conf/export"):
2928
- from autocoder.common.conf_import_export import export_conf
2929
- export_path = user_input[len("/conf/export"):].strip()
2930
- export_conf(os.getcwd(), export_path)
2931
-
2932
- elif user_input.startswith("/conf/import"):
2933
- from autocoder.common.conf_import_export import import_conf
2934
- import_path = user_input[len("/conf/import"):].strip()
2935
- import_conf(os.getcwd(), import_path)
2936
-
2937
- elif user_input.startswith("/conf"):
2938
- conf = user_input[len("/conf"):].strip()
2939
- if not conf:
2940
- print_conf(memory["conf"])
2941
- else:
2942
- configure(conf)
2943
- elif user_input.startswith("/revert"):
2944
- revert()
2945
- elif user_input.startswith("/commit"):
2946
- query = user_input[len("/commit"):].strip()
2947
- commit(query)
2948
- elif user_input.startswith("/help"):
2949
- query = user_input[len("/help"):].strip()
2950
- if not query:
2951
- show_help()
2952
- else:
2953
- help(query)
2954
-
2955
- elif user_input.startswith("/exclude_dirs"):
2956
- dir_names = user_input[len(
2957
- "/exclude_dirs"):].strip().split(",")
2958
- exclude_dirs(dir_names)
2959
-
2960
- elif user_input.startswith("/exclude_files"):
2961
- query = user_input[len("/exclude_files"):].strip()
2962
- exclude_files(query)
2963
-
2964
- elif user_input.startswith("/ask"):
2965
- query = user_input[len("/ask"):].strip()
2966
- if not query:
2967
- print("Please enter your question.")
2968
- else:
2969
- ask(query)
2970
-
2971
- elif user_input.startswith("/exit"):
2972
- raise EOFError()
2973
-
2974
- elif user_input.startswith("/coding"):
2975
- query = user_input[len("/coding"):].strip()
2976
- if not query:
2977
- print("\033[91mPlease enter your request.\033[0m")
2978
- continue
2979
- coding(query)
2980
- elif user_input.startswith("/chat"):
2981
- query = user_input[len("/chat"):].strip()
2982
- if not query:
2983
- print("\033[91mPlease enter your request.\033[0m")
2984
- else:
2985
- chat(query)
2986
-
2987
- elif user_input.startswith("/design"):
2988
- query = user_input[len("/design"):].strip()
2989
- if not query:
2990
- print("\033[91mPlease enter your design request.\033[0m")
2991
- else:
2992
- design(query)
2993
-
2994
- elif user_input.startswith("/summon"):
2995
- query = user_input[len("/summon"):].strip()
2996
- if not query:
2997
- print("\033[91mPlease enter your request.\033[0m")
2998
- else:
2999
- summon(query)
3000
-
3001
- elif user_input.startswith("/lib"):
3002
- args = user_input[len("/lib"):].strip().split()
3003
- lib_command(args)
3004
-
3005
- elif user_input.startswith("/mcp"):
3006
- query = user_input[len("/mcp"):].strip()
3007
- if not query:
3008
- print("Please enter your query.")
3009
- else:
3010
- mcp(query)
3011
-
3012
- elif user_input.startswith("/auto"):
3013
- query = user_input[len("/auto"):].strip()
3014
- auto_command(ARGS,query)
3015
- elif user_input.startswith("/debug"):
3016
- code = user_input[len("/debug"):].strip()
3017
- try:
3018
- result = eval(code)
3019
- print(f"Debug result: {result}")
3020
- except Exception as e:
3021
- print(f"Debug error: {str(e)}")
3022
-
3023
- # elif user_input.startswith("/shell"):
3024
- else:
3025
- command = user_input
3026
- if user_input.startswith("/shell"):
3027
- command = user_input[len("/shell"):].strip()
3028
- if not command:
3029
- print("Please enter a shell command to execute.")
3030
- else:
3031
- if command.startswith("/chat"):
3032
- command = command[len("/chat"):].strip()
3033
- gen_and_exec_shell_command(command)
3034
- else:
3035
- execute_shell_command(command)
3036
-
3037
- except KeyboardInterrupt:
3038
- continue
3039
- except EOFError:
3040
- try:
3041
- save_memory()
3042
- try:
3043
- if get_mcp_server():
3044
- get_mcp_server().stop()
3045
- except Exception as e:
3046
- pass
3047
- except Exception as e:
3048
- print(
3049
- f"\033[91mAn error occurred while saving memory:\033[0m \033[93m{type(e).__name__}\033[0m - {str(e)}"
3050
- )
3051
- print("\n\033[93mExiting Chat Auto Coder...\033[0m")
3052
- break
3053
- except Exception as e:
3054
- print(
3055
- f"\033[91mAn error occurred:\033[0m \033[93m{type(e).__name__}\033[0m - {str(e)}"
3056
- )
3057
- if ARGS and ARGS.debug:
3058
- import traceback
3059
-
3060
- traceback.print_exc()
3061
-
3062
-
3063
- if __name__ == "__main__":
3064
- main()