auto-coder 0.1.400__py3-none-any.whl → 2.0.0__py3-none-any.whl

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 (579) hide show
  1. auto_coder-2.0.0.dist-info/LICENSE +158 -0
  2. auto_coder-2.0.0.dist-info/METADATA +558 -0
  3. auto_coder-2.0.0.dist-info/RECORD +795 -0
  4. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
  5. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
  6. autocoder/__init__.py +31 -0
  7. autocoder/agent/auto_filegroup.py +32 -13
  8. autocoder/agent/auto_learn_from_commit.py +9 -1
  9. autocoder/agent/base_agentic/__init__.py +3 -0
  10. autocoder/agent/base_agentic/agent_hub.py +1 -1
  11. autocoder/agent/base_agentic/base_agent.py +235 -136
  12. autocoder/agent/base_agentic/default_tools.py +119 -118
  13. autocoder/agent/base_agentic/test_base_agent.py +1 -1
  14. autocoder/agent/base_agentic/tool_registry.py +32 -20
  15. autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +25 -4
  16. autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
  17. autocoder/agent/base_agentic/types.py +42 -0
  18. autocoder/agent/entry_command_agent/chat.py +73 -59
  19. autocoder/auto_coder.py +31 -40
  20. autocoder/auto_coder_rag.py +11 -1084
  21. autocoder/auto_coder_runner.py +1029 -2310
  22. autocoder/auto_coder_terminal.py +26 -0
  23. autocoder/auto_coder_terminal_v3.py +190 -0
  24. autocoder/chat/conf_command.py +224 -124
  25. autocoder/chat/models_command.py +361 -299
  26. autocoder/chat/rules_command.py +79 -31
  27. autocoder/chat_auto_coder.py +1021 -372
  28. autocoder/chat_auto_coder_lang.py +23 -732
  29. autocoder/commands/auto_command.py +26 -9
  30. autocoder/commands/auto_web.py +1 -1
  31. autocoder/commands/tools.py +44 -44
  32. autocoder/common/__init__.py +150 -128
  33. autocoder/common/ac_style_command_parser/__init__.py +39 -2
  34. autocoder/common/ac_style_command_parser/config.py +422 -0
  35. autocoder/common/ac_style_command_parser/parser.py +292 -78
  36. autocoder/common/ac_style_command_parser/test_parser.py +241 -16
  37. autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
  38. autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
  39. autocoder/common/action_yml_file_manager.py +25 -13
  40. autocoder/common/agent_events/__init__.py +52 -0
  41. autocoder/common/agent_events/agent_event_emitter.py +193 -0
  42. autocoder/common/agent_events/event_factory.py +177 -0
  43. autocoder/common/agent_events/examples.py +307 -0
  44. autocoder/common/agent_events/types.py +113 -0
  45. autocoder/common/agent_events/utils.py +68 -0
  46. autocoder/common/agent_hooks/__init__.py +44 -0
  47. autocoder/common/agent_hooks/examples.py +582 -0
  48. autocoder/common/agent_hooks/hook_executor.py +217 -0
  49. autocoder/common/agent_hooks/hook_manager.py +288 -0
  50. autocoder/common/agent_hooks/types.py +133 -0
  51. autocoder/common/agent_hooks/utils.py +99 -0
  52. autocoder/common/agent_query_queue/queue_executor.py +324 -0
  53. autocoder/common/agent_query_queue/queue_manager.py +325 -0
  54. autocoder/common/agents/__init__.py +11 -0
  55. autocoder/common/agents/agent_manager.py +323 -0
  56. autocoder/common/agents/agent_parser.py +189 -0
  57. autocoder/common/agents/example_usage.py +344 -0
  58. autocoder/common/agents/integration_example.py +330 -0
  59. autocoder/common/agents/test_agent_parser.py +545 -0
  60. autocoder/common/async_utils.py +101 -0
  61. autocoder/common/auto_coder_lang.py +23 -972
  62. autocoder/common/autocoderargs_parser/__init__.py +14 -0
  63. autocoder/common/autocoderargs_parser/parser.py +184 -0
  64. autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
  65. autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
  66. autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
  67. autocoder/common/autocoderargs_parser/token_parser.py +290 -0
  68. autocoder/common/buildin_tokenizer.py +2 -4
  69. autocoder/common/code_auto_generate.py +149 -74
  70. autocoder/common/code_auto_generate_diff.py +163 -70
  71. autocoder/common/code_auto_generate_editblock.py +179 -89
  72. autocoder/common/code_auto_generate_strict_diff.py +167 -72
  73. autocoder/common/code_auto_merge_editblock.py +13 -6
  74. autocoder/common/code_modification_ranker.py +1 -1
  75. autocoder/common/command_completer.py +3 -3
  76. autocoder/common/command_file_manager/manager.py +183 -47
  77. autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
  78. autocoder/common/command_templates.py +1 -1
  79. autocoder/common/conf_utils.py +2 -4
  80. autocoder/common/conversations/config.py +11 -3
  81. autocoder/common/conversations/get_conversation_manager.py +100 -2
  82. autocoder/common/conversations/llm_stats_models.py +264 -0
  83. autocoder/common/conversations/manager.py +112 -28
  84. autocoder/common/conversations/models.py +16 -2
  85. autocoder/common/conversations/storage/index_manager.py +134 -10
  86. autocoder/common/core_config/__init__.py +63 -0
  87. autocoder/common/core_config/agentic_mode_manager.py +109 -0
  88. autocoder/common/core_config/base_manager.py +123 -0
  89. autocoder/common/core_config/compatibility.py +151 -0
  90. autocoder/common/core_config/config_manager.py +156 -0
  91. autocoder/common/core_config/conversation_manager.py +31 -0
  92. autocoder/common/core_config/exclude_manager.py +72 -0
  93. autocoder/common/core_config/file_manager.py +177 -0
  94. autocoder/common/core_config/human_as_model_manager.py +129 -0
  95. autocoder/common/core_config/lib_manager.py +54 -0
  96. autocoder/common/core_config/main_manager.py +81 -0
  97. autocoder/common/core_config/mode_manager.py +126 -0
  98. autocoder/common/core_config/models.py +70 -0
  99. autocoder/common/core_config/test_memory_manager.py +1056 -0
  100. autocoder/common/env_manager.py +282 -0
  101. autocoder/common/env_manager_usage_example.py +211 -0
  102. autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
  103. autocoder/common/file_checkpoint/manager.py +264 -48
  104. autocoder/common/file_checkpoint/test_backup.py +1 -18
  105. autocoder/common/file_checkpoint/test_manager.py +270 -1
  106. autocoder/common/file_checkpoint/test_store.py +1 -17
  107. autocoder/common/file_handler/__init__.py +23 -0
  108. autocoder/common/file_handler/active_context_handler.py +159 -0
  109. autocoder/common/file_handler/add_files_handler.py +409 -0
  110. autocoder/common/file_handler/chat_handler.py +180 -0
  111. autocoder/common/file_handler/coding_handler.py +401 -0
  112. autocoder/common/file_handler/commit_handler.py +200 -0
  113. autocoder/common/file_handler/lib_handler.py +156 -0
  114. autocoder/common/file_handler/list_files_handler.py +111 -0
  115. autocoder/common/file_handler/mcp_handler.py +268 -0
  116. autocoder/common/file_handler/models_handler.py +493 -0
  117. autocoder/common/file_handler/remove_files_handler.py +172 -0
  118. autocoder/common/file_monitor/test_file_monitor.py +307 -0
  119. autocoder/common/git_utils.py +51 -10
  120. autocoder/common/global_cancel.py +15 -6
  121. autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
  122. autocoder/common/international/__init__.py +31 -0
  123. autocoder/common/international/demo_international.py +92 -0
  124. autocoder/common/international/message_manager.py +157 -0
  125. autocoder/common/international/messages/__init__.py +56 -0
  126. autocoder/common/international/messages/async_command_messages.py +507 -0
  127. autocoder/common/international/messages/auto_coder_messages.py +2208 -0
  128. autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
  129. autocoder/common/international/messages/command_help_messages.py +986 -0
  130. autocoder/common/international/messages/conversation_command_messages.py +191 -0
  131. autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
  132. autocoder/common/international/messages/queue_command_messages.py +751 -0
  133. autocoder/common/international/messages/rules_command_messages.py +77 -0
  134. autocoder/common/international/messages/sdk_messages.py +1707 -0
  135. autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
  136. autocoder/common/international/messages/tool_display_messages.py +1212 -0
  137. autocoder/common/international/messages/workflow_exception_messages.py +473 -0
  138. autocoder/common/international/test_international.py +612 -0
  139. autocoder/common/linter_core/__init__.py +28 -0
  140. autocoder/common/linter_core/base_linter.py +61 -0
  141. autocoder/common/linter_core/config_loader.py +271 -0
  142. autocoder/common/linter_core/formatters/__init__.py +0 -0
  143. autocoder/common/linter_core/formatters/base_formatter.py +38 -0
  144. autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
  145. autocoder/common/linter_core/linter.py +166 -0
  146. autocoder/common/linter_core/linter_factory.py +216 -0
  147. autocoder/common/linter_core/linter_manager.py +333 -0
  148. autocoder/common/linter_core/linters/__init__.py +9 -0
  149. autocoder/common/linter_core/linters/java_linter.py +342 -0
  150. autocoder/common/linter_core/linters/python_linter.py +115 -0
  151. autocoder/common/linter_core/linters/typescript_linter.py +119 -0
  152. autocoder/common/linter_core/models/__init__.py +7 -0
  153. autocoder/common/linter_core/models/lint_result.py +91 -0
  154. autocoder/common/linter_core/models.py +33 -0
  155. autocoder/common/linter_core/tests/__init__.py +3 -0
  156. autocoder/common/linter_core/tests/test_config_loader.py +323 -0
  157. autocoder/common/linter_core/tests/test_config_loading.py +308 -0
  158. autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
  159. autocoder/common/linter_core/tests/test_formatters.py +147 -0
  160. autocoder/common/linter_core/tests/test_integration.py +317 -0
  161. autocoder/common/linter_core/tests/test_java_linter.py +496 -0
  162. autocoder/common/linter_core/tests/test_linters.py +265 -0
  163. autocoder/common/linter_core/tests/test_models.py +81 -0
  164. autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
  165. autocoder/common/linter_core/tests/verify_fixes.py +183 -0
  166. autocoder/common/llm_friendly_package/__init__.py +31 -0
  167. autocoder/common/llm_friendly_package/base_manager.py +102 -0
  168. autocoder/common/llm_friendly_package/docs_manager.py +121 -0
  169. autocoder/common/llm_friendly_package/library_manager.py +171 -0
  170. autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
  171. autocoder/common/llm_friendly_package/models.py +40 -0
  172. autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
  173. autocoder/common/llms/__init__.py +15 -0
  174. autocoder/common/llms/demo_error_handling.py +85 -0
  175. autocoder/common/llms/factory.py +142 -0
  176. autocoder/common/llms/manager.py +264 -0
  177. autocoder/common/llms/pricing.py +121 -0
  178. autocoder/common/llms/registry.py +288 -0
  179. autocoder/common/llms/schema.py +77 -0
  180. autocoder/common/llms/simple_demo.py +45 -0
  181. autocoder/common/llms/test_quick_model.py +116 -0
  182. autocoder/common/llms/test_remove_functionality.py +182 -0
  183. autocoder/common/llms/tests/__init__.py +1 -0
  184. autocoder/common/llms/tests/test_manager.py +330 -0
  185. autocoder/common/llms/tests/test_registry.py +364 -0
  186. autocoder/common/mcp_tools/__init__.py +62 -0
  187. autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
  188. autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
  189. autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
  190. autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
  191. autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
  192. autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
  193. autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
  194. autocoder/common/mcp_tools/verify_functionality.py +202 -0
  195. autocoder/common/model_speed_tester.py +32 -26
  196. autocoder/common/priority_directory_finder/__init__.py +142 -0
  197. autocoder/common/priority_directory_finder/examples.py +230 -0
  198. autocoder/common/priority_directory_finder/finder.py +283 -0
  199. autocoder/common/priority_directory_finder/models.py +236 -0
  200. autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
  201. autocoder/common/project_scanner/__init__.py +18 -0
  202. autocoder/common/project_scanner/compat.py +77 -0
  203. autocoder/common/project_scanner/scanner.py +436 -0
  204. autocoder/common/project_tracker/__init__.py +27 -0
  205. autocoder/common/project_tracker/api.py +228 -0
  206. autocoder/common/project_tracker/demo.py +272 -0
  207. autocoder/common/project_tracker/tracker.py +487 -0
  208. autocoder/common/project_tracker/types.py +53 -0
  209. autocoder/common/pruner/__init__.py +67 -0
  210. autocoder/common/pruner/agentic_conversation_pruner.py +746 -0
  211. autocoder/common/{context_pruner.py → pruner/context_pruner.py} +137 -40
  212. autocoder/common/pruner/conversation_message_ids_api.py +386 -0
  213. autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
  214. autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
  215. autocoder/common/pruner/conversation_normalizer.py +347 -0
  216. autocoder/common/{conversation_pruner.py → pruner/conversation_pruner.py} +26 -6
  217. autocoder/common/pruner/test_agentic_conversation_pruner.py +784 -0
  218. autocoder/common/pruner/test_context_pruner.py +546 -0
  219. autocoder/common/pruner/test_conversation_normalizer.py +502 -0
  220. autocoder/common/pruner/test_tool_content_detector.py +324 -0
  221. autocoder/common/pruner/tool_content_detector.py +227 -0
  222. autocoder/common/pruner/tools/__init__.py +18 -0
  223. autocoder/common/pruner/tools/query_message_ids.py +264 -0
  224. autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
  225. autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
  226. autocoder/common/pull_requests/__init__.py +9 -1
  227. autocoder/common/pull_requests/utils.py +122 -1
  228. autocoder/common/rag_manager/rag_manager.py +36 -40
  229. autocoder/common/rulefiles/__init__.py +53 -1
  230. autocoder/common/rulefiles/api.py +250 -0
  231. autocoder/common/rulefiles/core/__init__.py +14 -0
  232. autocoder/common/rulefiles/core/manager.py +241 -0
  233. autocoder/common/rulefiles/core/selector.py +805 -0
  234. autocoder/common/rulefiles/models/__init__.py +20 -0
  235. autocoder/common/rulefiles/models/index.py +16 -0
  236. autocoder/common/rulefiles/models/init_rule.py +18 -0
  237. autocoder/common/rulefiles/models/rule_file.py +18 -0
  238. autocoder/common/rulefiles/models/rule_relevance.py +14 -0
  239. autocoder/common/rulefiles/models/summary.py +16 -0
  240. autocoder/common/rulefiles/test_rulefiles.py +776 -0
  241. autocoder/common/rulefiles/utils/__init__.py +34 -0
  242. autocoder/common/rulefiles/utils/monitor.py +86 -0
  243. autocoder/common/rulefiles/utils/parser.py +230 -0
  244. autocoder/common/save_formatted_log.py +67 -10
  245. autocoder/common/search_replace.py +8 -1
  246. autocoder/common/search_replace_patch/__init__.py +24 -0
  247. autocoder/common/search_replace_patch/base.py +115 -0
  248. autocoder/common/search_replace_patch/manager.py +248 -0
  249. autocoder/common/search_replace_patch/patch_replacer.py +304 -0
  250. autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
  251. autocoder/common/search_replace_patch/string_replacer.py +181 -0
  252. autocoder/common/search_replace_patch/tests/__init__.py +3 -0
  253. autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
  254. autocoder/common/search_replace_patch/tests/test_base.py +188 -0
  255. autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
  256. autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
  257. autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
  258. autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
  259. autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
  260. autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
  261. autocoder/common/shell_commands/__init__.py +197 -0
  262. autocoder/common/shell_commands/background_process_notifier.py +346 -0
  263. autocoder/common/shell_commands/command_executor.py +1127 -0
  264. autocoder/common/shell_commands/error_recovery.py +541 -0
  265. autocoder/common/shell_commands/exceptions.py +120 -0
  266. autocoder/common/shell_commands/interactive_executor.py +476 -0
  267. autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
  268. autocoder/common/shell_commands/interactive_process.py +744 -0
  269. autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
  270. autocoder/common/shell_commands/monitoring.py +529 -0
  271. autocoder/common/shell_commands/process_cleanup.py +386 -0
  272. autocoder/common/shell_commands/process_manager.py +606 -0
  273. autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
  274. autocoder/common/shell_commands/tests/__init__.py +6 -0
  275. autocoder/common/shell_commands/tests/conftest.py +118 -0
  276. autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
  277. autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
  278. autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
  279. autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
  280. autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
  281. autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
  282. autocoder/common/shell_commands/tests/test_integration.py +664 -0
  283. autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
  284. autocoder/common/shell_commands/tests/test_performance.py +632 -0
  285. autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
  286. autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
  287. autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
  288. autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
  289. autocoder/common/shell_commands/timeout_config.py +315 -0
  290. autocoder/common/shell_commands/timeout_manager.py +352 -0
  291. autocoder/common/terminal_paste/__init__.py +14 -0
  292. autocoder/common/terminal_paste/demo.py +145 -0
  293. autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
  294. autocoder/common/terminal_paste/paste_handler.py +200 -0
  295. autocoder/common/terminal_paste/paste_manager.py +118 -0
  296. autocoder/common/terminal_paste/tests/__init__.py +1 -0
  297. autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
  298. autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
  299. autocoder/common/terminal_paste/utils.py +163 -0
  300. autocoder/common/test_autocoder_args.py +232 -0
  301. autocoder/common/test_env_manager.py +173 -0
  302. autocoder/common/test_env_manager_integration.py +159 -0
  303. autocoder/common/text_similarity/__init__.py +9 -0
  304. autocoder/common/text_similarity/demo.py +216 -0
  305. autocoder/common/text_similarity/examples.py +266 -0
  306. autocoder/common/text_similarity/test_text_similarity.py +306 -0
  307. autocoder/common/text_similarity/text_similarity.py +194 -0
  308. autocoder/common/text_similarity/utils.py +125 -0
  309. autocoder/common/todos/__init__.py +61 -0
  310. autocoder/common/todos/cache/__init__.py +16 -0
  311. autocoder/common/todos/cache/base_cache.py +89 -0
  312. autocoder/common/todos/cache/cache_manager.py +228 -0
  313. autocoder/common/todos/cache/memory_cache.py +225 -0
  314. autocoder/common/todos/config.py +155 -0
  315. autocoder/common/todos/exceptions.py +35 -0
  316. autocoder/common/todos/get_todo_manager.py +161 -0
  317. autocoder/common/todos/manager.py +537 -0
  318. autocoder/common/todos/models.py +239 -0
  319. autocoder/common/todos/storage/__init__.py +14 -0
  320. autocoder/common/todos/storage/base_storage.py +76 -0
  321. autocoder/common/todos/storage/file_storage.py +278 -0
  322. autocoder/common/tokens/__init__.py +15 -0
  323. autocoder/common/tokens/counter.py +44 -2
  324. autocoder/common/tools_manager/__init__.py +17 -0
  325. autocoder/common/tools_manager/examples.py +162 -0
  326. autocoder/common/tools_manager/manager.py +385 -0
  327. autocoder/common/tools_manager/models.py +39 -0
  328. autocoder/common/tools_manager/test_tools_manager.py +303 -0
  329. autocoder/common/tools_manager/utils.py +191 -0
  330. autocoder/common/v2/agent/agentic_callbacks.py +270 -0
  331. autocoder/common/v2/agent/agentic_edit.py +2729 -2052
  332. autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
  333. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +43 -2
  334. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
  335. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
  336. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +52 -0
  337. autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
  338. autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
  339. autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
  340. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
  341. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
  342. autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
  343. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +565 -30
  344. autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
  345. autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
  346. autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
  347. autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
  348. autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
  349. autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
  350. autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
  351. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +244 -51
  352. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
  353. autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
  354. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +409 -140
  355. autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
  356. autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
  357. autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
  358. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +209 -194
  359. autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +135 -0
  360. autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +328 -0
  361. autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
  362. autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
  363. autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
  364. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
  365. autocoder/common/v2/agent/agentic_edit_types.py +386 -10
  366. autocoder/common/v2/agent/runner/__init__.py +31 -0
  367. autocoder/common/v2/agent/runner/base_runner.py +92 -0
  368. autocoder/common/v2/agent/runner/file_based_event_runner.py +217 -0
  369. autocoder/common/v2/agent/runner/sdk_runner.py +182 -0
  370. autocoder/common/v2/agent/runner/terminal_runner.py +396 -0
  371. autocoder/common/v2/agent/runner/tool_display.py +589 -0
  372. autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
  373. autocoder/common/v2/agent/test_agentic_edit.py +194 -0
  374. autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
  375. autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
  376. autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
  377. autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
  378. autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
  379. autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
  380. autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
  381. autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
  382. autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
  383. autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
  384. autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
  385. autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
  386. autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
  387. autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
  388. autocoder/common/v2/code_auto_generate.py +136 -78
  389. autocoder/common/v2/code_auto_generate_diff.py +135 -79
  390. autocoder/common/v2/code_auto_generate_editblock.py +174 -99
  391. autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
  392. autocoder/common/v2/code_auto_merge.py +1 -1
  393. autocoder/common/v2/code_auto_merge_editblock.py +13 -1
  394. autocoder/common/v2/code_diff_manager.py +3 -3
  395. autocoder/common/v2/code_editblock_manager.py +4 -14
  396. autocoder/common/v2/code_manager.py +1 -1
  397. autocoder/common/v2/code_strict_diff_manager.py +2 -2
  398. autocoder/common/wrap_llm_hint/__init__.py +10 -0
  399. autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
  400. autocoder/common/wrap_llm_hint/utils.py +432 -0
  401. autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
  402. autocoder/completer/__init__.py +8 -0
  403. autocoder/completer/command_completer_v2.py +1051 -0
  404. autocoder/default_project/__init__.py +501 -0
  405. autocoder/dispacher/__init__.py +4 -12
  406. autocoder/dispacher/actions/action.py +165 -7
  407. autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
  408. autocoder/index/entry.py +117 -125
  409. autocoder/{agent → index/filter}/agentic_filter.py +323 -334
  410. autocoder/index/filter/normal_filter.py +5 -11
  411. autocoder/index/filter/quick_filter.py +1 -1
  412. autocoder/index/index.py +36 -9
  413. autocoder/index/tests/__init__.py +1 -0
  414. autocoder/index/tests/run_tests.py +195 -0
  415. autocoder/index/tests/test_entry.py +303 -0
  416. autocoder/index/tests/test_index_manager.py +314 -0
  417. autocoder/index/tests/test_module_integration.py +300 -0
  418. autocoder/index/tests/test_symbols_utils.py +183 -0
  419. autocoder/inner/__init__.py +4 -0
  420. autocoder/inner/agentic.py +932 -0
  421. autocoder/inner/async_command_handler.py +992 -0
  422. autocoder/inner/conversation_command_handlers.py +623 -0
  423. autocoder/inner/merge_command_handler.py +213 -0
  424. autocoder/inner/queue_command_handler.py +684 -0
  425. autocoder/models.py +95 -266
  426. autocoder/plugins/git_helper_plugin.py +31 -29
  427. autocoder/plugins/token_helper_plugin.py +156 -37
  428. autocoder/pyproject/__init__.py +32 -29
  429. autocoder/rag/agentic_rag.py +215 -75
  430. autocoder/rag/cache/simple_cache.py +1 -2
  431. autocoder/rag/loaders/image_loader.py +1 -1
  432. autocoder/rag/long_context_rag.py +42 -26
  433. autocoder/rag/qa_conversation_strategy.py +1 -1
  434. autocoder/rag/terminal/__init__.py +17 -0
  435. autocoder/rag/terminal/args.py +581 -0
  436. autocoder/rag/terminal/bootstrap.py +61 -0
  437. autocoder/rag/terminal/command_handlers.py +653 -0
  438. autocoder/rag/terminal/formatters/__init__.py +20 -0
  439. autocoder/rag/terminal/formatters/base.py +70 -0
  440. autocoder/rag/terminal/formatters/json_format.py +66 -0
  441. autocoder/rag/terminal/formatters/stream_json.py +95 -0
  442. autocoder/rag/terminal/formatters/text.py +28 -0
  443. autocoder/rag/terminal/init.py +120 -0
  444. autocoder/rag/terminal/utils.py +106 -0
  445. autocoder/rag/test_agentic_rag.py +389 -0
  446. autocoder/rag/test_doc_filter.py +3 -3
  447. autocoder/rag/test_long_context_rag.py +1 -1
  448. autocoder/rag/test_token_limiter.py +517 -10
  449. autocoder/rag/token_counter.py +3 -0
  450. autocoder/rag/token_limiter.py +19 -15
  451. autocoder/rag/tools/__init__.py +26 -2
  452. autocoder/rag/tools/bochaai_example.py +343 -0
  453. autocoder/rag/tools/bochaai_sdk.py +541 -0
  454. autocoder/rag/tools/metaso_example.py +268 -0
  455. autocoder/rag/tools/metaso_sdk.py +417 -0
  456. autocoder/rag/tools/recall_tool.py +28 -7
  457. autocoder/rag/tools/run_integration_tests.py +204 -0
  458. autocoder/rag/tools/test_all_providers.py +318 -0
  459. autocoder/rag/tools/test_bochaai_integration.py +482 -0
  460. autocoder/rag/tools/test_final_integration.py +215 -0
  461. autocoder/rag/tools/test_metaso_integration.py +424 -0
  462. autocoder/rag/tools/test_metaso_real.py +171 -0
  463. autocoder/rag/tools/test_web_crawl_tool.py +639 -0
  464. autocoder/rag/tools/test_web_search_tool.py +509 -0
  465. autocoder/rag/tools/todo_read_tool.py +202 -0
  466. autocoder/rag/tools/todo_write_tool.py +412 -0
  467. autocoder/rag/tools/web_crawl_tool.py +634 -0
  468. autocoder/rag/tools/web_search_tool.py +558 -0
  469. autocoder/rag/tools/web_tools_example.py +119 -0
  470. autocoder/rag/types.py +16 -0
  471. autocoder/rag/variable_holder.py +4 -2
  472. autocoder/rags.py +86 -79
  473. autocoder/regexproject/__init__.py +23 -21
  474. autocoder/run_context.py +9 -0
  475. autocoder/sdk/__init__.py +50 -161
  476. autocoder/sdk/api.py +370 -0
  477. autocoder/sdk/async_runner/__init__.py +26 -0
  478. autocoder/sdk/async_runner/async_executor.py +650 -0
  479. autocoder/sdk/async_runner/async_handler.py +356 -0
  480. autocoder/sdk/async_runner/markdown_processor.py +595 -0
  481. autocoder/sdk/async_runner/task_metadata.py +284 -0
  482. autocoder/sdk/async_runner/worktree_manager.py +438 -0
  483. autocoder/sdk/cli/__init__.py +2 -5
  484. autocoder/sdk/cli/formatters.py +28 -204
  485. autocoder/sdk/cli/handlers.py +77 -44
  486. autocoder/sdk/cli/main.py +158 -170
  487. autocoder/sdk/cli/options.py +95 -22
  488. autocoder/sdk/constants.py +139 -51
  489. autocoder/sdk/core/auto_coder_core.py +484 -267
  490. autocoder/sdk/core/bridge.py +298 -118
  491. autocoder/sdk/exceptions.py +18 -12
  492. autocoder/sdk/formatters/__init__.py +19 -0
  493. autocoder/sdk/formatters/input.py +64 -0
  494. autocoder/sdk/formatters/output.py +247 -0
  495. autocoder/sdk/formatters/stream.py +54 -0
  496. autocoder/sdk/models/__init__.py +6 -5
  497. autocoder/sdk/models/options.py +55 -18
  498. autocoder/sdk/utils/formatters.py +27 -195
  499. autocoder/suffixproject/__init__.py +28 -25
  500. autocoder/terminal/__init__.py +14 -0
  501. autocoder/terminal/app.py +454 -0
  502. autocoder/terminal/args.py +32 -0
  503. autocoder/terminal/bootstrap.py +178 -0
  504. autocoder/terminal/command_processor.py +521 -0
  505. autocoder/terminal/command_registry.py +57 -0
  506. autocoder/terminal/help.py +97 -0
  507. autocoder/terminal/tasks/__init__.py +5 -0
  508. autocoder/terminal/tasks/background.py +77 -0
  509. autocoder/terminal/tasks/task_event.py +70 -0
  510. autocoder/terminal/ui/__init__.py +13 -0
  511. autocoder/terminal/ui/completer.py +268 -0
  512. autocoder/terminal/ui/keybindings.py +75 -0
  513. autocoder/terminal/ui/session.py +41 -0
  514. autocoder/terminal/ui/toolbar.py +64 -0
  515. autocoder/terminal/utils/__init__.py +13 -0
  516. autocoder/terminal/utils/errors.py +18 -0
  517. autocoder/terminal/utils/paths.py +19 -0
  518. autocoder/terminal/utils/shell.py +43 -0
  519. autocoder/terminal_v3/__init__.py +10 -0
  520. autocoder/terminal_v3/app.py +201 -0
  521. autocoder/terminal_v3/handlers/__init__.py +5 -0
  522. autocoder/terminal_v3/handlers/command_handler.py +131 -0
  523. autocoder/terminal_v3/models/__init__.py +6 -0
  524. autocoder/terminal_v3/models/conversation_buffer.py +214 -0
  525. autocoder/terminal_v3/models/message.py +50 -0
  526. autocoder/terminal_v3/models/tool_display.py +247 -0
  527. autocoder/terminal_v3/ui/__init__.py +7 -0
  528. autocoder/terminal_v3/ui/keybindings.py +56 -0
  529. autocoder/terminal_v3/ui/layout.py +141 -0
  530. autocoder/terminal_v3/ui/styles.py +43 -0
  531. autocoder/tsproject/__init__.py +23 -23
  532. autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
  533. autocoder/utils/llms.py +88 -80
  534. autocoder/utils/math_utils.py +101 -0
  535. autocoder/utils/model_provider_selector.py +16 -4
  536. autocoder/utils/operate_config_api.py +33 -5
  537. autocoder/utils/thread_utils.py +2 -2
  538. autocoder/version.py +4 -2
  539. autocoder/workflow_agents/__init__.py +84 -0
  540. autocoder/workflow_agents/agent.py +143 -0
  541. autocoder/workflow_agents/exceptions.py +573 -0
  542. autocoder/workflow_agents/executor.py +489 -0
  543. autocoder/workflow_agents/loader.py +737 -0
  544. autocoder/workflow_agents/runner.py +267 -0
  545. autocoder/workflow_agents/types.py +172 -0
  546. autocoder/workflow_agents/utils.py +434 -0
  547. autocoder/workflow_agents/workflow_manager.py +211 -0
  548. auto_coder-0.1.400.dist-info/METADATA +0 -396
  549. auto_coder-0.1.400.dist-info/RECORD +0 -425
  550. auto_coder-0.1.400.dist-info/licenses/LICENSE +0 -201
  551. autocoder/auto_coder_server.py +0 -672
  552. autocoder/benchmark.py +0 -138
  553. autocoder/common/ac_style_command_parser/example.py +0 -7
  554. autocoder/common/cleaner.py +0 -31
  555. autocoder/common/command_completer_v2.py +0 -615
  556. autocoder/common/directory_cache/__init__.py +0 -1
  557. autocoder/common/directory_cache/cache.py +0 -192
  558. autocoder/common/directory_cache/test_cache.py +0 -190
  559. autocoder/common/file_checkpoint/examples.py +0 -217
  560. autocoder/common/llm_friendly_package_example.py +0 -138
  561. autocoder/common/llm_friendly_package_test.py +0 -63
  562. autocoder/common/pull_requests/test_module.py +0 -1
  563. autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
  564. autocoder/common/text.py +0 -30
  565. autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
  566. autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
  567. autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
  568. autocoder/common/v2/agent/agentic_tool_display.py +0 -183
  569. autocoder/plugins/dynamic_completion_example.py +0 -148
  570. autocoder/plugins/sample_plugin.py +0 -160
  571. autocoder/sdk/cli/__main__.py +0 -26
  572. autocoder/sdk/cli/completion_wrapper.py +0 -38
  573. autocoder/sdk/cli/install_completion.py +0 -301
  574. autocoder/sdk/models/messages.py +0 -209
  575. autocoder/sdk/session/__init__.py +0 -32
  576. autocoder/sdk/session/session.py +0 -106
  577. autocoder/sdk/session/session_manager.py +0 -56
  578. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
  579. /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
