AstrBot 3.5.6__py3-none-any.whl → 4.7.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.
Files changed (288) hide show
  1. astrbot/api/__init__.py +16 -4
  2. astrbot/api/all.py +2 -1
  3. astrbot/api/event/__init__.py +5 -6
  4. astrbot/api/event/filter/__init__.py +37 -34
  5. astrbot/api/platform/__init__.py +7 -8
  6. astrbot/api/provider/__init__.py +8 -7
  7. astrbot/api/star/__init__.py +3 -4
  8. astrbot/api/util/__init__.py +2 -2
  9. astrbot/cli/__init__.py +1 -0
  10. astrbot/cli/__main__.py +18 -197
  11. astrbot/cli/commands/__init__.py +6 -0
  12. astrbot/cli/commands/cmd_conf.py +209 -0
  13. astrbot/cli/commands/cmd_init.py +56 -0
  14. astrbot/cli/commands/cmd_plug.py +245 -0
  15. astrbot/cli/commands/cmd_run.py +62 -0
  16. astrbot/cli/utils/__init__.py +18 -0
  17. astrbot/cli/utils/basic.py +76 -0
  18. astrbot/cli/utils/plugin.py +246 -0
  19. astrbot/cli/utils/version_comparator.py +90 -0
  20. astrbot/core/__init__.py +17 -19
  21. astrbot/core/agent/agent.py +14 -0
  22. astrbot/core/agent/handoff.py +38 -0
  23. astrbot/core/agent/hooks.py +30 -0
  24. astrbot/core/agent/mcp_client.py +385 -0
  25. astrbot/core/agent/message.py +175 -0
  26. astrbot/core/agent/response.py +14 -0
  27. astrbot/core/agent/run_context.py +22 -0
  28. astrbot/core/agent/runners/__init__.py +3 -0
  29. astrbot/core/agent/runners/base.py +65 -0
  30. astrbot/core/agent/runners/coze/coze_agent_runner.py +367 -0
  31. astrbot/core/agent/runners/coze/coze_api_client.py +324 -0
  32. astrbot/core/agent/runners/dashscope/dashscope_agent_runner.py +403 -0
  33. astrbot/core/agent/runners/dify/dify_agent_runner.py +336 -0
  34. astrbot/core/agent/runners/dify/dify_api_client.py +195 -0
  35. astrbot/core/agent/runners/tool_loop_agent_runner.py +400 -0
  36. astrbot/core/agent/tool.py +285 -0
  37. astrbot/core/agent/tool_executor.py +17 -0
  38. astrbot/core/astr_agent_context.py +19 -0
  39. astrbot/core/astr_agent_hooks.py +36 -0
  40. astrbot/core/astr_agent_run_util.py +80 -0
  41. astrbot/core/astr_agent_tool_exec.py +246 -0
  42. astrbot/core/astrbot_config_mgr.py +275 -0
  43. astrbot/core/config/__init__.py +2 -2
  44. astrbot/core/config/astrbot_config.py +60 -20
  45. astrbot/core/config/default.py +1972 -453
  46. astrbot/core/config/i18n_utils.py +110 -0
  47. astrbot/core/conversation_mgr.py +285 -75
  48. astrbot/core/core_lifecycle.py +167 -62
  49. astrbot/core/db/__init__.py +305 -102
  50. astrbot/core/db/migration/helper.py +69 -0
  51. astrbot/core/db/migration/migra_3_to_4.py +357 -0
  52. astrbot/core/db/migration/migra_45_to_46.py +44 -0
  53. astrbot/core/db/migration/migra_webchat_session.py +131 -0
  54. astrbot/core/db/migration/shared_preferences_v3.py +48 -0
  55. astrbot/core/db/migration/sqlite_v3.py +497 -0
  56. astrbot/core/db/po.py +259 -55
  57. astrbot/core/db/sqlite.py +773 -528
  58. astrbot/core/db/vec_db/base.py +73 -0
  59. astrbot/core/db/vec_db/faiss_impl/__init__.py +3 -0
  60. astrbot/core/db/vec_db/faiss_impl/document_storage.py +392 -0
  61. astrbot/core/db/vec_db/faiss_impl/embedding_storage.py +93 -0
  62. astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql +17 -0
  63. astrbot/core/db/vec_db/faiss_impl/vec_db.py +204 -0
  64. astrbot/core/event_bus.py +26 -22
  65. astrbot/core/exceptions.py +9 -0
  66. astrbot/core/file_token_service.py +98 -0
  67. astrbot/core/initial_loader.py +19 -10
  68. astrbot/core/knowledge_base/chunking/__init__.py +9 -0
  69. astrbot/core/knowledge_base/chunking/base.py +25 -0
  70. astrbot/core/knowledge_base/chunking/fixed_size.py +59 -0
  71. astrbot/core/knowledge_base/chunking/recursive.py +161 -0
  72. astrbot/core/knowledge_base/kb_db_sqlite.py +301 -0
  73. astrbot/core/knowledge_base/kb_helper.py +642 -0
  74. astrbot/core/knowledge_base/kb_mgr.py +330 -0
  75. astrbot/core/knowledge_base/models.py +120 -0
  76. astrbot/core/knowledge_base/parsers/__init__.py +13 -0
  77. astrbot/core/knowledge_base/parsers/base.py +51 -0
  78. astrbot/core/knowledge_base/parsers/markitdown_parser.py +26 -0
  79. astrbot/core/knowledge_base/parsers/pdf_parser.py +101 -0
  80. astrbot/core/knowledge_base/parsers/text_parser.py +42 -0
  81. astrbot/core/knowledge_base/parsers/url_parser.py +103 -0
  82. astrbot/core/knowledge_base/parsers/util.py +13 -0
  83. astrbot/core/knowledge_base/prompts.py +65 -0
  84. astrbot/core/knowledge_base/retrieval/__init__.py +14 -0
  85. astrbot/core/knowledge_base/retrieval/hit_stopwords.txt +767 -0
  86. astrbot/core/knowledge_base/retrieval/manager.py +276 -0
  87. astrbot/core/knowledge_base/retrieval/rank_fusion.py +142 -0
  88. astrbot/core/knowledge_base/retrieval/sparse_retriever.py +136 -0
  89. astrbot/core/log.py +21 -15
  90. astrbot/core/message/components.py +413 -287
  91. astrbot/core/message/message_event_result.py +35 -24
  92. astrbot/core/persona_mgr.py +192 -0
  93. astrbot/core/pipeline/__init__.py +14 -14
  94. astrbot/core/pipeline/content_safety_check/stage.py +13 -9
  95. astrbot/core/pipeline/content_safety_check/strategies/__init__.py +1 -2
  96. astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py +13 -14
  97. astrbot/core/pipeline/content_safety_check/strategies/keywords.py +2 -1
  98. astrbot/core/pipeline/content_safety_check/strategies/strategy.py +6 -6
  99. astrbot/core/pipeline/context.py +7 -1
  100. astrbot/core/pipeline/context_utils.py +107 -0
  101. astrbot/core/pipeline/preprocess_stage/stage.py +63 -36
  102. astrbot/core/pipeline/process_stage/method/agent_request.py +48 -0
  103. astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py +464 -0
  104. astrbot/core/pipeline/process_stage/method/agent_sub_stages/third_party.py +202 -0
  105. astrbot/core/pipeline/process_stage/method/star_request.py +26 -32
  106. astrbot/core/pipeline/process_stage/stage.py +21 -15
  107. astrbot/core/pipeline/process_stage/utils.py +125 -0
  108. astrbot/core/pipeline/rate_limit_check/stage.py +34 -36
  109. astrbot/core/pipeline/respond/stage.py +142 -101
  110. astrbot/core/pipeline/result_decorate/stage.py +124 -57
  111. astrbot/core/pipeline/scheduler.py +21 -16
  112. astrbot/core/pipeline/session_status_check/stage.py +37 -0
  113. astrbot/core/pipeline/stage.py +11 -76
  114. astrbot/core/pipeline/waking_check/stage.py +69 -33
  115. astrbot/core/pipeline/whitelist_check/stage.py +10 -7
  116. astrbot/core/platform/__init__.py +6 -6
  117. astrbot/core/platform/astr_message_event.py +107 -129
  118. astrbot/core/platform/astrbot_message.py +32 -12
  119. astrbot/core/platform/manager.py +62 -18
  120. astrbot/core/platform/message_session.py +30 -0
  121. astrbot/core/platform/platform.py +16 -24
  122. astrbot/core/platform/platform_metadata.py +9 -4
  123. astrbot/core/platform/register.py +12 -7
  124. astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +136 -60
  125. astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +126 -46
  126. astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +63 -31
  127. astrbot/core/platform/sources/dingtalk/dingtalk_event.py +30 -26
  128. astrbot/core/platform/sources/discord/client.py +129 -0
  129. astrbot/core/platform/sources/discord/components.py +139 -0
  130. astrbot/core/platform/sources/discord/discord_platform_adapter.py +473 -0
  131. astrbot/core/platform/sources/discord/discord_platform_event.py +313 -0
  132. astrbot/core/platform/sources/lark/lark_adapter.py +27 -18
  133. astrbot/core/platform/sources/lark/lark_event.py +39 -13
  134. astrbot/core/platform/sources/misskey/misskey_adapter.py +770 -0
  135. astrbot/core/platform/sources/misskey/misskey_api.py +964 -0
  136. astrbot/core/platform/sources/misskey/misskey_event.py +163 -0
  137. astrbot/core/platform/sources/misskey/misskey_utils.py +550 -0
  138. astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +149 -33
  139. astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +41 -26
  140. astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py +36 -17
  141. astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py +3 -1
  142. astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +14 -8
  143. astrbot/core/platform/sources/satori/satori_adapter.py +792 -0
  144. astrbot/core/platform/sources/satori/satori_event.py +432 -0
  145. astrbot/core/platform/sources/slack/client.py +164 -0
  146. astrbot/core/platform/sources/slack/slack_adapter.py +416 -0
  147. astrbot/core/platform/sources/slack/slack_event.py +253 -0
  148. astrbot/core/platform/sources/telegram/tg_adapter.py +100 -43
  149. astrbot/core/platform/sources/telegram/tg_event.py +136 -36
  150. astrbot/core/platform/sources/webchat/webchat_adapter.py +72 -22
  151. astrbot/core/platform/sources/webchat/webchat_event.py +46 -22
  152. astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +35 -0
  153. astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +926 -0
  154. astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py +178 -0
  155. astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py +159 -0
  156. astrbot/core/platform/sources/wecom/wecom_adapter.py +169 -27
  157. astrbot/core/platform/sources/wecom/wecom_event.py +162 -77
  158. astrbot/core/platform/sources/wecom/wecom_kf.py +279 -0
  159. astrbot/core/platform/sources/wecom/wecom_kf_message.py +196 -0
  160. astrbot/core/platform/sources/wecom_ai_bot/WXBizJsonMsgCrypt.py +297 -0
  161. astrbot/core/platform/sources/wecom_ai_bot/__init__.py +15 -0
  162. astrbot/core/platform/sources/wecom_ai_bot/ierror.py +19 -0
  163. astrbot/core/platform/sources/wecom_ai_bot/wecomai_adapter.py +472 -0
  164. astrbot/core/platform/sources/wecom_ai_bot/wecomai_api.py +417 -0
  165. astrbot/core/platform/sources/wecom_ai_bot/wecomai_event.py +152 -0
  166. astrbot/core/platform/sources/wecom_ai_bot/wecomai_queue_mgr.py +153 -0
  167. astrbot/core/platform/sources/wecom_ai_bot/wecomai_server.py +168 -0
  168. astrbot/core/platform/sources/wecom_ai_bot/wecomai_utils.py +209 -0
  169. astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +306 -0
  170. astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +186 -0
  171. astrbot/core/platform_message_history_mgr.py +49 -0
  172. astrbot/core/provider/__init__.py +2 -3
  173. astrbot/core/provider/entites.py +8 -8
  174. astrbot/core/provider/entities.py +154 -98
  175. astrbot/core/provider/func_tool_manager.py +446 -458
  176. astrbot/core/provider/manager.py +345 -207
  177. astrbot/core/provider/provider.py +188 -73
  178. astrbot/core/provider/register.py +9 -7
  179. astrbot/core/provider/sources/anthropic_source.py +295 -115
  180. astrbot/core/provider/sources/azure_tts_source.py +224 -0
  181. astrbot/core/provider/sources/bailian_rerank_source.py +236 -0
  182. astrbot/core/provider/sources/dashscope_tts.py +138 -14
  183. astrbot/core/provider/sources/edge_tts_source.py +24 -19
  184. astrbot/core/provider/sources/fishaudio_tts_api_source.py +58 -13
  185. astrbot/core/provider/sources/gemini_embedding_source.py +61 -0
  186. astrbot/core/provider/sources/gemini_source.py +310 -132
  187. astrbot/core/provider/sources/gemini_tts_source.py +81 -0
  188. astrbot/core/provider/sources/groq_source.py +15 -0
  189. astrbot/core/provider/sources/gsv_selfhosted_source.py +151 -0
  190. astrbot/core/provider/sources/gsvi_tts_source.py +14 -7
  191. astrbot/core/provider/sources/minimax_tts_api_source.py +159 -0
  192. astrbot/core/provider/sources/openai_embedding_source.py +40 -0
  193. astrbot/core/provider/sources/openai_source.py +241 -145
  194. astrbot/core/provider/sources/openai_tts_api_source.py +18 -7
  195. astrbot/core/provider/sources/sensevoice_selfhosted_source.py +13 -11
  196. astrbot/core/provider/sources/vllm_rerank_source.py +71 -0
  197. astrbot/core/provider/sources/volcengine_tts.py +115 -0
  198. astrbot/core/provider/sources/whisper_api_source.py +18 -13
  199. astrbot/core/provider/sources/whisper_selfhosted_source.py +19 -12
  200. astrbot/core/provider/sources/xinference_rerank_source.py +116 -0
  201. astrbot/core/provider/sources/xinference_stt_provider.py +197 -0
  202. astrbot/core/provider/sources/zhipu_source.py +6 -73
  203. astrbot/core/star/__init__.py +43 -11
  204. astrbot/core/star/config.py +17 -18
  205. astrbot/core/star/context.py +362 -138
  206. astrbot/core/star/filter/__init__.py +4 -3
  207. astrbot/core/star/filter/command.py +111 -35
  208. astrbot/core/star/filter/command_group.py +46 -34
  209. astrbot/core/star/filter/custom_filter.py +6 -5
  210. astrbot/core/star/filter/event_message_type.py +4 -2
  211. astrbot/core/star/filter/permission.py +4 -2
  212. astrbot/core/star/filter/platform_adapter_type.py +45 -12
  213. astrbot/core/star/filter/regex.py +4 -2
  214. astrbot/core/star/register/__init__.py +19 -15
  215. astrbot/core/star/register/star.py +41 -13
  216. astrbot/core/star/register/star_handler.py +236 -86
  217. astrbot/core/star/session_llm_manager.py +280 -0
  218. astrbot/core/star/session_plugin_manager.py +170 -0
  219. astrbot/core/star/star.py +36 -43
  220. astrbot/core/star/star_handler.py +47 -85
  221. astrbot/core/star/star_manager.py +442 -260
  222. astrbot/core/star/star_tools.py +167 -45
  223. astrbot/core/star/updator.py +17 -20
  224. astrbot/core/umop_config_router.py +106 -0
  225. astrbot/core/updator.py +38 -13
  226. astrbot/core/utils/astrbot_path.py +39 -0
  227. astrbot/core/utils/command_parser.py +1 -1
  228. astrbot/core/utils/io.py +119 -60
  229. astrbot/core/utils/log_pipe.py +1 -1
  230. astrbot/core/utils/metrics.py +11 -10
  231. astrbot/core/utils/migra_helper.py +73 -0
  232. astrbot/core/utils/path_util.py +63 -62
  233. astrbot/core/utils/pip_installer.py +37 -15
  234. astrbot/core/utils/session_lock.py +29 -0
  235. astrbot/core/utils/session_waiter.py +19 -20
  236. astrbot/core/utils/shared_preferences.py +174 -34
  237. astrbot/core/utils/t2i/__init__.py +4 -1
  238. astrbot/core/utils/t2i/local_strategy.py +386 -238
  239. astrbot/core/utils/t2i/network_strategy.py +109 -49
  240. astrbot/core/utils/t2i/renderer.py +29 -14
  241. astrbot/core/utils/t2i/template/astrbot_powershell.html +184 -0
  242. astrbot/core/utils/t2i/template_manager.py +111 -0
  243. astrbot/core/utils/tencent_record_helper.py +115 -1
  244. astrbot/core/utils/version_comparator.py +10 -13
  245. astrbot/core/zip_updator.py +112 -65
  246. astrbot/dashboard/routes/__init__.py +20 -13
  247. astrbot/dashboard/routes/auth.py +20 -9
  248. astrbot/dashboard/routes/chat.py +297 -141
  249. astrbot/dashboard/routes/config.py +652 -55
  250. astrbot/dashboard/routes/conversation.py +107 -37
  251. astrbot/dashboard/routes/file.py +26 -0
  252. astrbot/dashboard/routes/knowledge_base.py +1244 -0
  253. astrbot/dashboard/routes/log.py +27 -2
  254. astrbot/dashboard/routes/persona.py +202 -0
  255. astrbot/dashboard/routes/plugin.py +197 -139
  256. astrbot/dashboard/routes/route.py +27 -7
  257. astrbot/dashboard/routes/session_management.py +354 -0
  258. astrbot/dashboard/routes/stat.py +85 -18
  259. astrbot/dashboard/routes/static_file.py +5 -2
  260. astrbot/dashboard/routes/t2i.py +233 -0
  261. astrbot/dashboard/routes/tools.py +184 -120
  262. astrbot/dashboard/routes/update.py +59 -36
  263. astrbot/dashboard/server.py +96 -36
  264. astrbot/dashboard/utils.py +165 -0
  265. astrbot-4.7.0.dist-info/METADATA +294 -0
  266. astrbot-4.7.0.dist-info/RECORD +274 -0
  267. {astrbot-3.5.6.dist-info → astrbot-4.7.0.dist-info}/WHEEL +1 -1
  268. astrbot/core/db/plugin/sqlite_impl.py +0 -112
  269. astrbot/core/db/sqlite_init.sql +0 -50
  270. astrbot/core/pipeline/platform_compatibility/stage.py +0 -56
  271. astrbot/core/pipeline/process_stage/method/llm_request.py +0 -606
  272. astrbot/core/platform/sources/gewechat/client.py +0 -806
  273. astrbot/core/platform/sources/gewechat/downloader.py +0 -55
  274. astrbot/core/platform/sources/gewechat/gewechat_event.py +0 -255
  275. astrbot/core/platform/sources/gewechat/gewechat_platform_adapter.py +0 -103
  276. astrbot/core/platform/sources/gewechat/xml_data_parser.py +0 -110
  277. astrbot/core/provider/sources/dashscope_source.py +0 -203
  278. astrbot/core/provider/sources/dify_source.py +0 -281
  279. astrbot/core/provider/sources/llmtuner_source.py +0 -132
  280. astrbot/core/rag/embedding/openai_source.py +0 -20
  281. astrbot/core/rag/knowledge_db_mgr.py +0 -94
  282. astrbot/core/rag/store/__init__.py +0 -9
  283. astrbot/core/rag/store/chroma_db.py +0 -42
  284. astrbot/core/utils/dify_api_client.py +0 -152
  285. astrbot-3.5.6.dist-info/METADATA +0 -249
  286. astrbot-3.5.6.dist-info/RECORD +0 -158
  287. {astrbot-3.5.6.dist-info → astrbot-4.7.0.dist-info}/entry_points.txt +0 -0
  288. {astrbot-3.5.6.dist-info → astrbot-4.7.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
- """
2
- Astrbot 核心生命周期管理类, 负责管理 AstrBot 的启动、停止、重启等操作。
3
- 该类负责初始化各个组件, 包括 ProviderManager、PlatformManager、KnowledgeDBManager、ConversationManager、PluginManager、PipelineScheduler、EventBus等。
1
+ """Astrbot 核心生命周期管理类, 负责管理 AstrBot 的启动、停止、重启等操作.
2
+
3
+ 该类负责初始化各个组件, 包括 ProviderManager、PlatformManager、ConversationManager、PluginManager、PipelineScheduler、EventBus等。
4
4
  该类还负责加载和执行插件, 以及处理事件总线的分发。
5
5
 
6
6
  工作流程:
@@ -9,54 +9,73 @@ Astrbot 核心生命周期管理类, 负责管理 AstrBot 的启动、停止、
9
9
  3. 执行启动完成事件钩子
10
10
  """
11
11
 
12
- import traceback
13
12
  import asyncio
14
- import time
15
- import threading
16
13
  import os
17
- from .event_bus import EventBus
18
- from . import astrbot_config
14
+ import threading
15
+ import time
16
+ import traceback
19
17
  from asyncio import Queue
20
- from typing import List
21
- from astrbot.core.pipeline.scheduler import PipelineScheduler, PipelineContext
22
- from astrbot.core.star import PluginManager
23
- from astrbot.core.platform.manager import PlatformManager
24
- from astrbot.core.star.context import Context
25
- from astrbot.core.provider.manager import ProviderManager
18
+
19
+ from astrbot.api import logger, sp
26
20
  from astrbot.core import LogBroker
27
- from astrbot.core.db import BaseDatabase
28
- from astrbot.core.updator import AstrBotUpdator
29
- from astrbot.core import logger
21
+ from astrbot.core.astrbot_config_mgr import AstrBotConfigManager
30
22
  from astrbot.core.config.default import VERSION
31
- from astrbot.core.rag.knowledge_db_mgr import KnowledgeDBManager
32
23
  from astrbot.core.conversation_mgr import ConversationManager
33
- from astrbot.core.star.star_handler import star_handlers_registry, EventType
34
- from astrbot.core.star.star_handler import star_map
24
+ from astrbot.core.db import BaseDatabase
25
+ from astrbot.core.knowledge_base.kb_mgr import KnowledgeBaseManager
26
+ from astrbot.core.persona_mgr import PersonaManager
27
+ from astrbot.core.pipeline.scheduler import PipelineContext, PipelineScheduler
28
+ from astrbot.core.platform.manager import PlatformManager
29
+ from astrbot.core.platform_message_history_mgr import PlatformMessageHistoryManager
30
+ from astrbot.core.provider.manager import ProviderManager
31
+ from astrbot.core.star import PluginManager
32
+ from astrbot.core.star.context import Context
33
+ from astrbot.core.star.star_handler import EventType, star_handlers_registry, star_map
34
+ from astrbot.core.umop_config_router import UmopConfigRouter
35
+ from astrbot.core.updator import AstrBotUpdator
36
+ from astrbot.core.utils.migra_helper import migra
37
+
38
+ from . import astrbot_config, html_renderer
39
+ from .event_bus import EventBus
35
40
 
36
41
 
37
42
  class AstrBotCoreLifecycle:
38
- """
39
- AstrBot 核心生命周期管理类, 负责管理 AstrBot 的启动、停止、重启等操作。
40
- 该类负责初始化各个组件, 包括 ProviderManager、PlatformManager、KnowledgeDBManager、ConversationManager、PluginManager、PipelineScheduler、
43
+ """AstrBot 核心生命周期管理类, 负责管理 AstrBot 的启动、停止、重启等操作.
44
+
45
+ 该类负责初始化各个组件, 包括 ProviderManager、PlatformManager、ConversationManager、PluginManager、PipelineScheduler、
41
46
  EventBus 等。
42
47
  该类还负责加载和执行插件, 以及处理事件总线的分发。
43
48
  """
44
49
 
45
- def __init__(self, log_broker: LogBroker, db: BaseDatabase):
50
+ def __init__(self, log_broker: LogBroker, db: BaseDatabase) -> None:
46
51
  self.log_broker = log_broker # 初始化日志代理
47
52
  self.astrbot_config = astrbot_config # 初始化配置
48
53
  self.db = db # 初始化数据库
49
54
 
50
- # 根据环境变量设置代理
51
- os.environ["https_proxy"] = self.astrbot_config["http_proxy"]
52
- os.environ["http_proxy"] = self.astrbot_config["http_proxy"]
53
- os.environ["no_proxy"] = "localhost"
54
-
55
- async def initialize(self):
56
- """
57
- 初始化 AstrBot 核心生命周期管理类, 负责初始化各个组件, 包括 ProviderManager、PlatformManager、KnowledgeDBManager、ConversationManager、PluginManager、PipelineScheduler、EventBus、AstrBotUpdator等。
55
+ # 设置代理
56
+ proxy_config = self.astrbot_config.get("http_proxy", "")
57
+ if proxy_config != "":
58
+ os.environ["https_proxy"] = proxy_config
59
+ os.environ["http_proxy"] = proxy_config
60
+ logger.debug(f"Using proxy: {proxy_config}")
61
+ # 设置 no_proxy
62
+ no_proxy_list = self.astrbot_config.get("no_proxy", [])
63
+ os.environ["no_proxy"] = ",".join(no_proxy_list)
64
+ else:
65
+ # 清空代理环境变量
66
+ if "https_proxy" in os.environ:
67
+ del os.environ["https_proxy"]
68
+ if "http_proxy" in os.environ:
69
+ del os.environ["http_proxy"]
70
+ if "no_proxy" in os.environ:
71
+ del os.environ["no_proxy"]
72
+ logger.debug("HTTP proxy cleared")
73
+
74
+ async def initialize(self) -> None:
75
+ """初始化 AstrBot 核心生命周期管理类.
76
+
77
+ 负责初始化各个组件, 包括 ProviderManager、PlatformManager、ConversationManager、PluginManager、PipelineScheduler、EventBus、AstrBotUpdator等。
58
78
  """
59
-
60
79
  # 初始化日志代理
61
80
  logger.info("AstrBot v" + VERSION)
62
81
  if os.environ.get("TESTING", ""):
@@ -64,21 +83,58 @@ class AstrBotCoreLifecycle:
64
83
  else:
65
84
  logger.setLevel(self.astrbot_config["log_level"]) # 设置日志级别
66
85
 
86
+ await self.db.initialize()
87
+
88
+ await html_renderer.initialize()
89
+
90
+ # 初始化 UMOP 配置路由器
91
+ self.umop_config_router = UmopConfigRouter(sp=sp)
92
+
93
+ # 初始化 AstrBot 配置管理器
94
+ self.astrbot_config_mgr = AstrBotConfigManager(
95
+ default_config=self.astrbot_config,
96
+ ucr=self.umop_config_router,
97
+ sp=sp,
98
+ )
99
+
100
+ # apply migration
101
+ try:
102
+ await migra(
103
+ self.db,
104
+ self.astrbot_config_mgr,
105
+ self.umop_config_router,
106
+ self.astrbot_config_mgr,
107
+ )
108
+ except Exception as e:
109
+ logger.error(f"AstrBot migration failed: {e!s}")
110
+ logger.error(traceback.format_exc())
111
+
67
112
  # 初始化事件队列
68
113
  self.event_queue = Queue()
69
114
 
115
+ # 初始化人格管理器
116
+ self.persona_mgr = PersonaManager(self.db, self.astrbot_config_mgr)
117
+ await self.persona_mgr.initialize()
118
+
70
119
  # 初始化供应商管理器
71
- self.provider_manager = ProviderManager(self.astrbot_config, self.db)
120
+ self.provider_manager = ProviderManager(
121
+ self.astrbot_config_mgr,
122
+ self.db,
123
+ self.persona_mgr,
124
+ )
72
125
 
73
126
  # 初始化平台管理器
74
127
  self.platform_manager = PlatformManager(self.astrbot_config, self.event_queue)
75
128
 
76
- # 初始化知识库管理器
77
- self.knowledge_db_manager = KnowledgeDBManager(self.astrbot_config)
78
-
79
129
  # 初始化对话管理器
80
130
  self.conversation_manager = ConversationManager(self.db)
81
131
 
132
+ # 初始化平台消息历史管理器
133
+ self.platform_message_history_manager = PlatformMessageHistoryManager(self.db)
134
+
135
+ # 初始化知识库管理器
136
+ self.kb_manager = KnowledgeBaseManager(self.provider_manager)
137
+
82
138
  # 初始化提供给插件的上下文
83
139
  self.star_context = Context(
84
140
  self.event_queue,
@@ -87,7 +143,10 @@ class AstrBotCoreLifecycle:
87
143
  self.provider_manager,
88
144
  self.platform_manager,
89
145
  self.conversation_manager,
90
- self.knowledge_db_manager,
146
+ self.platform_message_history_manager,
147
+ self.persona_mgr,
148
+ self.astrbot_config_mgr,
149
+ self.kb_manager,
91
150
  )
92
151
 
93
152
  # 初始化插件管理器
@@ -99,23 +158,26 @@ class AstrBotCoreLifecycle:
99
158
  # 根据配置实例化各个 Provider
100
159
  await self.provider_manager.initialize()
101
160
 
161
+ await self.kb_manager.initialize()
162
+
102
163
  # 初始化消息事件流水线调度器
103
- self.pipeline_scheduler = PipelineScheduler(
104
- PipelineContext(self.astrbot_config, self.plugin_manager)
105
- )
106
- await self.pipeline_scheduler.initialize()
164
+ self.pipeline_scheduler_mapping = await self.load_pipeline_scheduler()
107
165
 
108
166
  # 初始化更新器
109
167
  self.astrbot_updator = AstrBotUpdator()
110
168
 
111
169
  # 初始化事件总线
112
- self.event_bus = EventBus(self.event_queue, self.pipeline_scheduler)
170
+ self.event_bus = EventBus(
171
+ self.event_queue,
172
+ self.pipeline_scheduler_mapping,
173
+ self.astrbot_config_mgr,
174
+ )
113
175
 
114
176
  # 记录启动时间
115
177
  self.start_time = int(time.time())
116
178
 
117
179
  # 初始化当前任务列表
118
- self.curr_tasks: List[asyncio.Task] = []
180
+ self.curr_tasks: list[asyncio.Task] = []
119
181
 
120
182
  # 根据配置实例化各个平台适配器
121
183
  await self.platform_manager.initialize()
@@ -123,13 +185,13 @@ class AstrBotCoreLifecycle:
123
185
  # 初始化关闭控制面板的事件
124
186
  self.dashboard_shutdown_event = asyncio.Event()
125
187
 
126
- def _load(self):
127
- """加载事件总线和任务并初始化"""
128
-
188
+ def _load(self) -> None:
189
+ """加载事件总线和任务并初始化."""
129
190
  # 创建一个异步任务来执行事件总线的 dispatch() 方法
130
191
  # dispatch是一个无限循环的协程, 从事件队列中获取事件并处理
131
192
  event_bus_task = asyncio.create_task(
132
- self.event_bus.dispatch(), name="event_bus"
193
+ self.event_bus.dispatch(),
194
+ name="event_bus",
133
195
  )
134
196
 
135
197
  # 把插件中注册的所有协程函数注册到事件总线中并执行
@@ -140,16 +202,17 @@ class AstrBotCoreLifecycle:
140
202
  tasks_ = [event_bus_task, *extra_tasks]
141
203
  for task in tasks_:
142
204
  self.curr_tasks.append(
143
- asyncio.create_task(self._task_wrapper(task), name=task.get_name())
205
+ asyncio.create_task(self._task_wrapper(task), name=task.get_name()),
144
206
  )
145
207
 
146
208
  self.start_time = int(time.time())
147
209
 
148
- async def _task_wrapper(self, task: asyncio.Task):
149
- """异步任务包装器, 用于处理异步任务执行中出现的各种异常
210
+ async def _task_wrapper(self, task: asyncio.Task) -> None:
211
+ """异步任务包装器, 用于处理异步任务执行中出现的各种异常.
150
212
 
151
213
  Args:
152
214
  task (asyncio.Task): 要执行的异步任务
215
+
153
216
  """
154
217
  try:
155
218
  await task
@@ -162,19 +225,22 @@ class AstrBotCoreLifecycle:
162
225
  logger.error(f"| {line}")
163
226
  logger.error("-------")
164
227
 
165
- async def start(self):
166
- """启动 AstrBot 核心生命周期管理类, 用load加载事件总线和任务并初始化, 执行启动完成事件钩子"""
228
+ async def start(self) -> None:
229
+ """启动 AstrBot 核心生命周期管理类.
230
+
231
+ 用load加载事件总线和任务并初始化, 执行启动完成事件钩子
232
+ """
167
233
  self._load()
168
234
  logger.info("AstrBot 启动完成。")
169
235
 
170
236
  # 执行启动完成事件钩子
171
237
  handlers = star_handlers_registry.get_handlers_by_event_type(
172
- EventType.OnAstrBotLoadedEvent
238
+ EventType.OnAstrBotLoadedEvent,
173
239
  )
174
240
  for handler in handlers:
175
241
  try:
176
242
  logger.info(
177
- f"hook(on_astrbot_loaded) -> {star_map[handler.handler_module_path].name} - {handler.handler_name}"
243
+ f"hook(on_astrbot_loaded) -> {star_map[handler.handler_module_path].name} - {handler.handler_name}",
178
244
  )
179
245
  await handler.handler()
180
246
  except BaseException:
@@ -183,8 +249,8 @@ class AstrBotCoreLifecycle:
183
249
  # 同时运行curr_tasks中的所有任务
184
250
  await asyncio.gather(*self.curr_tasks, return_exceptions=True)
185
251
 
186
- async def stop(self):
187
- """停止 AstrBot 核心生命周期管理类, 取消所有当前任务并终止各个管理器"""
252
+ async def stop(self) -> None:
253
+ """停止 AstrBot 核心生命周期管理类, 取消所有当前任务并终止各个管理器."""
188
254
  # 请求停止所有正在运行的异步任务
189
255
  for task in self.curr_tasks:
190
256
  task.cancel()
@@ -195,11 +261,12 @@ class AstrBotCoreLifecycle:
195
261
  except Exception as e:
196
262
  logger.warning(traceback.format_exc())
197
263
  logger.warning(
198
- f"插件 {plugin.name} 未被正常终止 {e!s}, 可能会导致资源泄露等问题。"
264
+ f"插件 {plugin.name} 未被正常终止 {e!s}, 可能会导致资源泄露等问题。",
199
265
  )
200
266
 
201
267
  await self.provider_manager.terminate()
202
268
  await self.platform_manager.terminate()
269
+ await self.kb_manager.terminate()
203
270
  self.dashboard_shutdown_event.set()
204
271
 
205
272
  # 再次遍历curr_tasks等待每个任务真正结束
@@ -211,21 +278,59 @@ class AstrBotCoreLifecycle:
211
278
  except Exception as e:
212
279
  logger.error(f"任务 {task.get_name()} 发生错误: {e}")
213
280
 
214
- async def restart(self):
281
+ async def restart(self) -> None:
215
282
  """重启 AstrBot 核心生命周期管理类, 终止各个管理器并重新加载平台实例"""
216
283
  await self.provider_manager.terminate()
217
284
  await self.platform_manager.terminate()
285
+ await self.kb_manager.terminate()
218
286
  self.dashboard_shutdown_event.set()
219
287
  threading.Thread(
220
- target=self.astrbot_updator._reboot, name="restart", daemon=True
288
+ target=self.astrbot_updator._reboot,
289
+ name="restart",
290
+ daemon=True,
221
291
  ).start()
222
292
 
223
- def load_platform(self) -> List[asyncio.Task]:
293
+ def load_platform(self) -> list[asyncio.Task]:
224
294
  """加载平台实例并返回所有平台实例的异步任务列表"""
225
295
  tasks = []
226
296
  platform_insts = self.platform_manager.get_insts()
227
297
  for platform_inst in platform_insts:
228
298
  tasks.append(
229
- asyncio.create_task(platform_inst.run(), name=platform_inst.meta().name)
299
+ asyncio.create_task(
300
+ platform_inst.run(),
301
+ name=f"{platform_inst.meta().id}({platform_inst.meta().name})",
302
+ ),
230
303
  )
231
304
  return tasks
305
+
306
+ async def load_pipeline_scheduler(self) -> dict[str, PipelineScheduler]:
307
+ """加载消息事件流水线调度器.
308
+
309
+ Returns:
310
+ dict[str, PipelineScheduler]: 平台 ID 到流水线调度器的映射
311
+
312
+ """
313
+ mapping = {}
314
+ for conf_id, ab_config in self.astrbot_config_mgr.confs.items():
315
+ scheduler = PipelineScheduler(
316
+ PipelineContext(ab_config, self.plugin_manager, conf_id),
317
+ )
318
+ await scheduler.initialize()
319
+ mapping[conf_id] = scheduler
320
+ return mapping
321
+
322
+ async def reload_pipeline_scheduler(self, conf_id: str) -> None:
323
+ """重新加载消息事件流水线调度器.
324
+
325
+ Returns:
326
+ dict[str, PipelineScheduler]: 平台 ID 到流水线调度器的映射
327
+
328
+ """
329
+ ab_config = self.astrbot_config_mgr.confs.get(conf_id)
330
+ if not ab_config:
331
+ raise ValueError(f"配置文件 {conf_id} 不存在")
332
+ scheduler = PipelineScheduler(
333
+ PipelineContext(ab_config, self.plugin_manager, conf_id),
334
+ )
335
+ await scheduler.initialize()
336
+ self.pipeline_scheduler_mapping[conf_id] = scheduler