AstrBot 4.0.0b3__tar.gz → 4.0.0b5__tar.gz

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 (502) hide show
  1. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/docker-image.yml +29 -2
  2. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/PKG-INFO +2 -2
  3. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/utils/basic.py +12 -3
  4. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/astrbot_config_mgr.py +16 -9
  5. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/config/default.py +12 -4
  6. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/process_stage/method/llm_request.py +6 -2
  7. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +26 -14
  8. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/entities.py +17 -15
  9. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gemini_source.py +57 -18
  10. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/openai_source.py +3 -3
  11. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/updator.py +7 -5
  12. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/io.py +1 -1
  13. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/zip_updator.py +26 -4
  14. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/config.py +14 -0
  15. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/update.py +3 -5
  16. astrbot-4.0.0b5/changelogs/v3.5.27.md +5 -0
  17. astrbot-4.0.0b5/changelogs/v4.0.0-beta.4.md +8 -0
  18. astrbot-4.0.0b5/changelogs/v4.0.0-beta.5.md +15 -0
  19. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/MigrationDialog.vue +25 -3
  20. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/header.json +1 -1
  21. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/migration.json +3 -1
  22. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/header.json +1 -1
  23. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/migration.json +3 -1
  24. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +0 -4
  25. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ConfigPage.vue +1 -1
  26. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/main.py +3 -3
  27. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/astrbot/main.py +5 -5
  28. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/python_interpreter/main.py +4 -4
  29. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/pyproject.toml +2 -2
  30. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.dockerignore +0 -0
  31. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/FUNDING.yml +0 -0
  32. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/ISSUE_TEMPLATE/PLUGIN_PUBLISH.yml +0 -0
  33. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  34. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  35. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  36. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/copilot-instructions.md +0 -0
  37. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/dependabot.yml +0 -0
  38. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/auto_release.yml +0 -0
  39. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/codeql.yml +0 -0
  40. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/coverage_test.yml +0 -0
  41. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/dashboard_ci.yml +0 -0
  42. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/stale.yml +0 -0
  43. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.gitignore +0 -0
  44. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.pre-commit-config.yaml +0 -0
  45. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.python-version +0 -0
  46. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/CODE_OF_CONDUCT.md +0 -0
  47. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/Dockerfile +0 -0
  48. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/Dockerfile_with_node +0 -0
  49. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/LICENSE +0 -0
  50. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/README.md +0 -0
  51. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/README_en.md +0 -0
  52. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/README_ja.md +0 -0
  53. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/__init__.py +0 -0
  54. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/__init__.py +0 -0
  55. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/all.py +0 -0
  56. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/event/__init__.py +0 -0
  57. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/event/filter/__init__.py +0 -0
  58. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/message_components.py +0 -0
  59. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/platform/__init__.py +0 -0
  60. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/provider/__init__.py +0 -0
  61. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/star/__init__.py +0 -0
  62. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/util/__init__.py +0 -0
  63. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/__init__.py +0 -0
  64. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/__main__.py +0 -0
  65. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/__init__.py +0 -0
  66. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/cmd_conf.py +0 -0
  67. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/cmd_init.py +0 -0
  68. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/cmd_plug.py +0 -0
  69. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/cmd_run.py +0 -0
  70. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/utils/__init__.py +0 -0
  71. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/utils/plugin.py +0 -0
  72. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/utils/version_comparator.py +0 -0
  73. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/__init__.py +0 -0
  74. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/agent.py +0 -0
  75. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/handoff.py +0 -0
  76. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/hooks.py +0 -0
  77. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/mcp_client.py +0 -0
  78. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/response.py +0 -0
  79. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/run_context.py +0 -0
  80. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/runners/__init__.py +0 -0
  81. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/runners/base.py +0 -0
  82. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/runners/tool_loop_agent_runner.py +0 -0
  83. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/tool.py +0 -0
  84. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/tool_executor.py +0 -0
  85. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/astr_agent_context.py +0 -0
  86. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/config/__init__.py +0 -0
  87. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/config/astrbot_config.py +0 -0
  88. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/conversation_mgr.py +0 -0
  89. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/core_lifecycle.py +0 -0
  90. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/__init__.py +0 -0
  91. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/migration/helper.py +0 -0
  92. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/migration/migra_3_to_4.py +0 -0
  93. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/migration/shared_preferences_v3.py +0 -0
  94. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/migration/sqlite_v3.py +0 -0
  95. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/po.py +0 -0
  96. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/sqlite.py +0 -0
  97. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/base.py +0 -0
  98. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/__init__.py +0 -0
  99. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/document_storage.py +0 -0
  100. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/embedding_storage.py +0 -0
  101. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql +0 -0
  102. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/vec_db.py +0 -0
  103. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/event_bus.py +0 -0
  104. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/file_token_service.py +0 -0
  105. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/initial_loader.py +0 -0
  106. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/log.py +0 -0
  107. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/message/components.py +0 -0
  108. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/message/message_event_result.py +0 -0
  109. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/persona_mgr.py +0 -0
  110. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/__init__.py +0 -0
  111. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/stage.py +0 -0
  112. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/strategies/__init__.py +0 -0
  113. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py +0 -0
  114. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/strategies/keywords.py +0 -0
  115. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/strategies/strategy.py +0 -0
  116. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/context.py +0 -0
  117. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/context_utils.py +0 -0
  118. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/preprocess_stage/stage.py +0 -0
  119. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/process_stage/method/star_request.py +0 -0
  120. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/process_stage/stage.py +0 -0
  121. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/rate_limit_check/stage.py +0 -0
  122. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/respond/stage.py +0 -0
  123. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/result_decorate/stage.py +0 -0
  124. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/scheduler.py +0 -0
  125. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/session_status_check/stage.py +0 -0
  126. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/stage.py +0 -0
  127. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/waking_check/stage.py +0 -0
  128. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/whitelist_check/stage.py +0 -0
  129. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/__init__.py +0 -0
  130. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/astr_message_event.py +0 -0
  131. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/astrbot_message.py +0 -0
  132. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/manager.py +0 -0
  133. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/message_session.py +0 -0
  134. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/message_type.py +0 -0
  135. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/platform.py +0 -0
  136. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/platform_metadata.py +0 -0
  137. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/register.py +0 -0
  138. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +0 -0
  139. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +0 -0
  140. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/dingtalk/dingtalk_event.py +0 -0
  141. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/discord/client.py +0 -0
  142. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/discord/components.py +0 -0
  143. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/discord/discord_platform_adapter.py +0 -0
  144. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/discord/discord_platform_event.py +0 -0
  145. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/lark/lark_adapter.py +0 -0
  146. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/lark/lark_event.py +0 -0
  147. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +0 -0
  148. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +0 -0
  149. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py +0 -0
  150. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py +0 -0
  151. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +0 -0
  152. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/slack/client.py +0 -0
  153. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/slack/slack_adapter.py +0 -0
  154. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/slack/slack_event.py +0 -0
  155. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/telegram/tg_adapter.py +0 -0
  156. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/telegram/tg_event.py +0 -0
  157. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/webchat/webchat_adapter.py +0 -0
  158. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/webchat/webchat_event.py +0 -0
  159. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +0 -0
  160. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +0 -0
  161. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py +0 -0
  162. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py +0 -0
  163. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wecom/wecom_adapter.py +0 -0
  164. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wecom/wecom_event.py +0 -0
  165. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wecom/wecom_kf.py +0 -0
  166. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wecom/wecom_kf_message.py +0 -0
  167. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +0 -0
  168. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +0 -0
  169. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform_message_history_mgr.py +0 -0
  170. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/__init__.py +0 -0
  171. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/entites.py +0 -0
  172. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/func_tool_manager.py +0 -0
  173. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/manager.py +0 -0
  174. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/provider.py +0 -0
  175. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/register.py +0 -0
  176. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/anthropic_source.py +0 -0
  177. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/azure_tts_source.py +0 -0
  178. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/dashscope_source.py +0 -0
  179. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/dashscope_tts.py +0 -0
  180. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/dify_source.py +0 -0
  181. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/edge_tts_source.py +0 -0
  182. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/fishaudio_tts_api_source.py +0 -0
  183. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gemini_embedding_source.py +0 -0
  184. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gemini_tts_source.py +0 -0
  185. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gsv_selfhosted_source.py +0 -0
  186. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gsvi_tts_source.py +0 -0
  187. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/minimax_tts_api_source.py +0 -0
  188. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/openai_embedding_source.py +0 -0
  189. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/openai_tts_api_source.py +0 -0
  190. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/sensevoice_selfhosted_source.py +0 -0
  191. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/vllm_rerank_source.py +0 -0
  192. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/volcengine_tts.py +0 -0
  193. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/whisper_api_source.py +0 -0
  194. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/whisper_selfhosted_source.py +0 -0
  195. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/zhipu_source.py +0 -0
  196. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/README.md +0 -0
  197. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/__init__.py +0 -0
  198. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/config.py +0 -0
  199. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/context.py +0 -0
  200. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/__init__.py +0 -0
  201. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/command.py +0 -0
  202. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/command_group.py +0 -0
  203. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/custom_filter.py +0 -0
  204. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/event_message_type.py +0 -0
  205. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/permission.py +0 -0
  206. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/platform_adapter_type.py +0 -0
  207. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/regex.py +0 -0
  208. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/register/__init__.py +0 -0
  209. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/register/star.py +0 -0
  210. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/register/star_handler.py +0 -0
  211. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/session_llm_manager.py +0 -0
  212. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/session_plugin_manager.py +0 -0
  213. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/star.py +0 -0
  214. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/star_handler.py +0 -0
  215. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/star_manager.py +0 -0
  216. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/star_tools.py +0 -0
  217. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/updator.py +0 -0
  218. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/astrbot_path.py +0 -0
  219. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/command_parser.py +0 -0
  220. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/dify_api_client.py +0 -0
  221. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/log_pipe.py +0 -0
  222. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/metrics.py +0 -0
  223. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/path_util.py +0 -0
  224. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/pip_installer.py +0 -0
  225. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/session_lock.py +0 -0
  226. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/session_waiter.py +0 -0
  227. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/shared_preferences.py +0 -0
  228. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/__init__.py +0 -0
  229. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/local_strategy.py +0 -0
  230. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/network_strategy.py +0 -0
  231. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/renderer.py +0 -0
  232. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/template/base.html +0 -0
  233. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/tencent_record_helper.py +0 -0
  234. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/version_comparator.py +0 -0
  235. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/__init__.py +0 -0
  236. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/auth.py +0 -0
  237. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/chat.py +0 -0
  238. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/conversation.py +0 -0
  239. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/file.py +0 -0
  240. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/log.py +0 -0
  241. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/persona.py +0 -0
  242. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/plugin.py +0 -0
  243. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/route.py +0 -0
  244. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/session_management.py +0 -0
  245. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/stat.py +0 -0
  246. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/static_file.py +0 -0
  247. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/tools.py +0 -0
  248. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/server.py +0 -0
  249. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.0.md +0 -0
  250. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.1.md +0 -0
  251. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.10.md +0 -0
  252. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.11.md +0 -0
  253. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.12.md +0 -0
  254. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.13.md +0 -0
  255. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.14.md +0 -0
  256. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.15.md +0 -0
  257. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.16.md +0 -0
  258. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.17.md +0 -0
  259. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.18.md +0 -0
  260. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.19.md +0 -0
  261. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.20.md +0 -0
  262. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.21.md +0 -0
  263. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.22.md +0 -0
  264. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.23.md +0 -0
  265. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.24.md +0 -0
  266. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.25.md +0 -0
  267. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.26.md +0 -0
  268. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.27.md +0 -0
  269. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.28.md +0 -0
  270. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.29.md +0 -0
  271. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.3.md +0 -0
  272. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.30.md +0 -0
  273. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.31.md +0 -0
  274. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.32.md +0 -0
  275. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.33.md +0 -0
  276. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.35.md +0 -0
  277. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.36.md +0 -0
  278. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.37.md +0 -0
  279. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.38.md +0 -0
  280. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.39.md +0 -0
  281. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.4.md +0 -0
  282. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.5.md +0 -0
  283. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.6.md +0 -0
  284. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.7.md +0 -0
  285. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.8.md +0 -0
  286. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.9.md +0 -0
  287. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.0.md +0 -0
  288. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.1.md +0 -0
  289. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.10.md +0 -0
  290. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.11.md +0 -0
  291. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.12.md +0 -0
  292. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.13.md +0 -0
  293. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.14.md +0 -0
  294. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.15.md +0 -0
  295. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.16.md +0 -0
  296. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.17.md +0 -0
  297. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.18.md +0 -0
  298. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.19.md +0 -0
  299. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.2.md +0 -0
  300. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.20.md +0 -0
  301. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.21.md +0 -0
  302. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.22.md +0 -0
  303. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.23.md +0 -0
  304. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.24.md +0 -0
  305. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.25.md +0 -0
  306. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.26.md +0 -0
  307. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.3.1.md +0 -0
  308. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.3.2.md +0 -0
  309. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.3.md +0 -0
  310. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.4.md +0 -0
  311. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.5.md +0 -0
  312. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.6.md +0 -0
  313. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.7.md +0 -0
  314. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.8.md +0 -0
  315. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.9.md +0 -0
  316. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v4.0.0-beta.3.md +0 -0
  317. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/compose.yml +0 -0
  318. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/.gitignore +0 -0
  319. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/LICENSE +0 -0
  320. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/README.md +0 -0
  321. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/env.d.ts +0 -0
  322. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/index.html +0 -0
  323. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/public/_redirects +0 -0
  324. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/public/favicon.svg +0 -0
  325. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/App.vue +0 -0
  326. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/astrbot_banner.png +0 -0
  327. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/astrbot_logo_mini.webp +0 -0
  328. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/dingtalk.svg +0 -0
  329. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/discord.svg +0 -0
  330. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/kook.png +0 -0
  331. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/lark.png +0 -0
  332. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/qq.png +0 -0
  333. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/slack.svg +0 -0
  334. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/telegram.svg +0 -0
  335. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/vocechat.png +0 -0
  336. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/wechat.png +0 -0
  337. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/wecom.png +0 -0
  338. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/ConfirmDialog.vue +0 -0
  339. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/chat/ProviderModelSelector.vue +0 -0
  340. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/AstrBotConfig.vue +0 -0
  341. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/AstrBotConfigV4.vue +0 -0
  342. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ConsoleDisplayer.vue +0 -0
  343. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ExtensionCard.vue +0 -0
  344. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ItemCard.vue +0 -0
  345. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ItemCardGrid.vue +0 -0
  346. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/KnowledgeBaseSelector.vue +0 -0
  347. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/LanguageSwitcher.vue +0 -0
  348. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ListConfigItem.vue +0 -0
  349. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/Logo.vue +0 -0
  350. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/PersonaSelector.vue +0 -0
  351. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/PluginSetSelector.vue +0 -0
  352. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ProviderSelector.vue +0 -0
  353. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ProxySelector.vue +0 -0
  354. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ReadmeDialog.vue +0 -0
  355. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/T2ITemplateEditor.vue +0 -0
  356. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/UiParentCard.vue +0 -0
  357. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/WaitingForRestart.vue +0 -0
  358. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/config.ts +0 -0
  359. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/composables.ts +0 -0
  360. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/loader.ts +0 -0
  361. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/actions.json +0 -0
  362. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/common.json +0 -0
  363. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/navigation.json +0 -0
  364. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/status.json +0 -0
  365. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/about.json +0 -0
  366. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/alkaid/index.json +0 -0
  367. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/alkaid/knowledge-base.json +0 -0
  368. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/alkaid/memory.json +0 -0
  369. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/auth.json +0 -0
  370. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/chart.json +0 -0
  371. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/chat.json +0 -0
  372. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/config.json +0 -0
  373. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/console.json +0 -0
  374. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/conversation.json +0 -0
  375. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/dashboard.json +0 -0
  376. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/extension.json +0 -0
  377. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/persona.json +0 -0
  378. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/platform.json +0 -0
  379. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/provider.json +0 -0
  380. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/session-management.json +0 -0
  381. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/settings.json +0 -0
  382. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/tool-use.json +0 -0
  383. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/messages/errors.json +0 -0
  384. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/messages/success.json +0 -0
  385. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/messages/validation.json +0 -0
  386. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/actions.json +0 -0
  387. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/common.json +0 -0
  388. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/navigation.json +0 -0
  389. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/status.json +0 -0
  390. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/about.json +0 -0
  391. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/alkaid/index.json +0 -0
  392. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/alkaid/knowledge-base.json +0 -0
  393. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/alkaid/memory.json +0 -0
  394. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/auth.json +0 -0
  395. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/chart.json +0 -0
  396. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/chat.json +0 -0
  397. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/config.json +0 -0
  398. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/console.json +0 -0
  399. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/conversation.json +0 -0
  400. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/dashboard.json +0 -0
  401. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/extension.json +0 -0
  402. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/persona.json +0 -0
  403. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/platform.json +0 -0
  404. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/provider.json +0 -0
  405. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/session-management.json +0 -0
  406. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/settings.json +0 -0
  407. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/tool-use.json +0 -0
  408. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/messages/errors.json +0 -0
  409. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/messages/success.json +0 -0
  410. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/messages/validation.json +0 -0
  411. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/tools/index.ts +0 -0
  412. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/translations.ts +0 -0
  413. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/types.ts +0 -0
  414. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/validator.ts +0 -0
  415. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/blank/BlankLayout.vue +0 -0
  416. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/FullLayout.vue +0 -0
  417. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue +0 -0
  418. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue +0 -0
  419. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/vertical-sidebar/sidebarItem.ts +0 -0
  420. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/main.ts +0 -0
  421. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/plugins/confirmPlugin.ts +0 -0
  422. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/plugins/vuetify.ts +0 -0
  423. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/router/AuthRoutes.ts +0 -0
  424. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/router/ChatBoxRoutes.ts +0 -0
  425. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/router/MainRoutes.ts +0 -0
  426. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/router/index.ts +0 -0
  427. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/_override.scss +0 -0
  428. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/_variables.scss +0 -0
  429. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VButtons.scss +0 -0
  430. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VCard.scss +0 -0
  431. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VField.scss +0 -0
  432. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VInput.scss +0 -0
  433. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VNavigationDrawer.scss +0 -0
  434. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VScrollbar.scss +0 -0
  435. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VShadow.scss +0 -0
  436. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VTabs.scss +0 -0
  437. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VTextField.scss +0 -0
  438. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/layout/_container.scss +0 -0
  439. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/layout/_sidebar.scss +0 -0
  440. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/pages/_dashboards.scss +0 -0
  441. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/style.scss +0 -0
  442. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/stores/auth.ts +0 -0
  443. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/stores/common.js +0 -0
  444. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/stores/customizer.ts +0 -0
  445. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/theme/DarkTheme.ts +0 -0
  446. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/theme/LightTheme.ts +0 -0
  447. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/types/themeTypes/ThemeType.ts +0 -0
  448. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/types/vue3-print-nb.d.ts +0 -0
  449. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/types/vue_tabler_icon.d.ts +0 -0
  450. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/AboutPage.vue +0 -0
  451. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/AlkaidPage.vue +0 -0
  452. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ChatBoxPage.vue +0 -0
  453. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ChatPage.vue +0 -0
  454. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ConsolePage.vue +0 -0
  455. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ConversationPage.vue +0 -0
  456. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ExtensionPage.vue +0 -0
  457. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/PersonaPage.vue +0 -0
  458. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/PlatformPage.vue +0 -0
  459. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ProviderPage.vue +0 -0
  460. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/SessionManagementPage.vue +0 -0
  461. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/Settings.vue +0 -0
  462. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ToolUsePage.vue +0 -0
  463. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/alkaid/KnowledgeBase.vue +0 -0
  464. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/alkaid/LongTermMemory.vue +0 -0
  465. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/alkaid/Other.vue +0 -0
  466. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/authentication/auth/LoginPage.vue +0 -0
  467. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/authentication/authForms/AuthLogin.vue +0 -0
  468. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/DefaultDashboard.vue +0 -0
  469. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/MemoryUsage.vue +0 -0
  470. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/MessageStat.vue +0 -0
  471. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/OnlinePlatform.vue +0 -0
  472. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/OnlineTime.vue +0 -0
  473. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/PlatformStat.vue +0 -0
  474. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/RunningTime.vue +0 -0
  475. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/TotalMessage.vue +0 -0
  476. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/tsconfig.json +0 -0
  477. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/tsconfig.vite-config.json +0 -0
  478. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/vite.config.ts +0 -0
  479. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/astrbot/long_term_memory.py +0 -0
  480. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/astrbot/metadata.yaml +0 -0
  481. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/python_interpreter/metadata.yaml +0 -0
  482. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/python_interpreter/requirements.txt +0 -0
  483. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/python_interpreter/shared/api.py +0 -0
  484. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/reminder/main.py +0 -0
  485. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/reminder/metadata.yaml +0 -0
  486. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/session_controller/main.py +0 -0
  487. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/session_controller/metadata.yaml +0 -0
  488. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/thinking_filter/main.py +0 -0
  489. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/thinking_filter/metadata.yaml +0 -0
  490. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/engines/__init__.py +0 -0
  491. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/engines/bing.py +0 -0
  492. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/engines/google.py +0 -0
  493. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/engines/sogo.py +0 -0
  494. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/main.py +0 -0
  495. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/metadata.yaml +0 -0
  496. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/requirements.txt +0 -0
  497. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/samples/stt_health_check.wav +0 -0
  498. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/tests/test_dashboard.py +0 -0
  499. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/tests/test_main.py +0 -0
  500. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/tests/test_pipeline.py +0 -0
  501. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/tests/test_plugin_manager.py +0 -0
  502. {astrbot-4.0.0b3 → astrbot-4.0.0b5}/uv.lock +0 -0