@@ -1,3 +1,10 @@
1
+ """
2
+ MCP Tools Types Module
3
+
4
+ This module contains all the type definitions used in the MCP tools system,
5
+ including request/response models, server configurations, and result types.
6
+ """
7
+
1
8
  from typing import List, Dict, Any, Optional, Union
2
9
  from pydantic import BaseModel, Field
3
10
 
@@ -13,39 +20,78 @@ class MarketplaceMCPServerItem(BaseModel):
13
20
  env: Dict[str, str] = Field(default_factory=dict)
14
21
  url: str = "" # sse url
15
22
 
23
+
16
24
  class McpRequest(BaseModel):
25
+ """Base request for MCP operations"""
17
26
  query: str
18
27
  model: Optional[str] = None
19
28
  product_mode: Optional[str] = None
20
29
 
21
30
 
22
31
  class McpInstallRequest(BaseModel):
32
+ """Request to install an MCP server"""
23
33
  server_name_or_config: Optional[str] = None
24
- market_install_item:Optional[MarketplaceMCPServerItem] = None
34
+ market_install_item: Optional[MarketplaceMCPServerItem] = None
25
35
 
26
36
 
27
37
  class McpRemoveRequest(BaseModel):
38
+ """Request to remove an MCP server"""
28
39
  server_name: str
