auto-coder 1.0.0__py3-none-any.whl → 2.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of auto-coder might be problematic. Click here for more details.

Files changed (574) hide show
  1. auto_coder-2.0.1.dist-info/LICENSE +158 -0
  2. auto_coder-2.0.1.dist-info/METADATA +558 -0
  3. auto_coder-2.0.1.dist-info/RECORD +795 -0
  4. {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/WHEEL +1 -1
  5. {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/entry_points.txt +3 -3
  6. autocoder/__init__.py +31 -0
  7. autocoder/agent/auto_filegroup.py +32 -13
  8. autocoder/agent/auto_learn_from_commit.py +9 -1
  9. autocoder/agent/base_agentic/__init__.py +3 -0
  10. autocoder/agent/base_agentic/agent_hub.py +1 -1
  11. autocoder/agent/base_agentic/base_agent.py +235 -136
  12. autocoder/agent/base_agentic/default_tools.py +119 -118
  13. autocoder/agent/base_agentic/test_base_agent.py +1 -1
  14. autocoder/agent/base_agentic/tool_registry.py +32 -20
  15. autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +24 -3
  16. autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
  17. autocoder/agent/base_agentic/types.py +42 -0
  18. autocoder/agent/entry_command_agent/chat.py +77 -73
  19. autocoder/auto_coder.py +31 -40
  20. autocoder/auto_coder_rag.py +11 -1084
  21. autocoder/auto_coder_runner.py +962 -2345
  22. autocoder/auto_coder_terminal.py +26 -0
  23. autocoder/auto_coder_terminal_v3.py +190 -0
  24. autocoder/chat/conf_command.py +224 -124
  25. autocoder/chat/models_command.py +361 -299
  26. autocoder/chat/rules_command.py +79 -31
  27. autocoder/chat_auto_coder.py +988 -398
  28. autocoder/chat_auto_coder_lang.py +23 -732
  29. autocoder/commands/auto_command.py +25 -8
  30. autocoder/commands/auto_web.py +1 -1
  31. autocoder/commands/tools.py +44 -44
  32. autocoder/common/__init__.py +150 -128
  33. autocoder/common/ac_style_command_parser/__init__.py +39 -2
  34. autocoder/common/ac_style_command_parser/config.py +422 -0
  35. autocoder/common/ac_style_command_parser/parser.py +292 -78
  36. autocoder/common/ac_style_command_parser/test_parser.py +241 -16
  37. autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
  38. autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
  39. autocoder/common/action_yml_file_manager.py +25 -13
  40. autocoder/common/agent_events/__init__.py +52 -0
  41. autocoder/common/agent_events/agent_event_emitter.py +193 -0
  42. autocoder/common/agent_events/event_factory.py +177 -0
  43. autocoder/common/agent_events/examples.py +307 -0
  44. autocoder/common/agent_events/types.py +113 -0
  45. autocoder/common/agent_events/utils.py +68 -0
  46. autocoder/common/agent_hooks/__init__.py +44 -0
  47. autocoder/common/agent_hooks/examples.py +582 -0
  48. autocoder/common/agent_hooks/hook_executor.py +217 -0
  49. autocoder/common/agent_hooks/hook_manager.py +288 -0
  50. autocoder/common/agent_hooks/types.py +133 -0
  51. autocoder/common/agent_hooks/utils.py +99 -0
  52. autocoder/common/agent_query_queue/queue_executor.py +324 -0
  53. autocoder/common/agent_query_queue/queue_manager.py +325 -0
  54. autocoder/common/agents/__init__.py +11 -0
  55. autocoder/common/agents/agent_manager.py +323 -0
  56. autocoder/common/agents/agent_parser.py +189 -0
  57. autocoder/common/agents/example_usage.py +344 -0
  58. autocoder/common/agents/integration_example.py +330 -0
  59. autocoder/common/agents/test_agent_parser.py +545 -0
  60. autocoder/common/async_utils.py +101 -0
  61. autocoder/common/auto_coder_lang.py +23 -972
  62. autocoder/common/autocoderargs_parser/__init__.py +14 -0
  63. autocoder/common/autocoderargs_parser/parser.py +184 -0
  64. autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
  65. autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
  66. autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
  67. autocoder/common/autocoderargs_parser/token_parser.py +290 -0
  68. autocoder/common/buildin_tokenizer.py +2 -4
  69. autocoder/common/code_auto_generate.py +149 -74
  70. autocoder/common/code_auto_generate_diff.py +163 -70
  71. autocoder/common/code_auto_generate_editblock.py +179 -89
  72. autocoder/common/code_auto_generate_strict_diff.py +167 -72
  73. autocoder/common/code_auto_merge_editblock.py +13 -6
  74. autocoder/common/code_modification_ranker.py +1 -1
  75. autocoder/common/command_completer.py +3 -3
  76. autocoder/common/command_file_manager/manager.py +183 -47
  77. autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
  78. autocoder/common/command_templates.py +1 -1
  79. autocoder/common/conf_utils.py +2 -4
  80. autocoder/common/conversations/config.py +11 -3
  81. autocoder/common/conversations/get_conversation_manager.py +100 -2
  82. autocoder/common/conversations/llm_stats_models.py +264 -0
  83. autocoder/common/conversations/manager.py +112 -28
  84. autocoder/common/conversations/models.py +16 -2
  85. autocoder/common/conversations/storage/index_manager.py +134 -10
  86. autocoder/common/core_config/__init__.py +63 -0
  87. autocoder/common/core_config/agentic_mode_manager.py +109 -0
  88. autocoder/common/core_config/base_manager.py +123 -0
  89. autocoder/common/core_config/compatibility.py +151 -0
  90. autocoder/common/core_config/config_manager.py +156 -0
  91. autocoder/common/core_config/conversation_manager.py +31 -0
  92. autocoder/common/core_config/exclude_manager.py +72 -0
  93. autocoder/common/core_config/file_manager.py +177 -0
  94. autocoder/common/core_config/human_as_model_manager.py +129 -0
  95. autocoder/common/core_config/lib_manager.py +54 -0
  96. autocoder/common/core_config/main_manager.py +81 -0
  97. autocoder/common/core_config/mode_manager.py +126 -0
  98. autocoder/common/core_config/models.py +70 -0
  99. autocoder/common/core_config/test_memory_manager.py +1056 -0
  100. autocoder/common/env_manager.py +282 -0
  101. autocoder/common/env_manager_usage_example.py +211 -0
  102. autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
  103. autocoder/common/file_checkpoint/manager.py +264 -48
  104. autocoder/common/file_checkpoint/test_backup.py +1 -18
  105. autocoder/common/file_checkpoint/test_manager.py +270 -1
  106. autocoder/common/file_checkpoint/test_store.py +1 -17
  107. autocoder/common/file_handler/__init__.py +23 -0
  108. autocoder/common/file_handler/active_context_handler.py +159 -0
  109. autocoder/common/file_handler/add_files_handler.py +409 -0
  110. autocoder/common/file_handler/chat_handler.py +180 -0
  111. autocoder/common/file_handler/coding_handler.py +409 -0
  112. autocoder/common/file_handler/commit_handler.py +200 -0
  113. autocoder/common/file_handler/lib_handler.py +156 -0
  114. autocoder/common/file_handler/list_files_handler.py +111 -0
  115. autocoder/common/file_handler/mcp_handler.py +268 -0
  116. autocoder/common/file_handler/models_handler.py +493 -0
  117. autocoder/common/file_handler/remove_files_handler.py +172 -0
  118. autocoder/common/git_utils.py +44 -8
  119. autocoder/common/global_cancel.py +15 -6
  120. autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
  121. autocoder/common/international/__init__.py +31 -0
  122. autocoder/common/international/demo_international.py +92 -0
  123. autocoder/common/international/message_manager.py +157 -0
  124. autocoder/common/international/messages/__init__.py +56 -0
  125. autocoder/common/international/messages/async_command_messages.py +507 -0
  126. autocoder/common/international/messages/auto_coder_messages.py +2208 -0
  127. autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
  128. autocoder/common/international/messages/command_help_messages.py +986 -0
  129. autocoder/common/international/messages/conversation_command_messages.py +191 -0
  130. autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
  131. autocoder/common/international/messages/queue_command_messages.py +751 -0
  132. autocoder/common/international/messages/rules_command_messages.py +77 -0
  133. autocoder/common/international/messages/sdk_messages.py +1707 -0
  134. autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
  135. autocoder/common/international/messages/tool_display_messages.py +1212 -0
  136. autocoder/common/international/messages/workflow_exception_messages.py +473 -0
  137. autocoder/common/international/test_international.py +612 -0
  138. autocoder/common/linter_core/__init__.py +28 -0
  139. autocoder/common/linter_core/base_linter.py +61 -0
  140. autocoder/common/linter_core/config_loader.py +271 -0
  141. autocoder/common/linter_core/formatters/__init__.py +0 -0
  142. autocoder/common/linter_core/formatters/base_formatter.py +38 -0
  143. autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
  144. autocoder/common/linter_core/linter.py +166 -0
  145. autocoder/common/linter_core/linter_factory.py +216 -0
  146. autocoder/common/linter_core/linter_manager.py +333 -0
  147. autocoder/common/linter_core/linters/__init__.py +9 -0
  148. autocoder/common/linter_core/linters/java_linter.py +342 -0
  149. autocoder/common/linter_core/linters/python_linter.py +115 -0
  150. autocoder/common/linter_core/linters/typescript_linter.py +119 -0
  151. autocoder/common/linter_core/models/__init__.py +7 -0
  152. autocoder/common/linter_core/models/lint_result.py +91 -0
  153. autocoder/common/linter_core/models.py +33 -0
  154. autocoder/common/linter_core/tests/__init__.py +3 -0
  155. autocoder/common/linter_core/tests/test_config_loader.py +323 -0
  156. autocoder/common/linter_core/tests/test_config_loading.py +308 -0
  157. autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
  158. autocoder/common/linter_core/tests/test_formatters.py +147 -0
  159. autocoder/common/linter_core/tests/test_integration.py +317 -0
  160. autocoder/common/linter_core/tests/test_java_linter.py +496 -0
  161. autocoder/common/linter_core/tests/test_linters.py +265 -0
  162. autocoder/common/linter_core/tests/test_models.py +81 -0
  163. autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
  164. autocoder/common/linter_core/tests/verify_fixes.py +183 -0
  165. autocoder/common/llm_friendly_package/__init__.py +31 -0
  166. autocoder/common/llm_friendly_package/base_manager.py +102 -0
  167. autocoder/common/llm_friendly_package/docs_manager.py +121 -0
  168. autocoder/common/llm_friendly_package/library_manager.py +171 -0
  169. autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
  170. autocoder/common/llm_friendly_package/models.py +40 -0
  171. autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
  172. autocoder/common/llms/__init__.py +15 -0
  173. autocoder/common/llms/demo_error_handling.py +85 -0
  174. autocoder/common/llms/factory.py +142 -0
  175. autocoder/common/llms/manager.py +264 -0
  176. autocoder/common/llms/pricing.py +121 -0
  177. autocoder/common/llms/registry.py +316 -0
  178. autocoder/common/llms/schema.py +77 -0
  179. autocoder/common/llms/simple_demo.py +45 -0
  180. autocoder/common/llms/test_quick_model.py +116 -0
  181. autocoder/common/llms/test_remove_functionality.py +182 -0
  182. autocoder/common/llms/tests/__init__.py +1 -0
  183. autocoder/common/llms/tests/test_manager.py +330 -0
  184. autocoder/common/llms/tests/test_registry.py +364 -0
  185. autocoder/common/mcp_tools/__init__.py +62 -0
  186. autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
  187. autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
  188. autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
  189. autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
  190. autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
  191. autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
  192. autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
  193. autocoder/common/mcp_tools/verify_functionality.py +202 -0
  194. autocoder/common/model_speed_tester.py +32 -26
  195. autocoder/common/priority_directory_finder/__init__.py +142 -0
  196. autocoder/common/priority_directory_finder/examples.py +230 -0
  197. autocoder/common/priority_directory_finder/finder.py +283 -0
  198. autocoder/common/priority_directory_finder/models.py +236 -0
  199. autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
  200. autocoder/common/project_scanner/__init__.py +18 -0
  201. autocoder/common/project_scanner/compat.py +77 -0
  202. autocoder/common/project_scanner/scanner.py +436 -0
  203. autocoder/common/project_tracker/__init__.py +27 -0
  204. autocoder/common/project_tracker/api.py +228 -0
  205. autocoder/common/project_tracker/demo.py +272 -0
  206. autocoder/common/project_tracker/tracker.py +487 -0
  207. autocoder/common/project_tracker/types.py +53 -0
  208. autocoder/common/pruner/__init__.py +67 -0
  209. autocoder/common/pruner/agentic_conversation_pruner.py +651 -102
  210. autocoder/common/pruner/conversation_message_ids_api.py +386 -0
  211. autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
  212. autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
  213. autocoder/common/pruner/conversation_normalizer.py +347 -0
  214. autocoder/common/pruner/conversation_pruner.py +26 -6
  215. autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
  216. autocoder/common/pruner/test_conversation_normalizer.py +502 -0
  217. autocoder/common/pruner/test_tool_content_detector.py +324 -0
  218. autocoder/common/pruner/tool_content_detector.py +227 -0
  219. autocoder/common/pruner/tools/__init__.py +18 -0
  220. autocoder/common/pruner/tools/query_message_ids.py +264 -0
  221. autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
  222. autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
  223. autocoder/common/pull_requests/__init__.py +9 -1
  224. autocoder/common/pull_requests/utils.py +122 -1
  225. autocoder/common/rag_manager/rag_manager.py +36 -40
  226. autocoder/common/rulefiles/__init__.py +53 -1
  227. autocoder/common/rulefiles/api.py +250 -0
  228. autocoder/common/rulefiles/core/__init__.py +14 -0
  229. autocoder/common/rulefiles/core/manager.py +241 -0
  230. autocoder/common/rulefiles/core/selector.py +805 -0
  231. autocoder/common/rulefiles/models/__init__.py +20 -0
  232. autocoder/common/rulefiles/models/index.py +16 -0
  233. autocoder/common/rulefiles/models/init_rule.py +18 -0
  234. autocoder/common/rulefiles/models/rule_file.py +18 -0
  235. autocoder/common/rulefiles/models/rule_relevance.py +14 -0
  236. autocoder/common/rulefiles/models/summary.py +16 -0
  237. autocoder/common/rulefiles/test_rulefiles.py +776 -0
  238. autocoder/common/rulefiles/utils/__init__.py +34 -0
  239. autocoder/common/rulefiles/utils/monitor.py +86 -0
  240. autocoder/common/rulefiles/utils/parser.py +230 -0
  241. autocoder/common/save_formatted_log.py +67 -10
  242. autocoder/common/search_replace.py +8 -1
  243. autocoder/common/search_replace_patch/__init__.py +24 -0
  244. autocoder/common/search_replace_patch/base.py +115 -0
  245. autocoder/common/search_replace_patch/manager.py +248 -0
  246. autocoder/common/search_replace_patch/patch_replacer.py +304 -0
  247. autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
  248. autocoder/common/search_replace_patch/string_replacer.py +181 -0
  249. autocoder/common/search_replace_patch/tests/__init__.py +3 -0
  250. autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
  251. autocoder/common/search_replace_patch/tests/test_base.py +188 -0
  252. autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
  253. autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
  254. autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
  255. autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
  256. autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
  257. autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
  258. autocoder/common/shell_commands/__init__.py +197 -0
  259. autocoder/common/shell_commands/background_process_notifier.py +346 -0
  260. autocoder/common/shell_commands/command_executor.py +1127 -0
  261. autocoder/common/shell_commands/error_recovery.py +541 -0
  262. autocoder/common/shell_commands/exceptions.py +120 -0
  263. autocoder/common/shell_commands/interactive_executor.py +476 -0
  264. autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
  265. autocoder/common/shell_commands/interactive_process.py +744 -0
  266. autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
  267. autocoder/common/shell_commands/monitoring.py +529 -0
  268. autocoder/common/shell_commands/process_cleanup.py +386 -0
  269. autocoder/common/shell_commands/process_manager.py +606 -0
  270. autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
  271. autocoder/common/shell_commands/tests/__init__.py +6 -0
  272. autocoder/common/shell_commands/tests/conftest.py +118 -0
  273. autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
  274. autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
  275. autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
  276. autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
  277. autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
  278. autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
  279. autocoder/common/shell_commands/tests/test_integration.py +664 -0
  280. autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
  281. autocoder/common/shell_commands/tests/test_performance.py +632 -0
  282. autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
  283. autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
  284. autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
  285. autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
  286. autocoder/common/shell_commands/timeout_config.py +315 -0
  287. autocoder/common/shell_commands/timeout_manager.py +352 -0
  288. autocoder/common/terminal_paste/__init__.py +14 -0
  289. autocoder/common/terminal_paste/demo.py +145 -0
  290. autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
  291. autocoder/common/terminal_paste/paste_handler.py +200 -0
  292. autocoder/common/terminal_paste/paste_manager.py +118 -0
  293. autocoder/common/terminal_paste/tests/__init__.py +1 -0
  294. autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
  295. autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
  296. autocoder/common/terminal_paste/utils.py +163 -0
  297. autocoder/common/test_autocoder_args.py +232 -0
  298. autocoder/common/test_env_manager.py +173 -0
  299. autocoder/common/test_env_manager_integration.py +159 -0
  300. autocoder/common/text_similarity/__init__.py +9 -0
  301. autocoder/common/text_similarity/demo.py +216 -0
  302. autocoder/common/text_similarity/examples.py +266 -0
  303. autocoder/common/text_similarity/test_text_similarity.py +306 -0
  304. autocoder/common/text_similarity/text_similarity.py +194 -0
  305. autocoder/common/text_similarity/utils.py +125 -0
  306. autocoder/common/todos/__init__.py +61 -0
  307. autocoder/common/todos/cache/__init__.py +16 -0
  308. autocoder/common/todos/cache/base_cache.py +89 -0
  309. autocoder/common/todos/cache/cache_manager.py +228 -0
  310. autocoder/common/todos/cache/memory_cache.py +225 -0
  311. autocoder/common/todos/config.py +155 -0
  312. autocoder/common/todos/exceptions.py +35 -0
  313. autocoder/common/todos/get_todo_manager.py +161 -0
  314. autocoder/common/todos/manager.py +537 -0
  315. autocoder/common/todos/models.py +239 -0
  316. autocoder/common/todos/storage/__init__.py +14 -0
  317. autocoder/common/todos/storage/base_storage.py +76 -0
  318. autocoder/common/todos/storage/file_storage.py +278 -0
  319. autocoder/common/tokens/counter.py +24 -2
  320. autocoder/common/tools_manager/__init__.py +17 -0
  321. autocoder/common/tools_manager/examples.py +162 -0
  322. autocoder/common/tools_manager/manager.py +385 -0
  323. autocoder/common/tools_manager/models.py +39 -0
  324. autocoder/common/tools_manager/test_tools_manager.py +303 -0
  325. autocoder/common/tools_manager/utils.py +191 -0
  326. autocoder/common/v2/agent/agentic_callbacks.py +270 -0
  327. autocoder/common/v2/agent/agentic_edit.py +2699 -1856
  328. autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
  329. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
  330. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
  331. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
  332. autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
  333. autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
  334. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
  335. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
  336. autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
  337. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +564 -29
  338. autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
  339. autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
  340. autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
  341. autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
  342. autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
  343. autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
  344. autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +356 -0
  345. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
  346. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
  347. autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
  348. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +410 -86
  349. autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
  350. autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
  351. autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
  352. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +207 -192
  353. autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
  354. autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
  355. autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
  356. autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
  357. autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
  358. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
  359. autocoder/common/v2/agent/agentic_edit_types.py +343 -9
  360. autocoder/common/v2/agent/runner/__init__.py +3 -3
  361. autocoder/common/v2/agent/runner/base_runner.py +12 -26
  362. autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
  363. autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
  364. autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
  365. autocoder/common/v2/agent/runner/tool_display.py +557 -159
  366. autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
  367. autocoder/common/v2/agent/test_agentic_edit.py +194 -0
  368. autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
  369. autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
  370. autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
  371. autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
  372. autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
  373. autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
  374. autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
  375. autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
  376. autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
  377. autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
  378. autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
  379. autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
  380. autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
  381. autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
  382. autocoder/common/v2/code_auto_generate.py +136 -78
  383. autocoder/common/v2/code_auto_generate_diff.py +135 -79
  384. autocoder/common/v2/code_auto_generate_editblock.py +174 -99
  385. autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
  386. autocoder/common/v2/code_auto_merge.py +1 -1
  387. autocoder/common/v2/code_auto_merge_editblock.py +13 -1
  388. autocoder/common/v2/code_diff_manager.py +3 -3
  389. autocoder/common/v2/code_editblock_manager.py +4 -14
  390. autocoder/common/v2/code_manager.py +1 -1
  391. autocoder/common/v2/code_strict_diff_manager.py +2 -2
  392. autocoder/common/wrap_llm_hint/__init__.py +10 -0
  393. autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
  394. autocoder/common/wrap_llm_hint/utils.py +432 -0
  395. autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
  396. autocoder/completer/__init__.py +8 -0
  397. autocoder/completer/command_completer_v2.py +1094 -0
  398. autocoder/default_project/__init__.py +501 -0
  399. autocoder/dispacher/__init__.py +4 -12
  400. autocoder/dispacher/actions/action.py +400 -129
  401. autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
  402. autocoder/index/entry.py +117 -125
  403. autocoder/{agent → index/filter}/agentic_filter.py +322 -333
  404. autocoder/index/filter/normal_filter.py +5 -11
  405. autocoder/index/filter/quick_filter.py +1 -1
  406. autocoder/index/index.py +36 -9
  407. autocoder/index/tests/__init__.py +1 -0
  408. autocoder/index/tests/run_tests.py +195 -0
  409. autocoder/index/tests/test_entry.py +303 -0
  410. autocoder/index/tests/test_index_manager.py +314 -0
  411. autocoder/index/tests/test_module_integration.py +300 -0
  412. autocoder/index/tests/test_symbols_utils.py +183 -0
  413. autocoder/inner/__init__.py +4 -0
  414. autocoder/inner/agentic.py +923 -0
  415. autocoder/inner/async_command_handler.py +992 -0
  416. autocoder/inner/conversation_command_handlers.py +623 -0
  417. autocoder/inner/merge_command_handler.py +213 -0
  418. autocoder/inner/queue_command_handler.py +684 -0
  419. autocoder/models.py +95 -266
  420. autocoder/plugins/git_helper_plugin.py +31 -29
  421. autocoder/plugins/token_helper_plugin.py +65 -46
  422. autocoder/pyproject/__init__.py +32 -29
  423. autocoder/rag/agentic_rag.py +215 -75
  424. autocoder/rag/cache/simple_cache.py +1 -2
  425. autocoder/rag/loaders/image_loader.py +1 -1
  426. autocoder/rag/long_context_rag.py +42 -26
  427. autocoder/rag/qa_conversation_strategy.py +1 -1
  428. autocoder/rag/terminal/__init__.py +17 -0
  429. autocoder/rag/terminal/args.py +581 -0
  430. autocoder/rag/terminal/bootstrap.py +61 -0
  431. autocoder/rag/terminal/command_handlers.py +653 -0
  432. autocoder/rag/terminal/formatters/__init__.py +20 -0
  433. autocoder/rag/terminal/formatters/base.py +70 -0
  434. autocoder/rag/terminal/formatters/json_format.py +66 -0
  435. autocoder/rag/terminal/formatters/stream_json.py +95 -0
  436. autocoder/rag/terminal/formatters/text.py +28 -0
  437. autocoder/rag/terminal/init.py +120 -0
  438. autocoder/rag/terminal/utils.py +106 -0
  439. autocoder/rag/test_agentic_rag.py +389 -0
  440. autocoder/rag/test_doc_filter.py +3 -3
  441. autocoder/rag/test_long_context_rag.py +1 -1
  442. autocoder/rag/test_token_limiter.py +517 -10
  443. autocoder/rag/token_counter.py +3 -0
  444. autocoder/rag/token_limiter.py +19 -15
  445. autocoder/rag/tools/__init__.py +26 -2
  446. autocoder/rag/tools/bochaai_example.py +343 -0
  447. autocoder/rag/tools/bochaai_sdk.py +541 -0
  448. autocoder/rag/tools/metaso_example.py +268 -0
  449. autocoder/rag/tools/metaso_sdk.py +417 -0
  450. autocoder/rag/tools/recall_tool.py +28 -7
  451. autocoder/rag/tools/run_integration_tests.py +204 -0
  452. autocoder/rag/tools/test_all_providers.py +318 -0
  453. autocoder/rag/tools/test_bochaai_integration.py +482 -0
  454. autocoder/rag/tools/test_final_integration.py +215 -0
  455. autocoder/rag/tools/test_metaso_integration.py +424 -0
  456. autocoder/rag/tools/test_metaso_real.py +171 -0
  457. autocoder/rag/tools/test_web_crawl_tool.py +639 -0
  458. autocoder/rag/tools/test_web_search_tool.py +509 -0
  459. autocoder/rag/tools/todo_read_tool.py +202 -0
  460. autocoder/rag/tools/todo_write_tool.py +412 -0
  461. autocoder/rag/tools/web_crawl_tool.py +634 -0
  462. autocoder/rag/tools/web_search_tool.py +558 -0
  463. autocoder/rag/tools/web_tools_example.py +119 -0
  464. autocoder/rag/types.py +16 -0
  465. autocoder/rag/variable_holder.py +4 -2
  466. autocoder/rags.py +86 -79
  467. autocoder/regexproject/__init__.py +23 -21
  468. autocoder/sdk/__init__.py +46 -190
  469. autocoder/sdk/api.py +370 -0
  470. autocoder/sdk/async_runner/__init__.py +26 -0
  471. autocoder/sdk/async_runner/async_executor.py +650 -0
  472. autocoder/sdk/async_runner/async_handler.py +356 -0
  473. autocoder/sdk/async_runner/markdown_processor.py +595 -0
  474. autocoder/sdk/async_runner/task_metadata.py +284 -0
  475. autocoder/sdk/async_runner/worktree_manager.py +438 -0
  476. autocoder/sdk/cli/__init__.py +2 -5
  477. autocoder/sdk/cli/formatters.py +28 -204
  478. autocoder/sdk/cli/handlers.py +77 -44
  479. autocoder/sdk/cli/main.py +154 -171
  480. autocoder/sdk/cli/options.py +95 -22
  481. autocoder/sdk/constants.py +139 -51
  482. autocoder/sdk/core/auto_coder_core.py +484 -109
  483. autocoder/sdk/core/bridge.py +297 -115
  484. autocoder/sdk/exceptions.py +18 -12
  485. autocoder/sdk/formatters/__init__.py +19 -0
  486. autocoder/sdk/formatters/input.py +64 -0
  487. autocoder/sdk/formatters/output.py +247 -0
  488. autocoder/sdk/formatters/stream.py +54 -0
  489. autocoder/sdk/models/__init__.py +6 -5
  490. autocoder/sdk/models/options.py +55 -18
  491. autocoder/sdk/utils/formatters.py +27 -195
  492. autocoder/suffixproject/__init__.py +28 -25
  493. autocoder/terminal/__init__.py +14 -0
  494. autocoder/terminal/app.py +454 -0
  495. autocoder/terminal/args.py +32 -0
  496. autocoder/terminal/bootstrap.py +178 -0
  497. autocoder/terminal/command_processor.py +521 -0
  498. autocoder/terminal/command_registry.py +57 -0
  499. autocoder/terminal/help.py +97 -0
  500. autocoder/terminal/tasks/__init__.py +5 -0
  501. autocoder/terminal/tasks/background.py +77 -0
  502. autocoder/terminal/tasks/task_event.py +70 -0
  503. autocoder/terminal/ui/__init__.py +13 -0
  504. autocoder/terminal/ui/completer.py +268 -0
  505. autocoder/terminal/ui/keybindings.py +75 -0
  506. autocoder/terminal/ui/session.py +41 -0
  507. autocoder/terminal/ui/toolbar.py +64 -0
  508. autocoder/terminal/utils/__init__.py +13 -0
  509. autocoder/terminal/utils/errors.py +18 -0
  510. autocoder/terminal/utils/paths.py +19 -0
  511. autocoder/terminal/utils/shell.py +43 -0
  512. autocoder/terminal_v3/__init__.py +10 -0
  513. autocoder/terminal_v3/app.py +201 -0
  514. autocoder/terminal_v3/handlers/__init__.py +5 -0
  515. autocoder/terminal_v3/handlers/command_handler.py +131 -0
  516. autocoder/terminal_v3/models/__init__.py +6 -0
  517. autocoder/terminal_v3/models/conversation_buffer.py +214 -0
  518. autocoder/terminal_v3/models/message.py +50 -0
  519. autocoder/terminal_v3/models/tool_display.py +247 -0
  520. autocoder/terminal_v3/ui/__init__.py +7 -0
  521. autocoder/terminal_v3/ui/keybindings.py +56 -0
  522. autocoder/terminal_v3/ui/layout.py +141 -0
  523. autocoder/terminal_v3/ui/styles.py +43 -0
  524. autocoder/tsproject/__init__.py +23 -23
  525. autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
  526. autocoder/utils/llms.py +88 -80
  527. autocoder/utils/math_utils.py +101 -0
  528. autocoder/utils/model_provider_selector.py +16 -4
  529. autocoder/utils/operate_config_api.py +33 -5
  530. autocoder/utils/thread_utils.py +2 -2
  531. autocoder/version.py +4 -2
  532. autocoder/workflow_agents/__init__.py +84 -0
  533. autocoder/workflow_agents/agent.py +143 -0
  534. autocoder/workflow_agents/exceptions.py +573 -0
  535. autocoder/workflow_agents/executor.py +665 -0
  536. autocoder/workflow_agents/loader.py +749 -0
  537. autocoder/workflow_agents/runner.py +267 -0
  538. autocoder/workflow_agents/types.py +173 -0
  539. autocoder/workflow_agents/utils.py +434 -0
  540. autocoder/workflow_agents/workflow_manager.py +211 -0
  541. auto_coder-1.0.0.dist-info/METADATA +0 -396
  542. auto_coder-1.0.0.dist-info/RECORD +0 -442
  543. auto_coder-1.0.0.dist-info/licenses/LICENSE +0 -201
  544. autocoder/auto_coder_server.py +0 -672
  545. autocoder/benchmark.py +0 -138
  546. autocoder/common/ac_style_command_parser/example.py +0 -7
  547. autocoder/common/cleaner.py +0 -31
  548. autocoder/common/command_completer_v2.py +0 -615
  549. autocoder/common/context_pruner.py +0 -477
  550. autocoder/common/conversation_pruner.py +0 -132
  551. autocoder/common/directory_cache/__init__.py +0 -1
  552. autocoder/common/directory_cache/cache.py +0 -192
  553. autocoder/common/directory_cache/test_cache.py +0 -190
  554. autocoder/common/file_checkpoint/examples.py +0 -217
  555. autocoder/common/llm_friendly_package_example.py +0 -138
  556. autocoder/common/llm_friendly_package_test.py +0 -63
  557. autocoder/common/pull_requests/test_module.py +0 -1
  558. autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
  559. autocoder/common/text.py +0 -30
  560. autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
  561. autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
  562. autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
  563. autocoder/common/v2/agent/agentic_tool_display.py +0 -183
  564. autocoder/plugins/dynamic_completion_example.py +0 -148
  565. autocoder/plugins/sample_plugin.py +0 -160
  566. autocoder/sdk/cli/__main__.py +0 -26
  567. autocoder/sdk/cli/completion_wrapper.py +0 -38
  568. autocoder/sdk/cli/install_completion.py +0 -301
  569. autocoder/sdk/models/messages.py +0 -209
  570. autocoder/sdk/session/__init__.py +0 -32
  571. autocoder/sdk/session/session.py +0 -106
  572. autocoder/sdk/session/session_manager.py +0 -56
  573. {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/top_level.txt +0 -0
  574. /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
@@ -2,22 +2,31 @@ from typing import List, Dict, Tuple
2
2
  from autocoder.common.types import Mode, CodeGenerateResult
3
3
  from autocoder.common import AutoCoderArgs
4
4
  import byzerllm
5
- from autocoder.utils.queue_communicate import queue_communicate, CommunicateEvent, CommunicateEventType
6
5
  from autocoder.common import sys_prompt
7
6
  from concurrent.futures import ThreadPoolExecutor
8
7
  import json
9
- from autocoder.common.utils_code_auto_generate import chat_with_continue,stream_chat_with_continue,ChatWithContinueResult
8
+ from autocoder.common.utils_code_auto_generate import (
9
+ chat_with_continue,
10
+ stream_chat_with_continue,
11
+ ChatWithContinueResult,
12
+ )
10
13
  from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
11
14
  from autocoder.common.stream_out_type import CodeGenerateStreamOutType
12
15
  from autocoder.common.auto_coder_lang import get_message_with_format
13
16
  from autocoder.common.printer import Printer
14
- from autocoder.rag.token_counter import count_tokens
17
+ from autocoder.common.tokens import count_string_tokens as count_tokens
15
18
  from autocoder.utils import llms as llm_utils
16
19
  from autocoder.common import SourceCodeList
17
20
  from autocoder.privacy.model_filter import ModelPathFilter
18
21
  from autocoder.memory.active_context_manager import ActiveContextManager
19
- from autocoder.common.rulefiles.autocoderrules_utils import get_rules
20
- from autocoder.run_context import get_run_context,RunMode
22
+ from autocoder.common.rulefiles import get_rules
23
+ from autocoder.run_context import get_run_context, RunMode
24
+ import os
25
+ import uuid
26
+ from datetime import datetime
27
+ from autocoder.common.save_formatted_log import save_formatted_log
28
+ import platform
29
+
21
30
 
22
31
  class CodeAutoGenerateStrictDiff:
23
32
  def __init__(
@@ -31,14 +40,18 @@ class CodeAutoGenerateStrictDiff:
31
40
  if not self.llm:
32
41
  raise ValueError(
33
42
  "Please provide a valid model instance to use for code generation."
34
- )
43
+ )
35
44
  self.llms = self.llm.get_sub_client("code_model") or [self.llm]
36
45
  if not isinstance(self.llms, list):
37
46
  self.llms = [self.llms]
38
47
 
39
48
  @byzerllm.prompt(llm=lambda self: self.llm)
40
49
  def multi_round_instruction(
41
- self, instruction: str, content: str, context: str = "", package_context: str = ""
50
+ self,
51
+ instruction: str,
52
+ content: str,
53
+ context: str = "",
54
+ package_context: str = "",
42
55
  ) -> str:
43
56
  """
44
57
  如果你需要生成代码,对于每个需要更改的文件,写出类似于 unified diff 的更改,就像`diff -U0`会产生的那样。
@@ -120,6 +133,12 @@ class CodeAutoGenerateStrictDiff:
120
133
 
121
134
  现在让我们开始一个新的任务:
122
135
 
136
+ <env>
137
+ 当前工作目录: {{ current_dir }}
138
+ 操作系统: {{ os_info }}
139
+ 当前时间: {{ current_time }}
140
+ </env>
141
+
123
142
  {%- if structure %}
124
143
  ====
125
144
  {{ structure }}
@@ -159,7 +178,7 @@ class CodeAutoGenerateStrictDiff:
159
178
  ##File: {{ key }}
160
179
  {{ value }}
161
180
  </user_rule>
162
- {% endfor %}
181
+ {% endfor %}
163
182
  {% endif %}
164
183
 
165
184
  ====
@@ -170,12 +189,19 @@ class CodeAutoGenerateStrictDiff:
170
189
 
171
190
  每次生成一个文件的diff,然后询问我是否继续,当我回复继续,继续生成下一个文件的diff。当没有后续任务时,请回复 "__完成__" 或者 "__EOF__"。
172
191
  """
173
-
192
+ # 收集环境信息
193
+ current_dir = os.getcwd()
194
+ os_info = f"{platform.system()} {platform.release()}"
195
+ current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
196
+
174
197
  if not self.args.include_project_structure:
175
198
  return {
176
- "structure": "",
199
+ "structure": "",
200
+ "current_dir": current_dir,
201
+ "os_info": os_info,
202
+ "current_time": current_time,
177
203
  }
178
-
204
+
179
205
  extra_docs = get_rules()
180
206
 
181
207
  return {
@@ -185,11 +211,18 @@ class CodeAutoGenerateStrictDiff:
185
211
  else ""
186
212
  ),
187
213
  "extra_docs": extra_docs,
214
+ "current_dir": current_dir,
215
+ "os_info": os_info,
216
+ "current_time": current_time,
188
217
  }
189
218
 
190
219
  @byzerllm.prompt(llm=lambda self: self.llm)
191
220
  def single_round_instruction(
192
- self, instruction: str, content: str, context: str = "", package_context: str = ""
221
+ self,
222
+ instruction: str,
223
+ content: str,
224
+ context: str = "",
225
+ package_context: str = "",
193
226
  ) -> str:
194
227
  """
195
228
  如果你需要生成代码,对于每个需要更改的文件,写出类似于 unified diff 的更改,就像`diff -U0`会产生的那样。
@@ -274,6 +307,12 @@ class CodeAutoGenerateStrictDiff:
274
307
 
275
308
  现在让我们开始一个新的任务:
276
309
 
310
+ <env>
311
+ 当前工作目录: {{ current_dir }}
312
+ 操作系统: {{ os_info }}
313
+ 当前时间: {{ current_time }}
314
+ </env>
315
+
277
316
  {%- if structure %}
278
317
  {{ structure }}
279
318
  {%- endif %}
@@ -302,10 +341,17 @@ class CodeAutoGenerateStrictDiff:
302
341
 
303
342
  {{ instruction }}
304
343
  """
305
-
344
+ # 收集环境信息
345
+ current_dir = os.getcwd()
346
+ os_info = f"{platform.system()} {platform.release()}"
347
+ current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
348
+
306
349
  if not self.args.include_project_structure:
307
350
  return {
308
- "structure": "",
351
+ "structure": "",
352
+ "current_dir": current_dir,
353
+ "os_info": os_info,
354
+ "current_time": current_time,
309
355
  }
310
356
 
311
357
  return {
@@ -313,21 +359,30 @@ class CodeAutoGenerateStrictDiff:
313
359
  self.action.pp.get_tree_like_directory_structure()
314
360
  if self.action
315
361
  else ""
316
- )
362
+ ),
363
+ "current_dir": current_dir,
364
+ "os_info": os_info,
365
+ "current_time": current_time,
317
366
  }
