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,282 @@
1
+ """
2
+ 环境变量管理模块
3
+
4
+ 该模块提供了一个统一的环境变量管理接口,方便项目中各个组件获取和使用环境变量。
5
+ 支持环境变量的获取、默认值设置、类型转换等功能。
6
+ """
7
+
8
+ import os
9
+ from typing import Optional, Union, Dict, Any
10
+ from enum import Enum
11
+
12
+
13
+ class Environment(Enum):
14
+ """环境类型枚举"""
15
+ PRODUCTION = "production"
16
+ DEVELOPMENT = "development"
17
+ DEV = "dev" # development 的简写
18
+ PROD = "prod" # production 的简写
19
+
20
+
21
+ class EnvManager:
22
+ """环境变量管理器
23
+
24
+ 提供统一的环境变量访问接口,支持类型转换和默认值设置。
25
+ """
26
+
27
+ # 预定义的环境变量配置
28
+ ENV_CONFIGS = {
29
+ "AUTO_CODER_ENV": {
30
+ "description": "当前运行环境,支持 production/prod 或 development/dev",
31
+ "default": "development",
32
+ "type": str
33
+ },
34
+ # 可以在这里添加更多需要管理的环境变量
35
+ }
36
+
37
+ @classmethod
38
+ def get_environment(cls) -> Environment:
39
+ """获取当前运行环境
40
+
41
+ Returns:
42
+ Environment: 当前环境类型
43
+ """
44
+ env_value = cls.get_env("AUTO_CODER_ENV", "development").lower()
45
+
46
+ # 标准化环境值
47
+ if env_value in ["production", "prod"]:
48
+ return Environment.PRODUCTION
49
+ elif env_value in ["development", "dev"]:
50
+ return Environment.DEVELOPMENT
51
+ else:
52
+ # 默认返回开发环境
53
+ return Environment.DEVELOPMENT
54
+
55
+ @classmethod
56
+ def is_production(cls) -> bool:
57
+ """判断是否为生产环境
58
+
59
+ Returns:
60
+ bool: True 如果是生产环境,False 否则
61
+ """
62
+ return cls.get_environment() == Environment.PRODUCTION
63
+
64
+ @classmethod
65
+ def is_development(cls) -> bool:
66
+ """判断是否为开发环境
67
+
68
+ Returns:
69
+ bool: True 如果是开发环境,False 否则
70
+ """
71
+ return cls.get_environment() == Environment.DEVELOPMENT
72
+
73
+ @classmethod
74
+ def get_env(cls, key: str, default: Optional[Union[str, int, float, bool]] = None) -> Any:
75
+ """获取环境变量值
76
+
77
+ Args:
78
+ key: 环境变量名
79
+ default: 默认值,如果环境变量不存在则返回此值
80
+
81
+ Returns:
82
+ Any: 环境变量的值,类型取决于默认值类型
83
+ """
84
+ value = os.environ.get(key)
85
+
86
+ if value is None:
87
+ return default
88
+
89
+ # 根据默认值类型进行类型转换
90
+ if default is not None:
91
+ if isinstance(default, bool):
92
+ return cls._str_to_bool(value)
93
+ elif isinstance(default, int):
94
+ try:
95
+ return int(value)
96
+ except ValueError:
97
+ return default
98
+ elif isinstance(default, float):
99
+ try:
100
+ return float(value)
101
+ except ValueError:
102
+ return default
103
+
104
+ return value
105
+
106
+ @classmethod
107
+ def get_env_bool(cls, key: str, default: bool = False) -> bool:
108
+ """获取布尔类型环境变量
109
+
110
+ Args:
111
+ key: 环境变量名
112
+ default: 默认值
113
+
114
+ Returns:
115
+ bool: 环境变量的布尔值
116
+ """
117
+ value = os.environ.get(key)
118
+ if value is None:
119
+ return default
120
+ return cls._str_to_bool(value)
121
+
122
+ @classmethod
123
+ def get_env_int(cls, key: str, default: int = 0) -> int:
124
+ """获取整数类型环境变量
125
+
126
+ Args:
127
+ key: 环境变量名
128
+ default: 默认值
129
+
130
+ Returns:
131
+ int: 环境变量的整数值
132
+ """
133
+ value = os.environ.get(key)
134
+ if value is None:
135
+ return default
136
+ try:
137
+ return int(value)
138
+ except ValueError:
139
+ return default
140
+
141
+ @classmethod
142
+ def get_env_float(cls, key: str, default: float = 0.0) -> float:
143
+ """获取浮点数类型环境变量
144
+
145
+ Args:
146
+ key: 环境变量名
147
+ default: 默认值
148
+
149
+ Returns:
150
+ float: 环境变量的浮点数值
151
+ """
152
+ value = os.environ.get(key)
153
+ if value is None:
154
+ return default
155
+ try:
156
+ return float(value)
157
+ except ValueError:
158
+ return default
159
+
160
+ @classmethod
161
+ def set_env(cls, key: str, value: Union[str, int, float, bool]) -> None:
162
+ """设置环境变量
163
+
164
+ Args:
165
+ key: 环境变量名
166
+ value: 环境变量值
167
+ """
168
+ os.environ[key] = str(value)
169
+
170
+ @classmethod
171
+ def has_env(cls, key: str) -> bool:
172
+ """检查环境变量是否存在
173
+
174
+ Args:
175
+ key: 环境变量名
176
+
177
+ Returns:
178
+ bool: True 如果环境变量存在,False 否则
179
+ """
180
+ return key in os.environ
181
+
182
+ @classmethod
183
+ def get_all_managed_envs(cls) -> Dict[str, Any]:
184
+ """获取所有被管理的环境变量及其当前值
185
+
186
+ Returns:
187
+ Dict[str, Any]: 环境变量名到值的映射
188
+ """
189
+ result = {}
190
+ for key, config in cls.ENV_CONFIGS.items():
191
+ result[key] = cls.get_env(key, config.get("default"))
192
+ return result
193
+
194
+ @classmethod
195
+ def get_env_info(cls) -> Dict[str, Any]:
196
+ """获取环境信息摘要
197
+
198
+ Returns:
199
+ Dict[str, Any]: 包含环境信息的字典
200
+ """
201
+ return {
202
+ "environment": cls.get_environment().value,
203
+ "is_production": cls.is_production(),
204
+ "is_development": cls.is_development(),
205
+ "managed_envs": cls.get_all_managed_envs()
206
+ }
207
+
208
+ @staticmethod
209
+ def _str_to_bool(value: str) -> bool:
210
+ """将字符串转换为布尔值
211
+
212
+ Args:
213
+ value: 字符串值
214
+
215
+ Returns:
216
+ bool: 转换后的布尔值
217
+ """
218
+ if isinstance(value, bool):
219
+ return value
220
+
221
+ value_lower = value.lower().strip()
222
+
223
+ # True 值
224
+ if value_lower in ("true", "1", "yes", "on", "y", "t"):
225
+ return True
226
+ # False 值
227
+ elif value_lower in ("false", "0", "no", "off", "n", "f", ""):
228
+ return False
229
+ else:
230
+ # 其他值默认为 True(非空字符串)
231
+ return bool(value.strip())
232
+
233
+
234
+ # 便捷函数,直接使用类方法
235
+ def get_environment() -> Environment:
236
+ """获取当前运行环境"""
237
+ return EnvManager.get_environment()
238
+
239
+
240
+ def is_production() -> bool:
241
+ """判断是否为生产环境"""
242
+ return EnvManager.is_production()
243
+
244
+
245
+ def is_development() -> bool:
246
+ """判断是否为开发环境"""
247
+ return EnvManager.is_development()
248
+
249
+
250
+ def get_env(key: str, default: Optional[Union[str, int, float, bool]] = None) -> Any:
251
+ """获取环境变量值"""
252
+ return EnvManager.get_env(key, default)
253
+
254
+
255
+ def get_env_bool(key: str, default: bool = False) -> bool:
256
+ """获取布尔类型环境变量"""
257
+ return EnvManager.get_env_bool(key, default)
258
+
259
+
260
+ def get_env_int(key: str, default: int = 0) -> int:
261
+ """获取整数类型环境变量"""
262
+ return EnvManager.get_env_int(key, default)
263
+
264
+
265
+ def get_env_float(key: str, default: float = 0.0) -> float:
266
+ """获取浮点数类型环境变量"""
267
+ return EnvManager.get_env_float(key, default)
268
+
269
+
270
+ def set_env(key: str, value: Union[str, int, float, bool]) -> None:
271
+ """设置环境变量"""
272
+ return EnvManager.set_env(key, value)
273
+
274
+
275
+ def has_env(key: str) -> bool:
276
+ """检查环境变量是否存在"""
277
+ return EnvManager.has_env(key)
278
+
279
+
280
+ def get_env_info() -> Dict[str, Any]:
281
+ """获取环境信息摘要"""
282
+ return EnvManager.get_env_info()
@@ -0,0 +1,211 @@
1
+
2
+ #!/usr/bin/env python3
3
+ """
4
+ 环境变量管理模块使用示例
5
+
6
+ 展示如何在项目中使用 env_manager 模块
7
+ """
8
+
9
+ from env_manager import (
10
+ # 类和枚举
11
+ EnvManager, Environment,
12
+ # 便捷函数
13
+ get_environment, is_production, is_development,
14
+ get_env, get_env_bool, get_env_int, get_env_float,
15
+ set_env, has_env, get_env_info
16
+ )
17
+
18
+
19
+ def example_basic_usage():
20
+ """基本使用示例"""
21
+ print("=== 基本使用示例 ===")
22
+
23
+ # 1. 检查当前环境
24
+ current_env = get_environment()
25
+ print(f"当前环境: {current_env.value}")
26
+
27
+ # 2. 根据环境执行不同逻辑
28
+ if is_production():
29
+ print("运行在生产环境,启用严格模式")
30
+ # 生产环境的特殊配置
31
+ debug_mode = False
32
+ log_level = "INFO"
33
+ else:
34
+ print("运行在开发环境,启用调试模式")
35
+ # 开发环境的特殊配置
36
+ debug_mode = True
37
+ log_level = "DEBUG"
38
+
39
+ print(f"调试模式: {debug_mode}")
40
+ print(f"日志级别: {log_level}")
41
+ print()
42
+
43
+
44
+ def example_env_configuration():
45
+ """环境变量配置示例"""
46
+ print("=== 环境变量配置示例 ===")
47
+
48
+ # 获取各种类型的环境变量,带默认值
49
+ database_url = get_env("DATABASE_URL", "sqlite:///default.db")
50
+ max_connections = get_env_int("MAX_CONNECTIONS", 10)
51
+ enable_cache = get_env_bool("ENABLE_CACHE", True)
52
+ timeout = get_env_float("TIMEOUT", 30.0)
53
+
54
+ print(f"数据库URL: {database_url}")
55
+ print(f"最大连接数: {max_connections}")
56
+ print(f"启用缓存: {enable_cache}")
57
+ print(f"超时时间: {timeout}秒")
58
+ print()
59
+
60
+
61
+ def example_dynamic_configuration():
62
+ """动态配置示例"""
63
+ print("=== 动态配置示例 ===")
64
+
65
+ # 根据环境动态调整配置
66
+ if is_production():
67
+ # 生产环境配置
68
+ worker_count = get_env_int("WORKER_COUNT", 4)
69
+ enable_debug = False
70
+ cache_timeout = get_env_int("CACHE_TIMEOUT", 3600)
71
+ else:
72
+ # 开发环境配置
73
+ worker_count = get_env_int("WORKER_COUNT", 1)
74
+ enable_debug = get_env_bool("DEBUG", True)
75
+ cache_timeout = get_env_int("CACHE_TIMEOUT", 60)
76
+
77
+ print(f"工作进程数: {worker_count}")
78
+ print(f"调试模式: {enable_debug}")
79
+ print(f"缓存超时: {cache_timeout}秒")
80
+ print()
81
+
82
+
83
+ def example_feature_flags():
84
+ """功能开关示例"""
85
+ print("=== 功能开关示例 ===")
86
+
87
+ # 使用环境变量控制功能开关
88
+ features = {
89
+ "NEW_UI": get_env_bool("FEATURE_NEW_UI", False),
90
+ "EXPERIMENTAL_API": get_env_bool("FEATURE_EXPERIMENTAL_API", False),
91
+ "ANALYTICS": get_env_bool("FEATURE_ANALYTICS", is_production()), # 生产环境默认开启
92
+ "DEBUG_TOOLBAR": get_env_bool("FEATURE_DEBUG_TOOLBAR", is_development()), # 开发环境默认开启
93
+ }
94
+
95
+ print("功能开关状态:")
96
+ for feature, enabled in features.items():
97
+ status = "启用" if enabled else "禁用"
98
+ print(f" {feature}: {status}")
99
+ print()
100
+
101
+
102
+ def example_configuration_validation():
103
+ """配置验证示例"""
104
+ print("=== 配置验证示例 ===")
105
+
106
+ # 检查必需的环境变量
107
+ required_vars = ["API_KEY", "SECRET_KEY"]
108
+ missing_vars = []
109
+
110
+ for var in required_vars:
111
+ if not has_env(var):
112
+ missing_vars.append(var)
113
+
114
+ if missing_vars:
115
+ print(f"警告: 缺少必需的环境变量: {', '.join(missing_vars)}")
116
+ print("请设置这些环境变量后重新启动应用")
117
+ else:
118
+ print("所有必需的环境变量都已设置")
119
+
120
+ # 验证环境变量值的有效性
121
+ max_retries = get_env_int("MAX_RETRIES", 3)
122
+ if max_retries < 1 or max_retries > 10:
123
+ print(f"警告: MAX_RETRIES 值 {max_retries} 不在有效范围内 (1-10)")
124
+
125
+ print()
126
+
127
+
128
+ def example_logging_configuration():
129
+ """日志配置示例"""
130
+ print("=== 日志配置示例 ===")
131
+
132
+ # 根据环境配置日志
133
+ log_config = {
134
+ "level": get_env("LOG_LEVEL", "INFO" if is_production() else "DEBUG"),
135
+ "format": get_env("LOG_FORMAT", "json" if is_production() else "console"),
136
+ "output": get_env("LOG_OUTPUT", "file" if is_production() else "console"),
137
+ "max_size": get_env_int("LOG_MAX_SIZE", 100), # MB
138
+ "backup_count": get_env_int("LOG_BACKUP_COUNT", 5),
139
+ }
140
+
141
+ print("日志配置:")
142
+ for key, value in log_config.items():
143
+ print(f" {key}: {value}")
144
+ print()
145
+
146
+
147
+ def example_service_configuration():
148
+ """服务配置示例"""
149
+ print("=== 服务配置示例 ===")
150
+
151
+ # Web 服务配置
152
+ web_config = {
153
+ "host": get_env("HOST", "0.0.0.0" if is_production() else "127.0.0.1"),
154
+ "port": get_env_int("PORT", 8000),
155
+ "workers": get_env_int("WORKERS", 4 if is_production() else 1),
156
+ "reload": get_env_bool("RELOAD", is_development()),
157
+ "access_log": get_env_bool("ACCESS_LOG", is_production()),
158
+ }
159
+
160
+ print("Web服务配置:")
161
+ for key, value in web_config.items():
162
+ print(f" {key}: {value}")
163
+ print()
164
+
165
+
166
+ def example_environment_info():
167
+ """环境信息示例"""
168
+ print("=== 环境信息示例 ===")
169
+
170
+ # 获取完整的环境信息
171
+ env_info = get_env_info()
172
+ print("完整环境信息:")
173
+ for key, value in env_info.items():
174
+ print(f" {key}: {value}")
175
+ print()
176
+
177
+
178
+ def main():
179
+ """主函数"""
180
+ print("环境变量管理模块使用示例")
181
+ print("=" * 50)
182
+
183
+ example_basic_usage()
184
+ example_env_configuration()
185
+ example_dynamic_configuration()
186
+ example_feature_flags()
187
+ example_configuration_validation()
188
+ example_logging_configuration()
189
+ example_service_configuration()
190
+ example_environment_info()
191
+
192
+ print("示例演示完成!")
193
+
194
+
195
+ if __name__ == "__main__":
196
+ # 设置一些示例环境变量
197
+ import os
198
+ os.environ.update({
199
+ "DATABASE_URL": "postgresql://user:pass@localhost/mydb",
200
+ "MAX_CONNECTIONS": "20",
201
+ "ENABLE_CACHE": "true",
202
+ "TIMEOUT": "45.5",
203
+ "FEATURE_NEW_UI": "true",
204
+ "API_KEY": "your-api-key-here",
205
+ "SECRET_KEY": "your-secret-key-here",
206
+ "LOG_LEVEL": "INFO",
207
+ "PORT": "8080",
208
+ })
209
+
210
+ main()
211
+
@@ -12,7 +12,9 @@ class ConversationCheckpoint(BaseModel):
12
12
 
