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
@@ -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
@@ -113,7 +114,7 @@ class ActionTSProject(BaseAction):
113
114
  f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
114
115
  )
115
116
 
116
- global_cancel.check_and_raise(token=self.args.event_file)
117
+ global_cancel.check_and_raise(token=self.args.cancel_token)
117
118
 
118
119
  if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
119
120
  code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
@@ -179,7 +180,7 @@ class ActionTSProject(BaseAction):
179
180
  action_file=self.args.file
180
181
  ).to_dict())
181
182
 
182
- global_cancel.check_and_raise(token=self.args.event_file)
183
+ global_cancel.check_and_raise(token=self.args.cancel_token)
183
184
 
184
185
  merge_result = None
185
186
  if args.execute and args.auto_merge:
@@ -267,7 +268,7 @@ class ActionPyProject(BaseAction):
267
268
  max_length=self.args.model_max_input_length
268
269
  )
269
270
 
270
- global_cancel.check_and_raise(token=self.args.event_file)
271
+ global_cancel.check_and_raise(token=self.args.cancel_token)
271
272
 
272
273
  if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
273
274
  code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
@@ -334,7 +335,7 @@ class ActionPyProject(BaseAction):
334
335
  action_file=self.args.file
335
336
  ).to_dict())
336
337
 
337
- global_cancel.check_and_raise(token=self.args.event_file)
338
+ global_cancel.check_and_raise(token=self.args.cancel_token)
338
339
 
339
340
  merge_result = None
340
341
  if args.execute and args.auto_merge:
@@ -415,7 +416,7 @@ class ActionSuffixProject(BaseAction):
415
416
  f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
416
417
  )
417
418
 
418
- global_cancel.check_and_raise(token=self.args.event_file)
419
+ global_cancel.check_and_raise(token=self.args.cancel_token)
419
420
 
420
421
  if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
421
422
  code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
@@ -481,7 +482,7 @@ class ActionSuffixProject(BaseAction):
481
482
  action_file=self.args.file
482
483
  ).to_dict())
483
484
 
484
- global_cancel.check_and_raise(token=self.args.event_file)
485
+ global_cancel.check_and_raise(token=self.args.cancel_token)
485
486
 
486
487
  merge_result = None
487
488
  if args.execute and args.auto_merge:
@@ -522,3 +523,160 @@ class ActionSuffixProject(BaseAction):
522
523
  conversations=generate_result.conversations[0],
523
524
  model=self.llm.default_model_name,
524
525
  )
