AstrBot 3.5.25__tar.gz → 3.5.27__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 (470) hide show
  1. {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/dashboard_ci.yml +12 -0
  2. {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/docker-image.yml +11 -0
  3. {astrbot-3.5.25 → astrbot-3.5.27}/PKG-INFO +3 -3
  4. {astrbot-3.5.25 → astrbot-3.5.27}/README.md +2 -2
  5. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/utils/basic.py +12 -3
  6. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/config/default.py +31 -42
  7. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/core_lifecycle.py +5 -1
  8. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/dingtalk/dingtalk_event.py +1 -1
  9. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +96 -3
  10. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/fishaudio_tts_api_source.py +37 -3
  11. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gemini_source.py +3 -0
  12. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/openai_source.py +5 -2
  13. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/updator.py +10 -8
  14. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/io.py +43 -9
  15. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/zip_updator.py +29 -8
  16. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/update.py +7 -8
  17. astrbot-3.5.27/changelogs/v3.5.26.md +9 -0
  18. astrbot-3.5.27/changelogs/v3.5.27.md +5 -0
  19. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/header.json +4 -4
  20. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/header.json +3 -4
  21. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +38 -20
  22. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/SessionManagementPage.vue +5 -3
  23. {astrbot-3.5.25 → astrbot-3.5.27}/main.py +3 -3
  24. {astrbot-3.5.25 → astrbot-3.5.27}/packages/astrbot/main.py +1 -1
  25. {astrbot-3.5.25 → astrbot-3.5.27}/pyproject.toml +1 -1
  26. {astrbot-3.5.25 → astrbot-3.5.27}/uv.lock +1509 -1510
  27. {astrbot-3.5.25 → astrbot-3.5.27}/.dockerignore +0 -0
  28. {astrbot-3.5.25 → astrbot-3.5.27}/.github/FUNDING.yml +0 -0
  29. {astrbot-3.5.25 → astrbot-3.5.27}/.github/ISSUE_TEMPLATE/PLUGIN_PUBLISH.yml +0 -0
  30. {astrbot-3.5.25 → astrbot-3.5.27}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  31. {astrbot-3.5.25 → astrbot-3.5.27}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  32. {astrbot-3.5.25 → astrbot-3.5.27}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  33. {astrbot-3.5.25 → astrbot-3.5.27}/.github/copilot-instructions.md +0 -0
  34. {astrbot-3.5.25 → astrbot-3.5.27}/.github/dependabot.yml +0 -0
  35. {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/auto_release.yml +0 -0
  36. {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/codeql.yml +0 -0
  37. {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/coverage_test.yml +0 -0
  38. {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/stale.yml +0 -0
  39. {astrbot-3.5.25 → astrbot-3.5.27}/.gitignore +0 -0
  40. {astrbot-3.5.25 → astrbot-3.5.27}/.pre-commit-config.yaml +0 -0
  41. {astrbot-3.5.25 → astrbot-3.5.27}/.python-version +0 -0
  42. {astrbot-3.5.25 → astrbot-3.5.27}/CODE_OF_CONDUCT.md +0 -0
  43. {astrbot-3.5.25 → astrbot-3.5.27}/Dockerfile +0 -0
  44. {astrbot-3.5.25 → astrbot-3.5.27}/Dockerfile_with_node +0 -0
  45. {astrbot-3.5.25 → astrbot-3.5.27}/LICENSE +0 -0
  46. {astrbot-3.5.25 → astrbot-3.5.27}/README_en.md +0 -0
  47. {astrbot-3.5.25 → astrbot-3.5.27}/README_ja.md +0 -0
  48. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/__init__.py +0 -0
  49. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/__init__.py +0 -0
  50. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/all.py +0 -0
  51. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/event/__init__.py +0 -0
  52. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/event/filter/__init__.py +0 -0
  53. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/message_components.py +0 -0
  54. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/platform/__init__.py +0 -0
  55. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/provider/__init__.py +0 -0
  56. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/star/__init__.py +0 -0
  57. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/util/__init__.py +0 -0
  58. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/__init__.py +0 -0
  59. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/__main__.py +0 -0
  60. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/__init__.py +0 -0
  61. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/cmd_conf.py +0 -0
  62. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/cmd_init.py +0 -0
  63. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/cmd_plug.py +0 -0
  64. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/cmd_run.py +0 -0
  65. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/utils/__init__.py +0 -0
  66. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/utils/plugin.py +0 -0
  67. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/utils/version_comparator.py +0 -0
  68. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/__init__.py +0 -0
  69. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/config/__init__.py +0 -0
  70. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/config/astrbot_config.py +0 -0
  71. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/conversation_mgr.py +0 -0
  72. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/__init__.py +0 -0
  73. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/po.py +0 -0
  74. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/sqlite.py +0 -0
  75. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/sqlite_init.sql +0 -0
  76. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/base.py +0 -0
  77. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/__init__.py +0 -0
  78. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/document_storage.py +0 -0
  79. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/embedding_storage.py +0 -0
  80. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql +0 -0
  81. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/vec_db.py +0 -0
  82. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/event_bus.py +0 -0
  83. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/file_token_service.py +0 -0
  84. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/initial_loader.py +0 -0
  85. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/log.py +0 -0
  86. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/message/components.py +0 -0
  87. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/message/message_event_result.py +0 -0
  88. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/__init__.py +0 -0
  89. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/stage.py +0 -0
  90. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/strategies/__init__.py +0 -0
  91. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py +0 -0
  92. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/strategies/keywords.py +0 -0
  93. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/strategies/strategy.py +0 -0
  94. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/context.py +0 -0
  95. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/platform_compatibility/stage.py +0 -0
  96. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/preprocess_stage/stage.py +0 -0
  97. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/agent_runner/base.py +0 -0
  98. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/agent_runner/tool_loop_agent.py +0 -0
  99. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/method/llm_request.py +0 -0
  100. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/method/star_request.py +0 -0
  101. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/stage.py +0 -0
  102. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/rate_limit_check/stage.py +0 -0
  103. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/respond/stage.py +0 -0
  104. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/result_decorate/stage.py +0 -0
  105. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/scheduler.py +0 -0
  106. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/session_status_check/stage.py +0 -0
  107. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/stage.py +0 -0
  108. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/waking_check/stage.py +0 -0
  109. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/whitelist_check/stage.py +0 -0
  110. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/__init__.py +0 -0
  111. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/astr_message_event.py +0 -0
  112. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/astrbot_message.py +0 -0
  113. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/manager.py +0 -0
  114. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/message_type.py +0 -0
  115. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/platform.py +0 -0
  116. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/platform_metadata.py +0 -0
  117. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/register.py +0 -0
  118. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +0 -0
  119. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +0 -0
  120. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +0 -0
  121. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/discord/client.py +0 -0
  122. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/discord/components.py +0 -0
  123. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/discord/discord_platform_adapter.py +0 -0
  124. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/discord/discord_platform_event.py +0 -0
  125. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/lark/lark_adapter.py +0 -0
  126. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/lark/lark_event.py +0 -0
  127. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +0 -0
  128. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py +0 -0
  129. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py +0 -0
  130. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +0 -0
  131. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/slack/client.py +0 -0
  132. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/slack/slack_adapter.py +0 -0
  133. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/slack/slack_event.py +0 -0
  134. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/telegram/tg_adapter.py +0 -0
  135. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/telegram/tg_event.py +0 -0
  136. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/webchat/webchat_adapter.py +0 -0
  137. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/webchat/webchat_event.py +0 -0
  138. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +0 -0
  139. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +0 -0
  140. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py +0 -0
  141. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py +0 -0
  142. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wecom/wecom_adapter.py +0 -0
  143. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wecom/wecom_event.py +0 -0
  144. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wecom/wecom_kf.py +0 -0
  145. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wecom/wecom_kf_message.py +0 -0
  146. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +0 -0
  147. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +0 -0
  148. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/__init__.py +0 -0
  149. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/entites.py +0 -0
  150. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/entities.py +0 -0
  151. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/func_tool_manager.py +0 -0
  152. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/manager.py +0 -0
  153. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/provider.py +0 -0
  154. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/register.py +0 -0
  155. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/anthropic_source.py +0 -0
  156. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/azure_tts_source.py +0 -0
  157. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/dashscope_source.py +0 -0
  158. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/dashscope_tts.py +0 -0
  159. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/dify_source.py +0 -0
  160. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/edge_tts_source.py +0 -0
  161. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gemini_embedding_source.py +0 -0
  162. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gemini_tts_source.py +0 -0
  163. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gsv_selfhosted_source.py +0 -0
  164. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gsvi_tts_source.py +0 -0
  165. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/minimax_tts_api_source.py +0 -0
  166. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/openai_embedding_source.py +0 -0
  167. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/openai_tts_api_source.py +0 -0
  168. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/sensevoice_selfhosted_source.py +0 -0
  169. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/volcengine_tts.py +0 -0
  170. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/whisper_api_source.py +0 -0
  171. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/whisper_selfhosted_source.py +0 -0
  172. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/zhipu_source.py +0 -0
  173. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/README.md +0 -0
  174. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/__init__.py +0 -0
  175. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/config.py +0 -0
  176. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/context.py +0 -0
  177. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/__init__.py +0 -0
  178. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/command.py +0 -0
  179. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/command_group.py +0 -0
  180. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/custom_filter.py +0 -0
  181. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/event_message_type.py +0 -0
  182. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/permission.py +0 -0
  183. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/platform_adapter_type.py +0 -0
  184. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/regex.py +0 -0
  185. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/register/__init__.py +0 -0
  186. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/register/star.py +0 -0
  187. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/register/star_handler.py +0 -0
  188. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/session_llm_manager.py +0 -0
  189. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/session_plugin_manager.py +0 -0
  190. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/star.py +0 -0
  191. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/star_handler.py +0 -0
  192. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/star_manager.py +0 -0
  193. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/star_tools.py +0 -0
  194. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/updator.py +0 -0
  195. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/astrbot_path.py +0 -0
  196. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/command_parser.py +0 -0
  197. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/dify_api_client.py +0 -0
  198. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/log_pipe.py +0 -0
  199. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/metrics.py +0 -0
  200. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/path_util.py +0 -0
  201. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/pip_installer.py +0 -0
  202. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/session_lock.py +0 -0
  203. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/session_waiter.py +0 -0
  204. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/shared_preferences.py +0 -0
  205. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/__init__.py +0 -0
  206. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/local_strategy.py +0 -0
  207. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/network_strategy.py +0 -0
  208. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/renderer.py +0 -0
  209. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/template/base.html +0 -0
  210. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/tencent_record_helper.py +0 -0
  211. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/version_comparator.py +0 -0
  212. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/__init__.py +0 -0
  213. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/auth.py +0 -0
  214. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/chat.py +0 -0
  215. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/config.py +0 -0
  216. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/conversation.py +0 -0
  217. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/file.py +0 -0
  218. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/log.py +0 -0
  219. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/plugin.py +0 -0
  220. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/route.py +0 -0
  221. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/session_management.py +0 -0
  222. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/stat.py +0 -0
  223. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/static_file.py +0 -0
  224. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/tools.py +0 -0
  225. {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/server.py +0 -0
  226. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.0.md +0 -0
  227. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.1.md +0 -0
  228. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.10.md +0 -0
  229. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.11.md +0 -0
  230. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.12.md +0 -0
  231. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.13.md +0 -0
  232. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.14.md +0 -0
  233. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.15.md +0 -0
  234. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.16.md +0 -0
  235. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.17.md +0 -0
  236. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.18.md +0 -0
  237. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.19.md +0 -0
  238. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.20.md +0 -0
  239. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.21.md +0 -0
  240. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.22.md +0 -0
  241. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.23.md +0 -0
  242. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.24.md +0 -0
  243. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.25.md +0 -0
  244. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.26.md +0 -0
  245. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.27.md +0 -0
  246. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.28.md +0 -0
  247. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.29.md +0 -0
  248. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.3.md +0 -0
  249. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.30.md +0 -0
  250. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.31.md +0 -0
  251. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.32.md +0 -0
  252. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.33.md +0 -0
  253. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.35.md +0 -0
  254. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.36.md +0 -0
  255. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.37.md +0 -0
  256. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.38.md +0 -0
  257. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.39.md +0 -0
  258. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.4.md +0 -0
  259. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.5.md +0 -0
  260. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.6.md +0 -0
  261. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.7.md +0 -0
  262. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.8.md +0 -0
  263. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.9.md +0 -0
  264. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.0.md +0 -0
  265. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.1.md +0 -0
  266. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.10.md +0 -0
  267. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.11.md +0 -0
  268. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.12.md +0 -0
  269. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.13.md +0 -0
  270. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.14.md +0 -0
  271. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.15.md +0 -0
  272. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.16.md +0 -0
  273. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.17.md +0 -0
  274. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.18.md +0 -0
  275. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.19.md +0 -0
  276. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.2.md +0 -0
  277. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.20.md +0 -0
  278. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.21.md +0 -0
  279. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.22.md +0 -0
  280. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.23.md +0 -0
  281. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.24.md +0 -0
  282. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.25.md +0 -0
  283. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.3.1.md +0 -0
  284. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.3.2.md +0 -0
  285. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.3.md +0 -0
  286. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.4.md +0 -0
  287. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.5.md +0 -0
  288. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.6.md +0 -0
  289. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.7.md +0 -0
  290. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.8.md +0 -0
  291. {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.9.md +0 -0
  292. {astrbot-3.5.25 → astrbot-3.5.27}/compose.yml +0 -0
  293. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/.gitignore +0 -0
  294. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/LICENSE +0 -0
  295. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/README.md +0 -0
  296. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/env.d.ts +0 -0
  297. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/index.html +0 -0
  298. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/public/_redirects +0 -0
  299. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/public/favicon.svg +0 -0
  300. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/App.vue +0 -0
  301. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/astrbot_logo_mini.webp +0 -0
  302. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/logo-normal.svg +0 -0
  303. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/logo-waifu.png +0 -0
  304. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/dingtalk.svg +0 -0
  305. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/discord.svg +0 -0
  306. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/kook.png +0 -0
  307. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/lark.png +0 -0
  308. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/qq.png +0 -0
  309. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/slack.svg +0 -0
  310. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/telegram.svg +0 -0
  311. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/vocechat.png +0 -0
  312. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/wechat.png +0 -0
  313. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/wecom.png +0 -0
  314. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/ConfirmDialog.vue +0 -0
  315. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/chat/ProviderModelSelector.vue +0 -0
  316. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/AstrBotConfig.vue +0 -0
  317. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ConsoleDisplayer.vue +0 -0
  318. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ExtensionCard.vue +0 -0
  319. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ItemCard.vue +0 -0
  320. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ItemCardGrid.vue +0 -0
  321. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/LanguageSwitcher.vue +0 -0
  322. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ListConfigItem.vue +0 -0
  323. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/Logo.vue +0 -0
  324. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ProxySelector.vue +0 -0
  325. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ReadmeDialog.vue +0 -0
  326. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/UiParentCard.vue +0 -0
  327. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/WaitingForRestart.vue +0 -0
  328. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/config.ts +0 -0
  329. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/composables.ts +0 -0
  330. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/loader.ts +0 -0
  331. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/actions.json +0 -0
  332. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/common.json +0 -0
  333. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/navigation.json +0 -0
  334. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/status.json +0 -0
  335. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/about.json +0 -0
  336. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/alkaid/index.json +0 -0
  337. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/alkaid/knowledge-base.json +0 -0
  338. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/alkaid/memory.json +0 -0
  339. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/auth.json +0 -0
  340. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/chart.json +0 -0
  341. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/chat.json +0 -0
  342. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/config.json +0 -0
  343. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/console.json +0 -0
  344. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/conversation.json +0 -0
  345. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/dashboard.json +0 -0
  346. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/extension.json +0 -0
  347. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/platform.json +0 -0
  348. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/provider.json +0 -0
  349. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/session-management.json +0 -0
  350. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/settings.json +0 -0
  351. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/tool-use.json +0 -0
  352. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/messages/errors.json +0 -0
  353. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/messages/success.json +0 -0
  354. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/messages/validation.json +0 -0
  355. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/actions.json +0 -0
  356. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/common.json +0 -0
  357. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/navigation.json +0 -0
  358. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/status.json +0 -0
  359. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/about.json +0 -0
  360. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/alkaid/index.json +0 -0
  361. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/alkaid/knowledge-base.json +0 -0
  362. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/alkaid/memory.json +0 -0
  363. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/auth.json +0 -0
  364. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/chart.json +0 -0
  365. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/chat.json +0 -0
  366. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/config.json +0 -0
  367. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/console.json +0 -0
  368. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/conversation.json +0 -0
  369. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/dashboard.json +0 -0
  370. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/extension.json +0 -0
  371. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/platform.json +0 -0
  372. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/provider.json +0 -0
  373. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/session-management.json +0 -0
  374. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/settings.json +0 -0
  375. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/tool-use.json +0 -0
  376. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/messages/errors.json +0 -0
  377. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/messages/success.json +0 -0
  378. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/messages/validation.json +0 -0
  379. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/tools/index.ts +0 -0
  380. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/translations.ts +0 -0
  381. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/types.ts +0 -0
  382. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/validator.ts +0 -0
  383. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/blank/BlankLayout.vue +0 -0
  384. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/FullLayout.vue +0 -0
  385. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue +0 -0
  386. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue +0 -0
  387. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/vertical-sidebar/sidebarItem.ts +0 -0
  388. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/main.ts +0 -0
  389. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/plugins/confirmPlugin.ts +0 -0
  390. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/plugins/vuetify.ts +0 -0
  391. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/router/AuthRoutes.ts +0 -0
  392. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/router/ChatBoxRoutes.ts +0 -0
  393. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/router/MainRoutes.ts +0 -0
  394. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/router/index.ts +0 -0
  395. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/_override.scss +0 -0
  396. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/_variables.scss +0 -0
  397. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VButtons.scss +0 -0
  398. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VCard.scss +0 -0
  399. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VField.scss +0 -0
  400. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VInput.scss +0 -0
  401. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VNavigationDrawer.scss +0 -0
  402. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VScrollbar.scss +0 -0
  403. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VShadow.scss +0 -0
  404. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VTabs.scss +0 -0
  405. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VTextField.scss +0 -0
  406. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/layout/_container.scss +0 -0
  407. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/layout/_sidebar.scss +0 -0
  408. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/pages/_dashboards.scss +0 -0
  409. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/style.scss +0 -0
  410. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/stores/auth.ts +0 -0
  411. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/stores/common.js +0 -0
  412. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/stores/customizer.ts +0 -0
  413. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/theme/DarkTheme.ts +0 -0
  414. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/theme/LightTheme.ts +0 -0
  415. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/types/themeTypes/ThemeType.ts +0 -0
  416. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/types/vue3-print-nb.d.ts +0 -0
  417. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/types/vue_tabler_icon.d.ts +0 -0
  418. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/AboutPage.vue +0 -0
  419. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/AlkaidPage.vue +0 -0
  420. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/AlkaidPage_sigma.vue +0 -0
  421. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ChatBoxPage.vue +0 -0
  422. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ChatPage.vue +0 -0
  423. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ConfigPage.vue +0 -0
  424. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ConsolePage.vue +0 -0
  425. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ConversationPage.vue +0 -0
  426. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ExtensionPage.vue +0 -0
  427. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/PlatformPage.vue +0 -0
  428. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ProviderPage.vue +0 -0
  429. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/Settings.vue +0 -0
  430. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ToolUsePage.vue +0 -0
  431. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/alkaid/KnowledgeBase.vue +0 -0
  432. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/alkaid/LongTermMemory.vue +0 -0
  433. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/alkaid/Other.vue +0 -0
  434. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/authentication/auth/LoginPage.vue +0 -0
  435. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/authentication/authForms/AuthLogin.vue +0 -0
  436. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/DefaultDashboard.vue +0 -0
  437. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/MemoryUsage.vue +0 -0
  438. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/MessageStat.vue +0 -0
  439. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/OnlinePlatform.vue +0 -0
  440. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/OnlineTime.vue +0 -0
  441. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/PlatformStat.vue +0 -0
  442. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/RunningTime.vue +0 -0
  443. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/TotalMessage.vue +0 -0
  444. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/tsconfig.json +0 -0
  445. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/tsconfig.vite-config.json +0 -0
  446. {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/vite.config.ts +0 -0
  447. {astrbot-3.5.25 → astrbot-3.5.27}/packages/astrbot/long_term_memory.py +0 -0
  448. {astrbot-3.5.25 → astrbot-3.5.27}/packages/astrbot/metadata.yaml +0 -0
  449. {astrbot-3.5.25 → astrbot-3.5.27}/packages/python_interpreter/main.py +0 -0
  450. {astrbot-3.5.25 → astrbot-3.5.27}/packages/python_interpreter/metadata.yaml +0 -0
  451. {astrbot-3.5.25 → astrbot-3.5.27}/packages/python_interpreter/requirements.txt +0 -0
  452. {astrbot-3.5.25 → astrbot-3.5.27}/packages/python_interpreter/shared/api.py +0 -0
  453. {astrbot-3.5.25 → astrbot-3.5.27}/packages/reminder/main.py +0 -0
  454. {astrbot-3.5.25 → astrbot-3.5.27}/packages/reminder/metadata.yaml +0 -0
  455. {astrbot-3.5.25 → astrbot-3.5.27}/packages/session_controller/main.py +0 -0
  456. {astrbot-3.5.25 → astrbot-3.5.27}/packages/session_controller/metadata.yaml +0 -0
  457. {astrbot-3.5.25 → astrbot-3.5.27}/packages/thinking_filter/main.py +0 -0
  458. {astrbot-3.5.25 → astrbot-3.5.27}/packages/thinking_filter/metadata.yaml +0 -0
  459. {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/engines/__init__.py +0 -0
  460. {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/engines/bing.py +0 -0
  461. {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/engines/google.py +0 -0
  462. {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/engines/sogo.py +0 -0
  463. {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/main.py +0 -0
  464. {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/metadata.yaml +0 -0
  465. {astrbot-3.5.25 → astrbot-3.5.27}/requirements.txt +0 -0
  466. {astrbot-3.5.25 → astrbot-3.5.27}/samples/stt_health_check.wav +0 -0
  467. {astrbot-3.5.25 → astrbot-3.5.27}/tests/test_dashboard.py +0 -0
  468. {astrbot-3.5.25 → astrbot-3.5.27}/tests/test_main.py +0 -0
  469. {astrbot-3.5.25 → astrbot-3.5.27}/tests/test_pipeline.py +0 -0
  470. {astrbot-3.5.25 → astrbot-3.5.27}/tests/test_plugin_manager.py +0 -0
@@ -25,6 +25,8 @@ jobs:
25
25
  echo "COMMIT_SHA=$(git rev-parse HEAD)" >> $GITHUB_ENV
26
26
  mkdir -p dashboard/dist/assets
27
27
  echo $COMMIT_SHA > dashboard/dist/assets/version
28
+ cd dashboard
29
+ zip -r dist.zip dist
28
30
 
29
31
  - name: Archive production artifacts
30
32
  uses: actions/upload-artifact@v4
@@ -33,3 +35,13 @@ jobs:
33
35
  path: |
34
36
  dashboard/dist
35
37
  !dist/**/*.md
38
+
39
+ - name: Create GitHub Release
40
+ uses: ncipollo/release-action@v1
41
+ with:
42
+ tag: release-${{ github.sha }}
43
+ owner: AstrBotDevs
44
+ repo: astrbot-release-harbour
45
+ body: "Automated release from commit ${{ github.sha }}"
46
+ token: ${{ secrets.ASTRBOT_HARBOUR_TOKEN }}
47
+ artifacts: "dashboard/dist.zip"
@@ -27,6 +27,17 @@ 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: Build Dashboard
31
+ run: |
32
+ cd dashboard
33
+ npm install
34
+ npm run build
35
+ mkdir -p dist/assets
36
+ echo $(git rev-parse HEAD) > dist/assets/version
37
+ cd ..
38
+ mkdir -p data
39
+ cp -r dashboard/dist data/
40
+
30
41
  - name: Set QEMU
31
42
  uses: docker/setup-qemu-action@v3
32
43
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AstrBot
3
- Version: 3.5.25
3
+ Version: 3.5.27
4
4
  Summary: 易上手的多平台 LLM 聊天机器人及开发框架
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.10
@@ -47,7 +47,7 @@ Requires-Dist: websockets>=15.0.1
47
47
  Requires-Dist: wechatpy>=1.8.18
48
48
  Description-Content-Type: text/markdown
49
49
 
50
- <p align="center">
50
+ <img width="430" height="31" alt="image" src="https://github.com/user-attachments/assets/474c822c-fab7-41be-8c23-6dae252823ed" /><p align="center">
51
51
 
52
52
  ![AstrBot-Logo-Simplified](https://github.com/user-attachments/assets/ffd99b6b-3272-4682-beaa-6fe74250f7d9)
53
53
 
@@ -74,7 +74,7 @@ _✨ 易上手的多平台 LLM 聊天机器人及开发框架 ✨_
74
74
  <a href="https://github.com/Soulter/AstrBot/issues">问题提交</a>
75
75
  </div>
76
76
 
77
- AstrBot 是一个松耦合、异步、支持多消息平台部署、具有易用的插件系统和完善的大语言模型(LLM)接入功能的聊天机器人及开发框架。
77
+ AstrBot 是一个开源的一站式 Agentic 聊天机器人平台及开发框架。
78
78
 
79
79
  ## ✨ 主要功能
80
80
 
@@ -1,4 +1,4 @@
1
- <p align="center">
1
+ <img width="430" height="31" alt="image" src="https://github.com/user-attachments/assets/474c822c-fab7-41be-8c23-6dae252823ed" /><p align="center">
2
2
 
3
3
  ![AstrBot-Logo-Simplified](https://github.com/user-attachments/assets/ffd99b6b-3272-4682-beaa-6fe74250f7d9)
4
4
 
@@ -25,7 +25,7 @@ _✨ 易上手的多平台 LLM 聊天机器人及开发框架 ✨_
25
25
  <a href="https://github.com/Soulter/AstrBot/issues">问题提交</a>
26
26
  </div>
27
27
 
28
- AstrBot 是一个松耦合、异步、支持多消息平台部署、具有易用的插件系统和完善的大语言模型(LLM)接入功能的聊天机器人及开发框架。
28
+ AstrBot 是一个开源的一站式 Agentic 聊天机器人平台及开发框架。
29
29
 
30
30
  ## ✨ 主要功能
31
31
 
@@ -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:
@@ -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 = "3.5.25"
9
+ VERSION = "3.5.27"
10
10
  DB_PATH = os.path.join(get_astrbot_data_path(), "data_v3.db")
11
11
 
12
12
  # 默认配置
@@ -65,7 +65,7 @@ DEFAULT_CONFIG = {
65
65
  "show_tool_use_status": False,
66
66
  "streaming_segmented": False,
67
67
  "separate_provider": True,
68
- "max_agent_step": 30
68
+ "max_agent_step": 30,
69
69
  },
70
70
  "provider_stt_settings": {
71
71
  "enable": False,
@@ -103,6 +103,7 @@ DEFAULT_CONFIG = {
103
103
  "t2i_endpoint": "",
104
104
  "t2i_use_file_service": False,
105
105
  "http_proxy": "",
106
+ "no_proxy": ["localhost", "127.0.0.1", "::1"],
106
107
  "dashboard": {
107
108
  "enable": True,
108
109
  "username": "astrbot",
@@ -598,11 +599,8 @@ CONFIG_METADATA_2 = {
598
599
  "key": [],
599
600
  "api_base": "https://api.openai.com/v1",
600
601
  "timeout": 120,
601
- "model_config": {
602
- "model": "gpt-4o-mini",
603
- "temperature": 0.4
604
- },
605
- "hint": "也兼容所有与OpenAI API兼容的服务。"
602
+ "model_config": {"model": "gpt-4o-mini", "temperature": 0.4},
603
+ "hint": "也兼容所有与OpenAI API兼容的服务。",
606
604
  },
607
605
  "Azure OpenAI": {
608
606
  "id": "azure",
@@ -614,10 +612,7 @@ CONFIG_METADATA_2 = {
614
612
  "key": [],
615
613
  "api_base": "",
616
614
  "timeout": 120,
617
- "model_config": {
618
- "model": "gpt-4o-mini",
619
- "temperature": 0.4
620
- },
615
+ "model_config": {"model": "gpt-4o-mini", "temperature": 0.4},
621
616
  },
622
617
  "xAI": {
623
618
  "id": "xai",
@@ -628,10 +623,7 @@ CONFIG_METADATA_2 = {
628
623
  "key": [],
629
624
  "api_base": "https://api.x.ai/v1",
630
625
  "timeout": 120,
631
- "model_config": {
632
- "model": "grok-2-latest",
633
- "temperature": 0.4
634
- },
626
+ "model_config": {"model": "grok-2-latest", "temperature": 0.4},
635
627
  },
636
628
  "Anthropic": {
637
629
  "hint": "注意Claude系列模型的温度调节范围为0到1.0,超出可能导致报错",
@@ -646,11 +638,11 @@ CONFIG_METADATA_2 = {
646
638
  "model_config": {
647
639
  "model": "claude-3-5-sonnet-latest",
648
640
  "max_tokens": 4096,
649
- "temperature": 0.2
641
+ "temperature": 0.2,
650
642
  },
651
643
  },
652
644
  "Ollama": {
653
- "hint":"启用前请确保已正确安装并运行 Ollama 服务端,Ollama默认不带鉴权,无需修改key",
645
+ "hint": "启用前请确保已正确安装并运行 Ollama 服务端,Ollama默认不带鉴权,无需修改key",
654
646
  "id": "ollama_default",
655
647
  "provider": "ollama",
656
648
  "type": "openai_chat_completion",
@@ -658,10 +650,7 @@ CONFIG_METADATA_2 = {
658
650
  "enable": True,
659
651
  "key": ["ollama"], # ollama 的 key 默认是 ollama
660
652
  "api_base": "http://localhost:11434/v1",
661
- "model_config": {
662
- "model": "llama3.1-8b",
663
- "temperature": 0.4
664
- },
653
+ "model_config": {"model": "llama3.1-8b", "temperature": 0.4},
665
654
  },
666
655
  "LM Studio": {
667
656
  "id": "lm_studio",
@@ -686,7 +675,7 @@ CONFIG_METADATA_2 = {
686
675
  "timeout": 120,
687
676
  "model_config": {
688
677
  "model": "gemini-1.5-flash",
689
- "temperature": 0.4
678
+ "temperature": 0.4,
690
679
  },
691
680
  },
692
681
  "Gemini": {
@@ -700,7 +689,7 @@ CONFIG_METADATA_2 = {
700
689
  "timeout": 120,
701
690
  "model_config": {
702
691
  "model": "gemini-2.0-flash-exp",
703
- "temperature": 0.4
692
+ "temperature": 0.4,
704
693
  },
705
694
  "gm_resp_image_modal": False,
706
695
  "gm_native_search": False,
@@ -725,10 +714,7 @@ CONFIG_METADATA_2 = {
725
714
  "key": [],
726
715
  "api_base": "https://api.deepseek.com/v1",
727
716
  "timeout": 120,
728
- "model_config": {
729
- "model": "deepseek-chat",
730
- "temperature": 0.4
731
- },
717
+ "model_config": {"model": "deepseek-chat", "temperature": 0.4},
732
718
  },
733
719
  "302.AI": {
734
720
  "id": "302ai",
@@ -739,10 +725,7 @@ CONFIG_METADATA_2 = {
739
725
  "key": [],
740
726
  "api_base": "https://api.302.ai/v1",
741
727
  "timeout": 120,
742
- "model_config": {
743
- "model": "gpt-4.1-mini",
744
- "temperature": 0.4
745
- },
728
+ "model_config": {"model": "gpt-4.1-mini", "temperature": 0.4},
746
729
  },
747
730
  "硅基流动": {
748
731
  "id": "siliconflow",
@@ -755,7 +738,7 @@ CONFIG_METADATA_2 = {
755
738
  "api_base": "https://api.siliconflow.cn/v1",
756
739
  "model_config": {
757
740
  "model": "deepseek-ai/DeepSeek-V3",
758
- "temperature": 0.4
741
+ "temperature": 0.4,
759
742
  },
760
743
  },
761
744
  "PPIO派欧云": {
@@ -769,7 +752,7 @@ CONFIG_METADATA_2 = {
769
752
  "timeout": 120,
770
753
  "model_config": {
771
754
  "model": "deepseek/deepseek-r1",
772
- "temperature": 0.4
755
+ "temperature": 0.4,
773
756
  },
774
757
  },
775
758
  "优云智算": {
@@ -794,10 +777,7 @@ CONFIG_METADATA_2 = {
794
777
  "key": [],
795
778
  "timeout": 120,
796
779
  "api_base": "https://api.moonshot.cn/v1",
797
- "model_config": {
798
- "model": "moonshot-v1-8k",
799
- "temperature": 0.4
800
- },
780
+ "model_config": {"model": "moonshot-v1-8k", "temperature": 0.4},
801
781
  },
802
782
  "智谱 AI": {
803
783
  "id": "zhipu_default",
@@ -825,7 +805,7 @@ CONFIG_METADATA_2 = {
825
805
  "dify_query_input_key": "astrbot_text_query",
826
806
  "variables": {},
827
807
  "timeout": 60,
828
- "hint": "请确保你在 AstrBot 里设置的 APP 类型和 Dify 里面创建的应用的类型一致!"
808
+ "hint": "请确保你在 AstrBot 里设置的 APP 类型和 Dify 里面创建的应用的类型一致!",
829
809
  },
830
810
  "阿里云百炼应用": {
831
811
  "id": "dashscope",
@@ -853,10 +833,7 @@ CONFIG_METADATA_2 = {
853
833
  "key": [],
854
834
  "timeout": 120,
855
835
  "api_base": "https://api-inference.modelscope.cn/v1",
856
- "model_config": {
857
- "model": "Qwen/Qwen3-32B",
858
- "temperature": 0.4
859
- },
836
+ "model_config": {"model": "Qwen/Qwen3-32B", "temperature": 0.4},
860
837
  },
861
838
  "FastGPT": {
862
839
  "id": "fastgpt",
@@ -971,6 +948,7 @@ CONFIG_METADATA_2 = {
971
948
  "api_key": "",
972
949
  "api_base": "https://api.fish.audio/v1",
973
950
  "fishaudio-tts-character": "可莉",
951
+ "fishaudio-tts-reference-id": "",
974
952
  "timeout": "20",
975
953
  },
976
954
  "阿里云百炼 TTS(API)": {
@@ -1564,6 +1542,11 @@ CONFIG_METADATA_2 = {
1564
1542
  "type": "string",
1565
1543
  "hint": "fishaudio TTS 的角色。默认为可莉。更多角色请访问:https://fish.audio/zh-CN/discovery",
1566
1544
  },
1545
+ "fishaudio-tts-reference-id": {
1546
+ "description": "reference_id",
1547
+ "type": "string",
1548
+ "hint": "fishaudio TTS 的参考模型ID(可选)。如果填入此字段,将直接使用模型ID而不通过角色名称查询。例如:626bb6d3f3364c9cbc3aa6a67300a664。更多模型请访问:https://fish.audio/zh-CN/discovery,进入模型详情界面后可复制模型ID",
1549
+ },
1567
1550
  "whisper_hint": {
1568
1551
  "description": "本地部署 Whisper 模型须知",
1569
1552
  "type": "string",
@@ -1910,6 +1893,12 @@ CONFIG_METADATA_2 = {
1910
1893
  "type": "string",
1911
1894
  "hint": "启用后,会以添加环境变量的方式设置代理。格式为 `http://ip:port`",
1912
1895
  },
1896
+ "no_proxy": {
1897
+ "description": "直连地址列表",
1898
+ "type": "list",
1899
+ "items": {"type": "string"},
1900
+ "hint": "在此处添加不希望通过代理访问的地址,例如内部服务地址。回车添加,可添加多个,如未设置代理请忽略此配置",
1901
+ },
1913
1902
  "timezone": {
1914
1903
  "description": "时区",
1915
1904
  "type": "string",
@@ -52,14 +52,18 @@ class AstrBotCoreLifecycle:
52
52
  os.environ["https_proxy"] = proxy_config
53
53
  os.environ["http_proxy"] = proxy_config
54
54
  logger.debug(f"Using proxy: {proxy_config}")
55
+ # 设置 no_proxy
56
+ no_proxy_list = self.astrbot_config.get("no_proxy", [])
57
+ os.environ["no_proxy"] = ",".join(no_proxy_list)
55
58
  else:
56
59
  # 清空代理环境变量
57
60
  if "https_proxy" in os.environ:
58
61
  del os.environ["https_proxy"]
59
62
  if "http_proxy" in os.environ:
60
63
  del os.environ["http_proxy"]
64
+ if "no_proxy" in os.environ:
65
+ del os.environ["no_proxy"]
61
66
  logger.debug("HTTP proxy cleared")
62
- os.environ["no_proxy"] = "localhost,127.0.0.1,::1"
63
67
 
64
68
  async def initialize(self):
65
69
  """
@@ -26,7 +26,7 @@ class DingtalkMessageEvent(AstrMessageEvent):
26
26
  await asyncio.get_event_loop().run_in_executor(
27
27
  None,
28
28
  client.reply_markdown,
29
- "AstrBot",
29
+ segment.text,
30
30
  segment.text,
31
31
  self.message_obj.raw_message,
32
32
  )
@@ -3,15 +3,23 @@ import botpy.message
3
3
  import botpy.types
4
4
  import botpy.types.message
5
5
  import asyncio
6
+ import base64
7
+ import aiofiles
6
8
  from astrbot.core.utils.io import file_to_base64, download_image_by_url
9
+ from astrbot.core.utils.tencent_record_helper import wav_to_tencent_silk
10
+ from astrbot.core.utils.astrbot_path import get_astrbot_data_path
7
11
  from astrbot.api.event import AstrMessageEvent, MessageChain
8
12
  from astrbot.api.platform import AstrBotMessage, PlatformMetadata
9
- from astrbot.api.message_components import Plain, Image
13
+ from astrbot.api.message_components import Plain, Image, Record
10
14
  from botpy import Client
11
15
  from botpy.http import Route
12
16
  from astrbot.api import logger
17
+ from botpy.types.message import Media
13
18
  from botpy.types import message
19
+ from typing import Optional
14
20
  import random
21
+ import uuid
22
+ import os
15
23
 
16
24
 
17
25
  class QQOfficialMessageEvent(AstrMessageEvent):
@@ -36,6 +44,7 @@ class QQOfficialMessageEvent(AstrMessageEvent):
36
44
  stream_payload = {"state": 1, "id": None, "index": 0, "reset": False}
37
45
  last_edit_time = 0 # 上次编辑消息的时间
38
46
  throttle_interval = 1 # 编辑消息的间隔时间 (秒)
47
+ ret = None
39
48
  try:
40
49
  async for chain in generator:
41
50
  source = self.message_obj.raw_message
@@ -85,9 +94,10 @@ class QQOfficialMessageEvent(AstrMessageEvent):
85
94
  plain_text,
86
95
  image_base64,
87
96
  image_path,
97
+ record_file_path
88
98
  ) = await QQOfficialMessageEvent._parse_to_qqofficial(self.send_buffer)
89
99
 
90
- if not plain_text and not image_base64 and not image_path:
100
+ if not plain_text and not image_base64 and not image_path and not record_file_path:
91
101
  return
92
102
 
93
103
  payload = {
@@ -98,6 +108,8 @@ class QQOfficialMessageEvent(AstrMessageEvent):
98
108
  if not isinstance(source, (botpy.message.Message, botpy.message.DirectMessage)):
99
109
  payload["msg_seq"] = random.randint(1, 10000)
100
110
 
111
+ ret = None
112
+
101
113
  match type(source):
102
114
  case botpy.message.GroupMessage:
103
115
  if image_base64:
@@ -106,6 +118,12 @@ class QQOfficialMessageEvent(AstrMessageEvent):
106
118
  )
107
119
  payload["media"] = media
108
120
  payload["msg_type"] = 7
121
+ if record_file_path: # group record msg
122
+ media = await self.upload_group_and_c2c_record(
123
+ record_file_path, 3, group_openid=source.group_openid
124
+ )
125
+ payload["media"] = media
126
+ payload["msg_type"] = 7
109
127
  ret = await self.bot.api.post_group_message(
110
128
  group_openid=source.group_openid, **payload
111
129
  )
@@ -116,6 +134,12 @@ class QQOfficialMessageEvent(AstrMessageEvent):
116
134
  )
117
135
  payload["media"] = media
118
136
  payload["msg_type"] = 7
137
+ if record_file_path: # c2c record
138
+ media = await self.upload_group_and_c2c_record(
139
+ record_file_path, 3, openid = source.author.user_openid
140
+ )
141
+ payload["media"] = media
142
+ payload["msg_type"] = 7
119
143
  if stream:
120
144
  ret = await self.post_c2c_message(
121
145
  openid=source.author.user_openid,
@@ -165,6 +189,59 @@ class QQOfficialMessageEvent(AstrMessageEvent):
165
189
  )
166
190
  return await self.bot.api._http.request(route, json=payload)
167
191
 
192
+ async def upload_group_and_c2c_record(
193
+ self,
194
+ file_source: str,
195
+ file_type: int,
196
+ srv_send_msg: bool = False,
197
+ **kwargs
198
+ ) -> Optional[Media]:
199
+ """
200
+ 上传媒体文件
201
+ """
202
+ # 构建基础payload
203
+ payload = {
204
+ "file_type": file_type,
205
+ "srv_send_msg": srv_send_msg
206
+ }
207
+
208
+ # 处理文件数据
209
+ if os.path.exists(file_source):
210
+ # 读取本地文件
211
+ async with aiofiles.open(file_source, 'rb') as f:
212
+ file_content = await f.read()
213
+ # use base64 encode
214
+ payload["file_data"] = base64.b64encode(file_content).decode('utf-8')
215
+ else:
216
+ # 使用URL
217
+ payload["url"] = file_source
218
+
219
+ # 添加接收者信息和确定路由
220
+ if "openid" in kwargs:
221
+ payload["openid"] = kwargs["openid"]
222
+ route = Route("POST", "/v2/users/{openid}/files", openid=kwargs["openid"])
223
+ elif "group_openid" in kwargs:
224
+ payload["group_openid"] =kwargs["group_openid"]
225
+ route = Route("POST", "/v2/groups/{group_openid}/files", group_openid=kwargs["group_openid"])
226
+ else:
227
+ return None
228
+
229
+ try:
230
+ # 使用底层HTTP请求
231
+ result = await self.bot.api._http.request(route, json=payload)
232
+
233
+ if result:
234
+ return Media(
235
+ file_uuid=result.get("file_uuid"),
236
+ file_info=result.get("file_info"),
237
+ ttl=result.get("ttl", 0),
238
+ file_id=result.get("id", "")
239
+ )
240
+ except Exception as e:
241
+ logger.error(f"上传请求错误: {e}")
242
+
243
+ return None
244
+
168
245
  async def post_c2c_message(
169
246
  self,
170
247
  openid: str,
@@ -191,6 +268,7 @@ class QQOfficialMessageEvent(AstrMessageEvent):
191
268
  plain_text = ""
192
269
  image_base64 = None # only one img supported
193
270
  image_file_path = None
271
+ record_file_path = None
194
272
  for i in message.chain:
195
273
  if isinstance(i, Plain):
196
274
  plain_text += i.text
@@ -206,6 +284,21 @@ class QQOfficialMessageEvent(AstrMessageEvent):
206
284
  else:
207
285
  image_base64 = file_to_base64(i.file)
208
286
  image_base64 = image_base64.removeprefix("base64://")
287
+ elif isinstance(i, Record):
288
+ if i.file:
289
+ record_wav_path = await i.convert_to_file_path() # wav 路径
290
+ temp_dir = os.path.join(get_astrbot_data_path(), "temp")
291
+ record_tecent_silk_path = os.path.join(temp_dir, f"{uuid.uuid4()}.silk")
292
+ try:
293
+ duration = await wav_to_tencent_silk(record_wav_path, record_tecent_silk_path)
294
+ if duration > 0:
295
+ record_file_path = record_tecent_silk_path
296
+ else:
297
+ record_file_path = None
298
+ logger.error("转换音频格式时出错:音频时长不大于0")
299
+ except Exception as e:
300
+ logger.error(f"处理语音时出错: {e}")
301
+ record_file_path = None
209
302
  else:
210
303
  logger.debug(f"qq_official 忽略 {i.type}")
211
- return plain_text, image_base64, image_file_path
304
+ return plain_text, image_base64, image_file_path, record_file_path
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  import uuid
3
+ import re
3
4
  import ormsgpack
4
5
  from pydantic import BaseModel, conint
5
6
  from httpx import AsyncClient
@@ -24,8 +25,8 @@ class ServeTTSRequest(BaseModel):
24
25
  # 参考音频
25
26
  references: list[ServeReferenceAudio] = []
26
27
  # 参考模型 ID
27
- # 例如 https://fish.audio/m/7f92f8afb8ec43bf81429cc1c9199cb1/
28
- # 其中reference_id为 7f92f8afb8ec43bf81429cc1c9199cb1
28
+ # 例如 https://fish.audio/m/626bb6d3f3364c9cbc3aa6a67300a664/
29
+ # 其中reference_id为 626bb6d3f3364c9cbc3aa6a67300a664
29
30
  reference_id: str | None = None
30
31
  # 对中英文文本进行标准化,这可以提高数字的稳定性
31
32
  normalize: bool = True
@@ -44,6 +45,7 @@ class ProviderFishAudioTTSAPI(TTSProvider):
44
45
  ) -> None:
45
46
  super().__init__(provider_config, provider_settings)
46
47
  self.chosen_api_key: str = provider_config.get("api_key", "")
48
+ self.reference_id: str = provider_config.get("fishaudio-tts-reference-id", "")
47
49
  self.character: str = provider_config.get("fishaudio-tts-character", "可莉")
48
50
  self.api_base: str = provider_config.get(
49
51
  "api_base", "https://api.fish-audio.cn/v1"
@@ -81,11 +83,43 @@ class ProviderFishAudioTTSAPI(TTSProvider):
81
83
  return item["_id"]
82
84
  return None
83
85
 
86
+ def _validate_reference_id(self, reference_id: str) -> bool:
87
+ """
88
+ 验证reference_id格式是否有效
89
+
90
+ Args:
91
+ reference_id: 参考模型ID
92
+
93
+ Returns:
94
+ bool: ID是否有效
95
+ """
96
+ if not reference_id or not reference_id.strip():
97
+ return False
98
+
99
+ # FishAudio的reference_id通常是32位十六进制字符串
100
+ # 例如: 626bb6d3f3364c9cbc3aa6a67300a664
101
+ pattern = r'^[a-fA-F0-9]{32}$'
102
+ return bool(re.match(pattern, reference_id.strip()))
103
+
84
104
  async def _generate_request(self, text: str) -> dict:
105
+ # 向前兼容逻辑:优先使用reference_id,如果没有则使用角色名称查询
106
+ if self.reference_id and self.reference_id.strip():
107
+ # 验证reference_id格式
108
+ if not self._validate_reference_id(self.reference_id):
109
+ raise ValueError(
110
+ f"无效的FishAudio参考模型ID: '{self.reference_id}'. "
111
+ f"请确保ID是32位十六进制字符串(例如: 626bb6d3f3364c9cbc3aa6a67300a664)。"
112
+ f"您可以从 https://fish.audio/zh-CN/discovery 获取有效的模型ID。"
113
+ )
114
+ reference_id = self.reference_id.strip()
115
+ else:
116
+ # 回退到原来的角色名称查询逻辑
117
+ reference_id = await self._get_reference_id_by_character(self.character)
118
+
85
119
  return ServeTTSRequest(
86
120
  text=text,
87
121
  format="wav",
88
- reference_id=await self._get_reference_id_by_character(self.character),
122
+ reference_id=reference_id,
89
123
  )
90
124
 
91
125
  async def get_audio(self, text: str) -> str:
@@ -431,6 +431,7 @@ class ProviderGoogleGenAI(Provider):
431
431
  continue
432
432
 
433
433
  llm_response = LLMResponse("assistant")
434
+ llm_response.raw_completion = result
434
435
  llm_response.result_chain = self._process_content_parts(result, llm_response)
435
436
  return llm_response
436
437
 
@@ -481,6 +482,7 @@ class ProviderGoogleGenAI(Provider):
481
482
  part.function_call for part in chunk.candidates[0].content.parts
482
483
  ):
483
484
  llm_response = LLMResponse("assistant", is_chunk=False)
485
+ llm_response.raw_completion = chunk
484
486
  llm_response.result_chain = self._process_content_parts(
485
487
  chunk, llm_response
486
488
  )
@@ -496,6 +498,7 @@ class ProviderGoogleGenAI(Provider):
496
498
  # Process the final chunk for potential tool calls or other content
497
499
  if chunk.candidates[0].content.parts:
498
500
  final_response = LLMResponse("assistant", is_chunk=False)
501
+ final_response.raw_completion = chunk
499
502
  final_response.result_chain = self._process_content_parts(
500
503
  chunk, final_response
501
504
  )
@@ -99,10 +99,13 @@ class ProviderOpenAIOfficial(Provider):
99
99
  for key in to_del:
100
100
  del payloads[key]
101
101
 
102
- # 针对 qwen3 模型的特殊处理:非流式调用必须设置 enable_thinking=false
103
102
  model = payloads.get("model", "")
103
+ # 针对 qwen3 模型的特殊处理:非流式调用必须设置 enable_thinking=false
104
104
  if "qwen3" in model.lower():
105
- extra_body["enable_thinking"] = False
105
+ extra_body["enable_thinking"] = False
106
+ # 针对 deepseek 模型的特殊处理:deepseek-reasoner调用必须移除 tools ,否则将被切换至 deepseek-chat
107
+ elif model == "deepseek-reasoner" and "tools" in payloads:
108
+ del payloads["tools"]
106
109
 
107
110
  completion = await self.client.chat.completions.create(
108
111
  **payloads, stream=False, extra_body=extra_body