29
40
 
30
41
 
31
42
  class McpListRequest(BaseModel):
32
43
  """Request to list all builtin MCP servers"""
33
- path:str="/list"
44
+ path: str = "/list"
34
45
 
35
46
 
36
47
  class McpListRunningRequest(BaseModel):
37
48
  """Request to list all running MCP servers"""
38
- path:str="/list/running"
49
+ path: str = "/list/running"
50
+
51
+
52
+ class McpRefreshRequest(BaseModel):
53
+ """Request to refresh MCP server connections"""
54
+ name: Optional[str] = None
55
+
56
+
57
+ class McpServerInfoRequest(BaseModel):
58
+ """Request to get MCP server info"""
59
+ model: Optional[str] = None
60
+ product_mode: Optional[str] = None
61
+
62
+
63
+ class MarketplaceAddRequest(BaseModel):
64
+ """Request to add a new marketplace item"""
65
+ name: str
66
+ description: Optional[str] = ""
67
+ mcp_type: str = "command" # command/sse
68
+ command: Optional[str] = "" # npm/uvx/python/node/...
69
+ args: Optional[List[str]] = Field(default_factory=list)
70
+ env: Optional[Dict[str, str]] = Field(default_factory=dict)
71
+ url: Optional[str] = "" # sse url
72
+
39
73
 
