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

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

Potentially problematic release.


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

Files changed (574) hide show
  1. auto_coder-2.0.0.dist-info/LICENSE +158 -0
  2. auto_coder-2.0.0.dist-info/METADATA +558 -0
  3. auto_coder-2.0.0.dist-info/RECORD +795 -0
  4. {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
  5. {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
  6. autocoder/__init__.py +31 -0
  7. autocoder/agent/auto_filegroup.py +32 -13
  8. autocoder/agent/auto_learn_from_commit.py +9 -1
  9. autocoder/agent/base_agentic/__init__.py +3 -0
  10. autocoder/agent/base_agentic/agent_hub.py +1 -1
  11. autocoder/agent/base_agentic/base_agent.py +235 -136
  12. autocoder/agent/base_agentic/default_tools.py +119 -118
  13. autocoder/agent/base_agentic/test_base_agent.py +1 -1
  14. autocoder/agent/base_agentic/tool_registry.py +32 -20
  15. autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +24 -3
  16. autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
  17. autocoder/agent/base_agentic/types.py +42 -0
  18. autocoder/agent/entry_command_agent/chat.py +73 -59
  19. autocoder/auto_coder.py +31 -40
  20. autocoder/auto_coder_rag.py +11 -1084
  21. autocoder/auto_coder_runner.py +970 -2345
  22. autocoder/auto_coder_terminal.py +26 -0
  23. autocoder/auto_coder_terminal_v3.py +190 -0
  24. autocoder/chat/conf_command.py +224 -124
  25. autocoder/chat/models_command.py +361 -299
  26. autocoder/chat/rules_command.py +79 -31
  27. autocoder/chat_auto_coder.py +988 -398
  28. autocoder/chat_auto_coder_lang.py +23 -732
  29. autocoder/commands/auto_command.py +25 -8
  30. autocoder/commands/auto_web.py +1 -1
  31. autocoder/commands/tools.py +44 -44
  32. autocoder/common/__init__.py +150 -128
  33. autocoder/common/ac_style_command_parser/__init__.py +39 -2
  34. autocoder/common/ac_style_command_parser/config.py +422 -0
  35. autocoder/common/ac_style_command_parser/parser.py +292 -78
  36. autocoder/common/ac_style_command_parser/test_parser.py +241 -16
  37. autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
  38. autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
  39. autocoder/common/action_yml_file_manager.py +25 -13
  40. autocoder/common/agent_events/__init__.py +52 -0
  41. autocoder/common/agent_events/agent_event_emitter.py +193 -0
  42. autocoder/common/agent_events/event_factory.py +177 -0
  43. autocoder/common/agent_events/examples.py +307 -0
  44. autocoder/common/agent_events/types.py +113 -0
  45. autocoder/common/agent_events/utils.py +68 -0
  46. autocoder/common/agent_hooks/__init__.py +44 -0
  47. autocoder/common/agent_hooks/examples.py +582 -0
  48. autocoder/common/agent_hooks/hook_executor.py +217 -0
  49. autocoder/common/agent_hooks/hook_manager.py +288 -0
  50. autocoder/common/agent_hooks/types.py +133 -0
  51. autocoder/common/agent_hooks/utils.py +99 -0
  52. autocoder/common/agent_query_queue/queue_executor.py +324 -0
  53. autocoder/common/agent_query_queue/queue_manager.py +325 -0
  54. autocoder/common/agents/__init__.py +11 -0
  55. autocoder/common/agents/agent_manager.py +323 -0
  56. autocoder/common/agents/agent_parser.py +189 -0
  57. autocoder/common/agents/example_usage.py +344 -0
  58. autocoder/common/agents/integration_example.py +330 -0
  59. autocoder/common/agents/test_agent_parser.py +545 -0
  60. autocoder/common/async_utils.py +101 -0
  61. autocoder/common/auto_coder_lang.py +23 -972
  62. autocoder/common/autocoderargs_parser/__init__.py +14 -0
  63. autocoder/common/autocoderargs_parser/parser.py +184 -0
  64. autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
  65. autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
  66. autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
  67. autocoder/common/autocoderargs_parser/token_parser.py +290 -0
  68. autocoder/common/buildin_tokenizer.py +2 -4
  69. autocoder/common/code_auto_generate.py +149 -74
  70. autocoder/common/code_auto_generate_diff.py +163 -70
  71. autocoder/common/code_auto_generate_editblock.py +179 -89
  72. autocoder/common/code_auto_generate_strict_diff.py +167 -72
  73. autocoder/common/code_auto_merge_editblock.py +13 -6
  74. autocoder/common/code_modification_ranker.py +1 -1
  75. autocoder/common/command_completer.py +3 -3
  76. autocoder/common/command_file_manager/manager.py +183 -47
  77. autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
  78. autocoder/common/command_templates.py +1 -1
  79. autocoder/common/conf_utils.py +2 -4
  80. autocoder/common/conversations/config.py +11 -3
  81. autocoder/common/conversations/get_conversation_manager.py +100 -2
  82. autocoder/common/conversations/llm_stats_models.py +264 -0
  83. autocoder/common/conversations/manager.py +112 -28
  84. autocoder/common/conversations/models.py +16 -2
  85. autocoder/common/conversations/storage/index_manager.py +134 -10
  86. autocoder/common/core_config/__init__.py +63 -0
  87. autocoder/common/core_config/agentic_mode_manager.py +109 -0
  88. autocoder/common/core_config/base_manager.py +123 -0
  89. autocoder/common/core_config/compatibility.py +151 -0
  90. autocoder/common/core_config/config_manager.py +156 -0
  91. autocoder/common/core_config/conversation_manager.py +31 -0
  92. autocoder/common/core_config/exclude_manager.py +72 -0
  93. autocoder/common/core_config/file_manager.py +177 -0
  94. autocoder/common/core_config/human_as_model_manager.py +129 -0
  95. autocoder/common/core_config/lib_manager.py +54 -0
  96. autocoder/common/core_config/main_manager.py +81 -0
  97. autocoder/common/core_config/mode_manager.py +126 -0
  98. autocoder/common/core_config/models.py +70 -0
  99. autocoder/common/core_config/test_memory_manager.py +1056 -0
  100. autocoder/common/env_manager.py +282 -0
  101. autocoder/common/env_manager_usage_example.py +211 -0
  102. autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
  103. autocoder/common/file_checkpoint/manager.py +264 -48
  104. autocoder/common/file_checkpoint/test_backup.py +1 -18
  105. autocoder/common/file_checkpoint/test_manager.py +270 -1
  106. autocoder/common/file_checkpoint/test_store.py +1 -17
  107. autocoder/common/file_handler/__init__.py +23 -0
  108. autocoder/common/file_handler/active_context_handler.py +159 -0
  109. autocoder/common/file_handler/add_files_handler.py +409 -0
  110. autocoder/common/file_handler/chat_handler.py +180 -0
  111. autocoder/common/file_handler/coding_handler.py +401 -0
  112. autocoder/common/file_handler/commit_handler.py +200 -0
  113. autocoder/common/file_handler/lib_handler.py +156 -0
  114. autocoder/common/file_handler/list_files_handler.py +111 -0
  115. autocoder/common/file_handler/mcp_handler.py +268 -0
  116. autocoder/common/file_handler/models_handler.py +493 -0
  117. autocoder/common/file_handler/remove_files_handler.py +172 -0
  118. autocoder/common/git_utils.py +44 -8
  119. autocoder/common/global_cancel.py +15 -6
  120. autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
  121. autocoder/common/international/__init__.py +31 -0
  122. autocoder/common/international/demo_international.py +92 -0
  123. autocoder/common/international/message_manager.py +157 -0
  124. autocoder/common/international/messages/__init__.py +56 -0
  125. autocoder/common/international/messages/async_command_messages.py +507 -0
  126. autocoder/common/international/messages/auto_coder_messages.py +2208 -0
  127. autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
  128. autocoder/common/international/messages/command_help_messages.py +986 -0
  129. autocoder/common/international/messages/conversation_command_messages.py +191 -0
  130. autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
  131. autocoder/common/international/messages/queue_command_messages.py +751 -0
  132. autocoder/common/international/messages/rules_command_messages.py +77 -0
  133. autocoder/common/international/messages/sdk_messages.py +1707 -0
  134. autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
  135. autocoder/common/international/messages/tool_display_messages.py +1212 -0
  136. autocoder/common/international/messages/workflow_exception_messages.py +473 -0
  137. autocoder/common/international/test_international.py +612 -0
  138. autocoder/common/linter_core/__init__.py +28 -0
  139. autocoder/common/linter_core/base_linter.py +61 -0
  140. autocoder/common/linter_core/config_loader.py +271 -0
  141. autocoder/common/linter_core/formatters/__init__.py +0 -0
  142. autocoder/common/linter_core/formatters/base_formatter.py +38 -0
  143. autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
  144. autocoder/common/linter_core/linter.py +166 -0
  145. autocoder/common/linter_core/linter_factory.py +216 -0
  146. autocoder/common/linter_core/linter_manager.py +333 -0
  147. autocoder/common/linter_core/linters/__init__.py +9 -0
  148. autocoder/common/linter_core/linters/java_linter.py +342 -0
  149. autocoder/common/linter_core/linters/python_linter.py +115 -0
  150. autocoder/common/linter_core/linters/typescript_linter.py +119 -0
  151. autocoder/common/linter_core/models/__init__.py +7 -0
  152. autocoder/common/linter_core/models/lint_result.py +91 -0
  153. autocoder/common/linter_core/models.py +33 -0
  154. autocoder/common/linter_core/tests/__init__.py +3 -0
  155. autocoder/common/linter_core/tests/test_config_loader.py +323 -0
  156. autocoder/common/linter_core/tests/test_config_loading.py +308 -0
  157. autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
  158. autocoder/common/linter_core/tests/test_formatters.py +147 -0
  159. autocoder/common/linter_core/tests/test_integration.py +317 -0
  160. autocoder/common/linter_core/tests/test_java_linter.py +496 -0
  161. autocoder/common/linter_core/tests/test_linters.py +265 -0
  162. autocoder/common/linter_core/tests/test_models.py +81 -0
  163. autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
  164. autocoder/common/linter_core/tests/verify_fixes.py +183 -0
  165. autocoder/common/llm_friendly_package/__init__.py +31 -0
  166. autocoder/common/llm_friendly_package/base_manager.py +102 -0
  167. autocoder/common/llm_friendly_package/docs_manager.py +121 -0
  168. autocoder/common/llm_friendly_package/library_manager.py +171 -0
  169. autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
  170. autocoder/common/llm_friendly_package/models.py +40 -0
  171. autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
  172. autocoder/common/llms/__init__.py +15 -0
  173. autocoder/common/llms/demo_error_handling.py +85 -0
  174. autocoder/common/llms/factory.py +142 -0
  175. autocoder/common/llms/manager.py +264 -0
  176. autocoder/common/llms/pricing.py +121 -0
  177. autocoder/common/llms/registry.py +288 -0
  178. autocoder/common/llms/schema.py +77 -0
  179. autocoder/common/llms/simple_demo.py +45 -0
  180. autocoder/common/llms/test_quick_model.py +116 -0
  181. autocoder/common/llms/test_remove_functionality.py +182 -0
  182. autocoder/common/llms/tests/__init__.py +1 -0
  183. autocoder/common/llms/tests/test_manager.py +330 -0
  184. autocoder/common/llms/tests/test_registry.py +364 -0
  185. autocoder/common/mcp_tools/__init__.py +62 -0
  186. autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
  187. autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
  188. autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
  189. autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
  190. autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
  191. autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
  192. autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
  193. autocoder/common/mcp_tools/verify_functionality.py +202 -0
  194. autocoder/common/model_speed_tester.py +32 -26
  195. autocoder/common/priority_directory_finder/__init__.py +142 -0
  196. autocoder/common/priority_directory_finder/examples.py +230 -0
  197. autocoder/common/priority_directory_finder/finder.py +283 -0
  198. autocoder/common/priority_directory_finder/models.py +236 -0
  199. autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
  200. autocoder/common/project_scanner/__init__.py +18 -0
  201. autocoder/common/project_scanner/compat.py +77 -0
  202. autocoder/common/project_scanner/scanner.py +436 -0
  203. autocoder/common/project_tracker/__init__.py +27 -0
  204. autocoder/common/project_tracker/api.py +228 -0
  205. autocoder/common/project_tracker/demo.py +272 -0
  206. autocoder/common/project_tracker/tracker.py +487 -0
  207. autocoder/common/project_tracker/types.py +53 -0
  208. autocoder/common/pruner/__init__.py +67 -0
  209. autocoder/common/pruner/agentic_conversation_pruner.py +651 -102
  210. autocoder/common/pruner/conversation_message_ids_api.py +386 -0
  211. autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
  212. autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
  213. autocoder/common/pruner/conversation_normalizer.py +347 -0
  214. autocoder/common/pruner/conversation_pruner.py +26 -6
  215. autocoder/common/pruner/test_agentic_conversation_pruner.py +554 -112
  216. autocoder/common/pruner/test_conversation_normalizer.py +502 -0
  217. autocoder/common/pruner/test_tool_content_detector.py +324 -0
  218. autocoder/common/pruner/tool_content_detector.py +227 -0
  219. autocoder/common/pruner/tools/__init__.py +18 -0
  220. autocoder/common/pruner/tools/query_message_ids.py +264 -0
  221. autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
  222. autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
  223. autocoder/common/pull_requests/__init__.py +9 -1
  224. autocoder/common/pull_requests/utils.py +122 -1
  225. autocoder/common/rag_manager/rag_manager.py +36 -40
  226. autocoder/common/rulefiles/__init__.py +53 -1
  227. autocoder/common/rulefiles/api.py +250 -0
  228. autocoder/common/rulefiles/core/__init__.py +14 -0
  229. autocoder/common/rulefiles/core/manager.py +241 -0
  230. autocoder/common/rulefiles/core/selector.py +805 -0
  231. autocoder/common/rulefiles/models/__init__.py +20 -0
  232. autocoder/common/rulefiles/models/index.py +16 -0
  233. autocoder/common/rulefiles/models/init_rule.py +18 -0
  234. autocoder/common/rulefiles/models/rule_file.py +18 -0
  235. autocoder/common/rulefiles/models/rule_relevance.py +14 -0
  236. autocoder/common/rulefiles/models/summary.py +16 -0
  237. autocoder/common/rulefiles/test_rulefiles.py +776 -0
  238. autocoder/common/rulefiles/utils/__init__.py +34 -0
  239. autocoder/common/rulefiles/utils/monitor.py +86 -0
  240. autocoder/common/rulefiles/utils/parser.py +230 -0
  241. autocoder/common/save_formatted_log.py +67 -10
  242. autocoder/common/search_replace.py +8 -1
  243. autocoder/common/search_replace_patch/__init__.py +24 -0
  244. autocoder/common/search_replace_patch/base.py +115 -0
  245. autocoder/common/search_replace_patch/manager.py +248 -0
  246. autocoder/common/search_replace_patch/patch_replacer.py +304 -0
  247. autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
  248. autocoder/common/search_replace_patch/string_replacer.py +181 -0
  249. autocoder/common/search_replace_patch/tests/__init__.py +3 -0
  250. autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
  251. autocoder/common/search_replace_patch/tests/test_base.py +188 -0
  252. autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
  253. autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
  254. autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
  255. autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
  256. autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
  257. autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
  258. autocoder/common/shell_commands/__init__.py +197 -0
  259. autocoder/common/shell_commands/background_process_notifier.py +346 -0
  260. autocoder/common/shell_commands/command_executor.py +1127 -0
  261. autocoder/common/shell_commands/error_recovery.py +541 -0
  262. autocoder/common/shell_commands/exceptions.py +120 -0
  263. autocoder/common/shell_commands/interactive_executor.py +476 -0
  264. autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
  265. autocoder/common/shell_commands/interactive_process.py +744 -0
  266. autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
  267. autocoder/common/shell_commands/monitoring.py +529 -0
  268. autocoder/common/shell_commands/process_cleanup.py +386 -0
  269. autocoder/common/shell_commands/process_manager.py +606 -0
  270. autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
  271. autocoder/common/shell_commands/tests/__init__.py +6 -0
  272. autocoder/common/shell_commands/tests/conftest.py +118 -0
  273. autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
  274. autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
  275. autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
  276. autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
  277. autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
  278. autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
  279. autocoder/common/shell_commands/tests/test_integration.py +664 -0
  280. autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
  281. autocoder/common/shell_commands/tests/test_performance.py +632 -0
  282. autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
  283. autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
  284. autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
  285. autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
  286. autocoder/common/shell_commands/timeout_config.py +315 -0
  287. autocoder/common/shell_commands/timeout_manager.py +352 -0
  288. autocoder/common/terminal_paste/__init__.py +14 -0
  289. autocoder/common/terminal_paste/demo.py +145 -0
  290. autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
  291. autocoder/common/terminal_paste/paste_handler.py +200 -0
  292. autocoder/common/terminal_paste/paste_manager.py +118 -0
  293. autocoder/common/terminal_paste/tests/__init__.py +1 -0
  294. autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
  295. autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
  296. autocoder/common/terminal_paste/utils.py +163 -0
  297. autocoder/common/test_autocoder_args.py +232 -0
  298. autocoder/common/test_env_manager.py +173 -0
  299. autocoder/common/test_env_manager_integration.py +159 -0
  300. autocoder/common/text_similarity/__init__.py +9 -0
  301. autocoder/common/text_similarity/demo.py +216 -0
  302. autocoder/common/text_similarity/examples.py +266 -0
  303. autocoder/common/text_similarity/test_text_similarity.py +306 -0
  304. autocoder/common/text_similarity/text_similarity.py +194 -0
  305. autocoder/common/text_similarity/utils.py +125 -0
  306. autocoder/common/todos/__init__.py +61 -0
  307. autocoder/common/todos/cache/__init__.py +16 -0
  308. autocoder/common/todos/cache/base_cache.py +89 -0
  309. autocoder/common/todos/cache/cache_manager.py +228 -0
  310. autocoder/common/todos/cache/memory_cache.py +225 -0
  311. autocoder/common/todos/config.py +155 -0
  312. autocoder/common/todos/exceptions.py +35 -0
  313. autocoder/common/todos/get_todo_manager.py +161 -0
  314. autocoder/common/todos/manager.py +537 -0
  315. autocoder/common/todos/models.py +239 -0
  316. autocoder/common/todos/storage/__init__.py +14 -0
  317. autocoder/common/todos/storage/base_storage.py +76 -0
  318. autocoder/common/todos/storage/file_storage.py +278 -0
  319. autocoder/common/tokens/counter.py +24 -2
  320. autocoder/common/tools_manager/__init__.py +17 -0
  321. autocoder/common/tools_manager/examples.py +162 -0
  322. autocoder/common/tools_manager/manager.py +385 -0
  323. autocoder/common/tools_manager/models.py +39 -0
  324. autocoder/common/tools_manager/test_tools_manager.py +303 -0
  325. autocoder/common/tools_manager/utils.py +191 -0
  326. autocoder/common/v2/agent/agentic_callbacks.py +270 -0
  327. autocoder/common/v2/agent/agentic_edit.py +2699 -1856
  328. autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
  329. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +35 -1
  330. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
  331. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +10 -1
  332. autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
  333. autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
  334. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
  335. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
  336. autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
  337. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +564 -29
  338. autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
  339. autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
  340. autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
  341. autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
  342. autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
  343. autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
  344. autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
  345. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +243 -50
  346. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
  347. autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
  348. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +410 -86
  349. autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
  350. autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
  351. autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
  352. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +207 -192
  353. autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +80 -63
  354. autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +237 -233
  355. autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
  356. autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
  357. autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
  358. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
  359. autocoder/common/v2/agent/agentic_edit_types.py +343 -9
  360. autocoder/common/v2/agent/runner/__init__.py +3 -3
  361. autocoder/common/v2/agent/runner/base_runner.py +12 -26
  362. autocoder/common/v2/agent/runner/{event_runner.py → file_based_event_runner.py} +3 -2
  363. autocoder/common/v2/agent/runner/sdk_runner.py +150 -8
  364. autocoder/common/v2/agent/runner/terminal_runner.py +170 -57
  365. autocoder/common/v2/agent/runner/tool_display.py +557 -159
  366. autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
  367. autocoder/common/v2/agent/test_agentic_edit.py +194 -0
  368. autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
  369. autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
  370. autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
  371. autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
  372. autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
  373. autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
  374. autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
  375. autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
  376. autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
  377. autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
  378. autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
  379. autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
  380. autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
  381. autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
  382. autocoder/common/v2/code_auto_generate.py +136 -78
  383. autocoder/common/v2/code_auto_generate_diff.py +135 -79
  384. autocoder/common/v2/code_auto_generate_editblock.py +174 -99
  385. autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
  386. autocoder/common/v2/code_auto_merge.py +1 -1
  387. autocoder/common/v2/code_auto_merge_editblock.py +13 -1
  388. autocoder/common/v2/code_diff_manager.py +3 -3
  389. autocoder/common/v2/code_editblock_manager.py +4 -14
  390. autocoder/common/v2/code_manager.py +1 -1
  391. autocoder/common/v2/code_strict_diff_manager.py +2 -2
  392. autocoder/common/wrap_llm_hint/__init__.py +10 -0
  393. autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
  394. autocoder/common/wrap_llm_hint/utils.py +432 -0
  395. autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
  396. autocoder/completer/__init__.py +8 -0
  397. autocoder/completer/command_completer_v2.py +1051 -0
  398. autocoder/default_project/__init__.py +501 -0
  399. autocoder/dispacher/__init__.py +4 -12
  400. autocoder/dispacher/actions/action.py +165 -7
  401. autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
  402. autocoder/index/entry.py +116 -124
  403. autocoder/{agent → index/filter}/agentic_filter.py +322 -333
  404. autocoder/index/filter/normal_filter.py +5 -11
  405. autocoder/index/filter/quick_filter.py +1 -1
  406. autocoder/index/index.py +36 -9
  407. autocoder/index/tests/__init__.py +1 -0
  408. autocoder/index/tests/run_tests.py +195 -0
  409. autocoder/index/tests/test_entry.py +303 -0
  410. autocoder/index/tests/test_index_manager.py +314 -0
  411. autocoder/index/tests/test_module_integration.py +300 -0
  412. autocoder/index/tests/test_symbols_utils.py +183 -0
  413. autocoder/inner/__init__.py +4 -0
  414. autocoder/inner/agentic.py +932 -0
  415. autocoder/inner/async_command_handler.py +992 -0
  416. autocoder/inner/conversation_command_handlers.py +623 -0
  417. autocoder/inner/merge_command_handler.py +213 -0
  418. autocoder/inner/queue_command_handler.py +684 -0
  419. autocoder/models.py +95 -266
  420. autocoder/plugins/git_helper_plugin.py +31 -29
  421. autocoder/plugins/token_helper_plugin.py +65 -46
  422. autocoder/pyproject/__init__.py +32 -29
  423. autocoder/rag/agentic_rag.py +215 -75
  424. autocoder/rag/cache/simple_cache.py +1 -2
  425. autocoder/rag/loaders/image_loader.py +1 -1
  426. autocoder/rag/long_context_rag.py +42 -26
  427. autocoder/rag/qa_conversation_strategy.py +1 -1
  428. autocoder/rag/terminal/__init__.py +17 -0
  429. autocoder/rag/terminal/args.py +581 -0
  430. autocoder/rag/terminal/bootstrap.py +61 -0
  431. autocoder/rag/terminal/command_handlers.py +653 -0
  432. autocoder/rag/terminal/formatters/__init__.py +20 -0
  433. autocoder/rag/terminal/formatters/base.py +70 -0
  434. autocoder/rag/terminal/formatters/json_format.py +66 -0
  435. autocoder/rag/terminal/formatters/stream_json.py +95 -0
  436. autocoder/rag/terminal/formatters/text.py +28 -0
  437. autocoder/rag/terminal/init.py +120 -0
  438. autocoder/rag/terminal/utils.py +106 -0
  439. autocoder/rag/test_agentic_rag.py +389 -0
  440. autocoder/rag/test_doc_filter.py +3 -3
  441. autocoder/rag/test_long_context_rag.py +1 -1
  442. autocoder/rag/test_token_limiter.py +517 -10
  443. autocoder/rag/token_counter.py +3 -0
  444. autocoder/rag/token_limiter.py +19 -15
  445. autocoder/rag/tools/__init__.py +26 -2
  446. autocoder/rag/tools/bochaai_example.py +343 -0
  447. autocoder/rag/tools/bochaai_sdk.py +541 -0
  448. autocoder/rag/tools/metaso_example.py +268 -0
  449. autocoder/rag/tools/metaso_sdk.py +417 -0
  450. autocoder/rag/tools/recall_tool.py +28 -7
  451. autocoder/rag/tools/run_integration_tests.py +204 -0
  452. autocoder/rag/tools/test_all_providers.py +318 -0
  453. autocoder/rag/tools/test_bochaai_integration.py +482 -0
  454. autocoder/rag/tools/test_final_integration.py +215 -0
  455. autocoder/rag/tools/test_metaso_integration.py +424 -0
  456. autocoder/rag/tools/test_metaso_real.py +171 -0
  457. autocoder/rag/tools/test_web_crawl_tool.py +639 -0
  458. autocoder/rag/tools/test_web_search_tool.py +509 -0
  459. autocoder/rag/tools/todo_read_tool.py +202 -0
  460. autocoder/rag/tools/todo_write_tool.py +412 -0
  461. autocoder/rag/tools/web_crawl_tool.py +634 -0
  462. autocoder/rag/tools/web_search_tool.py +558 -0
  463. autocoder/rag/tools/web_tools_example.py +119 -0
  464. autocoder/rag/types.py +16 -0
  465. autocoder/rag/variable_holder.py +4 -2
  466. autocoder/rags.py +86 -79
  467. autocoder/regexproject/__init__.py +23 -21
  468. autocoder/sdk/__init__.py +46 -190
  469. autocoder/sdk/api.py +370 -0
  470. autocoder/sdk/async_runner/__init__.py +26 -0
  471. autocoder/sdk/async_runner/async_executor.py +650 -0
  472. autocoder/sdk/async_runner/async_handler.py +356 -0
  473. autocoder/sdk/async_runner/markdown_processor.py +595 -0
  474. autocoder/sdk/async_runner/task_metadata.py +284 -0
  475. autocoder/sdk/async_runner/worktree_manager.py +438 -0
  476. autocoder/sdk/cli/__init__.py +2 -5
  477. autocoder/sdk/cli/formatters.py +28 -204
  478. autocoder/sdk/cli/handlers.py +77 -44
  479. autocoder/sdk/cli/main.py +154 -171
  480. autocoder/sdk/cli/options.py +95 -22
  481. autocoder/sdk/constants.py +139 -51
  482. autocoder/sdk/core/auto_coder_core.py +484 -109
  483. autocoder/sdk/core/bridge.py +297 -115
  484. autocoder/sdk/exceptions.py +18 -12
  485. autocoder/sdk/formatters/__init__.py +19 -0
  486. autocoder/sdk/formatters/input.py +64 -0
  487. autocoder/sdk/formatters/output.py +247 -0
  488. autocoder/sdk/formatters/stream.py +54 -0
  489. autocoder/sdk/models/__init__.py +6 -5
  490. autocoder/sdk/models/options.py +55 -18
  491. autocoder/sdk/utils/formatters.py +27 -195
  492. autocoder/suffixproject/__init__.py +28 -25
  493. autocoder/terminal/__init__.py +14 -0
  494. autocoder/terminal/app.py +454 -0
  495. autocoder/terminal/args.py +32 -0
  496. autocoder/terminal/bootstrap.py +178 -0
  497. autocoder/terminal/command_processor.py +521 -0
  498. autocoder/terminal/command_registry.py +57 -0
  499. autocoder/terminal/help.py +97 -0
  500. autocoder/terminal/tasks/__init__.py +5 -0
  501. autocoder/terminal/tasks/background.py +77 -0
  502. autocoder/terminal/tasks/task_event.py +70 -0
  503. autocoder/terminal/ui/__init__.py +13 -0
  504. autocoder/terminal/ui/completer.py +268 -0
  505. autocoder/terminal/ui/keybindings.py +75 -0
  506. autocoder/terminal/ui/session.py +41 -0
  507. autocoder/terminal/ui/toolbar.py +64 -0
  508. autocoder/terminal/utils/__init__.py +13 -0
  509. autocoder/terminal/utils/errors.py +18 -0
  510. autocoder/terminal/utils/paths.py +19 -0
  511. autocoder/terminal/utils/shell.py +43 -0
  512. autocoder/terminal_v3/__init__.py +10 -0
  513. autocoder/terminal_v3/app.py +201 -0
  514. autocoder/terminal_v3/handlers/__init__.py +5 -0
  515. autocoder/terminal_v3/handlers/command_handler.py +131 -0
  516. autocoder/terminal_v3/models/__init__.py +6 -0
  517. autocoder/terminal_v3/models/conversation_buffer.py +214 -0
  518. autocoder/terminal_v3/models/message.py +50 -0
  519. autocoder/terminal_v3/models/tool_display.py +247 -0
  520. autocoder/terminal_v3/ui/__init__.py +7 -0
  521. autocoder/terminal_v3/ui/keybindings.py +56 -0
  522. autocoder/terminal_v3/ui/layout.py +141 -0
  523. autocoder/terminal_v3/ui/styles.py +43 -0
  524. autocoder/tsproject/__init__.py +23 -23
  525. autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
  526. autocoder/utils/llms.py +88 -80
  527. autocoder/utils/math_utils.py +101 -0
  528. autocoder/utils/model_provider_selector.py +16 -4
  529. autocoder/utils/operate_config_api.py +33 -5
  530. autocoder/utils/thread_utils.py +2 -2
  531. autocoder/version.py +4 -2
  532. autocoder/workflow_agents/__init__.py +84 -0
  533. autocoder/workflow_agents/agent.py +143 -0
  534. autocoder/workflow_agents/exceptions.py +573 -0
  535. autocoder/workflow_agents/executor.py +489 -0
  536. autocoder/workflow_agents/loader.py +737 -0
  537. autocoder/workflow_agents/runner.py +267 -0
  538. autocoder/workflow_agents/types.py +172 -0
  539. autocoder/workflow_agents/utils.py +434 -0
  540. autocoder/workflow_agents/workflow_manager.py +211 -0
  541. auto_coder-1.0.0.dist-info/METADATA +0 -396
  542. auto_coder-1.0.0.dist-info/RECORD +0 -442
  543. auto_coder-1.0.0.dist-info/licenses/LICENSE +0 -201
  544. autocoder/auto_coder_server.py +0 -672
  545. autocoder/benchmark.py +0 -138
  546. autocoder/common/ac_style_command_parser/example.py +0 -7
  547. autocoder/common/cleaner.py +0 -31
  548. autocoder/common/command_completer_v2.py +0 -615
  549. autocoder/common/context_pruner.py +0 -477
  550. autocoder/common/conversation_pruner.py +0 -132
  551. autocoder/common/directory_cache/__init__.py +0 -1
  552. autocoder/common/directory_cache/cache.py +0 -192
  553. autocoder/common/directory_cache/test_cache.py +0 -190
  554. autocoder/common/file_checkpoint/examples.py +0 -217
  555. autocoder/common/llm_friendly_package_example.py +0 -138
  556. autocoder/common/llm_friendly_package_test.py +0 -63
  557. autocoder/common/pull_requests/test_module.py +0 -1
  558. autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
  559. autocoder/common/text.py +0 -30
  560. autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
  561. autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
  562. autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
  563. autocoder/common/v2/agent/agentic_tool_display.py +0 -183
  564. autocoder/plugins/dynamic_completion_example.py +0 -148
  565. autocoder/plugins/sample_plugin.py +0 -160
  566. autocoder/sdk/cli/__main__.py +0 -26
  567. autocoder/sdk/cli/completion_wrapper.py +0 -38
  568. autocoder/sdk/cli/install_completion.py +0 -301
  569. autocoder/sdk/models/messages.py +0 -209
  570. autocoder/sdk/session/__init__.py +0 -32
  571. autocoder/sdk/session/session.py +0 -106
  572. autocoder/sdk/session/session_manager.py +0 -56
  573. {auto_coder-1.0.0.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
  574. /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
@@ -0,0 +1,487 @@
1
+ """
2
+ Core Project Tracker Implementation
3
+
4
+ Uses AgenticEdit to perform intelligent project exploration and analysis.
5
+ """
6
+
7
+ import os
8
+ import time
9
+ import json
10
+ from typing import List, Dict, Any, Optional, Generator
11
+ from loguru import logger
12
+ from rich.console import Console
13
+
14
+ from autocoder.common import AutoCoderArgs
15
+ from autocoder.common.v2.agent.agentic_edit import AgenticEdit
16
+ from autocoder.common.v2.agent.agentic_edit_types import (
17
+ AgenticEditRequest,
18
+ AgenticEditConversationConfig,
19
+ ConversationAction
20
+ )
21
+
22
+ from autocoder.utils.llms import get_single_llm
23
+
24
+ from .types import (
25
+ ProjectTrackerRequest,
26
+ ProjectTrackerResponse,
27
+ ExplorationResult,
28
+ ExplorationMode,
29
+ ModuleInfo
30
+ )
31
+
32
+ class ProjectTracker:
33
+ """
34
+ Core project tracker that uses AgenticEdit to analyze and explore projects.
35
+
36
+ This class provides intelligent project exploration capabilities by leveraging
37
+ the AgenticEdit system to understand AC modules, project structure, and provide
38
+ insights for faster development workflows.
39
+ """
40
+
41
+ def __init__(self, args: AutoCoderArgs, llm=None):
42
+ """
43
+ Initialize the project tracker.
44
+
45
+ Args:
46
+ args: AutoCoder arguments configuration
47
+ llm: Language model instance (optional, will create if not provided)
48
+ """
49
+ self.args = args
50
+ if llm is None:
51
+ self.llm = get_single_llm(
52
+ args.code_model or args.model,
53
+ product_mode=args.product_mode
54
+ )
55
+ else:
56
+ self.llm = llm
57
+
58
+ # Initialize AgenticEdit for exploration
59
+ self.agentic_edit = None
60
+
61
+ def _create_exploration_prompt(self, request: ProjectTrackerRequest) -> str:
62
+ """
63
+ Create a comprehensive prompt for project exploration based on the request mode.
64
+
65
+ Args:
66
+ request: Project tracker request with exploration parameters
67
+
68
+ Returns:
69
+ Formatted prompt string for AgenticEdit
70
+ """
71
+ base_prompt = """
72
+ You are an expert project analyst tasked with exploring and understanding this project structure.
73
+ Your goal is to provide comprehensive insights that will help developers quickly understand the
74
+ project and make informed decisions about future modifications.
75
+
76
+ ## Primary Objectives:
77
+
78
+ 1. **AC Module Discovery**: Find and analyze all AC modules (directories with .ac.mod.md files)
79
+ 2. **Project Structure Analysis**: Understand the overall project organization
80
+ 3. **Dependency Mapping**: Identify relationships between modules and components
81
+ 4. **Key Insights**: Provide actionable insights for development efficiency
82
+ 5. **Recommendations**: Suggest areas for improvement or optimization
83
+
84
+ ## Analysis Instructions:
85
+
86
+ ### Step 1: AC Module Discovery
87
+ Use the `ac_mod_list` tool to find all AC modules in the project. For each AC module found:
88
+ - Use `ac_mod_read` to read the module documentation
89
+ - Extract key information: purpose, features, dependencies, APIs
90
+ - Note verification commands and testing approaches
91
+
92
+ ### Step 2: Project Structure Exploration
93
+ Use `list_files` and `read_file` tools to explore:
94
+ - Main project directories and their purposes
95
+ - Configuration files and their contents
96
+ - Key implementation files
97
+ - Documentation structure
98
+
99
+ ### Step 3: Intelligent Analysis
100
+ Analyze the discovered information to:
101
+ - Identify patterns in module organization
102
+ - Map dependencies between AC modules
103
+ - Understand the project's architectural approach
104
+ - Identify potential areas for improvement
105
+
106
+ ### Step 4: Generate Insights
107
+ Provide specific insights about:
108
+ - How AC modules work together
109
+ - Common patterns and conventions used
110
+ - Areas where new features could be added
111
+ - Potential optimization opportunities
112
+
113
+ ## Output Requirements:
114
+
115
+ Provide a comprehensive analysis that includes:
116
+ 1. **AC Modules Summary**: List of all AC modules with brief descriptions
117
+ 2. **Project Architecture**: High-level understanding of project structure
118
+ 3. **Dependency Graph**: Relationships between modules
119
+ 4. **Key Features**: Important capabilities and patterns
120
+ 5. **Development Recommendations**: Suggestions for efficient development
121
+ 6. **Quick Reference**: Essential information for rapid development
122
+
123
+ ## IMPORTANT: Generate Project Documentation File
124
+
125
+ After completing your analysis, you MUST use the `write_to_file` tool to create or update the file `.auto-coder/projects/AUTO-CODER.md` with a comprehensive project documentation that includes:
126
+
127
+ ### File Structure for .auto-coder/projects/AUTO-CODER.md:
128
+
129
+ ```markdown
130
+ # AutoCoder Project Documentation
131
+
132
+ *Generated on: [CURRENT_DATE]*
133
+
134
+ ## Project Overview
135
+
136
+ [Brief description of the AutoCoder project and its purpose]
137
+
138
+ ## Architecture Summary
139
+
140
+ [High-level architecture description based on your analysis]
141
+
142
+ ## AC Modules Overview
143
+
144
+ ### Core Modules
145
+ [List and describe the most important AC modules]
146
+
147
+ ### Support Modules
148
+ [List and describe supporting/utility AC modules]
149
+
150
+ ### Experimental/Development Modules
151
+ [List any experimental or development-focused modules]
152
+
153
+ ## Key Components and Patterns
154
+
155
+ [Describe the main architectural patterns and design principles used]
156
+
157
+ ## Development Workflow
158
+
159
+ [Describe how development typically works in this project]
160
+
161
+ ## Quick Start for New Developers
162
+
163
+ [Essential information for developers new to the project]
164
+
165
+ ## Module Dependencies
166
+
167
+ [Key dependency relationships between AC modules]
168
+
169
+ ## Recommended Development Practices
170
+
171
+ [Best practices derived from analyzing the codebase]
172
+
173
+ ## Areas for Improvement
174
+
175
+ [Suggestions for project enhancement]
176
+
177
+ ## Additional Resources
178
+
179
+ [Links to important documentation, tools, or references]
180
+ ```
181
+
182
+ Use the `write_to_file` tool with path `.auto-coder/projects/AUTO-CODER.md` and populate it with comprehensive, well-structured content based on your project analysis.
183
+
184
+ """
185
+
186
+ if request.mode == ExplorationMode.AC_MODULES_ONLY:
187
+ mode_specific = """
188
+ ## Focus Mode: AC MODULES ONLY
189
+
190
+ Focus specifically on AC modules:
191
+ - Prioritize AC module discovery and analysis
192
+ - Deep dive into module documentation and relationships
193
+ - Understand the AC module ecosystem
194
+ - Provide detailed insights about module patterns and best practices
195
+ """
196
+ elif request.mode == ExplorationMode.QUICK_OVERVIEW:
197
+ mode_specific = """
198
+ ## Focus Mode: QUICK OVERVIEW
199
+
200
+ Provide a rapid but comprehensive overview:
201
+ - Quick scan of AC modules (focus on top-level information)
202
+ - High-level project structure understanding
203
+ - Key architectural insights
204
+ - Essential information for getting started quickly
205
+ """
206
+ elif request.mode == ExplorationMode.TARGETED_SCAN:
207
+ target_info = f"Target paths: {request.target_paths}" if request.target_paths else ""
208
+ mode_specific = f"""
209
+ ## Focus Mode: TARGETED SCAN
210
+
211
+ Focus on specific areas of the project:
212
+ {target_info}
213
+ - Concentrate analysis on specified paths or patterns
214
+ - Provide detailed insights for targeted areas
215
+ - Connect targeted areas to broader project context
216
+ """
217
+ else: # FULL_SCAN
218
+ mode_specific = """
219
+ ## Focus Mode: FULL SCAN
220
+
221
+ Perform comprehensive project analysis:
222
+ - Complete AC module discovery and analysis
223
+ - Thorough project structure exploration
224
+ - Detailed dependency mapping
225
+ - Comprehensive insights and recommendations
226
+ """
227
+
228
+ custom_instructions = ""
229
+ if request.custom_prompt:
230
+ custom_instructions = f"""
231
+ ## Additional Instructions:
232
+ {request.custom_prompt}
233
+ """
234
+
235
+ return f"{base_prompt}\n{mode_specific}\n{custom_instructions}\n"
236
+
237
+ def explore_project(self, request: ProjectTrackerRequest) -> ProjectTrackerResponse:
238
+ """
239
+ Perform project exploration using AgenticEdit.
240
+
241
+ Args:
242
+ request: Project tracking request with exploration parameters
243
+
244
+ Returns:
245
+ ProjectTrackerResponse with exploration results
246
+ """
247
+ start_time = time.time()
248
+
249
+ try:
250
+ # Create conversation configuration
251
+ conversation_config = AgenticEditConversationConfig(
252
+ action=ConversationAction.NEW,
253
+ query=f"Project exploration - {request.mode.value}"
254
+ )
255
+
256
+ # Check LLM is available
257
+ if self.llm is None:
258
+ raise ValueError("LLM is not available for project exploration")
259
+
260
+ # Initialize AgenticEdit
261
+ self.agentic_edit = AgenticEdit(
262
+ llm=self.llm,
263
+ args=self.args,
264
+ conversation_config=conversation_config
265
+ )
266
+
267
+ # Create exploration prompt
268
+ exploration_prompt = self._create_exploration_prompt(request)
269
+
270
+ # Create AgenticEdit request
271
+ agentic_request = AgenticEditRequest(user_input=exploration_prompt)
272
+
273
+ # Execute exploration
274
+ console = Console()
275
+ console.print(f"[bold cyan]Starting project exploration with mode: {request.mode}[/]")
276
+
277
+ # Process events with simple printing and collect them
278
+ exploration_events = []
279
+ event_stream = self.agentic_edit.analyze(agentic_request)
280
+
281
+ for event in event_stream:
282
+ # Collect all events for later processing
283
+ exploration_events.append(event)
284
+
285
+ # Simple printing based on event type (simplified version of terminal_runner)
286
+ if hasattr(event, '__class__'):
287
+ event_name = event.__class__.__name__
288
+
289
+ if 'ConversationId' in event_name:
290
+ conversation_id = getattr(event, 'conversation_id', 'unknown')
291
+ console.print(f"[dim]Conversation ID: {conversation_id}[/dim]")
292
+ elif 'TokenUsage' in event_name:
293
+ console.print("[dim]💰 Token usage recorded[/dim]")
294
+ elif 'LLMThinking' in event_name:
295
+ # Show thinking indicator
296
+ console.print("[grey50]🤔 Thinking...[/grey50]", end="")
297
+ elif 'LLMOutput' in event_name:
298
+ # Show brief output indicator
299
+ console.print("[dim]✏️ Generating response...[/dim]")
300
+ elif 'ToolCall' in event_name:
301
+ tool = getattr(event, 'tool', {})
302
+ if hasattr(tool, '__class__'):
303
+ tool_name = tool.__class__.__name__
304
+ console.print(f"[blue]🔧 Tool: {tool_name}[/blue]")
305
+ else:
306
+ console.print("[blue]🔧 Tool called[/blue]")
307
+ elif 'ToolResult' in event_name:
308
+ result = getattr(event, 'result', None)
309
+ if result and hasattr(result, 'success'):
310
+ if result.success:
311
+ tool_name = getattr(event, 'tool_name', 'Unknown')
312
+ console.print(f"[green]✅ {tool_name}: Success[/green]")
313
+ else:
314
+ tool_name = getattr(event, 'tool_name', 'Unknown')
315
+ console.print(f"[red]❌ {tool_name}: Failed[/red]")
316
+ else:
317
+ console.print("[dim]📋 Tool result received[/dim]")
318
+ elif 'Completion' in event_name:
319
+ console.print("[bold green]🏁 Task completion[/bold green]")
320
+ elif 'Error' in event_name:
321
+ error_msg = getattr(event, 'message', 'Unknown error')
322
+ console.print(f"[bold red]🔥 Error: {error_msg}[/bold red]")
323
+ else:
324
+ console.print(f"[dim]📝 Event: {event_name}[/dim]")
325
+
326
+ console.print("[bold cyan]Project exploration completed[/]")
327
+
328
+ # Process the results
329
+ exploration_result = self._process_exploration_results(
330
+ exploration_events, request.mode, start_time
331
+ )
332
+
333
+ execution_time = time.time() - start_time
334
+
335
+ # Get conversation ID for future reference
336
+ conversation_id = self.agentic_edit.conversation_manager.get_current_conversation_id()
337
+
338
+ return ProjectTrackerResponse(
339
+ success=True,
340
+ exploration_result=exploration_result,
341
+ conversation_id=conversation_id,
342
+ execution_time=execution_time
343
+ )
344
+
345
+ except Exception as e:
346
+ execution_time = time.time() - start_time
347
+ logger.error(f"Project exploration failed: {str(e)}")
348
+
349
+ return ProjectTrackerResponse(
350
+ success=False,
351
+ error_message=str(e),
352
+ execution_time=execution_time
353
+ )
354
+
355
+ def _process_exploration_results(
356
+ self,
357
+ events: List[Any],
358
+ mode: ExplorationMode,
359
+ start_time: float
360
+ ) -> ExplorationResult:
361
+ """
362
+ Process exploration events and extract meaningful results.
363
+
364
+ Args:
365
+ events: List of events from AgenticEdit exploration
366
+ mode: Exploration mode used
367
+ start_time: Start time of exploration
368
+
369
+ Returns:
370
+ ExplorationResult with processed information
371
+ """
372
+ modules_found = []
373
+ project_structure = {}
374
+ key_insights = []
375
+ recommendations = []
376
+ analysis_summary = ""
377
+
378
+ # Process events to extract information
379
+ for event in events:
380
+ try:
381
+ if hasattr(event, 'type') and hasattr(event, 'content'):
382
+ # Process different event types
383
+ if 'completion' in str(event.type).lower():
384
+ # Extract final analysis from completion events
385
+ content = getattr(event, 'content', '')
386
+ if content:
387
+ analysis_summary += content + "\n"
388
+
389
+ elif 'tool_result' in str(event.type).lower():
390
+ # Process tool results for structured data
391
+ self._extract_tool_results(event, modules_found, project_structure)
392
+
393
+ except Exception as e:
394
+ logger.warning(f"Failed to process event: {e}")
395
+ continue
396
+
397
+ # Extract insights from analysis summary
398
+ if analysis_summary:
399
+ key_insights, recommendations = self._extract_insights_from_summary(analysis_summary)
400
+
401
+ exploration_time = time.time() - start_time
402
+
403
+ return ExplorationResult(
404
+ success=True,
405
+ mode=mode,
406
+ modules_found=modules_found,
407
+ project_structure=project_structure,
408
+ key_insights=key_insights,
409
+ recommendations=recommendations,
410
+ analysis_summary=analysis_summary,
411
+ exploration_time=exploration_time
412
+ )
413
+
414
+ def _extract_tool_results(self, event: Any, modules_found: List[ModuleInfo], project_structure: Dict[str, Any]):
415
+ """Extract information from tool result events."""
416
+ try:
417
+ # This is a simplified extraction - in a real implementation,
418
+ # you would parse the specific tool results based on their types
419
+ content = getattr(event, 'content', '')
420
+
421
+ # Look for AC module information
422
+ if '.ac.mod.md' in content:
423
+ # Extract module info (simplified)
424
+ # In practice, you'd parse the actual tool results
425
+ pass
426
+
427
+ except Exception as e:
428
+ logger.debug(f"Failed to extract tool results: {e}")
429
+
430
+ def _extract_insights_from_summary(self, summary: str) -> tuple[List[str], List[str]]:
431
+ """Extract insights and recommendations from analysis summary."""
432
+ insights = []
433
+ recommendations = []
434
+
435
+ # Simple extraction based on common patterns
436
+ lines = summary.split('\n')
437
+ current_section = None
438
+
439
+ for line in lines:
440
+ line = line.strip()
441
+ if not line:
442
+ continue
443
+
444
+ # Look for section headers
445
+ if 'insight' in line.lower() or 'key point' in line.lower():
446
+ current_section = 'insights'
447
+ elif 'recommend' in line.lower() or 'suggest' in line.lower():
448
+ current_section = 'recommendations'
449
+ elif line.startswith('- ') or line.startswith('* '):
450
+ # List item
451
+ item = line[2:].strip()
452
+ if current_section == 'insights' and item:
453
+ insights.append(item)
454
+ elif current_section == 'recommendations' and item:
455
+ recommendations.append(item)
456
+
457
+ return insights, recommendations
458
+
459
+ def get_project_overview(self) -> Dict[str, Any]:
460
+ """
461
+ Get a quick project overview without full exploration.
462
+
463
+ Returns:
464
+ Dictionary with basic project information
465
+ """
466
+ try:
467
+ # Quick scan for AC modules
468
+ ac_modules = []
469
+ source_dir = self.args.source_dir
470
+ if source_dir is None:
471
+ return {"error": "source_dir is not configured"}
472
+
473
+ for root, dirs, files in os.walk(source_dir):
474
+ if '.ac.mod.md' in files:
475
+ relative_path = os.path.relpath(root, source_dir)
476
+ ac_modules.append(relative_path)
477
+
478
+ return {
479
+ "source_dir": self.args.source_dir,
480
+ "ac_modules_found": len(ac_modules),
481
+ "ac_module_paths": ac_modules,
482
+ "project_type": getattr(self.args, 'project_type', 'unknown')
483
+ }
484
+
485
+ except Exception as e:
486
+ logger.error(f"Failed to get project overview: {e}")
487
+ return {"error": str(e)}
@@ -0,0 +1,53 @@
1
+ """
2
+ Type definitions for Project Tracker module
3
+ """
4
+
5
+ from pydantic import BaseModel
6
+ from typing import List, Dict, Any, Optional
7
+ from enum import Enum
8
+
9
+ class ExplorationMode(str, Enum):
10
+ """Exploration modes for project tracking"""
11
+ FULL_SCAN = "full_scan" # Complete project scan
12
+ AC_MODULES_ONLY = "ac_modules_only" # Only scan AC modules
13
+ TARGETED_SCAN = "targeted_scan" # Target specific areas
14
+ QUICK_OVERVIEW = "quick_overview" # Quick project overview
15
+
16
+ class ModuleInfo(BaseModel):
17
+ """Information about an AC module"""
18
+ path: str
19
+ name: str
20
+ description: str
21
+ dependencies: List[str] = []
22
+ key_features: List[str] = []
23
+ verification_commands: List[str] = []
24
+ last_analyzed: Optional[str] = None
25
+
26
+ class ExplorationResult(BaseModel):
27
+ """Result of project exploration"""
28
+ success: bool
29
+ mode: ExplorationMode
30
+ modules_found: List[ModuleInfo]
31
+ project_structure: Dict[str, Any]
32
+ key_insights: List[str]
33
+ recommendations: List[str]
34
+ analysis_summary: str
35
+ exploration_time: float
36
+ error_message: Optional[str] = None
37
+
38
+ class ProjectTrackerRequest(BaseModel):
39
+ """Request for project tracking operation"""
40
+ mode: ExplorationMode = ExplorationMode.FULL_SCAN
41
+ target_paths: Optional[List[str]] = None
42
+ include_patterns: Optional[List[str]] = None
43
+ exclude_patterns: Optional[List[str]] = None
44
+ max_depth: Optional[int] = None
45
+ custom_prompt: Optional[str] = None
46
+
47
+ class ProjectTrackerResponse(BaseModel):
48
+ """Response from project tracking operation"""
49
+ success: bool
50
+ exploration_result: Optional[ExplorationResult] = None
51
+ conversation_id: Optional[str] = None
52
+ error_message: Optional[str] = None
53
+ execution_time: float = 0.0
@@ -0,0 +1,67 @@
1
+ """
2
+ Pruner module for AutoCoder.
3
+
4
+ This module provides various conversation and content pruning capabilities including:
5
+ - Context pruning for file contents
6
+ - Conversation pruning for chat history
7
+ - Agentic conversation pruning for tool outputs
8
+ - Range-based conversation pruning with pair preservation
9
+ """
10
+
11
+ # Core pruning classes
12
+ from .context_pruner import PruneContext
13
+ from .conversation_pruner import ConversationPruner
14
+ from .agentic_conversation_pruner import AgenticConversationPruner
15
+ from .tool_content_detector import ToolContentDetector
16
+
17
+ # Message IDs-based pruning (replacing range-based pruning)
18
+ from .conversation_message_ids_manager import (
19
+ ConversationMessageIds,
20
+ ConversationMessageIdsManager,
21
+ get_conversation_message_ids_manager
22
+ )
23
+ from .conversation_message_ids_api import (
24
+ ConversationMessageIdsAPI,
25
+ MessageIdsValidationResult,
26
+ MessageIdsParseResult,
27
+ get_conversation_message_ids_api
28
+ )
29
+ from .conversation_message_ids_pruner import (
30
+ ConversationMessageIdsPruner,
31
+ MessageIdsPruningResult,
32
+ MessagePair
33
+ )
34
+ from .conversation_normalizer import (
35
+ ConversationNormalizer,
36
+ NormalizationStrategy,
37
+ NormalizationResult
38
+ )
39
+
40
+ __all__ = [
41
+ # Core pruning
42
+ "PruneContext",
43
+ "ConversationPruner",
44
+ "AgenticConversationPruner",
45
+ "ToolContentDetector",
46
+
47
+ # Message IDs-based pruning - Manager layer
48
+ "ConversationMessageIds",
49
+ "ConversationMessageIdsManager",
50
+ "get_conversation_message_ids_manager",
51
+
52
+ # Message IDs-based pruning - API layer
53
+ "ConversationMessageIdsAPI",
54
+ "MessageIdsValidationResult",
55
+ "MessageIdsParseResult",
56
+ "get_conversation_message_ids_api",
57
+
58
+ # Message IDs-based pruning - Pruner layer
59
+ "ConversationMessageIdsPruner",
60
+ "MessageIdsPruningResult",
61
+ "MessagePair",
62
+
63
+ # Conversation normalization
64
+ "ConversationNormalizer",
65
+ "NormalizationStrategy",
66
+ "NormalizationResult"
67
+ ]