@@ -27,6 +27,33 @@ jobs:
27
27
  if: github.event_name == 'workflow_dispatch'
28
28
  run: git checkout ${{ steps.get-latest-tag.outputs.latest_tag }}
29
29
 
30
+ - name: Check if version is pre-release
31
+ id: check-prerelease
32
+ run: |
33
+ if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
34
+ version="${{ steps.get-latest-tag.outputs.latest_tag }}"
35
+ else
36
+ version="${{ github.ref_name }}"
37
+ fi
38
+ if [[ "$version" == *"beta"* ]] || [[ "$version" == *"alpha"* ]]; then
39
+ echo "is_prerelease=true" >> $GITHUB_OUTPUT
40
+ echo "Version $version is a pre-release, will not push latest tag"
41
+ else
42
+ echo "is_prerelease=false" >> $GITHUB_OUTPUT
43
+ echo "Version $version is a stable release, will push latest tag"
44
+ fi
45
+
46
+ - name: Build Dashboard
47
+ run: |
48
+ cd dashboard
49
+ npm install
50
+ npm run build
51
+ mkdir -p dist/assets
52
+ echo $(git rev-parse HEAD) > dist/assets/version
53
+ cd ..
54
+ mkdir -p data
55
+ cp -r dashboard/dist data/
56
+
30
57
  - name: Set QEMU
