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

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

Potentially problematic release.


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

Files changed (574) hide show
  1. auto_coder-2.0.1.dist-info/LICENSE +158 -0
  2. auto_coder-2.0.1.dist-info/METADATA +558 -0
  3. auto_coder-2.0.1.dist-info/RECORD +795 -0
  4. {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/WHEEL +1 -1
  5. {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/entry_points.txt +3 -3
  6. autocoder/__init__.py +31 -0
  7. autocoder/agent/auto_filegroup.py +32 -13
  8. autocoder/agent/auto_learn_from_commit.py +9 -1
  9. autocoder/agent/base_agentic/__init__.py +3 -0
  10. autocoder/agent/base_agentic/agent_hub.py +1 -1
  11. autocoder/agent/base_agentic/base_agent.py +235 -136
  12. autocoder/agent/base_agentic/default_tools.py +119 -118
  13. autocoder/agent/base_agentic/test_base_agent.py +1 -1
  14. autocoder/agent/base_agentic/tool_registry.py +32 -20
  15. autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +24 -3
  16. autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
  17. autocoder/agent/base_agentic/types.py +42 -0
  18. autocoder/agent/entry_command_agent/chat.py +77 -73
  19. autocoder/auto_coder.py +31 -40
  20. autocoder/auto_coder_rag.py +11 -1084
  21. autocoder/auto_coder_runner.py +962 -2345
  22. autocoder/auto_coder_terminal.py +26 -0
  23. autocoder/auto_coder_terminal_v3.py +190 -0
  24. autocoder/chat/conf_command.py +224 -124
  25. autocoder/chat/models_command.py +361 -299
  26. autocoder/chat/rules_command.py +79 -31
  27. autocoder/chat_auto_coder.py +988 -398
  28. autocoder/chat_auto_coder_lang.py +23 -732
  29. autocoder/commands/auto_command.py +25 -8
  30. autocoder/commands/auto_web.py +1 -1
  31. autocoder/commands/tools.py +44 -44
  32. autocoder/common/__init__.py +150 -128
  33. autocoder/common/ac_style_command_parser/__init__.py +39 -2
  34. autocoder/common/ac_style_command_parser/config.py +422 -0
  35. autocoder/common/ac_style_command_parser/parser.py +292 -78
  36. autocoder/common/ac_style_command_parser/test_parser.py +241 -16
  37. autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
  38. autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
  39. autocoder/common/action_yml_file_manager.py +25 -13
  40. autocoder/common/agent_events/__init__.py +52 -0
  41. autocoder/common/agent_events/agent_event_emitter.py +193 -0
  42. autocoder/common/agent_events/event_factory.py +177 -0
  43. autocoder/common/agent_events/examples.py +307 -0
  44. autocoder/common/agent_events/types.py +113 -0
  45. autocoder/common/agent_events/utils.py +68 -0
  46. autocoder/common/agent_hooks/__init__.py +44 -0
  47. autocoder/common/agent_hooks/examples.py +582 -0
  48. autocoder/common/agent_hooks/hook_executor.py +217 -0
  49. autocoder/common/agent_hooks/hook_manager.py +288 -0
  50. autocoder/common/agent_hooks/types.py +133 -0
  51. autocoder/common/agent_hooks/utils.py +99 -0
  52. autocoder/common/agent_query_queue/queue_executor.py +324 -0
  53. autocoder/common/agent_query_queue/queue_manager.py +325 -0
  54. autocoder/common/agents/__init__.py +11 -0
  55. autocoder/common/agents/agent_manager.py +323 -0
  56. autocoder/common/agents/agent_parser.py +189 -0
  57. autocoder/common/agents/example_usage.py +344 -0
  58. autocoder/common/agents/integration_example.py +330 -0
  59. autocoder/common/agents/test_agent_parser.py +545 -0
  60. autocoder/common/async_utils.py +101 -0
  61. autocoder/common/auto_coder_lang.py +23 -972
  62. autocoder/common/autocoderargs_parser/__init__.py +14 -0
  63. autocoder/common/autocoderargs_parser/parser.py +184 -0
  64. autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
  65. autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
  66. autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
  67. autocoder/common/autocoderargs_parser/token_parser.py +290 -0
  68. autocoder/common/buildin_tokenizer.py +2 -4
  69. autocoder/common/code_auto_generate.py +149 -74
  70. autocoder/common/code_auto_generate_diff.py +163 -70
  71. autocoder/common/code_auto_generate_editblock.py +179 -89
  72. autocoder/common/code_auto_generate_strict_diff.py +167 -72
  73. autocoder/common/code_auto_merge_editblock.py +13 -6
  74. autocoder/common/code_modification_ranker.py +1 -1
  75. autocoder/common/command_completer.py +3 -3
  76. autocoder/common/command_file_manager/manager.py +183 -47
  77. autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
  78. autocoder/common/command_templates.py +1 -1
  79. autocoder/common/conf_utils.py +2 -4
  80. autocoder/common/conversations/config.py +11 -3
  81. autocoder/common/conversations/get_conversation_manager.py +100 -2
  82. autocoder/common/conversations/llm_stats_models.py +264 -0
  83. autocoder/common/conversations/manager.py +112 -28
  84. autocoder/common/conversations/models.py +16 -2
  85. autocoder/common/conversations/storage/index_manager.py +134 -10
  86. autocoder/common/core_config/__init__.py +63 -0
  87. autocoder/common/core_config/agentic_mode_manager.py +109 -0
  88. autocoder/common/core_config/base_manager.py +123 -0
  89. autocoder/common/core_config/compatibility.py +151 -0
  90. autocoder/common/core_config/config_manager.py +156 -0
  91. autocoder/common/core_config/conversation_manager.py +31 -0
  92. autocoder/common/core_config/exclude_manager.py +72 -0
  93. autocoder/common/core_config/file_manager.py +177 -0
  94. autocoder/common/core_config/human_as_model_manager.py +129 -0
  95. autocoder/common/core_config/lib_manager.py +54 -0
  96. autocoder/common/core_config/main_manager.py +81 -0
  97. autocoder/common/core_config/mode_manager.py +126 -0
  98. autocoder/common/core_config/models.py +70 -0
  99. autocoder/common/core_config/test_memory_manager.py +1056 -0
  100. autocoder/common/env_manager.py +282 -0
  101. autocoder/common/env_manager_usage_example.py +211 -0
  102. autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
  103. autocoder/common/file_checkpoint/manager.py +264 -48
  104. autocoder/common/file_checkpoint/test_backup.py +1 -18
  105. autocoder/common/file_checkpoint/test_manager.py +270 -1
  106. autocoder/common/file_checkpoint/test_store.py +1 -17
  107. autocoder/common/file_handler/__init__.py +23 -0
  108. autocoder/common/file_handler/active_context_handler.py +159 -0
  109. autocoder/common/file_handler/add_files_handler.py +409 -0
  110. autocoder/common/file_handler/chat_handler.py +180 -0
  111. autocoder/common/file_handler/coding_handler.py +409 -0
  112. autocoder/common/file_handler/commit_handler.py +200 -0
  113. autocoder/common/file_handler/lib_handler.py +156 -0
  114. autocoder/common/file_handler/list_files_handler.py +111 -0
  115. autocoder/common/file_handler/mcp_handler.py +268 -0
  116. autocoder/common/file_handler/models_handler.py +493 -0
  117. autocoder/common/file_handler/remove_files_handler.py +172 -0
  118. autocoder/common/git_utils.py +44 -8
  119. autocoder/common/global_cancel.py +15 -6
  120. autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
  121. autocoder/common/international/__init__.py +31 -0
  122. autocoder/common/international/demo_international.py +92 -0
  123. autocoder/common/international/message_manager.py +157 -0
  124. autocoder/common/international/messages/__init__.py +56 -0
  125. autocoder/common/international/messages/async_command_messages.py +507 -0
  126. autocoder/common/international/messages/auto_coder_messages.py +2208 -0
  127. autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
  128. autocoder/common/international/messages/command_help_messages.py +986 -0
  129. autocoder/common/international/messages/conversation_command_messages.py +191 -0
  130. autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
  131. autocoder/common/international/messages/queue_command_messages.py +751 -0
  132. autocoder/common/international/messages/rules_command_messages.py +77 -0
  133. autocoder/common/international/messages/sdk_messages.py +1707 -0
  134. autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
  135. autocoder/common/international/messages/tool_display_messages.py +1212 -0
  136. autocoder/common/international/messages/workflow_exception_messages.py +473 -0
  137. autocoder/common/international/test_international.py +612 -0
  138. autocoder/common/linter_core/__init__.py +28 -0
  139. autocoder/common/linter_core/base_linter.py +61 -0
  140. autocoder/common/linter_core/config_loader.py +271 -0
  141. autocoder/common/linter_core/formatters/__init__.py +0 -0
  142. autocoder/common/linter_core/formatters/base_formatter.py +38 -0
  143. autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
  144. autocoder/common/linter_core/linter.py +166 -0
  145. autocoder/common/linter_core/linter_factory.py +216 -0
  146. autocoder/common/linter_core/linter_manager.py +333 -0
  147. autocoder/common/linter_core/linters/__init__.py +9 -0
  148. autocoder/common/linter_core/linters/java_linter.py +342 -0
  149. autocoder/common/linter_core/linters/python_linter.py +115 -0
  150. autocoder/common/linter_core/linters/typescript_linter.py +119 -0
  151. autocoder/common/linter_core/models/__init__.py +7 -0
  152. autocoder/common/linter_core/models/lint_result.py +91 -0
  153. autocoder/common/linter_core/models.py +33 -0
  154. autocoder/common/linter_core/tests/__init__.py +3 -0
  155. autocoder/common/linter_core/tests/test_config_loader.py +323 -0
  156. autocoder/common/linter_core/tests/test_config_loading.py +308 -0
  157. autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
  158. autocoder/common/linter_core/tests/test_formatters.py +147 -0
  159. autocoder/common/linter_core/tests/test_integration.py +317 -0
  160. autocoder/common/linter_core/tests/test_java_linter.py +496 -0
  161. autocoder/common/linter_core/tests/test_linters.py +265 -0
  162. autocoder/common/linter_core/tests/test_models.py +81 -0
  163. autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
  164. autocoder/common/linter_core/tests/verify_fixes.py +183 -0
  165. autocoder/common/llm_friendly_package/__init__.py +31 -0
  166. autocoder/common/llm_friendly_package/base_manager.py +102 -0
  167. autocoder/common/llm_friendly_package/docs_manager.py +121 -0
  168. autocoder/common/llm_friendly_package/library_manager.py +171 -0
  169. autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
  170. autocoder/common/llm_friendly_package/models.py +40 -0
  171. autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
  172. autocoder/common/llms/__init__.py +15 -0
  173. autocoder/common/llms/demo_error_handling.py +85 -0
  174. autocoder/common/llms/factory.py +142 -0
  175. autocoder/common/llms/manager.py +264 -0
  176. autocoder/common/llms/pricing.py +121 -0
  177. autocoder/common/llms/registry.py +316 -0
  178. autocoder/common/llms/schema.py +77 -0
  179. autocoder/common/llms/simple_demo.py +45 -0
  180. autocoder/common/llms/test_quick_model.py +116 -0
  181. autocoder/common/llms/test_remove_functionality.py +182 -0
  182. autocoder/common/llms/tests/__init__.py +1 -0
  183. autocoder/common/llms/tests/test_manager.py +330 -0
  184. autocoder/common/llms/tests/test_registry.py +364 -0
  185. autocoder/common/mcp_tools/__init__.py +62 -0
  186. autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
  187. autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
  188. autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
  189. autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
  190. autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
  191. autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
  192. autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
  193. autocoder/common/mcp_tools/verify_functionality.py +202 -0
  194. autocoder/common/model_speed_tester.py +32 -26
  195. autocoder/common/priority_directory_finder/__init__.py +142 -0
  196. autocoder/common/priority_directory_finder/examples.py +230 -0
  197. autocoder/common/priority_directory_finder/finder.py +283 -0
  198. autocoder/common/priority_directory_finder/models.py +236 -0
  199. autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
  200. autocoder/common/project_scanner/__init__.py +18 -0
  201. autocoder/common/project_scanner/compat.py +77 -0
  202. autocoder/common/project_scanner/scanner.py +436 -0
  203. autocoder/common/project_tracker/__init__.py +27 -0
  204. autocoder/common/project_tracker/api.py +228 -0
  205. autocoder/common/project_tracker/demo.py +272 -0
  206. autocoder/common/project_tracker/tracker.py +487 -0
  207. autocoder/common/project_tracker/types.py +53 -0
  208. autocoder/common/pruner/__init__.py +67 -0
  209. autocoder/common/pruner/agentic_conversation_pruner.py +651 -102
  210. autocoder/common/pruner/conversation_message_ids_api.py +386 -0
  211. autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
  212. autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
  213. autocoder/common/pruner/conversation_normalizer.py +347 -0
  214. autocoder/common/pruner/conversation_pruner.py +26 -6
  215. autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
  216. autocoder/common/pruner/test_conversation_normalizer.py +502 -0
  217. autocoder/common/pruner/test_tool_content_detector.py +324 -0
  218. autocoder/common/pruner/tool_content_detector.py +227 -0
  219. autocoder/common/pruner/tools/__init__.py +18 -0
  220. autocoder/common/pruner/tools/query_message_ids.py +264 -0
  221. autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
  222. autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
  223. autocoder/common/pull_requests/__init__.py +9 -1
  224. autocoder/common/pull_requests/utils.py +122 -1
  225. autocoder/common/rag_manager/rag_manager.py +36 -40
  226. autocoder/common/rulefiles/__init__.py +53 -1
  227. autocoder/common/rulefiles/api.py +250 -0
  228. autocoder/common/rulefiles/core/__init__.py +14 -0
  229. autocoder/common/rulefiles/core/manager.py +241 -0
  230. autocoder/common/rulefiles/core/selector.py +805 -0
  231. autocoder/common/rulefiles/models/__init__.py +20 -0
  232. autocoder/common/rulefiles/models/index.py +16 -0
  233. autocoder/common/rulefiles/models/init_rule.py +18 -0
  234. autocoder/common/rulefiles/models/rule_file.py +18 -0
  235. autocoder/common/rulefiles/models/rule_relevance.py +14 -0
  236. autocoder/common/rulefiles/models/summary.py +16 -0
  237. autocoder/common/rulefiles/test_rulefiles.py +776 -0
  238. autocoder/common/rulefiles/utils/__init__.py +34 -0
  239. autocoder/common/rulefiles/utils/monitor.py +86 -0
  240. autocoder/common/rulefiles/utils/parser.py +230 -0
  241. autocoder/common/save_formatted_log.py +67 -10
  242. autocoder/common/search_replace.py +8 -1
  243. autocoder/common/search_replace_patch/__init__.py +24 -0
  244. autocoder/common/search_replace_patch/base.py +115 -0
  245. autocoder/common/search_replace_patch/manager.py +248 -0
  246. autocoder/common/search_replace_patch/patch_replacer.py +304 -0
  247. autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
  248. autocoder/common/search_replace_patch/string_replacer.py +181 -0
  249. autocoder/common/search_replace_patch/tests/__init__.py +3 -0
  250. autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
  251. autocoder/common/search_replace_patch/tests/test_base.py +188 -0
  252. autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
  253. autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
  254. autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
  255. autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
  256. autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
  257. autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
  258. autocoder/common/shell_commands/__init__.py +197 -0
  259. autocoder/common/shell_commands/background_process_notifier.py +346 -0
  260. autocoder/common/shell_commands/command_executor.py +1127 -0
  261. autocoder/common/shell_commands/error_recovery.py +541 -0
  262. autocoder/common/shell_commands/exceptions.py +120 -0
  263. autocoder/common/shell_commands/interactive_executor.py +476 -0
  264. autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
  265. autocoder/common/shell_commands/interactive_process.py +744 -0
  266. autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
  267. autocoder/common/shell_commands/monitoring.py +529 -0
  268. autocoder/common/shell_commands/process_cleanup.py +386 -0
  269. autocoder/common/shell_commands/process_manager.py +606 -0
  270. autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
  271. autocoder/common/shell_commands/tests/__init__.py +6 -0
  272. autocoder/common/shell_commands/tests/conftest.py +118 -0
  273. autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
  274. autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
  275. autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
  276. autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
  277. autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
  278. autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
  279. autocoder/common/shell_commands/tests/test_integration.py +664 -0
  280. autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
  281. autocoder/common/shell_commands/tests/test_performance.py +632 -0
  282. autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
  283. autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
  284. autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
  285. autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
  286. autocoder/common/shell_commands/timeout_config.py +315 -0
  287. autocoder/common/shell_commands/timeout_manager.py +352 -0
  288. autocoder/common/terminal_paste/__init__.py +14 -0
  289. autocoder/common/terminal_paste/demo.py +145 -0
  290. autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
  291. autocoder/common/terminal_paste/paste_handler.py +200 -0
  292. autocoder/common/terminal_paste/paste_manager.py +118 -0
  293. autocoder/common/terminal_paste/tests/__init__.py +1 -0
  294. autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
  295. autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
  296. autocoder/common/terminal_paste/utils.py +163 -0
  297. autocoder/common/test_autocoder_args.py +232 -0
  298. autocoder/common/test_env_manager.py +173 -0
  299. autocoder/common/test_env_manager_integration.py +159 -0
  300. autocoder/common/text_similarity/__init__.py +9 -0
  301. autocoder/common/text_similarity/demo.py +216 -0
  302. autocoder/common/text_similarity/examples.py +266 -0
  303. autocoder/common/text_similarity/test_text_similarity.py +306 -0
  304. autocoder/common/text_similarity/text_similarity.py +194 -0
  305. autocoder/common/text_similarity/utils.py +125 -0
  306. autocoder/common/todos/__init__.py +61 -0
  307. autocoder/common/todos/cache/__init__.py +16 -0
  308. autocoder/common/todos/cache/base_cache.py +89 -0
  309. autocoder/common/todos/cache/cache_manager.py +228 -0
  310. autocoder/common/todos/cache/memory_cache.py +225 -0
  311. autocoder/common/todos/config.py +155 -0
  312. autocoder/common/todos/exceptions.py +35 -0
  313. autocoder/common/todos/get_todo_manager.py +161 -0
  314. autocoder/common/todos/manager.py +537 -0
  315. autocoder/common/todos/models.py +239 -0
  316. autocoder/common/todos/storage/__init__.py +14 -0
  317. autocoder/common/todos/storage/base_storage.py +76 -0
  318. autocoder/common/todos/storage/file_storage.py +278 -0
  319. autocoder/common/tokens/counter.py +24 -2
  320. autocoder/common/tools_manager/__init__.py +17 -0
  321. autocoder/common/tools_manager/examples.py +162 -0
  322. autocoder/common/tools_manager/manager.py +385 -0
  323. autocoder/common/tools_manager/models.py +39 -0
  324. autocoder/common/tools_manager/test_tools_manager.py +303 -0
  325. autocoder/common/tools_manager/utils.py +191 -0
  326. autocoder/common/v2/agent/agentic_callbacks.py +270 -0
  327. autocoder/common/v2/agent/agentic_edit.py +2699 -1856
  328. autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
  329. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
  330. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
  331. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
  332. autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
  333. autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
  334. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
  335. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
  336. autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
  337. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +564 -29
  338. autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
  339. autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
  340. autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
  341. autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
  342. autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
  343. autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
  344. autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +356 -0
  345. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
  346. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
  347. autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
  348. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +410 -86
  349. autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
  350. autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
  351. autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
  352. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +207 -192
  353. autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
  354. autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
  355. autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
  356. autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
  357. autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
  358. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
  359. autocoder/common/v2/agent/agentic_edit_types.py +343 -9
  360. autocoder/common/v2/agent/runner/__init__.py +3 -3
  361. autocoder/common/v2/agent/runner/base_runner.py +12 -26
  362. autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
  363. autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
  364. autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
  365. autocoder/common/v2/agent/runner/tool_display.py +557 -159
  366. autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
  367. autocoder/common/v2/agent/test_agentic_edit.py +194 -0
  368. autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
  369. autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
  370. autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
  371. autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
  372. autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
  373. autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
  374. autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
  375. autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
  376. autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
  377. autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
  378. autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
  379. autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
  380. autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
  381. autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
  382. autocoder/common/v2/code_auto_generate.py +136 -78
  383. autocoder/common/v2/code_auto_generate_diff.py +135 -79
  384. autocoder/common/v2/code_auto_generate_editblock.py +174 -99
  385. autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
  386. autocoder/common/v2/code_auto_merge.py +1 -1
  387. autocoder/common/v2/code_auto_merge_editblock.py +13 -1
  388. autocoder/common/v2/code_diff_manager.py +3 -3
  389. autocoder/common/v2/code_editblock_manager.py +4 -14
  390. autocoder/common/v2/code_manager.py +1 -1
  391. autocoder/common/v2/code_strict_diff_manager.py +2 -2
  392. autocoder/common/wrap_llm_hint/__init__.py +10 -0
  393. autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
  394. autocoder/common/wrap_llm_hint/utils.py +432 -0
  395. autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
  396. autocoder/completer/__init__.py +8 -0
  397. autocoder/completer/command_completer_v2.py +1094 -0
  398. autocoder/default_project/__init__.py +501 -0
  399. autocoder/dispacher/__init__.py +4 -12
  400. autocoder/dispacher/actions/action.py +400 -129
  401. autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
  402. autocoder/index/entry.py +117 -125
  403. autocoder/{agent → index/filter}/agentic_filter.py +322 -333
  404. autocoder/index/filter/normal_filter.py +5 -11
  405. autocoder/index/filter/quick_filter.py +1 -1
  406. autocoder/index/index.py +36 -9
  407. autocoder/index/tests/__init__.py +1 -0
  408. autocoder/index/tests/run_tests.py +195 -0
  409. autocoder/index/tests/test_entry.py +303 -0
  410. autocoder/index/tests/test_index_manager.py +314 -0
  411. autocoder/index/tests/test_module_integration.py +300 -0
  412. autocoder/index/tests/test_symbols_utils.py +183 -0
  413. autocoder/inner/__init__.py +4 -0
  414. autocoder/inner/agentic.py +923 -0
  415. autocoder/inner/async_command_handler.py +992 -0
  416. autocoder/inner/conversation_command_handlers.py +623 -0
  417. autocoder/inner/merge_command_handler.py +213 -0
  418. autocoder/inner/queue_command_handler.py +684 -0
  419. autocoder/models.py +95 -266
  420. autocoder/plugins/git_helper_plugin.py +31 -29
  421. autocoder/plugins/token_helper_plugin.py +65 -46
  422. autocoder/pyproject/__init__.py +32 -29
  423. autocoder/rag/agentic_rag.py +215 -75
  424. autocoder/rag/cache/simple_cache.py +1 -2
  425. autocoder/rag/loaders/image_loader.py +1 -1
  426. autocoder/rag/long_context_rag.py +42 -26
  427. autocoder/rag/qa_conversation_strategy.py +1 -1
  428. autocoder/rag/terminal/__init__.py +17 -0
  429. autocoder/rag/terminal/args.py +581 -0
  430. autocoder/rag/terminal/bootstrap.py +61 -0
  431. autocoder/rag/terminal/command_handlers.py +653 -0
  432. autocoder/rag/terminal/formatters/__init__.py +20 -0
  433. autocoder/rag/terminal/formatters/base.py +70 -0
  434. autocoder/rag/terminal/formatters/json_format.py +66 -0
  435. autocoder/rag/terminal/formatters/stream_json.py +95 -0
  436. autocoder/rag/terminal/formatters/text.py +28 -0
  437. autocoder/rag/terminal/init.py +120 -0
  438. autocoder/rag/terminal/utils.py +106 -0
  439. autocoder/rag/test_agentic_rag.py +389 -0
  440. autocoder/rag/test_doc_filter.py +3 -3
  441. autocoder/rag/test_long_context_rag.py +1 -1
  442. autocoder/rag/test_token_limiter.py +517 -10
  443. autocoder/rag/token_counter.py +3 -0
  444. autocoder/rag/token_limiter.py +19 -15
  445. autocoder/rag/tools/__init__.py +26 -2
  446. autocoder/rag/tools/bochaai_example.py +343 -0
  447. autocoder/rag/tools/bochaai_sdk.py +541 -0
  448. autocoder/rag/tools/metaso_example.py +268 -0
  449. autocoder/rag/tools/metaso_sdk.py +417 -0
  450. autocoder/rag/tools/recall_tool.py +28 -7
  451. autocoder/rag/tools/run_integration_tests.py +204 -0
  452. autocoder/rag/tools/test_all_providers.py +318 -0
  453. autocoder/rag/tools/test_bochaai_integration.py +482 -0
  454. autocoder/rag/tools/test_final_integration.py +215 -0
  455. autocoder/rag/tools/test_metaso_integration.py +424 -0
  456. autocoder/rag/tools/test_metaso_real.py +171 -0
  457. autocoder/rag/tools/test_web_crawl_tool.py +639 -0
  458. autocoder/rag/tools/test_web_search_tool.py +509 -0
  459. autocoder/rag/tools/todo_read_tool.py +202 -0
  460. autocoder/rag/tools/todo_write_tool.py +412 -0
  461. autocoder/rag/tools/web_crawl_tool.py +634 -0
  462. autocoder/rag/tools/web_search_tool.py +558 -0
  463. autocoder/rag/tools/web_tools_example.py +119 -0
  464. autocoder/rag/types.py +16 -0
  465. autocoder/rag/variable_holder.py +4 -2
  466. autocoder/rags.py +86 -79
  467. autocoder/regexproject/__init__.py +23 -21
  468. autocoder/sdk/__init__.py +46 -190
  469. autocoder/sdk/api.py +370 -0
  470. autocoder/sdk/async_runner/__init__.py +26 -0
  471. autocoder/sdk/async_runner/async_executor.py +650 -0
  472. autocoder/sdk/async_runner/async_handler.py +356 -0
  473. autocoder/sdk/async_runner/markdown_processor.py +595 -0
  474. autocoder/sdk/async_runner/task_metadata.py +284 -0
  475. autocoder/sdk/async_runner/worktree_manager.py +438 -0
  476. autocoder/sdk/cli/__init__.py +2 -5
  477. autocoder/sdk/cli/formatters.py +28 -204
  478. autocoder/sdk/cli/handlers.py +77 -44
  479. autocoder/sdk/cli/main.py +154 -171
  480. autocoder/sdk/cli/options.py +95 -22
  481. autocoder/sdk/constants.py +139 -51
  482. autocoder/sdk/core/auto_coder_core.py +484 -109
  483. autocoder/sdk/core/bridge.py +297 -115
  484. autocoder/sdk/exceptions.py +18 -12
  485. autocoder/sdk/formatters/__init__.py +19 -0
  486. autocoder/sdk/formatters/input.py +64 -0
  487. autocoder/sdk/formatters/output.py +247 -0
  488. autocoder/sdk/formatters/stream.py +54 -0
  489. autocoder/sdk/models/__init__.py +6 -5
  490. autocoder/sdk/models/options.py +55 -18
  491. autocoder/sdk/utils/formatters.py +27 -195
  492. autocoder/suffixproject/__init__.py +28 -25
  493. autocoder/terminal/__init__.py +14 -0
  494. autocoder/terminal/app.py +454 -0
  495. autocoder/terminal/args.py +32 -0
  496. autocoder/terminal/bootstrap.py +178 -0
  497. autocoder/terminal/command_processor.py +521 -0
  498. autocoder/terminal/command_registry.py +57 -0
  499. autocoder/terminal/help.py +97 -0
  500. autocoder/terminal/tasks/__init__.py +5 -0
  501. autocoder/terminal/tasks/background.py +77 -0
  502. autocoder/terminal/tasks/task_event.py +70 -0
  503. autocoder/terminal/ui/__init__.py +13 -0
  504. autocoder/terminal/ui/completer.py +268 -0
  505. autocoder/terminal/ui/keybindings.py +75 -0
  506. autocoder/terminal/ui/session.py +41 -0
  507. autocoder/terminal/ui/toolbar.py +64 -0
  508. autocoder/terminal/utils/__init__.py +13 -0
  509. autocoder/terminal/utils/errors.py +18 -0
  510. autocoder/terminal/utils/paths.py +19 -0
  511. autocoder/terminal/utils/shell.py +43 -0
  512. autocoder/terminal_v3/__init__.py +10 -0
  513. autocoder/terminal_v3/app.py +201 -0
  514. autocoder/terminal_v3/handlers/__init__.py +5 -0
  515. autocoder/terminal_v3/handlers/command_handler.py +131 -0
  516. autocoder/terminal_v3/models/__init__.py +6 -0
  517. autocoder/terminal_v3/models/conversation_buffer.py +214 -0
  518. autocoder/terminal_v3/models/message.py +50 -0
  519. autocoder/terminal_v3/models/tool_display.py +247 -0
  520. autocoder/terminal_v3/ui/__init__.py +7 -0
  521. autocoder/terminal_v3/ui/keybindings.py +56 -0
  522. autocoder/terminal_v3/ui/layout.py +141 -0
  523. autocoder/terminal_v3/ui/styles.py +43 -0
  524. autocoder/tsproject/__init__.py +23 -23
  525. autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
  526. autocoder/utils/llms.py +88 -80
  527. autocoder/utils/math_utils.py +101 -0
  528. autocoder/utils/model_provider_selector.py +16 -4
  529. autocoder/utils/operate_config_api.py +33 -5
  530. autocoder/utils/thread_utils.py +2 -2
  531. autocoder/version.py +4 -2
  532. autocoder/workflow_agents/__init__.py +84 -0
  533. autocoder/workflow_agents/agent.py +143 -0
  534. autocoder/workflow_agents/exceptions.py +573 -0
  535. autocoder/workflow_agents/executor.py +665 -0
  536. autocoder/workflow_agents/loader.py +749 -0
  537. autocoder/workflow_agents/runner.py +267 -0
  538. autocoder/workflow_agents/types.py +173 -0
  539. autocoder/workflow_agents/utils.py +434 -0
  540. autocoder/workflow_agents/workflow_manager.py +211 -0
  541. auto_coder-1.0.0.dist-info/METADATA +0 -396
  542. auto_coder-1.0.0.dist-info/RECORD +0 -442
  543. auto_coder-1.0.0.dist-info/licenses/LICENSE +0 -201
  544. autocoder/auto_coder_server.py +0 -672
  545. autocoder/benchmark.py +0 -138
  546. autocoder/common/ac_style_command_parser/example.py +0 -7
  547. autocoder/common/cleaner.py +0 -31
  548. autocoder/common/command_completer_v2.py +0 -615
  549. autocoder/common/context_pruner.py +0 -477
  550. autocoder/common/conversation_pruner.py +0 -132
  551. autocoder/common/directory_cache/__init__.py +0 -1
  552. autocoder/common/directory_cache/cache.py +0 -192
  553. autocoder/common/directory_cache/test_cache.py +0 -190
  554. autocoder/common/file_checkpoint/examples.py +0 -217
  555. autocoder/common/llm_friendly_package_example.py +0 -138
  556. autocoder/common/llm_friendly_package_test.py +0 -63
  557. autocoder/common/pull_requests/test_module.py +0 -1
  558. autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
  559. autocoder/common/text.py +0 -30
  560. autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
  561. autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
  562. autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
  563. autocoder/common/v2/agent/agentic_tool_display.py +0 -183
  564. autocoder/plugins/dynamic_completion_example.py +0 -148
  565. autocoder/plugins/sample_plugin.py +0 -160
  566. autocoder/sdk/cli/__main__.py +0 -26
  567. autocoder/sdk/cli/completion_wrapper.py +0 -38
  568. autocoder/sdk/cli/install_completion.py +0 -301
  569. autocoder/sdk/models/messages.py +0 -209
  570. autocoder/sdk/session/__init__.py +0 -32
  571. autocoder/sdk/session/session.py +0 -106
  572. autocoder/sdk/session/session_manager.py +0 -56
  573. {auto_coder-1.0.0.dist-info → auto_coder-2.0.1.dist-info}/top_level.txt +0 -0
  574. /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
@@ -6,8 +6,9 @@ from autocoder.common import (
6
6
  SourceCode,
7
7
  )
8
8
  from autocoder.common.buildin_tokenizer import BuildinTokenizer
9
- from autocoder.pyproject import PyProject, Level1PyProject
9
+ from autocoder.pyproject import PyProject
10
10
  from autocoder.tsproject import TSProject
11
+ from autocoder.default_project import DefaultProject
11
12
  from autocoder.suffixproject import SuffixProject
12
13
  from autocoder.index.entry import build_index_and_filter_files
13
14
  from autocoder.common.code_auto_merge import CodeAutoMerge
@@ -34,6 +35,9 @@ from autocoder.events.event_manager_singleton import get_event_manager
34
35
  from autocoder.events import event_content as EventContentCreator
35
36
  from autocoder.events.event_types import EventMetadata
36
37
  from autocoder.common.v2.code_editblock_manager import CodeEditBlockManager
38
+ from autocoder.common.conversations.get_conversation_manager import (
39
+ get_conversation_manager,
40
+ )
37
41
 
38
42
 
39
43
  class BaseAction:
@@ -43,9 +47,53 @@ class BaseAction:
43
47
  return tokenizer.count_tokens(content)
44
48
  except Exception as e:
45
49
  logger.warning(
46
- f"Failed to use tokenizer to count tokens, fallback to len(): {e}")
50
+ f"Failed to use tokenizer to count tokens, fallback to len(): {e}"
51
+ )
47
52
  return len(content)
48
53
 
54
+ def _add_conversations_to_manager(
55
+ self, result, conversation_manager, namespace=None
56
+ ):
57
+ """
58
+ 将生成结果中的对话添加到 conversation_manager
59
+
60
+ 参数:
61
+ result: CodeGenerateResult 对象
62
+ conversation_manager: ConversationManager 实例
63
+ namespace: 命名空间(可选)
64
+ """
65
+ if not result.conversations:
66
+ return
67
+
68
+ # 确保有当前会话,如果没有则创建
69
+ current_conversation_id = conversation_manager.get_current_conversation_id(
70
+ namespace
71
+ )
72
+ if not current_conversation_id:
73
+ current_conversation_id = conversation_manager.create_conversation(
74
+ name="Code Generation Session",
75
+ description="Auto-coder code generation session",
76
+ )
77
+ conversation_manager.set_current_conversation(
78
+ current_conversation_id, namespace
79
+ )
80
+
81
+ # 添加对话到当前会话
82
+ # result.conversations 是 List[List[Dict[str, Any]]],取最后一轮对话
83
+ if result.conversations:
84
+ last_conversation = result.conversations[-1]
85
+ for message in last_conversation:
86
+ if (
87
+ isinstance(message, dict)
88
+ and "role" in message
89
+ and "content" in message
90
+ ):
91
+ conversation_manager.append_message_to_current(
92
+ role=message["role"],
93
+ content=message["content"],
94
+ namespace=namespace,
95
+ )
96
+
49
97
 
50
98
  class ActionTSProject(BaseAction):
51
99
  def __init__(
@@ -55,6 +103,8 @@ class ActionTSProject(BaseAction):
55
103
  self.llm = llm
56
104
  self.pp = None
57
105
  self.printer = Printer()
106
+ self.conversation_manager = get_conversation_manager()
107
+ self.namespace = None
58
108
 
59
109
  def run(self):
60
110
  args = self.args
@@ -95,10 +145,9 @@ class ActionTSProject(BaseAction):
95
145
  with open(html_path, "r", encoding="utf-8") as f:
96
146
  html_code = f.read()
97
147
 
98
- source_code_list.sources.append(SourceCode(
99
- module_name=html_path,
100
- source_code=html_code,
101
- tag="IMAGE"))
148
+ source_code_list.sources.append(
149
+ SourceCode(module_name=html_path, source_code=html_code, tag="IMAGE")
150
+ )
102
151
 
103
152
  self.process_content(source_code_list)
104
153
  return True
@@ -113,11 +162,23 @@ class ActionTSProject(BaseAction):
113
162
  f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
114
163
  )
115
164
 
116
- global_cancel.check_and_raise(token=self.args.event_file)
165
+ global_cancel.check_and_raise(token=self.args.cancel_token)
117
166
 
118
- if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
119
- code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
120
- code_merge_manager.run(query=args.query, source_code_list=source_code_list)
167
+ if (
168
+ (args.enable_auto_fix_merge or args.enable_auto_fix_lint)
169
+ and args.execute
170
+ and args.auto_merge == "editblock"
171
+ ):
172
+ code_merge_manager = CodeEditBlockManager(
173
+ llm=self.llm, args=self.args, action=self
174
+ )
175
+ result = code_merge_manager.run(
176
+ query=args.query, source_code_list=source_code_list
177
+ )
178
+ # 将对话添加到 conversation_manager
179
+ self._add_conversations_to_manager(
180
+ result, self.conversation_manager, self.namespace
181
+ )
121
182
  return
122
183
 
123
184
  if args.execute:
@@ -136,73 +197,78 @@ class ActionTSProject(BaseAction):
136
197
  llm=self.llm, args=self.args, action=self
137
198
  )