526
+
527
+
528
+ class ActionDefaultProject(BaseAction):
529
+ """
530
+ ActionDefaultProject用于处理默认项目类型,使用ignorefiles模块进行文件过滤。
531
+ 与ActionSuffixProject不同,它不按文件后缀过滤,而是收集所有不被忽略的文本文件。
532
+ """
533
+
534
+ def __init__(
535
+ self, args: AutoCoderArgs, llm: Optional[byzerllm.ByzerLLM] = None
536
+ ) -> None:
537
+ self.args = args
538
+ self.llm = llm
539
+ self.pp = None
540
+ self.printer = Printer()
541
+
542
+ def run(self):
543
+ args = self.args
544
+
545
+ # project_type为*时,或者没有设置project_type时,执行默认项目
546
+ if args.project_type and args.project_type != "*":
547
+ return False
548
+
549
+ pp = DefaultProject(args=args, llm=self.llm)
550
+ self.pp = pp
551
+ pp.run()
552
+ source_code_list = SourceCodeList(pp.sources)
553
+ if self.llm:
554
+ if args.in_code_apply:
555
+ old_query = args.query
556
+ args.query = (args.context or "") + "\n\n" + args.query
557
+ source_code_list = build_index_and_filter_files(
558
+ llm=self.llm, args=args, sources=pp.sources
559
+ )
560
+ if args.in_code_apply:
561
+ args.query = old_query
562
+ self.process_content(source_code_list)
563
+ return True
564
+
565
+ def process_content(self, source_code_list: SourceCodeList):
566
+ args = self.args
567
+ content = source_code_list.to_str()
568
+
569
+ if args.execute and self.llm and not args.human_as_model:
570
+ content_length = self._get_content_length(content)
571
+ if content_length > self.args.model_max_input_length:
572
+ logger.warning(
573
+ f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
574
+ )
575
+
576
+ global_cancel.check_and_raise(token=self.args.cancel_token)
577
+
578
+ if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
579
+ code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
580
+ code_merge_manager.run(query=args.query, source_code_list=source_code_list)
581
+ return
582
+
583
+ if args.execute:
584
+ self.printer.print_in_terminal("code_generation_start")
585
+ start_time = time.time()
586
+ if args.auto_merge == "diff":
587
+ generate = CodeAutoGenerateDiff(
588
+ llm=self.llm, args=self.args, action=self
589
+ )
590
+ elif args.auto_merge == "strict_diff":
591
+ generate = CodeAutoGenerateStrictDiff(
592
+ llm=self.llm, args=self.args, action=self
593
+ )
594
+ elif args.auto_merge == "editblock":
595
+ generate = CodeAutoGenerateEditBlock(
596
+ llm=self.llm, args=self.args, action=self
597
+ )
598
+ else:
599
+ generate = CodeAutoGenerate(
600
+ llm=self.llm, args=self.args, action=self)
601
+
602
+ generate_result = generate.single_round_run(
603
+ query=args.query, source_code_list=source_code_list
604
+ )
605
+
606
+ elapsed_time = time.time() - start_time
607
+ speed = generate_result.metadata.get(
608
+ 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
609
+ model_names = ",".join(get_llm_names(generate.llms))
610
+ input_tokens_cost = generate_result.metadata.get(
611
+ 'input_tokens_cost', 0)
612
+ generated_tokens_cost = generate_result.metadata.get(
613
+ 'generated_tokens_cost', 0)
614
+ self.printer.print_in_terminal(
615
+ "code_generation_complete",
616
+ duration=elapsed_time,
617
+ input_tokens=generate_result.metadata.get('input_tokens_count', 0),
618
+ output_tokens=generate_result.metadata.get(
619
+ 'generated_tokens_count', 0),
620
+ input_cost=input_tokens_cost,
621
+ output_cost=generated_tokens_cost,
622
+ speed=round(speed, 2),
623
+ model_names=model_names,
624
+ sampling_count=len(generate_result.contents)
625
+ )
626
+
627
+ get_event_manager(self.args.event_file).write_result(
628
+ EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
629
+ model_name=model_names,
630
+ elapsed_time=elapsed_time,
631
+ input_tokens=generate_result.metadata.get(
632
+ 'input_tokens_count', 0),
633
+ output_tokens=generate_result.metadata.get(
634
+ 'generated_tokens_count', 0),
635
+ input_cost=input_tokens_cost,
636
+ output_cost=generated_tokens_cost,
637
+ speed=round(speed, 2)
638
+ )).to_dict(), metadata=EventMetadata(
639
+ action_file=self.args.file
640
+ ).to_dict())
641
+
642
+ global_cancel.check_and_raise(token=self.args.cancel_token)
643
+
644
+ merge_result = None
645
+ if args.execute and args.auto_merge:
646
+ self.printer.print_in_terminal("code_merge_start")
647
+ if args.auto_merge == "diff":
648
+ code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
649
+ merge_result = code_merge.merge_code(
650
+ generate_result=generate_result)
651
+ elif args.auto_merge == "strict_diff":
652
+ code_merge = CodeAutoMergeStrictDiff(
653
+ llm=self.llm, args=self.args)
654
+ merge_result = code_merge.merge_code(
655
+ generate_result=generate_result)
656
+ elif args.auto_merge == "editblock":
657
+ code_merge = CodeAutoMergeEditBlock(
658
+ llm=self.llm, args=self.args)
659
+ merge_result = code_merge.merge_code(
660
+ generate_result=generate_result)
661
+ else:
662
+ code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
663
+ merge_result = code_merge.merge_code(
664
+ generate_result=generate_result)
665
+
666
+ if merge_result is not None:
667
+ content = merge_result.contents[0]
668
+ store_code_model_conversation(
669
+ args=self.args,
670
+ instruction=self.args.query,
671
+ conversations=merge_result.conversations[0],
672
+ model=self.llm.default_model_name,
673
+ )
674
+ else:
675
+ content = generate_result.contents[0]
676
+
677
+ store_code_model_conversation(
678
+ args=self.args,
679
+ instruction=self.args.query,
680
+ conversations=generate_result.conversations[0],
681
+ model=self.llm.default_model_name,
682
+ )
@@ -67,7 +67,7 @@ class ActionRegexProject:
67
67
 
