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

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

Potentially problematic release.


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

Files changed (579) hide show
  1. auto_coder-2.0.0.dist-info/LICENSE +158 -0
  2. auto_coder-2.0.0.dist-info/METADATA +558 -0
  3. auto_coder-2.0.0.dist-info/RECORD +795 -0
  4. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/WHEEL +1 -1
  5. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/entry_points.txt +3 -3
  6. autocoder/__init__.py +31 -0
  7. autocoder/agent/auto_filegroup.py +32 -13
  8. autocoder/agent/auto_learn_from_commit.py +9 -1
  9. autocoder/agent/base_agentic/__init__.py +3 -0
  10. autocoder/agent/base_agentic/agent_hub.py +1 -1
  11. autocoder/agent/base_agentic/base_agent.py +235 -136
  12. autocoder/agent/base_agentic/default_tools.py +119 -118
  13. autocoder/agent/base_agentic/test_base_agent.py +1 -1
  14. autocoder/agent/base_agentic/tool_registry.py +32 -20
  15. autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +25 -4
  16. autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +24 -11
  17. autocoder/agent/base_agentic/types.py +42 -0
  18. autocoder/agent/entry_command_agent/chat.py +73 -59
  19. autocoder/auto_coder.py +31 -40
  20. autocoder/auto_coder_rag.py +11 -1084
  21. autocoder/auto_coder_runner.py +1029 -2310
  22. autocoder/auto_coder_terminal.py +26 -0
  23. autocoder/auto_coder_terminal_v3.py +190 -0
  24. autocoder/chat/conf_command.py +224 -124
  25. autocoder/chat/models_command.py +361 -299
  26. autocoder/chat/rules_command.py +79 -31
  27. autocoder/chat_auto_coder.py +1021 -372
  28. autocoder/chat_auto_coder_lang.py +23 -732
  29. autocoder/commands/auto_command.py +26 -9
  30. autocoder/commands/auto_web.py +1 -1
  31. autocoder/commands/tools.py +44 -44
  32. autocoder/common/__init__.py +150 -128
  33. autocoder/common/ac_style_command_parser/__init__.py +39 -2
  34. autocoder/common/ac_style_command_parser/config.py +422 -0
  35. autocoder/common/ac_style_command_parser/parser.py +292 -78
  36. autocoder/common/ac_style_command_parser/test_parser.py +241 -16
  37. autocoder/common/ac_style_command_parser/test_typed_parser.py +342 -0
  38. autocoder/common/ac_style_command_parser/typed_parser.py +653 -0
  39. autocoder/common/action_yml_file_manager.py +25 -13
  40. autocoder/common/agent_events/__init__.py +52 -0
  41. autocoder/common/agent_events/agent_event_emitter.py +193 -0
  42. autocoder/common/agent_events/event_factory.py +177 -0
  43. autocoder/common/agent_events/examples.py +307 -0
  44. autocoder/common/agent_events/types.py +113 -0
  45. autocoder/common/agent_events/utils.py +68 -0
  46. autocoder/common/agent_hooks/__init__.py +44 -0
  47. autocoder/common/agent_hooks/examples.py +582 -0
  48. autocoder/common/agent_hooks/hook_executor.py +217 -0
  49. autocoder/common/agent_hooks/hook_manager.py +288 -0
  50. autocoder/common/agent_hooks/types.py +133 -0
  51. autocoder/common/agent_hooks/utils.py +99 -0
  52. autocoder/common/agent_query_queue/queue_executor.py +324 -0
  53. autocoder/common/agent_query_queue/queue_manager.py +325 -0
  54. autocoder/common/agents/__init__.py +11 -0
  55. autocoder/common/agents/agent_manager.py +323 -0
  56. autocoder/common/agents/agent_parser.py +189 -0
  57. autocoder/common/agents/example_usage.py +344 -0
  58. autocoder/common/agents/integration_example.py +330 -0
  59. autocoder/common/agents/test_agent_parser.py +545 -0
  60. autocoder/common/async_utils.py +101 -0
  61. autocoder/common/auto_coder_lang.py +23 -972
  62. autocoder/common/autocoderargs_parser/__init__.py +14 -0
  63. autocoder/common/autocoderargs_parser/parser.py +184 -0
  64. autocoder/common/autocoderargs_parser/tests/__init__.py +1 -0
  65. autocoder/common/autocoderargs_parser/tests/test_args_parser.py +235 -0
  66. autocoder/common/autocoderargs_parser/tests/test_token_parser.py +195 -0
  67. autocoder/common/autocoderargs_parser/token_parser.py +290 -0
  68. autocoder/common/buildin_tokenizer.py +2 -4
  69. autocoder/common/code_auto_generate.py +149 -74
  70. autocoder/common/code_auto_generate_diff.py +163 -70
  71. autocoder/common/code_auto_generate_editblock.py +179 -89
  72. autocoder/common/code_auto_generate_strict_diff.py +167 -72
  73. autocoder/common/code_auto_merge_editblock.py +13 -6
  74. autocoder/common/code_modification_ranker.py +1 -1
  75. autocoder/common/command_completer.py +3 -3
  76. autocoder/common/command_file_manager/manager.py +183 -47
  77. autocoder/common/command_file_manager/test_command_file_manager.py +507 -0
  78. autocoder/common/command_templates.py +1 -1
  79. autocoder/common/conf_utils.py +2 -4
  80. autocoder/common/conversations/config.py +11 -3
  81. autocoder/common/conversations/get_conversation_manager.py +100 -2
  82. autocoder/common/conversations/llm_stats_models.py +264 -0
  83. autocoder/common/conversations/manager.py +112 -28
  84. autocoder/common/conversations/models.py +16 -2
  85. autocoder/common/conversations/storage/index_manager.py +134 -10
  86. autocoder/common/core_config/__init__.py +63 -0
  87. autocoder/common/core_config/agentic_mode_manager.py +109 -0
  88. autocoder/common/core_config/base_manager.py +123 -0
  89. autocoder/common/core_config/compatibility.py +151 -0
  90. autocoder/common/core_config/config_manager.py +156 -0
  91. autocoder/common/core_config/conversation_manager.py +31 -0
  92. autocoder/common/core_config/exclude_manager.py +72 -0
  93. autocoder/common/core_config/file_manager.py +177 -0
  94. autocoder/common/core_config/human_as_model_manager.py +129 -0
  95. autocoder/common/core_config/lib_manager.py +54 -0
  96. autocoder/common/core_config/main_manager.py +81 -0
  97. autocoder/common/core_config/mode_manager.py +126 -0
  98. autocoder/common/core_config/models.py +70 -0
  99. autocoder/common/core_config/test_memory_manager.py +1056 -0
  100. autocoder/common/env_manager.py +282 -0
  101. autocoder/common/env_manager_usage_example.py +211 -0
  102. autocoder/common/file_checkpoint/conversation_checkpoint.py +19 -19
  103. autocoder/common/file_checkpoint/manager.py +264 -48
  104. autocoder/common/file_checkpoint/test_backup.py +1 -18
  105. autocoder/common/file_checkpoint/test_manager.py +270 -1
  106. autocoder/common/file_checkpoint/test_store.py +1 -17
  107. autocoder/common/file_handler/__init__.py +23 -0
  108. autocoder/common/file_handler/active_context_handler.py +159 -0
  109. autocoder/common/file_handler/add_files_handler.py +409 -0
  110. autocoder/common/file_handler/chat_handler.py +180 -0
  111. autocoder/common/file_handler/coding_handler.py +401 -0
  112. autocoder/common/file_handler/commit_handler.py +200 -0
  113. autocoder/common/file_handler/lib_handler.py +156 -0
  114. autocoder/common/file_handler/list_files_handler.py +111 -0
  115. autocoder/common/file_handler/mcp_handler.py +268 -0
  116. autocoder/common/file_handler/models_handler.py +493 -0
  117. autocoder/common/file_handler/remove_files_handler.py +172 -0
  118. autocoder/common/file_monitor/test_file_monitor.py +307 -0
  119. autocoder/common/git_utils.py +51 -10
  120. autocoder/common/global_cancel.py +15 -6
  121. autocoder/common/ignorefiles/test_ignore_file_utils.py +1 -1
  122. autocoder/common/international/__init__.py +31 -0
  123. autocoder/common/international/demo_international.py +92 -0
  124. autocoder/common/international/message_manager.py +157 -0
  125. autocoder/common/international/messages/__init__.py +56 -0
  126. autocoder/common/international/messages/async_command_messages.py +507 -0
  127. autocoder/common/international/messages/auto_coder_messages.py +2208 -0
  128. autocoder/common/international/messages/chat_auto_coder_messages.py +1547 -0
  129. autocoder/common/international/messages/command_help_messages.py +986 -0
  130. autocoder/common/international/messages/conversation_command_messages.py +191 -0
  131. autocoder/common/international/messages/git_helper_plugin_messages.py +159 -0
  132. autocoder/common/international/messages/queue_command_messages.py +751 -0
  133. autocoder/common/international/messages/rules_command_messages.py +77 -0
  134. autocoder/common/international/messages/sdk_messages.py +1707 -0
  135. autocoder/common/international/messages/token_helper_plugin_messages.py +361 -0
  136. autocoder/common/international/messages/tool_display_messages.py +1212 -0
  137. autocoder/common/international/messages/workflow_exception_messages.py +473 -0
  138. autocoder/common/international/test_international.py +612 -0
  139. autocoder/common/linter_core/__init__.py +28 -0
  140. autocoder/common/linter_core/base_linter.py +61 -0
  141. autocoder/common/linter_core/config_loader.py +271 -0
  142. autocoder/common/linter_core/formatters/__init__.py +0 -0
  143. autocoder/common/linter_core/formatters/base_formatter.py +38 -0
  144. autocoder/common/linter_core/formatters/raw_formatter.py +17 -0
  145. autocoder/common/linter_core/linter.py +166 -0
  146. autocoder/common/linter_core/linter_factory.py +216 -0
  147. autocoder/common/linter_core/linter_manager.py +333 -0
  148. autocoder/common/linter_core/linters/__init__.py +9 -0
  149. autocoder/common/linter_core/linters/java_linter.py +342 -0
  150. autocoder/common/linter_core/linters/python_linter.py +115 -0
  151. autocoder/common/linter_core/linters/typescript_linter.py +119 -0
  152. autocoder/common/linter_core/models/__init__.py +7 -0
  153. autocoder/common/linter_core/models/lint_result.py +91 -0
  154. autocoder/common/linter_core/models.py +33 -0
  155. autocoder/common/linter_core/tests/__init__.py +3 -0
  156. autocoder/common/linter_core/tests/test_config_loader.py +323 -0
  157. autocoder/common/linter_core/tests/test_config_loading.py +308 -0
  158. autocoder/common/linter_core/tests/test_factory_manager.py +234 -0
  159. autocoder/common/linter_core/tests/test_formatters.py +147 -0
  160. autocoder/common/linter_core/tests/test_integration.py +317 -0
  161. autocoder/common/linter_core/tests/test_java_linter.py +496 -0
  162. autocoder/common/linter_core/tests/test_linters.py +265 -0
  163. autocoder/common/linter_core/tests/test_models.py +81 -0
  164. autocoder/common/linter_core/tests/verify_config_loading.py +296 -0
  165. autocoder/common/linter_core/tests/verify_fixes.py +183 -0
  166. autocoder/common/llm_friendly_package/__init__.py +31 -0
  167. autocoder/common/llm_friendly_package/base_manager.py +102 -0
  168. autocoder/common/llm_friendly_package/docs_manager.py +121 -0
  169. autocoder/common/llm_friendly_package/library_manager.py +171 -0
  170. autocoder/common/{llm_friendly_package.py → llm_friendly_package/main_manager.py} +204 -231
  171. autocoder/common/llm_friendly_package/models.py +40 -0
  172. autocoder/common/llm_friendly_package/test_llm_friendly_package.py +536 -0
  173. autocoder/common/llms/__init__.py +15 -0
  174. autocoder/common/llms/demo_error_handling.py +85 -0
  175. autocoder/common/llms/factory.py +142 -0
  176. autocoder/common/llms/manager.py +264 -0
  177. autocoder/common/llms/pricing.py +121 -0
  178. autocoder/common/llms/registry.py +288 -0
  179. autocoder/common/llms/schema.py +77 -0
  180. autocoder/common/llms/simple_demo.py +45 -0
  181. autocoder/common/llms/test_quick_model.py +116 -0
  182. autocoder/common/llms/test_remove_functionality.py +182 -0
  183. autocoder/common/llms/tests/__init__.py +1 -0
  184. autocoder/common/llms/tests/test_manager.py +330 -0
  185. autocoder/common/llms/tests/test_registry.py +364 -0
  186. autocoder/common/mcp_tools/__init__.py +62 -0
  187. autocoder/common/{mcp_tools.py → mcp_tools/executor.py} +49 -40
  188. autocoder/common/{mcp_hub.py → mcp_tools/hub.py} +42 -68
  189. autocoder/common/{mcp_server_install.py → mcp_tools/installer.py} +16 -28
  190. autocoder/common/{mcp_server.py → mcp_tools/server.py} +176 -48
  191. autocoder/common/mcp_tools/test_keyboard_interrupt.py +93 -0
  192. autocoder/common/mcp_tools/test_mcp_tools.py +391 -0
  193. autocoder/common/{mcp_server_types.py → mcp_tools/types.py} +121 -48
  194. autocoder/common/mcp_tools/verify_functionality.py +202 -0
  195. autocoder/common/model_speed_tester.py +32 -26
  196. autocoder/common/priority_directory_finder/__init__.py +142 -0
  197. autocoder/common/priority_directory_finder/examples.py +230 -0
  198. autocoder/common/priority_directory_finder/finder.py +283 -0
  199. autocoder/common/priority_directory_finder/models.py +236 -0
  200. autocoder/common/priority_directory_finder/test_priority_directory_finder.py +431 -0
  201. autocoder/common/project_scanner/__init__.py +18 -0
  202. autocoder/common/project_scanner/compat.py +77 -0
  203. autocoder/common/project_scanner/scanner.py +436 -0
  204. autocoder/common/project_tracker/__init__.py +27 -0
  205. autocoder/common/project_tracker/api.py +228 -0
  206. autocoder/common/project_tracker/demo.py +272 -0
  207. autocoder/common/project_tracker/tracker.py +487 -0
  208. autocoder/common/project_tracker/types.py +53 -0
  209. autocoder/common/pruner/__init__.py +67 -0
  210. autocoder/common/pruner/agentic_conversation_pruner.py +746 -0
  211. autocoder/common/{context_pruner.py → pruner/context_pruner.py} +137 -40
  212. autocoder/common/pruner/conversation_message_ids_api.py +386 -0
  213. autocoder/common/pruner/conversation_message_ids_manager.py +347 -0
  214. autocoder/common/pruner/conversation_message_ids_pruner.py +473 -0
  215. autocoder/common/pruner/conversation_normalizer.py +347 -0
  216. autocoder/common/{conversation_pruner.py → pruner/conversation_pruner.py} +26 -6
  217. autocoder/common/pruner/test_agentic_conversation_pruner.py +784 -0
  218. autocoder/common/pruner/test_context_pruner.py +546 -0
  219. autocoder/common/pruner/test_conversation_normalizer.py +502 -0
  220. autocoder/common/pruner/test_tool_content_detector.py +324 -0
  221. autocoder/common/pruner/tool_content_detector.py +227 -0
  222. autocoder/common/pruner/tools/__init__.py +18 -0
  223. autocoder/common/pruner/tools/query_message_ids.py +264 -0
  224. autocoder/common/pruner/tools/test_agentic_pruning_logic.py +432 -0
  225. autocoder/common/pruner/tools/test_message_ids_pruning_only.py +192 -0
  226. autocoder/common/pull_requests/__init__.py +9 -1
  227. autocoder/common/pull_requests/utils.py +122 -1
  228. autocoder/common/rag_manager/rag_manager.py +36 -40
  229. autocoder/common/rulefiles/__init__.py +53 -1
  230. autocoder/common/rulefiles/api.py +250 -0
  231. autocoder/common/rulefiles/core/__init__.py +14 -0
  232. autocoder/common/rulefiles/core/manager.py +241 -0
  233. autocoder/common/rulefiles/core/selector.py +805 -0
  234. autocoder/common/rulefiles/models/__init__.py +20 -0
  235. autocoder/common/rulefiles/models/index.py +16 -0
  236. autocoder/common/rulefiles/models/init_rule.py +18 -0
  237. autocoder/common/rulefiles/models/rule_file.py +18 -0
  238. autocoder/common/rulefiles/models/rule_relevance.py +14 -0
  239. autocoder/common/rulefiles/models/summary.py +16 -0
  240. autocoder/common/rulefiles/test_rulefiles.py +776 -0
  241. autocoder/common/rulefiles/utils/__init__.py +34 -0
  242. autocoder/common/rulefiles/utils/monitor.py +86 -0
  243. autocoder/common/rulefiles/utils/parser.py +230 -0
  244. autocoder/common/save_formatted_log.py +67 -10
  245. autocoder/common/search_replace.py +8 -1
  246. autocoder/common/search_replace_patch/__init__.py +24 -0
  247. autocoder/common/search_replace_patch/base.py +115 -0
  248. autocoder/common/search_replace_patch/manager.py +248 -0
  249. autocoder/common/search_replace_patch/patch_replacer.py +304 -0
  250. autocoder/common/search_replace_patch/similarity_replacer.py +306 -0
  251. autocoder/common/search_replace_patch/string_replacer.py +181 -0
  252. autocoder/common/search_replace_patch/tests/__init__.py +3 -0
  253. autocoder/common/search_replace_patch/tests/run_tests.py +126 -0
  254. autocoder/common/search_replace_patch/tests/test_base.py +188 -0
  255. autocoder/common/search_replace_patch/tests/test_empty_line_insert.py +233 -0
  256. autocoder/common/search_replace_patch/tests/test_integration.py +389 -0
  257. autocoder/common/search_replace_patch/tests/test_manager.py +351 -0
  258. autocoder/common/search_replace_patch/tests/test_patch_replacer.py +316 -0
  259. autocoder/common/search_replace_patch/tests/test_regex_replacer.py +306 -0
  260. autocoder/common/search_replace_patch/tests/test_similarity_replacer.py +384 -0
  261. autocoder/common/shell_commands/__init__.py +197 -0
  262. autocoder/common/shell_commands/background_process_notifier.py +346 -0
  263. autocoder/common/shell_commands/command_executor.py +1127 -0
  264. autocoder/common/shell_commands/error_recovery.py +541 -0
  265. autocoder/common/shell_commands/exceptions.py +120 -0
  266. autocoder/common/shell_commands/interactive_executor.py +476 -0
  267. autocoder/common/shell_commands/interactive_pexpect_process.py +623 -0
  268. autocoder/common/shell_commands/interactive_process.py +744 -0
  269. autocoder/common/shell_commands/interactive_session_manager.py +1014 -0
  270. autocoder/common/shell_commands/monitoring.py +529 -0
  271. autocoder/common/shell_commands/process_cleanup.py +386 -0
  272. autocoder/common/shell_commands/process_manager.py +606 -0
  273. autocoder/common/shell_commands/test_interactive_pexpect_process.py +281 -0
  274. autocoder/common/shell_commands/tests/__init__.py +6 -0
  275. autocoder/common/shell_commands/tests/conftest.py +118 -0
  276. autocoder/common/shell_commands/tests/test_background_process_notifier.py +703 -0
  277. autocoder/common/shell_commands/tests/test_command_executor.py +448 -0
  278. autocoder/common/shell_commands/tests/test_error_recovery.py +305 -0
  279. autocoder/common/shell_commands/tests/test_exceptions.py +299 -0
  280. autocoder/common/shell_commands/tests/test_execute_batch.py +588 -0
  281. autocoder/common/shell_commands/tests/test_indented_batch_commands.py +244 -0
  282. autocoder/common/shell_commands/tests/test_integration.py +664 -0
  283. autocoder/common/shell_commands/tests/test_monitoring.py +546 -0
  284. autocoder/common/shell_commands/tests/test_performance.py +632 -0
  285. autocoder/common/shell_commands/tests/test_process_cleanup.py +397 -0
  286. autocoder/common/shell_commands/tests/test_process_manager.py +606 -0
  287. autocoder/common/shell_commands/tests/test_timeout_config.py +343 -0
  288. autocoder/common/shell_commands/tests/test_timeout_manager.py +520 -0
  289. autocoder/common/shell_commands/timeout_config.py +315 -0
  290. autocoder/common/shell_commands/timeout_manager.py +352 -0
  291. autocoder/common/terminal_paste/__init__.py +14 -0
  292. autocoder/common/terminal_paste/demo.py +145 -0
  293. autocoder/common/terminal_paste/demo_paste_functionality.py +95 -0
  294. autocoder/common/terminal_paste/paste_handler.py +200 -0
  295. autocoder/common/terminal_paste/paste_manager.py +118 -0
  296. autocoder/common/terminal_paste/tests/__init__.py +1 -0
  297. autocoder/common/terminal_paste/tests/test_paste_handler.py +182 -0
  298. autocoder/common/terminal_paste/tests/test_paste_manager.py +126 -0
  299. autocoder/common/terminal_paste/utils.py +163 -0
  300. autocoder/common/test_autocoder_args.py +232 -0
  301. autocoder/common/test_env_manager.py +173 -0
  302. autocoder/common/test_env_manager_integration.py +159 -0
  303. autocoder/common/text_similarity/__init__.py +9 -0
  304. autocoder/common/text_similarity/demo.py +216 -0
  305. autocoder/common/text_similarity/examples.py +266 -0
  306. autocoder/common/text_similarity/test_text_similarity.py +306 -0
  307. autocoder/common/text_similarity/text_similarity.py +194 -0
  308. autocoder/common/text_similarity/utils.py +125 -0
  309. autocoder/common/todos/__init__.py +61 -0
  310. autocoder/common/todos/cache/__init__.py +16 -0
  311. autocoder/common/todos/cache/base_cache.py +89 -0
  312. autocoder/common/todos/cache/cache_manager.py +228 -0
  313. autocoder/common/todos/cache/memory_cache.py +225 -0
  314. autocoder/common/todos/config.py +155 -0
  315. autocoder/common/todos/exceptions.py +35 -0
  316. autocoder/common/todos/get_todo_manager.py +161 -0
  317. autocoder/common/todos/manager.py +537 -0
  318. autocoder/common/todos/models.py +239 -0
  319. autocoder/common/todos/storage/__init__.py +14 -0
  320. autocoder/common/todos/storage/base_storage.py +76 -0
  321. autocoder/common/todos/storage/file_storage.py +278 -0
  322. autocoder/common/tokens/__init__.py +15 -0
  323. autocoder/common/tokens/counter.py +44 -2
  324. autocoder/common/tools_manager/__init__.py +17 -0
  325. autocoder/common/tools_manager/examples.py +162 -0
  326. autocoder/common/tools_manager/manager.py +385 -0
  327. autocoder/common/tools_manager/models.py +39 -0
  328. autocoder/common/tools_manager/test_tools_manager.py +303 -0
  329. autocoder/common/tools_manager/utils.py +191 -0
  330. autocoder/common/v2/agent/agentic_callbacks.py +270 -0
  331. autocoder/common/v2/agent/agentic_edit.py +2729 -2052
  332. autocoder/common/v2/agent/agentic_edit_change_manager.py +474 -0
  333. autocoder/common/v2/agent/agentic_edit_tools/__init__.py +43 -2
  334. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_list_tool_resolver.py +279 -0
  335. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_read_tool_resolver.py +40 -0
  336. autocoder/common/v2/agent/agentic_edit_tools/ac_mod_write_tool_resolver.py +52 -0
  337. autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +8 -0
  338. autocoder/common/v2/agent/agentic_edit_tools/background_task_tool_resolver.py +1167 -0
  339. autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +2 -2
  340. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_read_tool_resolver.py +214 -0
  341. autocoder/common/v2/agent/agentic_edit_tools/conversation_message_ids_write_tool_resolver.py +299 -0
  342. autocoder/common/v2/agent/agentic_edit_tools/count_tokens_tool_resolver.py +290 -0
  343. autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +565 -30
  344. autocoder/common/v2/agent/agentic_edit_tools/execute_workflow_tool_resolver.py +485 -0
  345. autocoder/common/v2/agent/agentic_edit_tools/extract_to_text_tool_resolver.py +225 -0
  346. autocoder/common/v2/agent/agentic_edit_tools/lint_report.py +79 -0
  347. autocoder/common/v2/agent/agentic_edit_tools/linter_config_models.py +343 -0
  348. autocoder/common/v2/agent/agentic_edit_tools/linter_enabled_tool_resolver.py +189 -0
  349. autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +169 -101
  350. autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +349 -0
  351. autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +244 -51
  352. autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +667 -147
  353. autocoder/common/v2/agent/agentic_edit_tools/run_named_subagents_tool_resolver.py +691 -0
  354. autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +409 -140
  355. autocoder/common/v2/agent/agentic_edit_tools/session_interactive_tool_resolver.py +115 -0
  356. autocoder/common/v2/agent/agentic_edit_tools/session_start_tool_resolver.py +190 -0
  357. autocoder/common/v2/agent/agentic_edit_tools/session_stop_tool_resolver.py +76 -0
  358. autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +209 -194
  359. autocoder/common/v2/agent/agentic_edit_tools/todo_read_tool_resolver.py +135 -0
  360. autocoder/common/v2/agent/agentic_edit_tools/todo_write_tool_resolver.py +328 -0
  361. autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +2 -2
  362. autocoder/common/v2/agent/agentic_edit_tools/web_crawl_tool_resolver.py +557 -0
  363. autocoder/common/v2/agent/agentic_edit_tools/web_search_tool_resolver.py +600 -0
  364. autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +56 -121
  365. autocoder/common/v2/agent/agentic_edit_types.py +386 -10
  366. autocoder/common/v2/agent/runner/__init__.py +31 -0
  367. autocoder/common/v2/agent/runner/base_runner.py +92 -0
  368. autocoder/common/v2/agent/runner/file_based_event_runner.py +217 -0
  369. autocoder/common/v2/agent/runner/sdk_runner.py +182 -0
  370. autocoder/common/v2/agent/runner/terminal_runner.py +396 -0
  371. autocoder/common/v2/agent/runner/tool_display.py +589 -0
  372. autocoder/common/v2/agent/test_agentic_callbacks.py +265 -0
  373. autocoder/common/v2/agent/test_agentic_edit.py +194 -0
  374. autocoder/common/v2/agent/tool_caller/__init__.py +24 -0
  375. autocoder/common/v2/agent/tool_caller/default_tool_resolver_map.py +135 -0
  376. autocoder/common/v2/agent/tool_caller/integration_test.py +172 -0
  377. autocoder/common/v2/agent/tool_caller/plugins/__init__.py +14 -0
  378. autocoder/common/v2/agent/tool_caller/plugins/base_plugin.py +126 -0
  379. autocoder/common/v2/agent/tool_caller/plugins/examples/__init__.py +13 -0
  380. autocoder/common/v2/agent/tool_caller/plugins/examples/logging_plugin.py +164 -0
  381. autocoder/common/v2/agent/tool_caller/plugins/examples/security_filter_plugin.py +198 -0
  382. autocoder/common/v2/agent/tool_caller/plugins/plugin_interface.py +141 -0
  383. autocoder/common/v2/agent/tool_caller/test_tool_caller.py +278 -0
  384. autocoder/common/v2/agent/tool_caller/tool_call_plugin_manager.py +331 -0
  385. autocoder/common/v2/agent/tool_caller/tool_caller.py +337 -0
  386. autocoder/common/v2/agent/tool_caller/usage_example.py +193 -0
  387. autocoder/common/v2/code_agentic_editblock_manager.py +4 -4
  388. autocoder/common/v2/code_auto_generate.py +136 -78
  389. autocoder/common/v2/code_auto_generate_diff.py +135 -79
  390. autocoder/common/v2/code_auto_generate_editblock.py +174 -99
  391. autocoder/common/v2/code_auto_generate_strict_diff.py +151 -71
  392. autocoder/common/v2/code_auto_merge.py +1 -1
  393. autocoder/common/v2/code_auto_merge_editblock.py +13 -1
  394. autocoder/common/v2/code_diff_manager.py +3 -3
  395. autocoder/common/v2/code_editblock_manager.py +4 -14
  396. autocoder/common/v2/code_manager.py +1 -1
  397. autocoder/common/v2/code_strict_diff_manager.py +2 -2
  398. autocoder/common/wrap_llm_hint/__init__.py +10 -0
  399. autocoder/common/wrap_llm_hint/test_wrap_llm_hint.py +1067 -0
  400. autocoder/common/wrap_llm_hint/utils.py +432 -0
  401. autocoder/common/wrap_llm_hint/wrap_llm_hint.py +323 -0
  402. autocoder/completer/__init__.py +8 -0
  403. autocoder/completer/command_completer_v2.py +1051 -0
  404. autocoder/default_project/__init__.py +501 -0
  405. autocoder/dispacher/__init__.py +4 -12
  406. autocoder/dispacher/actions/action.py +165 -7
  407. autocoder/dispacher/actions/plugins/action_regex_project.py +2 -2
  408. autocoder/index/entry.py +117 -125
  409. autocoder/{agent → index/filter}/agentic_filter.py +323 -334
  410. autocoder/index/filter/normal_filter.py +5 -11
  411. autocoder/index/filter/quick_filter.py +1 -1
  412. autocoder/index/index.py +36 -9
  413. autocoder/index/tests/__init__.py +1 -0
  414. autocoder/index/tests/run_tests.py +195 -0
  415. autocoder/index/tests/test_entry.py +303 -0
  416. autocoder/index/tests/test_index_manager.py +314 -0
  417. autocoder/index/tests/test_module_integration.py +300 -0
  418. autocoder/index/tests/test_symbols_utils.py +183 -0
  419. autocoder/inner/__init__.py +4 -0
  420. autocoder/inner/agentic.py +932 -0
  421. autocoder/inner/async_command_handler.py +992 -0
  422. autocoder/inner/conversation_command_handlers.py +623 -0
  423. autocoder/inner/merge_command_handler.py +213 -0
  424. autocoder/inner/queue_command_handler.py +684 -0
  425. autocoder/models.py +95 -266
  426. autocoder/plugins/git_helper_plugin.py +31 -29
  427. autocoder/plugins/token_helper_plugin.py +156 -37
  428. autocoder/pyproject/__init__.py +32 -29
  429. autocoder/rag/agentic_rag.py +215 -75
  430. autocoder/rag/cache/simple_cache.py +1 -2
  431. autocoder/rag/loaders/image_loader.py +1 -1
  432. autocoder/rag/long_context_rag.py +42 -26
  433. autocoder/rag/qa_conversation_strategy.py +1 -1
  434. autocoder/rag/terminal/__init__.py +17 -0
  435. autocoder/rag/terminal/args.py +581 -0
  436. autocoder/rag/terminal/bootstrap.py +61 -0
  437. autocoder/rag/terminal/command_handlers.py +653 -0
  438. autocoder/rag/terminal/formatters/__init__.py +20 -0
  439. autocoder/rag/terminal/formatters/base.py +70 -0
  440. autocoder/rag/terminal/formatters/json_format.py +66 -0
  441. autocoder/rag/terminal/formatters/stream_json.py +95 -0
  442. autocoder/rag/terminal/formatters/text.py +28 -0
  443. autocoder/rag/terminal/init.py +120 -0
  444. autocoder/rag/terminal/utils.py +106 -0
  445. autocoder/rag/test_agentic_rag.py +389 -0
  446. autocoder/rag/test_doc_filter.py +3 -3
  447. autocoder/rag/test_long_context_rag.py +1 -1
  448. autocoder/rag/test_token_limiter.py +517 -10
  449. autocoder/rag/token_counter.py +3 -0
  450. autocoder/rag/token_limiter.py +19 -15
  451. autocoder/rag/tools/__init__.py +26 -2
  452. autocoder/rag/tools/bochaai_example.py +343 -0
  453. autocoder/rag/tools/bochaai_sdk.py +541 -0
  454. autocoder/rag/tools/metaso_example.py +268 -0
  455. autocoder/rag/tools/metaso_sdk.py +417 -0
  456. autocoder/rag/tools/recall_tool.py +28 -7
  457. autocoder/rag/tools/run_integration_tests.py +204 -0
  458. autocoder/rag/tools/test_all_providers.py +318 -0
  459. autocoder/rag/tools/test_bochaai_integration.py +482 -0
  460. autocoder/rag/tools/test_final_integration.py +215 -0
  461. autocoder/rag/tools/test_metaso_integration.py +424 -0
  462. autocoder/rag/tools/test_metaso_real.py +171 -0
  463. autocoder/rag/tools/test_web_crawl_tool.py +639 -0
  464. autocoder/rag/tools/test_web_search_tool.py +509 -0
  465. autocoder/rag/tools/todo_read_tool.py +202 -0
  466. autocoder/rag/tools/todo_write_tool.py +412 -0
  467. autocoder/rag/tools/web_crawl_tool.py +634 -0
  468. autocoder/rag/tools/web_search_tool.py +558 -0
  469. autocoder/rag/tools/web_tools_example.py +119 -0
  470. autocoder/rag/types.py +16 -0
  471. autocoder/rag/variable_holder.py +4 -2
  472. autocoder/rags.py +86 -79
  473. autocoder/regexproject/__init__.py +23 -21
  474. autocoder/run_context.py +9 -0
  475. autocoder/sdk/__init__.py +50 -161
  476. autocoder/sdk/api.py +370 -0
  477. autocoder/sdk/async_runner/__init__.py +26 -0
  478. autocoder/sdk/async_runner/async_executor.py +650 -0
  479. autocoder/sdk/async_runner/async_handler.py +356 -0
  480. autocoder/sdk/async_runner/markdown_processor.py +595 -0
  481. autocoder/sdk/async_runner/task_metadata.py +284 -0
  482. autocoder/sdk/async_runner/worktree_manager.py +438 -0
  483. autocoder/sdk/cli/__init__.py +2 -5
  484. autocoder/sdk/cli/formatters.py +28 -204
  485. autocoder/sdk/cli/handlers.py +77 -44
  486. autocoder/sdk/cli/main.py +158 -170
  487. autocoder/sdk/cli/options.py +95 -22
  488. autocoder/sdk/constants.py +139 -51
  489. autocoder/sdk/core/auto_coder_core.py +484 -267
  490. autocoder/sdk/core/bridge.py +298 -118
  491. autocoder/sdk/exceptions.py +18 -12
  492. autocoder/sdk/formatters/__init__.py +19 -0
  493. autocoder/sdk/formatters/input.py +64 -0
  494. autocoder/sdk/formatters/output.py +247 -0
  495. autocoder/sdk/formatters/stream.py +54 -0
  496. autocoder/sdk/models/__init__.py +6 -5
  497. autocoder/sdk/models/options.py +55 -18
  498. autocoder/sdk/utils/formatters.py +27 -195
  499. autocoder/suffixproject/__init__.py +28 -25
  500. autocoder/terminal/__init__.py +14 -0
  501. autocoder/terminal/app.py +454 -0
  502. autocoder/terminal/args.py +32 -0
  503. autocoder/terminal/bootstrap.py +178 -0
  504. autocoder/terminal/command_processor.py +521 -0
  505. autocoder/terminal/command_registry.py +57 -0
  506. autocoder/terminal/help.py +97 -0
  507. autocoder/terminal/tasks/__init__.py +5 -0
  508. autocoder/terminal/tasks/background.py +77 -0
  509. autocoder/terminal/tasks/task_event.py +70 -0
  510. autocoder/terminal/ui/__init__.py +13 -0
  511. autocoder/terminal/ui/completer.py +268 -0
  512. autocoder/terminal/ui/keybindings.py +75 -0
  513. autocoder/terminal/ui/session.py +41 -0
  514. autocoder/terminal/ui/toolbar.py +64 -0
  515. autocoder/terminal/utils/__init__.py +13 -0
  516. autocoder/terminal/utils/errors.py +18 -0
  517. autocoder/terminal/utils/paths.py +19 -0
  518. autocoder/terminal/utils/shell.py +43 -0
  519. autocoder/terminal_v3/__init__.py +10 -0
  520. autocoder/terminal_v3/app.py +201 -0
  521. autocoder/terminal_v3/handlers/__init__.py +5 -0
  522. autocoder/terminal_v3/handlers/command_handler.py +131 -0
  523. autocoder/terminal_v3/models/__init__.py +6 -0
  524. autocoder/terminal_v3/models/conversation_buffer.py +214 -0
  525. autocoder/terminal_v3/models/message.py +50 -0
  526. autocoder/terminal_v3/models/tool_display.py +247 -0
  527. autocoder/terminal_v3/ui/__init__.py +7 -0
  528. autocoder/terminal_v3/ui/keybindings.py +56 -0
  529. autocoder/terminal_v3/ui/layout.py +141 -0
  530. autocoder/terminal_v3/ui/styles.py +43 -0
  531. autocoder/tsproject/__init__.py +23 -23
  532. autocoder/utils/auto_coder_utils/chat_stream_out.py +1 -1
  533. autocoder/utils/llms.py +88 -80
  534. autocoder/utils/math_utils.py +101 -0
  535. autocoder/utils/model_provider_selector.py +16 -4
  536. autocoder/utils/operate_config_api.py +33 -5
  537. autocoder/utils/thread_utils.py +2 -2
  538. autocoder/version.py +4 -2
  539. autocoder/workflow_agents/__init__.py +84 -0
  540. autocoder/workflow_agents/agent.py +143 -0
  541. autocoder/workflow_agents/exceptions.py +573 -0
  542. autocoder/workflow_agents/executor.py +489 -0
  543. autocoder/workflow_agents/loader.py +737 -0
  544. autocoder/workflow_agents/runner.py +267 -0
  545. autocoder/workflow_agents/types.py +172 -0
  546. autocoder/workflow_agents/utils.py +434 -0
  547. autocoder/workflow_agents/workflow_manager.py +211 -0
  548. auto_coder-0.1.400.dist-info/METADATA +0 -396
  549. auto_coder-0.1.400.dist-info/RECORD +0 -425
  550. auto_coder-0.1.400.dist-info/licenses/LICENSE +0 -201
  551. autocoder/auto_coder_server.py +0 -672
  552. autocoder/benchmark.py +0 -138
  553. autocoder/common/ac_style_command_parser/example.py +0 -7
  554. autocoder/common/cleaner.py +0 -31
  555. autocoder/common/command_completer_v2.py +0 -615
  556. autocoder/common/directory_cache/__init__.py +0 -1
  557. autocoder/common/directory_cache/cache.py +0 -192
  558. autocoder/common/directory_cache/test_cache.py +0 -190
  559. autocoder/common/file_checkpoint/examples.py +0 -217
  560. autocoder/common/llm_friendly_package_example.py +0 -138
  561. autocoder/common/llm_friendly_package_test.py +0 -63
  562. autocoder/common/pull_requests/test_module.py +0 -1
  563. autocoder/common/rulefiles/autocoderrules_utils.py +0 -484
  564. autocoder/common/text.py +0 -30
  565. autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -42
  566. autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -70
  567. autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -163
  568. autocoder/common/v2/agent/agentic_tool_display.py +0 -183
  569. autocoder/plugins/dynamic_completion_example.py +0 -148
  570. autocoder/plugins/sample_plugin.py +0 -160
  571. autocoder/sdk/cli/__main__.py +0 -26
  572. autocoder/sdk/cli/completion_wrapper.py +0 -38
  573. autocoder/sdk/cli/install_completion.py +0 -301
  574. autocoder/sdk/models/messages.py +0 -209
  575. autocoder/sdk/session/__init__.py +0 -32
  576. autocoder/sdk/session/session.py +0 -106
  577. autocoder/sdk/session/session_manager.py +0 -56
  578. {auto_coder-0.1.400.dist-info → auto_coder-2.0.0.dist-info}/top_level.txt +0 -0
  579. /autocoder/{sdk/example.py → common/agent_query_queue/__init__.py} +0 -0