318
367
 
319
368
  def single_round_run(
320
369
  self, query: str, source_code_list: SourceCodeList
321
370
  ) -> CodeGenerateResult:
322
371
  llm_config = {"human_as_model": self.args.human_as_model}
372
+
323
373
  source_content = source_code_list.to_str()
324
374
 
325
375
  # 获取包上下文信息
326
376
  package_context = ""
327
-
328
- if self.args.enable_active_context and self.args.enable_active_context_in_generate:
377
+
378
+ if (
379
+ self.args.enable_active_context
380
+ and self.args.enable_active_context_in_generate
381
+ ):
329
382
  # 初始化活动上下文管理器
330
- active_context_manager = ActiveContextManager(self.llm, self.args.source_dir)
383
+ active_context_manager = ActiveContextManager(
384
+ self.llm, self.args.source_dir
385
+ )
331
386
  # 获取活动上下文信息
332
387
  result = active_context_manager.load_active_contexts_for_files(
333
388
  [source.module_name for source in source_code_list.sources]
@@ -336,35 +391,52 @@ class CodeAutoGenerateStrictDiff:
336
391
  if result.contexts:
337
392
  package_context_parts = []
338
393
  for dir_path, context in result.contexts.items():
339
- package_context_parts.append(f"<package_info>{context.content}</package_info>")
340
-
394
+ package_context_parts.append(
395
+ f"<package_info>{context.content}</package_info>"
396
+ )
397
+
341
398
  package_context = "\n".join(package_context_parts)
342
399
 
343
400
  if self.args.template == "common":
344
401
  init_prompt = self.single_round_instruction.prompt(
345
- instruction=query, content=source_content, context=self.args.context,
346
- package_context=package_context
402
+ instruction=query,
403
+ content=source_content,
404
+ context=self.args.context,
405
+ package_context=package_context,
347
406
  )
348
407
  elif self.args.template == "auto_implement":
349
408
  init_prompt = self.auto_implement_function.prompt(
350
409
  instruction=query, content=source_content
351
410
  )
352
411
 
353
- with open(self.args.target_file, "w",encoding="utf-8") as file:
412
+ with open(self.args.target_file, "w", encoding="utf-8") as file:
354
413
  file.write(init_prompt)
355
414
 
356
415
  conversations = []
357
416
 
358
417
  if self.args.system_prompt and self.args.system_prompt.strip() == "claude":
359
418
  conversations.append(
360
- {"role": "system", "content": sys_prompt.claude_sys_prompt.prompt()})
419
+ {"role": "system", "content": sys_prompt.claude_sys_prompt.prompt()}
420
+ )
361
421
  elif self.args.system_prompt:
362
- conversations.append(
363
- {"role": "system", "content": self.args.system_prompt})
422
+ conversations.append({"role": "system", "content": self.args.system_prompt})
364
423
 
365
424
  conversations.append({"role": "user", "content": init_prompt})
366
-
367
-
425
+
426
+ # 保存 conversations 到 manuals 目录
427
+ try:
428
+ conversations_json = json.dumps(conversations, ensure_ascii=False, indent=2)
429
+ save_formatted_log(
430
+ project_root=self.args.source_dir,
431
+ json_text=conversations_json,
432
+ suffix="conversations",
433
+ log_subdir="manuals",
434
+ )
435
+ except Exception as e:
436
+ printer.print_in_terminal(
437
+ "conversations_save_failed", style="red", error=str(e)
438
+ )
439
+
368
440
  conversations_list = []
369
441
  results = []
370
442
  input_tokens_count = 0
@@ -374,90 +446,113 @@ class CodeAutoGenerateStrictDiff:
374
446
  model_names = []
375
447
 
376
448
  printer = Printer()
377
- estimated_input_tokens = count_tokens(json.dumps(conversations, ensure_ascii=False))
378
- printer.print_in_terminal("estimated_input_tokens_in_generate", style="yellow",
379
- estimated_input_tokens_in_generate=estimated_input_tokens,
380
- generate_mode="strict_diff"
381
- )
449
+ estimated_input_tokens = count_tokens(
450
+ json.dumps(conversations, ensure_ascii=False)
451
+ )
452
+ printer.print_in_terminal(
453
+ "estimated_input_tokens_in_generate",
454
+ style="yellow",
455
+ estimated_input_tokens_in_generate=estimated_input_tokens,
456
+ generate_mode="strict_diff",
457
+ )
382
458
 