74
+ class MarketplaceUpdateRequest(BaseModel):
75
+ """Request to update an existing marketplace item"""
76
+ name: str
77
+ description: Optional[str] = ""
78
+ mcp_type: str = "command" # command/sse
79
+ command: Optional[str] = "" # npm/uvx/python/node/...
80
+ args: Optional[List[str]] = Field(default_factory=list)
81
+ env: Optional[Dict[str, str]] = Field(default_factory=dict)
82
+ url: Optional[str] = "" # sse url
40
83
 
41
- # Pydantic models for raw_result
84
+
85
+ # Result types
42
86
  class ServerConfig(BaseModel):
87
+ """Server configuration"""
43
88
  command: str
44
89
  args: List[str] = Field(default_factory=list)
45
90
  env: Dict[str, str] = Field(default_factory=dict)
46
91
 
47
92
 
48
93
  class InstallResult(BaseModel):
94
+ """Result of server installation"""
49
95
  success: bool
50
96
  server_name: Optional[str] = None
51
97
  config: Optional[ServerConfig] = None
@@ -53,67 +99,75 @@ class InstallResult(BaseModel):
53
99
 
54
100
 
55
101
  class RemoveResult(BaseModel):
102
+ """Result of server removal"""
56
103
  success: bool
57
104
  server_name: Optional[str] = None
