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
@@ -17,14 +17,14 @@ from autocoder.common.memory_manager import save_to_memory_file
17
17
  from autocoder.common.utils_code_auto_generate import stream_chat_with_continue
18
18
  from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
19
19
  from autocoder.common.printer import Printer
20
- from autocoder.rag.token_counter import count_tokens
20
+ from autocoder.common.tokens import count_string_tokens as count_tokens
21
21
  from autocoder.privacy.model_filter import ModelPathFilter
22
22
  from autocoder.common.result_manager import ResultManager
23
23
  from autocoder.events.event_manager_singleton import get_event_manager
24
24
  from autocoder.events import event_content as EventContentCreator
25
25
  from autocoder.events.event_types import EventMetadata
26
- from autocoder.common.mcp_server import get_mcp_server
27
- from autocoder.common.mcp_server_types import McpRequest
26
+ from autocoder.common.mcp_tools.server import get_mcp_server
27
+ from autocoder.common.mcp_tools.types import McpRequest
28
28
  from autocoder.utils.llms import get_llm_names
29
29
  from autocoder.utils.request_queue import (
30
30
  request_queue,
@@ -34,6 +34,8 @@ from autocoder.utils.request_queue import (
34
34
  )
35
35
  from autocoder.run_context import get_run_context, RunMode
36
36
  from autocoder.common.action_yml_file_manager import ActionYmlFileManager
37
+ from autocoder.common.conversations.get_conversation_manager import get_conversation_manager
38
+ from autocoder.common.conversations.exceptions import ConversationManagerError
37
39
 
38
40
 
39
41
  class ChatAgent:
@@ -43,6 +45,18 @@ class ChatAgent:
43
45
  self.raw_args = raw_args
44
46
  self.console = Console()
45
47
  self.result_manager = ResultManager()
48
+ self.conversation_manager = get_conversation_manager()
49
+ # 生成命名空间用于会话隔离
50
+ self.namespace = self._generate_namespace()
51
+
52
+ def _generate_namespace(self) -> str:
53
+ """
54
+ 生成命名空间,用于会话隔离
55
+
56
+ Returns:
57
+ str: 基于项目路径的命名空间
58
+ """
59
+ return "manual"
46
60
 
47
61
  def run(self):
48
62
  """执行 chat 命令的主要逻辑"""
@@ -55,20 +69,26 @@ class ChatAgent:
55
69
  for command in self.args.action:
56
70
  commands_info[command] = {}
57
71
 
58
- memory_dir = os.path.join(self.args.source_dir, ".auto-coder", "memory")
59
- os.makedirs(memory_dir, exist_ok=True)
60
- memory_file = os.path.join(memory_dir, "chat_history.json")
61
-
62
72
  # 处理新会话
63
73
  if self.args.new_session:
64
- self._handle_new_session(memory_file)
74
+ self._handle_new_session()
65
75
  if not self.args.query or (self.args.query_prefix and self.args.query == self.args.query_prefix) or (self.args.query_suffix and self.args.query == self.args.query_suffix):
66
76
  return
67
77
 
68
- # 加载聊天历史
69
- chat_history = self._load_chat_history(memory_file)
70
- chat_history["ask_conversation"].append(
71
- {"role": "user", "content": self.args.query}
78
+ # 确保有当前会话,如果没有则创建
79
+ current_conversation_id = self.conversation_manager.get_current_conversation_id(self.namespace)
80
+ if not current_conversation_id:
81
+ current_conversation_id = self.conversation_manager.create_conversation(
82
+ name="Chat Session",
83
+ description="Auto-coder chat session"
84
+ )
85
+ self.conversation_manager.set_current_conversation(current_conversation_id, self.namespace)
86
+
87
+ # 添加用户消息到当前会话
88
+ self.conversation_manager.append_message_to_current(
89
+ role="user",
90
+ content=self.args.query,
91
+ namespace=self.namespace
72
92
  )
73
93
 
74
94
  # 获取聊天模型
@@ -78,11 +98,11 @@ class ChatAgent:
78
98
  chat_llm = self.llm
79
99
 
80
100
  # 构建对话上下文
81
- loaded_conversations = self._build_conversations(commands_info, chat_history)
101
+ loaded_conversations = self._build_conversations(commands_info)
82
102
 
83
103
  # 处理人工模型模式
84
104
  if get_run_context().mode != RunMode.WEB and self.args.human_as_model:
85
- return self._handle_human_as_model(loaded_conversations, chat_history, memory_file, commands_info)
105
+ return self._handle_human_as_model(loaded_conversations, commands_info)
86
106
 
87
107
  # 计算耗时
88
108
  start_time = time.time()
@@ -118,33 +138,26 @@ class ChatAgent:
118
138
  if last_meta:
119
139
  self._print_stats(last_meta, start_time, model_name)
120
140
 
121
- # 更新聊天历史
122
- chat_history["ask_conversation"].append(
123
- {"role": "assistant", "content": assistant_response}
141
+ # 更新聊天历史 - 添加助手回复到当前会话
142
+ self.conversation_manager.append_message_to_current(
143
+ role="assistant",
144
+ content=assistant_response,
145
+ namespace=self.namespace
124
146
  )
125
147
 
126
- with open(memory_file, "w", encoding="utf-8") as f:
127
- json.dump(chat_history, f, ensure_ascii=False)
128
-
129
148
  # 处理后续命令
130
- self._handle_post_commands(commands_info, assistant_response, chat_history)
149
+ self._handle_post_commands(commands_info, assistant_response)
131
150
 
132
- def _handle_new_session(self, memory_file):
151
+ def _handle_new_session(self):
133
152
  """处理新会话逻辑"""
134
- if os.path.exists(memory_file):
135
- with open(memory_file, "r", encoding="utf-8") as f:
136
- old_chat_history = json.load(f)
137
- if "conversation_history" not in old_chat_history:
138
- old_chat_history["conversation_history"] = []
139
- old_chat_history["conversation_history"].append(
140
- old_chat_history.get("ask_conversation", []))
141
- chat_history = {"ask_conversation": [],
142
- "conversation_history": old_chat_history["conversation_history"]}
143
- else:
144
- chat_history = {"ask_conversation": [],
145
- "conversation_history": []}
146
- with open(memory_file, "w", encoding="utf-8") as f:
147
- json.dump(chat_history, f, ensure_ascii=False)
153
+ # 创建新的对话会话
154
+ conversation_id = self.conversation_manager.create_conversation(
155
+ name="New Chat Session",
156
+ description=f"Chat session started at {time.strftime('%Y-%m-%d %H:%M:%S')}"
157
+ )
158
+
159
+ # 设置为当前会话
160
+ self.conversation_manager.set_current_conversation(conversation_id, self.namespace)
148
161
 
149
162
  self.result_manager.add_result(content=get_message("new_session_started"), meta={
150
163
  "action": "chat",
@@ -161,19 +174,15 @@ class ChatAgent:
161
174
  )
162
175
  )
163
176
 
164
- def _load_chat_history(self, memory_file):
165
- """加载聊天历史"""
166
- if os.path.exists(memory_file):
167
- with open(memory_file, "r", encoding="utf-8") as f:
168
- chat_history = json.load(f)
169
- if "conversation_history" not in chat_history:
170
- chat_history["conversation_history"] = []
171
- else:
172
- chat_history = {"ask_conversation": [],
173
- "conversation_history": []}
174
- return chat_history
177
+ def _get_current_conversation_messages(self):
178
+ """获取当前会话的消息列表"""
179
+ current_conversation_id = self.conversation_manager.get_current_conversation_id(self.namespace)
180
+ if current_conversation_id:
181
+ messages = self.conversation_manager.get_messages(current_conversation_id)
182
+ return [{"role": msg["role"], "content": msg["content"]} for msg in messages]
183
+ return []
175
184
 
176
- def _build_conversations(self, commands_info, chat_history):
185
+ def _build_conversations(self, commands_info):
177
186
  """构建对话上下文"""
178
187
  source_count = 0
179
188
  pre_conversations = []
@@ -242,10 +251,12 @@ class ChatAgent:
242
251
  {"role": "assistant", "content": "read"})
243
252
  source_count += 1
244
253
 
245
- loaded_conversations = pre_conversations + chat_history["ask_conversation"]
254
+ # 获取当前会话的历史消息
255
+ current_messages = self._get_current_conversation_messages()
256
+ loaded_conversations = pre_conversations + current_messages
246
257
  return loaded_conversations
247
258
 
248
- def _handle_human_as_model(self, loaded_conversations, chat_history, memory_file, commands_info):
259
+ def _handle_human_as_model(self, loaded_conversations, commands_info):
249
260
  """处理人工模型模式"""
250
261
  @byzerllm.prompt()
251
262
  def chat_with_human_as_model(
@@ -334,16 +345,17 @@ class ChatAgent:
334
345
  "query": self.args.query
335
346
  }})
