AstrBot 4.3.1__tar.gz → 4.3.3__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 (554) hide show
  1. {astrbot-4.3.1 → astrbot-4.3.3}/PKG-INFO +1 -1
  2. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/runners/tool_loop_agent_runner.py +17 -2
  3. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/config/default.py +19 -7
  4. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/sqlite.py +7 -0
  5. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/context_utils.py +1 -0
  6. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/respond/stage.py +10 -0
  7. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/result_decorate/stage.py +44 -45
  8. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/provider.py +2 -1
  9. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/anthropic_source.py +13 -7
  10. astrbot-4.3.3/astrbot/core/provider/sources/dashscope_tts.py +149 -0
  11. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/gemini_source.py +21 -17
  12. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/openai_source.py +1 -1
  13. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/session_management.py +6 -6
  14. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/update.py +8 -5
  15. astrbot-4.3.3/changelogs/v4.3.2.md +7 -0
  16. astrbot-4.3.3/changelogs/v4.3.3.md +12 -0
  17. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/ConversationPage.vue +92 -83
  18. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/ExtensionPage.vue +28 -1
  19. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/SessionManagementPage.vue +3 -2
  20. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/conversation.py +24 -8
  21. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/main.py +1 -1
  22. {astrbot-4.3.1 → astrbot-4.3.3}/packages/python_interpreter/main.py +4 -3
  23. {astrbot-4.3.1 → astrbot-4.3.3}/packages/web_searcher/engines/google.py +3 -3
  24. {astrbot-4.3.1 → astrbot-4.3.3}/packages/web_searcher/main.py +10 -5
  25. {astrbot-4.3.1 → astrbot-4.3.3}/pyproject.toml +1 -1
  26. astrbot-4.3.1/astrbot/core/provider/sources/dashscope_tts.py +0 -41
  27. {astrbot-4.3.1 → astrbot-4.3.3}/.dockerignore +0 -0
  28. {astrbot-4.3.1 → astrbot-4.3.3}/.github/FUNDING.yml +0 -0
  29. {astrbot-4.3.1 → astrbot-4.3.3}/.github/ISSUE_TEMPLATE/PLUGIN_PUBLISH.yml +0 -0
  30. {astrbot-4.3.1 → astrbot-4.3.3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  31. {astrbot-4.3.1 → astrbot-4.3.3}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  32. {astrbot-4.3.1 → astrbot-4.3.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  33. {astrbot-4.3.1 → astrbot-4.3.3}/.github/auto_assign.yml +0 -0
  34. {astrbot-4.3.1 → astrbot-4.3.3}/.github/copilot-instructions.md +0 -0
  35. {astrbot-4.3.1 → astrbot-4.3.3}/.github/dependabot.yml +0 -0
  36. {astrbot-4.3.1 → astrbot-4.3.3}/.github/workflows/auto_release.yml +0 -0
  37. {astrbot-4.3.1 → astrbot-4.3.3}/.github/workflows/code-format.yml +0 -0
  38. {astrbot-4.3.1 → astrbot-4.3.3}/.github/workflows/codeql.yml +0 -0
  39. {astrbot-4.3.1 → astrbot-4.3.3}/.github/workflows/coverage_test.yml +0 -0
  40. {astrbot-4.3.1 → astrbot-4.3.3}/.github/workflows/dashboard_ci.yml +0 -0
  41. {astrbot-4.3.1 → astrbot-4.3.3}/.github/workflows/docker-image.yml +0 -0
  42. {astrbot-4.3.1 → astrbot-4.3.3}/.github/workflows/stale.yml +0 -0
  43. {astrbot-4.3.1 → astrbot-4.3.3}/.gitignore +0 -0
  44. {astrbot-4.3.1 → astrbot-4.3.3}/.pre-commit-config.yaml +0 -0
  45. {astrbot-4.3.1 → astrbot-4.3.3}/.python-version +0 -0
  46. {astrbot-4.3.1 → astrbot-4.3.3}/CODE_OF_CONDUCT.md +0 -0
  47. {astrbot-4.3.1 → astrbot-4.3.3}/Dockerfile +0 -0
  48. {astrbot-4.3.1 → astrbot-4.3.3}/Dockerfile_with_node +0 -0
  49. {astrbot-4.3.1 → astrbot-4.3.3}/LICENSE +0 -0
  50. {astrbot-4.3.1 → astrbot-4.3.3}/README.md +0 -0
  51. {astrbot-4.3.1 → astrbot-4.3.3}/README_en.md +0 -0
  52. {astrbot-4.3.1 → astrbot-4.3.3}/README_ja.md +0 -0
  53. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/__init__.py +0 -0
  54. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/__init__.py +0 -0
  55. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/all.py +0 -0
  56. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/event/__init__.py +0 -0
  57. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/event/filter/__init__.py +0 -0
  58. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/message_components.py +0 -0
  59. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/platform/__init__.py +0 -0
  60. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/provider/__init__.py +0 -0
  61. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/star/__init__.py +0 -0
  62. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/api/util/__init__.py +0 -0
  63. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/__init__.py +0 -0
  64. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/__main__.py +0 -0
  65. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/commands/__init__.py +0 -0
  66. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/commands/cmd_conf.py +0 -0
  67. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/commands/cmd_init.py +0 -0
  68. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/commands/cmd_plug.py +0 -0
  69. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/commands/cmd_run.py +0 -0
  70. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/utils/__init__.py +0 -0
  71. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/utils/basic.py +0 -0
  72. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/utils/plugin.py +0 -0
  73. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/cli/utils/version_comparator.py +0 -0
  74. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/__init__.py +0 -0
  75. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/agent.py +0 -0
  76. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/handoff.py +0 -0
  77. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/hooks.py +0 -0
  78. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/mcp_client.py +0 -0
  79. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/response.py +0 -0
  80. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/run_context.py +0 -0
  81. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/runners/__init__.py +0 -0
  82. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/runners/base.py +0 -0
  83. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/tool.py +0 -0
  84. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/agent/tool_executor.py +0 -0
  85. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/astr_agent_context.py +0 -0
  86. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/astrbot_config_mgr.py +0 -0
  87. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/config/__init__.py +0 -0
  88. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/config/astrbot_config.py +0 -0
  89. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/conversation_mgr.py +0 -0
  90. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/core_lifecycle.py +0 -0
  91. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/__init__.py +0 -0
  92. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/migration/helper.py +0 -0
  93. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/migration/migra_3_to_4.py +0 -0
  94. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/migration/shared_preferences_v3.py +0 -0
  95. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/migration/sqlite_v3.py +0 -0
  96. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/po.py +0 -0
  97. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/vec_db/base.py +0 -0
  98. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/vec_db/faiss_impl/__init__.py +0 -0
  99. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/vec_db/faiss_impl/document_storage.py +0 -0
  100. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/vec_db/faiss_impl/embedding_storage.py +0 -0
  101. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql +0 -0
  102. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/db/vec_db/faiss_impl/vec_db.py +0 -0
  103. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/event_bus.py +0 -0
  104. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/file_token_service.py +0 -0
  105. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/initial_loader.py +0 -0
  106. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/log.py +0 -0
  107. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/message/components.py +0 -0
  108. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/message/message_event_result.py +0 -0
  109. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/persona_mgr.py +0 -0
  110. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/__init__.py +0 -0
  111. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/content_safety_check/stage.py +0 -0
  112. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/content_safety_check/strategies/__init__.py +0 -0
  113. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py +0 -0
  114. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/content_safety_check/strategies/keywords.py +0 -0
  115. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/content_safety_check/strategies/strategy.py +0 -0
  116. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/context.py +0 -0
  117. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/preprocess_stage/stage.py +0 -0
  118. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/process_stage/method/llm_request.py +0 -0
  119. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/process_stage/method/star_request.py +0 -0
  120. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/process_stage/stage.py +0 -0
  121. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/rate_limit_check/stage.py +0 -0
  122. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/scheduler.py +0 -0
  123. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/session_status_check/stage.py +0 -0
  124. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/stage.py +0 -0
  125. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/waking_check/stage.py +0 -0
  126. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/pipeline/whitelist_check/stage.py +0 -0
  127. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/__init__.py +0 -0
  128. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/astr_message_event.py +0 -0
  129. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/astrbot_message.py +0 -0
  130. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/manager.py +0 -0
  131. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/message_session.py +0 -0
  132. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/message_type.py +0 -0
  133. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/platform.py +0 -0
  134. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/platform_metadata.py +0 -0
  135. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/register.py +0 -0
  136. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +0 -0
  137. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +0 -0
  138. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +0 -0
  139. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/dingtalk/dingtalk_event.py +0 -0
  140. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/discord/client.py +0 -0
  141. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/discord/components.py +0 -0
  142. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/discord/discord_platform_adapter.py +0 -0
  143. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/discord/discord_platform_event.py +0 -0
  144. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/lark/lark_adapter.py +0 -0
  145. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/lark/lark_event.py +0 -0
  146. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/misskey/misskey_adapter.py +0 -0
  147. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/misskey/misskey_api.py +0 -0
  148. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/misskey/misskey_event.py +0 -0
  149. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/misskey/misskey_utils.py +0 -0
  150. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +0 -0
  151. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +0 -0
  152. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py +0 -0
  153. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py +0 -0
  154. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +0 -0
  155. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/satori/satori_adapter.py +0 -0
  156. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/satori/satori_event.py +0 -0
  157. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/slack/client.py +0 -0
  158. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/slack/slack_adapter.py +0 -0
  159. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/slack/slack_event.py +0 -0
  160. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/telegram/tg_adapter.py +0 -0
  161. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/telegram/tg_event.py +0 -0
  162. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/webchat/webchat_adapter.py +0 -0
  163. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/webchat/webchat_event.py +0 -0
  164. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +0 -0
  165. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +0 -0
  166. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py +0 -0
  167. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py +0 -0
  168. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/wecom/wecom_adapter.py +0 -0
  169. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/wecom/wecom_event.py +0 -0
  170. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/wecom/wecom_kf.py +0 -0
  171. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/wecom/wecom_kf_message.py +0 -0
  172. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +0 -0
  173. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +0 -0
  174. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/platform_message_history_mgr.py +0 -0
  175. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/__init__.py +0 -0
  176. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/entites.py +0 -0
  177. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/entities.py +0 -0
  178. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/func_tool_manager.py +0 -0
  179. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/manager.py +0 -0
  180. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/register.py +0 -0
  181. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/azure_tts_source.py +0 -0
  182. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/coze_api_client.py +0 -0
  183. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/coze_source.py +0 -0
  184. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/dashscope_source.py +0 -0
  185. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/dify_source.py +0 -0
  186. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/edge_tts_source.py +0 -0
  187. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/fishaudio_tts_api_source.py +0 -0
  188. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/gemini_embedding_source.py +0 -0
  189. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/gemini_tts_source.py +0 -0
  190. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/gsv_selfhosted_source.py +0 -0
  191. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/gsvi_tts_source.py +0 -0
  192. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/minimax_tts_api_source.py +0 -0
  193. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/openai_embedding_source.py +0 -0
  194. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/openai_tts_api_source.py +0 -0
  195. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/sensevoice_selfhosted_source.py +0 -0
  196. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/vllm_rerank_source.py +0 -0
  197. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/volcengine_tts.py +0 -0
  198. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/whisper_api_source.py +0 -0
  199. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/whisper_selfhosted_source.py +0 -0
  200. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/provider/sources/zhipu_source.py +0 -0
  201. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/README.md +0 -0
  202. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/__init__.py +0 -0
  203. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/config.py +0 -0
  204. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/context.py +0 -0
  205. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/filter/__init__.py +0 -0
  206. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/filter/command.py +0 -0
  207. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/filter/command_group.py +0 -0
  208. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/filter/custom_filter.py +0 -0
  209. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/filter/event_message_type.py +0 -0
  210. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/filter/permission.py +0 -0
  211. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/filter/platform_adapter_type.py +0 -0
  212. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/filter/regex.py +0 -0
  213. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/register/__init__.py +0 -0
  214. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/register/star.py +0 -0
  215. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/register/star_handler.py +0 -0
  216. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/session_llm_manager.py +0 -0
  217. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/session_plugin_manager.py +0 -0
  218. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/star.py +0 -0
  219. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/star_handler.py +0 -0
  220. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/star_manager.py +0 -0
  221. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/star_tools.py +0 -0
  222. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/star/updator.py +0 -0
  223. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/updator.py +0 -0
  224. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/astrbot_path.py +0 -0
  225. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/command_parser.py +0 -0
  226. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/dify_api_client.py +0 -0
  227. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/io.py +0 -0
  228. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/log_pipe.py +0 -0
  229. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/metrics.py +0 -0
  230. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/path_util.py +0 -0
  231. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/pip_installer.py +0 -0
  232. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/session_lock.py +0 -0
  233. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/session_waiter.py +0 -0
  234. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/shared_preferences.py +0 -0
  235. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/t2i/__init__.py +0 -0
  236. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/t2i/local_strategy.py +0 -0
  237. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/t2i/network_strategy.py +0 -0
  238. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/t2i/renderer.py +0 -0
  239. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/t2i/template/astrbot_powershell.html +0 -0
  240. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/t2i/template/base.html +0 -0
  241. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/t2i/template_manager.py +0 -0
  242. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/tencent_record_helper.py +0 -0
  243. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/utils/version_comparator.py +0 -0
  244. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/core/zip_updator.py +0 -0
  245. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/__init__.py +0 -0
  246. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/auth.py +0 -0
  247. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/chat.py +0 -0
  248. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/config.py +0 -0
  249. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/conversation.py +0 -0
  250. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/file.py +0 -0
  251. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/log.py +0 -0
  252. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/persona.py +0 -0
  253. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/plugin.py +0 -0
  254. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/route.py +0 -0
  255. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/stat.py +0 -0
  256. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/static_file.py +0 -0
  257. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/t2i.py +0 -0
  258. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/routes/tools.py +0 -0
  259. {astrbot-4.3.1 → astrbot-4.3.3}/astrbot/dashboard/server.py +0 -0
  260. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.0.md +0 -0
  261. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.1.md +0 -0
  262. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.10.md +0 -0
  263. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.11.md +0 -0
  264. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.12.md +0 -0
  265. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.13.md +0 -0
  266. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.14.md +0 -0
  267. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.15.md +0 -0
  268. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.16.md +0 -0
  269. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.17.md +0 -0
  270. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.18.md +0 -0
  271. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.19.md +0 -0
  272. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.20.md +0 -0
  273. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.21.md +0 -0
  274. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.22.md +0 -0
  275. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.23.md +0 -0
  276. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.24.md +0 -0
  277. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.25.md +0 -0
  278. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.26.md +0 -0
  279. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.27.md +0 -0
  280. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.28.md +0 -0
  281. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.29.md +0 -0
  282. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.3.md +0 -0
  283. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.30.md +0 -0
  284. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.31.md +0 -0
  285. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.32.md +0 -0
  286. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.33.md +0 -0
  287. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.35.md +0 -0
  288. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.36.md +0 -0
  289. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.37.md +0 -0
  290. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.38.md +0 -0
  291. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.39.md +0 -0
  292. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.4.md +0 -0
  293. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.5.md +0 -0
  294. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.6.md +0 -0
  295. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.7.md +0 -0
  296. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.8.md +0 -0
  297. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.4.9.md +0 -0
  298. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.0.md +0 -0
  299. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.1.md +0 -0
  300. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.10.md +0 -0
  301. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.11.md +0 -0
  302. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.12.md +0 -0
  303. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.13.md +0 -0
  304. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.14.md +0 -0
  305. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.15.md +0 -0
  306. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.16.md +0 -0
  307. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.17.md +0 -0
  308. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.18.md +0 -0
  309. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.19.md +0 -0
  310. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.2.md +0 -0
  311. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.20.md +0 -0
  312. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.21.md +0 -0
  313. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.22.md +0 -0
  314. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.23.md +0 -0
  315. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.24.md +0 -0
  316. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.25.md +0 -0
  317. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.26.md +0 -0
  318. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.27.md +0 -0
  319. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.3.1.md +0 -0
  320. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.3.2.md +0 -0
  321. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.3.md +0 -0
  322. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.4.md +0 -0
  323. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.5.md +0 -0
  324. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.6.md +0 -0
  325. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.7.md +0 -0
  326. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.8.md +0 -0
  327. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v3.5.9.md +0 -0
  328. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.0.0-beta.3.md +0 -0
  329. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.0.0-beta.4.md +0 -0
  330. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.0.0-beta.5.md +0 -0
  331. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.0.0.md +0 -0
  332. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.1.0.md +0 -0
  333. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.1.1.md +0 -0
  334. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.1.2.md +0 -0
  335. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.1.3.md +0 -0
  336. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.1.4.md +0 -0
  337. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.1.5.md +0 -0
  338. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.1.6.md +0 -0
  339. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.1.7.md +0 -0
  340. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.2.0.md +0 -0
  341. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.2.1.md +0 -0
  342. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.3.0.md +0 -0
  343. {astrbot-4.3.1 → astrbot-4.3.3}/changelogs/v4.3.1.md +0 -0
  344. {astrbot-4.3.1 → astrbot-4.3.3}/compose.yml +0 -0
  345. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/.gitignore +0 -0
  346. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/LICENSE +0 -0
  347. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/README.md +0 -0
  348. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/env.d.ts +0 -0
  349. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/index.html +0 -0
  350. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/public/_redirects +0 -0
  351. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/public/favicon.svg +0 -0
  352. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/App.vue +0 -0
  353. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/astrbot_banner.png +0 -0
  354. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/astrbot_logo_mini.webp +0 -0
  355. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/dingtalk.svg +0 -0
  356. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/discord.svg +0 -0
  357. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/kook.png +0 -0
  358. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/lark.png +0 -0
  359. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/misskey.png +0 -0
  360. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/qq.png +0 -0
  361. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/satori.png +0 -0
  362. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/slack.svg +0 -0
  363. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/telegram.svg +0 -0
  364. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/vocechat.png +0 -0
  365. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/wechat.png +0 -0
  366. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/assets/images/platform_logos/wecom.png +0 -0
  367. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/ConfirmDialog.vue +0 -0
  368. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/chat/Chat.vue +0 -0
  369. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/chat/MessageList.vue +0 -0
  370. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/chat/ProviderModelSelector.vue +0 -0
  371. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/platform/AddNewPlatform.vue +0 -0
  372. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/provider/AddNewProvider.vue +0 -0
  373. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/AstrBotConfig.vue +0 -0
  374. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/AstrBotConfigV4.vue +0 -0
  375. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ConsoleDisplayer.vue +0 -0
  376. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ExtensionCard.vue +0 -0
  377. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ItemCard.vue +0 -0
  378. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ItemCardGrid.vue +0 -0
  379. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/KnowledgeBaseSelector.vue +0 -0
  380. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/LanguageSwitcher.vue +0 -0
  381. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ListConfigItem.vue +0 -0
  382. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/Logo.vue +0 -0
  383. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/MigrationDialog.vue +0 -0
  384. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ObjectEditor.vue +0 -0
  385. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/PersonaSelector.vue +0 -0
  386. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/PluginSetSelector.vue +0 -0
  387. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ProviderSelector.vue +0 -0
  388. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ProxySelector.vue +0 -0
  389. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/ReadmeDialog.vue +0 -0
  390. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/T2ITemplateEditor.vue +0 -0
  391. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/components/shared/WaitingForRestart.vue +0 -0
  392. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/config.ts +0 -0
  393. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/composables.ts +0 -0
  394. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/loader.ts +0 -0
  395. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/core/actions.json +0 -0
  396. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/core/common.json +0 -0
  397. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/core/header.json +0 -0
  398. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/core/navigation.json +0 -0
  399. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/core/status.json +0 -0
  400. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/about.json +0 -0
  401. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/alkaid/index.json +0 -0
  402. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/alkaid/knowledge-base.json +0 -0
  403. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/alkaid/memory.json +0 -0
  404. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/auth.json +0 -0
  405. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/chart.json +0 -0
  406. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/chat.json +0 -0
  407. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/config.json +0 -0
  408. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/console.json +0 -0
  409. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/conversation.json +0 -0
  410. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/dashboard.json +0 -0
  411. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/extension.json +0 -0
  412. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/migration.json +0 -0
  413. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/persona.json +0 -0
  414. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/platform.json +0 -0
  415. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/provider.json +0 -0
  416. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/session-management.json +0 -0
  417. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/settings.json +0 -0
  418. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/features/tool-use.json +0 -0
  419. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/messages/errors.json +0 -0
  420. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/messages/success.json +0 -0
  421. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/en-US/messages/validation.json +0 -0
  422. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/core/actions.json +0 -0
  423. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/core/common.json +0 -0
  424. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/core/header.json +0 -0
  425. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/core/navigation.json +0 -0
  426. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/core/status.json +0 -0
  427. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/about.json +0 -0
  428. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/alkaid/index.json +0 -0
  429. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/alkaid/knowledge-base.json +0 -0
  430. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/alkaid/memory.json +0 -0
  431. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/auth.json +0 -0
  432. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/chart.json +0 -0
  433. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/chat.json +0 -0
  434. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/config.json +0 -0
  435. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/console.json +0 -0
  436. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/conversation.json +0 -0
  437. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/dashboard.json +0 -0
  438. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/extension.json +0 -0
  439. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/migration.json +0 -0
  440. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/persona.json +0 -0
  441. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/platform.json +0 -0
  442. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/provider.json +0 -0
  443. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/session-management.json +0 -0
  444. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/settings.json +0 -0
  445. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/features/tool-use.json +0 -0
  446. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/messages/errors.json +0 -0
  447. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/messages/success.json +0 -0
  448. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/locales/zh-CN/messages/validation.json +0 -0
  449. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/tools/index.ts +0 -0
  450. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/translations.ts +0 -0
  451. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/types.ts +0 -0
  452. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/i18n/validator.ts +0 -0
  453. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/layouts/blank/BlankLayout.vue +0 -0
  454. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/layouts/full/FullLayout.vue +0 -0
  455. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +0 -0
  456. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue +0 -0
  457. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue +0 -0
  458. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/layouts/full/vertical-sidebar/sidebarItem.ts +0 -0
  459. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/main.ts +0 -0
  460. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/plugins/confirmPlugin.ts +0 -0
  461. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/plugins/vuetify.ts +0 -0
  462. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/router/AuthRoutes.ts +0 -0
  463. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/router/ChatBoxRoutes.ts +0 -0
  464. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/router/MainRoutes.ts +0 -0
  465. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/router/index.ts +0 -0
  466. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/_override.scss +0 -0
  467. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/_variables.scss +0 -0
  468. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VButtons.scss +0 -0
  469. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VCard.scss +0 -0
  470. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VField.scss +0 -0
  471. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VInput.scss +0 -0
  472. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VNavigationDrawer.scss +0 -0
  473. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VScrollbar.scss +0 -0
  474. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VShadow.scss +0 -0
  475. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VTabs.scss +0 -0
  476. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/components/_VTextField.scss +0 -0
  477. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/layout/_container.scss +0 -0
  478. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/layout/_sidebar.scss +0 -0
  479. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/pages/_dashboards.scss +0 -0
  480. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/scss/style.scss +0 -0
  481. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/stores/auth.ts +0 -0
  482. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/stores/common.js +0 -0
  483. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/stores/customizer.ts +0 -0
  484. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/stores/toast.js +0 -0
  485. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/theme/DarkTheme.ts +0 -0
  486. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/theme/LightTheme.ts +0 -0
  487. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/types/themeTypes/ThemeType.ts +0 -0
  488. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/types/vue3-print-nb.d.ts +0 -0
  489. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/types/vue_tabler_icon.d.ts +0 -0
  490. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/utils/platformUtils.js +0 -0
  491. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/utils/providerUtils.js +0 -0
  492. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/utils/toast.js +0 -0
  493. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/AboutPage.vue +0 -0
  494. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/AlkaidPage.vue +0 -0
  495. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/ChatBoxPage.vue +0 -0
  496. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/ChatPage.vue +0 -0
  497. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/ConfigPage.vue +0 -0
  498. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/ConsolePage.vue +0 -0
  499. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/PersonaPage.vue +0 -0
  500. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/PlatformPage.vue +0 -0
  501. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/ProviderPage.vue +0 -0
  502. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/Settings.vue +0 -0
  503. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/ToolUsePage.vue +0 -0
  504. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/alkaid/KnowledgeBase.vue +0 -0
  505. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/alkaid/LongTermMemory.vue +0 -0
  506. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/alkaid/Other.vue +0 -0
  507. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/authentication/auth/LoginPage.vue +0 -0
  508. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/authentication/authForms/AuthLogin.vue +0 -0
  509. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/dashboards/default/DefaultDashboard.vue +0 -0
  510. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/dashboards/default/components/MemoryUsage.vue +0 -0
  511. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/dashboards/default/components/MessageStat.vue +0 -0
  512. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/dashboards/default/components/OnlinePlatform.vue +0 -0
  513. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/dashboards/default/components/OnlineTime.vue +0 -0
  514. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/dashboards/default/components/PlatformStat.vue +0 -0
  515. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/dashboards/default/components/RunningTime.vue +0 -0
  516. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/src/views/dashboards/default/components/TotalMessage.vue +0 -0
  517. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/tsconfig.json +0 -0
  518. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/tsconfig.vite-config.json +0 -0
  519. {astrbot-4.3.1 → astrbot-4.3.3}/dashboard/vite.config.ts +0 -0
  520. {astrbot-4.3.1 → astrbot-4.3.3}/main.py +0 -0
  521. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/__init__.py +0 -0
  522. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/admin.py +0 -0
  523. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/alter_cmd.py +0 -0
  524. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/help.py +0 -0
  525. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/llm.py +0 -0
  526. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/persona.py +0 -0
  527. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/plugin.py +0 -0
  528. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/provider.py +0 -0
  529. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/setunset.py +0 -0
  530. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/sid.py +0 -0
  531. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/t2i.py +0 -0
  532. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/tool.py +0 -0
  533. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/commands/tts.py +0 -0
  534. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/long_term_memory.py +0 -0
  535. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/metadata.yaml +0 -0
  536. {astrbot-4.3.1 → astrbot-4.3.3}/packages/astrbot/process_llm_request.py +0 -0
  537. {astrbot-4.3.1 → astrbot-4.3.3}/packages/python_interpreter/metadata.yaml +0 -0
  538. {astrbot-4.3.1 → astrbot-4.3.3}/packages/python_interpreter/requirements.txt +0 -0
  539. {astrbot-4.3.1 → astrbot-4.3.3}/packages/python_interpreter/shared/api.py +0 -0
  540. {astrbot-4.3.1 → astrbot-4.3.3}/packages/reminder/main.py +0 -0
  541. {astrbot-4.3.1 → astrbot-4.3.3}/packages/reminder/metadata.yaml +0 -0
  542. {astrbot-4.3.1 → astrbot-4.3.3}/packages/session_controller/main.py +0 -0
  543. {astrbot-4.3.1 → astrbot-4.3.3}/packages/session_controller/metadata.yaml +0 -0
  544. {astrbot-4.3.1 → astrbot-4.3.3}/packages/thinking_filter/main.py +0 -0
  545. {astrbot-4.3.1 → astrbot-4.3.3}/packages/thinking_filter/metadata.yaml +0 -0
  546. {astrbot-4.3.1 → astrbot-4.3.3}/packages/web_searcher/engines/__init__.py +0 -0
  547. {astrbot-4.3.1 → astrbot-4.3.3}/packages/web_searcher/engines/bing.py +0 -0
  548. {astrbot-4.3.1 → astrbot-4.3.3}/packages/web_searcher/engines/sogo.py +0 -0
  549. {astrbot-4.3.1 → astrbot-4.3.3}/packages/web_searcher/metadata.yaml +0 -0
  550. {astrbot-4.3.1 → astrbot-4.3.3}/requirements.txt +0 -0
  551. {astrbot-4.3.1 → astrbot-4.3.3}/samples/stt_health_check.wav +0 -0
  552. {astrbot-4.3.1 → astrbot-4.3.3}/tests/test_dashboard.py +0 -0
  553. {astrbot-4.3.1 → astrbot-4.3.3}/tests/test_main.py +0 -0
  554. {astrbot-4.3.1 → astrbot-4.3.3}/tests/test_plugin_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AstrBot
3
- Version: 4.3.1
3
+ Version: 4.3.3
4
4
  Summary: 易上手的多平台 LLM 聊天机器人及开发框架
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.10
@@ -198,6 +198,17 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
198
198
  func_tool = req.func_tool.get_func(func_tool_name)
199
199
  logger.info(f"使用工具:{func_tool_name},参数:{func_tool_args}")
200
200
 
201
+ if not func_tool:
202
+ logger.warning(f"未找到指定的工具: {func_tool_name},将跳过。")
203
+ tool_call_result_blocks.append(
204
+ ToolCallMessageSegment(
205
+ role="tool",
206
+ tool_call_id=func_tool_id,
207
+ content=f"error: 未找到工具 {func_tool_name}",
208
+ )
209
+ )
210
+ continue
211
+
201
212
  try:
202
213
  await self.agent_hooks.on_tool_start(
203
214
  self.run_context, func_tool, func_tool_args
@@ -210,9 +221,12 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
210
221
  run_context=self.run_context,
211
222
  **func_tool_args,
212
223
  )
213
- async for resp in executor:
224
+
225
+ _final_resp: CallToolResult | None = None
226
+ async for resp in executor: # type: ignore
214
227
  if isinstance(resp, CallToolResult):
215
228
  res = resp
229
+ _final_resp = resp
216
230
  if isinstance(res.content[0], TextContent):
217
231
  tool_call_result_blocks.append(
218
232
  ToolCallMessageSegment(
@@ -279,13 +293,14 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
279
293
  chain=res.chain, type="tool_direct_result"
280
294
  )
281
295
  else:
296
+ # 不应该出现其他类型
282
297
  logger.warning(
283
298
  f"Tool 返回了不支持的类型: {type(resp)},将忽略。"
284
299
  )
285
300
 
286
301
  try:
287
302
  await self.agent_hooks.on_tool_end(
288
- self.run_context, func_tool, func_tool_args, None
303
+ self.run_context, func_tool, func_tool_args, _final_resp
289
304
  )
290
305
  except Exception as e:
291
306
  logger.error(f"Error in on_tool_end hook: {e}", exc_info=True)
@@ -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.3.1"
9
+ VERSION = "4.3.3"
10
10
  DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
11
11
 
12
12
  # 默认配置
@@ -775,7 +775,7 @@ CONFIG_METADATA_2 = {
775
775
  "timeout": 120,
776
776
  "model_config": {"model": "deepseek-chat", "temperature": 0.4},
777
777
  "custom_extra_body": {},
778
- "modalities": ["text", "image", "tool_use"],
778
+ "modalities": ["text", "tool_use"],
779
779
  },
780
780
  "302.AI": {
781
781
  "id": "302ai",
@@ -821,6 +821,21 @@ CONFIG_METADATA_2 = {
821
821
  },
822
822
  "custom_extra_body": {},
823
823
  },
824
+ "小马算力": {
825
+ "id": "tokenpony",
826
+ "provider": "tokenpony",
827
+ "type": "openai_chat_completion",
828
+ "provider_type": "chat_completion",
829
+ "enable": True,
830
+ "key": [],
831
+ "api_base": "https://api.tokenpony.cn/v1",
832
+ "timeout": 120,
833
+ "model_config": {
834
+ "model": "kimi-k2-instruct-0905",
835
+ "temperature": 0.7,
836
+ },
837
+ "custom_extra_body": {},
838
+ },
824
839
  "优云智算": {
825
840
  "id": "compshare",
826
841
  "provider": "compshare",
@@ -1041,6 +1056,7 @@ CONFIG_METADATA_2 = {
1041
1056
  "timeout": "20",
1042
1057
  },
1043
1058
  "阿里云百炼 TTS(API)": {
1059
+ "hint": "API Key 从 https://bailian.console.aliyun.com/?tab=model#/api-key 获取。模型和音色的选择文档请参考: 阿里云百炼语音合成音色名称。具体可参考 https://help.aliyun.com/zh/model-studio/speech-synthesis-and-speech-recognition",
1044
1060
  "id": "dashscope_tts",
1045
1061
  "provider": "dashscope",
1046
1062
  "type": "dashscope_tts",
@@ -1420,11 +1436,7 @@ CONFIG_METADATA_2 = {
1420
1436
  "description": "服务订阅密钥",
1421
1437
  "hint": "Azure_TTS 服务的订阅密钥(注意不是令牌)",
1422
1438
  },
1423
- "dashscope_tts_voice": {
1424
- "description": "语音合成模型",
1425
- "type": "string",
1426
- "hint": "阿里云百炼语音合成模型名称。具体可参考 https://help.aliyun.com/zh/model-studio/developer-reference/cosyvoice-python-api 等内容",
1427
- },
1439
+ "dashscope_tts_voice": {"description": "音色", "type": "string"},
1428
1440
  "gm_resp_image_modal": {
1429
1441
  "description": "启用图片模态",
1430
1442
  "type": "bool",
@@ -32,6 +32,12 @@ class SQLiteDatabase(BaseDatabase):
32
32
  """Initialize the database by creating tables if they do not exist."""
33
33
  async with self.engine.begin() as conn:
34
34
  await conn.run_sync(SQLModel.metadata.create_all)
35
+ await conn.execute(text("PRAGMA journal_mode=WAL"))
36
+ await conn.execute(text("PRAGMA synchronous=NORMAL"))
37
+ await conn.execute(text("PRAGMA cache_size=20000"))
38
+ await conn.execute(text("PRAGMA temp_store=MEMORY"))
39
+ await conn.execute(text("PRAGMA mmap_size=134217728"))
40
+ await conn.execute(text("PRAGMA optimize"))
35
41
  await conn.commit()
36
42
 
37
43
  # ====
@@ -160,6 +166,7 @@ class SQLiteDatabase(BaseDatabase):
160
166
  col(ConversationV2.title).ilike(f"%{search_query}%"),
161
167
  col(ConversationV2.content).ilike(f"%{search_query}%"),
162
168
  col(ConversationV2.user_id).ilike(f"%{search_query}%"),
169
+ col(ConversationV2.conversation_id).ilike(f"%{search_query}%"),
163
170
  )
164
171
  )
165
172
  if "message_types" in kwargs and len(kwargs["message_types"]) > 0:
@@ -97,5 +97,6 @@ async def call_event_hook(
97
97
  logger.info(
98
98
  f"{star_map[handler.handler_module_path].name} - {handler.handler_name} 终止了事件传播。"
99
99
  )
100
+ return True
100
101
 
101
102
  return event.is_stopped()
@@ -190,6 +190,16 @@ class RespondStage(Stage):
190
190
  except Exception as e:
191
191
  logger.warning(f"空内容检查异常: {e}")
192
192
 
193
+ # 将 Plain 为空的消息段移除
194
+ result.chain = [
195
+ comp
196
+ for comp in result.chain
197
+ if not (
198
+ isinstance(comp, Comp.Plain)
199
+ and (not comp.text or not comp.text.strip())
200
+ )
201
+ ]
202
+
193
203
  # 发送消息链
194
204
  # Record 需要强制单独发送
195
205
  need_separately = {ComponentType.Record}
@@ -189,54 +189,54 @@ class ResultDecorateStage(Stage):
189
189
  logger.warning(
190
190
  f"会话 {event.unified_msg_origin} 未配置文本转语音模型。"
191
191
  )
192
- return
193
- new_chain = []
194
- for comp in result.chain:
195
- if isinstance(comp, Plain) and len(comp.text) > 1:
196
- try:
197
- logger.info(f"TTS 请求: {comp.text}")
198
- audio_path = await tts_provider.get_audio(comp.text)
199
- logger.info(f"TTS 结果: {audio_path}")
200
- if not audio_path:
201
- logger.error(
202
- f"由于 TTS 音频文件未找到,消息段转语音失败: {comp.text}"
203
- )
204
- new_chain.append(comp)
205
- continue
192
+ else:
193
+ new_chain = []
194
+ for comp in result.chain:
195
+ if isinstance(comp, Plain) and len(comp.text) > 1:
196
+ try:
197
+ logger.info(f"TTS 请求: {comp.text}")
198
+ audio_path = await tts_provider.get_audio(comp.text)
199
+ logger.info(f"TTS 结果: {audio_path}")
200
+ if not audio_path:
201
+ logger.error(
202
+ f"由于 TTS 音频文件未找到,消息段转语音失败: {comp.text}"
203
+ )
204
+ new_chain.append(comp)
205
+ continue
206
206
 
207
- use_file_service = self.ctx.astrbot_config[
208
- "provider_tts_settings"
209
- ]["use_file_service"]
210
- callback_api_base = self.ctx.astrbot_config[
211
- "callback_api_base"
212
- ]
213
- dual_output = self.ctx.astrbot_config[
214
- "provider_tts_settings"
215
- ]["dual_output"]
207
+ use_file_service = self.ctx.astrbot_config[
208
+ "provider_tts_settings"
209
+ ]["use_file_service"]
210
+ callback_api_base = self.ctx.astrbot_config[
211
+ "callback_api_base"
212
+ ]
213
+ dual_output = self.ctx.astrbot_config[
214
+ "provider_tts_settings"
215
+ ]["dual_output"]
216
216
 
217
- url = None
218
- if use_file_service and callback_api_base:
219
- token = await file_token_service.register_file(
220
- audio_path
221
- )
222
- url = f"{callback_api_base}/api/file/{token}"
223
- logger.debug(f"已注册:{url}")
217
+ url = None
218
+ if use_file_service and callback_api_base:
219
+ token = await file_token_service.register_file(
220
+ audio_path
221
+ )
222
+ url = f"{callback_api_base}/api/file/{token}"
223
+ logger.debug(f"已注册:{url}")
224
224
 
225
- new_chain.append(
226
- Record(
227
- file=url or audio_path,
228
- url=url or audio_path,
225
+ new_chain.append(
226
+ Record(
227
+ file=url or audio_path,
228
+ url=url or audio_path,
229
+ )
229
230
  )
230
- )
231
- if dual_output:
231
+ if dual_output:
232
+ new_chain.append(comp)
233
+ except Exception:
234
+ logger.error(traceback.format_exc())
235
+ logger.error("TTS 失败,使用文本发送。")
232
236
  new_chain.append(comp)
233
- except Exception:
234
- logger.error(traceback.format_exc())
235
- logger.error("TTS 失败,使用文本发送。")
237
+ else:
236
238
  new_chain.append(comp)
237
- else:
238
- new_chain.append(comp)
239
- result.chain = new_chain
239
+ result.chain = new_chain
240
240
 
241
241
  # 文本转图片
242
242
  elif (
@@ -279,7 +279,6 @@ class ResultDecorateStage(Stage):
279
279
  result.chain = [Image.fromFileSystem(url)]
280
280
 
281
281
  # 触发转发消息
282
- has_forwarded = False
283
282
  if event.get_platform_name() == "aiocqhttp":
284
283
  word_cnt = 0
285
284
  for comp in result.chain:
@@ -290,9 +289,9 @@ class ResultDecorateStage(Stage):
290
289
  uin=event.get_self_id(), name="AstrBot", content=[*result.chain]
291
290
  )
292
291
  result.chain = [node]
293
- has_forwarded = True
294
292
 
295
- if not has_forwarded:
293
+ has_plain = any(isinstance(item, Plain) for item in result.chain)
294
+ if has_plain:
296
295
  # at 回复
297
296
  if (
298
297
  self.reply_with_mention
@@ -68,7 +68,8 @@ class Provider(AbstractProvider):
68
68
 
69
69
  def get_keys(self) -> List[str]:
70
70
  """获得提供商 Key"""
71
- return self.provider_config.get("key", [])
71
+ keys = self.provider_config.get("key", [""])
72
+ return keys or [""]
72
73
 
73
74
  @abc.abstractmethod
74
75
  def set_key(self, key: str):
@@ -33,7 +33,7 @@ class ProviderAnthropic(Provider):
33
33
  )
34
34
 
35
35
  self.chosen_api_key: str = ""
36
- self.api_keys: List = provider_config.get("key", [])
36
+ self.api_keys: List = super().get_keys()
37
37
  self.chosen_api_key = self.api_keys[0] if len(self.api_keys) > 0 else ""
38
38
  self.base_url = provider_config.get("api_base", "https://api.anthropic.com")
39
39
  self.timeout = provider_config.get("timeout", 120)
@@ -70,9 +70,13 @@ class ProviderAnthropic(Provider):
70
70
  {
71
71
  "type": "tool_use",
72
72
  "name": tool_call["function"]["name"],
73
- "input": json.loads(tool_call["function"]["arguments"])
74
- if isinstance(tool_call["function"]["arguments"], str)
75
- else tool_call["function"]["arguments"],
73
+ "input": (
74
+ json.loads(tool_call["function"]["arguments"])
75
+ if isinstance(
76
+ tool_call["function"]["arguments"], str
77
+ )
78
+ else tool_call["function"]["arguments"]
79
+ ),
76
80
  "id": tool_call["id"],
77
81
  }
78
82
  )
@@ -355,9 +359,11 @@ class ProviderAnthropic(Provider):
355
359
  "source": {
356
360
  "type": "base64",
357
361
  "media_type": mime_type,
358
- "data": image_data.split("base64,")[1]
359
- if "base64," in image_data
360
- else image_data,
362
+ "data": (
363
+ image_data.split("base64,")[1]
364
+ if "base64," in image_data
365
+ else image_data
366
+ ),
361
367
  },
362
368
  }
363
369
  )
@@ -0,0 +1,149 @@
1
+ import asyncio
2
+ import base64
3
+ import logging
4
+ import os
5
+ import uuid
6
+ from typing import Optional, Tuple
7
+ import aiohttp
8
+ import dashscope
9
+ from dashscope.audio.tts_v2 import AudioFormat, SpeechSynthesizer
10
+
11
+ try:
12
+ from dashscope.aigc.multimodal_conversation import MultiModalConversation
13
+ except (
14
+ ImportError
15
+ ): # pragma: no cover - older dashscope versions without Qwen TTS support
16
+ MultiModalConversation = None
17
+
18
+ from ..entities import ProviderType
19
+ from ..provider import TTSProvider
20
+ from ..register import register_provider_adapter
21
+ from astrbot.core.utils.astrbot_path import get_astrbot_data_path
22
+
23
+
24
+ @register_provider_adapter(
25
+ "dashscope_tts", "Dashscope TTS API", provider_type=ProviderType.TEXT_TO_SPEECH
26
+ )
27
+ class ProviderDashscopeTTSAPI(TTSProvider):
28
+ def __init__(
29
+ self,
30
+ provider_config: dict,
31
+ provider_settings: dict,
32
+ ) -> None:
33
+ super().__init__(provider_config, provider_settings)
34
+ self.chosen_api_key: str = provider_config.get("api_key", "")
35
+ self.voice: str = provider_config.get("dashscope_tts_voice", "loongstella")
36
+ self.set_model(provider_config.get("model", None))
37
+ self.timeout_ms = float(provider_config.get("timeout", 20)) * 1000
38
+ dashscope.api_key = self.chosen_api_key
39
+
40
+ async def get_audio(self, text: str) -> str:
41
+ model = self.get_model()
42
+ if not model:
43
+ raise RuntimeError("Dashscope TTS model is not configured.")
44
+
45
+ temp_dir = os.path.join(get_astrbot_data_path(), "temp")
46
+ os.makedirs(temp_dir, exist_ok=True)
47
+
48
+ if self._is_qwen_tts_model(model):
49
+ audio_bytes, ext = await self._synthesize_with_qwen_tts(model, text)
50
+ else:
51
+ audio_bytes, ext = await self._synthesize_with_cosyvoice(model, text)
52
+
53
+ if not audio_bytes:
54
+ raise RuntimeError(
55
+ "Audio synthesis failed, returned empty content. The model may not be supported or the service is unavailable."
56
+ )
57
+
58
+ path = os.path.join(temp_dir, f"dashscope_tts_{uuid.uuid4()}{ext}")
59
+ with open(path, "wb") as f:
60
+ f.write(audio_bytes)
61
+ return path
62
+
63
+ def _call_qwen_tts(self, model: str, text: str):
64
+ if MultiModalConversation is None:
65
+ raise RuntimeError(
66
+ "dashscope SDK missing MultiModalConversation. Please upgrade the dashscope package to use Qwen TTS models."
67
+ )
68
+
69
+ kwargs = {
70
+ "model": model,
71
+ "text": text,
72
+ "api_key": self.chosen_api_key,
73
+ "voice": self.voice or "Cherry",
74
+ }
75
+ if not self.voice:
76
+ logging.warning(
77
+ "No voice specified for Qwen TTS model, using default 'Cherry'."
78
+ )
79
+ return MultiModalConversation.call(**kwargs)
80
+
81
+ async def _synthesize_with_qwen_tts(
82
+ self, model: str, text: str
83
+ ) -> Tuple[Optional[bytes], str]:
84
+ loop = asyncio.get_event_loop()
85
+ response = await loop.run_in_executor(None, self._call_qwen_tts, model, text)
86
+ audio_bytes = await self._extract_audio_from_response(response)
87
+ if not audio_bytes:
88
+ raise RuntimeError(
89
+ f"Audio synthesis failed for model '{model}'. {response}"
90
+ )
91
+ ext = ".wav"
92
+ return audio_bytes, ext
93
+
94
+ async def _extract_audio_from_response(self, response) -> Optional[bytes]:
95
+ output = getattr(response, "output", None)
96
+ audio_obj = getattr(output, "audio", None) if output is not None else None
97
+ if not audio_obj:
98
+ return None
99
+
100
+ data_b64 = getattr(audio_obj, "data", None)
101
+ if data_b64:
102
+ try:
103
+ return base64.b64decode(data_b64)
104
+ except (ValueError, TypeError):
105
+ logging.error("Failed to decode base64 audio data.")
106
+ return None
107
+
108
+ url = getattr(audio_obj, "url", None)
109
+ if url:
110
+ return await self._download_audio_from_url(url)
111
+ return None
112
+
113
+ async def _download_audio_from_url(self, url: str) -> Optional[bytes]:
114
+ if not url:
115
+ return None
116
+ timeout = max(self.timeout_ms / 1000, 1) if self.timeout_ms else 20
117
+ try:
118
+ async with aiohttp.ClientSession() as session:
119
+ async with session.get(
120
+ url, timeout=aiohttp.ClientTimeout(total=timeout)
121
+ ) as response:
122
+ return await response.read()
123
+ except (aiohttp.ClientError, asyncio.TimeoutError, OSError) as e:
124
+ logging.error(f"Failed to download audio from URL {url}: {e}")
125
+ return None
126
+
127
+ async def _synthesize_with_cosyvoice(
128
+ self, model: str, text: str
129
+ ) -> Tuple[Optional[bytes], str]:
130
+ synthesizer = SpeechSynthesizer(
131
+ model=model,
132
+ voice=self.voice,
133
+ format=AudioFormat.WAV_24000HZ_MONO_16BIT,
134
+ )
135
+ loop = asyncio.get_event_loop()
136
+ audio_bytes = await loop.run_in_executor(
137
+ None, synthesizer.call, text, self.timeout_ms
138
+ )
139
+ if not audio_bytes:
140
+ resp = synthesizer.get_response()
141
+ if resp and isinstance(resp, dict):
142
+ raise RuntimeError(
143
+ f"Audio synthesis failed for model '{model}'. {resp}".strip()
144
+ )
145
+ return audio_bytes, ".wav"
146
+
147
+ def _is_qwen_tts_model(self, model: str) -> bool:
148
+ model_lower = model.lower()
149
+ return "tts" in model_lower and model_lower.startswith("qwen")
@@ -3,7 +3,7 @@ import base64
3
3
  import json
4
4
  import logging
5
5
  import random
6
- from typing import Optional
6
+ from typing import Optional, List
7
7
  from collections.abc import AsyncGenerator
8
8
 
9
9
  from google import genai
@@ -60,7 +60,7 @@ class ProviderGoogleGenAI(Provider):
60
60
  provider_settings,
61
61
  default_persona,
62
62
  )
63
- self.api_keys: list = provider_config.get("key", [])
63
+ self.api_keys: List = super().get_keys()
64
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
 
@@ -218,19 +218,21 @@ class ProviderGoogleGenAI(Provider):
218
218
  response_modalities=modalities,
219
219
  tools=tool_list,
220
220
  safety_settings=self.safety_settings if self.safety_settings else None,
221
- thinking_config=types.ThinkingConfig(
222
- thinking_budget=min(
223
- int(
224
- self.provider_config.get("gm_thinking_config", {}).get(
225
- "budget", 0
226
- )
221
+ thinking_config=(
222
+ types.ThinkingConfig(
223
+ thinking_budget=min(
224
+ int(
225
+ self.provider_config.get("gm_thinking_config", {}).get(
226
+ "budget", 0
227
+ )
228
+ ),
229
+ 24576,
227
230
  ),
228
- 24576,
229
- ),
230
- )
231
- if "gemini-2.5-flash" in self.get_model()
232
- and hasattr(types.ThinkingConfig, "thinking_budget")
233
- else None,
231
+ )
232
+ if "gemini-2.5-flash" in self.get_model()
233
+ and hasattr(types.ThinkingConfig, "thinking_budget")
234
+ else None
235
+ ),
234
236
  automatic_function_calling=types.AutomaticFunctionCallingConfig(
235
237
  disable=True
236
238
  ),
@@ -274,9 +276,11 @@ class ProviderGoogleGenAI(Provider):
274
276
  if role == "user":
275
277
  if isinstance(content, list):
276
278
  parts = [
277
- types.Part.from_text(text=item["text"] or " ")
278
- if item["type"] == "text"
279
- else process_image_url(item["image_url"])
279
+ (
280
+ types.Part.from_text(text=item["text"] or " ")
281
+ if item["type"] == "text"
282
+ else process_image_url(item["image_url"])
283
+ )
280
284
  for item in content
281
285
  ]
282
286
  else:
@@ -38,7 +38,7 @@ class ProviderOpenAIOfficial(Provider):
38
38
  default_persona,
39
39
  )
40
40
  self.chosen_api_key = None
41
- self.api_keys: List = provider_config.get("key", [])
41
+ self.api_keys: List = super().get_keys()
42
42
  self.chosen_api_key = self.api_keys[0] if len(self.api_keys) > 0 else None
43
43
  self.timeout = provider_config.get("timeout", 120)
44
44
  if isinstance(self.timeout, str):
@@ -65,12 +65,12 @@ class SessionManagementRoute(Route):
65
65
  persona_name = data["persona_name"]
66
66
 
67
67
  # 处理 persona 显示
68
- if conv_persona_id == "[%None]":
69
- persona_name = "无人格"
70
- else:
71
- default_persona = persona_mgr.selected_default_persona_v3
72
- if default_persona:
73
- persona_name = default_persona["name"]
68
+ if persona_name is None:
69
+ if conv_persona_id is None:
70
+ if default_persona := persona_mgr.selected_default_persona_v3:
71
+ persona_name = default_persona["name"]
72
+ else:
73
+ persona_name = "[%None]"
74
74
 
75
75
  session_info = {
76
76
  "session_id": session_id,
@@ -9,6 +9,8 @@ from astrbot.core.config.default import VERSION
9
9
  from astrbot.core import DEMO_MODE
10
10
  from astrbot.core.db.migration.helper import do_migration_v4, check_migration_needed_v4
11
11
 
12
+ CLEAR_SITE_DATA_HEADERS = {"Clear-Site-Data": '"cache"'}
13
+
12
14
 
13
15
  class UpdateRoute(Route):
14
16
  def __init__(
@@ -113,17 +115,19 @@ class UpdateRoute(Route):
113
115
 
114
116
  if reboot:
115
117
  await self.core_lifecycle.restart()
116
- return (
118
+ ret = (
117
119
  Response()
118
120
  .ok(None, "更新成功,AstrBot 将在 2 秒内全量重启以应用新的代码。")
119
121
  .__dict__
120
122
  )
123
+ return ret, 200, CLEAR_SITE_DATA_HEADERS
121
124
  else:
122
- return (
125
+ ret = (
123
126
  Response()
124
127
  .ok(None, "更新成功,AstrBot 将在下次启动时应用新的代码。")
125
128
  .__dict__
126
129
  )
130
+ return ret, 200, CLEAR_SITE_DATA_HEADERS
127
131
  except Exception as e:
128
132
  logger.error(f"/api/update_project: {traceback.format_exc()}")
129
133
  return Response().error(e.__str__()).__dict__
@@ -135,9 +139,8 @@ class UpdateRoute(Route):
135
139
  except Exception as e:
136
140
  logger.error(f"下载管理面板文件失败: {e}。")
137
141
  return Response().error(f"下载管理面板文件失败: {e}").__dict__
138
- return (
139
- Response().ok(None, "更新成功。刷新页面即可应用新版本面板。").__dict__
140
- )
142
+ ret = Response().ok(None, "更新成功。刷新页面即可应用新版本面板。").__dict__
143
+ return ret, 200, CLEAR_SITE_DATA_HEADERS
141
144
  except Exception as e:
142
145
  logger.error(f"/api/update_dashboard: {traceback.format_exc()}")
143
146
  return Response().error(e.__str__()).__dict__
@@ -0,0 +1,7 @@
1
+ # What's Changed
2
+
3
+ 1. fix: 修复 /reset 指令没有清除群聊上下文感知数据的问题 ([#2954](https://github.com/AstrBotDevs/AstrBot/issues/2954))
4
+ 2. fix: 修复自带的 WebSearch 插件可能在部分场景下无法使用的问题
5
+ 3. fix: 发送阶段强行将 Plain 为空的消息段移除
6
+ 4. fix: on_tool_end无法获得工具返回的结果 ([#2956](https://github.com/AstrBotDevs/AstrBot/issues/2956))
7
+ 5. feat: 为插件市场的搜索增加拼音与首字母搜索功能 ([#2936](https://github.com/AstrBotDevs/AstrBot/issues/2936))
@@ -0,0 +1,12 @@
1
+ # What's Changed
2
+
3
+ 1. fix: 修复了代码执行器插件不能正确获得发送来文件的问题 ([#2970](https://github.com/Soulter/AstrBot/issues/2970))
4
+ 2. fix: 修改的 DeepSeek 默认 modalities,避免默认勾选图像导致的报错。 ([#2963](https://github.com/Soulter/AstrBot/issues/2963))
5
+ 3. fix: 事件钩子终止事件传播后不继续执行 ([#2989](https://github.com/Soulter/AstrBot/issues/2989))
6
+ 4. fix: 启动了 TTS 但未配置 TTS 模型时,At 和 Reply 发送人无效
7
+ 5. fix: 修复 session-management 中人格错误的显示为默认人格的问题 ([#3000](https://github.com/Soulter/AstrBot/issues/3000))
8
+ 6. fix: 修复了删除对话时,聊天增强中的记录未被清除,导致新对话中仍然出现之前的聊天记录。 ([#3002](https://github.com/Soulter/AstrBot/issues/3002))
9
+ 7. fix: 修复阿里云百炼平台 TTS 下接入 CosyVoice V2, Qwen TTS 生成报错的问题 ([#2964](https://github.com/Soulter/AstrBot/issues/2964))
10
+ 8. perf: 优化 SQLite 参数配置,对话和会话管理增加输入防抖机制 ([#2969](https://github.com/Soulter/AstrBot/issues/2969))
11
+ 9. feat: 在新对话中重用先前的对话人格设置 ([#3005](https://github.com/Soulter/AstrBot/issues/3005))
12
+ 10. feat: 从 WebUI 更新后清除浏览器缓存 ([#2958](https://github.com/Soulter/AstrBot/issues/2958))