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,177 @@
1
+ """
2
+ File and file group management functionality.
3
+
4
+ This module provides methods for managing current files, file groups,
5
+ group information, and active groups.
6
+ """
7
+
8
+ from typing import Dict, Any, List
9
+ from .models import FileList, GroupsDict, GroupsInfoDict
10
+
11
+
12
+ class FileManagerMixin:
13
+ """Mixin class providing file and file group management functionality."""
14
+
15
+ # ===== File Management =====
16
+ def get_current_files(self) -> FileList:
17
+ """Get current files list."""
18
+ return self._memory.current_files.get("files", [])
19
+
20
+ def set_current_files(self, files: FileList):
21
+ """Set current files list."""
22
+ self._memory.current_files["files"] = files
23
+ self.save_memory()
24
+
25
+ def add_files(self, files: FileList) -> FileList:
26
+ """Add files to current files list (avoiding duplicates)."""
27
+ current_files = set(self._memory.current_files.get("files", []))
28
+ new_files = [f for f in files if f not in current_files]
29
+ if new_files:
30
+ self._memory.current_files["files"].extend(new_files)
31
+ self.save_memory()
32
+ return new_files
33
+
34
+ def remove_files(self, files: FileList) -> FileList:
35
+ """Remove files from current files list."""
36
+ current_files = self._memory.current_files.get("files", [])
37
+ removed_files = []
38
+ for file in files:
39
+ if file in current_files:
40
+ current_files.remove(file)
41
+ removed_files.append(file)
42
+ if removed_files:
43
+ self.save_memory()
44
+ return removed_files
45
+
46
+ def clear_files(self):
47
+ """Clear all current files."""
48
+ self._memory.current_files["files"] = []
49
+ self.save_memory()
50
+
51
+ # ===== File Groups Management =====
52
+ def get_file_groups(self) -> GroupsDict:
53
+ """Get all file groups."""
54
+ return self._memory.current_files.get("groups", {})
55
+
56
+ def get_file_group(self, name: str) -> FileList:
57
+ """Get files in a specific group."""
58
+ return self._memory.current_files.get("groups", {}).get(name, [])
59
+
60
+ def set_file_group(self, name: str, files: FileList):
61
+ """Set files for a group."""
62
+ if "groups" not in self._memory.current_files:
63
+ self._memory.current_files["groups"] = {}
64
+ self._memory.current_files["groups"][name] = files
65
+ self.save_memory()
66
+
67
+ def add_file_group(self, name: str, files: FileList):
68
+ """Add a new file group with current files or specified files."""
69
+ if not files:
70
+ files = self.get_current_files().copy()
71
+ self.set_file_group(name, files)
72
+
73
+ def delete_file_group(self, name: str) -> bool:
74
+ """Delete a file group."""
75
+ groups = self._memory.current_files.get("groups", {})
76
+ if name in groups:
77
+ del groups[name]
78
+ # Also remove from groups_info and current_groups
79
+ groups_info = self._memory.current_files.get("groups_info", {})
80
+ if name in groups_info:
81
+ del groups_info[name]
82
+ current_groups = self._memory.current_files.get("current_groups", [])
83
+ if name in current_groups:
84
+ current_groups.remove(name)
85
+ self.save_memory()
86
+ return True
87
+ return False
88
+
89
+ def has_file_group(self, name: str) -> bool:
90
+ """Check if file group exists."""
91
+ return name in self._memory.current_files.get("groups", {})
92
+
93
+ # ===== File Groups Info Management =====
94
+ def get_groups_info(self) -> GroupsInfoDict:
95
+ """Get all groups info."""
96
+ return self._memory.current_files.get("groups_info", {})
97
+
98
+ def get_group_info(self, name: str) -> Dict[str, Any]:
99
+ """Get info for a specific group."""
100
+ return self._memory.current_files.get("groups_info", {}).get(name, {})
101
+
102
+ def set_group_info(self, name: str, info: Dict[str, Any]):
103
+ """Set info for a group."""
104
+ if "groups_info" not in self._memory.current_files:
105
+ self._memory.current_files["groups_info"] = {}
106
+ self._memory.current_files["groups_info"][name] = info
107
+ self.save_memory()
108
+
109
+ def set_group_query_prefix(self, name: str, query_prefix: str):
110
+ """Set query prefix for a group."""
111
+ info = self.get_group_info(name)
112
+ info["query_prefix"] = query_prefix
113
+ self.set_group_info(name, info)
114
+
115
+ def get_group_query_prefix(self, name: str) -> str:
116
+ """Get query prefix for a group."""
117
+ return self.get_group_info(name).get("query_prefix", "")
118
+
119
+ # ===== Current Active Groups Management =====
120
+ def get_current_groups(self) -> List[str]:
121
+ """Get currently active groups."""
122
+ return self._memory.current_files.get("current_groups", [])
123
+
124
+ def set_current_groups(self, groups: List[str]):
125
+ """Set currently active groups."""
126
+ self._memory.current_files["current_groups"] = groups
127
+ self.save_memory()
128
+
129
+ def add_current_group(self, group_name: str):
130
+ """Add group to current active groups."""
131
+ current_groups = self._memory.current_files.get("current_groups", [])
132
+ if group_name not in current_groups:
133
+ current_groups.append(group_name)
134
+ self.save_memory()
135
+
136
+ def remove_current_group(self, group_name: str) -> bool:
137
+ """Remove group from current active groups."""
138
+ current_groups = self._memory.current_files.get("current_groups", [])
139
+ if group_name in current_groups:
140
+ current_groups.remove(group_name)
141
+ self.save_memory()
142
+ return True
143
+ return False
144
+
145
+ def clear_current_groups(self):
146
+ """Clear all current active groups."""
147
+ self._memory.current_files["current_groups"] = []
148
+ self.save_memory()
149
+
150
+ def merge_groups_to_current_files(self, group_names: List[str]) -> List[str]:
151
+ """Merge files from multiple groups and set as current files."""
152
+ merged_files = set()
153
+ existing_groups = []
154
+ missing_groups = []
155
+
156
+ groups = self.get_file_groups()
157
+ for group_name in group_names:
158
+ if group_name in groups:
159
+ merged_files.update(groups[group_name])
160
+ existing_groups.append(group_name)
161
+ else:
162
+ missing_groups.append(group_name)
163
+
164
+ if merged_files:
165
+ self.set_current_files(list(merged_files))
166
+ self.set_current_groups(existing_groups)
167
+
168
+ return missing_groups
169
+
170
+ # ===== Legacy File Group Helpers =====
171
+ def get_groups(self) -> GroupsDict:
172
+ """Get file groups (legacy method for backward compatibility)."""
173
+ return self.get_file_groups()
174
+
175
+ def set_group(self, name: str, files: FileList):
176
+ """Set a file group (legacy method for backward compatibility)."""
177
+ self.set_file_group(name, files)
@@ -0,0 +1,129 @@
1
+ """
2
+ Human as Model management functionality.
3
+
4
+ This module provides human_as_model configuration management methods for auto-coder sessions,
5
+ including getting, setting, and toggling the human_as_model status.
6
+ """
7
+
8
+ from typing import TYPE_CHECKING
9
+
10
+ if TYPE_CHECKING:
11
+ from .models import CoreMemory
12
+
13
+
14
+ class HumanAsModelManagerMixin:
15
+ """Mixin class providing human_as_model management functionality."""
16
+
17
+ # These will be provided by BaseMemoryManager when mixed in
18
+ _memory: 'CoreMemory'
19
+
20
+ def save_memory(self) -> None:
21
+ """Save memory - provided by BaseMemoryManager."""
22
+ ...
23
+
24
+ def get_human_as_model(self) -> bool:
25
+ """
26
+ Get current human_as_model status.
27
+
28
+ Returns:
29
+ True if human_as_model is enabled, False otherwise
30
+ """
31
+ # Ensure conf dict exists
32
+ if "conf" not in self._memory.__dict__ or self._memory.conf is None:
33
+ self._memory.conf = {}
34
+
35
+ # Get the value, defaulting to "false" if not set
36
+ value = self._memory.conf.get("human_as_model", "false")
37
+
38
+ # Handle both string and boolean values
39
+ if isinstance(value, bool):
40
+ return value
41
+ elif isinstance(value, str):
42
+ return value.lower() == "true"
43
+ else:
44
+ # Convert other types to boolean
45
+ return bool(value)
46
+
47
+ def set_human_as_model(self, enabled: bool):
48
+ """
49
+ Set human_as_model status.
50
+
51
+ Args:
52
+ enabled: True to enable human_as_model, False to disable
53
+ """
54
+ # Ensure conf dict exists
55
+ if "conf" not in self._memory.__dict__ or self._memory.conf is None:
56
+ self._memory.conf = {}
57
+
58
+ self._memory.conf["human_as_model"] = "true" if enabled else "false"
59
+ self.save_memory()
60
+
61
+ def toggle_human_as_model(self) -> bool:
62
+ """
63
+ Toggle human_as_model status between enabled and disabled.
64
+
65
+ Returns:
66
+ New status after toggling (True if enabled, False if disabled)
67
+ """
68
+ current_status = self.get_human_as_model()
69
+ new_status = not current_status
70
+ self.set_human_as_model(new_status)
71
+ return new_status
72
+
73
+ def enable_human_as_model(self):
74
+ """Enable human_as_model mode."""
75
+ self.set_human_as_model(True)
76
+
77
+ def disable_human_as_model(self):
78
+ """Disable human_as_model mode."""
79
+ self.set_human_as_model(False)
80
+
81
+ def is_human_as_model_enabled(self) -> bool:
82
+ """
83
+ Check if human_as_model is currently enabled.
84
+
85
+ Returns:
86
+ True if human_as_model is enabled, False otherwise
87
+ """
88
+ return self.get_human_as_model()
89
+
90
+ def get_human_as_model_string(self) -> str:
91
+ """
92
+ Get human_as_model status as string.
93
+
94
+ Returns:
95
+ "true" if enabled, "false" if disabled
96
+ """
97
+ return "true" if self.get_human_as_model() else "false"
98
+
99
+ def set_human_as_model_from_string(self, value: str):
100
+ """
101
+ Set human_as_model status from string value.
102
+
103
+ Args:
104
+ value: String value ("true"/"false", "1"/"0", "yes"/"no", etc.)
105
+ """
106
+ # Convert various string representations to boolean
107
+ if isinstance(value, str):
108
+ value_lower = value.lower().strip()
109
+ enabled = value_lower in ("true", "1", "yes", "on", "enable", "enabled")
110
+ else:
111
+ enabled = bool(value)
112
+
113
+ self.set_human_as_model(enabled)
114
+
115
+ def ensure_human_as_model_config(self):
116
+ """
117
+ Ensure human_as_model configuration exists with default value.
118
+
119
+ Returns:
120
+ Current human_as_model status
121
+ """
122
+ if "conf" not in self._memory.__dict__ or self._memory.conf is None:
123
+ self._memory.conf = {}
124
+
125
+ if "human_as_model" not in self._memory.conf:
126
+ self._memory.conf["human_as_model"] = "false"
127
+ self.save_memory()
128
+
129
+ return self.get_human_as_model()
@@ -0,0 +1,54 @@
1
+ """
2
+ Library management functionality.
3
+
4
+ This module provides methods for managing libraries and their configurations.
5
+ """
6
+
7
+ from typing import Dict, Any, Optional
8
+ from .models import LibsDict
9
+
10
+
11
+ class LibManagerMixin:
12
+ """Mixin class providing library management functionality."""
13
+
14
+ def get_libs(self) -> LibsDict:
15
+ """Get all libraries."""
16
+ return self._memory.libs.copy()
17
+
18
+ def add_lib(self, name: str, config: Optional[Dict[str, Any]] = None) -> bool:
19
+ """Add a library."""
20
+ if name not in self._memory.libs:
21
+ self._memory.libs[name] = config or {}
22
+ self.save_memory()
23
+ return True
24
+ return False
25
+
26
+ def remove_lib(self, name: str) -> bool:
27
+ """Remove a library."""
28
+ if name in self._memory.libs:
29
+ del self._memory.libs[name]
30
+ self.save_memory()
31
+ return True
32
+ return False
33
+
34
+ def has_lib(self, name: str) -> bool:
35
+ """Check if library exists."""
36
+ return name in self._memory.libs
37
+
38
+ def set_lib_config(self, name: str, config: Dict[str, Any]):
39
+ """Set configuration for a library."""
40
+ if name in self._memory.libs:
41
+ self._memory.libs[name] = config
42
+ self.save_memory()
43
+
44
+ def get_lib_config(self, name: str) -> Dict[str, Any]:
45
+ """Get configuration for a library."""
46
+ return self._memory.libs.get(name, {})
47
+
48
+ def set_lib_proxy(self, proxy_url: str):
49
+ """Set library proxy URL."""
50
+ self.set_config("lib-proxy", proxy_url)
51
+
52
+ def get_lib_proxy(self) -> str:
53
+ """Get library proxy URL."""
54
+ return self.get_config("lib-proxy", "https://github.com/allwefantasy/llm_friendly_packages")
@@ -0,0 +1,81 @@
1
+ """
2
+ Main MemoryManager class combining all functionality.
3
+
4
+ This module provides the main MemoryManager class that combines all
5
+ functionality from the various manager mixins.
6
+ """
7
+
8
+ from typing import Optional, cast
9
+ from .base_manager import BaseMemoryManager
10
+ from .config_manager import ConfigManagerMixin
11
+ from .file_manager import FileManagerMixin
12
+ from .exclude_manager import ExcludeManagerMixin
13
+ from .lib_manager import LibManagerMixin
14
+ from .conversation_manager import ConversationManagerMixin
15
+ from .mode_manager import ModeManagerMixin
16
+ from .human_as_model_manager import HumanAsModelManagerMixin
17
+ from .agentic_mode_manager import AgenticModeManagerMixin
18
+
19
+
20
+ class MemoryManager(
21
+ BaseMemoryManager,
22
+ ConfigManagerMixin,
23
+ FileManagerMixin,
24
+ ExcludeManagerMixin,
25
+ LibManagerMixin,
26
+ ConversationManagerMixin,
27
+ ModeManagerMixin,
28
+ HumanAsModelManagerMixin,
29
+ AgenticModeManagerMixin
30
+ ):
31
+ """
32
+ Complete memory manager for auto-coder sessions.
33
+
34
+ This class combines all functionality from various manager mixins:
35
+ - BaseMemoryManager: Core persistence and singleton functionality
36
+ - ConfigManagerMixin: Configuration management
37
+ - FileManagerMixin: File and file group management
38
+ - ExcludeManagerMixin: Exclude patterns management
39
+ - LibManagerMixin: Library management
40
+ - ConversationManagerMixin: Conversation history management
41
+ - ModeManagerMixin: Mode management functionality
42
+ - HumanAsModelManagerMixin: Human as model configuration management
43
+ - AgenticModeManagerMixin: Agentic mode configuration management
44
+
45
+ Provides thread-safe persistence of configuration and session data.
46
+ """
47
+
48
+ def __init__(self, project_root: Optional[str] = None):
49
+ """
50
+ Initialize memory manager with all functionality.
51
+
52
+ Args:
53
+ project_root: Project root directory. If None, uses current working directory.
54
+ """
55
+ super().__init__(project_root)
56
+
57
+ @classmethod
58
+ def get_instance(cls, project_root: Optional[str] = None) -> 'MemoryManager':
59
+ """
60
+ Get memory manager instance with proper type.
61
+
62
+ Args:
63
+ project_root: Project root directory. If None, uses current working directory.
64
+
65
+ Returns:
66
+ MemoryManager instance
67
+ """
68
+ return cast('MemoryManager', super().get_instance(project_root))
69
+
70
+
71
+ def get_memory_manager(project_root: Optional[str] = None) -> MemoryManager:
72
+ """
73
+ Get memory manager instance.
74
+
75
+ Args:
76
+ project_root: Project root directory. If None, uses current working directory.
77
+
78
+ Returns:
79
+ MemoryManager instance
80
+ """
81
+ return MemoryManager.get_instance(project_root)
@@ -0,0 +1,126 @@
1
+ """
2
+ Mode management functionality.
3
+
4
+ This module provides mode management methods for auto-coder sessions,
5
+ including mode setting, getting, and cycling functionality.
6
+ """
7
+
8
+ from typing import List, TYPE_CHECKING
9
+
10
+ if TYPE_CHECKING:
11
+ from .models import CoreMemory
12
+
13
+
14
+ class ModeManagerMixin:
15
+ """Mixin class providing mode management functionality."""
16
+
17
+ # Available modes in cycle order
18
+ MODE_CYCLE = ["normal", "auto_detect", "voice_input", "shell"]
19
+ DEFAULT_MODE = "normal"
20
+
21
+ # These will be provided by BaseMemoryManager when mixed in
22
+ _memory: 'CoreMemory'
23
+
24
+ def save_memory(self) -> None:
25
+ """Save memory - provided by BaseMemoryManager."""
26
+ ...
27
+
28
+ def get_mode(self) -> str:
29
+ """
30
+ Get current operation mode.
31
+
32
+ Returns:
33
+ Current mode string, defaults to "normal" if not set
34
+ """
35
+ mode = self._memory.mode
36
+ if not mode or mode not in self.MODE_CYCLE:
37
+ mode = self.DEFAULT_MODE
38
+ self.set_mode(mode)
39
+ return mode
40
+
41
+ def set_mode(self, mode: str):
42
+ """
43
+ Set operation mode.
44
+
45
+ Args:
46
+ mode: Mode to set (normal, auto_detect, voice_input, shell)
47
+ """
48
+ if mode not in self.MODE_CYCLE:
49
+ raise ValueError(f"Invalid mode: {mode}. Valid modes: {self.MODE_CYCLE}")
50
+
51
+ self._memory.mode = mode
52
+ self.save_memory()
53
+
54
+ def cycle_mode(self) -> str:
55
+ """
56
+ Cycle to next mode in sequence: normal -> auto_detect -> voice_input -> shell -> normal.
57
+
58
+ Returns:
59
+ New mode after cycling
60
+ """
61
+ current_mode = self.get_mode()
62
+
63
+ try:
64
+ current_index = self.MODE_CYCLE.index(current_mode)
65
+ next_index = (current_index + 1) % len(self.MODE_CYCLE)
66
+ new_mode = self.MODE_CYCLE[next_index]
67
+ except ValueError:
68
+ # If current mode is not in cycle, default to first mode
69
+ new_mode = self.MODE_CYCLE[0]
70
+
71
+ self.set_mode(new_mode)
72
+ return new_mode
73
+
74
+ def is_mode(self, mode: str) -> bool:
75
+ """
76
+ Check if current mode matches the specified mode.
77
+
78
+ Args:
79
+ mode: Mode to check against
80
+
81
+ Returns:
82
+ True if current mode matches, False otherwise
83
+ """
84
+ return self.get_mode() == mode
85
+
86
+ def is_auto_detect_mode(self) -> bool:
87
+ """Check if current mode is auto_detect."""
88
+ return self.is_mode("auto_detect")
89
+
90
+ def is_voice_input_mode(self) -> bool:
91
+ """Check if current mode is voice_input."""
92
+ return self.is_mode("voice_input")
93
+
94
+ def is_normal_mode(self) -> bool:
95
+ """Check if current mode is normal."""
96
+ return self.is_mode("normal")
97
+
98
+ def is_shell_mode(self) -> bool:
99
+ """Check if current mode is shell."""
100
+ return self.is_mode("shell")
101
+
102
+ def get_available_modes(self) -> List[str]:
103
+ """
104
+ Get list of available modes.
105
+
106
+ Returns:
107
+ List of available mode strings
108
+ """
109
+ return self.MODE_CYCLE.copy()
110
+
111
+ def reset_mode_to_default(self):
112
+ """Reset mode to default value."""
113
+ self.set_mode(self.DEFAULT_MODE)
114
+
115
+ def ensure_mode_valid(self):
116
+ """
117
+ Ensure current mode is valid, reset to default if not.
118
+
119
+ Returns:
120
+ Current mode after validation
121
+ """
122
+ current_mode = self._memory.mode
123
+ if not current_mode or current_mode not in self.MODE_CYCLE:
124
+ self.reset_mode_to_default()
125
+ return self.DEFAULT_MODE
126
+ return current_mode
@@ -0,0 +1,70 @@
1
+ """
2
+ Core data models for memory management.
3
+
4
+ This module contains the data structures used by the memory management system.
5
+ """
6
+
7
+ from typing import Dict, Any, List
8
+ from dataclasses import dataclass, field
9
+
10
+
11
+ @dataclass
12
+ class CoreMemory:
13
+ """Core memory data structure for auto-coder sessions."""
14
+
15
+ conversation: List[Dict[str, str]] = field(default_factory=list)
16
+ current_files: Dict[str, Any] = field(default_factory=lambda: {
17
+ "files": [],
18
+ "groups": {},
19
+ "groups_info": {},
20
+ "current_groups": []
21
+ })
22
+ conf: Dict[str, Any] = field(default_factory=dict)
23
+ exclude_dirs: List[str] = field(default_factory=list)
24
+ exclude_files: List[str] = field(default_factory=list)
25
+ libs: Dict[str, Any] = field(default_factory=dict)
26
+ mode: str = "normal"
27
+
28
+ def to_dict(self) -> Dict[str, Any]:
29
+ """Convert to dictionary for JSON serialization."""
30
+ return {
31
+ "conversation": self.conversation,
32
+ "current_files": self.current_files,
33
+ "conf": self.conf,
34
+ "exclude_dirs": self.exclude_dirs,
35
+ "exclude_files": self.exclude_files,
36
+ "libs": self.libs,
37
+ "mode": self.mode,
38
+ }
39
+
40
+ @classmethod
41
+ def from_dict(cls, data: Dict[str, Any]) -> 'CoreMemory':
42
+ """Create CoreMemory instance from dictionary data."""
43
+ # Ensure current_files has all required keys
44
+ current_files = data.get("current_files", {})
45
+ if not isinstance(current_files, dict):
46
+ current_files = {"files": [], "groups": {}, "groups_info": {}, "current_groups": []}
47
+ else:
48
+ current_files.setdefault("files", [])
49
+ current_files.setdefault("groups", {})
50
+ current_files.setdefault("groups_info", {})
51
+ current_files.setdefault("current_groups", [])
52
+
53
+ return cls(
54
+ conversation=data.get("conversation", []),
55
+ current_files=current_files,
56
+ conf=data.get("conf", {}),
57
+ exclude_dirs=data.get("exclude_dirs", []),
58
+ exclude_files=data.get("exclude_files", []),
59
+ libs=data.get("libs", {}),
60
+ mode=data.get("mode", "normal"),
61
+ )
62
+
63
+
64
+ # Type aliases for better code clarity
65
+ ConfigDict = Dict[str, Any]
66
+ FileList = List[str]
67
+ GroupsDict = Dict[str, List[str]]
68
+ GroupsInfoDict = Dict[str, Dict[str, Any]]
69
+ LibsDict = Dict[str, Any]
70
+ ConversationList = List[Dict[str, str]]