336
347
 
337
- # Update chat history with user's response
338
- chat_history["ask_conversation"].append(
339
- {"role": "assistant", "content": result}
348
+ # 更新当前会话的历史记录
349
+ self.conversation_manager.append_message_to_current(
350
+ role="assistant",
351
+ content=result,
352
+ namespace=self.namespace
340
353
  )
341
354
 
342
- with open(memory_file, "w", encoding="utf-8") as f:
343
- json.dump(chat_history, f, ensure_ascii=False)
344
-
345
355
  if "save" in commands_info:
346
- save_to_memory_file(ask_conversation=chat_history["ask_conversation"],
356
+ # 获取当前会话消息用于保存
357
+ current_messages = self._get_current_conversation_messages()
358
+ save_to_memory_file(ask_conversation=current_messages,
347
359
  query=self.args.query,
348
360
  response=result)
349
361
  printer = Printer()
@@ -452,7 +464,7 @@ class ChatAgent:
452
464
  action_file=self.args.file
453
465
  ).to_dict())
454
466
 
455
- def _handle_post_commands(self, commands_info, assistant_response, chat_history):
467
+ def _handle_post_commands(self, commands_info, assistant_response):
456
468
  """处理后续命令"""
457
469
  if "copy" in commands_info:
458
470
  # copy assistant_response to clipboard