138
199
  else:
139
- generate = CodeAutoGenerate(
140
- llm=self.llm, args=self.args, action=self)
141
-
200
+ generate = CodeAutoGenerate(llm=self.llm, args=self.args, action=self)
201
+
142
202
  generate_result = generate.single_round_run(
143
203
  query=args.query, source_code_list=source_code_list
144
204
  )
145
205
  elapsed_time = time.time() - start_time
146
- speed = generate_result.metadata.get(
147
- 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
148
- input_tokens_cost = generate_result.metadata.get(
149
- 'input_tokens_cost', 0)
206
+ speed = (
207
+ generate_result.metadata.get("generated_tokens_count", 0) / elapsed_time
208
+ if elapsed_time > 0
209
+ else 0
210
+ )
211
+ input_tokens_cost = generate_result.metadata.get("input_tokens_cost", 0)
150
212
  generated_tokens_cost = generate_result.metadata.get(
151
- 'generated_tokens_cost', 0)
213
+ "generated_tokens_cost", 0
214
+ )
152
215
  model_names = ",".join(get_llm_names(generate.llms))
153
216
  self.printer.print_in_terminal(
154
217
  "code_generation_complete",
155
218
  duration=elapsed_time,
156
- input_tokens=generate_result.metadata.get(
157
- 'input_tokens_count', 0),
158
- output_tokens=generate_result.metadata.get(
159
- 'generated_tokens_count', 0),
219
+ input_tokens=generate_result.metadata.get("input_tokens_count", 0),
220
+ output_tokens=generate_result.metadata.get("generated_tokens_count", 0),
160
221
  input_cost=input_tokens_cost,
161
222
  output_cost=generated_tokens_cost,
162
223
  speed=round(speed, 2),
163
224
  model_names=model_names,
164
- sampling_count=len(generate_result.contents)
225
+ sampling_count=len(generate_result.contents),
165
226
  )