58
105
  error: Optional[str] = None
59
106
 
60
107
 
61
108
  class ExternalServerInfo(BaseModel):
109
+ """External server information"""
62
110
  name: str
63
111
  description: str
64
112
 
65
113
 
66
-
67
-
68
-
69
114
  class ListResult(BaseModel):
70
- builtin_servers: List[MarketplaceMCPServerItem] = Field(
71
- default_factory=list)
72
- external_servers: List[MarketplaceMCPServerItem] = Field(
73
- default_factory=list)
74
- marketplace_items: List[MarketplaceMCPServerItem] = Field(
75
- default_factory=list)
115
+ """Result of server listing"""
116
+ builtin_servers: List[MarketplaceMCPServerItem] = Field(default_factory=list)
117
+ external_servers: List[MarketplaceMCPServerItem] = Field(default_factory=list)
118
+ marketplace_items: List[MarketplaceMCPServerItem] = Field(default_factory=list)
76
119
  error: Optional[str] = None
77
120
 
78
121
 
79
122
  class ServerInfo(BaseModel):
123
+ """Server information"""
80
124
  name: str
81
125
 
82
126
 
83
127
  class ListRunningResult(BaseModel):
128
+ """Result of running servers listing"""
84
129
  servers: List[ServerInfo] = Field(default_factory=list)