31
58
  uses: docker/setup-qemu-action@v3
32
59
 
@@ -53,9 +80,9 @@ jobs:
53
80
  platforms: linux/amd64,linux/arm64
54
81
  push: true
55
82
  tags: |
56
- ${{ secrets.DOCKER_HUB_USERNAME }}/astrbot:latest
83
+ ${{ steps.check-prerelease.outputs.is_prerelease == 'false' && format('{0}/astrbot:latest', secrets.DOCKER_HUB_USERNAME) || '' }}
57
84
  ${{ secrets.DOCKER_HUB_USERNAME }}/astrbot:${{ github.event_name == 'workflow_dispatch' && steps.get-latest-tag.outputs.latest_tag || github.ref_name }}
58
- ghcr.io/soulter/astrbot:latest
85
+ ${{ steps.check-prerelease.outputs.is_prerelease == 'false' && 'ghcr.io/soulter/astrbot:latest' || '' }}
59
86
  ghcr.io/soulter/astrbot:${{ github.event_name == 'workflow_dispatch' && steps.get-latest-tag.outputs.latest_tag || github.ref_name }}
60
87
 
61
88
  - name: Post build notifications
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AstrBot
3
- Version: 4.0.0b3
3
+ Version: 4.0.0b5
4
4
  Summary: 易上手的多平台 LLM 聊天机器人及开发框架
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.10
@@ -20,7 +20,7 @@ Requires-Dist: defusedxml>=0.7.1
20
20
  Requires-Dist: deprecated>=1.2.18