@@ -463,7 +475,9 @@ class ChatAgent:
463
475
  print("pyperclip not installed or clipboard is not supported, instruction will not be copied to clipboard.")
464
476
 
465
477
  if "save" in commands_info:
466
- tmp_dir = save_to_memory_file(ask_conversation=chat_history["ask_conversation"],
478
+ # 获取当前会话消息用于保存
479
+ current_messages = self._get_current_conversation_messages()
480
+ tmp_dir = save_to_memory_file(ask_conversation=current_messages,
467
481
  query=self.args.query,
468
482
  response=assistant_response)
469
483
  printer = Printer()
autocoder/auto_coder.py CHANGED
@@ -1,4 +1,3 @@
1
- from autocoder.events.event_types import EventMetadata
2
1
  import byzerllm
3
2
  import yaml
4
3
  import os
@@ -10,8 +9,7 @@ from autocoder.common import git_utils, code_auto_execute
10
9
  from autocoder.utils.llm_client_interceptors import token_counter_interceptor
11
10
  from autocoder.db.store import Store
12
11
  from autocoder.common.action_yml_file_manager import ActionYmlFileManager
13
-
14
- from autocoder.utils.llms import get_llm_names
12
+ from autocoder.common.llms import LLMManager
15
13
 
16
14
  from byzerllm.utils.client import EventCallbackResult, EventName
17
15
  from prompt_toolkit import prompt
@@ -31,31 +29,24 @@ from autocoder.utils.request_queue import (
31
29
  RequestOption,
32
30
  )
33
31
  from loguru import logger
34
- import json
35
32
  from rich.console import Console
36
33
  from rich.panel import Panel
37
- from rich.markdown import Markdown
38
- from rich.live import Live
39
34
  from autocoder.common.auto_coder_lang import get_message
40
- from autocoder.common.memory_manager import save_to_memory_file
41
- from autocoder import models as models_module
42
- from autocoder.common.utils_code_auto_generate import stream_chat_with_continue
43
- from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
44
- from autocoder.common.printer import Printer
45
- from autocoder.rag.token_counter import count_tokens
46
- from autocoder.privacy.model_filter import ModelPathFilter
47
- from autocoder.common.result_manager import ResultManager
48
- from autocoder.events.event_manager_singleton import get_event_manager
49
- from autocoder.events import event_content as EventContentCreator
50
- from autocoder.common.mcp_server import get_mcp_server
51
- from autocoder.common.mcp_server_types import (
52
- McpRequest, McpInstallRequest, McpRemoveRequest, McpListRequest,
53
- McpListRunningRequest, McpRefreshRequest
54
- )
55
35
  from autocoder.run_context import get_run_context,RunMode
56
36
  console = Console()
57
37
 
58
38
 
39
+ def get_model_info_with_check(model_name: str, product_mode: str):
40
+ """获取模型信息并检查是否为None,如果为None则抛出友好的异常"""
41
+ model_info = LLMManager().get_model_info(model_name, product_mode)
42
+ if model_info is None:
43
+ from autocoder.common.international import get_message_with_format
44
+ error_message = get_message_with_format("model_info_not_found",
45
+ model_name=model_name,
46
+ product_mode=product_mode)
47
+ raise ValueError(error_message)
48
+ return model_info
49
+
59
50
  def resolve_include_path(base_path, include_path):
60
51
  if include_path.startswith(".") or include_path.startswith(".."):
61
52
  full_base_path = os.path.abspath(base_path)
@@ -257,7 +248,7 @@ def main(input_args: Optional[List[str]] = None):
257
248
 
258
249
  if args.product_mode == "lite":
259
250
  default_model = args.model
260
- model_info = models_module.get_model_by_name(default_model)
251
+ model_info = get_model_info_with_check(default_model, args.product_mode)
261
252
  llm = byzerllm.SimpleByzerLLM(default_model_name=default_model)
262
253
  llm.deploy(
263
254
  model_path="",
@@ -281,7 +272,7 @@ def main(input_args: Optional[List[str]] = None):
281
272
  models = []
282
273
  for _, model_name in enumerate(model_names):
283
274
  model_name = model_name.strip()
284
- model_info = models_module.get_model_by_name(model_name)
275
+ model_info = get_model_info_with_check(model_name, args.product_mode)
285
276
  code_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
286
277
  code_model.deploy(
287
278
  model_path="",
@@ -299,7 +290,7 @@ def main(input_args: Optional[List[str]] = None):
299
290
  llm.setup_sub_client("code_model", models)
300
291
  else:
301
292
  # Single code model
302
- model_info = models_module.get_model_by_name(args.code_model)
293
+ model_info = get_model_info_with_check(args.code_model, args.product_mode)
303
294
  model_name = args.code_model
304
295
  code_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
305
296
  code_model.deploy(
@@ -322,7 +313,7 @@ def main(input_args: Optional[List[str]] = None):
322
313
  model_names = args.generate_rerank_model.split(",")
323
314
  models = []
324
315
  for _, model_name in enumerate(model_names):
325
- model_info = models_module.get_model_by_name(model_name)
316
+ model_info = get_model_info_with_check(model_name, args.product_mode)
326
317
  rerank_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
327
318
  rerank_model.deploy(
328
319
  model_path="",
@@ -340,7 +331,7 @@ def main(input_args: Optional[List[str]] = None):
340
331
  llm.setup_sub_client("generate_rerank_model", models)
341
332
  else:
342
333
  # Single rerank model
343
- model_info = models_module.get_model_by_name(args.generate_rerank_model)
334
+ model_info = get_model_info_with_check(args.generate_rerank_model, args.product_mode)
344
335
  model_name = args.generate_rerank_model
345
336
  rerank_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
346
337
  rerank_model.deploy(
@@ -358,7 +349,7 @@ def main(input_args: Optional[List[str]] = None):
358
349
  llm.setup_sub_client("generate_rerank_model", rerank_model)
359
350
 
360
351
  if args.inference_model:
361
- model_info = models_module.get_model_by_name(args.inference_model)
352
+ model_info = get_model_info_with_check(args.inference_model, args.product_mode)
362
353
  model_name = args.inference_model
363
354
  inference_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
364
355
  inference_model.deploy(
@@ -377,7 +368,7 @@ def main(input_args: Optional[List[str]] = None):
377
368
 
378
369
  if args.index_filter_model:
379
370
  model_name = args.index_filter_model.strip()
380
- model_info = models_module.get_model_by_name(model_name)
371
+ model_info = get_model_info_with_check(model_name, args.product_mode)
381
372
  index_filter_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
382
373
  index_filter_model.deploy(
383
374
  model_path="",
@@ -395,7 +386,7 @@ def main(input_args: Optional[List[str]] = None):
395
386
 
396
387
  if args.context_prune_model:
397
388
  model_name = args.context_prune_model.strip()
398
- model_info = models_module.get_model_by_name(model_name)
389
+ model_info = get_model_info_with_check(model_name, args.product_mode)
399
390
  context_prune_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
400
391
  context_prune_model.deploy(
401
392
  model_path="",
@@ -413,7 +404,7 @@ def main(input_args: Optional[List[str]] = None):
413
404
 
414
405
  if args.conversation_prune_model:
415
406
  model_name = args.conversation_prune_model.strip()
416
- model_info = models_module.get_model_by_name(model_name)
407
+ model_info = get_model_info_with_check(model_name, args.product_mode)
417
408
  conversation_prune_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
418
409
  conversation_prune_model.deploy(
419
410
  model_path="",
@@ -588,7 +579,7 @@ def main(input_args: Optional[List[str]] = None):
588
579
  if args.product_mode == "lite":
589
580
  if args.chat_model:
590
581
  model_name = args.chat_model.strip()
591
- model_info = models_module.get_model_by_name(model_name)
582
+ model_info = get_model_info_with_check(model_name, args.product_mode)
592
583
  chat_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
593
584
  chat_model.deploy(
594
585
  model_path="",
@@ -606,7 +597,7 @@ def main(input_args: Optional[List[str]] = None):
606
597
 
607
598
  if args.vl_model:
608
599
  model_name = args.vl_model.strip()
609
- model_info = models_module.get_model_by_name(model_name)
600
+ model_info = get_model_info_with_check(model_name, args.product_mode)
610
601
  vl_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
611
602
  vl_model.deploy(
612
603
  model_path="",
@@ -624,7 +615,7 @@ def main(input_args: Optional[List[str]] = None):
624
615
 
625
616
  if args.index_model:
626
617
  model_name = args.index_model.strip()
627
- model_info = models_module.get_model_by_name(model_name)
618
+ model_info = get_model_info_with_check(model_name, args.product_mode)
628
619
  index_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
629
620
  index_model.deploy(
630
621
  model_path="",
@@ -642,7 +633,7 @@ def main(input_args: Optional[List[str]] = None):
642
633
 
643
634
  if args.sd_model:
644
635
  model_name = args.sd_model.strip()
645
- model_info = models_module.get_model_by_name(model_name)
636
+ model_info = get_model_info_with_check(model_name, args.product_mode)
646
637
  sd_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
647
638
  sd_model.deploy(
648
639
  model_path="",
@@ -660,7 +651,7 @@ def main(input_args: Optional[List[str]] = None):
660
651
 
661
652
  if args.text2voice_model:
662
653
  model_name = args.text2voice_model.strip()
663
- model_info = models_module.get_model_by_name(model_name)
654
+ model_info = get_model_info_with_check(model_name, args.product_mode)
664
655
  text2voice_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
665
656
  text2voice_model.deploy(
666
657
  model_path="",
@@ -678,7 +669,7 @@ def main(input_args: Optional[List[str]] = None):
678
669
 
679
670
  if args.voice2text_model:
680
671
  model_name = args.voice2text_model.strip()
681
- model_info = models_module.get_model_by_name(model_name)
672
+ model_info = get_model_info_with_check(model_name, args.product_mode)
682
673
  voice2text_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
683
674
  voice2text_model.deploy(
684
675
  model_path="",
@@ -696,7 +687,7 @@ def main(input_args: Optional[List[str]] = None):
696
687
 
697
688
  if args.planner_model:
698
689
  model_name = args.planner_model.strip()
699
- model_info = models_module.get_model_by_name(model_name)
690
+ model_info = get_model_info_with_check(model_name, args.product_mode)
700
691
  planner_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
701
692
  planner_model.deploy(
702
693
  model_path="",
@@ -714,7 +705,7 @@ def main(input_args: Optional[List[str]] = None):
714
705
 
715
706
  if args.commit_model:
716
707
  model_name = args.commit_model.strip()
717
- model_info = models_module.get_model_by_name(model_name)
708
+ model_info = get_model_info_with_check(model_name, args.product_mode)
718
709
  commit_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
719
710
  commit_model.deploy(
720
711
  model_path="",
@@ -732,7 +723,7 @@ def main(input_args: Optional[List[str]] = None):
732
723
 
733
724
  if args.designer_model:
734
725
  model_name = args.designer_model.strip()
735
- model_info = models_module.get_model_by_name(model_name)
726
+ model_info = get_model_info_with_check(model_name, args.product_mode)
736
727
  designer_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
737
728
  designer_model.deploy(
738
729
  model_path="",
@@ -750,7 +741,7 @@ def main(input_args: Optional[List[str]] = None):
750
741
 
751
742
  if args.emb_model:
752
743
  model_name = args.emb_model.strip()
753
- model_info = models_module.get_model_by_name(model_name)
744
+ model_info = get_model_info_with_check(model_name, args.product_mode)
754
745
  emb_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
755
746
  emb_model.deploy(
756
747
  model_path="",