166
227
 
167
228
  get_event_manager(self.args.event_file).write_result(
168
- EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
169
- model_name=model_names,
170
- elapsed_time=elapsed_time,
171
- input_tokens=generate_result.metadata.get(
172
- 'input_tokens_count', 0),
173
- output_tokens=generate_result.metadata.get(
174
- 'generated_tokens_count', 0),
175
- input_cost=input_tokens_cost,
176
- output_cost=generated_tokens_cost,
177
- speed=round(speed, 2)
178
- )).to_dict(),metadata=EventMetadata(
179
- action_file=self.args.file
180
- ).to_dict())
229
+ EventContentCreator.create_result(
230
+ content=EventContentCreator.ResultTokenStatContent(
231
+ model_name=model_names,
232
+ elapsed_time=elapsed_time,
233
+ input_tokens=generate_result.metadata.get(
234
+ "input_tokens_count", 0
235
+ ),
236
+ output_tokens=generate_result.metadata.get(
237
+ "generated_tokens_count", 0
238
+ ),
239
+ input_cost=input_tokens_cost,
240
+ output_cost=generated_tokens_cost,
241
+ speed=round(speed, 2),
242
+ )
243
+ ).to_dict(),
244
+ metadata=EventMetadata(action_file=self.args.file).to_dict(),
245
+ )
181
246
 