@@ -0,0 +1,109 @@
1
+ """
2
+ Agentic Mode management functionality.
3
+
4
+ This module provides agentic_mode configuration management methods for auto-coder sessions,
5
+ including getting, setting, and toggling the agentic_mode between plan and act.
6
+ """
7
+
8
+ from typing import TYPE_CHECKING
9
+
10
+ if TYPE_CHECKING:
11
+ from .models import CoreMemory
12
+
13
+
14
+ class AgenticModeManagerMixin:
15
+ """Mixin class providing agentic_mode management functionality."""
16
+
17
+ # Available modes
18
+ AGENTIC_MODES = ["plan", "act"]
19
+ DEFAULT_AGENTIC_MODE = "act"
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_agentic_mode(self) -> str:
29
+ """
30
+ Get current agentic_mode status.
31
+
32
+ Returns:
33
+ Current agentic_mode ("plan" or "act"), defaults to "act"
34
+ """
35
+ # Ensure conf dict exists
36
+ if "conf" not in self._memory.__dict__ or self._memory.conf is None:
37
+ self._memory.conf = {}
38
+
39
+ # Get the value, defaulting to "act" if not set
40
+ mode = self._memory.conf.get("agentic_mode", self.DEFAULT_AGENTIC_MODE)
41
+
42
+ # Validate mode
43
+ if mode not in self.AGENTIC_MODES:
44
+ mode = self.DEFAULT_AGENTIC_MODE
45
+ self._memory.conf["agentic_mode"] = mode
46
+
47
+ return mode
48
+
49
+ def set_agentic_mode(self, mode: str):
50
+ """
51
+ Set agentic_mode.
52
+
53
+ Args:
54
+ mode: Mode to set ("plan" or "act")
55
+ """
56
+ if mode not in self.AGENTIC_MODES:
57
+ raise ValueError(f"Invalid agentic_mode: {mode}. Valid modes: {self.AGENTIC_MODES}")
58
+
59
+ # Ensure conf dict exists
60
+ if "conf" not in self._memory.__dict__ or self._memory.conf is None:
61
+ self._memory.conf = {}
62
+
63
+ self._memory.conf["agentic_mode"] = mode
64
+ self.save_memory()
65
+
66
+ def toggle_agentic_mode(self) -> str:
67
+ """
68
+ Toggle agentic_mode between plan and act.
69
+
70
+ Returns:
71
+ New mode after toggling ("plan" or "act")
72
+ """
73
+ current_mode = self.get_agentic_mode()
74
+ new_mode = "act" if current_mode == "plan" else "plan"
75
+ self.set_agentic_mode(new_mode)
76
+ return new_mode
77
+
78
+ def is_agentic_plan_mode(self) -> bool:
79
+ """Check if current agentic_mode is plan."""
80
+ return self.get_agentic_mode() == "plan"
81
+
82
+ def is_agentic_act_mode(self) -> bool:
83
+ """Check if current agentic_mode is act."""
84
+ return self.get_agentic_mode() == "act"
85
+
86
+ def get_agentic_mode_string(self) -> str:
87
+ """
88
+ Get agentic_mode status as string for display.
89
+
90
+ Returns:
91
+ Current agentic_mode ("plan" or "act")
92
+ """
93
+ return self.get_agentic_mode()
94
+
95
+ def ensure_agentic_mode_config(self):
96
+ """
97
+ Ensure agentic_mode configuration exists with default value.
98
+
99
+ Returns:
100
+ Current agentic_mode
101
+ """
102
+ if "conf" not in self._memory.__dict__ or self._memory.conf is None:
103
+ self._memory.conf = {}
104
+
105
+ if "agentic_mode" not in self._memory.conf:
106
+ self._memory.conf["agentic_mode"] = self.DEFAULT_AGENTIC_MODE
107
+ self.save_memory()
108
+
109
+ return self.get_agentic_mode()
@@ -0,0 +1,123 @@
1
+ """
2
+ Base memory manager providing core persistence functionality.
3
+
4
+ This module contains the base MemoryManager class with core functionality
5
+ for loading, saving, and managing memory persistence.
6
+ """
7
+
8
+ import os
9
+ import json
10
+ import threading
11
+ from typing import Dict, Any, Optional
12
+ from filelock import FileLock
13
+ from loguru import logger
14
+
15
+ from .models import CoreMemory
16
+
17
+
18
+ class BaseMemoryManager:
19
+ """
20
+ Base memory manager providing core persistence functionality.
21
+
22
+ This class handles:
23
+ - Memory persistence (load/save)
24
+ - File locking for thread safety
25
+ - Singleton pattern management
26
+ - Directory creation
27
+ """
28
+
29
+ _instances: Dict[str, 'BaseMemoryManager'] = {}
30
+ _lock = threading.Lock()
31
+
32
+ def __new__(cls, project_root: Optional[str] = None):
33
+ """Ensure singleton pattern for each project root."""
34
+ root = os.path.abspath(project_root or os.getcwd())
35
+ with cls._lock:
36
+ if root not in cls._instances:
37
+ instance = super().__new__(cls)
38
+ cls._instances[root] = instance
39
+ return cls._instances[root]
40
+
41
+ def __init__(self, project_root: Optional[str] = None):
42
+ """
43
+ Initialize base memory manager.
44
+
45
+ Args:
46
+ project_root: Project root directory. If None, uses current working directory.
47
+ """
48
+ # Prevent re-initialization of singleton
49
+ if hasattr(self, '_initialized'):
50
+ return
51
+
52
+ self.project_root = os.path.abspath(project_root or os.getcwd())
53
+ self.base_persist_dir = os.path.join(
54
+ self.project_root, ".auto-coder", "plugins", "chat-auto-coder"
55
+ )
56
+ self._memory = CoreMemory()
57
+ self._ensure_dirs()
58
+ self.load_memory()
59
+ self._initialized = True
60
+
61
+ @classmethod
62
+ def get_instance(cls, project_root: Optional[str] = None) -> 'BaseMemoryManager':
63
+ """
64
+ Get singleton instance for a project root.
65
+
66
+ Args:
67
+ project_root: Project root directory. If None, uses current working directory.
68
+
69
+ Returns:
70
+ BaseMemoryManager instance
71
+ """
72
+ root = os.path.abspath(project_root or os.getcwd())
73
+ return cls(root)
74
+
75
+ def _ensure_dirs(self):
76
+ """Ensure persistence directories exist."""
77
+ os.makedirs(self.base_persist_dir, exist_ok=True)
78
+
79
+ @property
80
+ def memory_path(self) -> str:
81
+ """Get memory file path."""
82
+ return os.path.join(self.base_persist_dir, "memory.json")
83
+
84
+ @property
85
+ def lock_path(self) -> str:
86
+ """Get lock file path."""
87
+ return self.memory_path + ".lock"
88
+
89
+ def save_memory(self):
90
+ """Save current memory to disk."""
91
+ with FileLock(self.lock_path, timeout=30):
92
+ with open(self.memory_path, "w", encoding="utf-8") as f:
93
+ json.dump(self._memory.to_dict(), f, indent=2, ensure_ascii=False)
94
+
95
+ logger.debug(f"Memory saved to {self.memory_path}")
96
+
97
+ def save_memory_with_new_memory(self, new_memory: Dict[str, Any]):
98
+ """Save new memory data to disk."""
99
+ with FileLock(self.lock_path, timeout=30):
100
+ with open(self.memory_path, "w", encoding="utf-8") as f:
101
+ json.dump(new_memory, f, indent=2, ensure_ascii=False)
102
+ # Update internal memory state while we have the lock
103
+ self._memory = CoreMemory.from_dict(new_memory)
104
+
105
+ logger.debug(f"New memory saved to {self.memory_path}")
106
+
107
+ def load_memory(self) -> CoreMemory:
108
+ """Load memory from disk."""
109
+ if os.path.exists(self.memory_path):
110
+ with FileLock(self.lock_path, timeout=30):
111
+ with open(self.memory_path, "r", encoding="utf-8") as f:
112
+ data = json.load(f)
113
+ self._memory = CoreMemory.from_dict(data)
114
+ logger.debug(f"Memory loaded from {self.memory_path}")
115
+ return self._memory
116
+
117
+ def get_memory(self) -> CoreMemory:
118
+ """Get current memory (reloads from disk)."""
119
+ return self.load_memory()
120
+
121
+ def get_memory_dict(self) -> Dict[str, Any]:
122
+ """Get memory as dictionary."""
123
+ return self.get_memory().to_dict()
@@ -0,0 +1,151 @@
1
+ """
2
+ Compatibility functions for backward compatibility.
3
+
4
+ This module provides functions that maintain compatibility with
5
+ existing code that uses the old memory management interface.
6
+ """
7
+
8
+ import threading
9
+ from typing import Dict, Any, Optional, TYPE_CHECKING
10
+ from .main_manager import get_memory_manager
11
+
12
+ if TYPE_CHECKING:
13
+ from .main_manager import MemoryManager
14
+
15
+ # Global instance cache for compatibility
16
+ _default_memory_manager: Optional['MemoryManager'] = None
17
+ _default_memory_manager_lock = threading.Lock()
18
+
19
+
20
+ def save_memory():
21
+ """Save memory (compatibility function)."""
22
+ global _default_memory_manager
23
+ with _default_memory_manager_lock:
24
+ if _default_memory_manager is None:
25
+ _default_memory_manager = get_memory_manager()
26
+ _default_memory_manager.save_memory()
27
+
28
+
29
+ def save_memory_with_new_memory(new_memory: Dict[str, Any]):
30
+ """Save new memory (compatibility function)."""
31
+ global _default_memory_manager
32
+ with _default_memory_manager_lock:
33
+ if _default_memory_manager is None:
34
+ _default_memory_manager = get_memory_manager()
35
+ _default_memory_manager.save_memory_with_new_memory(new_memory)
36
+
37
+
38
+ def load_memory() -> Dict[str, Any]:
39
+ """Load memory (compatibility function)."""
40
+ global _default_memory_manager
41
+ with _default_memory_manager_lock:
42
+ if _default_memory_manager is None:
43
+ _default_memory_manager = get_memory_manager()
44
+ return _default_memory_manager.get_memory_dict()
45
+
46
+
47
+ def get_memory() -> Dict[str, Any]:
48
+ """Get memory (compatibility function)."""
49
+ return load_memory()
50
+
51
+
52
+ # Mode management compatibility functions
53
+ def get_mode() -> str:
54
+ """Get current mode (compatibility function)."""
55
+ global _default_memory_manager
56
+ with _default_memory_manager_lock:
57
+ if _default_memory_manager is None:
58
+ _default_memory_manager = get_memory_manager()
59
+ return _default_memory_manager.get_mode()
60
+
61
+
62
+ def set_mode(mode: str):
63
+ """Set mode (compatibility function)."""
64
+ global _default_memory_manager
65
+ with _default_memory_manager_lock:
66
+ if _default_memory_manager is None:
67
+ _default_memory_manager = get_memory_manager()
68
+ _default_memory_manager.set_mode(mode)
69
+
70
+
71
+ def cycle_mode() -> str:
72
+ """Cycle mode (compatibility function)."""
73
+ global _default_memory_manager
74
+ with _default_memory_manager_lock:
75
+ if _default_memory_manager is None:
76
+ _default_memory_manager = get_memory_manager()
77
+ return _default_memory_manager.cycle_mode()
78
+
79
+
80
+ # Human as model management compatibility functions
81
+ def get_human_as_model() -> bool:
82
+ """Get human_as_model status (compatibility function)."""
83
+ global _default_memory_manager
84
+ with _default_memory_manager_lock:
85
+ if _default_memory_manager is None:
86
+ _default_memory_manager = get_memory_manager()
87
+ return _default_memory_manager.get_human_as_model()
88
+
89
+
90
+ def set_human_as_model(enabled: bool):
91
+ """Set human_as_model status (compatibility function)."""
92
+ global _default_memory_manager
93
+ with _default_memory_manager_lock:
94
+ if _default_memory_manager is None:
95
+ _default_memory_manager = get_memory_manager()
96
+ _default_memory_manager.set_human_as_model(enabled)
97
+
98
+
99
+ def toggle_human_as_model() -> bool:
100
+ """Toggle human_as_model status (compatibility function)."""
101
+ global _default_memory_manager
102
+ with _default_memory_manager_lock:
103
+ if _default_memory_manager is None:
104
+ _default_memory_manager = get_memory_manager()
105
+ return _default_memory_manager.toggle_human_as_model()
106
+
107
+
108
+ def get_human_as_model_string() -> str:
109
+ """Get human_as_model status as string (compatibility function)."""
110
+ global _default_memory_manager
111
+ with _default_memory_manager_lock:
112
+ if _default_memory_manager is None:
113
+ _default_memory_manager = get_memory_manager()
114
+ return _default_memory_manager.get_human_as_model_string()
115
+
116
+
117
+ # Agentic mode management compatibility functions
118
+ def get_agentic_mode() -> str:
119
+ """Get agentic_mode status (compatibility function)."""
120
+ global _default_memory_manager
121
+ with _default_memory_manager_lock:
122
+ if _default_memory_manager is None:
123
+ _default_memory_manager = get_memory_manager()
124
+ return _default_memory_manager.get_agentic_mode()
125
+
126
+
127
+ def set_agentic_mode(mode: str):
128
+ """Set agentic_mode (compatibility function)."""
129
+ global _default_memory_manager
130
+ with _default_memory_manager_lock:
131
+ if _default_memory_manager is None:
132
+ _default_memory_manager = get_memory_manager()
133
+ _default_memory_manager.set_agentic_mode(mode)
134
+
135
+
136
+ def toggle_agentic_mode() -> str:
137
+ """Toggle agentic_mode (compatibility function)."""
138
+ global _default_memory_manager
139
+ with _default_memory_manager_lock:
140
+ if _default_memory_manager is None:
141
+ _default_memory_manager = get_memory_manager()
142
+ return _default_memory_manager.toggle_agentic_mode()
143
+
144
+
145
+ def get_agentic_mode_string() -> str:
146
+ """Get agentic_mode status as string (compatibility function)."""
147
+ global _default_memory_manager
148
+ with _default_memory_manager_lock:
149
+ if _default_memory_manager is None:
150
+ _default_memory_manager = get_memory_manager()
151
+ return _default_memory_manager.get_agentic_mode_string()
@@ -0,0 +1,156 @@
1
+ """
2
+ Configuration management functionality.
3
+
4
+ This module provides configuration management methods including
5
+ basic configuration, batch operations, and nested configuration support.
6
+ """
7
+
8
+ from typing import Dict, Any, List
9
+ from .base_manager import BaseMemoryManager
10
+
11
+
12
+ class ConfigManagerMixin:
13
+ """Mixin class providing configuration management functionality."""
14
+
15
+ def get_config(self, key: str, default: Any = None) -> Any:
16
+ """Get configuration value."""
17
+ return self._memory.conf.get(key, default)
18
+
19
+ def set_config(self, key: str, value: Any):
20
+ """Set configuration value."""
21
+ self._memory.conf[key] = value
22
+ self.save_memory()
23
+
24
+ def delete_config(self, key: str) -> bool:
25
+ """Delete configuration value."""
26
+ if key in self._memory.conf:
27
+ del self._memory.conf[key]
28
+ self.save_memory()
29
+ return True
30
+ return False
31
+
32
+ def has_config(self, key: str) -> bool:
33
+ """Check if configuration key exists."""
34
+ return key in self._memory.conf
35
+
36
+ # Extended configuration management methods
37
+ def get_all_config(self) -> Dict[str, Any]:
38
+ """Get all configuration as a dictionary."""
39
+ return self._memory.conf.copy()
40
+
41
+ def set_configs(self, config_dict: Dict[str, Any]):
42
+ """Set multiple configuration values at once."""
43
+ for key, value in config_dict.items():
44
+ self._memory.conf[key] = value
45
+ self.save_memory()
46
+
47
+ def update_config(self, config_dict: Dict[str, Any]):
48
+ """Update configuration with new values (alias for set_configs)."""
49
+ self.set_configs(config_dict)
50
+
51
+ def clear_config(self):
52
+ """Clear all configuration."""
53
+ self._memory.conf.clear()
54
+ self.save_memory()
55
+
56
+ def get_config_keys(self) -> List[str]:
57
+ """Get list of all configuration keys."""
58
+ return list(self._memory.conf.keys())
59
+
60
+ def get_config_count(self) -> int:
61
+ """Get number of configuration items."""
62
+ return len(self._memory.conf)
63
+
64
+ # Nested configuration support (for keys like "model.name")
65
+ def get_nested_config(self, key: str, default: Any = None) -> Any:
66
+ """
67
+ Get nested configuration value using dot notation.
68
+
69
+ Args:
70
+ key: Nested key like "model.name" or "database.host"
71
+ default: Default value if key not found
72
+
73
+ Returns:
74
+ Configuration value or default
75
+ """
76
+ keys = key.split('.')
77
+ value = self._memory.conf
78
+
79
+ try:
80
+ for k in keys:
81
+ value = value[k]
82
+ return value
83
+ except (KeyError, TypeError):
84
+ return default
85
+
86
+ def set_nested_config(self, key: str, value: Any):
87
+ """
88
+ Set nested configuration value using dot notation.
89
+
90
+ Args:
91
+ key: Nested key like "model.name" or "database.host"
92
+ value: Value to set
93
+ """
94
+ keys = key.split('.')
95
+ config = self._memory.conf
96
+
97
+ # Navigate to the parent of the final key
98
+ for k in keys[:-1]:
99
+ if k not in config:
100
+ config[k] = {}
101
+ elif not isinstance(config[k], dict):
102
+ # If existing value is not a dict, replace it
103
+ config[k] = {}
104
+ config = config[k]
105
+
106
+ # Set the final value
107
+ config[keys[-1]] = value
108
+ self.save_memory()
109
+
110
+ def delete_nested_config(self, key: str) -> bool:
111
+ """
112
+ Delete nested configuration value using dot notation.
113
+
114
+ Args:
115
+ key: Nested key like "model.name" or "database.host"
116
+
117
+ Returns:
118
+ True if key was found and deleted, False otherwise
119
+ """
120
+ keys = key.split('.')
121
+ config = self._memory.conf
122
+
123
+ try:
124
+ # Navigate to the parent of the final key
125
+ for k in keys[:-1]:
126
+ config = config[k]
127
+
128
+ # Delete the final key
129
+ if keys[-1] in config:
130
+ del config[keys[-1]]
131
+ self.save_memory()
132
+ return True
133
+ else:
134
+ return False
135
+ except (KeyError, TypeError):
136
+ return False
137
+
138
+ def has_nested_config(self, key: str) -> bool:
139
+ """
140
+ Check if nested configuration key exists using dot notation.
141
+
142
+ Args:
143
+ key: Nested key like "model.name" or "database.host"
144
+
145
+ Returns:
146
+ True if key exists, False otherwise
147
+ """
148
+ keys = key.split('.')
149
+ config = self._memory.conf
150
+
151
+ try:
152
+ for k in keys:
153
+ config = config[k]
154
+ return True
155
+ except (KeyError, TypeError):
156
+ return False
@@ -0,0 +1,31 @@
1
+ """
2
+ Conversation management functionality.
3
+
4
+ This module provides methods for managing conversation history.
5
+ """
6
+
7
+ from typing import Dict, Any, List
8
+ from .models import ConversationList
9
+
10
+
11
+ class ConversationManagerMixin:
12
+ """Mixin class providing conversation management functionality."""
13
+
14
+ def get_conversation(self) -> ConversationList:
15
+ """Get conversation history."""
16
+ return self._memory.conversation.copy()
17
+
18
+ def add_conversation_message(self, role: str, content: str):
19
+ """Add a message to conversation history."""
20
+ self._memory.conversation.append({"role": role, "content": content})
21
+ self.save_memory()
22
+
23
+ def clear_conversation(self):
24
+ """Clear conversation history."""
25
+ self._memory.conversation = []
26
+ self.save_memory()
27
+
28
+ def set_conversation(self, conversation: ConversationList):
29
+ """Set entire conversation history."""
30
+ self._memory.conversation = conversation
31
+ self.save_memory()
@@ -0,0 +1,72 @@
1
+ """
2
+ Exclude management functionality.
3
+
4
+ This module provides methods for managing excluded files and directories.
5
+ """
6
+
7
+ from typing import List
8
+ from .models import FileList
9
+
10
+
11
+ class ExcludeManagerMixin:
12
+ """Mixin class providing exclude management functionality."""
13
+
14
+ # ===== Exclude Files Management =====
15
+ def get_exclude_files(self) -> FileList:
16
+ """Get exclude file patterns."""
17
+ return self._memory.exclude_files.copy()
18
+
19
+ def add_exclude_files(self, patterns: FileList) -> FileList:
20
+ """Add exclude file patterns (avoiding duplicates)."""
21
+ existing_patterns = set(self._memory.exclude_files)
22
+ new_patterns = [p for p in patterns if p not in existing_patterns]
23
+ if new_patterns:
24
+ self._memory.exclude_files.extend(new_patterns)
25
+ self.save_memory()
26
+ return new_patterns
27
+
28
+ def remove_exclude_files(self, patterns: FileList) -> FileList:
29
+ """Remove exclude file patterns."""
30
+ removed_patterns = []
31
+ for pattern in patterns:
32
+ if pattern in self._memory.exclude_files:
33
+ self._memory.exclude_files.remove(pattern)
34
+ removed_patterns.append(pattern)
35
+ if removed_patterns:
36
+ self.save_memory()
37
+ return removed_patterns
38
+
39
+ def clear_exclude_files(self):
40
+ """Clear all exclude file patterns."""
41
+ self._memory.exclude_files = []
42
+ self.save_memory()
43
+
44
+ # ===== Exclude Directories Management =====
45
+ def get_exclude_dirs(self) -> List[str]:
46
+ """Get exclude directories."""
47
+ return self._memory.exclude_dirs.copy()
48
+
49
+ def add_exclude_dirs(self, dirs: List[str]) -> List[str]:
50
+ """Add exclude directories (avoiding duplicates)."""
51
+ existing_dirs = set(self._memory.exclude_dirs)
52
+ new_dirs = [d for d in dirs if d not in existing_dirs]
53
+ if new_dirs:
54
+ self._memory.exclude_dirs.extend(new_dirs)
55
+ self.save_memory()
56
+ return new_dirs
57
+
58
+ def remove_exclude_dirs(self, dirs: List[str]) -> List[str]:
59
+ """Remove exclude directories."""
60
+ removed_dirs = []
61
+ for dir_name in dirs:
62
+ if dir_name in self._memory.exclude_dirs:
63
+ self._memory.exclude_dirs.remove(dir_name)
64
+ removed_dirs.append(dir_name)
65
+ if removed_dirs:
66
+ self.save_memory()
67
+ return removed_dirs
68
+
69
+ def clear_exclude_dirs(self):
70
+ """Clear all exclude directories."""
71
+ self._memory.exclude_dirs = []
72
+ self.save_memory()