68
68
  start_time = time.time()
69
69
 
70
- global_cancel.check_and_raise(token=self.args.event_file)
70
+ global_cancel.check_and_raise(token=self.args.cancel_token)
71
71
 
72
72
  if (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
73
73
  code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
@@ -128,7 +128,7 @@ class ActionRegexProject:
128
128
  action_file=self.args.file
129
129
  ).to_dict())
130
130
 
131
- global_cancel.check_and_raise(token=self.args.event_file)
131
+ global_cancel.check_and_raise(token=self.args.cancel_token)
132
132
 
133
133
  merge_result = None
134
134
  if args.execute and args.auto_merge:
autocoder/index/entry.py CHANGED
@@ -1,9 +1,12 @@
1
1
  import os
2
2
  import json
3
+ from pdb import run
3
4
  import time
4
5
  from typing import List, Dict, Any, Optional
5
6
  from datetime import datetime
7
+ from pathlib import Path
6
8
  from autocoder.common import SourceCode, AutoCoderArgs
9
+ from autocoder.common.autocoderargs_parser import AutoCoderArgsParser
7
10
 
8
11
  from rich.console import Console
9
12
  from rich.table import Table
@@ -11,26 +14,19 @@ from rich.panel import Panel
11
14
 
12
15
  from autocoder.common.printer import Printer
13
16
  from autocoder.events.event_types import EventMetadata
14
- from autocoder.utils.queue_communicate import (
15
- queue_communicate,
16
- CommunicateEvent,
17
- CommunicateEventType,
18
- )
19
- from autocoder.index.types import (
20
- TargetFile
21
- )
17
+ from autocoder.index.filter.agentic_filter import AgenticFilterRequest, AgenticFilter
18
+ from autocoder.index.types import TargetFile
22
19
 
23
20
  from autocoder.index.filter.quick_filter import QuickFilter
24
21
  from autocoder.index.filter.normal_filter import NormalFilter
25
22
  from autocoder.index.index import IndexManager
26
23
  from loguru import logger
27
24
  from autocoder.common import SourceCodeList
28
- from autocoder.common.context_pruner import PruneContext
25
+ from autocoder.common.pruner.context_pruner import PruneContext
29
26
  from autocoder.common.action_yml_file_manager import ActionYmlFileManager
30
27
 
31
28
  from autocoder.events.event_manager_singleton import get_event_manager
32
29
  from autocoder.events import event_content as EventContentCreator
33
- from autocoder.agent.agentic_filter import AgenticFilter
34
30
 
35
31
 
36
32
  def build_index_and_filter_files(
@@ -58,8 +54,8 @@ def build_index_and_filter_files(
58
54
  },
59
55
  "file_selection": 0.0,
60
56
  "prepare_output": 0.0,
61
- "total": 0.0
62
- }
57
+ "total": 0.0,
58
+ },
63
59
  }
64
60
 
65
61
  def get_file_path(file_path):