182
- global_cancel.check_and_raise(token=self.args.event_file)
247
+ global_cancel.check_and_raise(token=self.args.cancel_token)
183
248
 
184
249
  merge_result = None
185
250
  if args.execute and args.auto_merge:
186
251
  self.printer.print_in_terminal("code_merge_start")
187
252
  if args.auto_merge == "diff":
188
- code_merge = CodeAutoMergeDiff(
189
- llm=self.llm, args=self.args)
253
+ code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
190
254
  merge_result = code_merge.merge_code(
191
- generate_result=generate_result)
255
+ generate_result=generate_result
256
+ )
192
257
  elif args.auto_merge == "strict_diff":
193
- code_merge = CodeAutoMergeStrictDiff(
194
- llm=self.llm, args=self.args)
258
+ code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
195
259
  merge_result = code_merge.merge_code(
196
- generate_result=generate_result)
260
+ generate_result=generate_result
261
+ )
197
262
  elif args.auto_merge == "editblock":
198
- code_merge = CodeAutoMergeEditBlock(
199
- llm=self.llm, args=self.args)
263
+ code_merge = CodeAutoMergeEditBlock(llm=self.llm, args=self.args)
200
264
  merge_result = code_merge.merge_code(
201
- generate_result=generate_result)
265
+ generate_result=generate_result
266
+ )
202
267
  else:
203
268
  code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
204
269
  merge_result = code_merge.merge_code(
205
- generate_result=generate_result)
270
+ generate_result=generate_result
271
+ )
206
272
 
207
273
  if merge_result is not None:
208
274
  content = merge_result.contents[0]
@@ -230,6 +296,8 @@ class ActionPyProject(BaseAction):
230
296
  self.llm = llm
231
297
  self.pp = None
232
298
  self.printer = Printer()
299
+ self.conversation_manager = get_conversation_manager()
300
+ self.namespace = None
233
301
 
234
302
  def run(self):
235
303
  args = self.args
@@ -237,8 +305,7 @@ class ActionPyProject(BaseAction):
237
305
  return False
238
306
  pp = PyProject(args=self.args, llm=self.llm)
239
307
  self.pp = pp
240
- pp.run(packages=args.py_packages.split(
241
- ",") if args.py_packages else [])
308
+ pp.run(packages=args.py_packages.split(",") if args.py_packages else [])
242
309
  source_code_list = SourceCodeList(pp.sources)
243
310
 
244
311
  if self.llm:
@@ -264,14 +331,26 @@ class ActionPyProject(BaseAction):
264
331
  "code_execution_warning",
265
332
  style="yellow",
266
333
  content_length=content_length,
267
- max_length=self.args.model_max_input_length
334
+ max_length=self.args.model_max_input_length,
268
335
  )