21
21
  Requires-Dist: dingtalk-stream>=0.22.1
22
22
  Requires-Dist: docstring-parser>=0.16
23
- Requires-Dist: faiss-cpu>=1.10.0
23
+ Requires-Dist: faiss-cpu==1.10.0
24
24
  Requires-Dist: filelock>=3.18.0
25
25
  Requires-Dist: google-genai>=1.14.0
26
26
  Requires-Dist: googlesearch-python>=1.3.0
@@ -37,7 +37,10 @@ async def check_dashboard(astrbot_root: Path) -> None:
37
37
  ):
38
38
  click.echo("正在安装管理面板...")
39
39
  await download_dashboard(
40
- path="data/dashboard.zip", extract_path=str(astrbot_root)
40
+ path="data/dashboard.zip",
41
+ extract_path=str(astrbot_root),
42
+ version=f"v{VERSION}",
43
+ latest=False,
41
44
  )
42
45
  click.echo("管理面板安装完成")
43
46
 
@@ -50,7 +53,10 @@ async def check_dashboard(astrbot_root: Path) -> None:
50
53
  version = dashboard_version.split("v")[1]
51
54
  click.echo(f"管理面板版本: {version}")
52
55
  await download_dashboard(
53
- path="data/dashboard.zip", extract_path=str(astrbot_root)
56
+ path="data/dashboard.zip",
57
+ extract_path=str(astrbot_root),
58
+ version=f"v{VERSION}",
59
+ latest=False,
54
60
  )
55
61
  except Exception as e:
56
62
  click.echo(f"下载管理面板失败: {e}")
@@ -59,7 +65,10 @@ async def check_dashboard(astrbot_root: Path) -> None:
59
65
  click.echo("初始化管理面板目录...")
60
66
  try:
61
67
  await download_dashboard(
62
- path=str(astrbot_root / "dashboard.zip"), extract_path=str(astrbot_root)
68
+ path=str(astrbot_root / "dashboard.zip"),
69
+ extract_path=str(astrbot_root),
70
+ version=f"v{VERSION}",
71
+ latest=False,
63
72
  )