@@ -85,11 +81,44 @@ def build_index_and_filter_files(
85
81
  phase_end = time.monotonic()
86
82
  stats["timings"]["process_tagged_sources"] = phase_end - phase_start
87
83
 
88
- if not args.skip_build_index and llm:
84
+ index_manager = IndexManager(llm=llm, sources=sources, args=args)
85
+
86
+ if not args.skip_filter_index and args.enable_agentic_filter:
87
+ # tuner = AgenticFilter(
88
+ # llm=index_manager.index_filter_llm or llm,
89
+ # conversation_history=[],
90
+ # args=args)
91
+
92
+ # query = args.query or ""
93
+ # response = tuner.analyze(
94
+ # AgenticFilterRequest(user_input=query))
95
+
96
+ # if response:
97
+ # for file in response.files:
98
+ # final_files[file.path] = TargetFile(
99
+ # file_path=file.path, reason="Agentic Filter")
100
+
101
+ from autocoder.auto_coder_runner import run_agentic_filter
102
+
103
+ response = run_agentic_filter(query=args.query)
104
+
105
+ if response:
106
+ for file in response.files:
107
+ file_path = Path(file.path)
108
+ if not file_path.is_absolute():
109
+ # 相对路径需要加上 source_dir 作为根目录
110
+ file_path = Path(args.source_dir) / file_path
111
+ # 转换为绝对路径
112
+ absolute_path = str(file_path.resolve())
113
+ final_files[absolute_path] = TargetFile(
114
+ file_path=absolute_path, reason="Agentic Filter"
115
+ )
116
+
117
+ elif not args.skip_build_index and llm:
89
118
  # Phase 2: Build index
90
119
  printer.print_in_terminal("phase2_building_index")
91
120
  phase_start = time.monotonic()
92
- index_manager = IndexManager(llm=llm, sources=sources, args=args)
121
+
93
122
  index_data = index_manager.build_index()
94
123
  stats["indexed_files"] = len(index_data) if index_data else 0
95
124
  phase_end = time.monotonic()
@@ -97,56 +126,32 @@ def build_index_and_filter_files(
97
126
 
98
127
  if not args.skip_filter_index and args.index_filter_model:
99
128
 
100
- model_name = getattr(
101
- index_manager.index_filter_llm, 'default_model_name', None)
102
- if not model_name:
103
- model_name = "unknown(without default model name)"
129
+ model_name = args.index_filter_model or args.model
130
+ printer.print_in_terminal(
131
+ "quick_filter_start", style="blue", model_name=model_name
132
+ )
133
+
134
+ quick_filter = QuickFilter(index_manager, stats, sources)
135
+ query = args.query or ""
136
+ quick_filter_result = quick_filter.filter(index_manager.read_index(), query)
137
+
138
+ final_files.update(quick_filter_result.files)
104
139
 
105
- if args.enable_agentic_filter:
106
- from autocoder.agent.agentic_filter import AgenticFilterRequest, AgenticFilter, CommandConfig, MemoryConfig
107
- from autocoder.common.conf_utils import load_memory
108
-
109
- _memory = load_memory(args)
110
-
111
- def save_memory_func():
112
- pass
113
-
114
- tuner = AgenticFilter(index_manager.index_filter_llm,
115
- args=args,
116
- conversation_history=[],
117
- memory_config=MemoryConfig(
118
- memory=_memory, save_memory_func=save_memory_func),
119
- command_config=None)
120
- response = tuner.analyze(
121
- AgenticFilterRequest(user_input=args.query))
122
- if response:
123
- print("收集文件。。。。。。")
124
- print(response)
125
- for file in response.files:
126
- final_files[file.path] = TargetFile(
127
- file_path=file.path, reason="Agentic Filter")
128
- else:
129
- printer.print_in_terminal(
130
- "quick_filter_start", style="blue", model_name=model_name)
131
-
132
- quick_filter = QuickFilter(index_manager, stats, sources)
133
- quick_filter_result = quick_filter.filter(
134
- index_manager.read_index(), args.query)
135
-
136
- final_files.update(quick_filter_result.files)
137
-
138
- if quick_filter_result.file_positions:
139
- file_positions.update(quick_filter_result.file_positions)
140
+ if quick_filter_result.file_positions:
141
+ file_positions.update(quick_filter_result.file_positions)
140
142
 
141
143
  if not args.skip_filter_index and not args.index_filter_model:
142
- model_name = getattr(index_manager.llm, 'default_model_name', None)
144
+ model_name = getattr(index_manager.llm, "default_model_name", None)
143
145
  if not model_name:
144
146
  model_name = "unknown(without default model name)"
145
147
  printer.print_in_terminal(
146
- "normal_filter_start", style="blue", model_name=model_name)
148
+ "normal_filter_start", style="blue", model_name=model_name
149
+ )
147
150
  normal_filter = NormalFilter(index_manager, stats, sources)
151
+ query = args.query or ""
148
152
  normal_filter_result = normal_filter.filter(
149
- index_manager.read_index(), args.query)
153
+ index_manager.read_index(), query
154
+ )
150
155
  # Merge normal filter results into final_files
151
156
  final_files.update(normal_filter_result.files)
152
157
 
@@ -198,21 +203,25 @@ def build_index_and_filter_files(
198
203
  header_style="bold magenta",
199
204
  # 设置表格最大宽度为终端宽度(留 10 字符边距)
200
205
  width=min(console_width - 10, 120),
201
- expand=True
206
+ expand=True,
202
207
  )
203
208
 
204
209
  # 优化列配置