269
336
 
270
- global_cancel.check_and_raise(token=self.args.event_file)
337
+ global_cancel.check_and_raise(token=self.args.cancel_token)
271
338
 
272
- if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
273
- code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
274
- code_merge_manager.run(query=args.query, source_code_list=source_code_list)
339
+ if (
340
+ (args.enable_auto_fix_merge or args.enable_auto_fix_lint)
341
+ and args.execute
342
+ and args.auto_merge == "editblock"
343
+ ):
344
+ code_merge_manager = CodeEditBlockManager(
345
+ llm=self.llm, args=self.args, action=self
346
+ )
347
+ result = code_merge_manager.run(
348
+ query=args.query, source_code_list=source_code_list
349
+ )
350
+ # 将对话添加到 conversation_manager
351
+ self._add_conversations_to_manager(
352
+ result, self.conversation_manager, self.namespace
353
+ )
275
354
  return
276
355
 
277
356
  if args.execute:
@@ -290,74 +369,79 @@ class ActionPyProject(BaseAction):
290
369
  llm=self.llm, args=self.args, action=self
291
370
  )
292
371
  else:
293
- generate = CodeAutoGenerate(
294
- llm=self.llm, args=self.args, action=self)
295
-
372
+ generate = CodeAutoGenerate(llm=self.llm, args=self.args, action=self)
373
+
296
374
  generate_result = generate.single_round_run(
297
375
  query=args.query, source_code_list=source_code_list
298
376
  )
299
377
 
300
378
  elapsed_time = time.time() - start_time
301
- speed = generate_result.metadata.get(
302
- 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
379
+ speed = (
380
+ generate_result.metadata.get("generated_tokens_count", 0) / elapsed_time
381
+ if elapsed_time > 0
382
+ else 0
383
+ )
303
384
  model_names = ",".join(get_llm_names(generate.llms))
304
- input_tokens_cost = generate_result.metadata.get(
305
- 'input_tokens_cost', 0)
385
+ input_tokens_cost = generate_result.metadata.get("input_tokens_cost", 0)
306
386
  generated_tokens_cost = generate_result.metadata.get(
307
- 'generated_tokens_cost', 0)
387
+ "generated_tokens_cost", 0
388
+ )
308
389
  self.printer.print_in_terminal(
309
390
  "code_generation_complete",
310
391
  duration=elapsed_time,
311
- input_tokens=generate_result.metadata.get(
312
- 'input_tokens_count', 0),
313
- output_tokens=generate_result.metadata.get(
314
- 'generated_tokens_count', 0),
392
+ input_tokens=generate_result.metadata.get("input_tokens_count", 0),
393
+ output_tokens=generate_result.metadata.get("generated_tokens_count", 0),
315
394
  input_cost=input_tokens_cost,
316
395
  output_cost=generated_tokens_cost,
317
396
  speed=round(speed, 2),
318
397
  model_names=model_names,
319
- sampling_count=len(generate_result.contents)
398
+ sampling_count=len(generate_result.contents),
320
399
  )
321
400
 
