AstrBot 4.1.2__tar.gz → 4.1.4__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-4.1.2 → astrbot-4.1.4}/.github/workflows/code-format.yml +2 -2
- {astrbot-4.1.2 → astrbot-4.1.4}/PKG-INFO +1 -1
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/runners/tool_loop_agent_runner.py +1 -1
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/config/default.py +24 -1
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/respond/stage.py +103 -77
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/astrbot_message.py +23 -1
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +1 -0
- astrbot-4.1.4/changelogs/v4.1.3.md +8 -0
- astrbot-4.1.4/changelogs/v4.1.4.md +10 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ItemCard.vue +22 -9
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/core/common.json +2 -1
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/ProviderPage.vue +49 -13
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/astrbot/main.py +6 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/pyproject.toml +1 -1
- {astrbot-4.1.2 → astrbot-4.1.4}/.dockerignore +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/FUNDING.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/ISSUE_TEMPLATE/PLUGIN_PUBLISH.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/auto_assign.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/copilot-instructions.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/dependabot.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/workflows/auto_release.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/workflows/codeql.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/workflows/coverage_test.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/workflows/dashboard_ci.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/workflows/docker-image.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.github/workflows/stale.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.gitignore +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.pre-commit-config.yaml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/.python-version +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/CODE_OF_CONDUCT.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/Dockerfile +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/Dockerfile_with_node +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/LICENSE +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/README.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/README_en.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/README_ja.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/all.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/event/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/event/filter/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/message_components.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/platform/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/provider/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/star/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/api/util/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/__main__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/commands/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/commands/cmd_conf.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/commands/cmd_init.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/commands/cmd_plug.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/commands/cmd_run.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/utils/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/utils/basic.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/utils/plugin.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/cli/utils/version_comparator.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/agent.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/handoff.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/hooks.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/mcp_client.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/response.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/run_context.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/runners/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/runners/base.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/tool.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/agent/tool_executor.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/astr_agent_context.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/astrbot_config_mgr.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/config/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/config/astrbot_config.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/conversation_mgr.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/core_lifecycle.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/migration/helper.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/migration/migra_3_to_4.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/migration/shared_preferences_v3.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/migration/sqlite_v3.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/po.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/sqlite.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/vec_db/base.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/vec_db/faiss_impl/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/vec_db/faiss_impl/document_storage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/vec_db/faiss_impl/embedding_storage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/db/vec_db/faiss_impl/vec_db.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/event_bus.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/file_token_service.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/initial_loader.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/log.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/message/components.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/message/message_event_result.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/persona_mgr.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/content_safety_check/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/content_safety_check/strategies/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/content_safety_check/strategies/keywords.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/content_safety_check/strategies/strategy.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/context.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/context_utils.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/preprocess_stage/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/process_stage/method/llm_request.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/process_stage/method/star_request.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/process_stage/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/rate_limit_check/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/result_decorate/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/scheduler.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/session_status_check/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/waking_check/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/pipeline/whitelist_check/stage.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/astr_message_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/manager.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/message_session.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/message_type.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/platform.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/platform_metadata.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/register.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/dingtalk/dingtalk_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/discord/client.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/discord/components.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/discord/discord_platform_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/discord/discord_platform_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/lark/lark_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/lark/lark_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/satori/satori_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/satori/satori_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/slack/client.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/slack/slack_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/slack/slack_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/telegram/tg_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/telegram/tg_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/webchat/webchat_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/webchat/webchat_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/wecom/wecom_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/wecom/wecom_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/wecom/wecom_kf.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/wecom/wecom_kf_message.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/platform_message_history_mgr.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/entites.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/entities.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/func_tool_manager.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/manager.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/provider.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/register.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/anthropic_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/azure_tts_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/dashscope_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/dashscope_tts.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/dify_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/edge_tts_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/fishaudio_tts_api_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/gemini_embedding_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/gemini_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/gemini_tts_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/gsv_selfhosted_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/gsvi_tts_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/minimax_tts_api_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/openai_embedding_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/openai_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/openai_tts_api_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/sensevoice_selfhosted_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/vllm_rerank_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/volcengine_tts.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/whisper_api_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/whisper_selfhosted_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/provider/sources/zhipu_source.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/README.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/config.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/context.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/filter/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/filter/command.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/filter/command_group.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/filter/custom_filter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/filter/event_message_type.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/filter/permission.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/filter/platform_adapter_type.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/filter/regex.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/register/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/register/star.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/register/star_handler.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/session_llm_manager.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/session_plugin_manager.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/star.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/star_handler.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/star_manager.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/star_tools.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/star/updator.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/updator.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/astrbot_path.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/command_parser.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/dify_api_client.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/io.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/log_pipe.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/metrics.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/path_util.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/pip_installer.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/session_lock.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/session_waiter.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/shared_preferences.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/t2i/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/t2i/local_strategy.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/t2i/network_strategy.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/t2i/renderer.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/t2i/template/astrbot_powershell.html +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/t2i/template/base.html +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/t2i/template_manager.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/tencent_record_helper.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/utils/version_comparator.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/core/zip_updator.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/auth.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/chat.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/config.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/conversation.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/file.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/log.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/persona.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/plugin.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/route.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/session_management.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/stat.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/static_file.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/t2i.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/tools.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/routes/update.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/astrbot/dashboard/server.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.0.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.1.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.10.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.11.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.12.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.13.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.14.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.15.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.16.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.17.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.18.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.19.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.20.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.21.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.22.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.23.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.24.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.25.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.26.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.27.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.28.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.29.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.3.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.30.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.31.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.32.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.33.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.35.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.36.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.37.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.38.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.39.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.4.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.5.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.6.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.7.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.8.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.4.9.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.0.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.1.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.10.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.11.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.12.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.13.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.14.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.15.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.16.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.17.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.18.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.19.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.2.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.20.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.21.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.22.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.23.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.24.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.25.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.26.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.27.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.3.1.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.3.2.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.3.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.4.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.5.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.6.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.7.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.8.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v3.5.9.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v4.0.0-beta.3.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v4.0.0-beta.4.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v4.0.0-beta.5.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v4.0.0.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v4.1.0.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v4.1.1.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/changelogs/v4.1.2.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/compose.yml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/.gitignore +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/LICENSE +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/README.md +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/env.d.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/index.html +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/public/_redirects +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/public/favicon.svg +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/App.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/astrbot_banner.png +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/astrbot_logo_mini.webp +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/dingtalk.svg +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/discord.svg +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/kook.png +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/lark.png +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/qq.png +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/satori.png +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/slack.svg +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/telegram.svg +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/vocechat.png +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/wechat.png +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/assets/images/platform_logos/wecom.png +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/ConfirmDialog.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/chat/ProviderModelSelector.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/AstrBotConfig.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/AstrBotConfigV4.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ConsoleDisplayer.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ExtensionCard.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ItemCardGrid.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/KnowledgeBaseSelector.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/LanguageSwitcher.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ListConfigItem.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/Logo.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/MigrationDialog.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ObjectEditor.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/PersonaSelector.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/PluginSetSelector.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ProviderSelector.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ProxySelector.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/ReadmeDialog.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/T2ITemplateEditor.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/UiParentCard.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/components/shared/WaitingForRestart.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/config.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/composables.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/loader.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/core/actions.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/core/common.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/core/header.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/core/navigation.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/core/status.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/about.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/alkaid/index.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/alkaid/knowledge-base.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/alkaid/memory.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/auth.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/chart.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/chat.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/config.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/console.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/conversation.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/dashboard.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/extension.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/migration.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/persona.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/platform.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/provider.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/session-management.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/settings.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/features/tool-use.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/messages/errors.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/messages/success.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/en-US/messages/validation.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/core/actions.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/core/header.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/core/navigation.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/core/status.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/about.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/alkaid/index.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/alkaid/knowledge-base.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/alkaid/memory.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/auth.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/chart.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/chat.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/config.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/console.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/conversation.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/dashboard.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/extension.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/migration.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/persona.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/platform.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/provider.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/session-management.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/settings.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/features/tool-use.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/messages/errors.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/messages/success.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/locales/zh-CN/messages/validation.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/tools/index.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/translations.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/types.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/i18n/validator.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/layouts/blank/BlankLayout.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/layouts/full/FullLayout.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/layouts/full/vertical-sidebar/sidebarItem.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/main.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/plugins/confirmPlugin.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/plugins/vuetify.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/router/AuthRoutes.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/router/ChatBoxRoutes.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/router/MainRoutes.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/router/index.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/_override.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/_variables.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VButtons.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VCard.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VField.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VInput.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VNavigationDrawer.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VScrollbar.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VShadow.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VTabs.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/components/_VTextField.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/layout/_container.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/layout/_sidebar.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/pages/_dashboards.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/scss/style.scss +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/stores/auth.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/stores/common.js +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/stores/customizer.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/theme/DarkTheme.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/theme/LightTheme.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/types/themeTypes/ThemeType.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/types/vue3-print-nb.d.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/types/vue_tabler_icon.d.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/AboutPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/AlkaidPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/ChatBoxPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/ChatPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/ConfigPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/ConsolePage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/ConversationPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/ExtensionPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/PersonaPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/PlatformPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/SessionManagementPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/Settings.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/ToolUsePage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/alkaid/KnowledgeBase.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/alkaid/LongTermMemory.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/alkaid/Other.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/authentication/auth/LoginPage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/authentication/authForms/AuthLogin.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/dashboards/default/DefaultDashboard.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/dashboards/default/components/MemoryUsage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/dashboards/default/components/MessageStat.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/dashboards/default/components/OnlinePlatform.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/dashboards/default/components/OnlineTime.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/dashboards/default/components/PlatformStat.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/dashboards/default/components/RunningTime.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/src/views/dashboards/default/components/TotalMessage.vue +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/tsconfig.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/tsconfig.vite-config.json +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/dashboard/vite.config.ts +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/main.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/astrbot/long_term_memory.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/astrbot/metadata.yaml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/python_interpreter/main.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/python_interpreter/metadata.yaml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/python_interpreter/requirements.txt +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/python_interpreter/shared/api.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/reminder/main.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/reminder/metadata.yaml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/session_controller/main.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/session_controller/metadata.yaml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/thinking_filter/main.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/thinking_filter/metadata.yaml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/web_searcher/engines/__init__.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/web_searcher/engines/bing.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/web_searcher/engines/google.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/web_searcher/engines/sogo.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/web_searcher/main.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/packages/web_searcher/metadata.yaml +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/requirements.txt +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/samples/stt_health_check.wav +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/tests/test_dashboard.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/tests/test_main.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/tests/test_pipeline.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/tests/test_plugin_manager.py +0 -0
- {astrbot-4.1.2 → astrbot-4.1.4}/uv.lock +0 -0
|
@@ -258,7 +258,7 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
|
|
|
258
258
|
)
|
|
259
259
|
yield MessageChain(
|
|
260
260
|
type="tool_direct_result"
|
|
261
|
-
).base64_image(
|
|
261
|
+
).base64_image(resource.blob)
|
|
262
262
|
else:
|
|
263
263
|
tool_call_result_blocks.append(
|
|
264
264
|
ToolCallMessageSegment(
|
|
@@ -6,7 +6,7 @@ import os
|
|
|
6
6
|
|
|
7
7
|
from astrbot.core.utils.astrbot_path import get_astrbot_data_path
|
|
8
8
|
|
|
9
|
-
VERSION = "4.1.
|
|
9
|
+
VERSION = "4.1.4"
|
|
10
10
|
DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
|
|
11
11
|
|
|
12
12
|
# 默认配置
|
|
@@ -60,6 +60,7 @@ DEFAULT_CONFIG = {
|
|
|
60
60
|
"web_search_link": False,
|
|
61
61
|
"display_reasoning_text": False,
|
|
62
62
|
"identifier": False,
|
|
63
|
+
"group_name_display": False,
|
|
63
64
|
"datetime_system_prompt": True,
|
|
64
65
|
"default_personality": "default",
|
|
65
66
|
"persona_pool": ["*"],
|
|
@@ -1724,6 +1725,9 @@ CONFIG_METADATA_2 = {
|
|
|
1724
1725
|
"identifier": {
|
|
1725
1726
|
"type": "bool",
|
|
1726
1727
|
},
|
|
1728
|
+
"group_name_display": {
|
|
1729
|
+
"type": "bool",
|
|
1730
|
+
},
|
|
1727
1731
|
"datetime_system_prompt": {
|
|
1728
1732
|
"type": "bool",
|
|
1729
1733
|
},
|
|
@@ -1903,17 +1907,31 @@ CONFIG_METADATA_3 = {
|
|
|
1903
1907
|
"_special": "select_provider",
|
|
1904
1908
|
"hint": "留空代表不使用。可用于不支持视觉模态的聊天模型。",
|
|
1905
1909
|
},
|
|
1910
|
+
"provider_stt_settings.enable": {
|
|
1911
|
+
"description": "默认启用语音转文本",
|
|
1912
|
+
"type": "bool",
|
|
1913
|
+
},
|
|
1906
1914
|
"provider_stt_settings.provider_id": {
|
|
1907
1915
|
"description": "语音转文本模型",
|
|
1908
1916
|
"type": "string",
|
|
1909
1917
|
"hint": "留空代表不使用。",
|
|
1910
1918
|
"_special": "select_provider_stt",
|
|
1919
|
+
"condition": {
|
|
1920
|
+
"provider_stt_settings.enable": True,
|
|
1921
|
+
},
|
|
1922
|
+
},
|
|
1923
|
+
"provider_tts_settings.enable": {
|
|
1924
|
+
"description": "默认启用文本转语音",
|
|
1925
|
+
"type": "bool",
|
|
1911
1926
|
},
|
|
1912
1927
|
"provider_tts_settings.provider_id": {
|
|
1913
1928
|
"description": "文本转语音模型",
|
|
1914
1929
|
"type": "string",
|
|
1915
1930
|
"hint": "留空代表不使用。",
|
|
1916
1931
|
"_special": "select_provider_tts",
|
|
1932
|
+
"condition": {
|
|
1933
|
+
"provider_tts_settings.enable": True,
|
|
1934
|
+
},
|
|
1917
1935
|
},
|
|
1918
1936
|
"provider_settings.image_caption_prompt": {
|
|
1919
1937
|
"description": "图片转述提示词",
|
|
@@ -1983,6 +2001,11 @@ CONFIG_METADATA_3 = {
|
|
|
1983
2001
|
"description": "用户识别",
|
|
1984
2002
|
"type": "bool",
|
|
1985
2003
|
},
|
|
2004
|
+
"provider_settings.group_name_display": {
|
|
2005
|
+
"description": "显示群名称",
|
|
2006
|
+
"type": "bool",
|
|
2007
|
+
"hint": "启用后,在支持的平台(aiocqhttp)上会在 prompt 中包含群名称信息。",
|
|
2008
|
+
},
|
|
1986
2009
|
"provider_settings.datetime_system_prompt": {
|
|
1987
2010
|
"description": "现实世界时间感知",
|
|
1988
2011
|
"type": "bool",
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import random
|
|
2
2
|
import asyncio
|
|
3
3
|
import math
|
|
4
|
-
import traceback
|
|
5
4
|
import astrbot.core.message.components as Comp
|
|
6
5
|
from typing import Union, AsyncGenerator
|
|
7
6
|
from ..stage import register_stage, Stage
|
|
8
|
-
from ..context import PipelineContext
|
|
7
|
+
from ..context import PipelineContext, call_event_hook
|
|
9
8
|
from astrbot.core.platform.astr_message_event import AstrMessageEvent
|
|
10
9
|
from astrbot.core.message.message_event_result import MessageChain, ResultContentType
|
|
11
10
|
from astrbot.core import logger
|
|
12
|
-
from astrbot.core.message.
|
|
13
|
-
from astrbot.core.star.star_handler import
|
|
14
|
-
from astrbot.core.star.star import star_map
|
|
11
|
+
from astrbot.core.message.components import BaseMessageComponent, ComponentType
|
|
12
|
+
from astrbot.core.star.star_handler import EventType
|
|
15
13
|
from astrbot.core.utils.path_util import path_Mapping
|
|
16
14
|
from astrbot.core.utils.session_lock import session_lock_manager
|
|
17
15
|
|
|
@@ -114,6 +112,43 @@ class RespondStage(Stage):
|
|
|
114
112
|
# 如果所有组件都为空
|
|
115
113
|
return True
|
|
116
114
|
|
|
115
|
+
def is_seg_reply_required(self, event: AstrMessageEvent) -> bool:
|
|
116
|
+
"""检查是否需要分段回复"""
|
|
117
|
+
if not self.enable_seg:
|
|
118
|
+
return False
|
|
119
|
+
|
|
120
|
+
if self.only_llm_result and not event.get_result().is_llm_result():
|
|
121
|
+
return False
|
|
122
|
+
|
|
123
|
+
if event.get_platform_name() in [
|
|
124
|
+
"qq_official",
|
|
125
|
+
"weixin_official_account",
|
|
126
|
+
"dingtalk",
|
|
127
|
+
]:
|
|
128
|
+
return False
|
|
129
|
+
|
|
130
|
+
return True
|
|
131
|
+
|
|
132
|
+
def _extract_comp(
|
|
133
|
+
self,
|
|
134
|
+
raw_chain: list[BaseMessageComponent],
|
|
135
|
+
extract_types: set[ComponentType],
|
|
136
|
+
modify_raw_chain: bool = True,
|
|
137
|
+
):
|
|
138
|
+
extracted = []
|
|
139
|
+
if modify_raw_chain:
|
|
140
|
+
remaining = []
|
|
141
|
+
for comp in raw_chain:
|
|
142
|
+
if comp.type in extract_types:
|
|
143
|
+
extracted.append(comp)
|
|
144
|
+
else:
|
|
145
|
+
remaining.append(comp)
|
|
146
|
+
raw_chain[:] = remaining
|
|
147
|
+
else:
|
|
148
|
+
extracted = [comp for comp in raw_chain if comp.type in extract_types]
|
|
149
|
+
|
|
150
|
+
return extracted
|
|
151
|
+
|
|
117
152
|
async def process(
|
|
118
153
|
self, event: AstrMessageEvent
|
|
119
154
|
) -> Union[None, AsyncGenerator[None, None]]:
|
|
@@ -123,7 +158,14 @@ class RespondStage(Stage):
|
|
|
123
158
|
if result.result_content_type == ResultContentType.STREAMING_FINISH:
|
|
124
159
|
return
|
|
125
160
|
|
|
161
|
+
logger.info(
|
|
162
|
+
f"Prepare to send - {event.get_sender_name()}/{event.get_sender_id()}: {event._outline_chain(result.chain)}"
|
|
163
|
+
)
|
|
164
|
+
|
|
126
165
|
if result.result_content_type == ResultContentType.STREAMING_RESULT:
|
|
166
|
+
if result.async_stream is None:
|
|
167
|
+
logger.warning("async_stream 为空,跳过发送。")
|
|
168
|
+
return
|
|
127
169
|
# 流式结果直接交付平台适配器处理
|
|
128
170
|
use_fallback = self.config.get("provider_settings", {}).get(
|
|
129
171
|
"streaming_segmented", False
|
|
@@ -148,87 +190,71 @@ class RespondStage(Stage):
|
|
|
148
190
|
except Exception as e:
|
|
149
191
|
logger.warning(f"空内容检查异常: {e}")
|
|
150
192
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
(self.only_llm_result and result.is_llm_result())
|
|
160
|
-
or not self.only_llm_result
|
|
193
|
+
# 发送消息链
|
|
194
|
+
# Record 需要强制单独发送
|
|
195
|
+
need_separately = {ComponentType.Record}
|
|
196
|
+
if self.is_seg_reply_required(event):
|
|
197
|
+
header_comps = self._extract_comp(
|
|
198
|
+
result.chain,
|
|
199
|
+
{ComponentType.Reply, ComponentType.At},
|
|
200
|
+
modify_raw_chain=True,
|
|
161
201
|
)
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if isinstance(comp, Comp.At):
|
|
169
|
-
decorated_comps.append(comp)
|
|
170
|
-
result.chain.remove(comp)
|
|
171
|
-
break
|
|
172
|
-
if self.reply_with_quote:
|
|
173
|
-
for comp in result.chain:
|
|
174
|
-
if isinstance(comp, Comp.Reply):
|
|
175
|
-
decorated_comps.append(comp)
|
|
176
|
-
result.chain.remove(comp)
|
|
177
|
-
break
|
|
178
|
-
|
|
179
|
-
# leverage lock to guarentee the order of message sending among different events
|
|
202
|
+
if not result.chain or len(result.chain) == 0:
|
|
203
|
+
# may fix #2670
|
|
204
|
+
logger.warning(
|
|
205
|
+
f"实际消息链为空, 跳过发送阶段。header_chain: {header_comps}, actual_chain: {result.chain}"
|
|
206
|
+
)
|
|
207
|
+
return
|
|
180
208
|
async with session_lock_manager.acquire_lock(event.unified_msg_origin):
|
|
181
|
-
for
|
|
182
|
-
i = await self._calc_comp_interval(rcomp)
|
|
183
|
-
await asyncio.sleep(i)
|
|
184
|
-
try:
|
|
185
|
-
await event.send(MessageChain([rcomp]))
|
|
186
|
-
except Exception as e:
|
|
187
|
-
logger.error(f"发送消息失败: {e} chain: {result.chain}")
|
|
188
|
-
break
|
|
189
|
-
# 分段回复
|
|
190
|
-
for comp in non_record_comps:
|
|
209
|
+
for comp in result.chain:
|
|
191
210
|
i = await self._calc_comp_interval(comp)
|
|
192
211
|
await asyncio.sleep(i)
|
|
193
212
|
try:
|
|
194
|
-
|
|
195
|
-
|
|
213
|
+
if comp.type in need_separately:
|
|
214
|
+
await event.send(MessageChain([comp]))
|
|
215
|
+
else:
|
|
216
|
+
await event.send(MessageChain([*header_comps, comp]))
|
|
217
|
+
header_comps.clear()
|
|
196
218
|
except Exception as e:
|
|
197
|
-
logger.error(
|
|
198
|
-
|
|
219
|
+
logger.error(
|
|
220
|
+
f"发送消息链失败: chain = {MessageChain([comp])}, error = {e}",
|
|
221
|
+
exc_info=True,
|
|
222
|
+
)
|
|
199
223
|
else:
|
|
200
|
-
|
|
224
|
+
if all(
|
|
225
|
+
comp.type in {ComponentType.Reply, ComponentType.At}
|
|
226
|
+
for comp in result.chain
|
|
227
|
+
):
|
|
228
|
+
# may fix #2670
|
|
229
|
+
logger.warning(
|
|
230
|
+
f"消息链全为 Reply 和 At 消息段, 跳过发送阶段。chain: {result.chain}"
|
|
231
|
+
)
|
|
232
|
+
return
|
|
233
|
+
sep_comps = self._extract_comp(
|
|
234
|
+
result.chain,
|
|
235
|
+
need_separately,
|
|
236
|
+
modify_raw_chain=True,
|
|
237
|
+
)
|
|
238
|
+
for comp in sep_comps:
|
|
239
|
+
chain = MessageChain([comp])
|
|
201
240
|
try:
|
|
202
|
-
await event.send(
|
|
241
|
+
await event.send(chain)
|
|
203
242
|
except Exception as e:
|
|
204
|
-
logger.error(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
EventType.OnAfterMessageSentEvent, plugins_name=event.plugins_name
|
|
218
|
-
)
|
|
219
|
-
for handler in handlers:
|
|
220
|
-
try:
|
|
221
|
-
logger.debug(
|
|
222
|
-
f"hook(on_after_message_sent) -> {star_map[handler.handler_module_path].name} - {handler.handler_name}"
|
|
223
|
-
)
|
|
224
|
-
await handler.handler(event)
|
|
225
|
-
except BaseException:
|
|
226
|
-
logger.error(traceback.format_exc())
|
|
243
|
+
logger.error(
|
|
244
|
+
f"发送消息链失败: chain = {chain}, error = {e}",
|
|
245
|
+
exc_info=True,
|
|
246
|
+
)
|
|
247
|
+
chain = MessageChain(result.chain)
|
|
248
|
+
if result.chain and len(result.chain) > 0:
|
|
249
|
+
try:
|
|
250
|
+
await event.send(chain)
|
|
251
|
+
except Exception as e:
|
|
252
|
+
logger.error(
|
|
253
|
+
f"发送消息链失败: chain = {chain}, error = {e}",
|
|
254
|
+
exc_info=True,
|
|
255
|
+
)
|
|
227
256
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
f"{star_map[handler.handler_module_path].name} - {handler.handler_name} 终止了事件传播。"
|
|
231
|
-
)
|
|
232
|
-
return
|
|
257
|
+
if await call_event_hook(event, EventType.OnAfterMessageSentEvent):
|
|
258
|
+
return
|
|
233
259
|
|
|
234
260
|
event.clear_result()
|
|
@@ -55,7 +55,7 @@ class AstrBotMessage:
|
|
|
55
55
|
self_id: str # 机器人的识别id
|
|
56
56
|
session_id: str # 会话id。取决于 unique_session 的设置。
|
|
57
57
|
message_id: str # 消息id
|
|
58
|
-
|
|
58
|
+
group: Group # 群组
|
|
59
59
|
sender: MessageMember # 发送者
|
|
60
60
|
message: List[BaseMessageComponent] # 消息链使用 Nakuru 的消息链格式
|
|
61
61
|
message_str: str # 最直观的纯文本消息字符串
|
|
@@ -64,6 +64,28 @@ class AstrBotMessage:
|
|
|
64
64
|
|
|
65
65
|
def __init__(self) -> None:
|
|
66
66
|
self.timestamp = int(time.time())
|
|
67
|
+
self.group = None
|
|
67
68
|
|
|
68
69
|
def __str__(self) -> str:
|
|
69
70
|
return str(self.__dict__)
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def group_id(self) -> str:
|
|
74
|
+
"""
|
|
75
|
+
向后兼容的 group_id 属性
|
|
76
|
+
群组id,如果为私聊,则为空
|
|
77
|
+
"""
|
|
78
|
+
if self.group:
|
|
79
|
+
return self.group.group_id
|
|
80
|
+
return ""
|
|
81
|
+
|
|
82
|
+
@group_id.setter
|
|
83
|
+
def group_id(self, value: str):
|
|
84
|
+
"""设置 group_id"""
|
|
85
|
+
if value:
|
|
86
|
+
if self.group:
|
|
87
|
+
self.group.group_id = value
|
|
88
|
+
else:
|
|
89
|
+
self.group = Group(group_id=value)
|
|
90
|
+
else:
|
|
91
|
+
self.group = None
|
|
@@ -187,6 +187,7 @@ class AiocqhttpAdapter(Platform):
|
|
|
187
187
|
if event["message_type"] == "group":
|
|
188
188
|
abm.type = MessageType.GROUP_MESSAGE
|
|
189
189
|
abm.group_id = str(event.group_id)
|
|
190
|
+
abm.group.group_name = event.get("group_name", "N/A")
|
|
190
191
|
elif event["message_type"] == "private":
|
|
191
192
|
abm.type = MessageType.FRIEND_MESSAGE
|
|
192
193
|
if self.unique_session and abm.type == MessageType.GROUP_MESSAGE:
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# What's Changed
|
|
2
|
+
|
|
3
|
+
0. ‼️ fix: 修复 4.0.0 版本之后,配置默认 TTS 或者 STT 模型之后仍无法生效的问题 ([#2758](https://github.com/Soulter/AstrBot/issues/2758))
|
|
4
|
+
1. ‼️ fix: 修复分段回复时,引用消息单独发送导致第一条消息内容为空的问题 ([#2757](https://github.com/Soulter/AstrBot/issues/2757))
|
|
5
|
+
2. feat: 支持在 WebUI 复制提供商配置以简化操作 ([#2767](https://github.com/Soulter/AstrBot/issues/2767))
|
|
6
|
+
3. fix: handle image value correctly for mcp BlobResourceContents ([#2753](https://github.com/Soulter/AstrBot/issues/2753))
|
|
7
|
+
4. feat: 增加 QQ 群名称识别到 system prompt, 并提供相应的配置 ([#2770](https://github.com/Soulter/AstrBot/issues/2770))
|
|
8
|
+
5. fix: parameter type/default handling in CommandFilter
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# What's Changed
|
|
2
|
+
|
|
3
|
+
0. ‼️ fix: 修复 4.0.0 版本之后,配置默认 TTS 或者 STT 模型之后仍无法生效的问题 ([#2758](https://github.com/Soulter/AstrBot/issues/2758))
|
|
4
|
+
1. ‼️ fix: 修复分段回复时,引用消息单独发送导致第一条消息内容为空的问题 ([#2757](https://github.com/Soulter/AstrBot/issues/2757))
|
|
5
|
+
2. feat: 支持在 WebUI 复制提供商配置以简化操作 ([#2767](https://github.com/Soulter/AstrBot/issues/2767))
|
|
6
|
+
3. fix: handle image value correctly for mcp BlobResourceContents ([#2753](https://github.com/Soulter/AstrBot/issues/2753))
|
|
7
|
+
4. feat: 增加 QQ 群名称识别到 system prompt, 并提供相应的配置 ([#2770](https://github.com/Soulter/AstrBot/issues/2770))
|
|
8
|
+
5. fix: 修复 4.1.3 的异常问题
|
|
9
|
+
|
|
10
|
+
**总之上个版本有很严重的 bug 赶快更新!**
|
|
@@ -4,28 +4,28 @@
|
|
|
4
4
|
<span class="text-h2 text-truncate" :title="getItemTitle()">{{ getItemTitle() }}</span>
|
|
5
5
|
<v-tooltip location="top">
|
|
6
6
|
<template v-slot:activator="{ props }">
|
|
7
|
-
<v-switch
|
|
8
|
-
color="primary"
|
|
9
|
-
hide-details
|
|
10
|
-
density="compact"
|
|
7
|
+
<v-switch
|
|
8
|
+
color="primary"
|
|
9
|
+
hide-details
|
|
10
|
+
density="compact"
|
|
11
11
|
:model-value="getItemEnabled()"
|
|
12
12
|
:loading="loading"
|
|
13
13
|
:disabled="loading"
|
|
14
|
-
v-bind="props"
|
|
14
|
+
v-bind="props"
|
|
15
15
|
@update:model-value="toggleEnabled"
|
|
16
16
|
></v-switch>
|
|
17
17
|
</template>
|
|
18
18
|
<span>{{ getItemEnabled() ? t('core.common.itemCard.enabled') : t('core.common.itemCard.disabled') }}</span>
|
|
19
19
|
</v-tooltip>
|
|
20
20
|
</v-card-title>
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
<v-card-text>
|
|
23
23
|
<slot name="item-details" :item="item"></slot>
|
|
24
24
|
</v-card-text>
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
<v-card-actions style="margin: 8px;">
|
|
27
27
|
<v-btn
|
|
28
|
-
variant="outlined"
|
|
28
|
+
variant="outlined"
|
|
29
29
|
color="error"
|
|
30
30
|
rounded="xl"
|
|
31
31
|
@click="$emit('delete', item)"
|
|
@@ -40,6 +40,15 @@
|
|
|
40
40
|
>
|
|
41
41
|
{{ t('core.common.itemCard.edit') }}
|
|
42
42
|
</v-btn>
|
|
43
|
+
<v-btn
|
|
44
|
+
v-if="showCopyButton"
|
|
45
|
+
variant="tonal"
|
|
46
|
+
color="secondary"
|
|
47
|
+
rounded="xl"
|
|
48
|
+
@click="$emit('copy', item)"
|
|
49
|
+
>
|
|
50
|
+
{{ t('core.common.itemCard.copy') }}
|
|
51
|
+
</v-btn>
|
|
43
52
|
<v-spacer></v-spacer>
|
|
44
53
|
</v-card-actions>
|
|
45
54
|
|
|
@@ -83,9 +92,13 @@ export default {
|
|
|
83
92
|
loading: {
|
|
84
93
|
type: Boolean,
|
|
85
94
|
default: false
|
|
95
|
+
},
|
|
96
|
+
showCopyButton: {
|
|
97
|
+
type: Boolean,
|
|
98
|
+
default: false
|
|
86
99
|
}
|
|
87
100
|
},
|
|
88
|
-
emits: ['toggle-enabled', 'delete', 'edit'],
|
|
101
|
+
emits: ['toggle-enabled', 'delete', 'edit', 'copy'],
|
|
89
102
|
methods: {
|
|
90
103
|
getItemTitle() {
|
|
91
104
|
return this.item[this.titleField];
|
|
@@ -56,14 +56,16 @@
|
|
|
56
56
|
|
|
57
57
|
<v-row v-else>
|
|
58
58
|
<v-col v-for="(provider, index) in filteredProviders" :key="index" cols="12" md="6" lg="4" xl="3">
|
|
59
|
-
<item-card
|
|
60
|
-
:item="provider"
|
|
61
|
-
title-field="id"
|
|
59
|
+
<item-card
|
|
60
|
+
:item="provider"
|
|
61
|
+
title-field="id"
|
|
62
62
|
enabled-field="enable"
|
|
63
63
|
@toggle-enabled="providerStatusChange"
|
|
64
64
|
:bglogo="getProviderIcon(provider.provider)"
|
|
65
|
-
@delete="deleteProvider"
|
|
66
|
-
@edit="configExistingProvider"
|
|
65
|
+
@delete="deleteProvider"
|
|
66
|
+
@edit="configExistingProvider"
|
|
67
|
+
@copy="copyProvider"
|
|
68
|
+
:show-copy-button="true">
|
|
67
69
|
<template v-slot:details="{ item }">
|
|
68
70
|
</template>
|
|
69
71
|
</item-card>
|
|
@@ -95,7 +97,7 @@
|
|
|
95
97
|
<v-alert v-if="providerStatuses.length === 0" type="info" variant="tonal">
|
|
96
98
|
{{ tm('availability.noData') }}
|
|
97
99
|
</v-alert>
|
|
98
|
-
|
|
100
|
+
|
|
99
101
|
<v-container v-else class="pa-0">
|
|
100
102
|
<v-row>
|
|
101
103
|
<v-col v-for="status in providerStatuses" :key="status.id" cols="12" sm="6" md="4">
|
|
@@ -113,7 +115,7 @@
|
|
|
113
115
|
></v-progress-circular>
|
|
114
116
|
|
|
115
117
|
<span class="font-weight-bold">{{ status.id }}</span>
|
|
116
|
-
|
|
118
|
+
|
|
117
119
|
<v-chip :color="getStatusColor(status.status)" size="small" class="ml-2">
|
|
118
120
|
{{ getStatusText(status.status) }}
|
|
119
121
|
</v-chip>
|
|
@@ -348,10 +350,10 @@ export default {
|
|
|
348
350
|
save_message_success: "success",
|
|
349
351
|
|
|
350
352
|
showConsole: false,
|
|
351
|
-
|
|
353
|
+
|
|
352
354
|
// 显示状态部分
|
|
353
355
|
showStatus: false,
|
|
354
|
-
|
|
356
|
+
|
|
355
357
|
// 供应商状态相关
|
|
356
358
|
providerStatuses: [],
|
|
357
359
|
loadingStatus: false,
|
|
@@ -437,7 +439,7 @@ export default {
|
|
|
437
439
|
}
|
|
438
440
|
};
|
|
439
441
|
},
|
|
440
|
-
|
|
442
|
+
|
|
441
443
|
// 根据选择的标签过滤提供商列表
|
|
442
444
|
filteredProviders() {
|
|
443
445
|
if (!this.config_data.provider || this.activeProviderTypeTab === 'all') {
|
|
@@ -449,7 +451,7 @@ export default {
|
|
|
449
451
|
if (provider.provider_type) {
|
|
450
452
|
return provider.provider_type === this.activeProviderTypeTab;
|
|
451
453
|
}
|
|
452
|
-
|
|
454
|
+
|
|
453
455
|
// 否则使用映射关系
|
|
454
456
|
const mappedType = this.oldVersionProviderTypeMapping[provider.type];
|
|
455
457
|
return mappedType === this.activeProviderTypeTab;
|
|
@@ -657,6 +659,40 @@ export default {
|
|
|
657
659
|
}
|
|
658
660
|
},
|
|
659
661
|
|
|
662
|
+
async copyProvider(providerToCopy) {
|
|
663
|
+
console.log('copyProvider triggered for:', providerToCopy);
|
|
664
|
+
// 1. 创建深拷贝
|
|
665
|
+
const newProviderConfig = JSON.parse(JSON.stringify(providerToCopy));
|
|
666
|
+
|
|
667
|
+
// 2. 生成唯一的 ID
|
|
668
|
+
const generateUniqueId = (baseId) => {
|
|
669
|
+
let newId = `${baseId}_copy`;
|
|
670
|
+
let counter = 1;
|
|
671
|
+
const existingIds = this.config_data.provider.map(p => p.id);
|
|
672
|
+
while (existingIds.includes(newId)) {
|
|
673
|
+
newId = `${baseId}_copy_${counter}`;
|
|
674
|
+
counter++;
|
|
675
|
+
}
|
|
676
|
+
return newId;
|
|
677
|
+
};
|
|
678
|
+
newProviderConfig.id = generateUniqueId(providerToCopy.id);
|
|
679
|
+
|
|
680
|
+
// 3. 设置为禁用状态,等待用户手动开启
|
|
681
|
+
newProviderConfig.enable = false;
|
|
682
|
+
|
|
683
|
+
this.loading = true;
|
|
684
|
+
try {
|
|
685
|
+
// 4. 调用后端接口创建
|
|
686
|
+
const res = await axios.post('/api/config/provider/new', newProviderConfig);
|
|
687
|
+
this.showSuccess(res.data.message || `成功复制并创建了 ${newProviderConfig.id}`);
|
|
688
|
+
this.getConfig(); // 5. 刷新列表
|
|
689
|
+
} catch (err) {
|
|
690
|
+
this.showError(err.response?.data?.message || err.message);
|
|
691
|
+
} finally {
|
|
692
|
+
this.loading = false;
|
|
693
|
+
}
|
|
694
|
+
},
|
|
695
|
+
|
|
660
696
|
deleteProvider(provider) {
|
|
661
697
|
if (confirm(this.tm('messages.confirm.delete', { id: provider.id }))) {
|
|
662
698
|
axios.post('/api/config/provider/delete', { id: provider.id }).then((res) => {
|
|
@@ -694,14 +730,14 @@ export default {
|
|
|
694
730
|
this.save_message_success = "error";
|
|
695
731
|
this.save_message_snack = true;
|
|
696
732
|
},
|
|
697
|
-
|
|
733
|
+
|
|
698
734
|
// 获取供应商状态
|
|
699
735
|
async fetchProviderStatus() {
|
|
700
736
|
if (this.loadingStatus) return;
|
|
701
737
|
|
|
702
738
|
this.loadingStatus = true;
|
|
703
739
|
this.showStatus = true; // 自动展开状态部分
|
|
704
|
-
|
|
740
|
+
|
|
705
741
|
// 1. 立即初始化UI为pending状态
|
|
706
742
|
this.providerStatuses = this.config_data.provider.map(p => ({
|
|
707
743
|
id: p.id,
|
|
@@ -1214,6 +1214,12 @@ UID: {user_id} 此 ID 可用于设置管理员。
|
|
|
1214
1214
|
user_info = f"\n[User ID: {user_id}, Nickname: {user_nickname}]\n"
|
|
1215
1215
|
req.prompt = user_info + req.prompt
|
|
1216
1216
|
|
|
1217
|
+
if cfg.get("group_name_display") and event.message_obj.group_id:
|
|
1218
|
+
group_name = event.message_obj.group.group_name
|
|
1219
|
+
|
|
1220
|
+
if group_name:
|
|
1221
|
+
req.system_prompt += f"\nGroup name: {group_name}\n"
|
|
1222
|
+
|
|
1217
1223
|
# 启用附加时间戳
|
|
1218
1224
|
if cfg.get("datetime_system_prompt"):
|
|
1219
1225
|
current_time = None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|