85
130
  error: Optional[str] = None
86
131
 
87
132
 
88
133
  class RefreshResult(BaseModel):
134
+ """Result of server refresh"""
89
135
  success: bool
90
136
  name: Optional[str] = None
91
137
  error: Optional[str] = None
92
138
 
93
139
 
94
140
  class QueryResult(BaseModel):
141
+ """Result of MCP query"""
95
142
  success: bool
96
143
  results: Optional[List[Any]] = None
97
144
  error: Optional[str] = None
98
145
 
99
146
 
100
147
  class ErrorResult(BaseModel):
148
+ """Error result"""
101
149
  success: bool = False
102
150
  error: str
103
151
 
152
+
104
153
  class StringResult(BaseModel):
154
+ """String result"""
105
155
  success: bool = True
106
156
  result: str
107
157
 
108
- class McpRefreshRequest(BaseModel):
109
- """Request to refresh MCP server connections"""
110
- name: Optional[str] = None
158
+
159
+ class MarketplaceAddResult(BaseModel):
160
+ """Result for marketplace add operation"""
161
+ success: bool
162
+ name: str
163
+ error: Optional[str] = None
111
164
 
112
165
 
113
- class McpServerInfoRequest(BaseModel):
114
- """Request to get MCP server info"""
115
- model: Optional[str] = None
116
- product_mode: Optional[str] = None
166
+ class MarketplaceUpdateResult(BaseModel):
167
+ """Result for marketplace update operation"""
168
+ success: bool
169
+ name: str
170
+ error: Optional[str] = None
117
171
 
118
172
 
119
173
  class McpExternalServer(BaseModel):
@@ -127,43 +181,62 @@ class McpExternalServer(BaseModel):
127
181
  runtime: str
128
182
 
129
183
 
130
- class MarketplaceAddRequest(BaseModel):
131
- """Request to add a new marketplace item"""
184
+ class McpResponse(BaseModel):
185
+ """MCP response containing result and optional error"""
186
+ result: str
187
+ error: Optional[str] = None
188
+ raw_result: Optional[Union[
189
+ InstallResult, MarketplaceAddResult, MarketplaceUpdateResult,
190
+ RemoveResult, ListResult, ListRunningResult, RefreshResult,
191
+ QueryResult, ErrorResult, StringResult
192
+ ]] = None
193
+
194
+
195
+ # Tool and resource access types
196
+ class McpTool(BaseModel):
197
+ """Represents an MCP tool configuration"""
132
198
  name: str
133
- description: Optional[str] = ""
134
- mcp_type: str = "command" # command/sse
135
- command: Optional[str] = "" # npm/uvx/python/node/...
136
- args: Optional[List[str]] = Field(default_factory=list)
137
- env: Optional[Dict[str, str]] = Field(default_factory=dict)
138
- url: Optional[str] = "" # sse url
199
+ description: Optional[str] = None
200
+ input_schema: dict = Field(default_factory=dict)
139
201
 
140
202
 
141
- class MarketplaceAddResult(BaseModel):
142
- """Result for marketplace add operation"""
143
- success: bool
203
+ class McpResource(BaseModel):
204
+ """Represents an MCP resource configuration"""
205
+ uri: str
144
206
  name: str
145
- error: Optional[str] = None
207
+ description: Optional[str] = None
208
+ mime_type: Optional[str] = None
146
209
 
147
210
 
148
- class MarketplaceUpdateRequest(BaseModel):
149
- """Request to update an existing marketplace item"""
211
+ class McpResourceTemplate(BaseModel):
212
+ """Represents an MCP resource template"""
213
+ uri_template: str
150
214
  name: str
151
- description: Optional[str] = ""
152
- mcp_type: str = "command" # command/sse
153
- command: Optional[str] = "" # npm/uvx/python/node/...
154
- args: Optional[List[str]] = Field(default_factory=list)
155
- env: Optional[Dict[str, str]] = Field(default_factory=dict)
156
- url: Optional[str] = "" # sse url
215
+ description: Optional[str] = None
216
+ mime_type: Optional[str] = None
157
217
 
158
218
 
159
- class MarketplaceUpdateResult(BaseModel):
160
- """Result for marketplace update operation"""
161
- success: bool
219
+ class McpServer(BaseModel):
220
+ """Represents an MCP server configuration and status"""
162
221
  name: str
222
+ config: str # JSON string of server config
223
+ status: str = "disconnected" # connected, disconnected, connecting
163
224
  error: Optional[str] = None
225
+ tools: List[McpTool] = Field(default_factory=list)
226
+ resources: List[McpResource] = Field(default_factory=list)
227
+ resource_templates: List[McpResourceTemplate] = Field(default_factory=list)
164
228
 