322
401
  get_event_manager(self.args.event_file).write_result(
323
- EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
324
- model_name=model_names,
325
- elapsed_time=elapsed_time,
326
- input_tokens=generate_result.metadata.get(
327
- 'input_tokens_count', 0),
328
- output_tokens=generate_result.metadata.get(
329
- 'generated_tokens_count', 0),
330
- input_cost=input_tokens_cost,
331
- output_cost=generated_tokens_cost,
332
- speed=round(speed, 2)
333
- )).to_dict(), metadata=EventMetadata(
334
- action_file=self.args.file
335
- ).to_dict())
402
+ EventContentCreator.create_result(
403
+ content=EventContentCreator.ResultTokenStatContent(
404
+ model_name=model_names,
405
+ elapsed_time=elapsed_time,
406
+ input_tokens=generate_result.metadata.get(
407
+ "input_tokens_count", 0
408
+ ),
409
+ output_tokens=generate_result.metadata.get(
410
+ "generated_tokens_count", 0
411
+ ),
412
+ input_cost=input_tokens_cost,
413
+ output_cost=generated_tokens_cost,
414
+ speed=round(speed, 2),
415
+ )
416
+ ).to_dict(),
417
+ metadata=EventMetadata(action_file=self.args.file).to_dict(),
418
+ )
336
419
 
337
- global_cancel.check_and_raise(token=self.args.event_file)
420
+ global_cancel.check_and_raise(token=self.args.cancel_token)
338
421
 
339
422
  merge_result = None
340
423
  if args.execute and args.auto_merge:
341
424
  self.printer.print_in_terminal("code_merge_start")
342
425
  if args.auto_merge == "diff":
343
- code_merge = CodeAutoMergeDiff(
344
- llm=self.llm, args=self.args)
426
+ code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
345
427
  merge_result = code_merge.merge_code(
346
- generate_result=generate_result)
428
+ generate_result=generate_result
429
+ )
347
430
  elif args.auto_merge == "strict_diff":
348
- code_merge = CodeAutoMergeStrictDiff(
349
- llm=self.llm, args=self.args)
431
+ code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
350
432
  merge_result = code_merge.merge_code(
351
- generate_result=generate_result)
433
+ generate_result=generate_result
434
+ )
352
435
  elif args.auto_merge == "editblock":
353
- code_merge = CodeAutoMergeEditBlock(
354
- llm=self.llm, args=self.args)
436
+ code_merge = CodeAutoMergeEditBlock(llm=self.llm, args=self.args)
355
437
  merge_result = code_merge.merge_code(
356
- generate_result=generate_result)
438
+ generate_result=generate_result
439
+ )
357
440
  else:
358
441
  code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
359
442
  merge_result = code_merge.merge_code(
360
- generate_result=generate_result)
443
+ generate_result=generate_result
444
+ )
361
445
 
362
446
  content = merge_result.contents[0]
363
447
 
@@ -386,6 +470,8 @@ class ActionSuffixProject(BaseAction):
386
470
  self.llm = llm
387
471
  self.pp = None
388
472
  self.printer = Printer()
473
+ self.conversation_manager = get_conversation_manager()
474
+ self.namespace = None
389
475
 
390
476
  def run(self):
391
477
  args = self.args
@@ -415,11 +501,23 @@ class ActionSuffixProject(BaseAction):
415
501
  f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
416
502
  )
417
503
 
418
- global_cancel.check_and_raise(token=self.args.event_file)
504
+ global_cancel.check_and_raise(token=self.args.cancel_token)
419
505
 
420
- if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
421
- code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
422
- code_merge_manager.run(query=args.query, source_code_list=source_code_list)
506
+ if (
507
+ (args.enable_auto_fix_merge or args.enable_auto_fix_lint)
508
+ and args.execute
509
+ and args.auto_merge == "editblock"
510
+ ):
511
+ code_merge_manager = CodeEditBlockManager(
512
+ llm=self.llm, args=self.args, action=self
513
+ )
514
+ result = code_merge_manager.run(
515
+ query=args.query, source_code_list=source_code_list
516
+ )
517
+ # 将对话添加到 conversation_manager
518
+ self._add_conversations_to_manager(
519
+ result, self.conversation_manager, self.namespace
520
+ )
423
521
  return
424
522
 
425
523
  if args.execute:
@@ -438,72 +536,67 @@ class ActionSuffixProject(BaseAction):
438
536
  llm=self.llm, args=self.args, action=self
439
537
  )
440
538
  else:
441
- generate = CodeAutoGenerate(
442
- llm=self.llm, args=self.args, action=self)
443
-
539
+ generate = CodeAutoGenerate(llm=self.llm, args=self.args, action=self)
540
+
444
541
  generate_result = generate.single_round_run(
445
542
  query=args.query, source_code_list=source_code_list
446
543
  )
447
544
 
448
545
  elapsed_time = time.time() - start_time
449
- speed = generate_result.metadata.get(
450
- 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
546
+ speed = (
547
+ generate_result.metadata.get("generated_tokens_count", 0) / elapsed_time
548
+ if elapsed_time > 0
549
+ else 0
550
+ )
451
551
  model_names = ",".join(get_llm_names(generate.llms))
452
- input_tokens_cost = generate_result.metadata.get(
453
- 'input_tokens_cost', 0)
454
- generated_tokens_cost = generate_result.metadata.get(
455
- 'generated_tokens_cost', 0)
552
+ input_tokens_cost = generate_result.metadata.get("input_tokens_cost", 0)
553
+ generated_tokens_cost = generate_result.metadata.get("generated_tokens_cost", 0)
456
554
  self.printer.print_in_terminal(
457
555
  "code_generation_complete",
458
556
  duration=elapsed_time,
459
- input_tokens=generate_result.metadata.get('input_tokens_count', 0),
460
- output_tokens=generate_result.metadata.get(
461
- 'generated_tokens_count', 0),
557
+ input_tokens=generate_result.metadata.get("input_tokens_count", 0),
558
+ output_tokens=generate_result.metadata.get("generated_tokens_count", 0),
462
559
  input_cost=input_tokens_cost,
463
560
  output_cost=generated_tokens_cost,
464
561
  speed=round(speed, 2),
465
562
  model_names=model_names,
466
- sampling_count=len(generate_result.contents)
563
+ sampling_count=len(generate_result.contents),
467
564
  )
468
565
 
469
566
  get_event_manager(self.args.event_file).write_result(
470
- EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
567
+ EventContentCreator.create_result(
568
+ content=EventContentCreator.ResultTokenStatContent(
471
569
  model_name=model_names,
472
570
  elapsed_time=elapsed_time,
473
- input_tokens=generate_result.metadata.get(
474
- 'input_tokens_count', 0),
571
+ input_tokens=generate_result.metadata.get("input_tokens_count", 0),
475
572
  output_tokens=generate_result.metadata.get(
476
- 'generated_tokens_count', 0),
573
+ "generated_tokens_count", 0
574
+ ),
477
575
  input_cost=input_tokens_cost,
478
576
  output_cost=generated_tokens_cost,
479
- speed=round(speed, 2)
480
- )).to_dict(), metadata=EventMetadata(
481
- action_file=self.args.file
482
- ).to_dict())
577
+ speed=round(speed, 2),
578
+ )
579
+ ).to_dict(),
580
+ metadata=EventMetadata(action_file=self.args.file).to_dict(),
581
+ )
483
582
 
484
- global_cancel.check_and_raise(token=self.args.event_file)
583
+ global_cancel.check_and_raise(token=self.args.cancel_token)
485
584
 
486
585
  merge_result = None
487
586
  if args.execute and args.auto_merge:
488
587
  self.printer.print_in_terminal("code_merge_start")
489
588
  if args.auto_merge == "diff":
490
589
  code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
491
- merge_result = code_merge.merge_code(
492
- generate_result=generate_result)
590
+ merge_result = code_merge.merge_code(generate_result=generate_result)
493
591
  elif args.auto_merge == "strict_diff":
