AstrBot 4.13.0__py3-none-any.whl → 4.13.1__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/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "4.13.0"
1
+ __version__ = "4.13.1"
@@ -84,7 +84,7 @@ class LocalPythonTool(FunctionTool):
84
84
  self, context: ContextWrapper[AstrAgentContext], code: str, silent: bool = False
85
85
  ) -> ToolExecResult:
86
86
  if context.context.event.role != "admin":
87
- return "error: Permission denied. Local Python execution is only allowed for admin users. Set admins in AstrBot WebUI."
87
+ return "error: Permission denied. Local Python execution is only allowed for admin users. Tell user to set admins in AstrBot WebUI."
88
88
 
89
89
  sb = get_local_booter()
90
90
  try:
@@ -47,7 +47,7 @@ class ExecuteShellTool(FunctionTool):
47
47
  env: dict = {},
48
48
  ) -> ToolExecResult:
49
49
  if context.context.event.role != "admin":
50
- return "error: Permission denied. Shell execution is only allowed for admin users. Set admins in AstrBot WebUI."
50
+ return "error: Permission denied. Shell execution is only allowed for admin users. Tell user to Set admins in AstrBot WebUI."
51
51
 
52
52
  if self.is_local:
53
53
  sb = get_local_booter()
@@ -5,7 +5,7 @@ from typing import Any, TypedDict
5
5
 
6
6
  from astrbot.core.utils.astrbot_path import get_astrbot_data_path
7
7
 
8
- VERSION = "4.13.0"
8
+ VERSION = "4.13.1"
9
9
  DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
10
10
 
