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

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

Potentially problematic release.


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

Files changed (579) hide show
  1. auto_coder-2.0.0.dist-info/LICENSE +158 -0
  2. auto_coder-2.0.0.dist-info/METADATA +558 -0
  3. auto_coder-2.0.0.dist-info/RECORD +795 -0
  4. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
  5. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
  6. autocoder/__init__.py +31 -0
  7. autocoder/agent/auto_filegroup.py +32 -13
  8. autocoder/agent/auto_learn_from_commit.py +9 -1
  9. autocoder/agent/base_agentic/__init__.py +3 -0
  10. autocoder/agent/base_agentic/agent_hub.py +1 -1
  11. autocoder/agent/base_agentic/base_agent.py +235 -136
  12. autocoder/agent/base_agentic/default_tools.py +119 -118
  13. autocoder/agent/base_agentic/test_base_agent.py +1 -1
  14. autocoder/agent/base_agentic/tool_registry.py +32 -20
  15. autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +25 -4
  16. autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
  17. autocoder/agent/base_agentic/types.py +42 -0
  18. autocoder/agent/entry_command_agent/chat.py +73 -59
  19. autocoder/auto_coder.py +31 -40
  20. autocoder/auto_coder_rag.py +11 -1084
  21. autocoder/auto_coder_runner.py +1029 -2310
  22. autocoder/auto_coder_terminal.py +26 -0
  23. autocoder/auto_coder_terminal_v3.py +190 -0
  24. autocoder/chat/conf_command.py +224 -124
  25. autocoder/chat/models_command.py +361 -299
  26. autocoder/chat/rules_command.py +79 -31
  27. autocoder/chat_auto_coder.py +1021 -372
  28. autocoder/chat_auto_coder_lang.py +23 -732
  29. autocoder/commands/auto_command.py +26 -9
  30. autocoder/commands/auto_web.py +1 -1
  31. autocoder/commands/tools.py +44 -44
  32. autocoder/common/__init__.py +150 -128
  33. autocoder/common/ac_style_command_parser/__init__.py +39 -2
  34. autocoder/common/ac_style_command_parser/config.py +422 -0
  35. autocoder/common/ac_style_command_parser/parser.py +292 -78
  36. autocoder/common/ac_style_command_parser/test_parser.py +241 -16
  37. autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
  38. autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
  39. autocoder/common/action_yml_file_manager.py +25 -13
  40. autocoder/common/agent_events/__init__.py +52 -0
  41. autocoder/common/agent_events/agent_event_emitter.py +193 -0
  42. autocoder/common/agent_events/event_factory.py +177 -0
  43. autocoder/common/agent_events/examples.py +307 -0
  44. autocoder/common/agent_events/types.py +113 -0
  45. autocoder/common/agent_events/utils.py +68 -0
  46. autocoder/common/agent_hooks/__init__.py +44 -0
  47. autocoder/common/agent_hooks/examples.py +582 -0
  48. autocoder/common/agent_hooks/hook_executor.py +217 -0
  49. autocoder/common/agent_hooks/hook_manager.py +288 -0
  50. autocoder/common/agent_hooks/types.py +133 -0
  51. autocoder/common/agent_hooks/utils.py +99 -0
  52. autocoder/common/agent_query_queue/queue_executor.py +324 -0
  53. autocoder/common/agent_query_queue/queue_manager.py +325 -0
  54. autocoder/common/agents/__init__.py +11 -0
  55. autocoder/common/agents/agent_manager.py +323 -0
  56. autocoder/common/agents/agent_parser.py +189 -0
  57. autocoder/common/agents/example_usage.py +344 -0
  58. autocoder/common/agents/integration_example.py +330 -0
  59. autocoder/common/agents/test_agent_parser.py +545 -0
  60. autocoder/common/async_utils.py +101 -0
  61. autocoder/common/auto_coder_lang.py +23 -972
  62. autocoder/common/autocoderargs_parser/__init__.py +14 -0
  63. autocoder/common/autocoderargs_parser/parser.py +184 -0
  64. autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
  65. autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
  66. autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
  67. autocoder/common/autocoderargs_parser/token_parser.py +290 -0
  68. autocoder/common/buildin_tokenizer.py +2 -4
  69. autocoder/common/code_auto_generate.py +149 -74
  70. autocoder/common/code_auto_generate_diff.py +163 -70
  71. autocoder/common/code_auto_generate_editblock.py +179 -89
  72. autocoder/common/code_auto_generate_strict_diff.py +167 -72
  73. autocoder/common/code_auto_merge_editblock.py +13 -6
  74. autocoder/common/code_modification_ranker.py +1 -1
  75. autocoder/common/command_completer.py +3 -3
  76. autocoder/common/command_file_manager/manager.py +183 -47
  77. autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
  78. autocoder/common/command_templates.py +1 -1
  79. autocoder/common/conf_utils.py +2 -4
  80. autocoder/common/conversations/config.py +11 -3
  81. autocoder/common/conversations/get_conversation_manager.py +100 -2
  82. autocoder/common/conversations/llm_stats_models.py +264 -0
  83. autocoder/common/conversations/manager.py +112 -28
  84. autocoder/common/conversations/models.py +16 -2
  85. autocoder/common/conversations/storage/index_manager.py +134 -10
  86. autocoder/common/core_config/__init__.py +63 -0
  87. autocoder/common/core_config/agentic_mode_manager.py +109 -0
  88. autocoder/common/core_config/base_manager.py +123 -0
  89. autocoder/common/core_config/compatibility.py +151 -0
  90. autocoder/common/core_config/config_manager.py +156 -0
  91. autocoder/common/core_config/conversation_manager.py +31 -0
  92. autocoder/common/core_config/exclude_manager.py +72 -0
  93. autocoder/common/core_config/file_manager.py +177 -0
  94. autocoder/common/core_config/human_as_model_manager.py +129 -0
  95. autocoder/common/core_config/lib_manager.py +54 -0
  96. autocoder/common/core_config/main_manager.py +81 -0
  97. autocoder/common/core_config/mode_manager.py +126 -0
  98. autocoder/common/core_config/models.py +70 -0
  99. autocoder/common/core_config/test_memory_manager.py +1056 -0
  100. autocoder/common/env_manager.py +282 -0
  101. autocoder/common/env_manager_usage_example.py +211 -0
  102. autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
  103. autocoder/common/file_checkpoint/manager.py +264 -48
  104. autocoder/common/file_checkpoint/test_backup.py +1 -18
  105. autocoder/common/file_checkpoint/test_manager.py +270 -1
  106. autocoder/common/file_checkpoint/test_store.py +1 -17
  107. autocoder/common/file_handler/__init__.py +23 -0
  108. autocoder/common/file_handler/active_context_handler.py +159 -0
  109. autocoder/common/file_handler/add_files_handler.py +409 -0
  110. autocoder/common/file_handler/chat_handler.py +180 -0
  111. autocoder/common/file_handler/coding_handler.py +401 -0
  112. autocoder/common/file_handler/commit_handler.py +200 -0
  113. autocoder/common/file_handler/lib_handler.py +156 -0
  114. autocoder/common/file_handler/list_files_handler.py +111 -0
  115. autocoder/common/file_handler/mcp_handler.py +268 -0
  116. autocoder/common/file_handler/models_handler.py +493 -0
  117. autocoder/common/file_handler/remove_files_handler.py +172 -0
  118. autocoder/common/file_monitor/test_file_monitor.py +307 -0
  119. autocoder/common/git_utils.py +51 -10
  120. autocoder/common/global_cancel.py +15 -6
  121. autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
  122. autocoder/common/international/__init__.py +31 -0
  123. autocoder/common/international/demo_international.py +92 -0
  124. autocoder/common/international/message_manager.py +157 -0
  125. autocoder/common/international/messages/__init__.py +56 -0
  126. autocoder/common/international/messages/async_command_messages.py +507 -0
  127. autocoder/common/international/messages/auto_coder_messages.py +2208 -0
  128. autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
  129. autocoder/common/international/messages/command_help_messages.py +986 -0
  130. autocoder/common/international/messages/conversation_command_messages.py +191 -0
  131. autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
  132. autocoder/common/international/messages/queue_command_messages.py +751 -0
  133. autocoder/common/international/messages/rules_command_messages.py +77 -0
  134. autocoder/common/international/messages/sdk_messages.py +1707 -0
  135. autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
  136. autocoder/common/international/messages/tool_display_messages.py +1212 -0
  137. autocoder/common/international/messages/workflow_exception_messages.py +473 -0
  138. autocoder/common/international/test_international.py +612 -0
  139. autocoder/common/linter_core/__init__.py +28 -0
  140. autocoder/common/linter_core/base_linter.py +61 -0
  141. autocoder/common/linter_core/config_loader.py +271 -0
  142. autocoder/common/linter_core/formatters/__init__.py +0 -0
  143. autocoder/common/linter_core/formatters/base_formatter.py +38 -0
  144. autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
  145. autocoder/common/linter_core/linter.py +166 -0
  146. autocoder/common/linter_core/linter_factory.py +216 -0
  147. autocoder/common/linter_core/linter_manager.py +333 -0
  148. autocoder/common/linter_core/linters/__init__.py +9 -0
  149. autocoder/common/linter_core/linters/java_linter.py +342 -0
  150. autocoder/common/linter_core/linters/python_linter.py +115 -0
  151. autocoder/common/linter_core/linters/typescript_linter.py +119 -0
  152. autocoder/common/linter_core/models/__init__.py +7 -0
  153. autocoder/common/linter_core/models/lint_result.py +91 -0
  154. autocoder/common/linter_core/models.py +33 -0
  155. autocoder/common/linter_core/tests/__init__.py +3 -0
  156. autocoder/common/linter_core/tests/test_config_loader.py +323 -0
  157. autocoder/common/linter_core/tests/test_config_loading.py +308 -0
  158. autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
  159. autocoder/common/linter_core/tests/test_formatters.py +147 -0
  160. autocoder/common/linter_core/tests/test_integration.py +317 -0
  161. autocoder/common/linter_core/tests/test_java_linter.py +496 -0
  162. autocoder/common/linter_core/tests/test_linters.py +265 -0
  163. autocoder/common/linter_core/tests/test_models.py +81 -0
  164. autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
  165. autocoder/common/linter_core/tests/verify_fixes.py +183 -0
  166. autocoder/common/llm_friendly_package/__init__.py +31 -0
  167. autocoder/common/llm_friendly_package/base_manager.py +102 -0
  168. autocoder/common/llm_friendly_package/docs_manager.py +121 -0
  169. autocoder/common/llm_friendly_package/library_manager.py +171 -0
  170. autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
  171. autocoder/common/llm_friendly_package/models.py +40 -0
  172. autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
  173. autocoder/common/llms/__init__.py +15 -0
  174. autocoder/common/llms/demo_error_handling.py +85 -0
  175. autocoder/common/llms/factory.py +142 -0
  176. autocoder/common/llms/manager.py +264 -0
  177. autocoder/common/llms/pricing.py +121 -0
  178. autocoder/common/llms/registry.py +288 -0
  179. autocoder/common/llms/schema.py +77 -0
  180. autocoder/common/llms/simple_demo.py +45 -0
  181. autocoder/common/llms/test_quick_model.py +116 -0
  182. autocoder/common/llms/test_remove_functionality.py +182 -0
  183. autocoder/common/llms/tests/__init__.py +1 -0
  184. autocoder/common/llms/tests/test_manager.py +330 -0
  185. autocoder/common/llms/tests/test_registry.py +364 -0
  186. autocoder/common/mcp_tools/__init__.py +62 -0
  187. autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
  188. autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
  189. autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
  190. autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
  191. autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
  192. autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
  193. autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
  194. autocoder/common/mcp_tools/verify_functionality.py +202 -0
  195. autocoder/common/model_speed_tester.py +32 -26
  196. autocoder/common/priority_directory_finder/__init__.py +142 -0
  197. autocoder/common/priority_directory_finder/examples.py +230 -0
  198. autocoder/common/priority_directory_finder/finder.py +283 -0
  199. autocoder/common/priority_directory_finder/models.py +236 -0
  200. autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
  201. autocoder/common/project_scanner/__init__.py +18 -0
  202. autocoder/common/project_scanner/compat.py +77 -0
  203. autocoder/common/project_scanner/scanner.py +436 -0
  204. autocoder/common/project_tracker/__init__.py +27 -0
  205. autocoder/common/project_tracker/api.py +228 -0
  206. autocoder/common/project_tracker/demo.py +272 -0
  207. autocoder/common/project_tracker/tracker.py +487 -0
  208. autocoder/common/project_tracker/types.py +53 -0
  209. autocoder/common/pruner/__init__.py +67 -0
  210. autocoder/common/pruner/agentic_conversation_pruner.py +746 -0
  211. autocoder/common/{context_pruner.py → pruner/context_pruner.py} +137 -40
  212. autocoder/common/pruner/conversation_message_ids_api.py +386 -0
  213. autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
  214. autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
  215. autocoder/common/pruner/conversation_normalizer.py +347 -0
  216. autocoder/common/{conversation_pruner.py → pruner/conversation_pruner.py} +26 -6
  217. autocoder/common/pruner/test_agentic_conversation_pruner.py +784 -0
  218. autocoder/common/pruner/test_context_pruner.py +546 -0
  219. autocoder/common/pruner/test_conversation_normalizer.py +502 -0
  220. autocoder/common/pruner/test_tool_content_detector.py +324 -0
  221. autocoder/common/pruner/tool_content_detector.py +227 -0
  222. autocoder/common/pruner/tools/__init__.py +18 -0
  223. autocoder/common/pruner/tools/query_message_ids.py +264 -0
  224. autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
  225. autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
  226. autocoder/common/pull_requests/__init__.py +9 -1
  227. autocoder/common/pull_requests/utils.py +122 -1
  228. autocoder/common/rag_manager/rag_manager.py +36 -40
  229. autocoder/common/rulefiles/__init__.py +53 -1
  230. autocoder/common/rulefiles/api.py +250 -0
  231. autocoder/common/rulefiles/core/__init__.py +14 -0
  232. autocoder/common/rulefiles/core/manager.py +241 -0
  233. autocoder/common/rulefiles/core/selector.py +805 -0
  234. autocoder/common/rulefiles/models/__init__.py +20 -0
  235. autocoder/common/rulefiles/models/index.py +16 -0
  236. autocoder/common/rulefiles/models/init_rule.py +18 -0
  237. autocoder/common/rulefiles/models/rule_file.py +18 -0
  238. autocoder/common/rulefiles/models/rule_relevance.py +14 -0
  239. autocoder/common/rulefiles/models/summary.py +16 -0
  240. autocoder/common/rulefiles/test_rulefiles.py +776 -0
  241. autocoder/common/rulefiles/utils/__init__.py +34 -0
  242. autocoder/common/rulefiles/utils/monitor.py +86 -0
  243. autocoder/common/rulefiles/utils/parser.py +230 -0
  244. autocoder/common/save_formatted_log.py +67 -10
  245. autocoder/common/search_replace.py +8 -1
  246. autocoder/common/search_replace_patch/__init__.py +24 -0
  247. autocoder/common/search_replace_patch/base.py +115 -0
  248. autocoder/common/search_replace_patch/manager.py +248 -0
  249. autocoder/common/search_replace_patch/patch_replacer.py +304 -0
  250. autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
  251. autocoder/common/search_replace_patch/string_replacer.py +181 -0
  252. autocoder/common/search_replace_patch/tests/__init__.py +3 -0
  253. autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
  254. autocoder/common/search_replace_patch/tests/test_base.py +188 -0
  255. autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
  256. autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
  257. autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
  258. autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
  259. autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
  260. autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
  261. autocoder/common/shell_commands/__init__.py +197 -0
  262. autocoder/common/shell_commands/background_process_notifier.py +346 -0
  263. autocoder/common/shell_commands/command_executor.py +1127 -0
  264. autocoder/common/shell_commands/error_recovery.py +541 -0
  265. autocoder/common/shell_commands/exceptions.py +120 -0
  266. autocoder/common/shell_commands/interactive_executor.py +476 -0
  267. autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
  268. autocoder/common/shell_commands/interactive_process.py +744 -0
  269. autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
  270. autocoder/common/shell_commands/monitoring.py +529 -0
  271. autocoder/common/shell_commands/process_cleanup.py +386 -0
  272. autocoder/common/shell_commands/process_manager.py +606 -0
  273. autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
  274. autocoder/common/shell_commands/tests/__init__.py +6 -0
  275. autocoder/common/shell_commands/tests/conftest.py +118 -0
  276. autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
  277. autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
  278. autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
  279. autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
  280. autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
  281. autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
  282. autocoder/common/shell_commands/tests/test_integration.py +664 -0
  283. autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
  284. autocoder/common/shell_commands/tests/test_performance.py +632 -0
  285. autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
  286. autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
  287. autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
  288. autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
  289. autocoder/common/shell_commands/timeout_config.py +315 -0
  290. autocoder/common/shell_commands/timeout_manager.py +352 -0
  291. autocoder/common/terminal_paste/__init__.py +14 -0
  292. autocoder/common/terminal_paste/demo.py +145 -0
  293. autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
  294. autocoder/common/terminal_paste/paste_handler.py +200 -0
  295. autocoder/common/terminal_paste/paste_manager.py +118 -0
  296. autocoder/common/terminal_paste/tests/__init__.py +1 -0
  297. autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
  298. autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
  299. autocoder/common/terminal_paste/utils.py +163 -0
  300. autocoder/common/test_autocoder_args.py +232 -0
  301. autocoder/common/test_env_manager.py +173 -0
  302. autocoder/common/test_env_manager_integration.py +159 -0
  303. autocoder/common/text_similarity/__init__.py +9 -0
  304. autocoder/common/text_similarity/demo.py +216 -0
  305. autocoder/common/text_similarity/examples.py +266 -0
  306. autocoder/common/text_similarity/test_text_similarity.py +306 -0
  307. autocoder/common/text_similarity/text_similarity.py +194 -0
  308. autocoder/common/text_similarity/utils.py +125 -0
  309. autocoder/common/todos/__init__.py +61 -0
  310. autocoder/common/todos/cache/__init__.py +16 -0
  311. autocoder/common/todos/cache/base_cache.py +89 -0
  312. autocoder/common/todos/cache/cache_manager.py +228 -0
  313. autocoder/common/todos/cache/memory_cache.py +225 -0
  314. autocoder/common/todos/config.py +155 -0
  315. autocoder/common/todos/exceptions.py +35 -0
  316. autocoder/common/todos/get_todo_manager.py +161 -0
  317. autocoder/common/todos/manager.py +537 -0
  318. autocoder/common/todos/models.py +239 -0
  319. autocoder/common/todos/storage/__init__.py +14 -0
  320. autocoder/common/todos/storage/base_storage.py +76 -0
  321. autocoder/common/todos/storage/file_storage.py +278 -0
  322. autocoder/common/tokens/__init__.py +15 -0
  323. autocoder/common/tokens/counter.py +44 -2
  324. autocoder/common/tools_manager/__init__.py +17 -0
  325. autocoder/common/tools_manager/examples.py +162 -0
  326. autocoder/common/tools_manager/manager.py +385 -0
  327. autocoder/common/tools_manager/models.py +39 -0
  328. autocoder/common/tools_manager/test_tools_manager.py +303 -0
  329. autocoder/common/tools_manager/utils.py +191 -0
  330. autocoder/common/v2/agent/agentic_callbacks.py +270 -0
  331. autocoder/common/v2/agent/agentic_edit.py +2729 -2052
  332. autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
  333. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +43 -2
  334. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
  335. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
  336. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +52 -0
  337. autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
  338. autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
  339. autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
  340. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
  341. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
  342. autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
  343. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +565 -30
  344. autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
  345. autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
  346. autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
  347. autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
  348. autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
  349. autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
  350. autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
  351. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +244 -51
  352. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
  353. autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
  354. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +409 -140
  355. autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
  356. autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
  357. autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
  358. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +209 -194
  359. autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +135 -0
  360. autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +328 -0
  361. autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
  362. autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
  363. autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
  364. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
  365. autocoder/common/v2/agent/agentic_edit_types.py +386 -10
  366. autocoder/common/v2/agent/runner/__init__.py +31 -0
  367. autocoder/common/v2/agent/runner/base_runner.py +92 -0
  368. autocoder/common/v2/agent/runner/file_based_event_runner.py +217 -0
  369. autocoder/common/v2/agent/runner/sdk_runner.py +182 -0
  370. autocoder/common/v2/agent/runner/terminal_runner.py +396 -0
  371. autocoder/common/v2/agent/runner/tool_display.py +589 -0
  372. autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
  373. autocoder/common/v2/agent/test_agentic_edit.py +194 -0
  374. autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
  375. autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
  376. autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
  377. autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
  378. autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
  379. autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
  380. autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
  381. autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
  382. autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
  383. autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
  384. autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
  385. autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
  386. autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
  387. autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
  388. autocoder/common/v2/code_auto_generate.py +136 -78
  389. autocoder/common/v2/code_auto_generate_diff.py +135 -79
  390. autocoder/common/v2/code_auto_generate_editblock.py +174 -99
  391. autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
  392. autocoder/common/v2/code_auto_merge.py +1 -1
  393. autocoder/common/v2/code_auto_merge_editblock.py +13 -1
  394. autocoder/common/v2/code_diff_manager.py +3 -3
  395. autocoder/common/v2/code_editblock_manager.py +4 -14
  396. autocoder/common/v2/code_manager.py +1 -1
  397. autocoder/common/v2/code_strict_diff_manager.py +2 -2
  398. autocoder/common/wrap_llm_hint/__init__.py +10 -0
  399. autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
  400. autocoder/common/wrap_llm_hint/utils.py +432 -0
  401. autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
  402. autocoder/completer/__init__.py +8 -0
  403. autocoder/completer/command_completer_v2.py +1051 -0
  404. autocoder/default_project/__init__.py +501 -0
  405. autocoder/dispacher/__init__.py +4 -12
  406. autocoder/dispacher/actions/action.py +165 -7
  407. autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
  408. autocoder/index/entry.py +117 -125
  409. autocoder/{agent → index/filter}/agentic_filter.py +323 -334
  410. autocoder/index/filter/normal_filter.py +5 -11
  411. autocoder/index/filter/quick_filter.py +1 -1
  412. autocoder/index/index.py +36 -9
  413. autocoder/index/tests/__init__.py +1 -0
  414. autocoder/index/tests/run_tests.py +195 -0
  415. autocoder/index/tests/test_entry.py +303 -0
  416. autocoder/index/tests/test_index_manager.py +314 -0
  417. autocoder/index/tests/test_module_integration.py +300 -0
  418. autocoder/index/tests/test_symbols_utils.py +183 -0
  419. autocoder/inner/__init__.py +4 -0
  420. autocoder/inner/agentic.py +932 -0
  421. autocoder/inner/async_command_handler.py +992 -0
  422. autocoder/inner/conversation_command_handlers.py +623 -0
  423. autocoder/inner/merge_command_handler.py +213 -0
  424. autocoder/inner/queue_command_handler.py +684 -0
  425. autocoder/models.py +95 -266
  426. autocoder/plugins/git_helper_plugin.py +31 -29
  427. autocoder/plugins/token_helper_plugin.py +156 -37
  428. autocoder/pyproject/__init__.py +32 -29
  429. autocoder/rag/agentic_rag.py +215 -75
  430. autocoder/rag/cache/simple_cache.py +1 -2
  431. autocoder/rag/loaders/image_loader.py +1 -1
  432. autocoder/rag/long_context_rag.py +42 -26
  433. autocoder/rag/qa_conversation_strategy.py +1 -1
  434. autocoder/rag/terminal/__init__.py +17 -0
  435. autocoder/rag/terminal/args.py +581 -0
  436. autocoder/rag/terminal/bootstrap.py +61 -0
  437. autocoder/rag/terminal/command_handlers.py +653 -0
  438. autocoder/rag/terminal/formatters/__init__.py +20 -0
  439. autocoder/rag/terminal/formatters/base.py +70 -0
  440. autocoder/rag/terminal/formatters/json_format.py +66 -0
  441. autocoder/rag/terminal/formatters/stream_json.py +95 -0
  442. autocoder/rag/terminal/formatters/text.py +28 -0
  443. autocoder/rag/terminal/init.py +120 -0
  444. autocoder/rag/terminal/utils.py +106 -0
  445. autocoder/rag/test_agentic_rag.py +389 -0
  446. autocoder/rag/test_doc_filter.py +3 -3
  447. autocoder/rag/test_long_context_rag.py +1 -1
  448. autocoder/rag/test_token_limiter.py +517 -10
  449. autocoder/rag/token_counter.py +3 -0
  450. autocoder/rag/token_limiter.py +19 -15
  451. autocoder/rag/tools/__init__.py +26 -2
  452. autocoder/rag/tools/bochaai_example.py +343 -0
  453. autocoder/rag/tools/bochaai_sdk.py +541 -0
  454. autocoder/rag/tools/metaso_example.py +268 -0
  455. autocoder/rag/tools/metaso_sdk.py +417 -0
  456. autocoder/rag/tools/recall_tool.py +28 -7
  457. autocoder/rag/tools/run_integration_tests.py +204 -0
  458. autocoder/rag/tools/test_all_providers.py +318 -0
  459. autocoder/rag/tools/test_bochaai_integration.py +482 -0
  460. autocoder/rag/tools/test_final_integration.py +215 -0
  461. autocoder/rag/tools/test_metaso_integration.py +424 -0
  462. autocoder/rag/tools/test_metaso_real.py +171 -0
  463. autocoder/rag/tools/test_web_crawl_tool.py +639 -0
  464. autocoder/rag/tools/test_web_search_tool.py +509 -0
  465. autocoder/rag/tools/todo_read_tool.py +202 -0
  466. autocoder/rag/tools/todo_write_tool.py +412 -0
  467. autocoder/rag/tools/web_crawl_tool.py +634 -0
  468. autocoder/rag/tools/web_search_tool.py +558 -0
  469. autocoder/rag/tools/web_tools_example.py +119 -0
  470. autocoder/rag/types.py +16 -0
  471. autocoder/rag/variable_holder.py +4 -2
  472. autocoder/rags.py +86 -79
  473. autocoder/regexproject/__init__.py +23 -21
  474. autocoder/run_context.py +9 -0
  475. autocoder/sdk/__init__.py +50 -161
  476. autocoder/sdk/api.py +370 -0
  477. autocoder/sdk/async_runner/__init__.py +26 -0
  478. autocoder/sdk/async_runner/async_executor.py +650 -0
  479. autocoder/sdk/async_runner/async_handler.py +356 -0
  480. autocoder/sdk/async_runner/markdown_processor.py +595 -0
  481. autocoder/sdk/async_runner/task_metadata.py +284 -0
  482. autocoder/sdk/async_runner/worktree_manager.py +438 -0
  483. autocoder/sdk/cli/__init__.py +2 -5
  484. autocoder/sdk/cli/formatters.py +28 -204
  485. autocoder/sdk/cli/handlers.py +77 -44
  486. autocoder/sdk/cli/main.py +158 -170
  487. autocoder/sdk/cli/options.py +95 -22
  488. autocoder/sdk/constants.py +139 -51
  489. autocoder/sdk/core/auto_coder_core.py +484 -267
  490. autocoder/sdk/core/bridge.py +298 -118
  491. autocoder/sdk/exceptions.py +18 -12
  492. autocoder/sdk/formatters/__init__.py +19 -0
  493. autocoder/sdk/formatters/input.py +64 -0
  494. autocoder/sdk/formatters/output.py +247 -0
  495. autocoder/sdk/formatters/stream.py +54 -0
  496. autocoder/sdk/models/__init__.py +6 -5
  497. autocoder/sdk/models/options.py +55 -18
  498. autocoder/sdk/utils/formatters.py +27 -195
  499. autocoder/suffixproject/__init__.py +28 -25
  500. autocoder/terminal/__init__.py +14 -0
  501. autocoder/terminal/app.py +454 -0
  502. autocoder/terminal/args.py +32 -0
  503. autocoder/terminal/bootstrap.py +178 -0
  504. autocoder/terminal/command_processor.py +521 -0
  505. autocoder/terminal/command_registry.py +57 -0
  506. autocoder/terminal/help.py +97 -0
  507. autocoder/terminal/tasks/__init__.py +5 -0
  508. autocoder/terminal/tasks/background.py +77 -0
  509. autocoder/terminal/tasks/task_event.py +70 -0
  510. autocoder/terminal/ui/__init__.py +13 -0
  511. autocoder/terminal/ui/completer.py +268 -0
  512. autocoder/terminal/ui/keybindings.py +75 -0
  513. autocoder/terminal/ui/session.py +41 -0
  514. autocoder/terminal/ui/toolbar.py +64 -0
  515. autocoder/terminal/utils/__init__.py +13 -0
  516. autocoder/terminal/utils/errors.py +18 -0
  517. autocoder/terminal/utils/paths.py +19 -0
  518. autocoder/terminal/utils/shell.py +43 -0
  519. autocoder/terminal_v3/__init__.py +10 -0
  520. autocoder/terminal_v3/app.py +201 -0
  521. autocoder/terminal_v3/handlers/__init__.py +5 -0
  522. autocoder/terminal_v3/handlers/command_handler.py +131 -0
  523. autocoder/terminal_v3/models/__init__.py +6 -0
  524. autocoder/terminal_v3/models/conversation_buffer.py +214 -0
  525. autocoder/terminal_v3/models/message.py +50 -0
  526. autocoder/terminal_v3/models/tool_display.py +247 -0
  527. autocoder/terminal_v3/ui/__init__.py +7 -0
  528. autocoder/terminal_v3/ui/keybindings.py +56 -0
  529. autocoder/terminal_v3/ui/layout.py +141 -0
  530. autocoder/terminal_v3/ui/styles.py +43 -0
  531. autocoder/tsproject/__init__.py +23 -23
  532. autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
  533. autocoder/utils/llms.py +88 -80
  534. autocoder/utils/math_utils.py +101 -0
  535. autocoder/utils/model_provider_selector.py +16 -4
  536. autocoder/utils/operate_config_api.py +33 -5
  537. autocoder/utils/thread_utils.py +2 -2
  538. autocoder/version.py +4 -2
  539. autocoder/workflow_agents/__init__.py +84 -0
  540. autocoder/workflow_agents/agent.py +143 -0
  541. autocoder/workflow_agents/exceptions.py +573 -0
  542. autocoder/workflow_agents/executor.py +489 -0
  543. autocoder/workflow_agents/loader.py +737 -0
  544. autocoder/workflow_agents/runner.py +267 -0
  545. autocoder/workflow_agents/types.py +172 -0
  546. autocoder/workflow_agents/utils.py +434 -0
  547. autocoder/workflow_agents/workflow_manager.py +211 -0
  548. auto_coder-0.1.400.dist-info/METADATA +0 -396
  549. auto_coder-0.1.400.dist-info/RECORD +0 -425
  550. auto_coder-0.1.400.dist-info/licenses/LICENSE +0 -201
  551. autocoder/auto_coder_server.py +0 -672
  552. autocoder/benchmark.py +0 -138
  553. autocoder/common/ac_style_command_parser/example.py +0 -7
  554. autocoder/common/cleaner.py +0 -31
  555. autocoder/common/command_completer_v2.py +0 -615
  556. autocoder/common/directory_cache/__init__.py +0 -1
  557. autocoder/common/directory_cache/cache.py +0 -192
  558. autocoder/common/directory_cache/test_cache.py +0 -190
  559. autocoder/common/file_checkpoint/examples.py +0 -217
  560. autocoder/common/llm_friendly_package_example.py +0 -138
  561. autocoder/common/llm_friendly_package_test.py +0 -63
  562. autocoder/common/pull_requests/test_module.py +0 -1
  563. autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
  564. autocoder/common/text.py +0 -30
  565. autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
  566. autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
  567. autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
  568. autocoder/common/v2/agent/agentic_tool_display.py +0 -183
  569. autocoder/plugins/dynamic_completion_example.py +0 -148
  570. autocoder/plugins/sample_plugin.py +0 -160
  571. autocoder/sdk/cli/__main__.py +0 -26
  572. autocoder/sdk/cli/completion_wrapper.py +0 -38
  573. autocoder/sdk/cli/install_completion.py +0 -301
  574. autocoder/sdk/models/messages.py +0 -209
  575. autocoder/sdk/session/__init__.py +0 -32
  576. autocoder/sdk/session/session.py +0 -106
  577. autocoder/sdk/session/session_manager.py +0 -56
  578. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
  579. /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