494
- code_merge = CodeAutoMergeStrictDiff(
495
- llm=self.llm, args=self.args)
496
- merge_result = code_merge.merge_code(
497
- generate_result=generate_result)
592
+ code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
593
+ merge_result = code_merge.merge_code(generate_result=generate_result)
498
594
  elif args.auto_merge == "editblock":
499
- code_merge = CodeAutoMergeEditBlock(
500
- llm=self.llm, args=self.args)
501
- merge_result = code_merge.merge_code(
502
- generate_result=generate_result)
595
+ code_merge = CodeAutoMergeEditBlock(llm=self.llm, args=self.args)
596
+ merge_result = code_merge.merge_code(generate_result=generate_result)
503
597
  else:
504
598
  code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
505
- merge_result = code_merge.merge_code(
506
- generate_result=generate_result)
599
+ merge_result = code_merge.merge_code(generate_result=generate_result)
507
600
 
508
601
  if merge_result is not None:
509
602
  content = merge_result.contents[0]
@@ -522,3 +615,181 @@ class ActionSuffixProject(BaseAction):
522
615
  conversations=generate_result.conversations[0],
523
616
  model=self.llm.default_model_name,
524
617
  )
618
+
619
+
620
+ class ActionDefaultProject(BaseAction):
621
+ """
622
+ ActionDefaultProject用于处理默认项目类型,使用ignorefiles模块进行文件过滤。
623
+ 与ActionSuffixProject不同,它不按文件后缀过滤,而是收集所有不被忽略的文本文件。
624
+ """
625
+
626
+ def __init__(
627
+ self, args: AutoCoderArgs, llm: Optional[byzerllm.ByzerLLM] = None
628
+ ) -> None:
629
+ self.args = args
630
+ self.llm = llm
631
+ self.pp = None
632
+ self.printer = Printer()
633
+ self.conversation_manager = get_conversation_manager()
634
+ self.namespace = None
635
+
636
+ def run(self):
637
+ args = self.args
638
+
639
+ # project_type为*时,或者没有设置project_type时,执行默认项目
640
+ if args.project_type and args.project_type != "*":
641
+ return False
642
+
643
+ pp = DefaultProject(args=args, llm=self.llm)
644
+ self.pp = pp
645
+ pp.run()
646
+ source_code_list = SourceCodeList(pp.sources)
647
+ if self.llm:
648
+ if args.in_code_apply:
649
+ old_query = args.query
650
+ args.query = (args.context or "") + "\n\n" + args.query
651
+ source_code_list = build_index_and_filter_files(
652
+ llm=self.llm, args=args, sources=pp.sources
653
+ )
654
+ if args.in_code_apply:
655
+ args.query = old_query
656
+ self.process_content(source_code_list)
657
+ return True
658
+
659
+ def process_content(self, source_code_list: SourceCodeList):
660
+ args = self.args
661
+ content = source_code_list.to_str()
662
+
663
+ if args.execute and self.llm and not args.human_as_model:
664
+ content_length = self._get_content_length(content)
665
+ if content_length > self.args.model_max_input_length:
666
+ logger.warning(
667
+ f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
668
+ )
669
+
670
+ global_cancel.check_and_raise(token=self.args.cancel_token)
671
+
672
+ if (
673
+ (args.enable_auto_fix_merge or args.enable_auto_fix_lint)
674
+ and args.execute
675
+ and args.auto_merge == "editblock"
676
+ ):
677
+ code_merge_manager = CodeEditBlockManager(
678
+ llm=self.llm, args=self.args, action=self
679
+ )
680
+ result = code_merge_manager.run(
681
+ query=args.query, source_code_list=source_code_list
682
+ )
683
+ # 将对话添加到 conversation_manager
684
+ self._add_conversations_to_manager(
685
+ result, self.conversation_manager, self.namespace
686
+ )
687
+ return
688
+
689
+ if args.execute:
690
+ self.printer.print_in_terminal("code_generation_start")
691
+ start_time = time.time()
692
+ if args.auto_merge == "diff":
693
+ generate = CodeAutoGenerateDiff(
694
+ llm=self.llm, args=self.args, action=self
695
+ )
696
+ elif args.auto_merge == "strict_diff":
697
+ generate = CodeAutoGenerateStrictDiff(
698
+ llm=self.llm, args=self.args, action=self
699
+ )
700
+ elif args.auto_merge == "editblock":
701
+ generate = CodeAutoGenerateEditBlock(
702
+ llm=self.llm, args=self.args, action=self
703
+ )
704
+ else:
705
+ generate = CodeAutoGenerate(llm=self.llm, args=self.args, action=self)
706
+
707
+ generate_result = generate.single_round_run(
708
+ query=args.query, source_code_list=source_code_list
709
+ )
710
+
711
+ elapsed_time = time.time() - start_time
712
+ speed = (
713
+ generate_result.metadata.get("generated_tokens_count", 0) / elapsed_time
714
+ if elapsed_time > 0
715
+ else 0
716
+ )
717
+ model_names = ",".join(get_llm_names(generate.llms))
718
+ input_tokens_cost = generate_result.metadata.get("input_tokens_cost", 0)
719
+ generated_tokens_cost = generate_result.metadata.get(
720
+ "generated_tokens_cost", 0
721
+ )
722
+ self.printer.print_in_terminal(
723
+ "code_generation_complete",
724
+ duration=elapsed_time,
725
+ input_tokens=generate_result.metadata.get("input_tokens_count", 0),
726
+ output_tokens=generate_result.metadata.get("generated_tokens_count", 0),
727
+ input_cost=input_tokens_cost,
728
+ output_cost=generated_tokens_cost,
729
+ speed=round(speed, 2),
730
+ model_names=model_names,
731
+ sampling_count=len(generate_result.contents),
732
+ )
733
+
734
+ get_event_manager(self.args.event_file).write_result(
735
+ EventContentCreator.create_result(
736
+ content=EventContentCreator.ResultTokenStatContent(
737
+ model_name=model_names,
738
+ elapsed_time=elapsed_time,
739
+ input_tokens=generate_result.metadata.get(
740
+ "input_tokens_count", 0
741
+ ),
742
+ output_tokens=generate_result.metadata.get(
743
+ "generated_tokens_count", 0
744
+ ),
745
+ input_cost=input_tokens_cost,
746
+ output_cost=generated_tokens_cost,
747
+ speed=round(speed, 2),
748
+ )
749
+ ).to_dict(),
750
+ metadata=EventMetadata(action_file=self.args.file).to_dict(),
751
+ )
752
+
753
+ global_cancel.check_and_raise(token=self.args.cancel_token)
754
+
755
+ merge_result = None
756
+ if args.execute and args.auto_merge:
757
+ self.printer.print_in_terminal("code_merge_start")
758
+ if args.auto_merge == "diff":
759
+ code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
760
+ merge_result = code_merge.merge_code(
761
+ generate_result=generate_result
762
+ )
763
+ elif args.auto_merge == "strict_diff":
764
+ code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
765
+ merge_result = code_merge.merge_code(
766
+ generate_result=generate_result
767
+ )
768
+ elif args.auto_merge == "editblock":
769
+ code_merge = CodeAutoMergeEditBlock(llm=self.llm, args=self.args)
770
+ merge_result = code_merge.merge_code(
771
+ generate_result=generate_result
772
+ )
773
+ else:
774
+ code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
775
+ merge_result = code_merge.merge_code(
776
+ generate_result=generate_result
777
+ )
778
+
779
+ if merge_result is not None:
780
+ content = merge_result.contents[0]
781
+ store_code_model_conversation(
782
+ args=self.args,
783
+ instruction=self.args.query,
784
+ conversations=merge_result.conversations[0],
785
+ model=self.llm.default_model_name,
786
+ )
787
+ else:
788
+ content = generate_result.contents[0]
789
+
790
+ store_code_model_conversation(
791
+ args=self.args,
792
+ instruction=self.args.query,
793
+ conversations=generate_result.conversations[0],
794
+ model=self.llm.default_model_name,
795
+ )