205
- table.add_column("File Path",
206
- style="cyan",
207
- # 分配 60% 宽度给文件路径
208
- width=int((console_width - 10) * 0.6),
209
- overflow="fold", # 自动折叠过长的路径
210
- no_wrap=False) # 允许换行
211
-
212
- table.add_column("Reason",
213
- style="green",
214
- width=int((console_width - 10) * 0.4), # 分配 40% 宽度给原因
215
- no_wrap=False)
210
+ table.add_column(
211
+ "File Path",
212
+ style="cyan",
213
+ # 分配 60% 宽度给文件路径
214
+ width=int((console_width - 10) * 0.6),
215
+ overflow="fold", # 自动折叠过长的路径
216
+ no_wrap=False,
217
+ ) # 允许换行
218
+
219
+ table.add_column(
220
+ "Reason",
221
+ style="green",
222
+ width=int((console_width - 10) * 0.4), # 分配 40% 宽度给原因
223
+ no_wrap=False,
224
+ )
216
225
 
217
226
  # 添加处理过的文件路径
218
227
  for file, reason in data:
@@ -235,7 +244,8 @@ def build_index_and_filter_files(
235
244
 
236
245
  if args.index_filter_file_num > 0:
237
246
  logger.info(
238
- f"Limiting files from {len(final_files)} to {args.index_filter_file_num}")
247
+ f"Limiting files from {len(final_files)} to {args.index_filter_file_num}"
248
+ )
239
249
 
240
250
  if args.skip_confirm:
241
251
  final_filenames = [file.file_path for file in final_files.values()]
@@ -251,8 +261,7 @@ def build_index_and_filter_files(
251
261
  )
252
262
  final_filenames = []
253
263
  else:
254
- final_filenames = display_table_and_get_selections(
255
- target_files_data)
264
+ final_filenames = display_table_and_get_selections(target_files_data)
256
265
 
257
266
  if args.index_filter_file_num > 0:
258
267
  final_filenames = final_filenames[: args.index_filter_file_num]