@@ -13,7 +13,7 @@ from .types import (
13
13
  ExecuteCommandTool, ReadFileTool, WriteToFileTool, ReplaceInFileTool,
14
14
  SearchFilesTool, ListFilesTool, AskFollowupQuestionTool,
15
15
  AttemptCompletionTool, PlanModeRespondTool, UseMcpTool,
16
- TalkToTool, TalkToGroupTool
16
+ TalkToTool, TalkToGroupTool, ToolDefinition
17
17
  )
18
18
 
19
19
  # Import all resolvers
@@ -530,163 +530,164 @@ def register_default_tools(params: Dict[str, Any], default_tools_list: Optional[
530
530
  tool_desc_gen = ToolDescGenerators(params)
531
531
  tool_examples_gen = ToolExampleGenerators(params)
532
532
 
533
- # 统一的工具定义数据结构
533
+ # 使用 Pydantic 模型定义工具
534
534
  DEFAULT_TOOLS = {
535
- "execute_command": {
536
- "tool_cls": ExecuteCommandTool,
537
- "resolver_cls": ExecuteCommandToolResolver,
538
- "description": ToolDescription(
535
+ "execute_command": ToolDefinition(
536
+ tool_cls=ExecuteCommandTool,
537
+ resolver_cls=ExecuteCommandToolResolver,
538
+ description=ToolDescription(
539
539
  description=tool_desc_gen.execute_command.prompt(),
540
540
  ),
541
- "example": ToolExample(
541
+ example=ToolExample(
542
542
  title="Requesting to execute a command",
543
543
  body=tool_examples_gen.example_1.prompt()
544
544
  ),
545
- "use_guideline": "",
546
- "category": "system",
547
- "is_default": True,
548
- "case_docs": []
549
- },
550
- "read_file": {
551
- "tool_cls": ReadFileTool,
552
- "resolver_cls": ReadFileToolResolver,
553
- "description": ToolDescription(
545
+ use_guideline="",
546
+ category="system",
547
+ is_default=True,
548
+ case_docs=[]
549
+ ),
550
+ "read_file": ToolDefinition(
551
+ tool_cls=ReadFileTool,
552
+ resolver_cls=ReadFileToolResolver,
553
+ description=ToolDescription(
554
554
  description=tool_desc_gen.read_file.prompt(),
555
555
  ),
556
- "use_guideline": "",
557
- "category": "file_operation",
558
- "is_default": True,
559
- "case_docs": []
560
- },
561
- "write_to_file": {
562
- "tool_cls": WriteToFileTool,
563
- "resolver_cls": WriteToFileToolResolver,
564
- "description": ToolDescription(
556
+ use_guideline="",
557
+ category="file_operation",
558
+ is_default=True,
559
+ case_docs=[]
560
+ ),
561
+ "write_to_file": ToolDefinition(
562
+ tool_cls=WriteToFileTool,
563
+ resolver_cls=WriteToFileToolResolver,
564
+ description=ToolDescription(
565
565
  description=tool_desc_gen.write_to_file.prompt(),
566
566
  ),
567
- "example": ToolExample(
567
+ example=ToolExample(
568
568
  title="Requesting to create a new file",
569
569
  body=tool_examples_gen.example_2.prompt()
570
570
  ),
571
- "use_guideline": "",
572
- "category": "file_operation",
573
- "is_default": True,
574
- "case_docs": ["editing_files"]
575
- },
576
- "replace_in_file": {
577
- "tool_cls": ReplaceInFileTool,
578
- "resolver_cls": ReplaceInFileToolResolver,
579
- "description": ToolDescription(
571
+ use_guideline="",
572
+ category="file_operation",
573
+ is_default=True,
574
+ case_docs=["editing_files"]
575
+ ),
576
+ "replace_in_file": ToolDefinition(
577
+ tool_cls=ReplaceInFileTool,
578
+ resolver_cls=ReplaceInFileToolResolver,
579
+ description=ToolDescription(
580
580
  description=tool_desc_gen.replace_in_file.prompt(),
581
581
  ),
582
- "use_guideline": "",
583
- "example": ToolExample(
582
+ use_guideline="",
583
+ example=ToolExample(
584
584
  title="Requesting to make targeted edits to a file",
585
585
  body=tool_examples_gen.example_3.prompt()
586
586
  ),
587
- "category": "file_operation",
588
- "is_default": True,
589
- "case_docs": ["editing_files"]
590
- },
591
- "search_files": {
592
- "tool_cls": SearchFilesTool,
593
- "resolver_cls": SearchFilesToolResolver,
594
- "description": ToolDescription(
587
+ category="file_operation",
588
+ is_default=True,
589
+ case_docs=["editing_files"]
590
+ ),
591
+ "search_files": ToolDefinition(
592
+ tool_cls=SearchFilesTool,
593
+ resolver_cls=SearchFilesToolResolver,
594
+ description=ToolDescription(
595
595
  description=tool_desc_gen.search_files.prompt(),
596
596
  ),
597
- "use_guideline": "",
598
- "category": "file_operation",
599
- "is_default": True,
600
- "case_docs": []
601
- },
602
- "list_files": {
603
- "tool_cls": ListFilesTool,
604
- "resolver_cls": ListFilesToolResolver,
605
- "description": ToolDescription(
597
+ use_guideline="",
598
+ category="file_operation",
599
+ is_default=True,
600
+ case_docs=[]
601
+ ),
602
+ "list_files": ToolDefinition(
603
+ tool_cls=ListFilesTool,
604
+ resolver_cls=ListFilesToolResolver,
605
+ description=ToolDescription(
606
606
  description=tool_desc_gen.list_files.prompt(),
607
607
  ),
608
- "use_guideline": "",
609
- "category": "file_operation",
610
- "is_default": True,
611
- "case_docs": []
612
- },
613
- "ask_followup_question": {
614
- "tool_cls": AskFollowupQuestionTool,
615
- "resolver_cls": AskFollowupQuestionToolResolver,
616
- "description": ToolDescription(
608
+ use_guideline="",
609
+ category="file_operation",
610
+ is_default=True,
611
+ case_docs=[]
612
+ ),
613
+ "ask_followup_question": ToolDefinition(
614
+ tool_cls=AskFollowupQuestionTool,
615
+ resolver_cls=AskFollowupQuestionToolResolver,
616
+ description=ToolDescription(
617
617
  description=tool_desc_gen.ask_followup_question.prompt(),
618
618
  ),
619
- "use_guideline": "",
620
- "category": "interaction",
621
- "is_default": True,
622
- "case_docs": []
623
- },
624
- "attempt_completion": {
625
- "tool_cls": AttemptCompletionTool,
626
- "resolver_cls": AttemptCompletionToolResolver,
627
- "description": ToolDescription(
619
+ use_guideline="",
620
+ category="interaction",
621
+ is_default=True,
622
+ case_docs=[]
623
+ ),
624
+ "attempt_completion": ToolDefinition(
625
+ tool_cls=AttemptCompletionTool,
626
+ resolver_cls=AttemptCompletionToolResolver,
627
+ description=ToolDescription(
628
628
  description=tool_desc_gen.attempt_completion.prompt(),
629
629
  ),
630
- "use_guideline": "",
631
- "category": "interaction",
632
- "is_default": True,
633
- "case_docs": []
634
- },
635
- "plan_mode_respond": {
636
- "tool_cls": PlanModeRespondTool,
637
- "resolver_cls": PlanModeRespondToolResolver,
638
- "description": ToolDescription(
630
+ use_guideline="",
631
+ category="interaction",
632
+ is_default=True,
633
+ case_docs=[]
634
+ ),
635
+ "plan_mode_respond": ToolDefinition(
636
+ tool_cls=PlanModeRespondTool,
637
+ resolver_cls=PlanModeRespondToolResolver,
638
+ description=ToolDescription(
639
639
  description=tool_desc_gen.plan_mode_respond.prompt(),
640
640
  ),
641
- "use_guideline": "",
642
- "category": "interaction",
643
- "is_default": True,
644
- "case_docs": []
645
- },
646
- "use_mcp_tool": {
647
- "tool_cls": UseMcpTool,
648
- "resolver_cls": UseMcpToolResolver,
649
- "description": ToolDescription(
641
+ use_guideline="",
642
+ category="interaction",
643
+ is_default=True,
644
+ case_docs=[]
645
+ ),
646
+ "use_mcp_tool": ToolDefinition(
647
+ tool_cls=UseMcpTool,
648
+ resolver_cls=UseMcpToolResolver,
649
+ description=ToolDescription(
650
650
  description=tool_desc_gen.use_mcp_tool.prompt(),
651
651
  ),
652
- "example": ToolExample(
652
+ example=ToolExample(
653
653
  title="Another example of using an MCP tool (where the server name is a unique identifier listed in MCP_SERVER_LIST)",
654
654
  body=tool_examples_gen.example_4.prompt()
655
655
  ),
656
- "use_guideline": "",
657
- "category": "external",
658
- "is_default": True,
659
- "case_docs": []
660
- },
661
- "talk_to": {
662
- "tool_cls": TalkToTool,
663
- "resolver_cls": TalkToToolResolver,
664
- "description": ToolDescription(
656
+ use_guideline="",
657
+ category="external",
658
+ is_default=True,
659
+ case_docs=[]
660
+ ),
661
+ "talk_to": ToolDefinition(
662
+ tool_cls=TalkToTool,
663
+ resolver_cls=TalkToToolResolver,
664
+ description=ToolDescription(
665
665
  description=tool_desc_gen.talk_to.prompt(),
666
666
  ),
667
- "use_guideline": "",
668
- "category": "interaction",
669
- "is_default": True,
670
- "case_docs": []
671
- },
672
- "talk_to_group": {
673
- "tool_cls": TalkToGroupTool,
674
- "resolver_cls": TalkToGroupToolResolver,
675
- "description": ToolDescription(
667
+ use_guideline="",
668
+ category="interaction",
669
+ is_default=True,
670
+ case_docs=[]
671
+ ),
672
+ "talk_to_group": ToolDefinition(
673
+ tool_cls=TalkToGroupTool,
674
+ resolver_cls=TalkToGroupToolResolver,
675
+ description=ToolDescription(
676
676
  description=tool_desc_gen.talk_to_group_description.prompt(),
677
677
  ),
678
- "use_guideline": "",
679
- "category": "interaction",
680
- "is_default": True,
681
- "case_docs": []
682
- }
678
+ use_guideline="",
679
+ category="interaction",
680
+ is_default=True,
681
+ case_docs=[]
682
+ )
683
683
  }
684
- # 先使用统一的工具注册方法注册工具
684
+
685
+ # 直接传递 ToolDefinition 对象进行注册
685
686
  registered_count = 0
686
- for tool_tag, tool_info in DEFAULT_TOOLS.items():
687
+ for tool_tag, tool_definition in DEFAULT_TOOLS.items():
687
688
  # attempt_completion 工具是必须注册的
688
689
  if tool_tag == "attempt_completion":
689
- ToolRegistry.register_unified_tool(tool_tag, tool_info)
690
+ ToolRegistry.register_unified_tool(tool_tag, tool_definition)
690
691
  registered_count += 1
691
692
  continue
692
693
 
@@ -694,7 +695,7 @@ def register_default_tools(params: Dict[str, Any], default_tools_list: Optional[
694
695
  if default_tools_list is not None and tool_tag not in default_tools_list:
695
696
  continue
696
697
 
697
- ToolRegistry.register_unified_tool(tool_tag, tool_info)
698
+ ToolRegistry.register_unified_tool(tool_tag, tool_definition)
698
699
  registered_count += 1
699
700
 
700
701
  logger.info(
@@ -51,7 +51,7 @@ def setup_file_monitor(temp_test_dir):
51
51
 
52
52
  # 加载规则文件
53
53
  try:
54
- from autocoder.common.rulefiles.autocoderrules_utils import get_rules, reset_rules_manager
54
+ from autocoder.common.rulefiles import get_rules, reset_rules_manager
55
55
  reset_rules_manager() # 重置规则管理器,确保测试隔离性
56
56
  rules = get_rules(temp_test_dir)
57
57
  print(f"已加载规则: {len(rules)} 条")
@@ -1,7 +1,7 @@
1
- from typing import Dict, Type, ClassVar, Optional, List
1
+ from typing import Dict, Type, ClassVar, Optional, List, Union
2
2
  import logging
3
3
  import inspect
4
- from .types import BaseTool, ToolDescription, ToolExample
4
+ from .types import BaseTool, ToolDescription, ToolExample, ToolDefinition
5
5
  from .tools.base_tool_resolver import BaseToolResolver
6
6
 
7
7
  from loguru import logger
@@ -99,30 +99,42 @@ class ToolRegistry:
99
99
  logger.info(f"成功注册工具用例文档: {case_name}, 包含工具: {', '.join(tools)}")
100
100
 
101
101
  @classmethod
102
- def register_unified_tool(cls, tool_tag: str, tool_info: Dict) -> None:
102
+ def register_unified_tool(cls, tool_tag: str, tool_info: Union[ToolDefinition, Dict]) -> None:
103
103
  """
104
104
  统一注册工具的所有相关信息
105
105
 
106
106
  Args:
107
107
  tool_tag: 工具标签
108
- tool_info: 工具信息字典,包含以下字段:
109
- - tool_cls: 工具类
110
- - resolver_cls: 解析器类
111
- - description: 工具描述对象
112
- - example: 工具示例对象
113
- - use_guideline: 工具使用指南(可选)
114
- - category: 工具分类(可选)
115
- - is_default: 是否为默认工具(可选,默认为False)
116
- - case_docs: 关联的用例文档列表(可选)
117
- """
108
+ tool_info: 工具信息,可以是:
109
+ - ToolDefinition 对象
110
+ - 工具信息字典,包含以下字段:
111
+ - tool_cls: 工具类
112
+ - resolver_cls: 解析器类
113
+ - description: 工具描述对象
114
+ - example: 工具示例对象
115
+ - use_guideline: 工具使用指南(可选)
116
+ - category: 工具分类(可选)
117
+ - is_default: 是否为默认工具(可选,默认为False)
118
+ - case_docs: 关联的用例文档列表(可选)
119
+ """
120
+ # 如果是字典,转换为 ToolDefinition 对象以进行验证
121
+ if isinstance(tool_info, dict):
122
+ try:
123
+ tool_definition = ToolDefinition(**tool_info)
124
+ except Exception as e:
125
+ logger.error(f"注册工具 {tool_tag} 失败:无法创建 ToolDefinition 对象 - {e}")
126
+ return
127
+ else:
128
+ tool_definition = tool_info
129
+
118
130
  # 提取工具信息
119
- tool_cls = tool_info.get("tool_cls")
120
- resolver_cls = tool_info.get("resolver_cls")
121
- description = tool_info.get("description")
122
- example = tool_info.get("example")
123
- use_guideline = tool_info.get("use_guideline", "")
124
- is_default = tool_info.get("is_default", False)
125
- case_docs = tool_info.get("case_docs", [])
131
+ tool_cls = tool_definition.tool_cls
132
+ resolver_cls = tool_definition.resolver_cls
133
+ description = tool_definition.description
134
+ example = tool_definition.example
135
+ use_guideline = tool_definition.use_guideline
136
+ is_default = tool_definition.is_default
137
+ case_docs = tool_definition.case_docs
126
138
 
127
139
  # 验证必要字段
128
140
  if not all([tool_cls, resolver_cls, description]):
@@ -1,13 +1,14 @@
1
1
  import os
2
2
  from typing import Dict, Any, Optional
3
+ from autocoder.common.autocoderargs_parser import AutoCoderArgsParser
3
4
  from autocoder.agent.base_agentic.tools.base_tool_resolver import BaseToolResolver
4
5
  from autocoder.agent.base_agentic.types import ReadFileTool, ToolResult # Import ToolResult from types
5
6
  from loguru import logger
6
7
  import typing
7
8
  from autocoder.common import AutoCoderArgs
8
- from autocoder.common.context_pruner import PruneContext
9
+ from autocoder.common.pruner.context_pruner import PruneContext
9
10
  from autocoder.common import SourceCode
10
- from autocoder.rag.token_counter import count_tokens
11
+ from autocoder.common.tokens import count_string_tokens as count_tokens
11
12
  from loguru import logger
12
13
  import typing
13
14
  from autocoder.rag.loaders import (
@@ -25,12 +26,31 @@ class ReadFileToolResolver(BaseToolResolver):
25
26
  super().__init__(agent, tool, args)
26
27
  self.tool: ReadFileTool = tool # For type hinting
27
28
  self.shadow_manager = self.agent.shadow_manager if self.agent else None
29
+
30
+ # Initialize AutoCoderArgs parser for flexible parameter parsing
31
+ self.args_parser = AutoCoderArgsParser()
32
+
33
+ # 解析 context_prune_safe_zone_tokens 参数
34
+ parsed_safe_zone_tokens = self._get_parsed_safe_zone_tokens()
35
+
28
36
  self.context_pruner = PruneContext(
29
- max_tokens=self.args.context_prune_safe_zone_tokens,
37
+ max_tokens=parsed_safe_zone_tokens,
30
38
  args=self.args,
31
39
  llm=self.agent.context_prune_llm
32
40
  )
33
41
 
42
+ def _get_parsed_safe_zone_tokens(self) -> int:
43
+ """
44
+ 解析 context_prune_safe_zone_tokens 参数,支持多种格式
45
+
46
+ Returns:
47
+ 解析后的 token 数量
48
+ """
49
+ return self.args_parser.parse_context_prune_safe_zone_tokens(
50
+ self.args.context_prune_safe_zone_tokens,
51
+ self.args.code_model
52
+ )
53
+
34
54
  def _prune_file_content(self, content: str, file_path: str) -> str:
35
55
  """对文件内容进行剪枝处理"""
36
56
  if not self.context_pruner:
@@ -38,7 +58,8 @@ class ReadFileToolResolver(BaseToolResolver):
38
58
 
39
59
  # 计算 token 数量
40
60
  tokens = count_tokens(content)
41
- if tokens <= self.args.context_prune_safe_zone_tokens:
61
+ parsed_safe_zone_tokens = self._get_parsed_safe_zone_tokens()
62
+ if tokens <= parsed_safe_zone_tokens:
42
63
  return content
43
64
 
44
65
  # 创建 SourceCode 对象
@@ -76,22 +76,33 @@ class WriteToFileToolResolver(BaseToolResolver):
76
76
  return "\n".join(formatted_issues)
77
77
 
78
78
 
79
- def write_file_normal(self, file_path: str, content: str, source_dir: str, abs_project_dir: str, abs_file_path: str) -> ToolResult:
79
+ def write_file_normal(self, file_path: str, content: str, source_dir: str, abs_project_dir: str, abs_file_path: str, mode: str = "write") -> ToolResult:
80
80
  """Write file directly without using shadow manager"""
81
81
  try:
82
- os.makedirs(os.path.dirname(abs_file_path), exist_ok=True)
82
+ os.makedirs(os.path.dirname(abs_file_path), exist_ok=True)
83
+
84
+ is_new = not os.path.exists(abs_file_path)
85
+ new_content_to_write = content
86
+ if mode == "append" and not is_new:
87
+ try:
88
+ with open(abs_file_path, 'r', encoding='utf-8') as f:
89
+ existing_content = f.read()
90
+ except Exception:
91
+ existing_content = ""
92
+ new_content_to_write = f"{existing_content}{content}"
83
93
 
84
94
  if self.agent:
85
95
  rel_path = os.path.relpath(abs_file_path, abs_project_dir)
86
- self.agent.record_file_change(rel_path, "added", diff=None, content=content)
96
+ change_type = "added" if is_new else "modified"
97
+ self.agent.record_file_change(rel_path, change_type, diff=None, content=new_content_to_write)
87
98
 
88
99
  if self.agent and self.agent.checkpoint_manager:
89
100
  changes = {
90
101
  file_path: CheckpointFileChange(
91
102
  file_path=file_path,
92
- content=content,
103
+ content=new_content_to_write,
93
104
  is_deletion=False,
94
- is_new=True
105
+ is_new=is_new
95
106
  )
96
107
  }
97
108
  change_group_id = self.args.event_file
@@ -101,11 +112,13 @@ class WriteToFileToolResolver(BaseToolResolver):
101
112
  conversations=self.agent.current_conversations,
102
113
  change_group_id=change_group_id,
103
114
  metadata={"event_file": self.args.event_file}
104
- )
115
+ )
105
116
  else:
106
- with open(abs_file_path, 'w', encoding='utf-8') as f:
107
- f.write(content)
108
- logger.info(f"Successfully wrote to file: {file_path}")
117
+ open_mode = 'a' if (mode == "append" and not is_new) else 'w'
118
+ with open(abs_file_path, open_mode, encoding='utf-8') as f:
119
+ f.write(content if open_mode == 'a' else new_content_to_write)
120
+ action_text = "appended to" if (mode == "append" and not is_new) else "wrote to"
121
+ logger.info(f"Successfully {action_text} file: {file_path}")
109
122
 
110
123
  # 新增:执行代码质量检查
111
124
  lint_results = None
@@ -167,5 +180,5 @@ class WriteToFileToolResolver(BaseToolResolver):
167
180
  # Security check: ensure the path is within the source directory
168
181
  if not abs_file_path.startswith(abs_project_dir):
169
182
  return ToolResult(success=False, message=f"Error: Access denied. Attempted to write file outside the project directory: {file_path}")
170
-
171
- return self.write_file_normal(file_path, content, source_dir, abs_project_dir, abs_file_path)
183
+ mode = getattr(self.tool, "mode", "write")
184
+ return self.write_file_normal(file_path, content, source_dir, abs_project_dir, abs_file_path, mode=mode)
@@ -2,6 +2,25 @@ from pydantic import BaseModel, SkipValidation
2
2
  from typing import List, Dict, Any, Optional, Type, Union, Tuple, Generator, Literal
3
3
 
4
4
 
5
+ # 对话配置类
6
+ class ConversationAction(BaseModel):
7
+ """对话动作配置"""
8
+ action: str
9
+ conversation_name: Optional[str] = None
10
+ conversation_id: Optional[str] = None
11
+
12
+
13
+ class AgenticEditConversationConfig(BaseModel):
14
+ """代理编辑对话配置"""
15
+ conversation_name: Optional[str] = "current"
16
+ conversation_id: Optional[str] = None
17
+ action: Optional[str] = None
18
+ query: Optional[str] = None
19
+ pull_request: bool = False
20
+ pre_commit: bool = False
21
+ post_commit: bool = False
22
+
23
+
5
24
  # 工具结果类,由工具解析器使用
6
25
  class ToolResult(BaseModel):
7
26
  """
@@ -30,6 +49,7 @@ class ReadFileTool(BaseTool):
30
49
  class WriteToFileTool(BaseTool):
31
50
  path: str
32
51
  content: str
52
+ mode: str = "write" # "write" or "append"
33
53
 
34
54
  class ReplaceInFileTool(BaseTool):
35
55
  path: str
@@ -90,6 +110,23 @@ class ToolExample(BaseModel):
90
110
  body: str # 示例内容
91
111
 
92
112
 
113
+ class ToolDefinition(BaseModel):
114
+ """
115
+ 工具定义模型,用于统一管理工具配置
116
+ """
117
+ tool_cls: Type[BaseTool] # 工具类
118
+ resolver_cls: Type # 解析器类
119
+ description: ToolDescription # 工具描述
120
+ example: Optional[ToolExample] = None # 工具示例(可选)
121
+ use_guideline: str = "" # 使用指南
122
+ category: str = "general" # 工具分类
123
+ is_default: bool = False # 是否为默认工具
124
+ case_docs: List[str] = [] # 相关用例文档
125
+
126
+ class Config:
127
+ arbitrary_types_allowed = True # 允许任意类型(如 Type)
128
+
129
+
93
130
  class RoleDescription(BaseModel):
94
131
  """
95
132
  代理角色描述
@@ -136,6 +173,10 @@ class ErrorEvent(BaseModel):
136
173
  """表示过程中的错误"""
137
174
  message: str
138
175
 
176
+ class RetryEvent(BaseModel):
177
+ """表示需要重试的事件,通常在流处理未完成时触发"""
178
+ message: str
179
+
139
180
  class PlanModeRespondEvent(BaseModel):
140
181
  """Represents the LLM attempting to complete the task."""
141
182
  completion: SkipValidation[PlanModeRespondTool] # Skip validation
@@ -151,6 +192,7 @@ AgentEvent = Union[
151
192
  TokenUsageEvent,
152
193
  CompletionEvent,
153
194
  ErrorEvent,
195
+ RetryEvent,
154
196
  PlanModeRespondEvent
155
197
  ]
156
198