165
- class McpResponse(BaseModel):
166
- result: str
167
- error: Optional[str] = None
168
- raw_result: Optional[Union[InstallResult, MarketplaceAddResult, MarketplaceUpdateResult, RemoveResult,
169
- ListResult, ListRunningResult, RefreshResult, QueryResult, ErrorResult,StringResult]] = None
229
+
230
+ class McpToolCall(BaseModel):
231
+ """Represents an MCP tool call"""
232
+ server_name: str = Field(..., description="The name of the MCP server")
233
+ tool_name: str = Field(..., description="The name of the tool to call")
234
+ arguments: Dict[str, Any] = Field(
235
+ default_factory=dict, description="The arguments to pass to the tool"
236
+ )
237
+
238
+
239
+ class McpResourceAccess(BaseModel):
240
+ """Represents an MCP resource access"""
241
+ server_name: str = Field(..., description="The name of the MCP server")
242
+ uri: str = Field(..., description="The URI of the resource to access")
@@ -0,0 +1,202 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ 功能验证脚本 - 验证MCP工具模块的核心功能
4
+ """
5
+
6
+ import sys
7
+ import traceback
8
+ from pathlib import Path
9
+ import tempfile
10
+ import json
11
+
12
+ def test_basic_imports():
13
+ """测试基本导入功能"""
14
+ print("1. 测试基本导入...")
15
+ try:
16
+ from autocoder.common.mcp_tools import (
17
+ McpHub, McpExecutor, McpServerInstaller, McpServer,
18
+ get_mcp_server, McpRequest, McpResponse, MarketplaceMCPServerItem
19
+ )
20
+ print(" ✓ 所有主要类都可以正常导入")
21
+ return True
22
+ except Exception as e:
23
+ print(f" ✗ 导入失败: {e}")
24
+ traceback.print_exc()
25
+ return False
26
+
27
+ def test_type_creation():
28
+ """测试类型创建功能"""
29
+ print("2. 测试类型创建...")
30
+ try:
31
+ from autocoder.common.mcp_tools.types import (
32
+ McpRequest, McpInstallRequest, MarketplaceMCPServerItem,
33
+ McpToolCall, McpResourceAccess
34
+ )
35
+
36
+ # 测试McpRequest
37
+ request = McpRequest(query="test query")
38
+ assert request.query == "test query"
39
+
40
+ # 测试MarketplaceMCPServerItem
41
+ item = MarketplaceMCPServerItem(
42
+ name="test-server",
43
+ description="Test server",
44
+ command="python"
45
+ )
46
+ assert item.name == "test-server"
47
+
48
+ # 测试McpToolCall
49
+ tool_call = McpToolCall(
50
+ server_name="test-server",
51
+ tool_name="test-tool",
52
+ arguments={"param1": "value1"}
53
+ )
54
+ assert tool_call.server_name == "test-server"
55
+
56
+ print(" ✓ 所有类型可以正常创建")
57
+ return True
58
+ except Exception as e:
59
+ print(f" ✗ 类型创建失败: {e}")
60
+ traceback.print_exc()
61
+ return False
62
+
63
+ def test_hub_functionality():
64
+ """测试Hub功能"""
65
+ print("3. 测试Hub功能...")
66
+ try:
67
+ from autocoder.common.mcp_tools import McpHub
68
+
69
+ # 测试文件创建
70
+ with tempfile.TemporaryDirectory() as tmp_dir:
71
+ settings_path = Path(tmp_dir) / "test_settings.json"
72
+ marketplace_path = Path(tmp_dir) / "test_marketplace.json"
73
+
74
+ hub = McpHub(
75
+ settings_path=str(settings_path),
76
+ marketplace_path=str(marketplace_path)
77
+ )
78
+
79
+ # 验证文件创建
80
+ assert settings_path.exists(), "Settings file not created"
81
+ assert marketplace_path.exists(), "Marketplace file not created"
82
+
83
+ # 验证文件内容
84
+ with open(settings_path) as f:
85
+ settings_data = json.load(f)
86
+ assert "mcpServers" in settings_data
87
+
88
+ with open(marketplace_path) as f:
89
+ marketplace_data = json.load(f)
90
+ assert "mcpServers" in marketplace_data
91
+
92
+ print(" ✓ Hub功能正常工作")
93
+ return True
94
+ except Exception as e:
95
+ print(f" ✗ Hub功能测试失败: {e}")
96
+ traceback.print_exc()
97
+ return False
98
+
99
+ def test_server_templates():
100
+ """测试服务器模板功能"""
101
+ print("4. 测试服务器模板...")
102
+ try:
103
+ from autocoder.common.mcp_tools import McpHub
104
+
105
+ templates = McpHub.get_server_templates()
106
+ assert isinstance(templates, dict)
107
+
108
+ print(f" ✓ 服务器模板获取成功,共有 {len(templates)} 个模板")
109
+ return True
110
+ except Exception as e:
111
+ print(f" ✗ 服务器模板测试失败: {e}")
112
+ traceback.print_exc()
113
+ return False
114
+
115
+ def test_server_singleton():
116
+ """测试服务器单例模式"""
117
+ print("5. 测试服务器单例...")
118
+ try:
119
+ from autocoder.common.mcp_tools import get_mcp_server
120
+
121
+ server1 = get_mcp_server()
122
+ server2 = get_mcp_server()
123
+
124
+ assert server1 is server2, "服务器不是单例"
125
+
126
+ print(" ✓ 服务器单例模式正常工作")
127
+ return True
128
+ except Exception as e:
129
+ print(f" ✗ 服务器单例测试失败: {e}")
130
+ traceback.print_exc()
131
+ return False
132
+
133
+ def test_installer_functionality():
134
+ """测试安装器功能"""
135
+ print("6. 测试安装器功能...")
136
+ try:
137
+ from autocoder.common.mcp_tools import McpServerInstaller
138
+
139
+ installer = McpServerInstaller()
140
+
141
+ # 测试字典合并
142
+ dict1 = {"a": 1, "b": {"c": 2}}
143
+ dict2 = {"b": {"d": 3}, "e": 4}
144
+ result = installer.deep_merge_dicts(dict1, dict2)
145
+ expected = {"a": 1, "b": {"c": 2, "d": 3}, "e": 4}
146
+ assert result == expected, f"字典合并失败: {result} != {expected}"
147
+
148
+ # 测试命令行参数解析
149
+ args = "--name test-server --command python --args -m test"
150
+ name, config = installer.parse_command_line_args(args)
151
+ assert name == "test-server"
152
+ assert config["command"] == "python"
153
+ assert config["args"] == ["-m", "test"]
154
+
155
+ print(" ✓ 安装器功能正常工作")
156
+ return True
157
+ except Exception as e:
158
+ print(f" ✗ 安装器功能测试失败: {e}")
159
+ traceback.print_exc()
160
+ return False
161
+
162
+ def main():
163
+ """主函数"""
164
+ print("=== MCP工具模块功能验证 ===\n")
165
+
166
+ tests = [
167
+ test_basic_imports,
168
+ test_type_creation,
169
+ test_hub_functionality,
170
+ test_server_templates,
171
+ test_server_singleton,
172
+ test_installer_functionality
173
+ ]
174
+
175
+ passed = 0
176
+ failed = 0
177
+
178
+ for test in tests:
179
+ try:
180
+ if test():
181
+ passed += 1
182
+ else:
183
+ failed += 1
184
+ except Exception as e:
185
+ print(f" ✗ 测试执行失败: {e}")
186
+ failed += 1
187
+ print()
188
+
189
+ print(f"=== 测试结果 ===")
190
+ print(f"通过: {passed}")
191
+ print(f"失败: {failed}")
192
+ print(f"总计: {passed + failed}")
193
+
194
+ if failed == 0:
195
+ print("\n🎉 所有功能测试通过!MCP工具模块迁移成功!")
196
+ return 0
197
+ else:
198
+ print(f"\n❌ {failed} 个测试失败,需要进一步调试")
199
+ return 1
200
+
201
+ if __name__ == "__main__":
202
+ sys.exit(main())
@@ -5,10 +5,10 @@ from rich.console import Console
5
5
  from rich.table import Table
6
6
  from rich.panel import Panel
7
7
  from autocoder.common.printer import Printer
8
- from autocoder import models as models_module
8
+ from autocoder.common.llms import LLMManager
9
9
  from autocoder.utils.llms import get_single_llm
10
10
  import byzerllm
11
- import pkg_resources
11
+ import importlib.resources as resources
12
12
  from concurrent.futures import ThreadPoolExecutor
13
13
  from typing import Dict, List, Tuple
14
14
  from pydantic import BaseModel
@@ -29,9 +29,7 @@ class SpeedTestResults(BaseModel):
29
29
 
30
30
  byzerllm_content = ""
31
31
  try:
32
- byzerllm_conten_path = pkg_resources.resource_filename(
33
- "autocoder", "data/byzerllm.md"
34
- )
32
+ byzerllm_conten_path = str(resources.files("autocoder") / "data" / "byzerllm.md")
35
33
  with open(byzerllm_conten_path, "r",encoding="utf-8") as f:
36
34
  byzerllm_content = f.read()
37
35
  except FileNotFoundError:
@@ -51,23 +49,20 @@ def long_context_prompt() -> str:
51
49
  我想开发一个翻译程序,使用prompt 函数实现。
52
50
  </query>
53
51
  '''
54
- return {
55
- "content": byzerllm_content
56
- }
52
+ return ""
57
53
 
58
54
  @byzerllm.prompt()
59
55
  def short_context_prompt() -> str:
60
56
  '''
61
57
  Hello, can you help me test the response speed?
62
58
  '''
63
- return {}
59
+ return ""
64
60
 
65
61
  def test_model_speed(model_name: str,
66
62
  product_mode: str,
67
63
  test_rounds: int = 3,
68
64
  enable_long_context: bool = False
69
65
  ) -> Dict[str, Any]:
70
- from autocoder.models import get_model_by_name
71
66
  """