64
73
  click.echo("管理面板初始化完成")
65
74
  except Exception as e:
@@ -36,13 +36,21 @@ class AstrBotConfigManager:
36
36
  self.confs: dict[str, AstrBotConfig] = {}
37
37
  """uuid / "default" -> AstrBotConfig"""
38
38
  self.confs["default"] = default_config
39
+ self.abconf_data = None
39
40
  self._load_all_configs()
40
41
 
42
+ def _get_abconf_data(self) -> dict:
43
+ """获取所有的 abconf 数据"""
44
+ if self.abconf_data is None:
45
+ self.abconf_data = self.sp.get(
46
+ "abconf_mapping", {}, scope="global", scope_id="global"
47
+ )
48
+ return self.abconf_data
49
+
41
50
  def _load_all_configs(self):
42
51
  """Load all configurations from the shared preferences."""
43
- abconf_data = self.sp.get(
44
- "abconf_mapping", {}, scope="global", scope_id="global"
45
- )
52
+ abconf_data = self._get_abconf_data()
53
+ self.abconf_data = abconf_data
46
54
  for uuid_, meta in abconf_data.items():
47
55
  filename = meta["path"]
48
56
  conf_path = os.path.join(get_astrbot_config_path(), filename)
@@ -72,9 +80,7 @@ class AstrBotConfigManager:
72
80
  ConfInfo: 包含配置文件的 uuid, 路径和名称等信息, 是一个 dict 类型