@@ -283,9 +292,13 @@ def build_index_and_filter_files(
283
292
  source_code_list = SourceCodeList(sources=[])
284
293
  depulicated_sources = set()
285
294
 
295
+ # for file in final_filenames:
296
+ # print(f"{file} - {final_files[file].reason}")
297
+
286
298
  # 先去重
287
299
  temp_sources = []
288
300
  for file in sources:
301
+ # print(f"{file.module_name} in project")
289
302
  if file.module_name in final_filenames:
290
303
  if file.module_name in depulicated_sources:
291
304
  continue
@@ -296,8 +309,14 @@ def build_index_and_filter_files(
296
309
 
297
310
  # 开启了裁剪,则需要做裁剪,不过目前只针对 quick filter 生效
298
311
  if args.context_prune:
312
+ # 解析 conversation_prune_safe_zone_tokens 参数
313
+ args_parser = AutoCoderArgsParser()
314
+ parsed_safe_zone_tokens = args_parser.parse_conversation_prune_safe_zone_tokens(
315
+ args.conversation_prune_safe_zone_tokens, args.code_model
316
+ )
299
317
  context_pruner = PruneContext(
300
- max_tokens=args.conversation_prune_safe_zone_tokens, args=args, llm=llm)
318
+ max_tokens=parsed_safe_zone_tokens, args=args, llm=llm
319
+ )
301
320
  # 如果 file_positions 不为空,则通过 file_positions 来获取文件
302
321
  if file_positions:
303
322
  # 拿到位置列表,然后根据位置排序 得到 [(pos,file_path)]
@@ -305,19 +324,28 @@ def build_index_and_filter_files(
305
324
  # 通过 [file_path] 顺序调整 temp_sources 的顺序
306
325
  # MARK
307
326
  # 将 file_positions 转换为 [(pos, file_path)] 的列表
308
- position_file_pairs = [(pos, file_path)
309
- for file_path, pos in file_positions.items()]
327
+ position_file_pairs = [
328
+ (pos, file_path) for file_path, pos in file_positions.items()
329
+ ]
310
330
  # 按位置排序
311
331
  position_file_pairs.sort(key=lambda x: x[0])
312
332
  # 提取排序后的文件路径列表
313
- sorted_file_paths = [file_path for _,
314
- file_path in position_file_pairs]
333
+ sorted_file_paths = [file_path for _, file_path in position_file_pairs]
315
334
  # 根据 sorted_file_paths 重新排序 temp_sources
316
- temp_sources.sort(key=lambda x: sorted_file_paths.index(
317
- x.module_name) if x.module_name in sorted_file_paths else len(sorted_file_paths))
335
+ temp_sources.sort(
336
+ key=lambda x: (
337
+ sorted_file_paths.index(x.module_name)
338
+ if x.module_name in sorted_file_paths
339
+ else len(sorted_file_paths)
340
+ )
341
+ )
318
342
 
343
+ query = args.query or ""
319
344
  pruned_files = context_pruner.handle_overflow(
320
- temp_sources, [{"role": "user", "content": args.query}], args.context_prune_strategy)
345
+ temp_sources,
346
+ [{"role": "user", "content": query}],
347
+ args.context_prune_strategy,
348
+ )
321
349
  source_code_list.sources = pruned_files
322
350
 
323
351
  stats["final_files"] = len(source_code_list.sources)
@@ -331,56 +359,19 @@ def build_index_and_filter_files(
331
359
 
332
360
  # Calculate total filter time
333
361
  total_filter_time = (
334
- stats["timings"]["quick_filter"] +
335
- stats["timings"]["normal_filter"]["level1_filter"] +
336
- stats["timings"]["normal_filter"]["level2_filter"] +
337
- stats["timings"]["normal_filter"]["relevance_verification"]
362
+ stats["timings"]["quick_filter"]
363
+ + stats["timings"]["normal_filter"]["level1_filter"]
364
+ + stats["timings"]["normal_filter"]["level2_filter"]
365
+ + stats["timings"]["normal_filter"]["relevance_verification"]
338
366
  )
339
367
 
340
- # Print final statistics in a more structured way
341
- summary = f"""
342
- === File Stat ===
343
- • Total files scanned: {stats['total_files']}
344
- • Files indexed: {stats['indexed_files']}
345
- • Files filtered:
346
- - Level 1 (query-based): {stats['level1_filtered']}
347
- - Level 2 (related files): {stats['level2_filtered']}
348
- - Relevance verified: {stats.get('verified_files', 0)}
349
- • Final files selected: {stats['final_files']}
350
-
351
- === Time Stat ===
352
- • Index build: {stats['timings'].get('build_index', 0):.2f}s
353
- • Quick filter: {stats['timings'].get('quick_filter', 0):.2f}s
354
- • Normal filter:
355
- - Level 1 filter: {stats['timings']["normal_filter"].get('level1_filter', 0):.2f}s
356
- - Level 2 filter: {stats['timings']["normal_filter"].get('level2_filter', 0):.2f}s
357
- - Relevance check: {stats['timings']["normal_filter"].get('relevance_verification', 0):.2f}s
358
- • File selection: {stats['timings'].get('file_selection', 0):.2f}s
359
- • Total time: {total_time:.2f}s
360
-
361
- """
362
- # printer.print_panel(
363
- # summary,
364
- # text_options={"justify": "left", "style": "bold white"},
365
- # panel_options={
366
- # "title": "Indexing and Filtering Summary",
367
- # "border_style": "bold blue",
368
- # "padding": (1, 2),
369
- # "expand": False
370
- # }
371
- # )
372
-
373
368
  get_event_manager(args.event_file).write_result(
374
369
  EventContentCreator.create_result(
375
370
  content=EventContentCreator.ResultContextUsedContent(
376
- files=final_filenames,
377
- title="Files Used as Context",
378
- description=""
371
+ files=final_filenames, title="Files Used as Context", description=""
379
372
  ).to_dict()
380
373
  ),
381
- metadata=EventMetadata(
382
- action_file=args.file
383
- ).to_dict()
374
+ metadata=EventMetadata(action_file=args.file or "").to_dict(),
384
375
  )
385
376
 
386
377
  if args.file:
@@ -393,10 +384,11 @@ def build_index_and_filter_files(
393
384
  args.dynamic_urls = dynamic_urls
394
385
 
395
386
  update_yaml_success = action_yml_file_manager.update_yaml_field(
396
- action_file_name, "dynamic_urls", args.dynamic_urls)
387
+ action_file_name, "dynamic_urls", args.dynamic_urls
388
+ )
397
389
  if not update_yaml_success:
398
390
  printer = Printer()
399
391
  printer.print_in_terminal(
400
- "yaml_save_error", style="red", yaml_file=action_file_name)
401
-
392
+ "yaml_save_error", style="red", yaml_file=action_file_name
393
+ )
402
394
  return source_code_list