11
11
  WEBHOOK_SUPPORTED_PLATFORMS = [
astrbot/core/db/po.py CHANGED
@@ -6,6 +6,14 @@ from typing import TypedDict
6
6
  from sqlmodel import JSON, Field, SQLModel, Text, UniqueConstraint
7
7
 
8
8
 
9
+ class TimestampMixin(SQLModel):
10
+ created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
11
+ updated_at: datetime = Field(
12
+ default_factory=lambda: datetime.now(timezone.utc),
13
+ sa_column_kwargs={"onupdate": lambda: datetime.now(timezone.utc)},
14
+ )
15
+
16
+
9
17
  class PlatformStat(SQLModel, table=True):
10
18
  """This class represents the statistics of bot usage across different platforms.
11
19
 
@@ -30,7 +38,7 @@ class PlatformStat(SQLModel, table=True):
30
38
  )
31
39
 
32
40
 
33
- class ConversationV2(SQLModel, table=True):
41
+ class ConversationV2(TimestampMixin, SQLModel, table=True):
34
42
  __tablename__: str = "conversations"
35
43
 
36
44
  inner_conversation_id: int | None = Field(
@@ -47,11 +55,7 @@ class ConversationV2(SQLModel, table=True):
47
55
  platform_id: str = Field(nullable=False)
48
56
  user_id: str = Field(nullable=False)
49
57
  content: list | None = Field(default=None, sa_type=JSON)
50
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
51
- updated_at: datetime = Field(
52
- default_factory=lambda: datetime.now(timezone.utc),
53
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
54
- )
58
+
55
59
  title: str | None = Field(default=None, max_length=255)
56
60
  persona_id: str | None = Field(default=None)
57
61
  token_usage: int = Field(default=0, nullable=False)
@@ -68,7 +72,7 @@ class ConversationV2(SQLModel, table=True):
68
72
  )
69
73
 
70
74
 
71
- class PersonaFolder(SQLModel, table=True):
75
+ class PersonaFolder(TimestampMixin, SQLModel, table=True):
72
76
  """Persona 文件夹,支持递归层级结构。
73
77
 
74
78
  用于组织和管理多个 Persona,类似于文件系统的目录结构。
@@ -92,11 +96,6 @@ class PersonaFolder(SQLModel, table=True):
92
96
  """父文件夹ID,NULL表示根目录"""
93
97
  description: str | None = Field(default=None, sa_type=Text)
94
98
  sort_order: int = Field(default=0)
95
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
96
- updated_at: datetime = Field(
97
- default_factory=lambda: datetime.now(timezone.utc),
98
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
99
- )
100
99
 
101
100
  __table_args__ = (
102
101
  UniqueConstraint(
@@ -106,7 +105,7 @@ class PersonaFolder(SQLModel, table=True):
106
105
  )
107
106
 
108
107
 
109
- class Persona(SQLModel, table=True):
108
+ class Persona(TimestampMixin, SQLModel, table=True):
110
109
  """Persona is a set of instructions for LLMs to follow.
111
110
 
112
111
  It can be used to customize the behavior of LLMs.
@@ -131,11 +130,6 @@ class Persona(SQLModel, table=True):
131
130
  """所属文件夹ID,NULL 表示在根目录"""
132
131
  sort_order: int = Field(default=0)
133
132
  """排序顺序"""
134
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
135
- updated_at: datetime = Field(
136
- default_factory=lambda: datetime.now(timezone.utc),
137
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
138
- )
139
133
 
140
134
  __table_args__ = (
141
135
  UniqueConstraint(
@@ -145,7 +139,7 @@ class Persona(SQLModel, table=True):
145
139
  )
146
140
 
147
141
 
148
- class Preference(SQLModel, table=True):
142
+ class Preference(TimestampMixin, SQLModel, table=True):
149
143
  """This class represents preferences for bots."""
150
144
 
151
145
  __tablename__: str = "preferences"
@@ -161,11 +155,6 @@ class Preference(SQLModel, table=True):
161
155
  """ID of the scope, such as 'global', 'umo', 'plugin_name'."""
162
156
  key: str = Field(nullable=False)
163
157
  value: dict = Field(sa_type=JSON, nullable=False)
164
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
165
- updated_at: datetime = Field(
166
- default_factory=lambda: datetime.now(timezone.utc),
167
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
168
- )
169
158
 
170
159
  __table_args__ = (
171
160
  UniqueConstraint(
@@ -177,7 +166,7 @@ class Preference(SQLModel, table=True):
177
166
  )
178
167
 
179
168
 
180
- class PlatformMessageHistory(SQLModel, table=True):
169
+ class PlatformMessageHistory(TimestampMixin, SQLModel, table=True):
181
170
  """This class represents the message history for a specific platform.
182
171
 
183
172
  It is used to store messages that are not LLM-generated, such as user messages
@@ -198,14 +187,9 @@ class PlatformMessageHistory(SQLModel, table=True):
198
187
  default=None,
199
188
  ) # Name of the sender in the platform
200
189
  content: dict = Field(sa_type=JSON, nullable=False) # a message chain list
201
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
202
- updated_at: datetime = Field(
203
- default_factory=lambda: datetime.now(timezone.utc),
204
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
205
- )
206
190
 
207
191
 
208
- class PlatformSession(SQLModel, table=True):
192
+ class PlatformSession(TimestampMixin, SQLModel, table=True):
209
193
  """Platform session table for managing user sessions across different platforms.
210
194
 
211
195
  A session represents a chat window for a specific user on a specific platform.
@@ -233,11 +217,6 @@ class PlatformSession(SQLModel, table=True):
233
217
  """Display name for the session"""
234
218
  is_group: int = Field(default=0, nullable=False)
235
219
  """0 for private chat, 1 for group chat (not implemented yet)"""
236
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
237
- updated_at: datetime = Field(
238
- default_factory=lambda: datetime.now(timezone.utc),
239
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
240
- )
241
220
 
242
221
  __table_args__ = (
243
222
  UniqueConstraint(
@@ -247,7 +226,7 @@ class PlatformSession(SQLModel, table=True):
247
226
  )
248
227
 
249
228
 
250
- class Attachment(SQLModel, table=True):
229
+ class Attachment(TimestampMixin, SQLModel, table=True):
251
230
  """This class represents attachments for messages in AstrBot.
252
231
 
253
232
  Attachments can be images, files, or other media types.
@@ -269,11 +248,6 @@ class Attachment(SQLModel, table=True):
269
248
  path: str = Field(nullable=False) # Path to the file on disk
270
249
  type: str = Field(nullable=False) # Type of the file (e.g., 'image', 'file')
271
250
  mime_type: str = Field(nullable=False) # MIME type of the file
272
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
273
- updated_at: datetime = Field(
274
- default_factory=lambda: datetime.now(timezone.utc),
275
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
276
- )
277
251
 
278
252
  __table_args__ = (
279
253
  UniqueConstraint(
@@ -283,7 +257,7 @@ class Attachment(SQLModel, table=True):
283
257
  )
284
258
 
285
259
 
286
- class ChatUIProject(SQLModel, table=True):
260
+ class ChatUIProject(TimestampMixin, SQLModel, table=True):
287
261
  """This class represents projects for organizing ChatUI conversations.
288
262
 
289
263
  Projects allow users to group related conversations together.
@@ -310,11 +284,6 @@ class ChatUIProject(SQLModel, table=True):
310
284
  """Title of the project"""
311
285
  description: str | None = Field(default=None, max_length=1000)
312
286
  """Description of the project"""
313
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
314
- updated_at: datetime = Field(
315
- default_factory=lambda: datetime.now(timezone.utc),
316
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
317
- )
318
287
 
319
288
  __table_args__ = (
320
289
  UniqueConstraint(
@@ -338,7 +307,6 @@ class SessionProjectRelation(SQLModel, table=True):
338
307
  """Session ID from PlatformSession"""
339
308
  project_id: str = Field(nullable=False, max_length=36)
340
309
  """Project ID from ChatUIProject"""
341
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
342
310
 
343
311
  __table_args__ = (
344
312
  UniqueConstraint(
@@ -348,7 +316,7 @@ class SessionProjectRelation(SQLModel, table=True):
348
316
  )
349
317
 
350
318
 
351
- class CommandConfig(SQLModel, table=True):
319
+ class CommandConfig(TimestampMixin, SQLModel, table=True):
352
320
  """Per-command configuration overrides for dashboard management."""
353
321
 
354
322
  __tablename__ = "command_configs" # type: ignore
@@ -368,14 +336,9 @@ class CommandConfig(SQLModel, table=True):
368
336
  note: str | None = Field(default=None, sa_type=Text)
369
337
  extra_data: dict | None = Field(default=None, sa_type=JSON)
370
338
  auto_managed: bool = Field(default=False, nullable=False)
371
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
372
- updated_at: datetime = Field(
373
- default_factory=lambda: datetime.now(timezone.utc),
374
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
375
- )
376
339
 
377
340
 
378
- class CommandConflict(SQLModel, table=True):
341
+ class CommandConflict(TimestampMixin, SQLModel, table=True):
379
342
  """Conflict tracking for duplicated command names."""
380
343
 
381
344
  __tablename__ = "command_conflicts" # type: ignore
@@ -392,11 +355,6 @@ class CommandConflict(SQLModel, table=True):
392
355
  note: str | None = Field(default=None, sa_type=Text)
393
356
  extra_data: dict | None = Field(default=None, sa_type=JSON)
394
357
  auto_generated: bool = Field(default=False, nullable=False)
395
- created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
396
- updated_at: datetime = Field(
397
- default_factory=lambda: datetime.now(timezone.utc),
398
- sa_column_kwargs={"onupdate": datetime.now(timezone.utc)},
399
- )
400
358
 
401
359
  __table_args__ = (
402
360
  UniqueConstraint(
@@ -582,9 +582,7 @@ class InternalAgentSubStage(Stage):
582
582
  req.extra_user_content_parts.append(
583
583
  TextPart(text=f"[Image Attachment: path {image_path}]")
584
584
  )
585
- elif isinstance(comp, File) and self.sandbox_cfg.get(
586
- "enable", False
587
- ):
585
+ elif isinstance(comp, File):
588
586
  file_path = await comp.get_file()
589
587
  file_name = comp.name or os.path.basename(file_path)
590
588
  req.extra_user_content_parts.append(
@@ -611,7 +609,10 @@ class InternalAgentSubStage(Stage):
611
609
  logger.error(f"Error occurred while applying file extract: {e}")
612
610
 
613
611
  if not req.prompt and not req.image_urls:
614
- return
612
+ if not event.get_group_id() and req.extra_user_content_parts:
613
+ req.prompt = "<attachment>"
614
+ else:
615
+ return
615
616
 
616
617
  # call event hook
617
618
  if await call_event_hook(event, EventType.OnLLMRequestEvent, req):
@@ -17,7 +17,8 @@ from astrbot.core.utils.astrbot_path import (
17
17
 
18
18
  SKILLS_CONFIG_FILENAME = "skills.json"
19
19
  DEFAULT_SKILLS_CONFIG: dict[str, dict] = {"skills": {}}
20
- SANDBOX_SKILLS_ROOT = "/home/shared/skills"
20
+ # SANDBOX_SKILLS_ROOT = "/home/shared/skills"
21
+ SANDBOX_SKILLS_ROOT = "skills"
21
22
 
22
23
  _SKILL_NAME_RE = re.compile(r"^[A-Za-z0-9._-]+$")
23
24
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AstrBot
3
- Version: 4.13.0
3
+ Version: 4.13.1
4
4
  Summary: Easy-to-use multi-platform LLM chatbot and development framework
5
5
  License-File: LICENSE
6
6
  Keywords: Astrbot,Astrbot Module,Astrbot Plugin
@@ -103,7 +103,7 @@ AstrBot 是一个开源的一站式 Agent 聊天机器人平台,可接入主
103
103
  ## 主要功能
104
104
 
105
105
  1. 💯 免费 & 开源。
106
- 1. ✨ AI 大模型对话,多模态,Agent,MCP,知识库,人格设定,自动压缩对话。
106
+ 1. ✨ AI 大模型对话,多模态,Agent,MCP,Skills,知识库,人格设定,自动压缩对话。
107
107
  2. 🤖 支持接入 Dify、阿里云百炼、Coze 等智能体平台。
108
108
  2. 🌐 多平台,支持 QQ、企业微信、飞书、钉钉、微信公众号、Telegram、Slack 以及[更多](#支持的消息平台)。
109
109
  3. 📦 插件扩展,已有近 800 个插件可一键安装。
@@ -37,7 +37,7 @@ astrbot/builtin_stars/web_searcher/metadata.yaml,sha256=aHAKtP8UZJaddzIN2eFfglTO
37
37
  astrbot/builtin_stars/web_searcher/engines/__init__.py,sha256=Gcp7k6m3w2Pb-hNCe3QIiYa9smQFcEzmb7jcfg2evuw,4300
38
38
  astrbot/builtin_stars/web_searcher/engines/bing.py,sha256=pn3DPR-5SO2D_RtBIU3l9Ph7PTUB-FCZAMCYuk6kd6Q,1035
39
39
  astrbot/builtin_stars/web_searcher/engines/sogo.py,sha256=YA7pA5-335r7UgKpyUPAeGGZQbYEwDBO8bm08Ro8Xg0,1701
40
- astrbot/cli/__init__.py,sha256=9Eu48ft2G9OmRml3_rfORRbpYtNuauG7kRVNg5FgKGw,23
40
+ astrbot/cli/__init__.py,sha256=eI5KkHEFD5jz0OTYWOVaCxYxX1UbP8_xHAIvX8O5ugE,23
41
41
  astrbot/cli/__main__.py,sha256=QobgMyFoLNTgI_OYddhGOZ9ZvQeBVjjz79mA2cC2OEU,1758
42
42
  astrbot/cli/commands/__init__.py,sha256=eAgppZQIqFO1ylQJFABeYrzQ0oZqPWjtE80aKIPB3ks,149
43
43
  astrbot/cli/commands/cmd_conf.py,sha256=6-YLicBt_zjWTzaVLUJ1VQLQPbDEPYACB9IVnN8Zvng,6330
@@ -103,14 +103,14 @@ astrbot/core/computer/olayer/python.py,sha256=ksv0qdOgUFMWyb9iYSI3pLLSiBznojjerQ
103
103
  astrbot/core/computer/olayer/shell.py,sha256=8vaNRpX_EjU0gXVT3rii1JFsYAyqTLlCr4fs7nZ-kQ0,430
104
104
  astrbot/core/computer/tools/__init__.py,sha256=iFsuCjjyNIlkmxOXOSarXW70fGbXNc9ptT8QmzS6Jq4,259
105
105
  astrbot/core/computer/tools/fs.py,sha256=OmSaKHpbhLVw-9Nj3ug8ZOBSBlghGfhg_qajK1_5X1o,6871
106
- astrbot/core/computer/tools/python.py,sha256=QL3xZrmNY3OyVBBUcoHG2wpc_5EJars1x-mnp8WkG04,3018
107
- astrbot/core/computer/tools/shell.py,sha256=nidNfEBhsfgvFEnv4mhhrqEMhgpkWA-yEwQKNbC9A18,2198
106
+ astrbot/core/computer/tools/python.py,sha256=E6-eRarOjE6AhYioOj5gZhfn10S3fC8uHjO3u0ThO5M,3031
107
+ astrbot/core/computer/tools/shell.py,sha256=b2RWis65YJtUZHhmsLZI1L1LRvnfMlsZcXL4KPbqq_s,2211
108
108
  astrbot/core/config/__init__.py,sha256=vZjtpC7vr-IvBgSUtbS04C0wpulmCG5tPmcEP1WYE_4,172
109
109
  astrbot/core/config/astrbot_config.py,sha256=5r2VhCNO4VuGCqct12g10-TcvAKyXV40-suk5vRMGns,6436
110
- astrbot/core/config/default.py,sha256=drP2iTwFmibBvYAFg074SGoB_gCeJJzITgvDGF2b2_w,160460
110
+ astrbot/core/config/default.py,sha256=ySh-MpB68hAF9YIx_c830FrEO0_f8BS0dV5IFxa02fI,160460
111
111
  astrbot/core/config/i18n_utils.py,sha256=HJn_0XeeVS9ryCBelYfnc0nEn10LlX702fcSSFrF1J8,3879
112
112
  astrbot/core/db/__init__.py,sha256=ldEFdHkuQn_WpSNEC9X6knfthF2lD5YYLLZD4phwtdg,18515
113
- astrbot/core/db/po.py,sha256=I6Yd0gY3-JdjydYMoXH61u_xsy2T2b0rGPwIPnmQDuU,15936
113
+ astrbot/core/db/po.py,sha256=qGS8X2oXc1BWQCXHxqroBr9PhYCtXS6Of4Msm7NvMpI,13786
114
114
  astrbot/core/db/sqlite.py,sha256=ry_FhBHXDXMrfBb9Yq1qHAc-8rJEj0UP8l6pwRx1USA,58647
115
115
  astrbot/core/db/migration/helper.py,sha256=Kogq0FLJdvWTDuAVWLT1PlTGGJcWkDMWO37KM-G8lTk,2087
116
116
  astrbot/core/db/migration/migra_3_to_4.py,sha256=AZkywKcS2aKo81k04uD2qxHsPqKWRfVz9smEnHDxWqE,15343
@@ -163,7 +163,7 @@ astrbot/core/pipeline/process_stage/stage.py,sha256=tOg6HYGVU1GoY921YBYVO1MTM7a5
163
163
  astrbot/core/pipeline/process_stage/utils.py,sha256=aOAB6A-drxvoO3XYnncCbteW_DqCelR7cnSDqeb7MRM,9379
164
164
  astrbot/core/pipeline/process_stage/method/agent_request.py,sha256=vHC2Z73Fe96iW4j6ZbNvWQkfXD49pVWy6XKoG-20CS8,2049
165
165
  astrbot/core/pipeline/process_stage/method/star_request.py,sha256=C-PTq_Wpq4QMS2ecfRDCcDSX3rYyldfsAN-jAaEEb-w,2430
166
- astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py,sha256=N61nbOT3xJlKD0Csgzb9GxEuVI9UC984Jej-ICC8o0Y,33887
166
+ astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py,sha256=f_KTw7GRXGGnQa3OEsb5l5PN-v_0_zvaQR-cmf6s1Gc,33955
167
167
  astrbot/core/pipeline/process_stage/method/agent_sub_stages/third_party.py,sha256=LNBRItSpZn0MLP4fyHQ_3gUJ8lnmCwuPlqnZDVFLI6Q,7332
168
168
  astrbot/core/pipeline/rate_limit_check/stage.py,sha256=9EVJ0zYtxATFsj7ADyWDYcSGBRqmrMiKWp1kkD9LONI,3962
169
169
  astrbot/core/pipeline/respond/stage.py,sha256=RIYGXTG-XvBhgRqaHyJYWlsZjskS9pgV-2jm5o956ho,11042
@@ -259,7 +259,7 @@ astrbot/core/provider/sources/xinference_rerank_source.py,sha256=DsF4JVlXGeeqqyc
259
259
  astrbot/core/provider/sources/xinference_stt_provider.py,sha256=A2kzsVZD6Fnbfgv7r1xY1y5tT05mRKZYfRVfe8vN8JA,8198
260
260
  astrbot/core/provider/sources/zhipu_source.py,sha256=oOCPXGsR9PLWOuu3h8RSVNRw1Qy2Se6dwmeFR3zk3GM,612
261
261
  astrbot/core/skills/__init__.py,sha256=6ADR-BbIwB_QlXnWPki4RBPH5XbhNOQDlP5PHFKB32s,136
262
- astrbot/core/skills/skill_manager.py,sha256=zx_LZRc6sPRV85KHwWtm_ueYF3_yMoBA1lKkGy6Ihv0,9658
262
+ astrbot/core/skills/skill_manager.py,sha256=OLtg3zm1JRpKGyCf2pQAEr92Sm-3LVbdQqltlxhq8R4,9691
263
263
  astrbot/core/star/README.md,sha256=LXxqxp3xv_oejO8ocBPOrbmLe0WB4feu43fYDNddHTQ,161
264
264
  astrbot/core/star/__init__.py,sha256=iTlnjfEGJGy--78PhG7F1cKj9VwJVcDNFtGomX8hRO0,2229
265
265
  astrbot/core/star/command_management.py,sha256=AAmbY-saiIoExPzDY5DMxQwCnUvtsWztMJxQIVk2Qco,18099
@@ -333,8 +333,8 @@ astrbot/dashboard/routes/t2i.py,sha256=F6smxdL99MF7cRw3hqS6-2GErw8Zhsv0V0mfBUeEk
333
333
  astrbot/dashboard/routes/tools.py,sha256=mMwVFw_VOlpqy_WZg1A-ddGtYa5L5QLWYawl37PT0-c,15354
334
334
  astrbot/dashboard/routes/update.py,sha256=qXiqQ_dbqRVftOzGgCQrvK8-qopVK6zKhhVVJ9SK26U,6648
335
335
  astrbot/dashboard/routes/util.py,sha256=Ewf5EgWs0evjOyIbgFffJH6T4DzgDrIoacd6VZ5Ix2c,2856
336
- astrbot-4.13.0.dist-info/METADATA,sha256=Ml_PZSDNuEQ7wOV6WUIl2m99kC4mmJs3VelFiOolS_o,12183
337
- astrbot-4.13.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
338
- astrbot-4.13.0.dist-info/entry_points.txt,sha256=OEF09YmhBWYuViXrvTLLpstF4ccmNwDL8r7nnFD0pfI,53
339
- astrbot-4.13.0.dist-info/licenses/LICENSE,sha256=zPfQj5Mq8-gThIiBcxETr7t8gND9bZWOjTGQAr80TQI,34500
340
- astrbot-4.13.0.dist-info/RECORD,,
336
+ astrbot-4.13.1.dist-info/METADATA,sha256=xtb5mFEbGeIvc4K5zx3SLYMxbOQl1Zy3Bh9jpUWJiEI,12192
337
+ astrbot-4.13.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
338
+ astrbot-4.13.1.dist-info/entry_points.txt,sha256=OEF09YmhBWYuViXrvTLLpstF4ccmNwDL8r7nnFD0pfI,53
339
+ astrbot-4.13.1.dist-info/licenses/LICENSE,sha256=zPfQj5Mq8-gThIiBcxETr7t8gND9bZWOjTGQAr80TQI,34500
340
+ astrbot-4.13.1.dist-info/RECORD,,