13
13
  checkpoint_id: str # 检查点ID,与变更组ID对应
14
14
  timestamp: float # 创建时间戳
15
- conversations: List[Dict[str, Any]] # 对话历史
15
+ conversation_id: Optional[str] = None # 对话ID,与具体对话会话关联
16
+ first_message_id: Optional[str] = None # 对话消息区间起始ID
17
+ last_message_id: Optional[str] = None # 对话消息区间结束ID
16
18
  metadata: Optional[Dict[str, Any]] = None # 元数据,可包含额外信息
17
19
 
18
20
 
@@ -47,6 +49,9 @@ class ConversationCheckpointStore:
47
49
 
48
50
  Returns:
49
51
  str: 检查点ID
52
+
53
+ Raises:
54
+ Exception: 保存失败时抛出异常
50
55
  """
51
56
  # 确保检查点有ID
52
57
  if not checkpoint.checkpoint_id:
@@ -60,19 +65,15 @@ class ConversationCheckpointStore:
60
65
  file_path = os.path.join(self.store_dir, f"{checkpoint.checkpoint_id}.json")
61
66
 
62
67
  # 保存为JSON文件
63
- try:
64
- with open(file_path, 'w', encoding='utf-8') as f:
65
- f.write(checkpoint.model_dump_json(ensure_ascii=False, indent=2))
66
-
67
- logger.info(f"已保存对话检查点: {checkpoint.checkpoint_id}")
68
-
69
- # 检查并清理过期的检查点
70
- self._cleanup_old_checkpoints()
71
-
72
- return checkpoint.checkpoint_id
73
- except Exception as e:
74
- logger.error(f"保存对话检查点失败: {str(e)}")
75
- return ""
68
+ with open(file_path, 'w', encoding='utf-8') as f:
69
+ f.write(json.dumps(checkpoint.model_dump(), ensure_ascii=False, indent=2))
70
+
71
+ logger.debug(f"已保存对话检查点: {checkpoint.checkpoint_id}")
72
+
73
+ # 检查并清理过期的检查点
74
+ self._cleanup_old_checkpoints()
75
+
76
+ return checkpoint.checkpoint_id
76
77
 
77
78
  def get_checkpoint(self, checkpoint_id: str) -> Optional[ConversationCheckpoint]:
78
79
  """