73
81
  """
74
82
  # uuid -> { "umop": list, "path": str, "name": str }
75
- abconf_data = self.sp.get(
76
- "abconf_mapping", {}, scope="global", scope_id="global"
77
- )
83
+ abconf_data = self._get_abconf_data()
78
84
  if isinstance(umo, MessageSession):
79
85
  umo = str(umo)
80
86
  else:
@@ -115,6 +121,7 @@ class AstrBotConfigManager:
115
121
  "name": random_word,
116
122
  }
117
123
  self.sp.put("abconf_mapping", abconf_data, scope="global", scope_id="global")
124
+ self.abconf_data = abconf_data
118
125
 
119
126
  def get_conf(self, umo: str | MessageSession | None) -> AstrBotConfig:
120
127
  """获取指定 umo 的配置文件。如果不存在,则 fallback 到默认配置文件。"""
@@ -147,9 +154,7 @@ class AstrBotConfigManager:
147
154
  """获取所有配置文件的元数据列表"""
148
155
  conf_list = []
149
156
  conf_list.append(DEFAULT_CONFIG_CONF_INFO)
150
- abconf_mapping = self.sp.get(
151
- "abconf_mapping", {}, scope="global", scope_id="global"
152
- )
157
+ abconf_mapping = self._get_abconf_data()
153
158
  for uuid_, meta in abconf_mapping.items():
154
159
  conf_list.append(ConfInfo(**meta, id=uuid_))
155
160
  return conf_list
@@ -218,6 +223,7 @@ class AstrBotConfigManager:
218
223
  # 从映射中移除
219
224
  del abconf_data[conf_id]
220
225
  self.sp.put("abconf_mapping", abconf_data, scope="global", scope_id="global")
226
+ self.abconf_data = abconf_data
221
227
 
222
228
  logger.info(f"成功删除配置文件 {conf_id}")
223
229
  return True
@@ -263,6 +269,7 @@ class AstrBotConfigManager:
263
269
 
264
270
  # 保存更新
265
271
  self.sp.put("abconf_mapping", abconf_data, scope="global", scope_id="global")
272
+ self.abconf_data = abconf_data
266
273
  logger.info(f"成功更新配置文件 {conf_id} 的信息")
267
274
  return True
268
275
 
@@ -6,7 +6,7 @@ import os
6
6
 
7
7
  from astrbot.core.utils.astrbot_path import get_astrbot_data_path
8
8
 
9
- VERSION = "4.0.0-beta.3"
9
+ VERSION = "4.0.0-beta.5"
10
10
  DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
11
11
 
12
12
  # 默认配置
@@ -866,6 +866,9 @@ CONFIG_METADATA_2 = {
866
866
  "provider_type": "text_to_speech",
867
867
  "enable": False,
868
868
  "edge-tts-voice": "zh-CN-XiaoxiaoNeural",
869
+ "rate": "+0%",
870
+ "volume": "+0%",
871
+ "pitch": "+0Hz",
869
872
  "timeout": 20,
870
873
  },
871
874
  "GSV TTS(本地加载)": {
@@ -1913,7 +1916,7 @@ CONFIG_METADATA_3 = {
1913
1916
  "type": "bool",
1914
1917
  },
1915
1918
  "provider_settings.identifier": {
1916
- "description": "用户感知",
1919
+ "description": "用户识别",
1917
1920
  "type": "bool",
1918
1921
  },
1919
1922
  "provider_settings.datetime_system_prompt": {
@@ -1926,7 +1929,7 @@ CONFIG_METADATA_3 = {
1926
1929
  },
1927
1930
  "provider_settings.max_agent_step": {
1928
1931
  "description": "工具调用轮数上限",
1929
- "type": "bool",
1932
+ "type": "int",
1930
1933
  },
1931
1934
  "provider_settings.streaming_response": {
1932
1935
  "description": "流式回复",
@@ -2288,7 +2291,7 @@ CONFIG_METADATA_3_SYSTEM = {
2288
2291
  "condition": {
2289
2292
  "t2i_strategy": "remote",
2290
2293
  },
2291
- "_special": "t2i_template"
2294
+ "_special": "t2i_template",
2292
2295
  },
2293
2296
  "log_level": {
2294
2297
  "description": "控制台日志级别",
@@ -2321,6 +2324,11 @@ CONFIG_METADATA_3_SYSTEM = {
2321
2324
  "type": "string",
2322
2325
  "hint": "启用后,会以添加环境变量的方式设置代理。格式为 `http://ip:port`",
2323
2326
  },
2327
+ "no_proxy": {
2328
+ "description": "直连地址列表",
2329
+ "type": "list",
2330
+ "items": {"type": "string"},
2331
+ },
2324
2332
  },
2325
2333
  }
2326
2334
  },
@@ -299,7 +299,9 @@ class LLMRequestSubStage(Stage):
299
299
  self.max_context_length - 1,
300
300
  )
301
301
  self.streaming_response: bool = settings["streaming_response"]
302
- self.max_step: int = settings.get("max_agent_step", 10)
302
+ self.max_step: int = settings.get("max_agent_step", 30)
303
+ if isinstance(self.max_step, bool): # workaround: #2622
304
+ self.max_step = 30
303
305
  self.show_tool_use: bool = settings.get("show_tool_use_status", True)
304
306
 
305
307
  for bwp in self.bot_wake_prefixs:
@@ -434,7 +436,9 @@ class LLMRequestSubStage(Stage):
434
436
  provider_cfg = provider.provider_config.get("modalities", ["tool_use"])
435
437
  # 如果模型不支持工具使用,但请求中包含工具列表,则清空。
436
438
  if "tool_use" not in provider_cfg:
437
- logger.debug(f"用户设置提供商 {provider} 不支持工具使用,清空工具列表。")
439
+ logger.debug(
440
+ f"用户设置提供商 {provider} 不支持工具使用,清空工具列表。"
441
+ )
438
442
  req.func_tool = None
439
443
  # 插件可用性设置
440
444
  if event.plugins_name is not None and req.func_tool:
@@ -67,12 +67,19 @@ class AiocqhttpMessageEvent(AstrMessageEvent):
67
67
  session_id: str,
68
68
  messages: list[dict],
69
69
  ):
70
- if event:
71
- await bot.send(event=event, message=messages)
72
- elif is_group:
70
+ # session_id 必须是纯数字字符串
71
+ session_id = int(session_id) if session_id.isdigit() else None
72
+
73
+ if is_group and isinstance(session_id, int):
73
74
  await bot.send_group_msg(group_id=session_id, message=messages)
74
- else:
75
+ elif not is_group and isinstance(session_id, int):
75
76
  await bot.send_private_msg(user_id=session_id, message=messages)
77
+ elif isinstance(event, Event): # 最后兜底
78
+ await bot.send(event=event, message=messages)
79
+ else:
80
+ raise ValueError(
81
+ f"无法发送消息:缺少有效的数字 session_id({session_id}) 或 event({event})"
82
+ )
76
83
 
77
84
  @classmethod
78
85
  async def send_message(
@@ -83,7 +90,15 @@ class AiocqhttpMessageEvent(AstrMessageEvent):
83
90
  is_group: bool = False,
84
91
  session_id: str = None,
85
92
  ):
86
- """发送消息"""
93
+ """发送消息至 QQ 协议端(aiocqhttp)。
94
+
95
+ Args:
96
+ bot (CQHttp): aiocqhttp 机器人实例
97
+ message_chain (MessageChain): 要发送的消息链
98
+ event (Event | None, optional): aiocqhttp 事件对象.
99
+ is_group (bool, optional): 是否为群消息.
100
+ session_id (str | None, optional): 会话 ID(群号或 QQ 号
101
+ """
87
102
 
88
103
  # 转发消息、文件消息不能和普通消息混在一起发送
89
104
  send_one_by_one = any(
@@ -122,18 +137,15 @@ class AiocqhttpMessageEvent(AstrMessageEvent):
122
137
 
123
138
  async def send(self, message: MessageChain):
124
139
  """发送消息"""
125
- event = self.message_obj.raw_message
126
- assert isinstance(event, Event), "Event must be an instance of aiocqhttp.Event"
127
- is_group = False
128
- if self.get_group_id():
129
- is_group = True
130
- session_id = self.get_group_id()
131
- else:
132
- session_id = self.get_sender_id()
140
+ event = getattr(self.message_obj, "raw_message", None)
141
+
142
+ is_group = bool(self.get_group_id())
143
+ session_id = self.get_group_id() if is_group else self.get_sender_id()
144
+
133
145
  await self.send_message(
134
146
  bot=self.bot,
135
147
  message_chain=message,
136
- event=event,
148
+ event=event, # 不强制要求一定是 Event
137
149
  is_group=is_group,
138
150
  session_id=session_id,
139
151
  )
@@ -4,9 +4,11 @@ import json
4
4
  from astrbot.core.utils.io import download_image_by_url
5
5
  from astrbot import logger
6
6
  from dataclasses import dataclass, field
7
- from typing import List, Dict, Type
7
+ from typing import List, Dict, Type, Any
8
8
  from astrbot.core.agent.tool import ToolSet
9
9
  from openai.types.chat.chat_completion import ChatCompletion
10
+ from google.genai.types import GenerateContentResponse
11
+ from anthropic.types import Message
10
12
  from openai.types.chat.chat_completion_message_tool_call import (
11
13
  ChatCompletionMessageToolCall,
12
14
  )
@@ -30,11 +32,11 @@ class ProviderMetaData:
30
32
  desc: str = ""
31
33
  """提供商适配器描述."""
32
34
  provider_type: ProviderType = ProviderType.CHAT_COMPLETION
33
- cls_type: Type = None
35
+ cls_type: Type | None = None
34
36
 
35
- default_config_tmpl: dict = None
37
+ default_config_tmpl: dict | None = None
36
38
  """平台的默认配置模板"""
37
- provider_display_name: str = None
39
+ provider_display_name: str | None = None
38
40
  """显示在 WebUI 配置页中的提供商名称,如空则是 type"""
39
41
 
40
42
 
@@ -58,7 +60,7 @@ class ToolCallMessageSegment:
58
60
  class AssistantMessageSegment:
59
61
  """OpenAI 格式的上下文中 role 为 assistant 的消息段。参考: https://platform.openai.com/docs/guides/function-calling"""
60
62
 
61
- content: str = None
63
+ content: str | None = None
62
64
  tool_calls: List[ChatCompletionMessageToolCall | Dict] = field(default_factory=list)
63
65
  role: str = "assistant"
64
66
 
@@ -205,17 +207,17 @@ class ProviderRequest:
205
207
  class LLMResponse:
206
208
  role: str
207
209
  """角色, assistant, tool, err"""
208
- result_chain: MessageChain = None
210
+ result_chain: MessageChain | None = None
209
211
  """返回的消息链"""
210
- tools_call_args: List[Dict[str, any]] = field(default_factory=list)
212
+ tools_call_args: List[Dict[str, Any]] = field(default_factory=list)
211
213
  """工具调用参数"""
212
214
  tools_call_name: List[str] = field(default_factory=list)
213
215
  """工具调用名称"""
214
216
  tools_call_ids: List[str] = field(default_factory=list)
215
217
  """工具调用 ID"""
216
218
 
217
- raw_completion: ChatCompletion = None
218
- _new_record: Dict[str, any] = None
219
+ raw_completion: ChatCompletion | GenerateContentResponse | Message | None = None
220
+ _new_record: Dict[str, Any] | None = None
219
221
 
220
222
  _completion_text: str = ""
221
223
 
@@ -226,12 +228,12 @@ class LLMResponse:
226
228
  self,
227
229
  role: str,
228
230
  completion_text: str = "",
229
- result_chain: MessageChain = None,
230
- tools_call_args: List[Dict[str, any]] = None,
231
- tools_call_name: List[str] = None,
232
- tools_call_ids: List[str] = None,
233
- raw_completion: ChatCompletion = None,
234
- _new_record: Dict[str, any] = None,
231
+ result_chain: MessageChain | None = None,
232
+ tools_call_args: List[Dict[str, Any]] | None = None,
233
+ tools_call_name: List[str] | None = None,
234
+ tools_call_ids: List[str] | None = None,
235
+ raw_completion: ChatCompletion | None = None,
236
+ _new_record: Dict[str, Any] | None = None,
235
237
  is_chunk: bool = False,
236
238
  ):