383
459
  if not self.args.human_as_model or get_run_context().mode == RunMode.WEB:
384
- with ThreadPoolExecutor(max_workers=len(self.llms) * self.generate_times_same_model) as executor:
460
+ with ThreadPoolExecutor(
461
+ max_workers=len(self.llms) * self.generate_times_same_model
462
+ ) as executor:
385
463
  futures = []
386
464
  count = 0
387
465
  for llm in self.llms:
388
466
  for _ in range(self.generate_times_same_model):
389
-
467
+
390
468
  model_names_list = llm_utils.get_llm_names(llm)
391
469
  model_name = None
392
470
  if model_names_list:
393
- model_name = model_names_list[0]
394
-
471
+ model_name = model_names_list[0]
472
+
395
473
  for _ in range(self.generate_times_same_model):
396
474
  model_names.append(model_name)
397
475
  if count == 0:
476
+
398
477
  def job():
399
478
  stream_generator = stream_chat_with_continue(
400
- llm=llm,
401
- conversations=conversations,
479
+ llm=llm,
480
+ conversations=conversations,
402
481
  llm_config=llm_config,
403
- args=self.args
482
+ args=self.args,
404
483
  )
405
484
  full_response, last_meta = stream_out(
406
- stream_generator,
407
- model_name=model_name,
408
- title=get_message_with_format(
409
- "code_generate_title", model_name=model_name),
410
- args=self.args,
411
- extra_meta={
412
- "stream_out_type": CodeGenerateStreamOutType.CODE_GENERATE.value
413
- })
485
+ stream_generator,
486
+ model_name=model_name,
487
+ title=get_message_with_format(
488
+ "code_generate_title", model_name=model_name
489
+ ),
490
+ args=self.args,
491
+ extra_meta={
492
+ "stream_out_type": CodeGenerateStreamOutType.CODE_GENERATE.value
493
+ },
494
+ )
414
495
  return ChatWithContinueResult(
415
496
  content=full_response,
416
497
  input_tokens_count=last_meta.input_tokens_count,
417
- generated_tokens_count=last_meta.generated_tokens_count
498
+ generated_tokens_count=last_meta.generated_tokens_count,
418
499
  )