72
67
  测试单个模型的速度
73
68
 
@@ -87,7 +82,14 @@ def test_model_speed(model_name: str,
87
82
  """
88
83
  try:
89
84
  llm = get_single_llm(model_name, product_mode)
90
- model_info = get_model_by_name(model_name)
85
+ if llm is None:
86
+ raise ValueError(f"无法创建模型 {model_name} 的 LLM 实例")
87
+
88
+ # 使用新的 LLMManager 获取模型信息
89
+ llm_manager = LLMManager()
90
+ model_info = llm_manager.get_model(model_name)
91
+ if not model_info:
92
+ raise ValueError(f"模型 {model_name} 不存在")
91
93
 
92
94
  times = []
93
95
  first_token_times = []
@@ -98,12 +100,12 @@ def test_model_speed(model_name: str,
98
100
  input_tokens_costs = []
99
101
  generated_tokens_costs = []
100
102
 
101
- input_tokens_cost_per_m = model_info.get("input_price", 0.0) / 1000000
102
- output_tokens_cost_per_m = model_info.get("output_price", 0.0) / 1000000
103
+ input_tokens_cost_per_m = model_info.input_price / 1000000
104
+ output_tokens_cost_per_m = model_info.output_price / 1000000
103
105
 
104
106
  test_query = short_context_prompt.prompt()
105
107
  if enable_long_context:
106
- test_query = long_context_prompt.prompt()
108
+ test_query = long_context_prompt.prompt(content=byzerllm_content)
107
109
 
108
110
  content = ""
109
111
  for _ in range(test_rounds):
@@ -201,15 +203,16 @@ def run_speed_test(product_mode: str, test_rounds: int = 3, max_workers: Optiona
201
203
  Returns:
202
204
  SpeedTestResults: 包含所有模型测试结果的pydantic模型
203
205
  """
204
- # 获取所有模型
205
- models_data = models_module.load_models()
206
- active_models = [m for m in models_data if "api_key" in m] if product_mode == "lite" else models_data
206
+ # 使用新的 LLMManager 获取模型
207
+ llm_manager = LLMManager()
208
+ models_data = list(llm_manager.get_all_models().values())
209
+ active_models = [m for m in models_data if m.has_api_key] if product_mode == "lite" else models_data
207
210
 
208
211
  if not active_models:
209
212
  return SpeedTestResults(results=[])
210
213
 
211
214
  # 准备测试参数
212
- test_args = [(model["name"], product_mode, test_rounds, enable_long_context) for model in active_models]
215
+ test_args = [(model.name, product_mode, test_rounds, enable_long_context) for model in active_models]
213
216
 
214
217
  # 存储结果用于排序
215
218
  results_list = []
@@ -243,8 +246,10 @@ def run_speed_test(product_mode: str, test_rounds: int = 3, max_workers: Optiona
243
246
  )
244
247
  ))
245
248
  try:
246
- # 更新模型的平均速度
247
- models_module.update_model_speed(model_name, results['tokens_per_second'])
249
+ # 使用新的 LLMManager 更新模型速度
250
+ # 注意:新的 LLMManager 中没有 update_model_speed 方法
251
+ # 我们需要通过 update_model 方法来更新
252
+ llm_manager.update_model(model_name, {"average_speed": results['tokens_per_second']})
248
253
  except Exception:
249
254
  pass
250
255
  else:
@@ -295,9 +300,10 @@ def render_speed_test_in_terminal(product_mode: str, test_rounds: int = 3, max_w
295
300
  printer = Printer()
296
301
  console = Console()
297
302
 
298
- # 获取所有模型
299
- models_data = models_module.load_models()
300
- active_models = [m for m in models_data if "api_key" in m] if product_mode == "lite" else models_data
303
+ # 使用新的 LLMManager 获取模型
304
+ llm_manager = LLMManager()
305
+ models_data = list(llm_manager.get_all_models().values())
306
+ active_models = [m for m in models_data if m.has_api_key] if product_mode == "lite" else models_data
301
307
 
302
308
  if not active_models:
303
309
  printer.print_in_terminal("models_no_active", style="yellow")
@@ -321,7 +327,7 @@ def render_speed_test_in_terminal(product_mode: str, test_rounds: int = 3, max_w
321
327
  table.add_column("Status", style="red", width=20)
322
328
 
323
329
  # 准备测试参数
324
- test_args = [(model["name"], product_mode, test_rounds, enable_long_context) for model in active_models]
330
+ test_args = [(model.name, product_mode, test_rounds, enable_long_context) for model in active_models]
325
331
 
326
332
  # 存储结果用于排序
327
333
  results_list = []
@@ -355,8 +361,8 @@ def render_speed_test_in_terminal(product_mode: str, test_rounds: int = 3, max_w
355
361
  results
356
362
  ))
357
363
  try:
358
- # 更新模型的平均速度
359
- models_module.update_model_speed(model_name, results['tokens_per_second'])
364
+ # 使用新的 LLMManager 更新模型速度
365
+ llm_manager.update_model(model_name, {"average_speed": results['tokens_per_second']})
360
366
  except Exception as e:
361
367
  pass
362
368
  else: