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

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

Potentially problematic release.


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

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