500
+
419
501
  futures.append(executor.submit(job))
420
- else:
421
- futures.append(executor.submit(
422
- chat_with_continue,
423
- llm=llm,
424
- conversations=conversations,
425
- llm_config=llm_config,
426
- args=self.args
427
- ))
502
+ else:
503
+ futures.append(
504
+ executor.submit(
505
+ chat_with_continue,
506
+ llm=llm,
507
+ conversations=conversations,
508
+ llm_config=llm_config,
509
+ args=self.args,
510
+ )
511
+ )
428
512
  count += 1
429
513
  temp_results = [future.result() for future in futures]
430
514
  for result in temp_results:
431
515
  results.append(result.content)
432
516
  input_tokens_count += result.input_tokens_count
433
517
  generated_tokens_count += result.generated_tokens_count
434
- model_info = llm_utils.get_model_info(model_name, self.args.product_mode)
518
+ model_info = llm_utils.get_model_info(
519
+ model_name, self.args.product_mode
520
+ )
435
521
  input_cost = model_info.get("input_price", 0) if model_info else 0
436
522
  output_cost = model_info.get("output_price", 0) if model_info else 0
437
- input_tokens_cost += input_cost * result.input_tokens_count / 1000000
438
- generated_tokens_cost += output_cost * result.generated_tokens_count / 1000000
523
+ input_tokens_cost += (
524
+ input_cost * result.input_tokens_count / 1000000
525
+ )
526
+ generated_tokens_cost += (
527
+ output_cost * result.generated_tokens_count / 1000000
528
+ )
439
529
  for result in results:
440
530
  conversations_list.append(
441
- conversations + [{"role": "assistant", "content": result}])
442
- else:
531
+ conversations + [{"role": "assistant", "content": result}]
532
+ )
533
+ else:
443
534
  for _ in range(self.args.human_model_num):
444
535
  single_result = chat_with_continue(
445
- llm=self.llms[0],
446
- conversations=conversations,
536
+ llm=self.llms[0],
537
+ conversations=conversations,
447
538
  llm_config=llm_config,
448
- args=self.args
449
- )
539
+ args=self.args,
540
+ )
450
541
  results.append(single_result.content)
451
542
  input_tokens_count += single_result.input_tokens_count
452
543
  generated_tokens_count += single_result.generated_tokens_count
453
- conversations_list.append(conversations + [{"role": "assistant", "content": single_result.content}])
454
-
544
+ conversations_list.append(
545
+ conversations
546
+ + [{"role": "assistant", "content": single_result.content}]
547
+ )
548
+
455
549
  statistics = {
456
550
  "input_tokens_count": input_tokens_count,
457
551
  "generated_tokens_count": generated_tokens_count,
458
552
  "input_tokens_cost": input_tokens_cost,
459
- "generated_tokens_cost": generated_tokens_cost
460
- }
553
+ "generated_tokens_cost": generated_tokens_cost,
554
+ }
461
555
 
