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
autocoder/sdk/__init__.py CHANGED
@@ -4,14 +4,9 @@ Auto-Coder SDK
4
4
  为第三方开发者提供的 Python SDK,允许通过命令行工具和 Python API 两种方式使用 Auto-Coder 的核心功能。
5
5
  """
6
6
 
7
- from typing import AsyncIterator, Optional, Dict, Any
8
-
9
- from .core.auto_coder_core import AutoCoderCore
7
+ # 导入数据模型和异常
10
8
  from .models.options import AutoCodeOptions
11
- from .models.messages import Message
12
9
  from .models.responses import StreamEvent, CodeModificationResult
13
- from .session.session import Session
14
- from .session.session_manager import SessionManager
15
10
  from .exceptions import (
16
11
  AutoCoderSDKError,
17
12
  SessionNotFoundError,
@@ -20,169 +15,63 @@ from .exceptions import (
20
15
  ValidationError
21
16
  )
22
17
 
23
- __version__ = "1.0.0"
18
+ # 导入所有 API 函数
19
+ from .api import (
20
+ # 新的清晰 API
21
+ auto_code_stream,
22
+ auto_code,
23
+ auto_code_events_stream,
24
+ auto_code_events,
25
+
26
+ # 工具函数
27
+ initialize_project,
28
+ configure_model,
29
+ get_language_model,
30
+ commit_changes,
31
+ cancel_task,
32
+
33
+ # 向后兼容的旧 API(带弃用警告)
34
+ query,
35
+ query_sync,
36
+ query_with_events,
37
+ query_with_events_sync,
38
+ init_project_if_required,
39
+ configure,
40
+ get_llm,
41
+ commit,
42
+ )
43
+
44
+
45
+ __version__ = "1.7.7"
24
46
  __all__ = [
25
- # 核心功能
26
- "query",
27
- "query_sync",
28
- "modify_code",
29
- "modify_code_stream",
47
+ # 新的清晰 API
48
+ "auto_code_stream",
49
+ "auto_code",
50
+ "auto_code_events_stream",
51
+ "auto_code_events",
52
+ "initialize_project",
53
+ "configure_model",
54
+ "get_language_model",
55
+ "commit_changes",
56
+ "cancel_task",
30
57
 
31
- # 数据模型
58
+ # 数据模型和异常
32
59
  "AutoCodeOptions",
33
- "Message",
34
60
  "StreamEvent",
35
61
  "CodeModificationResult",
36
-
37
- # 会话管理
38
- "Session",
39
- "SessionManager",
40
-
41
- # 异常
42
62
  "AutoCoderSDKError",
43
63
  "SessionNotFoundError",
44
64
  "InvalidOptionsError",
45
65
  "BridgeError",
46
66
  "ValidationError",
47
- ]
48
-
49
-
50
- async def query(
51
- prompt: str,
52
- options: Optional[AutoCodeOptions] = None,
53
- show_terminal: bool = True
54
- ) -> AsyncIterator[Message]:
55
- """
56
- 异步流式查询接口
57
67
 
58
- Args:
59
- prompt: 查询提示
60
- options: 配置选项
61
- show_terminal: 是否在终端显示友好的渲染输出
62
-
63
- Yields:
64
- Message: 响应消息流
65
-
66
- Example:
67
- >>> import asyncio
68
- >>> from autocoder.sdk import query, AutoCodeOptions
69
- >>>
70
- >>> async def main():
71
- ... options = AutoCodeOptions(max_turns=3)
72
- ... async for message in query("Write a hello world function", options):
73
- ... print(f"[{message.role}] {message.content}")
74
- >>>
75
- >>> asyncio.run(main())
76
- """
77
- if options is None:
78
- options = AutoCodeOptions()
79
- core = AutoCoderCore(options)
80
- async for message in core.query_stream(f"/new {prompt}", show_terminal):
81
- yield message
82
-
83
-
84
- def query_sync(
85
- prompt: str,
86
- options: Optional[AutoCodeOptions] = None,
87
- show_terminal: bool = True
88
- ) -> str:
89
- """
90
- 同步查询接口
91
-
92
- Args:
93
- prompt: 查询提示
94
- options: 配置选项
95
- show_terminal: 是否在终端显示友好的渲染输出
96
-
97
- Returns:
98
- str: 响应内容
99
-
100
- Example:
101
- >>> from autocoder.sdk import query_sync, AutoCodeOptions
102
- >>>
103
- >>> options = AutoCodeOptions(max_turns=1)
104
- >>> response = query_sync("Write a simple calculator function", options)
105
- >>> print(response)
106
- """
107
- if options is None:
108
- options = AutoCodeOptions()
109
- core = AutoCoderCore(options)
110
- return core.query_sync(f"/new {prompt}", show_terminal)
111
-
112
-
113
- def modify_code(
114
- prompt: str,
115
- pre_commit: bool = False,
116
- extra_args: Optional[Dict[str, Any]] = None,
117
- options: Optional[AutoCodeOptions] = None,
118
- show_terminal: bool = True
119
- ) -> CodeModificationResult:
120
- """
121
- 代码修改接口
122
-
123
- Args:
124
- prompt: 修改提示
125
- pre_commit: 是否预提交
126
- extra_args: 额外参数
127
- options: 配置选项
128
- show_terminal: 是否在终端显示友好的渲染输出
129
-
130
- Returns:
131
- CodeModificationResult: 修改结果
132
-
133
- Example:
134
- >>> from autocoder.sdk import modify_code, AutoCodeOptions
135
- >>>
136
- >>> options = AutoCodeOptions(cwd="/path/to/project")
137
- >>> result = modify_code(
138
- ... "Add error handling to the main function",
139
- ... pre_commit=False,
140
- ... options=options
141
- ... )
142
- >>>
143
- >>> if result.success:
144
- ... print(f"Modified files: {result.modified_files}")
145
- ... else:
146
- ... print(f"Error: {result.error_details}")
147
- """
148
- core = AutoCoderCore(options or AutoCodeOptions())
149
- return core.modify_code(prompt, pre_commit, extra_args, show_terminal)
150
-
151
-
152
- async def modify_code_stream(
153
- prompt: str,
154
- pre_commit: bool = False,
155
- extra_args: Optional[Dict[str, Any]] = None,
156
- options: Optional[AutoCodeOptions] = None,
157
- show_terminal: bool = True
158
- ) -> AsyncIterator[StreamEvent]:
159
- """
160
- 异步流式代码修改接口
161
-
162
- Args:
163
- prompt: 修改提示
164
- pre_commit: 是否预提交
165
- extra_args: 额外参数
166
- options: 配置选项
167
- show_terminal: 是否在终端显示友好的渲染输出
168
-
169
- Yields:
170
- StreamEvent: 修改事件流
171
-
172
- Example:
173
- >>> import asyncio
174
- >>> from autocoder.sdk import modify_code_stream, AutoCodeOptions
175
- >>>
176
- >>> async def main():
177
- ... options = AutoCodeOptions(cwd="/path/to/project")
178
- ... async for event in modify_code_stream(
179
- ... "Refactor the user authentication module",
180
- ... options=options
181
- ... ):
182
- ... print(f"[{event.event_type}] {event.data}")
183
- >>>
184
- >>> asyncio.run(main())
185
- """
186
- core = AutoCoderCore(options or AutoCodeOptions())
187
- async for event in core.modify_code_stream(prompt, pre_commit, extra_args, show_terminal):
188
- yield event
68
+ # 向后兼容的旧 API(将在未来版本移除)
69
+ "query",
70
+ "query_sync",
71
+ "query_with_events",
72
+ "query_with_events_sync",
73
+ "init_project_if_required",
74
+ "configure",
75
+ "get_llm",
76
+ "commit",
77
+ ]
autocoder/sdk/api.py ADDED
@@ -0,0 +1,370 @@
1
+ """
2
+ Auto-Coder SDK API Functions
3
+
4
+ 包含所有主要的公共 API 函数,包括新的清晰 API、工具函数和向后兼容的旧 API。
5
+ """
6
+
7
+ import warnings
8
+ from typing import AsyncIterator, Iterator, Optional, Dict, Any
9
+ from .core.auto_coder_core import AutoCoderCore
10
+ from .models.options import AutoCodeOptions
11
+ from .models.responses import StreamEvent, CodeModificationResult
12
+ from autocoder.auto_coder_runner import init_project_if_required as init_project_if_required_buildin
13
+ from autocoder.auto_coder_runner import (
14
+ configure as configure_buildin,
15
+ load_tokenizer,
16
+ start as start_engine,
17
+ commit as commit_buildin
18
+ )
19
+ from autocoder.rag.variable_holder import VariableHolder
20
+ from autocoder.utils.llms import get_single_llm
21
+
22
+
23
+ # ===== 新的清晰 API 命名 =====
24
+
25
+ async def auto_code_stream(
26
+ prompt: str,
27
+ options: Optional[AutoCodeOptions] = None,
28
+ show_terminal: Optional[bool] = None,
29
+ cancel_token: Optional[str] = None
30
+ ) -> AsyncIterator[StreamEvent]:
31
+ """
32
+ 异步流式代码生成接口
33
+
34
+ Args:
35
+ prompt: 代码生成提示
36
+ options: 配置选项
37
+ show_terminal: 是否在终端显示友好的渲染输出,None时使用配置中的verbose设置
38
+ cancel_token: 取消令牌,用于中断执行
39
+
40
+ Yields:
41
+ StreamEvent: 响应事件流
42
+
43
+ Example:
44
+ >>> import asyncio
45
+ >>> from autocoder.sdk import auto_code_stream, AutoCodeOptions
46
+ >>>
47
+ >>> async def main():
48
+ ... options = AutoCodeOptions(max_turns=3)
49
+ ... async for event in auto_code_stream("Write a hello world function", options):
50
+ ... print(f"[{event.event_type}] {event.data}")
51
+ >>>
52
+ >>> asyncio.run(main())
53
+ """
54
+ if options is None:
55
+ options = AutoCodeOptions()
56
+
57
+ # 如果直接传递了 cancel_token 参数,优先使用它
58
+ if cancel_token is not None:
59
+ options = options.copy(cancel_token=cancel_token)
60
+
61
+ core = AutoCoderCore(options)
62
+ async for event in core.query_stream(prompt, show_terminal):
63
+ yield event
64
+
65
+
66
+ def auto_code(
67
+ prompt: str,
68
+ options: Optional[AutoCodeOptions] = None,
69
+ show_terminal: Optional[bool] = None,
70
+ cancel_token: Optional[str] = None
71
+ ) -> str:
72
+ """
73
+ 同步代码生成接口
74
+
75
+ Args:
76
+ prompt: 代码生成提示
77
+ options: 配置选项
78
+ show_terminal: 是否在终端显示友好的渲染输出,None时使用配置中的verbose设置
79
+ cancel_token: 取消令牌,用于中断执行
80
+
81
+ Returns:
82
+ str: 生成的代码内容
83
+
84
+ Example:
85
+ >>> from autocoder.sdk import auto_code, AutoCodeOptions
86
+ >>>
87
+ >>> options = AutoCodeOptions(max_turns=1)
88
+ >>> response = auto_code("Write a simple calculator function", options)
89
+ >>> print(response)
90
+ """
91
+ if options is None:
92
+ options = AutoCodeOptions()
93
+
94
+ # 如果直接传递了 cancel_token 参数,优先使用它
95
+ if cancel_token is not None:
96
+ options = options.copy(cancel_token=cancel_token)
97
+
98
+ core = AutoCoderCore(options)
99
+ events = core.query_sync(prompt, show_terminal)
100
+
101
+ # 从事件流中提取最终结果
102
+ result_content = ""
103
+ for event in events:
104
+ if event.event_type == "completion":
105
+ result_content = event.data.get("result", "")
106
+ break
107
+ elif event.event_type == "llm_output":
108
+ result_content += event.data.get("text", "")
109
+
110
+ return result_content
111
+
112
+
113
+ async def auto_code_events_stream(
114
+ prompt: str,
115
+ options: Optional[AutoCodeOptions] = None,
116
+ show_terminal: bool = False,
117
+ cancel_token: Optional[str] = None
118
+ ) -> AsyncIterator[StreamEvent]:
119
+ """
120
+ 异步流式代码生成接口,返回详细事件流
121
+
122
+ Args:
123
+ prompt: 代码生成提示
124
+ options: 配置选项
125
+ show_terminal: 是否在终端显示友好的渲染输出(默认为False,避免重复显示)
126
+ cancel_token: 取消令牌,用于中断执行
127
+
128
+ Yields:
129
+ StreamEvent: 原始事件流,包含详细的执行过程信息
130
+
131
+ Example:
132
+ >>> import asyncio
133
+ >>> from autocoder.sdk import auto_code_events_stream, AutoCodeOptions
134
+ >>>
135
+ >>> async def main():
136
+ ... options = AutoCodeOptions(max_turns=3)
137
+ ... async for event in auto_code_events_stream("Write a hello world function", options):
138
+ ... print(f"[{event.event_type}] {event.data}")
139
+ >>>
140
+ >>> asyncio.run(main())
141
+ """
142
+ if options is None:
143
+ options = AutoCodeOptions()
144
+
145
+ # 如果直接传递了 cancel_token 参数,优先使用它
146
+ if cancel_token is not None:
147
+ options = options.copy(cancel_token=cancel_token)
148
+
149
+ core = AutoCoderCore(options)
150
+
151
+ # 使用桥接层直接获取事件流
152
+ import asyncio
153
+ loop = asyncio.get_event_loop()
154
+
155
+ # 在线程池中执行同步调用
156
+ event_stream = await loop.run_in_executor(
157
+ core._executor,
158
+ core._sync_run_auto_command,
159
+ prompt
160
+ )
161
+
162
+ # 直接返回事件流
163
+ for event in event_stream:
164
+ # 可选择性地渲染到终端
165
+ if show_terminal:
166
+ core._render_stream_event(event, show_terminal)
167
+ yield event
168
+
169
+
170
+ def auto_code_events(
171
+ prompt: str,
172
+ options: Optional[AutoCodeOptions] = None,
173
+ show_terminal: bool = False,
174
+ cancel_token: Optional[str] = None
175
+ ) -> Iterator[StreamEvent]:
176
+ """
177
+ 同步代码生成接口,返回详细事件流生成器
178
+
179
+ Args:
180
+ prompt: 代码生成提示
181
+ options: 配置选项
182
+ show_terminal: 是否在终端显示友好的渲染输出(默认为False,避免重复显示)
183
+ cancel_token: 取消令牌,用于中断执行
184
+
185
+ Returns:
186
+ Iterator[StreamEvent]: 原始事件流生成器,包含详细的执行过程信息
187
+
188
+ Example:
189
+ >>> from autocoder.sdk import auto_code_events, AutoCodeOptions
190
+ >>>
191
+ >>> options = AutoCodeOptions(max_turns=1)
192
+ >>> for event in auto_code_events("Write a simple calculator function", options):
193
+ ... print(f"[{event.event_type}] {event.data}")
194
+ """
195
+ if options is None:
196
+ options = AutoCodeOptions()
197
+
198
+ # 如果直接传递了 cancel_token 参数,优先使用它
199
+ if cancel_token is not None:
200
+ options = options.copy(cancel_token=cancel_token)
201
+
202
+ core = AutoCoderCore(options)
203
+
204
+ # 直接调用同步方法获取事件流
205
+ event_stream = core._sync_run_auto_command(prompt)
206
+
207
+ # 直接返回事件流
208
+ for event in event_stream:
209
+ # 可选择性地渲染到终端
210
+ if show_terminal:
211
+ core._render_stream_event(event, show_terminal)
212
+ yield event
213
+
214
+
215
+ # ===== 工具函数 =====
216
+
217
+ def initialize_project(target_dir: str, project_type: str = ".py,.ts"):
218
+ """
219
+ 初始化项目环境
220
+
221
+ Args:
222
+ target_dir: 目标目录
223
+ project_type: 项目类型,以逗号分隔的文件扩展名
224
+ """
225
+ init_project_if_required_buildin(target_dir, project_type)
226
+ if not VariableHolder.TOKENIZER_MODEL:
227
+ load_tokenizer()
228
+ start_engine()
229
+
230
+
231
+ def configure_model(key: str, value: str):
232
+ """
233
+ 配置模型参数
234
+
235
+ Args:
236
+ key: 配置键
237
+ value: 配置值
238
+ """
239
+ configure_buildin(f"{key}:{value}")
240
+
241
+
242
+ def get_language_model(model: str, product_mode: str = "lite"):
243
+ """
244
+ 获取语言模型实例
245
+
246
+ Args:
247
+ model: 模型名称
248
+ product_mode: 产品模式
249
+
250
+ Returns:
251
+ 语言模型实例
252
+ """
253
+ return get_single_llm(model, product_mode)
254
+
255
+
256
+ def commit_changes(query: Optional[str] = None):
257
+ """
258
+ 根据代码变化自动生成commit信息并提交
259
+
260
+ Args:
261
+ query: 提交信息的生成提示(可选)
262
+ """
263
+ commit_buildin(query)
264
+
265
+
266
+ def cancel_task(cancel_token: str, context: Optional[Dict[str, Any]] = None):
267
+ """
268
+ 取消指定的任务
269
+
270
+ Args:
271
+ cancel_token: 要取消的任务令牌
272
+ context: 取消上下文信息(可选)
273
+
274
+ Example:
275
+ >>> from autocoder.sdk import cancel_task
276
+ >>>
277
+ >>> # 取消指定任务
278
+ >>> cancel_task("my-cancel-token-123")
279
+ >>>
280
+ >>> # 带上下文信息的取消
281
+ >>> cancel_task("my-token", {"reason": "user_requested", "timestamp": "2024-01-01"})
282
+ """
283
+ try:
284
+ from autocoder.common.global_cancel import global_cancel
285
+ global_cancel.set(cancel_token, context)
286
+ except ImportError:
287
+ # 如果无法导入,提供一个简单的警告
288
+ print(f"Warning: Unable to cancel task {cancel_token} - global_cancel module not available")
289
+
290
+
291
+ # ===== 向后兼容的旧 API(带弃用警告)=====
292
+
293
+ def query(*args, **kwargs):
294
+ """已弃用,请使用 auto_code_stream"""
295
+ warnings.warn(
296
+ "query() is deprecated, use auto_code_stream() instead",
297
+ DeprecationWarning,
298
+ stacklevel=2
299
+ )
300
+ return auto_code_stream(*args, **kwargs)
301
+
302
+
303
+ def query_sync(*args, **kwargs):
304
+ """已弃用,请使用 auto_code"""
305
+ warnings.warn(
306
+ "query_sync() is deprecated, use auto_code() instead",
307
+ DeprecationWarning,
308
+ stacklevel=2
309
+ )
310
+ return auto_code(*args, **kwargs)
311
+
312
+
313
+ def query_with_events(*args, **kwargs):
314
+ """已弃用,请使用 auto_code_events_stream"""
315
+ warnings.warn(
316
+ "query_with_events() is deprecated, use auto_code_events_stream() instead",
317
+ DeprecationWarning,
318
+ stacklevel=2
319
+ )
320
+ return auto_code_events_stream(*args, **kwargs)
321
+
322
+
323
+ def query_with_events_sync(*args, **kwargs):
324
+ """已弃用,请使用 auto_code_events"""
325
+ warnings.warn(
326
+ "query_with_events_sync() is deprecated, use auto_code_events() instead",
327
+ DeprecationWarning,
328
+ stacklevel=2
329
+ )
330
+ return auto_code_events(*args, **kwargs)
331
+
332
+
333
+ def init_project_if_required(*args, **kwargs):
334
+ """已弃用,请使用 initialize_project"""
335
+ warnings.warn(
336
+ "init_project_if_required() is deprecated, use initialize_project() instead",
337
+ DeprecationWarning,
338
+ stacklevel=2
339
+ )
340
+ return initialize_project(*args, **kwargs)
341
+
342
+
343
+ def configure(*args, **kwargs):
344
+ """已弃用,请使用 configure_model"""
345
+ warnings.warn(
346
+ "configure() is deprecated, use configure_model() instead",
347
+ DeprecationWarning,
348
+ stacklevel=2
349
+ )
350
+ return configure_model(*args, **kwargs)
351
+
352
+
353
+ def get_llm(*args, **kwargs):
354
+ """已弃用,请使用 get_language_model"""
355
+ warnings.warn(
356
+ "get_llm() is deprecated, use get_language_model() instead",
357
+ DeprecationWarning,
358
+ stacklevel=2
359
+ )
360
+ return get_language_model(*args, **kwargs)
361
+
362
+
363
+ def commit(*args, **kwargs):
364
+ """已弃用,请使用 commit_changes"""
365
+ warnings.warn(
366
+ "commit() is deprecated, use commit_changes() instead",
367
+ DeprecationWarning,
368
+ stacklevel=2
369
+ )
370
+ return commit_changes(*args, **kwargs)
@@ -0,0 +1,26 @@
1
+
2
+ """
3
+ 异步代理运行器模块
4
+
5
+ 提供 Markdown 处理、Git worktree 管理和并行执行功能。
6
+ """
7
+
8
+ from .markdown_processor import MarkdownProcessor, Document, SplitMode
9
+ from .worktree_manager import WorktreeManager, WorktreeInfo
10
+ from .async_executor import AsyncExecutor, AutoCoderExecutor, ExecutionResult
11
+ from .async_handler import AsyncAgentHandler
12
+ from .task_metadata import TaskMetadata, TaskMetadataManager
13
+
14
+ __all__ = [
15
+ "MarkdownProcessor",
16
+ "Document",
17
+ "SplitMode",
18
+ "WorktreeManager",
19
+ "WorktreeInfo",
20
+ "AsyncExecutor",
21
+ "AutoCoderExecutor",
22
+ "ExecutionResult",
23
+ "AsyncAgentHandler",
24
+ "TaskMetadata",
25
+ "TaskMetadataManager"
26
+ ]