AstrBot 4.1.0__py3-none-any.whl → 4.1.2__py3-none-any.whl
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/cli/utils/plugin.py +22 -18
- astrbot/core/agent/response.py +1 -0
- astrbot/core/agent/run_context.py +1 -0
- astrbot/core/config/default.py +11 -11
- astrbot/core/db/migration/helper.py +1 -1
- astrbot/core/db/migration/shared_preferences_v3.py +2 -0
- astrbot/core/db/migration/sqlite_v3.py +2 -1
- astrbot/core/db/vec_db/faiss_impl/__init__.py +1 -1
- astrbot/core/db/vec_db/faiss_impl/vec_db.py +2 -1
- astrbot/core/pipeline/context_utils.py +1 -1
- astrbot/core/platform/astr_message_event.py +1 -1
- astrbot/core/platform/manager.py +9 -9
- astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +3 -1
- astrbot/core/platform/sources/dingtalk/dingtalk_event.py +2 -2
- astrbot/core/platform/sources/discord/client.py +2 -2
- astrbot/core/platform/sources/discord/components.py +3 -1
- astrbot/core/platform/sources/discord/discord_platform_event.py +8 -3
- astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +36 -30
- astrbot/core/platform/sources/slack/slack_adapter.py +3 -1
- astrbot/core/platform/sources/slack/slack_event.py +7 -1
- astrbot/core/platform/sources/telegram/tg_event.py +3 -1
- astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +2 -0
- astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +8 -4
- astrbot/core/platform/sources/wecom/wecom_kf.py +15 -4
- astrbot/core/platform/sources/wecom/wecom_kf_message.py +27 -6
- astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +3 -1
- astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +0 -1
- astrbot/core/provider/entities.py +1 -0
- astrbot/core/provider/manager.py +5 -1
- astrbot/core/provider/sources/fishaudio_tts_api_source.py +1 -1
- astrbot/core/provider/sources/openai_source.py +2 -0
- astrbot/core/star/filter/command.py +3 -9
- astrbot/core/star/filter/command_group.py +1 -2
- astrbot/core/star/session_plugin_manager.py +4 -1
- astrbot/core/star/star_manager.py +2 -2
- astrbot/core/star/star_tools.py +22 -8
- astrbot/dashboard/routes/config.py +0 -1
- astrbot/dashboard/routes/log.py +12 -4
- astrbot/dashboard/routes/route.py +0 -1
- astrbot/dashboard/routes/tools.py +0 -1
- {astrbot-4.1.0.dist-info → astrbot-4.1.2.dist-info}/METADATA +1 -1
- {astrbot-4.1.0.dist-info → astrbot-4.1.2.dist-info}/RECORD +45 -45
- {astrbot-4.1.0.dist-info → astrbot-4.1.2.dist-info}/WHEEL +0 -0
- {astrbot-4.1.0.dist-info → astrbot-4.1.2.dist-info}/entry_points.txt +0 -0
- {astrbot-4.1.0.dist-info → astrbot-4.1.2.dist-info}/licenses/LICENSE +0 -0
astrbot/cli/utils/plugin.py
CHANGED
|
@@ -124,15 +124,17 @@ def build_plug_list(plugins_dir: Path) -> list:
|
|
|
124
124
|
if metadata and all(
|
|
125
125
|
k in metadata for k in ["name", "desc", "version", "author", "repo"]
|
|
126
126
|
):
|
|
127
|
-
result.append(
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
127
|
+
result.append(
|
|
128
|
+
{
|
|
129
|
+
"name": str(metadata.get("name", "")),
|
|
130
|
+
"desc": str(metadata.get("desc", "")),
|
|
131
|
+
"version": str(metadata.get("version", "")),
|
|
132
|
+
"author": str(metadata.get("author", "")),
|
|
133
|
+
"repo": str(metadata.get("repo", "")),
|
|
134
|
+
"status": PluginStatus.INSTALLED,
|
|
135
|
+
"local_path": str(plugin_dir),
|
|
136
|
+
}
|
|
137
|
+
)
|
|
136
138
|
|
|
137
139
|
# 获取在线插件列表
|
|
138
140
|
online_plugins = []
|
|
@@ -142,15 +144,17 @@ def build_plug_list(plugins_dir: Path) -> list:
|
|
|
142
144
|
resp.raise_for_status()
|
|
143
145
|
data = resp.json()
|
|
144
146
|
for plugin_id, plugin_info in data.items():
|
|
145
|
-
online_plugins.append(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
147
|
+
online_plugins.append(
|
|
148
|
+
{
|
|
149
|
+
"name": str(plugin_id),
|
|
150
|
+
"desc": str(plugin_info.get("desc", "")),
|
|
151
|
+
"version": str(plugin_info.get("version", "")),
|
|
152
|
+
"author": str(plugin_info.get("author", "")),
|
|
153
|
+
"repo": str(plugin_info.get("repo", "")),
|
|
154
|
+
"status": PluginStatus.NOT_INSTALLED,
|
|
155
|
+
"local_path": None,
|
|
156
|
+
}
|
|
157
|
+
)
|
|
154
158
|
except Exception as e:
|
|
155
159
|
click.echo(f"获取在线插件列表失败: {e}", err=True)
|
|
156
160
|
|
astrbot/core/agent/response.py
CHANGED
astrbot/core/config/default.py
CHANGED
|
@@ -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.2"
|
|
10
10
|
DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
|
|
11
11
|
|
|
12
12
|
# 默认配置
|
|
@@ -2130,41 +2130,41 @@ CONFIG_METADATA_3 = {
|
|
|
2130
2130
|
"description": "内容安全",
|
|
2131
2131
|
"type": "object",
|
|
2132
2132
|
"items": {
|
|
2133
|
-
"
|
|
2133
|
+
"content_safety.also_use_in_response": {
|
|
2134
2134
|
"description": "同时检查模型的响应内容",
|
|
2135
2135
|
"type": "bool",
|
|
2136
2136
|
},
|
|
2137
|
-
"
|
|
2137
|
+
"content_safety.baidu_aip.enable": {
|
|
2138
2138
|
"description": "使用百度内容安全审核",
|
|
2139
2139
|
"type": "bool",
|
|
2140
2140
|
"hint": "您需要手动安装 baidu-aip 库。",
|
|
2141
2141
|
},
|
|
2142
|
-
"
|
|
2142
|
+
"content_safety.baidu_aip.app_id": {
|
|
2143
2143
|
"description": "App ID",
|
|
2144
2144
|
"type": "string",
|
|
2145
2145
|
"condition": {
|
|
2146
|
-
"
|
|
2146
|
+
"content_safety.baidu_aip.enable": True,
|
|
2147
2147
|
},
|
|
2148
2148
|
},
|
|
2149
|
-
"
|
|
2149
|
+
"content_safety.baidu_aip.api_key": {
|
|
2150
2150
|
"description": "API Key",
|
|
2151
2151
|
"type": "string",
|
|
2152
2152
|
"condition": {
|
|
2153
|
-
"
|
|
2153
|
+
"content_safety.baidu_aip.enable": True,
|
|
2154
2154
|
},
|
|
2155
2155
|
},
|
|
2156
|
-
"
|
|
2156
|
+
"content_safety.baidu_aip.secret_key": {
|
|
2157
2157
|
"description": "Secret Key",
|
|
2158
2158
|
"type": "string",
|
|
2159
2159
|
"condition": {
|
|
2160
|
-
"
|
|
2160
|
+
"content_safety.baidu_aip.enable": True,
|
|
2161
2161
|
},
|
|
2162
2162
|
},
|
|
2163
|
-
"
|
|
2163
|
+
"content_safety.internal_keywords.enable": {
|
|
2164
2164
|
"description": "关键词检查",
|
|
2165
2165
|
"type": "bool",
|
|
2166
2166
|
},
|
|
2167
|
-
"
|
|
2167
|
+
"content_safety.internal_keywords.extra_keywords": {
|
|
2168
2168
|
"description": "额外关键词",
|
|
2169
2169
|
"type": "list",
|
|
2170
2170
|
"items": {"type": "string"},
|
|
@@ -53,7 +53,7 @@ async def do_migration_v4(
|
|
|
53
53
|
await migration_webchat_data(db_helper, platform_id_map)
|
|
54
54
|
|
|
55
55
|
# 执行偏好设置迁移
|
|
56
|
-
await migration_preferences(db_helper,platform_id_map)
|
|
56
|
+
await migration_preferences(db_helper, platform_id_map)
|
|
57
57
|
|
|
58
58
|
# 执行平台统计表迁移
|
|
59
59
|
await migration_platform_table(db_helper, platform_id_map)
|
|
@@ -5,6 +5,7 @@ from astrbot.core.utils.astrbot_path import get_astrbot_data_path
|
|
|
5
5
|
|
|
6
6
|
_VT = TypeVar("_VT")
|
|
7
7
|
|
|
8
|
+
|
|
8
9
|
class SharedPreferences:
|
|
9
10
|
def __init__(self, path=None):
|
|
10
11
|
if path is None:
|
|
@@ -42,4 +43,5 @@ class SharedPreferences:
|
|
|
42
43
|
self._data.clear()
|
|
43
44
|
self._save_preferences()
|
|
44
45
|
|
|
46
|
+
|
|
45
47
|
sp = SharedPreferences()
|
|
@@ -4,6 +4,7 @@ from astrbot.core.db.po import Platform, Stats
|
|
|
4
4
|
from typing import Tuple, List, Dict, Any
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
|
|
7
|
+
|
|
7
8
|
@dataclass
|
|
8
9
|
class Conversation:
|
|
9
10
|
"""LLM 对话存储
|
|
@@ -76,7 +77,7 @@ PRAGMA encoding = 'UTF-8';
|
|
|
76
77
|
"""
|
|
77
78
|
|
|
78
79
|
|
|
79
|
-
class SQLiteDatabase
|
|
80
|
+
class SQLiteDatabase:
|
|
80
81
|
def __init__(self, db_path: str) -> None:
|
|
81
82
|
super().__init__()
|
|
82
83
|
self.db_path = db_path
|
|
@@ -113,7 +113,8 @@ class FaissVecDB(BaseVecDB):
|
|
|
113
113
|
reranked_results, key=lambda x: x.relevance_score, reverse=True
|
|
114
114
|
)
|
|
115
115
|
top_k_results = [
|
|
116
|
-
top_k_results[reranked_result.index]
|
|
116
|
+
top_k_results[reranked_result.index]
|
|
117
|
+
for reranked_result in reranked_results
|
|
117
118
|
]
|
|
118
119
|
|
|
119
120
|
return top_k_results
|
|
@@ -24,7 +24,7 @@ from astrbot.core.provider.entities import ProviderRequest
|
|
|
24
24
|
from astrbot.core.utils.metrics import Metric
|
|
25
25
|
from .astrbot_message import AstrBotMessage, Group
|
|
26
26
|
from .platform_metadata import PlatformMetadata
|
|
27
|
-
from .message_session import MessageSession, MessageSesion
|
|
27
|
+
from .message_session import MessageSession, MessageSesion # noqa
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class AstrMessageEvent(abc.ABC):
|
astrbot/core/platform/manager.py
CHANGED
|
@@ -68,23 +68,23 @@ class PlatformManager:
|
|
|
68
68
|
)
|
|
69
69
|
case "lark":
|
|
70
70
|
from .sources.lark.lark_adapter import (
|
|
71
|
-
LarkPlatformAdapter,
|
|
72
|
-
)
|
|
71
|
+
LarkPlatformAdapter, # noqa: F401
|
|
72
|
+
)
|
|
73
73
|
case "dingtalk":
|
|
74
74
|
from .sources.dingtalk.dingtalk_adapter import (
|
|
75
75
|
DingtalkPlatformAdapter, # noqa: F401
|
|
76
76
|
)
|
|
77
77
|
case "telegram":
|
|
78
78
|
from .sources.telegram.tg_adapter import (
|
|
79
|
-
TelegramPlatformAdapter,
|
|
80
|
-
)
|
|
79
|
+
TelegramPlatformAdapter, # noqa: F401
|
|
80
|
+
)
|
|
81
81
|
case "wecom":
|
|
82
82
|
from .sources.wecom.wecom_adapter import (
|
|
83
|
-
WecomPlatformAdapter,
|
|
84
|
-
)
|
|
83
|
+
WecomPlatformAdapter, # noqa: F401
|
|
84
|
+
)
|
|
85
85
|
case "weixin_official_account":
|
|
86
86
|
from .sources.weixin_official_account.weixin_offacc_adapter import (
|
|
87
|
-
WeixinOfficialAccountPlatformAdapter, # noqa
|
|
87
|
+
WeixinOfficialAccountPlatformAdapter, # noqa: F401
|
|
88
88
|
)
|
|
89
89
|
case "discord":
|
|
90
90
|
from .sources.discord.discord_platform_adapter import (
|
|
@@ -94,8 +94,8 @@ class PlatformManager:
|
|
|
94
94
|
from .sources.slack.slack_adapter import SlackAdapter # noqa: F401
|
|
95
95
|
case "satori":
|
|
96
96
|
from .sources.satori.satori_adapter import (
|
|
97
|
-
SatoriPlatformAdapter,
|
|
98
|
-
)
|
|
97
|
+
SatoriPlatformAdapter, # noqa: F401
|
|
98
|
+
)
|
|
99
99
|
except (ImportError, ModuleNotFoundError) as e:
|
|
100
100
|
logger.error(
|
|
101
101
|
f"加载平台适配器 {platform_config['type']} 失败,原因:{e}。请检查依赖库是否安装。提示:可以在 管理面板->控制台->安装Pip库 中安装依赖库。"
|
|
@@ -321,7 +321,9 @@ class AiocqhttpAdapter(Platform):
|
|
|
321
321
|
user_id=int(m["data"]["qq"]),
|
|
322
322
|
no_cache=False,
|
|
323
323
|
)
|
|
324
|
-
nickname = at_info.get("nick", "") or at_info.get(
|
|
324
|
+
nickname = at_info.get("nick", "") or at_info.get(
|
|
325
|
+
"nickname", ""
|
|
326
|
+
)
|
|
325
327
|
is_at_self = str(m["data"]["qq"]) in {abm.self_id, "all"}
|
|
326
328
|
|
|
327
329
|
abm.message.append(
|
|
@@ -54,9 +54,9 @@ class DingtalkMessageEvent(AstrMessageEvent):
|
|
|
54
54
|
logger.debug(f"send image: {ret}")
|
|
55
55
|
|
|
56
56
|
except Exception as e:
|
|
57
|
-
logger.
|
|
58
|
-
logger.warning(f"跳过图片发送: {image_path}")
|
|
57
|
+
logger.warning(f"钉钉图片处理失败: {e}, 跳过图片发送")
|
|
59
58
|
continue
|
|
59
|
+
|
|
60
60
|
async def send(self, message: MessageChain):
|
|
61
61
|
await self.send_with_client(self.client, message)
|
|
62
62
|
await super().send(message)
|
|
@@ -41,7 +41,8 @@ class DiscordBotClient(discord.Bot):
|
|
|
41
41
|
await self.on_ready_once_callback()
|
|
42
42
|
except Exception as e:
|
|
43
43
|
logger.error(
|
|
44
|
-
f"[Discord] on_ready_once_callback 执行失败: {e}", exc_info=True
|
|
44
|
+
f"[Discord] on_ready_once_callback 执行失败: {e}", exc_info=True
|
|
45
|
+
)
|
|
45
46
|
|
|
46
47
|
def _create_message_data(self, message: discord.Message) -> dict:
|
|
47
48
|
"""从 discord.Message 创建数据字典"""
|
|
@@ -90,7 +91,6 @@ class DiscordBotClient(discord.Bot):
|
|
|
90
91
|
message_data = self._create_message_data(message)
|
|
91
92
|
await self.on_message_received(message_data)
|
|
92
93
|
|
|
93
|
-
|
|
94
94
|
def _extract_interaction_content(self, interaction: discord.Interaction) -> str:
|
|
95
95
|
"""从交互中提取内容"""
|
|
96
96
|
interaction_type = interaction.type
|
|
@@ -79,9 +79,12 @@ class DiscordButton(BaseMessageComponent):
|
|
|
79
79
|
self.url = url
|
|
80
80
|
self.disabled = disabled
|
|
81
81
|
|
|
82
|
+
|
|
82
83
|
class DiscordReference(BaseMessageComponent):
|
|
83
84
|
"""Discord引用组件"""
|
|
85
|
+
|
|
84
86
|
type: str = "discord_reference"
|
|
87
|
+
|
|
85
88
|
def __init__(self, message_id: str, channel_id: str):
|
|
86
89
|
self.message_id = message_id
|
|
87
90
|
self.channel_id = channel_id
|
|
@@ -98,7 +101,6 @@ class DiscordView(BaseMessageComponent):
|
|
|
98
101
|
self.components = components or []
|
|
99
102
|
self.timeout = timeout
|
|
100
103
|
|
|
101
|
-
|
|
102
104
|
def to_discord_view(self) -> discord.ui.View:
|
|
103
105
|
"""转换为Discord View对象"""
|
|
104
106
|
view = discord.ui.View(timeout=self.timeout)
|
|
@@ -53,7 +53,13 @@ class DiscordPlatformEvent(AstrMessageEvent):
|
|
|
53
53
|
|
|
54
54
|
# 解析消息链为 Discord 所需的对象
|
|
55
55
|
try:
|
|
56
|
-
|
|
56
|
+
(
|
|
57
|
+
content,
|
|
58
|
+
files,
|
|
59
|
+
view,
|
|
60
|
+
embeds,
|
|
61
|
+
reference_message_id,
|
|
62
|
+
) = await self._parse_to_discord(message)
|
|
57
63
|
except Exception as e:
|
|
58
64
|
logger.error(f"[Discord] 解析消息链时失败: {e}", exc_info=True)
|
|
59
65
|
return
|
|
@@ -206,8 +212,7 @@ class DiscordPlatformEvent(AstrMessageEvent):
|
|
|
206
212
|
if await asyncio.to_thread(path.exists):
|
|
207
213
|
file_bytes = await asyncio.to_thread(path.read_bytes)
|
|
208
214
|
files.append(
|
|
209
|
-
discord.File(BytesIO(file_bytes),
|
|
210
|
-
filename=i.name)
|
|
215
|
+
discord.File(BytesIO(file_bytes), filename=i.name)
|
|
211
216
|
)
|
|
212
217
|
else:
|
|
213
218
|
logger.warning(
|
|
@@ -94,10 +94,15 @@ class QQOfficialMessageEvent(AstrMessageEvent):
|
|
|
94
94
|
plain_text,
|
|
95
95
|
image_base64,
|
|
96
96
|
image_path,
|
|
97
|
-
record_file_path
|
|
97
|
+
record_file_path,
|
|
98
98
|
) = await QQOfficialMessageEvent._parse_to_qqofficial(self.send_buffer)
|
|
99
99
|
|
|
100
|
-
if
|
|
100
|
+
if (
|
|
101
|
+
not plain_text
|
|
102
|
+
and not image_base64
|
|
103
|
+
and not image_path
|
|
104
|
+
and not record_file_path
|
|
105
|
+
):
|
|
101
106
|
return
|
|
102
107
|
|
|
103
108
|
payload = {
|
|
@@ -118,7 +123,7 @@ class QQOfficialMessageEvent(AstrMessageEvent):
|
|
|
118
123
|
)
|
|
119
124
|
payload["media"] = media
|
|
120
125
|
payload["msg_type"] = 7
|
|
121
|
-
if record_file_path:
|
|
126
|
+
if record_file_path: # group record msg
|
|
122
127
|
media = await self.upload_group_and_c2c_record(
|
|
123
128
|
record_file_path, 3, group_openid=source.group_openid
|
|
124
129
|
)
|
|
@@ -134,9 +139,9 @@ class QQOfficialMessageEvent(AstrMessageEvent):
|
|
|
134
139
|
)
|
|
135
140
|
payload["media"] = media
|
|
136
141
|
payload["msg_type"] = 7
|
|
137
|
-
if record_file_path:
|
|
142
|
+
if record_file_path: # c2c record
|
|
138
143
|
media = await self.upload_group_and_c2c_record(
|
|
139
|
-
record_file_path, 3, openid
|
|
144
|
+
record_file_path, 3, openid=source.author.user_openid
|
|
140
145
|
)
|
|
141
146
|
payload["media"] = media
|
|
142
147
|
payload["msg_type"] = 7
|
|
@@ -190,58 +195,55 @@ class QQOfficialMessageEvent(AstrMessageEvent):
|
|
|
190
195
|
return await self.bot.api._http.request(route, json=payload)
|
|
191
196
|
|
|
192
197
|
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
|
+
self, file_source: str, file_type: int, srv_send_msg: bool = False, **kwargs
|
|
198
199
|
) -> Optional[Media]:
|
|
199
200
|
"""
|
|
200
201
|
上传媒体文件
|
|
201
202
|
"""
|
|
202
203
|
# 构建基础payload
|
|
203
|
-
payload = {
|
|
204
|
-
|
|
205
|
-
"srv_send_msg": srv_send_msg
|
|
206
|
-
}
|
|
207
|
-
|
|
204
|
+
payload = {"file_type": file_type, "srv_send_msg": srv_send_msg}
|
|
205
|
+
|
|
208
206
|
# 处理文件数据
|
|
209
207
|
if os.path.exists(file_source):
|
|
210
208
|
# 读取本地文件
|
|
211
|
-
async with aiofiles.open(file_source,
|
|
209
|
+
async with aiofiles.open(file_source, "rb") as f:
|
|
212
210
|
file_content = await f.read()
|
|
213
211
|
# use base64 encode
|
|
214
|
-
payload["file_data"] = base64.b64encode(file_content).decode(
|
|
212
|
+
payload["file_data"] = base64.b64encode(file_content).decode("utf-8")
|
|
215
213
|
else:
|
|
216
214
|
# 使用URL
|
|
217
215
|
payload["url"] = file_source
|
|
218
|
-
|
|
216
|
+
|
|
219
217
|
# 添加接收者信息和确定路由
|
|
220
218
|
if "openid" in kwargs:
|
|
221
219
|
payload["openid"] = kwargs["openid"]
|
|
222
220
|
route = Route("POST", "/v2/users/{openid}/files", openid=kwargs["openid"])
|
|
223
221
|
elif "group_openid" in kwargs:
|
|
224
|
-
payload["group_openid"] =kwargs["group_openid"]
|
|
225
|
-
route = Route(
|
|
222
|
+
payload["group_openid"] = kwargs["group_openid"]
|
|
223
|
+
route = Route(
|
|
224
|
+
"POST",
|
|
225
|
+
"/v2/groups/{group_openid}/files",
|
|
226
|
+
group_openid=kwargs["group_openid"],
|
|
227
|
+
)
|
|
226
228
|
else:
|
|
227
229
|
return None
|
|
228
|
-
|
|
230
|
+
|
|
229
231
|
try:
|
|
230
232
|
# 使用底层HTTP请求
|
|
231
233
|
result = await self.bot.api._http.request(route, json=payload)
|
|
232
|
-
|
|
234
|
+
|
|
233
235
|
if result:
|
|
234
236
|
return Media(
|
|
235
237
|
file_uuid=result.get("file_uuid"),
|
|
236
238
|
file_info=result.get("file_info"),
|
|
237
239
|
ttl=result.get("ttl", 0),
|
|
238
|
-
file_id=result.get("id", "")
|
|
240
|
+
file_id=result.get("id", ""),
|
|
239
241
|
)
|
|
240
242
|
except Exception as e:
|
|
241
243
|
logger.error(f"上传请求错误: {e}")
|
|
242
|
-
|
|
244
|
+
|
|
243
245
|
return None
|
|
244
|
-
|
|
246
|
+
|
|
245
247
|
async def post_c2c_message(
|
|
246
248
|
self,
|
|
247
249
|
openid: str,
|
|
@@ -286,19 +288,23 @@ class QQOfficialMessageEvent(AstrMessageEvent):
|
|
|
286
288
|
image_base64 = image_base64.removeprefix("base64://")
|
|
287
289
|
elif isinstance(i, Record):
|
|
288
290
|
if i.file:
|
|
289
|
-
record_wav_path = await i.convert_to_file_path()
|
|
291
|
+
record_wav_path = await i.convert_to_file_path() # wav 路径
|
|
290
292
|
temp_dir = os.path.join(get_astrbot_data_path(), "temp")
|
|
291
|
-
record_tecent_silk_path = os.path.join(
|
|
293
|
+
record_tecent_silk_path = os.path.join(
|
|
294
|
+
temp_dir, f"{uuid.uuid4()}.silk"
|
|
295
|
+
)
|
|
292
296
|
try:
|
|
293
|
-
duration = await wav_to_tencent_silk(
|
|
297
|
+
duration = await wav_to_tencent_silk(
|
|
298
|
+
record_wav_path, record_tecent_silk_path
|
|
299
|
+
)
|
|
294
300
|
if duration > 0:
|
|
295
301
|
record_file_path = record_tecent_silk_path
|
|
296
302
|
else:
|
|
297
|
-
record_file_path = None
|
|
303
|
+
record_file_path = None
|
|
298
304
|
logger.error("转换音频格式时出错:音频时长不大于0")
|
|
299
305
|
except Exception as e:
|
|
300
306
|
logger.error(f"处理语音时出错: {e}")
|
|
301
|
-
record_file_path = None
|
|
307
|
+
record_file_path = None
|
|
302
308
|
else:
|
|
303
309
|
logger.debug(f"qq_official 忽略 {i.type}")
|
|
304
310
|
return plain_text, image_base64, image_file_path, record_file_path
|
|
@@ -308,7 +308,9 @@ class SlackAdapter(Platform):
|
|
|
308
308
|
base64_content = base64.b64encode(content).decode("utf-8")
|
|
309
309
|
return base64_content
|
|
310
310
|
else:
|
|
311
|
-
logger.error(
|
|
311
|
+
logger.error(
|
|
312
|
+
f"Failed to download slack file: {resp.status} {await resp.text()}"
|
|
313
|
+
)
|
|
312
314
|
raise Exception(f"下载文件失败: {resp.status}")
|
|
313
315
|
|
|
314
316
|
async def run(self) -> Awaitable[Any]:
|
|
@@ -75,7 +75,13 @@ class SlackMessageEvent(AstrMessageEvent):
|
|
|
75
75
|
"text": {"type": "mrkdwn", "text": "文件上传失败"},
|
|
76
76
|
}
|
|
77
77
|
file_url = response["files"][0]["permalink"]
|
|
78
|
-
return {
|
|
78
|
+
return {
|
|
79
|
+
"type": "section",
|
|
80
|
+
"text": {
|
|
81
|
+
"type": "mrkdwn",
|
|
82
|
+
"text": f"文件: <{file_url}|{segment.name or '文件'}>",
|
|
83
|
+
},
|
|
84
|
+
}
|
|
79
85
|
else:
|
|
80
86
|
return {"type": "section", "text": {"type": "mrkdwn", "text": str(segment)}}
|
|
81
87
|
|
|
@@ -66,7 +66,9 @@ class TelegramPlatformEvent(AstrMessageEvent):
|
|
|
66
66
|
return chunks
|
|
67
67
|
|
|
68
68
|
@classmethod
|
|
69
|
-
async def send_with_client(
|
|
69
|
+
async def send_with_client(
|
|
70
|
+
cls, client: ExtBot, message: MessageChain, user_name: str
|
|
71
|
+
):
|
|
70
72
|
image_path = None
|
|
71
73
|
|
|
72
74
|
has_reply = False
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
class WebChatQueueMgr:
|
|
4
5
|
def __init__(self) -> None:
|
|
5
6
|
self.queues = {}
|
|
@@ -30,4 +31,5 @@ class WebChatQueueMgr:
|
|
|
30
31
|
"""Check if a queue exists for the given conversation ID"""
|
|
31
32
|
return conversation_id in self.queues
|
|
32
33
|
|
|
34
|
+
|
|
33
35
|
webchat_queue_mgr = WebChatQueueMgr()
|
|
@@ -213,10 +213,10 @@ class WeChatPadProAdapter(Platform):
|
|
|
213
213
|
def _extract_auth_key(self, data):
|
|
214
214
|
"""Helper method to extract auth_key from response data."""
|
|
215
215
|
if isinstance(data, dict):
|
|
216
|
-
auth_keys = data.get("authKeys")
|
|
216
|
+
auth_keys = data.get("authKeys") # 新接口
|
|
217
217
|
if isinstance(auth_keys, list) and auth_keys:
|
|
218
218
|
return auth_keys[0]
|
|
219
|
-
elif isinstance(data, list) and data:
|
|
219
|
+
elif isinstance(data, list) and data: # 旧接口
|
|
220
220
|
return data[0]
|
|
221
221
|
return None
|
|
222
222
|
|
|
@@ -234,7 +234,9 @@ class WeChatPadProAdapter(Platform):
|
|
|
234
234
|
try:
|
|
235
235
|
async with session.post(url, params=params, json=payload) as response:
|
|
236
236
|
if response.status != 200:
|
|
237
|
-
logger.error(
|
|
237
|
+
logger.error(
|
|
238
|
+
f"生成授权码失败: {response.status}, {await response.text()}"
|
|
239
|
+
)
|
|
238
240
|
return
|
|
239
241
|
|
|
240
242
|
response_data = await response.json()
|
|
@@ -245,7 +247,9 @@ class WeChatPadProAdapter(Platform):
|
|
|
245
247
|
if self.auth_key:
|
|
246
248
|
logger.info("成功获取授权码")
|
|
247
249
|
else:
|
|
248
|
-
logger.error(
|
|
250
|
+
logger.error(
|
|
251
|
+
f"生成授权码成功但未找到授权码: {response_data}"
|
|
252
|
+
)
|
|
249
253
|
else:
|
|
250
254
|
logger.error(f"生成授权码失败: {response_data}")
|
|
251
255
|
except aiohttp.ClientConnectorError as e:
|
|
@@ -48,7 +48,12 @@ class WeChatKF(BaseWeChatAPI):
|
|
|
48
48
|
注意:可能会出现返回条数少于limit的情况,需结合返回的has_more字段判断是否继续请求。
|
|
49
49
|
:return: 接口调用结果
|
|
50
50
|
"""
|
|
51
|
-
data = {
|
|
51
|
+
data = {
|
|
52
|
+
"token": token,
|
|
53
|
+
"cursor": cursor,
|
|
54
|
+
"limit": limit,
|
|
55
|
+
"open_kfid": open_kfid,
|
|
56
|
+
}
|
|
52
57
|
return self._post("kf/sync_msg", data=data)
|
|
53
58
|
|
|
54
59
|
def get_service_state(self, open_kfid, external_userid):
|
|
@@ -72,7 +77,9 @@ class WeChatKF(BaseWeChatAPI):
|
|
|
72
77
|
}
|
|
73
78
|
return self._post("kf/service_state/get", data=data)
|
|
74
79
|
|
|
75
|
-
def trans_service_state(
|
|
80
|
+
def trans_service_state(
|
|
81
|
+
self, open_kfid, external_userid, service_state, servicer_userid=""
|
|
82
|
+
):
|
|
76
83
|
"""
|
|
77
84
|
变更会话状态
|
|
78
85
|
|
|
@@ -180,7 +187,9 @@ class WeChatKF(BaseWeChatAPI):
|
|
|
180
187
|
"""
|
|
181
188
|
return self._get("kf/customer/get_upgrade_service_config")
|
|
182
189
|
|
|
183
|
-
def upgrade_service(
|
|
190
|
+
def upgrade_service(
|
|
191
|
+
self, open_kfid, external_userid, service_type, member=None, groupchat=None
|
|
192
|
+
):
|
|
184
193
|
"""
|
|
185
194
|
为客户升级为专员或客户群服务
|
|
186
195
|
|
|
@@ -246,7 +255,9 @@ class WeChatKF(BaseWeChatAPI):
|
|
|
246
255
|
data = {"open_kfid": open_kfid, "start_time": start_time, "end_time": end_time}
|
|
247
256
|
return self._post("kf/get_corp_statistic", data=data)
|
|
248
257
|
|
|
249
|
-
def get_servicer_statistic(
|
|
258
|
+
def get_servicer_statistic(
|
|
259
|
+
self, start_time, end_time, open_kfid=None, servicer_userid=None
|
|
260
|
+
):
|
|
250
261
|
"""
|
|
251
262
|
获取「客户数据统计」接待人员明细数据
|
|
252
263
|
|
|
@@ -26,6 +26,7 @@ from optionaldict import optionaldict
|
|
|
26
26
|
|
|
27
27
|
from wechatpy.client.api.base import BaseWeChatAPI
|
|
28
28
|
|
|
29
|
+
|
|
29
30
|
class WeChatKFMessage(BaseWeChatAPI):
|
|
30
31
|
"""
|
|
31
32
|
发送微信客服消息
|
|
@@ -125,35 +126,55 @@ class WeChatKFMessage(BaseWeChatAPI):
|
|
|
125
126
|
msg={"msgtype": "news", "link": {"link": articles_data}},
|
|
126
127
|
)
|
|
127
128
|
|
|
128
|
-
def send_msgmenu(
|
|
129
|
+
def send_msgmenu(
|
|
130
|
+
self, user_id, open_kfid, head_content, menu_list, tail_content, msgid=""
|
|
131
|
+
):
|
|
129
132
|
return self.send(
|
|
130
133
|
user_id,
|
|
131
134
|
open_kfid,
|
|
132
135
|
msgid,
|
|
133
136
|
msg={
|
|
134
137
|
"msgtype": "msgmenu",
|
|
135
|
-
"msgmenu": {
|
|
138
|
+
"msgmenu": {
|
|
139
|
+
"head_content": head_content,
|
|
140
|
+
"list": menu_list,
|
|
141
|
+
"tail_content": tail_content,
|
|
142
|
+
},
|
|
136
143
|
},
|
|
137
144
|
)
|
|
138
145
|
|
|
139
|
-
def send_location(
|
|
146
|
+
def send_location(
|
|
147
|
+
self, user_id, open_kfid, name, address, latitude, longitude, msgid=""
|
|
148
|
+
):
|
|
140
149
|
return self.send(
|
|
141
150
|
user_id,
|
|
142
151
|
open_kfid,
|
|
143
152
|
msgid,
|
|
144
153
|
msg={
|
|
145
154
|
"msgtype": "location",
|
|
146
|
-
"msgmenu": {
|
|
155
|
+
"msgmenu": {
|
|
156
|
+
"name": name,
|
|
157
|
+
"address": address,
|
|
158
|
+
"latitude": latitude,
|
|
159
|
+
"longitude": longitude,
|
|
160
|
+
},
|
|
147
161
|
},
|
|
148
162
|
)
|
|
149
163
|
|
|
150
|
-
def send_miniprogram(
|
|
164
|
+
def send_miniprogram(
|
|
165
|
+
self, user_id, open_kfid, appid, title, thumb_media_id, pagepath, msgid=""
|
|
166
|
+
):
|
|
151
167
|
return self.send(
|
|
152
168
|
user_id,
|
|
153
169
|
open_kfid,
|
|
154
170
|
msgid,
|
|
155
171
|
msg={
|
|
156
172
|
"msgtype": "miniprogram",
|
|
157
|
-
"msgmenu": {
|
|
173
|
+
"msgmenu": {
|
|
174
|
+
"appid": appid,
|
|
175
|
+
"title": title,
|
|
176
|
+
"thumb_media_id": thumb_media_id,
|
|
177
|
+
"pagepath": pagepath,
|
|
178
|
+
},
|
|
158
179
|
},
|
|
159
180
|
)
|
|
@@ -160,7 +160,9 @@ class WeixinOfficialAccountPlatformAdapter(Platform):
|
|
|
160
160
|
self.wexin_event_workers[msg.id] = future
|
|
161
161
|
await self.convert_message(msg, future)
|
|
162
162
|
# I love shield so much!
|
|
163
|
-
result = await asyncio.wait_for(
|
|
163
|
+
result = await asyncio.wait_for(
|
|
164
|
+
asyncio.shield(future), 60
|
|
165
|
+
) # wait for 60s
|
|
164
166
|
logger.debug(f"Got future result: {result}")
|
|
165
167
|
self.wexin_event_workers.pop(msg.id, None)
|
|
166
168
|
return result # xml. see weixin_offacc_event.py
|
astrbot/core/provider/manager.py
CHANGED
|
@@ -366,7 +366,10 @@ class ProviderManager:
|
|
|
366
366
|
if not self.curr_provider_inst:
|
|
367
367
|
self.curr_provider_inst = inst
|
|
368
368
|
|
|
369
|
-
elif provider_metadata.provider_type in [
|
|
369
|
+
elif provider_metadata.provider_type in [
|
|
370
|
+
ProviderType.EMBEDDING,
|
|
371
|
+
ProviderType.RERANK,
|
|
372
|
+
]:
|
|
370
373
|
inst = provider_metadata.cls_type(
|
|
371
374
|
provider_config, self.provider_settings
|
|
372
375
|
)
|
|
@@ -388,6 +391,7 @@ class ProviderManager:
|
|
|
388
391
|
|
|
389
392
|
# 和配置文件保持同步
|
|
390
393
|
config_ids = [provider["id"] for provider in self.providers_config]
|
|
394
|
+
logger.debug(f"providers in user's config: {config_ids}")
|
|
391
395
|
for key in list(self.inst_map.keys()):
|
|
392
396
|
if key not in config_ids:
|
|
393
397
|
await self.terminate_provider(key)
|
|
@@ -98,7 +98,7 @@ class ProviderFishAudioTTSAPI(TTSProvider):
|
|
|
98
98
|
|
|
99
99
|
# FishAudio的reference_id通常是32位十六进制字符串
|
|
100
100
|
# 例如: 626bb6d3f3364c9cbc3aa6a67300a664
|
|
101
|
-
pattern = r
|
|
101
|
+
pattern = r"^[a-fA-F0-9]{32}$"
|
|
102
102
|
return bool(re.match(pattern, reference_id.strip()))
|
|
103
103
|
|
|
104
104
|
async def _generate_request(self, text: str) -> dict:
|
|
@@ -104,6 +104,8 @@ class ProviderOpenAIOfficial(Provider):
|
|
|
104
104
|
if isinstance(custom_extra_body, dict):
|
|
105
105
|
extra_body.update(custom_extra_body)
|
|
106
106
|
|
|
107
|
+
model = payloads.get("model", "").lower()
|
|
108
|
+
|
|
107
109
|
# 针对 deepseek 模型的特殊处理:deepseek-reasoner调用必须移除 tools ,否则将被切换至 deepseek-chat
|
|
108
110
|
if model == "deepseek-reasoner" and "tools" in payloads:
|
|
109
111
|
del payloads["tools"]
|
|
@@ -7,6 +7,7 @@ from astrbot.core.config import AstrBotConfig
|
|
|
7
7
|
from .custom_filter import CustomFilter
|
|
8
8
|
from ..star_handler import StarHandlerMetadata
|
|
9
9
|
|
|
10
|
+
|
|
10
11
|
class GreedyStr(str):
|
|
11
12
|
"""标记指令完成其他参数接收后的所有剩余文本。"""
|
|
12
13
|
|
|
@@ -152,17 +153,10 @@ class CommandFilter(HandlerFilter):
|
|
|
152
153
|
_full = f"{parent_command_name} {candidate}"
|
|
153
154
|
else:
|
|
154
155
|
_full = candidate
|
|
155
|
-
if message_str == _full:
|
|
156
|
-
|
|
157
|
-
message_str = ""
|
|
158
|
-
ok = True
|
|
159
|
-
break
|
|
160
|
-
elif message_str.startswith(_full):
|
|
161
|
-
# 命令名后面无论是空格还是直接连参数都可以
|
|
162
|
-
message_str = message_str[len(_full):].lstrip()
|
|
156
|
+
if message_str.startswith(f"{_full} ") or message_str == _full:
|
|
157
|
+
message_str = message_str[len(_full) :].strip()
|
|
163
158
|
ok = True
|
|
164
159
|
break
|
|
165
|
-
|
|
166
160
|
if not ok:
|
|
167
161
|
return False
|
|
168
162
|
|
|
@@ -113,8 +113,7 @@ class CommandGroupFilter(HandlerFilter):
|
|
|
113
113
|
+ self.print_cmd_tree(self.sub_command_filters, event=event, cfg=cfg)
|
|
114
114
|
)
|
|
115
115
|
raise ValueError(
|
|
116
|
-
f"参数不足。{self.group_name} 指令组下有如下指令,请参考:\n"
|
|
117
|
-
+ tree
|
|
116
|
+
f"参数不足。{self.group_name} 指令组下有如下指令,请参考:\n" + tree
|
|
118
117
|
)
|
|
119
118
|
|
|
120
119
|
# complete_command_names = [name + " " for name in complete_command_names]
|
|
@@ -84,7 +84,10 @@ class SessionPluginManager:
|
|
|
84
84
|
session_config["disabled_plugins"] = disabled_plugins
|
|
85
85
|
session_plugin_config[session_id] = session_config
|
|
86
86
|
sp.put(
|
|
87
|
-
"session_plugin_config",
|
|
87
|
+
"session_plugin_config",
|
|
88
|
+
session_plugin_config,
|
|
89
|
+
scope="umo",
|
|
90
|
+
scope_id=session_id,
|
|
88
91
|
)
|
|
89
92
|
|
|
90
93
|
logger.info(
|
|
@@ -791,11 +791,11 @@ class PluginManager:
|
|
|
791
791
|
if star_metadata.star_cls is None:
|
|
792
792
|
return
|
|
793
793
|
|
|
794
|
-
if
|
|
794
|
+
if "__del__" in star_metadata.star_cls_type.__dict__:
|
|
795
795
|
asyncio.get_event_loop().run_in_executor(
|
|
796
796
|
None, star_metadata.star_cls.__del__
|
|
797
797
|
)
|
|
798
|
-
elif
|
|
798
|
+
elif "terminate" in star_metadata.star_cls_type.__dict__:
|
|
799
799
|
await star_metadata.star_cls.terminate()
|
|
800
800
|
|
|
801
801
|
async def turn_on_plugin(self, plugin_name: str):
|
astrbot/core/star/star_tools.py
CHANGED
|
@@ -30,8 +30,13 @@ from astrbot.core.platform.astr_message_event import MessageSesion
|
|
|
30
30
|
from astrbot.core.star.context import Context
|
|
31
31
|
from astrbot.core.star.star import star_map
|
|
32
32
|
from astrbot.core.utils.astrbot_path import get_astrbot_data_path
|
|
33
|
-
from astrbot.core.platform.sources.aiocqhttp.aiocqhttp_message_event import
|
|
34
|
-
|
|
33
|
+
from astrbot.core.platform.sources.aiocqhttp.aiocqhttp_message_event import (
|
|
34
|
+
AiocqhttpMessageEvent,
|
|
35
|
+
)
|
|
36
|
+
from astrbot.core.platform.sources.aiocqhttp.aiocqhttp_platform_adapter import (
|
|
37
|
+
AiocqhttpAdapter,
|
|
38
|
+
)
|
|
39
|
+
|
|
35
40
|
|
|
36
41
|
class StarTools:
|
|
37
42
|
"""
|
|
@@ -77,7 +82,11 @@ class StarTools:
|
|
|
77
82
|
|
|
78
83
|
@classmethod
|
|
79
84
|
async def send_message_by_id(
|
|
80
|
-
cls,
|
|
85
|
+
cls,
|
|
86
|
+
type: str,
|
|
87
|
+
id: str,
|
|
88
|
+
message_chain: MessageChain,
|
|
89
|
+
platform: str = "aiocqhttp",
|
|
81
90
|
):
|
|
82
91
|
"""
|
|
83
92
|
根据 id(例如qq号, 群号等) 直接, 主动地发送消息
|
|
@@ -92,7 +101,9 @@ class StarTools:
|
|
|
92
101
|
raise ValueError("StarTools not initialized")
|
|
93
102
|
platforms = cls._context.platform_manager.get_insts()
|
|
94
103
|
if platform == "aiocqhttp":
|
|
95
|
-
adapter = next(
|
|
104
|
+
adapter = next(
|
|
105
|
+
(p for p in platforms if isinstance(p, AiocqhttpAdapter)), None
|
|
106
|
+
)
|
|
96
107
|
if adapter is None:
|
|
97
108
|
raise ValueError("未找到适配器: AiocqhttpAdapter")
|
|
98
109
|
await AiocqhttpMessageEvent.send_message(
|
|
@@ -115,7 +126,7 @@ class StarTools:
|
|
|
115
126
|
message_str: str,
|
|
116
127
|
message_id: str = "",
|
|
117
128
|
raw_message: object = None,
|
|
118
|
-
group_id: str = ""
|
|
129
|
+
group_id: str = "",
|
|
119
130
|
) -> AstrBotMessage:
|
|
120
131
|
"""
|
|
121
132
|
创建一个AstrBot消息对象
|
|
@@ -152,7 +163,6 @@ class StarTools:
|
|
|
152
163
|
@classmethod
|
|
153
164
|
async def create_event(
|
|
154
165
|
cls, abm: AstrBotMessage, platform: str = "aiocqhttp", is_wake: bool = True
|
|
155
|
-
|
|
156
166
|
) -> None:
|
|
157
167
|
"""
|
|
158
168
|
创建并提交事件到指定平台
|
|
@@ -167,7 +177,9 @@ class StarTools:
|
|
|
167
177
|
raise ValueError("StarTools not initialized")
|
|
168
178
|
platforms = cls._context.platform_manager.get_insts()
|
|
169
179
|
if platform == "aiocqhttp":
|
|
170
|
-
adapter = next(
|
|
180
|
+
adapter = next(
|
|
181
|
+
(p for p in platforms if isinstance(p, AiocqhttpAdapter)), None
|
|
182
|
+
)
|
|
171
183
|
if adapter is None:
|
|
172
184
|
raise ValueError("未找到适配器: AiocqhttpAdapter")
|
|
173
185
|
event = AiocqhttpMessageEvent(
|
|
@@ -277,7 +289,9 @@ class StarTools:
|
|
|
277
289
|
if not plugin_name:
|
|
278
290
|
raise ValueError("无法获取插件名称")
|
|
279
291
|
|
|
280
|
-
data_dir = Path(
|
|
292
|
+
data_dir = Path(
|
|
293
|
+
os.path.join(get_astrbot_data_path(), "plugin_data", plugin_name)
|
|
294
|
+
)
|
|
281
295
|
|
|
282
296
|
try:
|
|
283
297
|
data_dir.mkdir(parents=True, exist_ok=True)
|
astrbot/dashboard/routes/log.py
CHANGED
|
@@ -10,7 +10,9 @@ class LogRoute(Route):
|
|
|
10
10
|
super().__init__(context)
|
|
11
11
|
self.log_broker = log_broker
|
|
12
12
|
self.app.add_url_rule("/api/live-log", view_func=self.log, methods=["GET"])
|
|
13
|
-
self.app.add_url_rule(
|
|
13
|
+
self.app.add_url_rule(
|
|
14
|
+
"/api/log-history", view_func=self.log_history, methods=["GET"]
|
|
15
|
+
)
|
|
14
16
|
|
|
15
17
|
async def log(self):
|
|
16
18
|
async def stream():
|
|
@@ -48,9 +50,15 @@ class LogRoute(Route):
|
|
|
48
50
|
"""获取日志历史"""
|
|
49
51
|
try:
|
|
50
52
|
logs = list(self.log_broker.log_cache)
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
return (
|
|
54
|
+
Response()
|
|
55
|
+
.ok(
|
|
56
|
+
data={
|
|
57
|
+
"logs": logs,
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
.__dict__
|
|
61
|
+
)
|
|
54
62
|
except BaseException as e:
|
|
55
63
|
logger.error(f"获取日志历史失败: {e}")
|
|
56
64
|
return Response().error(f"获取日志历史失败: {e}").__dict__
|
|
@@ -17,7 +17,7 @@ astrbot/cli/commands/cmd_plug.py,sha256=rs4ahzEeUPhLlggjxvfCXqmDWSYv66bI9bpO0NUu
|
|
|
17
17
|
astrbot/cli/commands/cmd_run.py,sha256=myIZ4SSjwEOLNrv0fO2So-a3oe3jNL7T2sI8cZj-pfc,1972
|
|
18
18
|
astrbot/cli/utils/__init__.py,sha256=EYu82Q-QKNhET-NjgdG0eqh8VY2uCc-EhPIkudhciaY,416
|
|
19
19
|
astrbot/cli/utils/basic.py,sha256=Rxg0LdluIdwPIEbhk_1H6MzzEz2JbhP3d73SWcLfJqA,2751
|
|
20
|
-
astrbot/cli/utils/plugin.py,sha256=
|
|
20
|
+
astrbot/cli/utils/plugin.py,sha256=kS37S3bAK3q43mL2wvQM8FuqaSkgLQU_Yt2XqxjnxNo,8483
|
|
21
21
|
astrbot/cli/utils/version_comparator.py,sha256=3gLFA94eswvFsBVDSJmOTLJKxTdCD9kkQFy2Lu7vcTc,3482
|
|
22
22
|
astrbot/core/__init__.py,sha256=-1atHjMqQyequsw6A1heEr4LldE0JVII9MXcuQFSAQM,1218
|
|
23
23
|
astrbot/core/astr_agent_context.py,sha256=4byUrIifQZFZwrDh0AtRLLBUvYX14tXhwiplShUNTt4,303
|
|
@@ -36,8 +36,8 @@ astrbot/core/agent/agent.py,sha256=uOriyVYpg1uDJj1yqcDix7Uj7k8mE5j9WbeX53ADk74,3
|
|
|
36
36
|
astrbot/core/agent/handoff.py,sha256=_046TjTUda3CxtXR0ngb_z3f1XGTqx9pfhh28_Dl3Ts,1168
|
|
37
37
|
astrbot/core/agent/hooks.py,sha256=AWCxG4pvq9uZ9D3yixhtsaqkIGTkYLAY7BsMxdfYC2Q,855
|
|
38
38
|
astrbot/core/agent/mcp_client.py,sha256=zJgTFpj1X1bRXpbG3rb6jBOWs9RaQI_nTxOByyW-sTk,7897
|
|
39
|
-
astrbot/core/agent/response.py,sha256=
|
|
40
|
-
astrbot/core/agent/run_context.py,sha256=
|
|
39
|
+
astrbot/core/agent/response.py,sha256=xLgAJc-_FpvA7J9ROaMUHuSZZ-NGI1LBkaR0qnwrp7I,260
|
|
40
|
+
astrbot/core/agent/run_context.py,sha256=MDvJBvKXq17R0f4-vetJbwS0DhHG2dFqDJ6YmUXik4A,454
|
|
41
41
|
astrbot/core/agent/tool.py,sha256=ZkiyZUP2SdQSncjDCiNMYYi_rYhwtyQYxbiEgeIjvvw,8637
|
|
42
42
|
astrbot/core/agent/tool_executor.py,sha256=keliOV_lyrI6CALr-MAVCdLE-HjxZh9zygoY61IVkfM,384
|
|
43
43
|
astrbot/core/agent/runners/__init__.py,sha256=KwR34OKGVSQpJ_MaGVP_MX5L1SZ4oU-lv4GuMbSF5Ys,65
|
|
@@ -45,25 +45,25 @@ astrbot/core/agent/runners/base.py,sha256=exZS_d2BsrLz-xgeY9ZUPuXikBDUnKxO-dU3ZF
|
|
|
45
45
|
astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=cuGBkpyyUEZaI4eo-UxAf199kEupicAo3IZMUwm6874,13976
|
|
46
46
|
astrbot/core/config/__init__.py,sha256=0CO_3sKtI3WOwWT0k4i6TleWq1SAWJFfB8KjnYB8Zig,172
|
|
47
47
|
astrbot/core/config/astrbot_config.py,sha256=X-b3c5m4msgJrdYFH2LXic5XKY0ViuUMdNZ335zqSBw,6335
|
|
48
|
-
astrbot/core/config/default.py,sha256=
|
|
48
|
+
astrbot/core/config/default.py,sha256=lYCZF1eqtSFVcOMycxDvtBotX7NJRuABOnXRDAIV44k,116180
|
|
49
49
|
astrbot/core/db/__init__.py,sha256=CAtPQ7lfNSNE4hUylUBWks_49ah2amgYmw1V1lA9FwQ,8291
|
|
50
50
|
astrbot/core/db/po.py,sha256=9MfQf4oEOYCUz7qnCjs4isWkGNpQKhaDVYqKIY8W-l0,7707
|
|
51
51
|
astrbot/core/db/sqlite.py,sha256=F-t2NQr6p63VmuYG6LScFJtnXWNxVT5yWxnbHirJtCw,20138
|
|
52
|
-
astrbot/core/db/migration/helper.py,sha256=
|
|
52
|
+
astrbot/core/db/migration/helper.py,sha256=FcwpvBANNeyBSrRhXyd3hudHYEyhTyrcRg9mU9lZtqY,1935
|
|
53
53
|
astrbot/core/db/migration/migra_3_to_4.py,sha256=I1CesaBbf5wj9agtNWxDl1V-qixmwdURbBQf5Vzagrk,15025
|
|
54
|
-
astrbot/core/db/migration/shared_preferences_v3.py,sha256=
|
|
55
|
-
astrbot/core/db/migration/sqlite_v3.py,sha256=
|
|
54
|
+
astrbot/core/db/migration/shared_preferences_v3.py,sha256=tE11WIpwT-Q8yVBkw4eveRr1PmFdNRJQSprH4xdO3G4,1245
|
|
55
|
+
astrbot/core/db/migration/sqlite_v3.py,sha256=U3Uysd_IGT4ObqCFE7yQeIo_1kBrAYb_r09Uy_Vvr3A,15002
|
|
56
56
|
astrbot/core/db/vec_db/base.py,sha256=Oc1mE-ecAaroQBxtVy5aGW9lHIbARRChjvAwaOFIMVE,1058
|
|
57
|
-
astrbot/core/db/vec_db/faiss_impl/__init__.py,sha256=
|
|
57
|
+
astrbot/core/db/vec_db/faiss_impl/__init__.py,sha256=S3gwB-ZL9aPJwDM5ia8a_t-xsfANKoslpJvtNd5ErcU,57
|
|
58
58
|
astrbot/core/db/vec_db/faiss_impl/document_storage.py,sha256=6aswY7f6vmpnJ7BXjVUFUI4vA3i83R9FzN35XWrS8yI,4166
|
|
59
59
|
astrbot/core/db/vec_db/faiss_impl/embedding_storage.py,sha256=pSu-ySlli-wbeVFQ7v-ZWpVn08m3Rr9uld1_692_aZQ,1810
|
|
60
60
|
astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql,sha256=RiF1mnAFAHtyThOsS0qjvniUF5t9Y8k-gjSlh51p2x8,681
|
|
61
|
-
astrbot/core/db/vec_db/faiss_impl/vec_db.py,sha256=
|
|
61
|
+
astrbot/core/db/vec_db/faiss_impl/vec_db.py,sha256=Tpp-pNoRWc1MnRRpo6CeM2TbSc9lDwGNwufXspxDlfc,5146
|
|
62
62
|
astrbot/core/message/components.py,sha256=AzJACQYgw0Yo1iwSIyQWtfE8Xyo-6Q8KcQPE9yT5otQ,28208
|
|
63
63
|
astrbot/core/message/message_event_result.py,sha256=dooPyzDVV4danPNQBvZsSXemGsihnBjW3qYByYUEa1s,7248
|
|
64
64
|
astrbot/core/pipeline/__init__.py,sha256=-jo6a9lKmwY8oPoifJi0IMLPOVdknQKG30ppIyCs5Bg,1461
|
|
65
65
|
astrbot/core/pipeline/context.py,sha256=3ySHVzhjdT54kTDMMKPse1EFdvb7XfmscNEp3YCJLVM,503
|
|
66
|
-
astrbot/core/pipeline/context_utils.py,sha256=
|
|
66
|
+
astrbot/core/pipeline/context_utils.py,sha256=BWOF4SM5m4m9el4vsf5Ddw0i4tn1iamzfbSju4XjgKo,3458
|
|
67
67
|
astrbot/core/pipeline/scheduler.py,sha256=8N6QuLV55gR1jQZDEOUDrvcf42ify8EDmw1aDU3Y4nE,3270
|
|
68
68
|
astrbot/core/pipeline/stage.py,sha256=dqEhUuQIhAZpPV4dULmVN39R0pIPjyw8Ftvs4Y1C4lY,1352
|
|
69
69
|
astrbot/core/pipeline/content_safety_check/stage.py,sha256=FsxIRBpoOm2euQSpcts8YTIX7zIwL6a2ntliQcEw2ww,1372
|
|
@@ -82,25 +82,25 @@ astrbot/core/pipeline/session_status_check/stage.py,sha256=4STRhoiq4AE544_MVscGH
|
|
|
82
82
|
astrbot/core/pipeline/waking_check/stage.py,sha256=yNC726wHhf1zf5WEvWn47hDUjj_U2vsYgcwTYIvRiSo,7946
|
|
83
83
|
astrbot/core/pipeline/whitelist_check/stage.py,sha256=VcmLs0VfmspNTsitL_WrZXfv2lR2Nktrb5JEWc1VJuw,2403
|
|
84
84
|
astrbot/core/platform/__init__.py,sha256=jQ4UiThp7cDHfmIXAgBDodET87onl7mjii0CAD3RXTY,361
|
|
85
|
-
astrbot/core/platform/astr_message_event.py,sha256=
|
|
85
|
+
astrbot/core/platform/astr_message_event.py,sha256=q1bf4g7BnZKWF36Htik3lO8ZPMU-ptWbGnI5s4X6LEQ,14103
|
|
86
86
|
astrbot/core/platform/astrbot_message.py,sha256=9Oy2HGfjD8mRTiUIVZEggwwqjCXOpr97QhHjxvBIzhM,2140
|
|
87
|
-
astrbot/core/platform/manager.py,sha256
|
|
87
|
+
astrbot/core/platform/manager.py,sha256=-H60fkUtH7uhr4aSm2NJF783o8oeN4HxaiiDxGew4B0,7893
|
|
88
88
|
astrbot/core/platform/message_session.py,sha256=Hitdfb7IK4SohaMFld0s0UlwLDpVw5UPTToh05bvH60,1076
|
|
89
89
|
astrbot/core/platform/message_type.py,sha256=uGn5KN8B_7b9F5nFTpvLAXRlXx2VFHP3JmJjN8cC7fg,261
|
|
90
90
|
astrbot/core/platform/platform.py,sha256=170_1Y1T5R-3nsu06y3i8Ote7zs8JASnskImp-IP04Q,1772
|
|
91
91
|
astrbot/core/platform/platform_metadata.py,sha256=VRZSkV7u0OUoSxAXDu5EdEggrmcsbhk_7RUduTasoQo,488
|
|
92
92
|
astrbot/core/platform/register.py,sha256=1cPxysZZ1ggfSPZfsv7Ll6qOVcTmLUw6vgaVRPjpxH8,1701
|
|
93
93
|
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py,sha256=PN4h7TjH2UrQZX9bZmI6bGtmXgxHEx5GJREI-Vw0qX4,8036
|
|
94
|
-
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py,sha256=
|
|
94
|
+
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py,sha256=r7vgL47mfBmaaoFI9hRTwSnSPETppb_KEfUBI0aoNz4,16650
|
|
95
95
|
astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py,sha256=unEkE_KBwCLn9mOBs49WMUKqk8ddpaKN8MMyYep6rhg,8514
|
|
96
|
-
astrbot/core/platform/sources/dingtalk/dingtalk_event.py,sha256=
|
|
97
|
-
astrbot/core/platform/sources/discord/client.py,sha256=
|
|
98
|
-
astrbot/core/platform/sources/discord/components.py,sha256=
|
|
96
|
+
astrbot/core/platform/sources/dingtalk/dingtalk_event.py,sha256=CYTVhpiIedNdLQxjKJlK26GxSWZGlUFNbxZZ5i3tM4o,2672
|
|
97
|
+
astrbot/core/platform/sources/discord/client.py,sha256=mNAE81bYJSvdhbSXrR7MDZIqtGEqDYynpRCGZNf9-ag,4592
|
|
98
|
+
astrbot/core/platform/sources/discord/components.py,sha256=QQYKLrdWjvzxMVrNZTxGW-rhdnn4L0CY5wbzxvQ0DY0,3845
|
|
99
99
|
astrbot/core/platform/sources/discord/discord_platform_adapter.py,sha256=aeR1lv8sY3XNSSnN8q1XJ5N8SuxBPri0sGlQJD3vWlg,18389
|
|
100
|
-
astrbot/core/platform/sources/discord/discord_platform_event.py,sha256=
|
|
100
|
+
astrbot/core/platform/sources/discord/discord_platform_event.py,sha256=1YjlH3P-jY3tsE2dBFBnX9833_h55lI6A4xmLcOvlac,12008
|
|
101
101
|
astrbot/core/platform/sources/lark/lark_adapter.py,sha256=JO_gBvAw6e2hTkXWOYeeSPUqdDjnsyVmtXh9SWXZO4A,8233
|
|
102
102
|
astrbot/core/platform/sources/lark/lark_event.py,sha256=_zISFjMhRaUqSzSOqUVKq-6Q1qAF2SujqMk7rwxCL_U,4513
|
|
103
|
-
astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py,sha256=
|
|
103
|
+
astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py,sha256=f8PA-kFZPe5iRqZZN4YYKj4wZSfozz8ySskxiE6BgpU,11954
|
|
104
104
|
astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py,sha256=6zJGUdXc-EkQp8ITPRYr99tVEFIRc20x4Fs-9QVT8Zk,7279
|
|
105
105
|
astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py,sha256=PTW_WpZSzlFuchtpu0uAIMy2KcDMi_BBnr6tUgOJNZk,4295
|
|
106
106
|
astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py,sha256=BrxaNhG3sy5QAKf8DlZlum6R7m9X5Fm0SxBrKIC_1hg,499
|
|
@@ -108,27 +108,27 @@ astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py,sha256=5A8
|
|
|
108
108
|
astrbot/core/platform/sources/satori/satori_adapter.py,sha256=1wz4U8r70TcxBo04FT2QhEJpm5ZEyGB1sRXLBTbXBGE,16677
|
|
109
109
|
astrbot/core/platform/sources/satori/satori_event.py,sha256=0z4Yn2WUn7-M2i2JbBp7VHoggsvk3mNUIRGgSWwsA30,9116
|
|
110
110
|
astrbot/core/platform/sources/slack/client.py,sha256=p0gCh9gj_VR8IacGg09-BXp2IM8C0oTnodrvEVmShMA,5637
|
|
111
|
-
astrbot/core/platform/sources/slack/slack_adapter.py,sha256=
|
|
112
|
-
astrbot/core/platform/sources/slack/slack_event.py,sha256=
|
|
111
|
+
astrbot/core/platform/sources/slack/slack_adapter.py,sha256=BdZTCNXsO5nUKY2HrZD5tpxMzpnvL7n3_vr2JgJfDS0,15812
|
|
112
|
+
astrbot/core/platform/sources/slack/slack_event.py,sha256=RYTJBqk5-CYQKgk-ejPuMKJyfaxSTqPjvfqKvPNg5Yw,8791
|
|
113
113
|
astrbot/core/platform/sources/telegram/tg_adapter.py,sha256=jEPkPKAbBgq9q9BZ3kx82RPrbU6LyZ8ugL-MmWiguPw,14145
|
|
114
|
-
astrbot/core/platform/sources/telegram/tg_event.py,sha256=
|
|
114
|
+
astrbot/core/platform/sources/telegram/tg_event.py,sha256=GtLETfmlHPkW-QoqS8Y07SbPspRMLueGHq402gMJ8Sc,9849
|
|
115
115
|
astrbot/core/platform/sources/webchat/webchat_adapter.py,sha256=X4FAaV2uFjU65Amc3kse9WJNCqsGpE7xYQjnF99HcW8,5992
|
|
116
116
|
astrbot/core/platform/sources/webchat/webchat_event.py,sha256=qeKBQtUZVwknsFQQvwASs5Hybs-L3Rn-bjIUaji6n9o,5457
|
|
117
|
-
astrbot/core/platform/sources/webchat/webchat_queue_mgr.py,sha256=
|
|
118
|
-
astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py,sha256=
|
|
117
|
+
astrbot/core/platform/sources/webchat/webchat_queue_mgr.py,sha256=2P0hQRNn7tMs9O6MLQ1GkJSSKz7R5Q8k_0JxEltSKLM,1364
|
|
118
|
+
astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py,sha256=oXxy6ZJ-42_7yKZko9oepN0vBvVbLJRNjLbaxVr6ehk,40791
|
|
119
119
|
astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py,sha256=3K7NKrE46s5jhbxLEzduLPQF4Pt4Rj6IXXdu0TwoZUw,6019
|
|
120
120
|
astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py,sha256=tfQGwWXEra99hvrYTHI4einQSt7ATcLm57Uq4VTP7d8,6230
|
|
121
121
|
astrbot/core/platform/sources/wecom/wecom_adapter.py,sha256=iCwW8S_notAkepeT78WkG2ICOMRDDpoy4aKacuflOhU,13574
|
|
122
122
|
astrbot/core/platform/sources/wecom/wecom_event.py,sha256=WkP7EP7k4AS5KUrxF7ouByyR3qS-GMZODv3yORQb0kI,9181
|
|
123
|
-
astrbot/core/platform/sources/wecom/wecom_kf.py,sha256=
|
|
124
|
-
astrbot/core/platform/sources/wecom/wecom_kf_message.py,sha256=
|
|
125
|
-
astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py,sha256=
|
|
126
|
-
astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py,sha256=
|
|
123
|
+
astrbot/core/platform/sources/wecom/wecom_kf.py,sha256=xPPt3P3tqB6d0gzPT0-0YfTkYfzlMki1PNUMGWMkH74,10891
|
|
124
|
+
astrbot/core/platform/sources/wecom/wecom_kf_message.py,sha256=nHPOnrOEnEx2uawL1_6Ht0QB7k7G1Nbt3BLpPQekfZA,5787
|
|
125
|
+
astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py,sha256=jKiLSiBW_gjE4yhN5lkfYJV8Gi3wdPkpyXYKAr0VrI0,10410
|
|
126
|
+
astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py,sha256=JpyQYaivJTUkPOMDz5ZXp4CLOQ6ek76eNLmrJXTXEEU,7196
|
|
127
127
|
astrbot/core/provider/__init__.py,sha256=fhD_KB1-KpqJ7woaXDXc7kdlmL3XPQz3xlc5IkFDJJ4,171
|
|
128
128
|
astrbot/core/provider/entites.py,sha256=-353AdRDA6ST4AS48cQ1RRAXHSy3F7pVS_28hW4cG2U,388
|
|
129
|
-
astrbot/core/provider/entities.py,sha256=
|
|
129
|
+
astrbot/core/provider/entities.py,sha256=hT3T4hEFwpDscCD1Kt8pfvjdqUh3nZqjyTXmSzmMCIE,10938
|
|
130
130
|
astrbot/core/provider/func_tool_manager.py,sha256=Qb6UrajD4Hkz5ZLmYCo3RJx8xTW5nFEmG-F_nzm9qXg,20819
|
|
131
|
-
astrbot/core/provider/manager.py,sha256=
|
|
131
|
+
astrbot/core/provider/manager.py,sha256=hFNFzV8vuHQZnRlIAbMCLn8iTvYAUH3je4VGFxY2Zls,20508
|
|
132
132
|
astrbot/core/provider/provider.py,sha256=rzzlUTUn3cRCRgfd2PhA5RcboHkEDlk3Dw9Q1P3DoJ8,7203
|
|
133
133
|
astrbot/core/provider/register.py,sha256=bWAF9zWNnSYQWjmZIXiWgxFaeWIiWjEoEIN_xhmq3mM,1830
|
|
134
134
|
astrbot/core/provider/sources/anthropic_source.py,sha256=9I6VEZ5ANv-SIx7TaNGr2o_9S1xK0eTMOxt1ZF4XrBM,14974
|
|
@@ -137,7 +137,7 @@ astrbot/core/provider/sources/dashscope_source.py,sha256=HPzMCI-x5Ht76KxxvWHSwff
|
|
|
137
137
|
astrbot/core/provider/sources/dashscope_tts.py,sha256=qGVGSKoW-yVHlnWl_eONwLtkAGMQX6t81FPkC-dV25U,1532
|
|
138
138
|
astrbot/core/provider/sources/dify_source.py,sha256=Q0VmnacKwD-fOnvwYqbrRMspDYOlJZAHnjBawRzshw4,11472
|
|
139
139
|
astrbot/core/provider/sources/edge_tts_source.py,sha256=foO2E0Wdc2wJy8yMbLUyX0cjkP6MD4vPCbc8q3Ckkug,4716
|
|
140
|
-
astrbot/core/provider/sources/fishaudio_tts_api_source.py,sha256=
|
|
140
|
+
astrbot/core/provider/sources/fishaudio_tts_api_source.py,sha256=Tu4wHh5txKDWn3_Z57hWgzTU8QUw1oVFBndAqmp4aLY,5439
|
|
141
141
|
astrbot/core/provider/sources/gemini_embedding_source.py,sha256=FlVlacBLlxo4ZZgrBhurDQRuDYRGtR8Du35XuXEY9nI,2307
|
|
142
142
|
astrbot/core/provider/sources/gemini_source.py,sha256=Gwn8nzMcsPsIVgDJ9G20tevUlYDyu_3g1_yaXsmvFPU,28649
|
|
143
143
|
astrbot/core/provider/sources/gemini_tts_source.py,sha256=mNcb9G6Lb58L2zoSYzroQGyASGrv3k4ZjmOIVvhii_o,2886
|
|
@@ -145,7 +145,7 @@ astrbot/core/provider/sources/gsv_selfhosted_source.py,sha256=7wSQ32AJv4cisjnedE
|
|
|
145
145
|
astrbot/core/provider/sources/gsvi_tts_source.py,sha256=EoYuAf85NVcPPbyRWkE_doWF-7R8IM5o9ozxbbvaFRk,2025
|
|
146
146
|
astrbot/core/provider/sources/minimax_tts_api_source.py,sha256=jNLP_4-UHq_Iekvjn3h7G6YZjTCGuII-hq-1RhzjSlE,5877
|
|
147
147
|
astrbot/core/provider/sources/openai_embedding_source.py,sha256=IIz25EksuIWINKpLqfKG-9Qc4bJ398w24oMjoArXFUA,1669
|
|
148
|
-
astrbot/core/provider/sources/openai_source.py,sha256=
|
|
148
|
+
astrbot/core/provider/sources/openai_source.py,sha256=ZdSI52h9tj78kObkvjIUODjyqWL2VO1N3JvElKo9M8E,20956
|
|
149
149
|
astrbot/core/provider/sources/openai_tts_api_source.py,sha256=ClRxEuBJ2-vM5rpMwwhOZXXJanq6asEAVPRvD9wYFrI,1626
|
|
150
150
|
astrbot/core/provider/sources/sensevoice_selfhosted_source.py,sha256=2-NUDRiJJs3onxnrovdoVqUMI8bxGu2J2n3ZgwjxEm0,3828
|
|
151
151
|
astrbot/core/provider/sources/vllm_rerank_source.py,sha256=Gv_veniilJ5v9lPGlQG_zmQYmHfhNggYIwj5p02CoLE,2275
|
|
@@ -158,15 +158,15 @@ astrbot/core/star/__init__.py,sha256=ynSwMrdCLyVMN3Q9flS_mcDDjdIGrkLBpfeDVoFj6PM
|
|
|
158
158
|
astrbot/core/star/config.py,sha256=f4h1YFt1Tn6S2D-LvnhM483qaD8JdWjl-TBRV9CeYBo,3593
|
|
159
159
|
astrbot/core/star/context.py,sha256=jeF6VLUwBm5b2kl0Uy4kz39uQ1C8esaOgeAIJavtTjo,12330
|
|
160
160
|
astrbot/core/star/session_llm_manager.py,sha256=B2URKTxPW9FXUW1goZ0HkyuqE3PZ2X7o22GSPKnIAj0,8596
|
|
161
|
-
astrbot/core/star/session_plugin_manager.py,sha256=
|
|
161
|
+
astrbot/core/star/session_plugin_manager.py,sha256=EAN17vxRdpVwIsrqFy4-k0tGl9IpgYvpV42JFGHzXjQ,5229
|
|
162
162
|
astrbot/core/star/star.py,sha256=fEgg7pxiIsnRg4Xw_KBIyOy3V919MpIgAWQ7FoE7bWc,1690
|
|
163
163
|
astrbot/core/star/star_handler.py,sha256=njRMNHcbtJg8mIk6jofYggevMOdH7972bwK84jULNiY,4830
|
|
164
|
-
astrbot/core/star/star_manager.py,sha256=
|
|
165
|
-
astrbot/core/star/star_tools.py,sha256=
|
|
164
|
+
astrbot/core/star/star_manager.py,sha256=QkMnNhchj2-5bYT_TLeHt3It4UCV6wJvf8svubrVFFs,36069
|
|
165
|
+
astrbot/core/star/star_tools.py,sha256=A16aeLU78_BBOkfPQSOp1PPhg6krnP6ymKLiBUetLnQ,10795
|
|
166
166
|
astrbot/core/star/updator.py,sha256=lHKLVE1mXBkkH0FpwJ8h23U9xJ9CsB1zo8rgZvADp88,3010
|
|
167
167
|
astrbot/core/star/filter/__init__.py,sha256=xhdp6MMbBJbCHDDtBcAzWZ86DSFTPKzj8RpE2Cdb8ls,469
|
|
168
|
-
astrbot/core/star/filter/command.py,sha256=
|
|
169
|
-
astrbot/core/star/filter/command_group.py,sha256=
|
|
168
|
+
astrbot/core/star/filter/command.py,sha256=vHsrKT8prA3JO1tf29Qte_t6RMIZTeEGq5SwSF4YY0k,6911
|
|
169
|
+
astrbot/core/star/filter/command_group.py,sha256=XPONNccFEJeiRzryjySY28x3eS9cLzSDjObbQgI_xOI,4696
|
|
170
170
|
astrbot/core/star/filter/custom_filter.py,sha256=UPEfr-vYJR1NsLOp75A8Oa8RFkluEC3rkzbHM2ct0ek,2238
|
|
171
171
|
astrbot/core/star/filter/event_message_type.py,sha256=R45Buoy9YALxnY6oanFlZMLfSZex2NAHPsl8DFSI_2Y,1162
|
|
172
172
|
astrbot/core/star/filter/permission.py,sha256=GmyA2xqPCGVryLMa7OrWiuYRR-9pcQ6PaYOedPySH_0,915
|
|
@@ -199,21 +199,21 @@ astrbot/dashboard/server.py,sha256=4d_0xDfMW-qKabVLBEVzOnjxF3qIiNMr3dvaxZO-cEk,9
|
|
|
199
199
|
astrbot/dashboard/routes/__init__.py,sha256=Bn6_rbYtujttHKHEn8Smv2RiObhwWyH9TagW4HZSzGw,710
|
|
200
200
|
astrbot/dashboard/routes/auth.py,sha256=igVjZWluaQpF-lrg-Ueb4IA553dA_Sn6pAxY34-83i8,2964
|
|
201
201
|
astrbot/dashboard/routes/chat.py,sha256=hfKrxS07qEYA3SxwgPymh08-Doi74hwmaYhwxRcwrkk,11601
|
|
202
|
-
astrbot/dashboard/routes/config.py,sha256=
|
|
202
|
+
astrbot/dashboard/routes/config.py,sha256=ZVn5GIoaloIWpjL6Gy1zFtBQuAKC7fYP1RZDsJAGy8Q,31643
|
|
203
203
|
astrbot/dashboard/routes/conversation.py,sha256=9AopEmbxzRUcJ78fOlp5aFe9-7ptroaE5YrvAEuGBJQ,8886
|
|
204
204
|
astrbot/dashboard/routes/file.py,sha256=y3yi4ari-ELwiDicuniBlvXhVe8d1JgWRl6FdC42v9k,706
|
|
205
|
-
astrbot/dashboard/routes/log.py,sha256=
|
|
205
|
+
astrbot/dashboard/routes/log.py,sha256=hDl6Niz_Vs4xb64USjCBzdOcm68GDpEsQrNrLr8yKGc,2114
|
|
206
206
|
astrbot/dashboard/routes/persona.py,sha256=6icnNNE8A0Yy1WI0INWD9ZPKC7VcZG-xHDfYElhaP8M,7857
|
|
207
207
|
astrbot/dashboard/routes/plugin.py,sha256=cGGJVEM55uRiPo-EeD5apZQISzPw9vux7a-U2dE4fZQ,19429
|
|
208
|
-
astrbot/dashboard/routes/route.py,sha256=
|
|
208
|
+
astrbot/dashboard/routes/route.py,sha256=V-Wm88D0BmxSYAUbedunykbWy5p7Tggae9nDhxm7LZU,1545
|
|
209
209
|
astrbot/dashboard/routes/session_management.py,sha256=h3b8DTDV99Dl0Gmbys7I2SlkC7_DTeIQNwoi8HT1zEo,20238
|
|
210
210
|
astrbot/dashboard/routes/stat.py,sha256=KCtP0-f9g664gM2SOBgnU8uKx6zt93-5Kut-d7wd7zk,6910
|
|
211
211
|
astrbot/dashboard/routes/static_file.py,sha256=7KnNcOb1BVqSTft114LhGsDkfg69X2jHEm0tOK0kW0Y,1169
|
|
212
212
|
astrbot/dashboard/routes/t2i.py,sha256=scp05AxoJM9cubrkSMBu1BbIWP1BMS50eFEPZ9S6WKM,8893
|
|
213
|
-
astrbot/dashboard/routes/tools.py,sha256=
|
|
213
|
+
astrbot/dashboard/routes/tools.py,sha256=FvWgjzImgeIGFWJM_r2tku3UTj0J5LwZXfmZJxfJWHM,13975
|
|
214
214
|
astrbot/dashboard/routes/update.py,sha256=vhG6ET0GJNLTpfkKABYf3Aq5ChUCID1BvoZissWRBZg,6517
|
|
215
|
-
astrbot-4.1.
|
|
216
|
-
astrbot-4.1.
|
|
217
|
-
astrbot-4.1.
|
|
218
|
-
astrbot-4.1.
|
|
219
|
-
astrbot-4.1.
|
|
215
|
+
astrbot-4.1.2.dist-info/METADATA,sha256=5KY3hEFXebwM33VBFvpILeAFZLF6kUA9pqcIOiXLblk,10921
|
|
216
|
+
astrbot-4.1.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
217
|
+
astrbot-4.1.2.dist-info/entry_points.txt,sha256=OEF09YmhBWYuViXrvTLLpstF4ccmNwDL8r7nnFD0pfI,53
|
|
218
|
+
astrbot-4.1.2.dist-info/licenses/LICENSE,sha256=zPfQj5Mq8-gThIiBcxETr7t8gND9bZWOjTGQAr80TQI,34500
|
|
219
|
+
astrbot-4.1.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|