462
- return CodeGenerateResult(contents=results, conversations=conversations_list, metadata=statistics)
463
-
556
+ return CodeGenerateResult(
557
+ contents=results, conversations=conversations_list, metadata=statistics
558
+ )
@@ -2,13 +2,9 @@ import os
2
2
  from byzerllm.utils.client import code_utils
3
3
  from autocoder.common import AutoCoderArgs, git_utils
4
4
  from autocoder.common.action_yml_file_manager import ActionYmlFileManager
5
- from autocoder.common.text import TextSimilarity
5
+ from autocoder.common.text_similarity import TextSimilarity
6
6
  from autocoder.memory.active_context_manager import ActiveContextManager
7
- from autocoder.utils.queue_communicate import (
8
- queue_communicate,
9
- CommunicateEvent,
10
- CommunicateEventType,
11
- )
7
+ from autocoder.common.core_config import get_memory_manager
12
8
  import pydantic
13
9
  import byzerllm
14
10
 
@@ -321,6 +317,17 @@ class CodeAutoMergeEditBlock:
321
317
  self._print_unmerged_blocks(unmerged_blocks)
322
318
  return
323
319
 
320
+ # 收集新创建的文件
321
+ new_files = []
322
+ for file_path in file_content_mapping.keys():
323
+ if not os.path.exists(file_path):
324
+ new_files.append(file_path)
325
+
326
+ # 在 commit 之前,如果有变更且有新文件,添加到 memory_manager
327
+ if changes_made and new_files:
328
+ memory_manager = get_memory_manager(self.args.source_dir)
329
+ memory_manager.add_files(new_files)
330
+
324
331
  if changes_made and not force_skip_git and not self.args.skip_commit:
325
332
  try:
326
333
  git_utils.commit_changes(
@@ -12,7 +12,7 @@ from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
12
12
  from autocoder.utils.llms import get_llm_names, get_model_info
13
13
  from autocoder.common.types import CodeGenerateResult, MergeCodeWithoutEffect
14
14
  import os
15
- from autocoder.rag.token_counter import count_tokens
15
+ from autocoder.common.tokens import count_string_tokens as count_tokens
16
16
  from autocoder.common.stream_out_type import CodeRankStreamOutType
17
17
 
18
18
  class RankResult(BaseModel):
@@ -5,7 +5,7 @@ from pydantic import BaseModel,SkipValidation # Added import
5
5
  from prompt_toolkit.completion import Completer, Completion, CompleteEvent
6
6
  from prompt_toolkit.document import Document
7
7
 
8
- from autocoder import models as models_module # Import models module
8
+ from autocoder.common.llms import LLMManager
9
9
  from autocoder.common import AutoCoderArgs # Ensure AutoCoderArgs is imported
10
10
 
11
11
  COMMANDS = {
@@ -373,8 +373,8 @@ class CommandCompleter(Completer):
373
373
  self.all_files_with_dot = self.file_system_model.get_all_file_in_project_with_dot()
374
374
  self.symbol_list = self.file_system_model.get_symbol_list()
375
375
  # Refresh model names if they can change dynamically (optional)
376
- self.all_model_names = [m['name'] for m in models_module.load_models()]
377
- self.all_model_names = [m['name'] for m in models_module.load_models()] # Load model names
376
+ llm_manager = LLMManager()
377
+ self.all_model_names = list(llm_manager.get_all_models().keys())
378
378
  self.current_file_names = []
379
379
 
380
380
  def get_completions(self, document, complete_event):