auto-coder 1.0.0__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 (574) 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-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
  5. {auto_coder-1.0.0.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 +24 -3
  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 +970 -2345
  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 +988 -398
  28. autocoder/chat_auto_coder_lang.py +23 -732
  29. autocoder/commands/auto_command.py +25 -8
  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/git_utils.py +44 -8
  119. autocoder/common/global_cancel.py +15 -6
  120. autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
  121. autocoder/common/international/__init__.py +31 -0
  122. autocoder/common/international/demo_international.py +92 -0
  123. autocoder/common/international/message_manager.py +157 -0
  124. autocoder/common/international/messages/__init__.py +56 -0
  125. autocoder/common/international/messages/async_command_messages.py +507 -0
  126. autocoder/common/international/messages/auto_coder_messages.py +2208 -0
  127. autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
  128. autocoder/common/international/messages/command_help_messages.py +986 -0
  129. autocoder/common/international/messages/conversation_command_messages.py +191 -0
  130. autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
  131. autocoder/common/international/messages/queue_command_messages.py +751 -0
  132. autocoder/common/international/messages/rules_command_messages.py +77 -0
  133. autocoder/common/international/messages/sdk_messages.py +1707 -0
  134. autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
  135. autocoder/common/international/messages/tool_display_messages.py +1212 -0
  136. autocoder/common/international/messages/workflow_exception_messages.py +473 -0
  137. autocoder/common/international/test_international.py +612 -0
  138. autocoder/common/linter_core/__init__.py +28 -0
  139. autocoder/common/linter_core/base_linter.py +61 -0
  140. autocoder/common/linter_core/config_loader.py +271 -0
  141. autocoder/common/linter_core/formatters/__init__.py +0 -0
  142. autocoder/common/linter_core/formatters/base_formatter.py +38 -0
  143. autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
  144. autocoder/common/linter_core/linter.py +166 -0
  145. autocoder/common/linter_core/linter_factory.py +216 -0
  146. autocoder/common/linter_core/linter_manager.py +333 -0
  147. autocoder/common/linter_core/linters/__init__.py +9 -0
  148. autocoder/common/linter_core/linters/java_linter.py +342 -0
  149. autocoder/common/linter_core/linters/python_linter.py +115 -0
  150. autocoder/common/linter_core/linters/typescript_linter.py +119 -0
  151. autocoder/common/linter_core/models/__init__.py +7 -0
  152. autocoder/common/linter_core/models/lint_result.py +91 -0
  153. autocoder/common/linter_core/models.py +33 -0
  154. autocoder/common/linter_core/tests/__init__.py +3 -0
  155. autocoder/common/linter_core/tests/test_config_loader.py +323 -0
  156. autocoder/common/linter_core/tests/test_config_loading.py +308 -0
  157. autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
  158. autocoder/common/linter_core/tests/test_formatters.py +147 -0
  159. autocoder/common/linter_core/tests/test_integration.py +317 -0
  160. autocoder/common/linter_core/tests/test_java_linter.py +496 -0
  161. autocoder/common/linter_core/tests/test_linters.py +265 -0
  162. autocoder/common/linter_core/tests/test_models.py +81 -0
  163. autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
  164. autocoder/common/linter_core/tests/verify_fixes.py +183 -0
  165. autocoder/common/llm_friendly_package/__init__.py +31 -0
  166. autocoder/common/llm_friendly_package/base_manager.py +102 -0
  167. autocoder/common/llm_friendly_package/docs_manager.py +121 -0
  168. autocoder/common/llm_friendly_package/library_manager.py +171 -0
  169. autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
  170. autocoder/common/llm_friendly_package/models.py +40 -0
  171. autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
  172. autocoder/common/llms/__init__.py +15 -0
  173. autocoder/common/llms/demo_error_handling.py +85 -0
  174. autocoder/common/llms/factory.py +142 -0
  175. autocoder/common/llms/manager.py +264 -0
  176. autocoder/common/llms/pricing.py +121 -0
  177. autocoder/common/llms/registry.py +288 -0
  178. autocoder/common/llms/schema.py +77 -0
  179. autocoder/common/llms/simple_demo.py +45 -0
  180. autocoder/common/llms/test_quick_model.py +116 -0
  181. autocoder/common/llms/test_remove_functionality.py +182 -0
  182. autocoder/common/llms/tests/__init__.py +1 -0
  183. autocoder/common/llms/tests/test_manager.py +330 -0
  184. autocoder/common/llms/tests/test_registry.py +364 -0
  185. autocoder/common/mcp_tools/__init__.py +62 -0
  186. autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
  187. autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
  188. autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
  189. autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
  190. autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
  191. autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
  192. autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
  193. autocoder/common/mcp_tools/verify_functionality.py +202 -0
  194. autocoder/common/model_speed_tester.py +32 -26
  195. autocoder/common/priority_directory_finder/__init__.py +142 -0
  196. autocoder/common/priority_directory_finder/examples.py +230 -0
  197. autocoder/common/priority_directory_finder/finder.py +283 -0
  198. autocoder/common/priority_directory_finder/models.py +236 -0
  199. autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
  200. autocoder/common/project_scanner/__init__.py +18 -0
  201. autocoder/common/project_scanner/compat.py +77 -0
  202. autocoder/common/project_scanner/scanner.py +436 -0
  203. autocoder/common/project_tracker/__init__.py +27 -0
  204. autocoder/common/project_tracker/api.py +228 -0
  205. autocoder/common/project_tracker/demo.py +272 -0
  206. autocoder/common/project_tracker/tracker.py +487 -0
  207. autocoder/common/project_tracker/types.py +53 -0
  208. autocoder/common/pruner/__init__.py +67 -0
  209. autocoder/common/pruner/agentic_conversation_pruner.py +651 -102
  210. autocoder/common/pruner/conversation_message_ids_api.py +386 -0
  211. autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
  212. autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
  213. autocoder/common/pruner/conversation_normalizer.py +347 -0
  214. autocoder/common/pruner/conversation_pruner.py +26 -6
  215. autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
  216. autocoder/common/pruner/test_conversation_normalizer.py +502 -0
  217. autocoder/common/pruner/test_tool_content_detector.py +324 -0
  218. autocoder/common/pruner/tool_content_detector.py +227 -0
  219. autocoder/common/pruner/tools/__init__.py +18 -0
  220. autocoder/common/pruner/tools/query_message_ids.py +264 -0
  221. autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
  222. autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
  223. autocoder/common/pull_requests/__init__.py +9 -1
  224. autocoder/common/pull_requests/utils.py +122 -1
  225. autocoder/common/rag_manager/rag_manager.py +36 -40
  226. autocoder/common/rulefiles/__init__.py +53 -1
  227. autocoder/common/rulefiles/api.py +250 -0
  228. autocoder/common/rulefiles/core/__init__.py +14 -0
  229. autocoder/common/rulefiles/core/manager.py +241 -0
  230. autocoder/common/rulefiles/core/selector.py +805 -0
  231. autocoder/common/rulefiles/models/__init__.py +20 -0
  232. autocoder/common/rulefiles/models/index.py +16 -0
  233. autocoder/common/rulefiles/models/init_rule.py +18 -0
  234. autocoder/common/rulefiles/models/rule_file.py +18 -0
  235. autocoder/common/rulefiles/models/rule_relevance.py +14 -0
  236. autocoder/common/rulefiles/models/summary.py +16 -0
  237. autocoder/common/rulefiles/test_rulefiles.py +776 -0
  238. autocoder/common/rulefiles/utils/__init__.py +34 -0
  239. autocoder/common/rulefiles/utils/monitor.py +86 -0
  240. autocoder/common/rulefiles/utils/parser.py +230 -0
  241. autocoder/common/save_formatted_log.py +67 -10
  242. autocoder/common/search_replace.py +8 -1
  243. autocoder/common/search_replace_patch/__init__.py +24 -0
  244. autocoder/common/search_replace_patch/base.py +115 -0
  245. autocoder/common/search_replace_patch/manager.py +248 -0
  246. autocoder/common/search_replace_patch/patch_replacer.py +304 -0
  247. autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
  248. autocoder/common/search_replace_patch/string_replacer.py +181 -0
  249. autocoder/common/search_replace_patch/tests/__init__.py +3 -0
  250. autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
  251. autocoder/common/search_replace_patch/tests/test_base.py +188 -0
  252. autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
  253. autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
  254. autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
  255. autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
  256. autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
  257. autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
  258. autocoder/common/shell_commands/__init__.py +197 -0
  259. autocoder/common/shell_commands/background_process_notifier.py +346 -0
  260. autocoder/common/shell_commands/command_executor.py +1127 -0
  261. autocoder/common/shell_commands/error_recovery.py +541 -0
  262. autocoder/common/shell_commands/exceptions.py +120 -0
  263. autocoder/common/shell_commands/interactive_executor.py +476 -0
  264. autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
  265. autocoder/common/shell_commands/interactive_process.py +744 -0
  266. autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
  267. autocoder/common/shell_commands/monitoring.py +529 -0
  268. autocoder/common/shell_commands/process_cleanup.py +386 -0
  269. autocoder/common/shell_commands/process_manager.py +606 -0
  270. autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
  271. autocoder/common/shell_commands/tests/__init__.py +6 -0
  272. autocoder/common/shell_commands/tests/conftest.py +118 -0
  273. autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
  274. autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
  275. autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
  276. autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
  277. autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
  278. autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
  279. autocoder/common/shell_commands/tests/test_integration.py +664 -0
  280. autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
  281. autocoder/common/shell_commands/tests/test_performance.py +632 -0
  282. autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
  283. autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
  284. autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
  285. autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
  286. autocoder/common/shell_commands/timeout_config.py +315 -0
  287. autocoder/common/shell_commands/timeout_manager.py +352 -0
  288. autocoder/common/terminal_paste/__init__.py +14 -0
  289. autocoder/common/terminal_paste/demo.py +145 -0
  290. autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
  291. autocoder/common/terminal_paste/paste_handler.py +200 -0
  292. autocoder/common/terminal_paste/paste_manager.py +118 -0
  293. autocoder/common/terminal_paste/tests/__init__.py +1 -0
  294. autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
  295. autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
  296. autocoder/common/terminal_paste/utils.py +163 -0
  297. autocoder/common/test_autocoder_args.py +232 -0
  298. autocoder/common/test_env_manager.py +173 -0
  299. autocoder/common/test_env_manager_integration.py +159 -0
  300. autocoder/common/text_similarity/__init__.py +9 -0
  301. autocoder/common/text_similarity/demo.py +216 -0
  302. autocoder/common/text_similarity/examples.py +266 -0
  303. autocoder/common/text_similarity/test_text_similarity.py +306 -0
  304. autocoder/common/text_similarity/text_similarity.py +194 -0
  305. autocoder/common/text_similarity/utils.py +125 -0
  306. autocoder/common/todos/__init__.py +61 -0
  307. autocoder/common/todos/cache/__init__.py +16 -0
  308. autocoder/common/todos/cache/base_cache.py +89 -0
  309. autocoder/common/todos/cache/cache_manager.py +228 -0
  310. autocoder/common/todos/cache/memory_cache.py +225 -0
  311. autocoder/common/todos/config.py +155 -0
  312. autocoder/common/todos/exceptions.py +35 -0
  313. autocoder/common/todos/get_todo_manager.py +161 -0
  314. autocoder/common/todos/manager.py +537 -0
  315. autocoder/common/todos/models.py +239 -0
  316. autocoder/common/todos/storage/__init__.py +14 -0
  317. autocoder/common/todos/storage/base_storage.py +76 -0
  318. autocoder/common/todos/storage/file_storage.py +278 -0
  319. autocoder/common/tokens/counter.py +24 -2
  320. autocoder/common/tools_manager/__init__.py +17 -0
  321. autocoder/common/tools_manager/examples.py +162 -0
  322. autocoder/common/tools_manager/manager.py +385 -0
  323. autocoder/common/tools_manager/models.py +39 -0
  324. autocoder/common/tools_manager/test_tools_manager.py +303 -0
  325. autocoder/common/tools_manager/utils.py +191 -0
  326. autocoder/common/v2/agent/agentic_callbacks.py +270 -0
  327. autocoder/common/v2/agent/agentic_edit.py +2699 -1856
  328. autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
  329. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
  330. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
  331. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
  332. autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
  333. autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
  334. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
  335. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
  336. autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
  337. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +564 -29
  338. autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
  339. autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
  340. autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
  341. autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
  342. autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
  343. autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
  344. autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
  345. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
  346. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
  347. autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
  348. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +410 -86
  349. autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
  350. autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
  351. autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
  352. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +207 -192
  353. autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
  354. autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
  355. autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
  356. autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
  357. autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
  358. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
  359. autocoder/common/v2/agent/agentic_edit_types.py +343 -9
  360. autocoder/common/v2/agent/runner/__init__.py +3 -3
  361. autocoder/common/v2/agent/runner/base_runner.py +12 -26
  362. autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
  363. autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
  364. autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
  365. autocoder/common/v2/agent/runner/tool_display.py +557 -159
  366. autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
  367. autocoder/common/v2/agent/test_agentic_edit.py +194 -0
  368. autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
  369. autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
  370. autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
  371. autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
  372. autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
  373. autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
  374. autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
  375. autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
  376. autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
  377. autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
  378. autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
  379. autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
  380. autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
  381. autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
  382. autocoder/common/v2/code_auto_generate.py +136 -78
  383. autocoder/common/v2/code_auto_generate_diff.py +135 -79
  384. autocoder/common/v2/code_auto_generate_editblock.py +174 -99
  385. autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
  386. autocoder/common/v2/code_auto_merge.py +1 -1
  387. autocoder/common/v2/code_auto_merge_editblock.py +13 -1
  388. autocoder/common/v2/code_diff_manager.py +3 -3
  389. autocoder/common/v2/code_editblock_manager.py +4 -14
  390. autocoder/common/v2/code_manager.py +1 -1
  391. autocoder/common/v2/code_strict_diff_manager.py +2 -2
  392. autocoder/common/wrap_llm_hint/__init__.py +10 -0
  393. autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
  394. autocoder/common/wrap_llm_hint/utils.py +432 -0
  395. autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
  396. autocoder/completer/__init__.py +8 -0
  397. autocoder/completer/command_completer_v2.py +1051 -0
  398. autocoder/default_project/__init__.py +501 -0
  399. autocoder/dispacher/__init__.py +4 -12
  400. autocoder/dispacher/actions/action.py +165 -7
  401. autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
  402. autocoder/index/entry.py +116 -124
  403. autocoder/{agent → index/filter}/agentic_filter.py +322 -333
  404. autocoder/index/filter/normal_filter.py +5 -11
  405. autocoder/index/filter/quick_filter.py +1 -1
  406. autocoder/index/index.py +36 -9
  407. autocoder/index/tests/__init__.py +1 -0
  408. autocoder/index/tests/run_tests.py +195 -0
  409. autocoder/index/tests/test_entry.py +303 -0
  410. autocoder/index/tests/test_index_manager.py +314 -0
  411. autocoder/index/tests/test_module_integration.py +300 -0
  412. autocoder/index/tests/test_symbols_utils.py +183 -0
  413. autocoder/inner/__init__.py +4 -0
  414. autocoder/inner/agentic.py +932 -0
  415. autocoder/inner/async_command_handler.py +992 -0
  416. autocoder/inner/conversation_command_handlers.py +623 -0
  417. autocoder/inner/merge_command_handler.py +213 -0
  418. autocoder/inner/queue_command_handler.py +684 -0
  419. autocoder/models.py +95 -266
  420. autocoder/plugins/git_helper_plugin.py +31 -29
  421. autocoder/plugins/token_helper_plugin.py +65 -46
  422. autocoder/pyproject/__init__.py +32 -29
  423. autocoder/rag/agentic_rag.py +215 -75
  424. autocoder/rag/cache/simple_cache.py +1 -2
  425. autocoder/rag/loaders/image_loader.py +1 -1
  426. autocoder/rag/long_context_rag.py +42 -26
  427. autocoder/rag/qa_conversation_strategy.py +1 -1
  428. autocoder/rag/terminal/__init__.py +17 -0
  429. autocoder/rag/terminal/args.py +581 -0
  430. autocoder/rag/terminal/bootstrap.py +61 -0
  431. autocoder/rag/terminal/command_handlers.py +653 -0
  432. autocoder/rag/terminal/formatters/__init__.py +20 -0
  433. autocoder/rag/terminal/formatters/base.py +70 -0
  434. autocoder/rag/terminal/formatters/json_format.py +66 -0
  435. autocoder/rag/terminal/formatters/stream_json.py +95 -0
  436. autocoder/rag/terminal/formatters/text.py +28 -0
  437. autocoder/rag/terminal/init.py +120 -0
  438. autocoder/rag/terminal/utils.py +106 -0
  439. autocoder/rag/test_agentic_rag.py +389 -0
  440. autocoder/rag/test_doc_filter.py +3 -3
  441. autocoder/rag/test_long_context_rag.py +1 -1
  442. autocoder/rag/test_token_limiter.py +517 -10
  443. autocoder/rag/token_counter.py +3 -0
  444. autocoder/rag/token_limiter.py +19 -15
  445. autocoder/rag/tools/__init__.py +26 -2
  446. autocoder/rag/tools/bochaai_example.py +343 -0
  447. autocoder/rag/tools/bochaai_sdk.py +541 -0
  448. autocoder/rag/tools/metaso_example.py +268 -0
  449. autocoder/rag/tools/metaso_sdk.py +417 -0
  450. autocoder/rag/tools/recall_tool.py +28 -7
  451. autocoder/rag/tools/run_integration_tests.py +204 -0
  452. autocoder/rag/tools/test_all_providers.py +318 -0
  453. autocoder/rag/tools/test_bochaai_integration.py +482 -0
  454. autocoder/rag/tools/test_final_integration.py +215 -0
  455. autocoder/rag/tools/test_metaso_integration.py +424 -0
  456. autocoder/rag/tools/test_metaso_real.py +171 -0
  457. autocoder/rag/tools/test_web_crawl_tool.py +639 -0
  458. autocoder/rag/tools/test_web_search_tool.py +509 -0
  459. autocoder/rag/tools/todo_read_tool.py +202 -0
  460. autocoder/rag/tools/todo_write_tool.py +412 -0
  461. autocoder/rag/tools/web_crawl_tool.py +634 -0
  462. autocoder/rag/tools/web_search_tool.py +558 -0
  463. autocoder/rag/tools/web_tools_example.py +119 -0
  464. autocoder/rag/types.py +16 -0
  465. autocoder/rag/variable_holder.py +4 -2
  466. autocoder/rags.py +86 -79
  467. autocoder/regexproject/__init__.py +23 -21
  468. autocoder/sdk/__init__.py +46 -190
  469. autocoder/sdk/api.py +370 -0
  470. autocoder/sdk/async_runner/__init__.py +26 -0
  471. autocoder/sdk/async_runner/async_executor.py +650 -0
  472. autocoder/sdk/async_runner/async_handler.py +356 -0
  473. autocoder/sdk/async_runner/markdown_processor.py +595 -0
  474. autocoder/sdk/async_runner/task_metadata.py +284 -0
  475. autocoder/sdk/async_runner/worktree_manager.py +438 -0
  476. autocoder/sdk/cli/__init__.py +2 -5
  477. autocoder/sdk/cli/formatters.py +28 -204
  478. autocoder/sdk/cli/handlers.py +77 -44
  479. autocoder/sdk/cli/main.py +154 -171
  480. autocoder/sdk/cli/options.py +95 -22
  481. autocoder/sdk/constants.py +139 -51
  482. autocoder/sdk/core/auto_coder_core.py +484 -109
  483. autocoder/sdk/core/bridge.py +297 -115
  484. autocoder/sdk/exceptions.py +18 -12
  485. autocoder/sdk/formatters/__init__.py +19 -0
  486. autocoder/sdk/formatters/input.py +64 -0
  487. autocoder/sdk/formatters/output.py +247 -0
  488. autocoder/sdk/formatters/stream.py +54 -0
  489. autocoder/sdk/models/__init__.py +6 -5
  490. autocoder/sdk/models/options.py +55 -18
  491. autocoder/sdk/utils/formatters.py +27 -195
  492. autocoder/suffixproject/__init__.py +28 -25
  493. autocoder/terminal/__init__.py +14 -0
  494. autocoder/terminal/app.py +454 -0
  495. autocoder/terminal/args.py +32 -0
  496. autocoder/terminal/bootstrap.py +178 -0
  497. autocoder/terminal/command_processor.py +521 -0
  498. autocoder/terminal/command_registry.py +57 -0
  499. autocoder/terminal/help.py +97 -0
  500. autocoder/terminal/tasks/__init__.py +5 -0
  501. autocoder/terminal/tasks/background.py +77 -0
  502. autocoder/terminal/tasks/task_event.py +70 -0
  503. autocoder/terminal/ui/__init__.py +13 -0
  504. autocoder/terminal/ui/completer.py +268 -0
  505. autocoder/terminal/ui/keybindings.py +75 -0
  506. autocoder/terminal/ui/session.py +41 -0
  507. autocoder/terminal/ui/toolbar.py +64 -0
  508. autocoder/terminal/utils/__init__.py +13 -0
  509. autocoder/terminal/utils/errors.py +18 -0
  510. autocoder/terminal/utils/paths.py +19 -0
  511. autocoder/terminal/utils/shell.py +43 -0
  512. autocoder/terminal_v3/__init__.py +10 -0
  513. autocoder/terminal_v3/app.py +201 -0
  514. autocoder/terminal_v3/handlers/__init__.py +5 -0
  515. autocoder/terminal_v3/handlers/command_handler.py +131 -0
  516. autocoder/terminal_v3/models/__init__.py +6 -0
  517. autocoder/terminal_v3/models/conversation_buffer.py +214 -0
  518. autocoder/terminal_v3/models/message.py +50 -0
  519. autocoder/terminal_v3/models/tool_display.py +247 -0
  520. autocoder/terminal_v3/ui/__init__.py +7 -0
  521. autocoder/terminal_v3/ui/keybindings.py +56 -0
  522. autocoder/terminal_v3/ui/layout.py +141 -0
  523. autocoder/terminal_v3/ui/styles.py +43 -0
  524. autocoder/tsproject/__init__.py +23 -23
  525. autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
  526. autocoder/utils/llms.py +88 -80
  527. autocoder/utils/math_utils.py +101 -0
  528. autocoder/utils/model_provider_selector.py +16 -4
  529. autocoder/utils/operate_config_api.py +33 -5
  530. autocoder/utils/thread_utils.py +2 -2
  531. autocoder/version.py +4 -2
  532. autocoder/workflow_agents/__init__.py +84 -0
  533. autocoder/workflow_agents/agent.py +143 -0
  534. autocoder/workflow_agents/exceptions.py +573 -0
  535. autocoder/workflow_agents/executor.py +489 -0
  536. autocoder/workflow_agents/loader.py +737 -0
  537. autocoder/workflow_agents/runner.py +267 -0
  538. autocoder/workflow_agents/types.py +172 -0
  539. autocoder/workflow_agents/utils.py +434 -0
  540. autocoder/workflow_agents/workflow_manager.py +211 -0
  541. auto_coder-1.0.0.dist-info/METADATA +0 -396
  542. auto_coder-1.0.0.dist-info/RECORD +0 -442
  543. auto_coder-1.0.0.dist-info/licenses/LICENSE +0 -201
  544. autocoder/auto_coder_server.py +0 -672
  545. autocoder/benchmark.py +0 -138
  546. autocoder/common/ac_style_command_parser/example.py +0 -7
  547. autocoder/common/cleaner.py +0 -31
  548. autocoder/common/command_completer_v2.py +0 -615
  549. autocoder/common/context_pruner.py +0 -477
  550. autocoder/common/conversation_pruner.py +0 -132
  551. autocoder/common/directory_cache/__init__.py +0 -1
  552. autocoder/common/directory_cache/cache.py +0 -192
  553. autocoder/common/directory_cache/test_cache.py +0 -190
  554. autocoder/common/file_checkpoint/examples.py +0 -217
  555. autocoder/common/llm_friendly_package_example.py +0 -138
  556. autocoder/common/llm_friendly_package_test.py +0 -63
  557. autocoder/common/pull_requests/test_module.py +0 -1
  558. autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
  559. autocoder/common/text.py +0 -30
  560. autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
  561. autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
  562. autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
  563. autocoder/common/v2/agent/agentic_tool_display.py +0 -183
  564. autocoder/plugins/dynamic_completion_example.py +0 -148
  565. autocoder/plugins/sample_plugin.py +0 -160
  566. autocoder/sdk/cli/__main__.py +0 -26
  567. autocoder/sdk/cli/completion_wrapper.py +0 -38
  568. autocoder/sdk/cli/install_completion.py +0 -301
  569. autocoder/sdk/models/messages.py +0 -209
  570. autocoder/sdk/session/__init__.py +0 -32
  571. autocoder/sdk/session/session.py +0 -106
  572. autocoder/sdk/session/session_manager.py +0 -56
  573. {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
  574. /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
autocoder/utils/llms.py CHANGED
@@ -1,32 +1,75 @@
1
1
  import byzerllm
2
- from typing import Union,Optional
2
+ from typing import Union, Optional, List
3
3
 
4
- def get_llm_names(llm: Union[byzerllm.ByzerLLM, byzerllm.SimpleByzerLLM,str],target_model_type:Optional[str]=None):
5
- if target_model_type is None:
6
- if isinstance(llm,list):
7
- return [_llm.default_model_name for _llm in llm]
8
- return [llm.default_model_name for llm in [llm] if llm.default_model_name]
9
-
10
- llms = llm.get_sub_client(target_model_type)
4
+ # Import the new LLM module
5
+ from autocoder.common.llms import LLMManager
6
+
7
+ # Global LLM manager instance
8
+ _llm_manager = None
9
+
10
+ def _get_llm_manager() -> LLMManager:
11
+ """Get or create the global LLM manager instance"""
12
+ global _llm_manager
13
+ if _llm_manager is None:
14
+ _llm_manager = LLMManager()
15
+ return _llm_manager
16
+
17
+ def get_llm_names(llm: Union[byzerllm.ByzerLLM, byzerllm.SimpleByzerLLM, str, List],
18
+ target_model_type: Optional[str] = None) -> List[str]:
19
+ """
20
+ Get LLM model names from various input types
21
+
22
+ Args:
23
+ llm: LLM instance, model name string, or list of LLMs
24
+ target_model_type: Optional target model type filter
25
+
26
+ Returns:
27
+ List of model names
28
+ """
29
+ if target_model_type is None:
30
+ if isinstance(llm, list):
31
+ return [_llm.default_model_name for _llm in llm if hasattr(_llm, 'default_model_name') and _llm.default_model_name]
32
+ elif isinstance(llm, str):
33
+ return llm.split(",") if llm else []
34
+ elif hasattr(llm, 'default_model_name') and llm.default_model_name:
35
+ return [llm.default_model_name]
36
+ else:
37
+ return []
11
38
 
12
- if llms is None:
13
- if isinstance(llm,list):
14
- return [_llm.default_model_name for _llm in llm]
15
- return [llm.default_model_name for llm in [llm] if llm.default_model_name]
16
- elif isinstance(llms, list):
17
- return [llm.default_model_name for llm in llms if llm.default_model_name]
18
- elif isinstance(llms,str) and llms:
19
- return llms.split(",")
20
- else:
21
- return [llm.default_model_name for llm in [llms] if llm.default_model_name]
39
+ # Handle target_model_type case
40
+ if not isinstance(llm, (str, list)) and hasattr(llm, 'get_sub_client'):
41
+ llms = llm.get_sub_client(target_model_type)
42
+
43
+ if llms is None:
44
+ if isinstance(llm, list):
45
+ return [_llm.default_model_name for _llm in llm if hasattr(_llm, 'default_model_name') and _llm.default_model_name]
46
+ elif hasattr(llm, 'default_model_name') and llm.default_model_name:
47
+ return [llm.default_model_name]
48
+ else:
49
+ return []
50
+ elif isinstance(llms, list):
51
+ return [_llm.default_model_name for _llm in llms if hasattr(_llm, 'default_model_name') and _llm.default_model_name]
52
+ elif isinstance(llms, str) and llms:
53
+ return llms.split(",")
54
+ elif hasattr(llms, 'default_model_name') and llms.default_model_name:
55
+ return [llms.default_model_name]
56
+ else:
57
+ return []
58
+
59
+ return []
22
60
 
23
- def get_model_info(model_names: str, product_mode: str):
24
- from autocoder import models as models_module
25
- def get_model_by_name(model_name: str):
26
- try:
27
- return models_module.get_model_by_name(model_name)
28
- except Exception as e:
29
- return None
61
+ def get_model_info(model_names: str, product_mode: str):
62
+ """
63
+ Get model information using the new LLM module
64
+
65
+ Args:
66
+ model_names: Comma-separated model names or single model name
67
+ product_mode: Product mode ("pro" or "lite")
68
+
69
+ Returns:
70
+ Model info dictionary or None
71
+ """
72
+ manager = _get_llm_manager()
30
73
 
31
74
  if product_mode == "pro":
32
75
  return None
@@ -34,62 +77,27 @@ def get_model_info(model_names: str, product_mode: str):
34
77
  if product_mode == "lite":
35
78
  if "," in model_names:
36
79
  # Multiple code models specified
37
- model_names = model_names.split(",")
38
- for _, model_name in enumerate(model_names):
39
- return get_model_by_name(model_name)
80
+ names = model_names.split(",")
81
+ for model_name in names:
82
+ model_name = model_name.strip()
83
+ model_info = manager.get_model_info(model_name, product_mode)
84
+ if model_info:
85
+ return model_info
86
+ return None
40
87
  else:
41
88
  # Single code model
42
- return get_model_by_name(model_names)
89
+ return manager.get_model_info(model_names.strip(), product_mode)
43
90
 
44
91
  def get_single_llm(model_names: str, product_mode: str):
45
- from autocoder import models as models_module
46
- if product_mode == "pro":
47
- if "," in model_names:
48
- # Multiple code models specified
49
- model_names = model_names.split(",")
50
- for _, model_name in enumerate(model_names):
51
- return byzerllm.ByzerLLM.from_default_model(model_name)
52
- else:
53
- # Single code model
54
- return byzerllm.ByzerLLM.from_default_model(model_names)
55
-
56
- if product_mode == "lite":
57
- if "," in model_names:
58
- # Multiple code models specified
59
- model_names = model_names.split(",")
60
- for _, model_name in enumerate(model_names):
61
- model_name = model_name.strip()
62
- model_info = models_module.get_model_by_name(model_name)
63
- target_llm = byzerllm.SimpleByzerLLM(default_model_name=model_name)
64
- target_llm.deploy(
65
- model_path="",
66
- pretrained_model_type=model_info["model_type"],
67
- udf_name=model_name,
68
- infer_params={
69
- "saas.base_url": model_info["base_url"],
70
- "saas.api_key": model_info["api_key"],
71
- "saas.model": model_info["model_name"],
72
- "saas.is_reasoning": model_info["is_reasoning"],
73
- "saas.max_output_tokens": model_info.get("max_output_tokens", 8096)
74
- }
75
- )
76
- return target_llm
77
-
78
- else:
79
- # Single code model
80
- model_info = models_module.get_model_by_name(model_names)
81
- model_name = model_names
82
- target_llm = byzerllm.SimpleByzerLLM(default_model_name=model_name)
83
- target_llm.deploy(
84
- model_path="",
85
- pretrained_model_type=model_info["model_type"],
86
- udf_name=model_name,
87
- infer_params={
88
- "saas.base_url": model_info["base_url"],
89
- "saas.api_key": model_info["api_key"],
90
- "saas.model": model_info["model_name"],
91
- "saas.is_reasoning": model_info["is_reasoning"],
92
- "saas.max_output_tokens": model_info.get("max_output_tokens", 8096)
93
- }
94
- )
95
- return target_llm
92
+ """
93
+ Get a single LLM instance using the new LLM module
94
+
95
+ Args:
96
+ model_names: Comma-separated model names or single model name
97
+ product_mode: Product mode ("pro" or "lite")
98
+
99
+ Returns:
100
+ LLM instance or None
101
+ """
102
+ manager = _get_llm_manager()
103
+ return manager.get_single_llm(model_names, product_mode)
@@ -0,0 +1,101 @@
1
+ """
2
+ 简单的数学工具函数模块
3
+
4
+ 提供基础的数学计算功能,包括:
5
+ - 计算两个数字的和
6
+ - 计算数字的平方
7
+ - 判断是否为偶数
8
+ - 计算阶乘
9
+ """
10
+
11
+ from typing import Union
12
+
13
+
14
+ def add_numbers(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
15
+ """
16
+ 计算两个数字的和
17
+
18
+ Args:
19
+ a: 第一个数字
20
+ b: 第二个数字
21
+
22
+ Returns:
23
+ 两个数字的和
24
+
25
+ Examples:
26
+ >>> add_numbers(2, 3)
27
+ 5
28
+ >>> add_numbers(2.5, 3.7)
29
+ 6.2
30
+ """
31
+ return a + b
32
+
33
+
34
+ def square(x: Union[int, float]) -> Union[int, float]:
35
+ """
36
+ 计算数字的平方
37
+
38
+ Args:
39
+ x: 要计算平方的数字
40
+
41
+ Returns:
42
+ x 的平方值
43
+
44
+ Examples:
45
+ >>> square(4)
46
+ 16
47
+ >>> square(2.5)
48
+ 6.25
49
+ """
50
+ return x * x
51
+
52
+
53
+ def is_even(n: int) -> bool:
54
+ """
55
+ 判断一个整数是否为偶数
56
+
57
+ Args:
58
+ n: 要判断的整数
59
+
60
+ Returns:
61
+ 如果是偶数返回 True,否则返回 False
62
+
63
+ Examples:
64
+ >>> is_even(4)
65
+ True
66
+ >>> is_even(5)
67
+ False
68
+ """
69
+ return n % 2 == 0
70
+
71
+
72
+ def factorial(n: int) -> int:
73
+ """
74
+ 计算正整数的阶乘
75
+
76
+ Args:
77
+ n: 要计算阶乘的正整数
78
+
79
+ Returns:
80
+ n 的阶乘值
81
+
82
+ Raises:
83
+ ValueError: 当 n 为负数时抛出异常
84
+
85
+ Examples:
86
+ >>> factorial(5)
87
+ 120
88
+ >>> factorial(0)
89
+ 1
90
+ """
91
+ if n < 0:
92
+ raise ValueError("阶乘只能计算非负整数")
93
+
94
+ if n == 0 or n == 1:
95
+ return 1
96
+
97
+ result = 1
98
+ for i in range(2, n + 1):
99
+ result *= i
100
+
101
+ return result
@@ -7,7 +7,7 @@ from autocoder.common.printer import Printer
7
7
  import re
8
8
  from pydantic import BaseModel
9
9
 
10
- from autocoder.models import process_api_key_path
10
+ from autocoder.common.llms import LLMManager
11
11
 
12
12
  class ProviderInfo(BaseModel):
13
13
  name: str
@@ -97,6 +97,7 @@ class ModelProviderSelector:
97
97
  def __init__(self):
98
98
  self.printer = Printer()
99
99
  self.console = Console()
100
+ self.llm_manager = LLMManager()
100
101
 
101
102
  def to_models_json(self, provider_info: ProviderInfo) -> List[Dict[str, Any]]:
102
103
  """
@@ -124,7 +125,9 @@ class ModelProviderSelector:
124
125
  "is_reasoning": True,
125
126
  "input_price": provider_info.r1_input_price,
126
127
  "output_price": provider_info.r1_output_price,
127
- "average_speed": 0.0
128
+ "average_speed": 0.0,
129
+ "context_window": 32768,
130
+ "max_output_tokens": 8096
128
131
  })
129
132
 
130
133
  # Add V3 model (for coding)
@@ -140,7 +143,9 @@ class ModelProviderSelector:
140
143
  "is_reasoning": False,
141
144
  "input_price": provider_info.v3_input_price,
142
145
  "output_price": provider_info.v3_output_price,
143
- "average_speed": 0.0
146
+ "average_speed": 0.0,
147
+ "context_window": 32768,
148
+ "max_output_tokens": 8096
144
149
  })
145
150
 
146
151
  return models
@@ -174,6 +179,9 @@ class ModelProviderSelector:
174
179
  provider_info = provider
175
180
  break
176
181
 
182
+ if provider_info is None:
183
+ return None
184
+
177
185
  # if result == "volcano":
178
186
  # # Get R1 endpoint
179
187
  # r1_endpoint = input_dialog(
@@ -214,6 +222,10 @@ class ModelProviderSelector:
214
222
 
215
223
  provider_info.api_key = api_key
216
224
 
225
+ # 使用新的 LLMManager 添加模型
226
+ models_to_add = self.to_models_json(provider_info)
227
+ self.llm_manager.add_models(models_to_add) # type: ignore
228
+
217
229
  self.printer.print_panel(
218
230
  self.printer.get_message_from_key("model_provider_selected"),
219
231
  text_options={"justify": "left"},
@@ -223,4 +235,4 @@ class ModelProviderSelector:
223
235
  }
224
236
  )
225
237
 
226
- return provider_info
238
+ return provider_info.dict()
@@ -3,6 +3,7 @@ import os
3
3
  import uuid
4
4
  import byzerllm
5
5
  from autocoder.common import AutoCoderArgs
6
+ from autocoder.common.autocoderargs_parser import AutoCoderArgsParser
6
7
  from typing import List, Optional
7
8
  import yaml
8
9
  from autocoder.auto_coder import AutoCoderArgs, load_include_files, Template
@@ -58,14 +59,41 @@ def get_llm_friendly_package_docs(memory,
58
59
 
59
60
 
60
61
  def convert_config_value(key, value):
62
+ # 定义需要使用 token 解析的字段
63
+ token_fields = {
64
+ 'conversation_prune_safe_zone_tokens',
65
+ 'context_prune_safe_zone_tokens',
66
+ 'context_prune_sliding_window_size',
67
+ 'context_prune_sliding_window_overlap',
68
+ 'rag_params_max_tokens',
69
+ 'rag_context_window_limit',
70
+ 'rag_duckdb_vector_dim',
71
+ 'rag_duckdb_query_top_k',
72
+ 'rag_emb_dim',
73
+ 'rag_emb_text_size',
74
+ 'hybrid_index_max_output_tokens',
75
+ 'data_cells_max_num',
76
+ }
77
+
61
78
  field_info = AutoCoderArgs.model_fields.get(key)
62
79
  if field_info:
63
- if value.lower() in ["true", "false"]:
80
+ # 对于需要 token 解析的字段,使用 AutoCoderArgsParser
81
+ if key in token_fields:
82
+ try:
83
+ parser = AutoCoderArgsParser()
84
+ return parser.parse_token_field(key, value)
85
+ except Exception as e:
86
+ print(f"Warning: Failed to parse token field '{key}' with value '{value}': {e}")
87
+ # 如果解析失败,fallback 到原有逻辑
88
+ pass
89
+
90
+ # 原有的类型转换逻辑
91
+ if isinstance(value, str) and value.lower() in ["true", "false"]:
64
92
  return value.lower() == "true"
65
- elif "int" in str(field_info.annotation):
66
- return int(value)
67
93
  elif "float" in str(field_info.annotation):
68
- return float(value)
94
+ return float(value)
95
+ elif "int" in str(field_info.annotation):
96
+ return int(value)
69
97
  else:
70
98
  return value
71
99
  else:
@@ -90,7 +118,7 @@ def get_llm(memory, model:Optional[str]=None):
90
118
  "skip_build_index": conf.get("skip_build_index", "true") == "true",
91
119
  "skip_confirm": conf.get("skip_confirm", "true") == "true",
92
120
  "silence": conf.get("silence", "true") == "true",
93
- "include_project_structure": conf.get("include_project_structure", "true")
121
+ "include_project_structure": conf.get("include_project_structure", "false")
94
122
  == "true",
95
123
  }
96
124
  for key, value in conf.items():
@@ -1,5 +1,5 @@
1
1
  from functools import wraps
2
- from typing import Any, Optional, Dict, Callable
2
+ from typing import Any, Optional, Dict, Callable, List
3
3
  import threading
4
4
  import time
5
5
  from autocoder.common.global_cancel import global_cancel, CancelRequestedException
@@ -36,7 +36,7 @@ def run_in_raw_thread(token: Optional[str] = None, context: Optional[Dict[str, A
36
36
  def wrapper(*args, **kwargs):
37
37
  # Store thread results
38
38
  result = []
39
- exception_raised = [None] # 存储工作线程中的异常
39
+ exception_raised: List[Optional[Exception]] = [None] # 存储工作线程中的异常
40
40
  thread_terminated = threading.Event() # 用于标记线程是否已终止
41
41
 
42
42
  def worker():
autocoder/version.py CHANGED
@@ -1,2 +1,4 @@
1
- __version__ = "1.0.0"
2
-
1
+ # This file is auto-generated by Hatchling. As such, do not:
2
+ # - modify
3
+ # - track in version control e.g. be sure to add to .gitignore
4
+ __version__ = '2.0.0'
@@ -0,0 +1,84 @@
1
+ """
2
+ Workflow Agents - 子代理编排系统
3
+
4
+ 提供基于 YAML 配置的多子代理编排功能,支持:
5
+ - DAG 拓扑顺序执行
6
+ - 条件判断(正则/JSONPath)
7
+ - 输出映射与跨步骤数据传递
8
+ - 会话共享策略
9
+ - 基于 SdkRunner/TerminalRunner 的代理执行
10
+ """
11
+
12
+ from autocoder.workflow_agents.types import (
13
+ WorkflowSpec,
14
+ GlobalsConfig,
15
+ ConversationConfig,
16
+ AttemptConfig,
17
+ AgentSpec,
18
+ StepSpec,
19
+ WhenConfig,
20
+ OutputConfig,
21
+ StepResult,
22
+ StepStatus,
23
+ WorkflowResult,
24
+ )
25
+ from autocoder.workflow_agents.agent import WorkflowSubAgent
26
+ from autocoder.workflow_agents.executor import SubagentWorkflowExecutor
27
+ from autocoder.workflow_agents.loader import load_workflow_from_yaml
28
+ from autocoder.workflow_agents.runner import (
29
+ run_workflow_from_yaml,
30
+ print_workflow_result,
31
+ list_available_workflows,
32
+ )
33
+ from autocoder.workflow_agents.workflow_manager import WorkflowManager
34
+ from autocoder.workflow_agents.exceptions import (
35
+ WorkflowError,
36
+ WorkflowValidationError,
37
+ WorkflowFileNotFoundError,
38
+ WorkflowParseError,
39
+ WorkflowStepError,
40
+ WorkflowDependencyError,
41
+ WorkflowAgentNotFoundError,
42
+ WorkflowTemplateError,
43
+ WorkflowAgentDefinitionError,
44
+ WorkflowConversationError,
45
+ WorkflowConditionError,
46
+ WorkflowOutputExtractionError,
47
+ )
48
+
49
+ __all__ = [
50
+ # 类型定义
51
+ "WorkflowSpec",
52
+ "GlobalsConfig",
53
+ "ConversationConfig",
54
+ "AttemptConfig",
55
+ "AgentSpec",
56
+ "StepSpec",
57
+ "WhenConfig",
58
+ "OutputConfig",
59
+ "StepResult",
60
+ "StepStatus",
61
+ "WorkflowResult",
62
+ # 核心类
63
+ "WorkflowSubAgent",
64
+ "SubagentWorkflowExecutor",
65
+ "WorkflowManager",
66
+ # 加载器和运行器
67
+ "load_workflow_from_yaml",
68
+ "run_workflow_from_yaml",
69
+ "print_workflow_result",
70
+ "list_available_workflows",
71
+ # 异常类
72
+ "WorkflowError",
73
+ "WorkflowValidationError",
74
+ "WorkflowFileNotFoundError",
75
+ "WorkflowParseError",
76
+ "WorkflowStepError",
77
+ "WorkflowDependencyError",
78
+ "WorkflowAgentNotFoundError",
79
+ "WorkflowTemplateError",
80
+ "WorkflowAgentDefinitionError",
81
+ "WorkflowConversationError",
82
+ "WorkflowConditionError",
83
+ "WorkflowOutputExtractionError",
84
+ ]
@@ -0,0 +1,143 @@
1
+ """
2
+ Workflow Sub-Agent 实现
3
+
4
+ 提供基于 SdkRunner 和 TerminalRunner 的子代理执行能力。
5
+ """
6
+
7
+ from typing import Optional, Union, Any
8
+ from copy import deepcopy
9
+ from loguru import logger
10
+
11
+ from autocoder.common.v2.agent.agentic_edit import AgenticEditRequest
12
+ from autocoder.common.v2.agent.agentic_edit_types import (
13
+ AgenticEditConversationConfig,
14
+ CompletionEvent,
15
+ AttemptCompletionTool,
16
+ )
17
+ from autocoder.common.v2.agent.runner import SdkRunner, TerminalRunner
18
+ from autocoder.common import AutoCoderArgs
19
+ from autocoder.inner.agentic import RunAgentic
20
+
21
+
22
+ class WorkflowSubAgent:
23
+ """
24
+ Workflow 子代理
25
+
26
+ 每个子代理对应一个特定的 agent 配置,支持使用 SdkRunner 或 TerminalRunner 执行用户输入。
27
+ """
28
+
29
+ def __init__(
30
+ self,
31
+ agent_id: str,
32
+ model: Optional[str],
33
+ system_prompt: Optional[str],
34
+ retry: int,
35
+ timeout_sec: int,
36
+ runner_type: str = "sdk",
37
+ include_rules: bool = False,
38
+ ) -> None:
39
+ """
40
+ 初始化子代理
41
+
42
+ Args:
43
+ agent_id: 代理 ID
44
+ model: 模型名称(可选,使用全局默认)
45
+ system_prompt: 系统提示词
46
+ retry: 重试次数
47
+ timeout_sec: 超时时间(秒)
48
+ runner_type: 运行器类型(sdk | terminal)
49
+ include_rules: 是否包含规则上下文
50
+ """
51
+ self.agent_id = agent_id
52
+ self.model = model
53
+ self.system_prompt = system_prompt
54
+ self.retry = retry
55
+ self.timeout_sec = timeout_sec
56
+ self.runner_type = runner_type
57
+ self.include_rules = include_rules
58
+
59
+ def run(
60
+ self,
61
+ user_input: str,
62
+ conversation_config: Optional[AgenticEditConversationConfig],
63
+ args: AutoCoderArgs,
64
+ llm: Any,
65
+ cancel_token: Optional[str] = None,
66
+ ) -> Optional[AttemptCompletionTool]:
67
+ """
68
+ 运行子代理
69
+
70
+ Args:
71
+ user_input: 用户输入
72
+ conversation_config: 会话配置
73
+ args: AutoCoderArgs 配置
74
+ llm: LLM 实例
75
+ cancel_token: 取消令牌,用于支持任务取消
76
+
77
+ Returns:
78
+ AttemptCompletionTool 对象(两种 Runner 返回统一接口)
79
+ 如果失败则返回 None
80
+ """
81
+ try:
82
+ # 深拷贝 args 避免修改原始对象
83
+ agent_args = deepcopy(args)
84
+
85
+ # 配置模型
86
+ if self.model:
87
+ agent_args.code_model = self.model
88
+ agent_args.model = self.model
89
+
90
+ # 配置 include_rules
91
+ if hasattr(agent_args, "skip_build_index"):
92
+ # 如果 include_rules 为 True,需要确保不跳过索引构建
93
+ if self.include_rules:
94
+ agent_args.skip_build_index = False
95
+ agent_args.skip_filter_index = False
96
+ logger.debug(
97
+ f"代理 {self.agent_id} 启用规则上下文,skip_build_index=False"
98
+ )
99
+ else:
100
+ # 保持默认行为
101
+ pass
102
+
103
+ # 根据 runner_type 选择不同的 runner
104
+ if self.runner_type == "terminal":
105
+ # 使用 TerminalRunner
106
+ runner = TerminalRunner(
107
+ llm=llm,
108
+ args=agent_args,
109
+ conversation_config=conversation_config,
110
+ cancel_token=cancel_token,
111
+ system_prompt=self.system_prompt,
112
+ )
113
+
114
+ # TerminalRunner.run() 直接返回 attempt_result 字符串
115
+ attempt_result = runner.run(AgenticEditRequest(user_input=user_input))
116
+
117
+ # 为了统一接口,将字符串包装为 AttemptCompletionTool 对象
118
+ return AttemptCompletionTool(result=attempt_result, command=None)
119
+
120
+ else:
121
+ # 使用 SdkRunner(默认)
122
+ runner = SdkRunner(
123
+ llm=llm,
124
+ args=agent_args,
125
+ conversation_config=conversation_config,
126
+ cancel_token=cancel_token,
127
+ system_prompt=self.system_prompt,
128
+ )
129
+
130
+ # 执行并监听事件
131
+ attempt_completion = None
132
+ events = runner.run(AgenticEditRequest(user_input=user_input))
133
+
134
+ for event in events:
135
+ if isinstance(event, CompletionEvent):
136
+ attempt_completion = event.completion
137
+ break
138
+
139
+ return attempt_completion
140
+
141
+ except Exception as e:
142
+ logger.error(f"WorkflowSubAgent {self.agent_id} 运行失败: {str(e)}")
143
+ return None