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,581 @@
1
+ """命令行参数解析模块"""
2
+
3
+ import argparse
4
+ import locale
5
+ import importlib.resources as resources
6
+ from autocoder.lang import lang_desc
7
+ from autocoder.version import __version__
8
+
9
+
10
+ def get_tokenizer_path():
11
+ """获取默认的 tokenizer 路径"""
12
+ try:
13
+ tokenizer_path = str(resources.files("autocoder") / "data" / "tokenizer.json")
14
+ except FileNotFoundError:
15
+ tokenizer_path = None
16
+ return tokenizer_path
17
+
18
+
19
+ def create_parser():
20
+ """创建并配置参数解析器"""
21
+ system_lang, _ = locale.getdefaultlocale()
22
+ lang = "zh" if system_lang and system_lang.startswith("zh") else "en"
23
+ desc = lang_desc[lang]
24
+ tokenizer_path = get_tokenizer_path()
25
+
26
+ parser = argparse.ArgumentParser(description="Auto Coder RAG Server")
27
+ parser.add_argument(
28
+ "--model_file", default="", help="Path to model configuration file"
29
+ )
30
+ subparsers = parser.add_subparsers(dest="command", help="Available commands")
31
+
32
+ # Build hybrid index command
33
+ _add_build_index_parser(subparsers, desc, tokenizer_path)
34
+
35
+ # Serve command
36
+ _add_serve_parser(subparsers, desc, tokenizer_path)
37
+
38
+ # Run command (直接运行RAG,不启动服务器)
39
+ _add_run_parser(subparsers, desc, tokenizer_path)
40
+
41
+ # Benchmark command
42
+ _add_benchmark_parser(subparsers)
43
+
44
+ # Tools command
45
+ _add_tools_parser(subparsers, tokenizer_path)
46
+
47
+ return parser
48
+
49
+
50
+ def _add_build_index_parser(subparsers, desc, tokenizer_path):
51
+ """添加构建索引命令的参数解析器"""
52
+ build_index_parser = subparsers.add_parser(
53
+ "build_hybrid_index", help="Build hybrid index for RAG"
54
+ )
55
+
56
+ build_index_parser.add_argument(
57
+ "--rag_storage_type",
58
+ type=str,
59
+ default="duckdb",
60
+ help="The storage type of the RAG, duckdb or byzer-storage",
61
+ )
62
+
63
+ build_index_parser.add_argument(
64
+ "--rag_index_build_workers",
65
+ type=int,
66
+ default=5,
67
+ help="The number of workers to build the RAG index",
68
+ )
69
+
70
+ build_index_parser.add_argument(
71
+ "--quick", action="store_true", help="Skip system initialization"
72
+ )
73
+ build_index_parser.add_argument("--file", default="", help=desc["file"])
74
+ build_index_parser.add_argument("--model", default="v3_chat", help=desc["model"])
75
+ build_index_parser.add_argument(
76
+ "--model_file", default="", help="Path to model configuration file"
77
+ )
78
+
79
+ build_index_parser.add_argument("--on_ray", action="store_true", help="Run on Ray")
80
+
81
+ build_index_parser.add_argument(
82
+ "--index_model", default="", help=desc["index_model"]
83
+ )
84
+ build_index_parser.add_argument("--emb_model", default="", help=desc["emb_model"])
85
+ build_index_parser.add_argument(
86
+ "--ray_address", default="auto", help=desc["ray_address"]
87
+ )
88
+ build_index_parser.add_argument(
89
+ "--required_exts", default="", help=desc["doc_build_parse_required_exts"]
90
+ )
91
+ build_index_parser.add_argument(
92
+ "--source_dir", default=".", help="Source directory path"
93
+ )
94
+ build_index_parser.add_argument(
95
+ "--tokenizer_path", default=tokenizer_path, help="Path to tokenizer file"
96
+ )
97
+ build_index_parser.add_argument(
98
+ "--doc_dir", default="", help="Document directory path"
99
+ )
100
+ build_index_parser.add_argument(
101
+ "--enable_hybrid_index", action="store_true", help="Enable hybrid index"
102
+ )
103
+
104
+
105
+ def _add_serve_parser(subparsers, desc, tokenizer_path):
106
+ """添加服务命令的参数解析器"""
107
+ serve_parser = subparsers.add_parser("serve", help="Start the RAG server")
108
+ serve_parser.add_argument(
109
+ "--quick", action="store_true", help="Skip system initialization"
110
+ )
111
+ serve_parser.add_argument("--file", default="", help=desc["file"])
112
+ serve_parser.add_argument("--model", default="v3_chat", help=desc["model"])
113
+ serve_parser.add_argument(
114
+ "--model_file", default="", help="Path to model configuration file"
115
+ )
116
+ serve_parser.add_argument("--index_model", default="", help=desc["index_model"])
117
+ serve_parser.add_argument("--ray_address", default="auto", help=desc["ray_address"])
118
+ serve_parser.add_argument(
119
+ "--index_filter_workers",
120
+ type=int,
121
+ default=100,
122
+ help=desc["index_filter_workers"],
123
+ )
124
+ serve_parser.add_argument(
125
+ "--index_filter_file_num",
126
+ type=int,
127
+ default=3,
128
+ help=desc["index_filter_file_num"],
129
+ )
130
+ serve_parser.add_argument(
131
+ "--rag_context_window_limit",
132
+ type=int,
133
+ default=56000,
134
+ help="The input context window limit for RAG",
135
+ )
136
+ serve_parser.add_argument(
137
+ "--full_text_ratio",
138
+ type=float,
139
+ default=0.7,
140
+ help="The ratio of full text area in the input context window (0.0 to 1.0)",
141
+ )
142
+ serve_parser.add_argument(
143
+ "--segment_ratio",
144
+ type=float,
145
+ default=0.2,
146
+ help="The ratio of segment area in the input context window (0.0 to 1.0)",
147
+ )
148
+ serve_parser.add_argument(
149
+ "--required_exts", default="", help=desc["doc_build_parse_required_exts"]
150
+ )
151
+ serve_parser.add_argument(
152
+ "--rag_doc_filter_relevance", type=int, default=5, help=""
153
+ )
154
+ serve_parser.add_argument("--source_dir", default=".", help="")
155
+ serve_parser.add_argument("--host", default="", help="")
156
+ serve_parser.add_argument("--port", type=int, default=8000, help="")
157
+ serve_parser.add_argument("--name", default="", help="RAG服务的名称(可选)")
158
+ serve_parser.add_argument("--workers", type=int, default=4, help="")
159
+ serve_parser.add_argument("--uvicorn_log_level", default="info", help="")
160
+ serve_parser.add_argument("--allow_credentials", action="store_true", help="")
161
+ serve_parser.add_argument("--allowed_origins", default=["*"], help="")
162
+ serve_parser.add_argument("--allowed_methods", default=["*"], help="")
163
+ serve_parser.add_argument("--allowed_headers", default=["*"], help="")
164
+ serve_parser.add_argument("--api_key", default="", help="")
165
+ serve_parser.add_argument("--served_model_name", default="", help="")
166
+ serve_parser.add_argument("--prompt_template", default="", help="")
167
+ serve_parser.add_argument("--ssl_keyfile", default="", help="")
168
+ serve_parser.add_argument("--ssl_certfile", default="", help="")
169
+ serve_parser.add_argument("--response_role", default="assistant", help="")
170
+ serve_parser.add_argument(
171
+ "--doc_dir",
172
+ default="",
173
+ help="Document directory path, also used as the root directory for serving static files",
174
+ )
175
+ serve_parser.add_argument(
176
+ "--enable_local_image_host",
177
+ action="store_true",
178
+ help=" enable local image host for local Chat app",
179
+ )
180
+ serve_parser.add_argument(
181
+ "--agentic", action="store_true", help="使用 AgenticRAG 而不是 LongContextRAG"
182
+ )
183
+ serve_parser.add_argument("--tokenizer_path", default=tokenizer_path, help="")
184
+ serve_parser.add_argument(
185
+ "--collections", default="", help="Collection name for indexing"
186
+ )
187
+ serve_parser.add_argument(
188
+ "--base_dir",
189
+ default="",
190
+ help="Path where the processed text embeddings were stored",
191
+ )
192
+ serve_parser.add_argument(
193
+ "--monitor_mode",
194
+ action="store_true",
195
+ help="Monitor mode for the doc update",
196
+ )
197
+ serve_parser.add_argument(
198
+ "--max_static_path_length",
199
+ type=int,
200
+ default=3000,
201
+ help="Maximum length allowed for static file paths (larger value to better support Chinese characters)",
202
+ )
203
+ serve_parser.add_argument(
204
+ "--enable_nginx_x_accel",
205
+ action="store_true",
206
+ help="Enable Nginx X-Accel-Redirect for static file serving when behind Nginx",
207
+ )
208
+ serve_parser.add_argument(
209
+ "--disable_auto_window",
210
+ action="store_true",
211
+ help="Disable automatic window adaptation for documents",
212
+ )
213
+ serve_parser.add_argument(
214
+ "--disable_segment_reorder",
215
+ action="store_true",
216
+ help="Disable reordering of document segments after retrieval",
217
+ )
218
+
219
+ serve_parser.add_argument(
220
+ "--disable_inference_enhance",
221
+ action="store_true",
222
+ help="Disable enhanced inference mode",
223
+ )
224
+ serve_parser.add_argument(
225
+ "--inference_deep_thought",
226
+ action="store_true",
227
+ help="Enable deep thought in inference mode",
228
+ )
229
+ serve_parser.add_argument(
230
+ "--inference_slow_without_deep_thought",
231
+ action="store_true",
232
+ help="Enable slow inference without deep thought",
233
+ )
234
+ serve_parser.add_argument(
235
+ "--inference_compute_precision",
236
+ type=int,
237
+ default=64,
238
+ help="The precision of the inference compute",
239
+ )
240
+
241
+ serve_parser.add_argument(
242
+ "--enable_hybrid_index",
243
+ action="store_true",
244
+ help="Enable hybrid index",
245
+ )
246
+
247
+ serve_parser.add_argument(
248
+ "--rag_storage_type",
249
+ type=str,
250
+ default="duckdb",
251
+ help="The storage type of the RAG, duckdb or byzer-storage",
252
+ )
253
+
254
+ serve_parser.add_argument(
255
+ "--hybrid_index_max_output_tokens",
256
+ type=int,
257
+ default=1000000,
258
+ help="The maximum number of tokens in the output. This is only used when enable_hybrid_index is true.",
259
+ )
260
+
261
+ serve_parser.add_argument(
262
+ "--without_contexts",
263
+ action="store_true",
264
+ help="Whether to return responses without contexts. only works when pro plugin is installed",
265
+ )
266
+
267
+ serve_parser.add_argument(
268
+ "--data_cells_max_num",
269
+ type=int,
270
+ default=2000,
271
+ help="Maximum number of data cells to process",
272
+ )
273
+
274
+ serve_parser.add_argument(
275
+ "--product_mode",
276
+ type=str,
277
+ default="pro",
278
+ help="The mode of the auto-coder.rag, lite/pro default is pro",
279
+ )
280
+ serve_parser.add_argument(
281
+ "--lite",
282
+ action="store_true",
283
+ help="Run in lite mode (equivalent to --product_mode=lite)",
284
+ )
285
+ serve_parser.add_argument(
286
+ "--pro",
287
+ action="store_true",
288
+ help="Run in pro mode (equivalent to --product_mode=pro)",
289
+ )
290
+
291
+ serve_parser.add_argument(
292
+ "--recall_model",
293
+ default="",
294
+ help="The model used for recall documents",
295
+ )
296
+
297
+ serve_parser.add_argument(
298
+ "--chunk_model",
299
+ default="",
300
+ help="The model used for chunk documents",
301
+ )
302
+
303
+ serve_parser.add_argument(
304
+ "--qa_model",
305
+ default="",
306
+ help="The model used for question answering",
307
+ )
308
+
309
+ serve_parser.add_argument(
310
+ "--emb_model",
311
+ default="",
312
+ help="The model used for embedding documents",
313
+ )
314
+
315
+ serve_parser.add_argument(
316
+ "--agentic_model",
317
+ default="",
318
+ help="The model used for agentic operations",
319
+ )
320
+
321
+ serve_parser.add_argument(
322
+ "--context_prune_model",
323
+ default="",
324
+ help="The model used for context pruning",
325
+ )
326
+
327
+ serve_parser.add_argument(
328
+ "--firecrawl_api_key",
329
+ default="",
330
+ help="Firecrawl API key for web search and crawl functionality",
331
+ )
332
+ serve_parser.add_argument(
333
+ "--metaso_api_key",
334
+ default="",
335
+ help="Metaso API key for web search and crawl functionality",
336
+ )
337
+ serve_parser.add_argument(
338
+ "--bochaai_api_key",
339
+ default="",
340
+ help="BochaAI API key for web search and crawl functionality",
341
+ )
342
+
343
+
344
+ def _add_run_parser(subparsers, desc, tokenizer_path):
345
+ """添加 run 命令的参数解析器
346
+
347
+ run 命令用于直接运行 RAG 查询,不启动服务器。
348
+ 支持从标准输入读取 prompt,例如: echo "问题" | auto-coder.rag run
349
+ """
350
+ run_parser = subparsers.add_parser(
351
+ "run", help="Run RAG query directly without starting a server"
352
+ )
353
+
354
+ # 基本参数
355
+ run_parser.add_argument("--model", default="v3_chat", help=desc["model"])
356
+ run_parser.add_argument(
357
+ "--model_file", default="", help="Path to model configuration file"
358
+ )
359
+ run_parser.add_argument("--doc_dir", required=True, help="Document directory path")
360
+ run_parser.add_argument(
361
+ "--query", default="", help="Query text (if not provided, read from stdin)"
362
+ )
363
+
364
+ # RAG 配置参数
365
+ run_parser.add_argument(
366
+ "--agentic", action="store_true", help="使用 AgenticRAG 而不是 LongContextRAG"
367
+ )
368
+ run_parser.add_argument(
369
+ "--rag_context_window_limit",
370
+ type=int,
371
+ default=56000,
372
+ help="The input context window limit for RAG",
373
+ )
374
+ run_parser.add_argument(
375
+ "--full_text_ratio",
376
+ type=float,
377
+ default=0.7,
378
+ help="The ratio of full text area in the input context window (0.0 to 1.0)",
379
+ )
380
+ run_parser.add_argument(
381
+ "--segment_ratio",
382
+ type=float,
383
+ default=0.2,
384
+ help="The ratio of segment area in the input context window (0.0 to 1.0)",
385
+ )
386
+ run_parser.add_argument(
387
+ "--rag_doc_filter_relevance",
388
+ type=int,
389
+ default=5,
390
+ help="Document relevance threshold",
391
+ )
392
+ run_parser.add_argument(
393
+ "--required_exts", default="", help=desc["doc_build_parse_required_exts"]
394
+ )
395
+
396
+ # 模型配置
397
+ run_parser.add_argument(
398
+ "--tokenizer_path", default=tokenizer_path, help="Path to tokenizer file"
399
+ )
400
+ run_parser.add_argument(
401
+ "--recall_model", default="", help="The model used for recall documents"
402
+ )
403
+ run_parser.add_argument(
404
+ "--chunk_model", default="", help="The model used for chunk documents"
405
+ )
406
+ run_parser.add_argument(
407
+ "--qa_model", default="", help="The model used for question answering"
408
+ )
409
+ run_parser.add_argument(
410
+ "--emb_model", default="", help="The model used for embedding documents"
411
+ )
412
+ run_parser.add_argument(
413
+ "--agentic_model", default="", help="The model used for agentic operations"
414
+ )
415
+ run_parser.add_argument(
416
+ "--context_prune_model", default="", help="The model used for context pruning"
417
+ )
418
+
419
+ # 模式选择
420
+ run_parser.add_argument(
421
+ "--product_mode",
422
+ type=str,
423
+ default="lite",
424
+ help="The mode of the auto-coder.rag, lite/pro default is lite for run command",
425
+ )
426
+ run_parser.add_argument(
427
+ "--lite",
428
+ action="store_true",
429
+ help="Run in lite mode (equivalent to --product_mode=lite)",
430
+ )
431
+ run_parser.add_argument(
432
+ "--pro",
433
+ action="store_true",
434
+ help="Run in pro mode (equivalent to --product_mode=pro)",
435
+ )
436
+
437
+ # 其他参数
438
+ run_parser.add_argument("--ray_address", default="auto", help=desc["ray_address"])
439
+ run_parser.add_argument(
440
+ "--enable_hybrid_index",
441
+ action="store_true",
442
+ help="Enable hybrid index",
443
+ )
444
+ run_parser.add_argument(
445
+ "--disable_auto_window",
446
+ action="store_true",
447
+ help="Disable automatic window adaptation for documents",
448
+ )
449
+ run_parser.add_argument(
450
+ "--disable_segment_reorder",
451
+ action="store_true",
452
+ help="Disable reordering of document segments after retrieval",
453
+ )
454
+ run_parser.add_argument(
455
+ "--output_format",
456
+ choices=["text", "json", "stream-json"],
457
+ default="text",
458
+ help="Output format: text (only answer), json (with metadata), or stream-json (streaming json output)",
459
+ )
460
+
461
+
462
+ def _add_benchmark_parser(subparsers):
463
+ """添加基准测试命令的参数解析器"""
464
+ benchmark_parser = subparsers.add_parser(
465
+ "benchmark", help="Benchmark LLM client performance"
466
+ )
467
+ benchmark_parser.add_argument(
468
+ "--model", default="v3_chat", help="Model to benchmark"
469
+ )
470
+ benchmark_parser.add_argument(
471
+ "--model_file", default="", help="Path to model configuration file"
472
+ )
473
+ benchmark_parser.add_argument(
474
+ "--parallel", type=int, default=10, help="Number of parallel requests"
475
+ )
476
+ benchmark_parser.add_argument(
477
+ "--rounds", type=int, default=1, help="Number of rounds to run"
478
+ )
479
+ benchmark_parser.add_argument(
480
+ "--type",
481
+ choices=["openai", "byzerllm"],
482
+ default="byzerllm",
483
+ help="Client type to benchmark",
484
+ )
485
+ benchmark_parser.add_argument(
486
+ "--api_key", default="", help="OpenAI API key for OpenAI client"
487
+ )
488
+ benchmark_parser.add_argument(
489
+ "--base_url", default="", help="Base URL for OpenAI client"
490
+ )
491
+ benchmark_parser.add_argument(
492
+ "--query", default="Hello, how are you?", help="Query to use for benchmarking"
493
+ )
494
+
495
+
496
+ def _add_tools_parser(subparsers, tokenizer_path):
497
+ """添加工具命令的参数解析器"""
498
+ tools_parser = subparsers.add_parser("tools", help="Various tools")
499
+ tools_subparsers = tools_parser.add_subparsers(dest="tool", help="Available tools")
500
+ tools_parser.add_argument(
501
+ "--product_mode",
502
+ type=str,
503
+ default="pro",
504
+ help="The mode of the auto-coder.rag, lite/pro default is pro",
505
+ )
506
+ tools_parser.add_argument(
507
+ "--lite",
508
+ action="store_true",
509
+ help="Run in lite mode (equivalent to --product_mode=lite)",
510
+ )
511
+ tools_parser.add_argument(
512
+ "--pro",
513
+ action="store_true",
514
+ help="Run in pro mode (equivalent to --product_mode=pro)",
515
+ )
516
+
517
+ tools_parser.add_argument(
518
+ "--model_file", default="", help="Path to model configuration file"
519
+ )
520
+ # Count tool
521
+ count_parser = tools_subparsers.add_parser("count", help="Count tokens in a file")
522
+
523
+ # Recall validation tool
524
+ recall_parser = tools_subparsers.add_parser(
525
+ "recall", help="Validate recall model performance"
526
+ )
527
+ recall_parser.add_argument(
528
+ "--model", required=True, help="Model to use for recall validation"
529
+ )
530
+ recall_parser.add_argument(
531
+ "--content", default=None, help="Content to validate against"
532
+ )
533
+ recall_parser.add_argument(
534
+ "--query", default=None, help="Query to use for validation"
535
+ )
536
+
537
+ # Add chunk model validation tool
538
+ chunk_parser = tools_subparsers.add_parser(
539
+ "chunk", help="Validate chunk model performance"
540
+ )
541
+ chunk_parser.add_argument(
542
+ "--model", required=True, help="Model to use for chunk validation"
543
+ )
544
+ chunk_parser.add_argument(
545
+ "--content", default=None, help="Content to validate against"
546
+ )
547
+ chunk_parser.add_argument(
548
+ "--query", default=None, help="Query to use for validation"
549
+ )
550
+ count_parser.add_argument(
551
+ "--tokenizer_path",
552
+ default=tokenizer_path,
553
+ help="Path to the tokenizer",
554
+ )
555
+ count_parser.add_argument(
556
+ "--file", required=True, help="Path to the file to count tokens"
557
+ )
558
+
559
+
560
+ def parse_arguments(input_args=None):
561
+ """解析命令行参数
562
+
563
+ Returns:
564
+ tuple: (args, parser, subparsers_dict) 其中 subparsers_dict 包含各个子命令的 parser
565
+ """
566
+ parser = create_parser()
567
+ args = parser.parse_args(input_args)
568
+
569
+ # 重新获取 subparsers 以便访问各个子命令的 parser
570
+ # 这是为了支持 merge_args_with_config 需要访问特定子parser的默认值
571
+ subparsers_actions = [
572
+ action
573
+ for action in parser._actions
574
+ if isinstance(action, argparse._SubParsersAction)
575
+ ]
576
+
577
+ subparsers_dict = {}
578
+ if subparsers_actions:
579
+ subparsers_dict = subparsers_actions[0].choices
580
+
581
+ return args, parser, subparsers_dict
@@ -0,0 +1,61 @@
1
+ """引导模块 - RAG 系统的主入口"""
2
+
3
+ import platform
4
+ from autocoder.rag.terminal.args import parse_arguments
5
+ from autocoder.rag.terminal.init import initialize_system
6
+ from autocoder.rag.terminal.utils import print_banner
7
+ from autocoder.rag.terminal.command_handlers import (
8
+ handle_benchmark_command,
9
+ handle_serve_command,
10
+ handle_build_hybrid_index_command,
11
+ handle_tools_command,
12
+ handle_run_command,
13
+ )
14
+ import importlib.resources as resources
15
+
16
+ def load_tokenizer():
17
+ from autocoder.rag.variable_holder import VariableHolder
18
+ from tokenizers import Tokenizer
19
+
20
+ try:
21
+ tokenizer_path = str(resources.files("autocoder") / "data" / "tokenizer.json")
22
+ VariableHolder.TOKENIZER_PATH = tokenizer_path
23
+ VariableHolder.TOKENIZER_MODEL = Tokenizer.from_file(tokenizer_path)
24
+ except FileNotFoundError:
25
+ tokenizer_path = None
26
+
27
+
28
+ if platform.system() == "Windows":
29
+ from colorama import init
30
+
31
+ init()
32
+
33
+
34
+ def run_cli(input_args=None):
35
+ """CLI 入口函数"""
36
+ # 打印启动横幅
37
+ load_tokenizer()
38
+
39
+ # 解析参数
40
+ args, parser, subparsers = parse_arguments(input_args)
41
+
42
+ # 根据命令执行对应的处理逻辑
43
+ if args.command == "benchmark":
44
+ handle_benchmark_command(args)
45
+ elif args.command == "serve":
46
+ print_banner()
47
+ # 初始化系统(如果不是 quick 模式)
48
+ if not args.quick:
49
+ initialize_system(args)
50
+ # 传递 serve 子命令的 parser,用于 merge_args_with_config 获取默认值
51
+ serve_parser = subparsers.get("serve")
52
+ handle_serve_command(args, serve_parser)
53
+ elif args.command == "run":
54
+ # run 命令直接执行查询,不需要系统初始化
55
+ handle_run_command(args)
56
+ elif args.command == "build_hybrid_index":
57
+ handle_build_hybrid_index_command(args)
58
+ elif args.command == "tools":
59
+ handle_tools_command(args)
60
+ else:
61
+ parser.print_help()