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.
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/dashboard_ci.yml +12 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/docker-image.yml +11 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/PKG-INFO +3 -3
- {astrbot-3.5.25 → astrbot-3.5.27}/README.md +2 -2
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/utils/basic.py +12 -3
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/config/default.py +31 -42
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/core_lifecycle.py +5 -1
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/dingtalk/dingtalk_event.py +1 -1
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +96 -3
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/fishaudio_tts_api_source.py +37 -3
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gemini_source.py +3 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/openai_source.py +5 -2
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/updator.py +10 -8
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/io.py +43 -9
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/zip_updator.py +29 -8
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/update.py +7 -8
- astrbot-3.5.27/changelogs/v3.5.26.md +9 -0
- astrbot-3.5.27/changelogs/v3.5.27.md +5 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/header.json +4 -4
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/header.json +3 -4
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +38 -20
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/SessionManagementPage.vue +5 -3
- {astrbot-3.5.25 → astrbot-3.5.27}/main.py +3 -3
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/astrbot/main.py +1 -1
- {astrbot-3.5.25 → astrbot-3.5.27}/pyproject.toml +1 -1
- {astrbot-3.5.25 → astrbot-3.5.27}/uv.lock +1509 -1510
- {astrbot-3.5.25 → astrbot-3.5.27}/.dockerignore +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/FUNDING.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/ISSUE_TEMPLATE/PLUGIN_PUBLISH.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/copilot-instructions.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/dependabot.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/auto_release.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/codeql.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/coverage_test.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.github/workflows/stale.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.gitignore +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.pre-commit-config.yaml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/.python-version +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/CODE_OF_CONDUCT.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/Dockerfile +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/Dockerfile_with_node +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/LICENSE +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/README_en.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/README_ja.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/all.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/event/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/event/filter/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/message_components.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/platform/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/provider/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/star/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/api/util/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/__main__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/cmd_conf.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/cmd_init.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/cmd_plug.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/commands/cmd_run.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/utils/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/utils/plugin.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/cli/utils/version_comparator.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/config/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/config/astrbot_config.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/conversation_mgr.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/po.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/sqlite.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/sqlite_init.sql +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/base.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/document_storage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/embedding_storage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/db/vec_db/faiss_impl/vec_db.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/event_bus.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/file_token_service.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/initial_loader.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/log.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/message/components.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/message/message_event_result.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/strategies/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/strategies/keywords.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/content_safety_check/strategies/strategy.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/context.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/platform_compatibility/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/preprocess_stage/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/agent_runner/base.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/agent_runner/tool_loop_agent.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/method/llm_request.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/method/star_request.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/process_stage/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/rate_limit_check/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/respond/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/result_decorate/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/scheduler.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/session_status_check/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/waking_check/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/pipeline/whitelist_check/stage.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/astr_message_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/astrbot_message.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/manager.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/message_type.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/platform.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/platform_metadata.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/register.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/discord/client.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/discord/components.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/discord/discord_platform_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/discord/discord_platform_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/lark/lark_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/lark/lark_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/slack/client.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/slack/slack_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/slack/slack_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/telegram/tg_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/telegram/tg_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/webchat/webchat_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/webchat/webchat_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wecom/wecom_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wecom/wecom_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wecom/wecom_kf.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/wecom/wecom_kf_message.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/entites.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/entities.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/func_tool_manager.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/manager.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/provider.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/register.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/anthropic_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/azure_tts_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/dashscope_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/dashscope_tts.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/dify_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/edge_tts_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gemini_embedding_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gemini_tts_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gsv_selfhosted_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/gsvi_tts_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/minimax_tts_api_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/openai_embedding_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/openai_tts_api_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/sensevoice_selfhosted_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/volcengine_tts.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/whisper_api_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/whisper_selfhosted_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/provider/sources/zhipu_source.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/README.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/config.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/context.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/command.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/command_group.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/custom_filter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/event_message_type.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/permission.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/platform_adapter_type.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/filter/regex.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/register/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/register/star.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/register/star_handler.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/session_llm_manager.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/session_plugin_manager.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/star.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/star_handler.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/star_manager.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/star_tools.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/star/updator.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/astrbot_path.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/command_parser.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/dify_api_client.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/log_pipe.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/metrics.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/path_util.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/pip_installer.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/session_lock.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/session_waiter.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/shared_preferences.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/local_strategy.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/network_strategy.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/renderer.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/t2i/template/base.html +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/tencent_record_helper.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/core/utils/version_comparator.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/auth.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/chat.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/config.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/conversation.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/file.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/log.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/plugin.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/route.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/session_management.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/stat.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/static_file.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/routes/tools.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/astrbot/dashboard/server.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.0.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.1.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.10.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.11.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.12.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.13.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.14.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.15.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.16.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.17.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.18.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.19.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.20.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.21.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.22.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.23.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.24.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.25.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.26.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.27.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.28.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.29.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.3.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.30.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.31.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.32.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.33.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.35.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.36.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.37.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.38.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.39.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.4.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.5.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.6.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.7.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.8.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.4.9.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.0.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.1.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.10.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.11.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.12.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.13.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.14.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.15.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.16.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.17.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.18.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.19.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.2.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.20.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.21.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.22.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.23.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.24.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.25.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.3.1.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.3.2.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.3.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.4.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.5.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.6.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.7.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.8.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/changelogs/v3.5.9.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/compose.yml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/.gitignore +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/LICENSE +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/README.md +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/env.d.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/index.html +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/public/_redirects +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/public/favicon.svg +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/App.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/astrbot_logo_mini.webp +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/logo-normal.svg +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/logo-waifu.png +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/dingtalk.svg +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/discord.svg +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/kook.png +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/lark.png +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/qq.png +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/slack.svg +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/telegram.svg +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/vocechat.png +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/wechat.png +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/assets/images/platform_logos/wecom.png +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/ConfirmDialog.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/chat/ProviderModelSelector.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/AstrBotConfig.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ConsoleDisplayer.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ExtensionCard.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ItemCard.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ItemCardGrid.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/LanguageSwitcher.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ListConfigItem.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/Logo.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ProxySelector.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/ReadmeDialog.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/UiParentCard.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/components/shared/WaitingForRestart.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/config.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/composables.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/loader.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/actions.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/common.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/navigation.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/core/status.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/about.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/alkaid/index.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/alkaid/knowledge-base.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/alkaid/memory.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/auth.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/chart.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/chat.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/config.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/console.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/conversation.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/dashboard.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/extension.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/platform.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/provider.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/session-management.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/settings.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/features/tool-use.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/messages/errors.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/messages/success.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/en-US/messages/validation.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/actions.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/common.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/navigation.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/core/status.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/about.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/alkaid/index.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/alkaid/knowledge-base.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/alkaid/memory.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/auth.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/chart.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/chat.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/config.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/console.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/conversation.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/dashboard.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/extension.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/platform.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/provider.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/session-management.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/settings.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/features/tool-use.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/messages/errors.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/messages/success.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/locales/zh-CN/messages/validation.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/tools/index.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/translations.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/types.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/i18n/validator.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/blank/BlankLayout.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/FullLayout.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/layouts/full/vertical-sidebar/sidebarItem.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/main.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/plugins/confirmPlugin.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/plugins/vuetify.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/router/AuthRoutes.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/router/ChatBoxRoutes.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/router/MainRoutes.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/router/index.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/_override.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/_variables.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VButtons.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VCard.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VField.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VInput.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VNavigationDrawer.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VScrollbar.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VShadow.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VTabs.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/components/_VTextField.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/layout/_container.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/layout/_sidebar.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/pages/_dashboards.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/scss/style.scss +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/stores/auth.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/stores/common.js +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/stores/customizer.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/theme/DarkTheme.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/theme/LightTheme.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/types/themeTypes/ThemeType.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/types/vue3-print-nb.d.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/types/vue_tabler_icon.d.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/AboutPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/AlkaidPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/AlkaidPage_sigma.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ChatBoxPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ChatPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ConfigPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ConsolePage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ConversationPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ExtensionPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/PlatformPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ProviderPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/Settings.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/ToolUsePage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/alkaid/KnowledgeBase.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/alkaid/LongTermMemory.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/alkaid/Other.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/authentication/auth/LoginPage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/authentication/authForms/AuthLogin.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/DefaultDashboard.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/MemoryUsage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/MessageStat.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/OnlinePlatform.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/OnlineTime.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/PlatformStat.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/RunningTime.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/src/views/dashboards/default/components/TotalMessage.vue +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/tsconfig.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/tsconfig.vite-config.json +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/dashboard/vite.config.ts +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/astrbot/long_term_memory.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/astrbot/metadata.yaml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/python_interpreter/main.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/python_interpreter/metadata.yaml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/python_interpreter/requirements.txt +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/python_interpreter/shared/api.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/reminder/main.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/reminder/metadata.yaml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/session_controller/main.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/session_controller/metadata.yaml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/thinking_filter/main.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/thinking_filter/metadata.yaml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/engines/__init__.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/engines/bing.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/engines/google.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/engines/sogo.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/main.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/packages/web_searcher/metadata.yaml +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/requirements.txt +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/samples/stt_health_check.wav +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/tests/test_dashboard.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/tests/test_main.py +0 -0
- {astrbot-3.5.25 → astrbot-3.5.27}/tests/test_pipeline.py +0 -0
- {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.
|
|
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
|

|
|
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
|
|
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
|

|
|
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
|
|
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",
|
|
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",
|
|
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"),
|
|
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.
|
|
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
|
-
|
|
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
|
"""
|
|
@@ -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/
|
|
28
|
-
# 其中reference_id为
|
|
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=
|
|
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
|