237
239
  """初始化 LLMResponse
@@ -15,7 +15,7 @@ from astrbot import logger
15
15
  from astrbot.api.provider import Provider
16
16
  from astrbot.core.message.message_event_result import MessageChain
17
17
  from astrbot.core.provider.entities import LLMResponse
18
- from astrbot.core.provider.func_tool_manager import FuncCall
18
+ from astrbot.core.provider.func_tool_manager import ToolSet
19
19
  from astrbot.core.utils.io import download_image_by_url
20
20
 
21
21
  from ..register import register_provider_adapter
@@ -61,7 +61,7 @@ class ProviderGoogleGenAI(Provider):
61
61
  default_persona,
62
62
  )
63
63
  self.api_keys: list = provider_config.get("key", [])
64
- self.chosen_api_key: str = self.api_keys[0] if len(self.api_keys) > 0 else None
64
+ self.chosen_api_key: str = self.api_keys[0] if len(self.api_keys) > 0 else ""
65
65
  self.timeout: int = int(provider_config.get("timeout", 180))
66
66
 
67
67
  self.api_base: Optional[str] = provider_config.get("api_base", None)
@@ -96,6 +96,9 @@ class ProviderGoogleGenAI(Provider):
96
96
 
97
97
  async def _handle_api_error(self, e: APIError, keys: list[str]) -> bool:
98
98
  """处理API错误,返回是否需要重试"""
99
+ if e.message is None:
100
+ e.message = ""
101
+
99
102
  if e.code == 429 or "API key not valid" in e.message:
100
103
  keys.remove(self.chosen_api_key)
101
104
  if len(keys) > 0:
@@ -119,7 +122,7 @@ class ProviderGoogleGenAI(Provider):
119
122
  async def _prepare_query_config(
120
123
  self,
121
124
  payloads: dict,
122
- tools: Optional[FuncCall] = None,
125
+ tools: Optional[ToolSet] = None,
123
126
  system_instruction: Optional[str] = None,
124
127
  modalities: Optional[list[str]] = None,
125
128
  temperature: float = 0.7,
@@ -321,11 +324,15 @@ class ProviderGoogleGenAI(Provider):
321
324
 
322
325
  @staticmethod
323
326
  def _process_content_parts(
324
- result: types.GenerateContentResponse, llm_response: LLMResponse
327
+ candidate: types.Candidate, llm_response: LLMResponse
325
328
  ) -> MessageChain:
326
329
  """处理内容部分并构建消息链"""
327
- finish_reason = result.candidates[0].finish_reason
328
- result_parts: Optional[types.Part] = result.candidates[0].content.parts
330
+ if not candidate.content:
331
+ logger.warning(f"收到的 candidate.content 为空: {candidate}")
332
+ raise Exception("API 返回的 candidate.content 为空。")
333
+
334
+ finish_reason = candidate.finish_reason
335
+ result_parts: list[types.Part] | None = candidate.content.parts
329
336
 
330
337
  if finish_reason == types.FinishReason.SAFETY:
331
338
  raise Exception("模型生成内容未通过 Gemini 平台的安全检查")
@@ -343,22 +350,28 @@ class ProviderGoogleGenAI(Provider):
343
350
  raise Exception("模型生成内容违反 Gemini 平台政策")
344
351
 
345
352
  if not result_parts:
346
- logger.debug(result.candidates)
347
- raise Exception("API 返回的内容为空。")
353
+ logger.warning(f"收到的 candidate.content.parts 为空: {candidate}")
354
+ raise Exception("API 返回的 candidate.content.parts 为空。")
348
355
 
349
356
  chain = []
350
357
  part: types.Part
351
358
 
352
359
  # 暂时这样Fallback
353
360
  if all(
354
- part.inline_data and part.inline_data.mime_type.startswith("image/")
361
+ part.inline_data
362
+ and part.inline_data.mime_type
363
+ and part.inline_data.mime_type.startswith("image/")
355
364
  for part in result_parts
356
365
  ):
357
366
  chain.append(Comp.Plain("这是图片"))
358
367
  for part in result_parts:
359
368
  if part.text:
360
369
  chain.append(Comp.Plain(part.text))
361
- elif part.function_call:
370
+ elif (
371
+ part.function_call
372
+ and part.function_call.name is not None
373
+ and part.function_call.args is not None
374
+ ):
362
375
  llm_response.role = "tool"
363
376
  llm_response.tools_call_name.append(part.function_call.name)
364
377
  llm_response.tools_call_args.append(part.function_call.args)
@@ -366,11 +379,16 @@ class ProviderGoogleGenAI(Provider):
366
379
  llm_response.tools_call_ids.append(
367
380
  part.function_call.id or part.function_call.name
368
381
  )
369
- elif part.inline_data and part.inline_data.mime_type.startswith("image/"):
382
+ elif (
383
+ part.inline_data
384
+ and part.inline_data.mime_type
385
+ and part.inline_data.mime_type.startswith("image/")
386
+ and part.inline_data.data
387
+ ):
370
388
  chain.append(Comp.Image.fromBytes(part.inline_data.data))
371
389
  return MessageChain(chain=chain)
372
390
 
373
- async def _query(self, payloads: dict, tools: FuncCall) -> LLMResponse:
391
+ async def _query(self, payloads: dict, tools: ToolSet | None) -> LLMResponse:
374
392
  """非流式请求 Gemini API"""
375
393
  system_instruction = next(
376
394
  (msg["content"] for msg in payloads["messages"] if msg["role"] == "system"),
@@ -396,6 +414,10 @@ class ProviderGoogleGenAI(Provider):
396
414
  config=config,
397
415
  )
398
416
 
417
+ if not result.candidates:
418
+ logger.error(f"请求失败, 返回的 candidates 为空: {result}")
419
+ raise Exception("请求失败, 返回的 candidates 为空。")
420
+
399
421
  if result.candidates[0].finish_reason == types.FinishReason.RECITATION:
400
422
  if temperature > 2:
401
423
  raise Exception("温度参数已超过最大值2,仍然发生recitation")
@@ -408,6 +430,8 @@ class ProviderGoogleGenAI(Provider):
408
430
  break
409
431
 
410
432
  except APIError as e:
433
+ if e.message is None:
434
+ e.message = ""
411
435
  if "Developer instruction is not enabled" in e.message:
412
436
  logger.warning(
413
437
  f"{self.get_model()} 不支持 system prompt,已自动去除(影响人格设置)"
@@ -432,11 +456,13 @@ class ProviderGoogleGenAI(Provider):
432
456
 
433
457
  llm_response = LLMResponse("assistant")
434
458
  llm_response.raw_completion = result
435
- llm_response.result_chain = self._process_content_parts(result, llm_response)
459
+ llm_response.result_chain = self._process_content_parts(
460
+ result.candidates[0], llm_response
461
+ )
436
462
  return llm_response
437
463
 
438
464
  async def _query_stream(
439
- self, payloads: dict, tools: FuncCall
465
+ self, payloads: dict, tools: ToolSet | None
440
466
  ) -> AsyncGenerator[LLMResponse, None]:
441
467
  """流式请求 Gemini API"""
442
468
  system_instruction = next(
@@ -459,6 +485,8 @@ class ProviderGoogleGenAI(Provider):
459
485
  )
460
486
  break
461
487
  except APIError as e:
488
+ if e.message is None:
489
+ e.message = ""
462
490
  if "Developer instruction is not enabled" in e.message:
463
491
  logger.warning(
464
492
  f"{self.get_model()} 不支持 system prompt,已自动去除(影响人格设置)"
@@ -478,13 +506,20 @@ class ProviderGoogleGenAI(Provider):
478
506
  async for chunk in result:
479
507
  llm_response = LLMResponse("assistant", is_chunk=True)
480
508
 
509
+ if not chunk.candidates:
510
+ logger.warning(f"收到的 chunk 中 candidates 为空: {chunk}")
511
+ continue
512
+ if not chunk.candidates[0].content:
513
+ logger.warning(f"收到的 chunk 中 content 为空: {chunk}")
514
+ continue
515
+
481
516
  if chunk.candidates[0].content.parts and any(
482
517
  part.function_call for part in chunk.candidates[0].content.parts
483
518
  ):
484
519
  llm_response = LLMResponse("assistant", is_chunk=False)
485
520
  llm_response.raw_completion = chunk
486
521
  llm_response.result_chain = self._process_content_parts(
487
- chunk, llm_response
522
+ chunk.candidates[0], llm_response
488
523
  )
489
524
  yield llm_response
490
525
  return
@@ -500,7 +535,7 @@ class ProviderGoogleGenAI(Provider):
500
535
  final_response = LLMResponse("assistant", is_chunk=False)
501
536
  final_response.raw_completion = chunk
502
537
  final_response.result_chain = self._process_content_parts(
503
- chunk, final_response
538
+ chunk.candidates[0], final_response
504
539
  )
505
540
  break
506
541
 
@@ -566,6 +601,8 @@ class ProviderGoogleGenAI(Provider):
566
601
  continue
567
602
  break
568
603
 
604
+ raise Exception("请求失败。")
605
+
569
606
  async def text_chat_stream(
570
607
  self,
571
608
  prompt,
@@ -621,7 +658,9 @@ class ProviderGoogleGenAI(Provider):
621
658
  return [
622
659
  m.name.replace("models/", "")
623
660
  for m in models
624
- if "generateContent" in m.supported_actions
661
+ if m.supported_actions
662
+ and "generateContent" in m.supported_actions
663
+ and m.name
625
664
  ]
626
665
  except APIError as e:
627
666
  raise Exception(f"获取模型列表失败: {e.message}")
@@ -636,7 +675,7 @@ class ProviderGoogleGenAI(Provider):
636
675
  self.chosen_api_key = key
637
676
  self._init_client()
638
677
 
639
- async def assemble_context(self, text: str, image_urls: list[str] = None):
678
+ async def assemble_context(self, text: str, image_urls: list[str] | None = None):
640
679
  """