@@ -87,7 +88,6 @@ class ConversationCheckpointStore:
87
88
  file_path = os.path.join(self.store_dir, f"{checkpoint_id}.json")
88
89
 
89
90
  if not os.path.exists(file_path):
90
- logger.warning(f"对话检查点不存在: {checkpoint_id}")
91
91
  return None
92
92
 
93
93
  try:
@@ -96,7 +96,7 @@ class ConversationCheckpointStore:
96
96
 
97
97
  return ConversationCheckpoint(**data)
98
98
  except Exception as e:
99
- logger.error(f"读取对话检查点失败: {str(e)}")
99
+ logger.error(f"读取对话检查点失败 {checkpoint_id}: {str(e)}")
100
100
  return None
101
101
 
102
102
  def get_latest_checkpoint(self) -> Optional[ConversationCheckpoint]:
@@ -129,15 +129,14 @@ class ConversationCheckpointStore:
129
129
  file_path = os.path.join(self.store_dir, f"{checkpoint_id}.json")
130
130
 
131
131
  if not os.path.exists(file_path):
132
- logger.warning(f"要删除的对话检查点不存在: {checkpoint_id}")
133
132
  return False
134
133
 
135
134
  try:
136
135
  os.remove(file_path)
137
- logger.info(f"已删除对话检查点: {checkpoint_id}")
136
+ logger.debug(f"已删除对话检查点: {checkpoint_id}")
138
137
  return True
139
138
  except Exception as e:
140
- logger.error(f"删除对话检查点失败: {str(e)}")
139
+ logger.error(f"删除对话检查点失败 {checkpoint_id}: {str(e)}")
141
140
  return False
142
141
 
143
142
  def _get_all_checkpoints(self) -> List[ConversationCheckpoint]:
@@ -180,3 +179,4 @@ class ConversationCheckpointStore:
180
179
  # 删除超出限制的旧检查点
181
180
  for checkpoint in checkpoints[self.max_history:]:
182
181
  self.delete_checkpoint(checkpoint.checkpoint_id)
182
+ logger.debug(f"清理旧检查点: {checkpoint.checkpoint_id}")