641
680
  组装上下文。
642
681
  """
@@ -100,9 +100,9 @@ class ProviderOpenAIOfficial(Provider):
100
100
  del payloads[key]
101
101
 
102
102
  model = payloads.get("model", "")
103
- # 针对 qwen3 模型的特殊处理:非流式调用必须设置 enable_thinking=false
104
- if "qwen3" in model.lower():
105
- extra_body["enable_thinking"] = False
103
+ # 针对 qwen3 非 thinking 模型的特殊处理:非流式调用必须设置 enable_thinking=false
104
+ if "qwen3" in model.lower() and "thinking" not in model.lower():
105
+ extra_body["enable_thinking"] = False
106
106
  # 针对 deepseek 模型的特殊处理:deepseek-reasoner调用必须移除 tools ,否则将被切换至 deepseek-chat
107
107
  elif model == "deepseek-reasoner" and "tools" in payloads:
108
108
  del payloads["tools"]
@@ -56,9 +56,7 @@ class AstrBotUpdator(RepoZipUpdator):
56
56
  try:
57
57
  if "astrbot" in os.path.basename(sys.argv[0]): # 兼容cli
58
58
  if os.name == "nt":
59
- args = [
60
- f'"{arg}"' if " " in arg else arg for arg in sys.argv[1:]
61
- ]
59
+ args = [f'"{arg}"' if " " in arg else arg for arg in sys.argv[1:]]
62
60
  else:
63
61
  args = sys.argv[1:]
64
62
  os.execl(sys.executable, py, "-m", "astrbot.cli.__main__", *args)
@@ -68,9 +66,13 @@ class AstrBotUpdator(RepoZipUpdator):
68
66
  logger.error(f"重启失败({py}, {e}),请尝试手动重启。")
69
67
  raise e
70
68
 
71
- async def check_update(self, url: str, current_version: str) -> ReleaseInfo:
69
+ async def check_update(
70
+ self, url: str, current_version: str, consider_prerelease: bool = True
71
+ ) -> ReleaseInfo:
72
72
  """检查更新"""
73
- return await super().check_update(self.ASTRBOT_RELEASE_API, VERSION)
73
+ return await super().check_update(
74
+ self.ASTRBOT_RELEASE_API, VERSION, consider_prerelease
75
+ )
74
76
 
75
77
  async def get_releases(self) -> list:
76
78
  return await self.fetch_release_info(self.ASTRBOT_RELEASE_API)
@@ -227,7 +227,7 @@ async def download_dashboard(
227
227
  path = os.path.join(get_astrbot_data_path(), "dashboard.zip")
228
228
 
229
229
  if latest or len(str(version)) != 40:
230
- logger.info("准备下载最新发行版本的 AstrBot WebUI")
230
+ logger.info(f"准备下载 {version} 发行版本的 AstrBot WebUI 文件")
231
231
  ver_name = "latest" if latest else version
232
232
  dashboard_release_url = f"https://astrbot-registry.soulter.top/download/astrbot-dashboard/{ver_name}/dist.zip"
233
233
  try: