AstrBot 4.10.0a1__py3-none-any.whl → 4.10.0a2__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 +1 -1
- astrbot/core/agent/runners/tool_loop_agent_runner.py +61 -21
- astrbot/core/astr_agent_run_util.py +19 -1
- astrbot/core/astr_agent_tool_exec.py +34 -4
- astrbot/core/config/default.py +1 -1
- astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py +6 -1
- astrbot/dashboard/routes/chat.py +1 -1
- {astrbot-4.10.0a1.dist-info → astrbot-4.10.0a2.dist-info}/METADATA +1 -1
- {astrbot-4.10.0a1.dist-info → astrbot-4.10.0a2.dist-info}/RECORD +12 -12
- {astrbot-4.10.0a1.dist-info → astrbot-4.10.0a2.dist-info}/WHEEL +0 -0
- {astrbot-4.10.0a1.dist-info → astrbot-4.10.0a2.dist-info}/entry_points.txt +0 -0
- {astrbot-4.10.0a1.dist-info → astrbot-4.10.0a2.dist-info}/licenses/LICENSE +0 -0
astrbot/cli/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "4.10.0-alpha.
|
|
1
|
+
__version__ = "4.10.0-alpha.2"
|
|
@@ -76,12 +76,19 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
|
|
|
76
76
|
|
|
77
77
|
async def _iter_llm_responses(self) -> T.AsyncGenerator[LLMResponse, None]:
|
|
78
78
|
"""Yields chunks *and* a final LLMResponse."""
|
|
79
|
+
payload = {
|
|
80
|
+
"contexts": self.run_context.messages,
|
|
81
|
+
"func_tool": self.req.func_tool,
|
|
82
|
+
"model": self.req.model, # NOTE: in fact, this arg is None in most cases
|
|
83
|
+
"session_id": self.req.session_id,
|
|
84
|
+
}
|
|
85
|
+
|
|
79
86
|
if self.streaming:
|
|
80
|
-
stream = self.provider.text_chat_stream(**
|
|
87
|
+
stream = self.provider.text_chat_stream(**payload)
|
|
81
88
|
async for resp in stream: # type: ignore
|
|
82
89
|
yield resp
|
|
83
90
|
else:
|
|
84
|
-
yield await self.provider.text_chat(**
|
|
91
|
+
yield await self.provider.text_chat(**payload)
|
|
85
92
|
|
|
86
93
|
@override
|
|
87
94
|
async def step(self):
|
|
@@ -165,7 +172,7 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
|
|
|
165
172
|
self.run_context.messages.append(
|
|
166
173
|
Message(
|
|
167
174
|
role="assistant",
|
|
168
|
-
content=llm_resp.completion_text or "",
|
|
175
|
+
content=llm_resp.completion_text or "*No response*",
|
|
169
176
|
),
|
|
170
177
|
)
|
|
171
178
|
try:
|
|
@@ -230,6 +237,25 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
|
|
|
230
237
|
async for resp in self.step():
|
|
231
238
|
yield resp
|
|
232
239
|
|
|
240
|
+
# 如果循环结束了但是 agent 还没有完成,说明是达到了 max_step
|
|
241
|
+
if not self.done():
|
|
242
|
+
logger.warning(
|
|
243
|
+
f"Agent reached max steps ({max_step}), forcing a final response."
|
|
244
|
+
)
|
|
245
|
+
# 拔掉所有工具
|
|
246
|
+
if self.req:
|
|
247
|
+
self.req.func_tool = None
|
|
248
|
+
# 注入提示词
|
|
249
|
+
self.run_context.messages.append(
|
|
250
|
+
Message(
|
|
251
|
+
role="user",
|
|
252
|
+
content="工具调用次数已达到上限,请停止使用工具,并根据已经收集到的信息,对你的任务和发现进行总结,然后直接回复用户。",
|
|
253
|
+
)
|
|
254
|
+
)
|
|
255
|
+
# 再执行最后一步
|
|
256
|
+
async for resp in self.step():
|
|
257
|
+
yield resp
|
|
258
|
+
|
|
233
259
|
async def _handle_function_tools(
|
|
234
260
|
self,
|
|
235
261
|
req: ProviderRequest,
|
|
@@ -376,35 +402,33 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
|
|
|
376
402
|
),
|
|
377
403
|
)
|
|
378
404
|
|
|
379
|
-
# yield the last tool call result
|
|
380
|
-
if tool_call_result_blocks:
|
|
381
|
-
last_tcr_content = str(tool_call_result_blocks[-1].content)
|
|
382
|
-
yield MessageChain(
|
|
383
|
-
type="tool_call_result",
|
|
384
|
-
chain=[
|
|
385
|
-
Json(
|
|
386
|
-
data={
|
|
387
|
-
"id": func_tool_id,
|
|
388
|
-
"ts": time.time(),
|
|
389
|
-
"result": last_tcr_content,
|
|
390
|
-
}
|
|
391
|
-
)
|
|
392
|
-
],
|
|
393
|
-
)
|
|
394
|
-
|
|
395
405
|
elif resp is None:
|
|
396
406
|
# Tool 直接请求发送消息给用户
|
|
397
407
|
# 这里我们将直接结束 Agent Loop。
|
|
398
408
|
# 发送消息逻辑在 ToolExecutor 中处理了。
|
|
399
409
|
logger.warning(
|
|
400
|
-
f"{func_tool_name}
|
|
410
|
+
f"{func_tool_name} 没有没有返回值或者将结果直接发送给用户。"
|
|
401
411
|
)
|
|
402
412
|
self._transition_state(AgentState.DONE)
|
|
403
413
|
self.stats.end_time = time.time()
|
|
414
|
+
tool_call_result_blocks.append(
|
|
415
|
+
ToolCallMessageSegment(
|
|
416
|
+
role="tool",
|
|
417
|
+
tool_call_id=func_tool_id,
|
|
418
|
+
content="*工具没有返回值或者将结果直接发送给了用户*",
|
|
419
|
+
),
|
|
420
|
+
)
|
|
404
421
|
else:
|
|
405
422
|
# 不应该出现其他类型
|
|
406
423
|
logger.warning(
|
|
407
|
-
f"Tool 返回了不支持的类型: {type(resp)}
|
|
424
|
+
f"Tool 返回了不支持的类型: {type(resp)}。",
|
|
425
|
+
)
|
|
426
|
+
tool_call_result_blocks.append(
|
|
427
|
+
ToolCallMessageSegment(
|
|
428
|
+
role="tool",
|
|
429
|
+
tool_call_id=func_tool_id,
|
|
430
|
+
content="*工具返回了不支持的类型,请告诉用户检查这个工具的定义和实现。*",
|
|
431
|
+
),
|
|
408
432
|
)
|
|
409
433
|
|
|
410
434
|
try:
|
|
@@ -426,6 +450,22 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
|
|
|
426
450
|
),
|
|
427
451
|
)
|
|
428
452
|
|
|
453
|
+
# yield the last tool call result
|
|
454
|
+
if tool_call_result_blocks:
|
|
455
|
+
last_tcr_content = str(tool_call_result_blocks[-1].content)
|
|
456
|
+
yield MessageChain(
|
|
457
|
+
type="tool_call_result",
|
|
458
|
+
chain=[
|
|
459
|
+
Json(
|
|
460
|
+
data={
|
|
461
|
+
"id": func_tool_id,
|
|
462
|
+
"ts": time.time(),
|
|
463
|
+
"result": last_tcr_content,
|
|
464
|
+
}
|
|
465
|
+
)
|
|
466
|
+
],
|
|
467
|
+
)
|
|
468
|
+
|
|
429
469
|
# 处理函数调用响应
|
|
430
470
|
if tool_call_result_blocks:
|
|
431
471
|
yield tool_call_result_blocks
|
|
@@ -2,6 +2,7 @@ import traceback
|
|
|
2
2
|
from collections.abc import AsyncGenerator
|
|
3
3
|
|
|
4
4
|
from astrbot.core import logger
|
|
5
|
+
from astrbot.core.agent.message import Message
|
|
5
6
|
from astrbot.core.agent.runners.tool_loop_agent_runner import ToolLoopAgentRunner
|
|
6
7
|
from astrbot.core.astr_agent_context import AstrAgentContext
|
|
7
8
|
from astrbot.core.message.components import Json
|
|
@@ -24,8 +25,25 @@ async def run_agent(
|
|
|
24
25
|
) -> AsyncGenerator[MessageChain | None, None]:
|
|
25
26
|
step_idx = 0
|
|
26
27
|
astr_event = agent_runner.run_context.context.event
|
|
27
|
-
while step_idx < max_step:
|
|
28
|
+
while step_idx < max_step + 1:
|
|
28
29
|
step_idx += 1
|
|
30
|
+
|
|
31
|
+
if step_idx == max_step + 1:
|
|
32
|
+
logger.warning(
|
|
33
|
+
f"Agent reached max steps ({max_step}), forcing a final response."
|
|
34
|
+
)
|
|
35
|
+
if not agent_runner.done():
|
|
36
|
+
# 拔掉所有工具
|
|
37
|
+
if agent_runner.req:
|
|
38
|
+
agent_runner.req.func_tool = None
|
|
39
|
+
# 注入提示词
|
|
40
|
+
agent_runner.run_context.messages.append(
|
|
41
|
+
Message(
|
|
42
|
+
role="user",
|
|
43
|
+
content="工具调用次数已达到上限,请停止使用工具,并根据已经收集到的信息,对你的任务和发现进行总结,然后直接回复用户。",
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
|
|
29
47
|
try:
|
|
30
48
|
async for resp in agent_runner.step():
|
|
31
49
|
if astr_event.is_stopped():
|
|
@@ -209,12 +209,42 @@ async def call_local_llm_tool(
|
|
|
209
209
|
else:
|
|
210
210
|
raise ValueError(f"未知的方法名: {method_name}")
|
|
211
211
|
except ValueError as e:
|
|
212
|
-
|
|
213
|
-
except TypeError:
|
|
214
|
-
|
|
212
|
+
raise Exception(f"Tool execution ValueError: {e}") from e
|
|
213
|
+
except TypeError as e:
|
|
214
|
+
# 获取函数的签名(包括类型),除了第一个 event/context 参数。
|
|
215
|
+
try:
|
|
216
|
+
sig = inspect.signature(handler)
|
|
217
|
+
params = list(sig.parameters.values())
|
|
218
|
+
# 跳过第一个参数(event 或 context)
|
|
219
|
+
if params:
|
|
220
|
+
params = params[1:]
|
|
221
|
+
|
|
222
|
+
param_strs = []
|
|
223
|
+
for param in params:
|
|
224
|
+
param_str = param.name
|
|
225
|
+
if param.annotation != inspect.Parameter.empty:
|
|
226
|
+
# 获取类型注解的字符串表示
|
|
227
|
+
if isinstance(param.annotation, type):
|
|
228
|
+
type_str = param.annotation.__name__
|
|
229
|
+
else:
|
|
230
|
+
type_str = str(param.annotation)
|
|
231
|
+
param_str += f": {type_str}"
|
|
232
|
+
if param.default != inspect.Parameter.empty:
|
|
233
|
+
param_str += f" = {param.default!r}"
|
|
234
|
+
param_strs.append(param_str)
|
|
235
|
+
|
|
236
|
+
handler_param_str = (
|
|
237
|
+
", ".join(param_strs) if param_strs else "(no additional parameters)"
|
|
238
|
+
)
|
|
239
|
+
except Exception:
|
|
240
|
+
handler_param_str = "(unable to inspect signature)"
|
|
241
|
+
|
|
242
|
+
raise Exception(
|
|
243
|
+
f"Tool handler parameter mismatch, please check the handler definition. Handler parameters: {handler_param_str}"
|
|
244
|
+
) from e
|
|
215
245
|
except Exception as e:
|
|
216
246
|
trace_ = traceback.format_exc()
|
|
217
|
-
|
|
247
|
+
raise Exception(f"Tool execution error: {e}. Traceback: {trace_}") from e
|
|
218
248
|
|
|
219
249
|
if not ready_to_call:
|
|
220
250
|
return
|
astrbot/core/config/default.py
CHANGED
|
@@ -321,7 +321,12 @@ class InternalAgentSubStage(Stage):
|
|
|
321
321
|
elif isinstance(req.tool_calls_result, list):
|
|
322
322
|
for tcr in req.tool_calls_result:
|
|
323
323
|
messages.extend(tcr.to_openai_messages())
|
|
324
|
-
messages.append(
|
|
324
|
+
messages.append(
|
|
325
|
+
{
|
|
326
|
+
"role": "assistant",
|
|
327
|
+
"content": llm_response.completion_text or "*No response*",
|
|
328
|
+
}
|
|
329
|
+
)
|
|
325
330
|
messages = list(filter(lambda item: "_no_save" not in item, messages))
|
|
326
331
|
await self.conv_manager.update_conversation(
|
|
327
332
|
event.unified_msg_origin,
|
astrbot/dashboard/routes/chat.py
CHANGED
|
@@ -436,7 +436,7 @@ class ChatRoute(Route):
|
|
|
436
436
|
accumulated_parts = []
|
|
437
437
|
accumulated_text = ""
|
|
438
438
|
accumulated_reasoning = ""
|
|
439
|
-
tool_calls = {}
|
|
439
|
+
# tool_calls = {}
|
|
440
440
|
agent_stats = {}
|
|
441
441
|
except BaseException as e:
|
|
442
442
|
logger.exception(f"WebChat stream unexpected error: {e}", exc_info=True)
|
|
@@ -8,7 +8,7 @@ astrbot/api/platform/__init__.py,sha256=HXvAy_KLtOJspoGVgDtLa7VjIZoF6WK3Puww55yy
|
|
|
8
8
|
astrbot/api/provider/__init__.py,sha256=mJVcon0snjn_xYirk2hntwba6ymIYYC-ZKKmxvx-jok,379
|
|
9
9
|
astrbot/api/star/__init__.py,sha256=OxgHGtWn3lEQGjb4twbpbWnRepUevPu7gxtDAkAsfhQ,250
|
|
10
10
|
astrbot/api/util/__init__.py,sha256=L1O_mFEUDk8V4lEPsT5iiNbIiOVh7HbrNmitqzUWMZg,180
|
|
11
|
-
astrbot/cli/__init__.py,sha256=
|
|
11
|
+
astrbot/cli/__init__.py,sha256=vYMGLIAtrcfVYpfNrLlmi2Xv-qyiORAeTv0GOkx_SJ4,31
|
|
12
12
|
astrbot/cli/__main__.py,sha256=QobgMyFoLNTgI_OYddhGOZ9ZvQeBVjjz79mA2cC2OEU,1758
|
|
13
13
|
astrbot/cli/commands/__init__.py,sha256=eAgppZQIqFO1ylQJFABeYrzQ0oZqPWjtE80aKIPB3ks,149
|
|
14
14
|
astrbot/cli/commands/cmd_conf.py,sha256=6-YLicBt_zjWTzaVLUJ1VQLQPbDEPYACB9IVnN8Zvng,6330
|
|
@@ -22,8 +22,8 @@ astrbot/cli/utils/version_comparator.py,sha256=NVUmshfb5LU4a-S453rI7opqo0QtIHvlT
|
|
|
22
22
|
astrbot/core/__init__.py,sha256=zsaF9IeON4NaHk_Ktr0eB7xQEFC5tUZ4UJCesC3-KHM,1220
|
|
23
23
|
astrbot/core/astr_agent_context.py,sha256=bJnAm_CGzkhMnC99GA_j0Xwmi-OYoBPmgGanuS36DF4,637
|
|
24
24
|
astrbot/core/astr_agent_hooks.py,sha256=QOMtBaamDRiylGIby5D5ApThk94Y_Dcy4gDnhPBHXKo,1073
|
|
25
|
-
astrbot/core/astr_agent_run_util.py,sha256=
|
|
26
|
-
astrbot/core/astr_agent_tool_exec.py,sha256=
|
|
25
|
+
astrbot/core/astr_agent_run_util.py,sha256=D_K2MOhAp0O8tQpAkrciiUhjbgDOo7zewMrXpzjdgsM,5534
|
|
26
|
+
astrbot/core/astr_agent_tool_exec.py,sha256=DpGqVhQzSwL2EN6wfBJrlcwH7b1jLkX5b_1eI5xqUB8,10258
|
|
27
27
|
astrbot/core/astrbot_config_mgr.py,sha256=SUvusfo8Qk89eNpEmduWcXuczJ9g5TBH-VOV69ax28g,8950
|
|
28
28
|
astrbot/core/conversation_mgr.py,sha256=GsirCeMBmgxyaOb3hYNleF_11yyFyAER5PtpM3IUvIQ,15765
|
|
29
29
|
astrbot/core/core_lifecycle.py,sha256=nFuuNA0SJkCAeyoGZmG0LbBAhoq9j-_ajHq71s5tWAA,12796
|
|
@@ -48,7 +48,7 @@ astrbot/core/agent/tool.py,sha256=ITSAmYBp2y-QPWdZkc-KXof3UIHjQ2rmweyUPuYykFA,94
|
|
|
48
48
|
astrbot/core/agent/tool_executor.py,sha256=8GGgVB_JaKGVLQUG1epeL-lvKMqgfQ7mJaOPnVytnXo,438
|
|
49
49
|
astrbot/core/agent/runners/__init__.py,sha256=KwR34OKGVSQpJ_MaGVP_MX5L1SZ4oU-lv4GuMbSF5Ys,65
|
|
50
50
|
astrbot/core/agent/runners/base.py,sha256=OHMt15x1C3O_F3EJI2Nb_3hwggGUkJHuPWWCa1kHX9o,1885
|
|
51
|
-
astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=
|
|
51
|
+
astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=ZXSvTb9SoZ98VfVzneL3pDpoRObasGSU8mTCJB9p91I,19520
|
|
52
52
|
astrbot/core/agent/runners/coze/coze_agent_runner.py,sha256=bc2GImNsBTyXuotl_ohKYiNqws5Dkcms_xmIoUtDJMM,13846
|
|
53
53
|
astrbot/core/agent/runners/coze/coze_api_client.py,sha256=0k8pQsFsbjKdF-jkY91qZWsC8YSaSmwC98TMTK-zqw0,10853
|
|
54
54
|
astrbot/core/agent/runners/dashscope/dashscope_agent_runner.py,sha256=xr3otT0o6kHEy_sWjUv4xh-KmES3fjlowIPrtcKYiVI,13339
|
|
@@ -56,7 +56,7 @@ astrbot/core/agent/runners/dify/dify_agent_runner.py,sha256=LYwpjOcBWf3XlwNVzrDv
|
|
|
56
56
|
astrbot/core/agent/runners/dify/dify_api_client.py,sha256=OXukDVgNx3VmYw6OCzjXyP8JmDWEFuy81sD9XnC4VRo,6530
|
|
57
57
|
astrbot/core/config/__init__.py,sha256=vZjtpC7vr-IvBgSUtbS04C0wpulmCG5tPmcEP1WYE_4,172
|
|
58
58
|
astrbot/core/config/astrbot_config.py,sha256=6bUTnMCOyaS8s6ELsWctDfUFTB53fKJQNu272dZXkdU,6347
|
|
59
|
-
astrbot/core/config/default.py,sha256=
|
|
59
|
+
astrbot/core/config/default.py,sha256=PZqJd9umFqk--hoO3f198YebuJjym1hr1ho0R-TcJEg,147682
|
|
60
60
|
astrbot/core/config/i18n_utils.py,sha256=HJn_0XeeVS9ryCBelYfnc0nEn10LlX702fcSSFrF1J8,3879
|
|
61
61
|
astrbot/core/db/__init__.py,sha256=OnvNaC76hYp28Bq9zkFXMl19zn7w-FC1zxyLgsemGvU,13400
|
|
62
62
|
astrbot/core/db/po.py,sha256=eoI4sjpFb9CwRy6_Gf6-zHVSka6-oJr0LA4qcepqHzU,11804
|
|
@@ -111,7 +111,7 @@ astrbot/core/pipeline/process_stage/stage.py,sha256=tOg6HYGVU1GoY921YBYVO1MTM7a5
|
|
|
111
111
|
astrbot/core/pipeline/process_stage/utils.py,sha256=q4V5G0PZD5b5mPh1lM-6w79LKGpp7RR7-PqYFhWpopM,4061
|
|
112
112
|
astrbot/core/pipeline/process_stage/method/agent_request.py,sha256=GlGrGCsCASC4a3PpG6Oc1907aLdl_PrUMXrFiEiEEzc,2043
|
|
113
113
|
astrbot/core/pipeline/process_stage/method/star_request.py,sha256=C-PTq_Wpq4QMS2ecfRDCcDSX3rYyldfsAN-jAaEEb-w,2430
|
|
114
|
-
astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py,sha256=
|
|
114
|
+
astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py,sha256=RSeEqvJEV33RH6OGHEdDaCYyv6zt7RosG4j-hVdbjnc,21263
|
|
115
115
|
astrbot/core/pipeline/process_stage/method/agent_sub_stages/third_party.py,sha256=LNBRItSpZn0MLP4fyHQ_3gUJ8lnmCwuPlqnZDVFLI6Q,7332
|
|
116
116
|
astrbot/core/pipeline/rate_limit_check/stage.py,sha256=9EVJ0zYtxATFsj7ADyWDYcSGBRqmrMiKWp1kkD9LONI,3962
|
|
117
117
|
astrbot/core/pipeline/respond/stage.py,sha256=RIYGXTG-XvBhgRqaHyJYWlsZjskS9pgV-2jm5o956ho,11042
|
|
@@ -258,7 +258,7 @@ astrbot/dashboard/server.py,sha256=HfmWHj4aqYcTT1re0vD4Fw6BHedg4bcfqpnWiisFWko,9
|
|
|
258
258
|
astrbot/dashboard/utils.py,sha256=KrAv0lnPaVR0bx8yevT1CLGbSNsJizlfkKkPEtVVANI,5355
|
|
259
259
|
astrbot/dashboard/routes/__init__.py,sha256=57ZYHYQfNI-YAiA8K9m2tRJcHzMKcZ02Vu-A_eD0HUE,894
|
|
260
260
|
astrbot/dashboard/routes/auth.py,sha256=rYkvt3MpCY9BhWjG0DUoX3YaBkJT1Id7M2pKqTmXbvo,2946
|
|
261
|
-
astrbot/dashboard/routes/chat.py,sha256=
|
|
261
|
+
astrbot/dashboard/routes/chat.py,sha256=ntQrgrnOTIep_9Ycb1DCZjZBJPtlIJUO2YnTvC1GXFQ,27120
|
|
262
262
|
astrbot/dashboard/routes/command.py,sha256=OLrDDUAE5zpxZMRJ3_IGe-6xFEpPwcXcd-EJ60e9OHI,2862
|
|
263
263
|
astrbot/dashboard/routes/config.py,sha256=v2CQ6rPb1VAyrj9bJNr8g0GoFlzm3qeEuXs2P6kIwQw,42903
|
|
264
264
|
astrbot/dashboard/routes/conversation.py,sha256=TWGY7BJ9QfmbxurAieBrbMmCi4_Ua2klxsAUlSRXbng,14302
|
|
@@ -275,8 +275,8 @@ astrbot/dashboard/routes/static_file.py,sha256=7KnNcOb1BVqSTft114LhGsDkfg69X2jHE
|
|
|
275
275
|
astrbot/dashboard/routes/t2i.py,sha256=F6smxdL99MF7cRw3hqS6-2GErw8Zhsv0V0mfBUeEk-c,8931
|
|
276
276
|
astrbot/dashboard/routes/tools.py,sha256=mMwVFw_VOlpqy_WZg1A-ddGtYa5L5QLWYawl37PT0-c,15354
|
|
277
277
|
astrbot/dashboard/routes/update.py,sha256=qXiqQ_dbqRVftOzGgCQrvK8-qopVK6zKhhVVJ9SK26U,6648
|
|
278
|
-
astrbot-4.10.
|
|
279
|
-
astrbot-4.10.
|
|
280
|
-
astrbot-4.10.
|
|
281
|
-
astrbot-4.10.
|
|
282
|
-
astrbot-4.10.
|
|
278
|
+
astrbot-4.10.0a2.dist-info/METADATA,sha256=dmgs6DYXW_icwZr96p5YFO34byt1_H9dyiey7Ocq568,11927
|
|
279
|
+
astrbot-4.10.0a2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
280
|
+
astrbot-4.10.0a2.dist-info/entry_points.txt,sha256=OEF09YmhBWYuViXrvTLLpstF4ccmNwDL8r7nnFD0pfI,53
|
|
281
|
+
astrbot-4.10.0a2.dist-info/licenses/LICENSE,sha256=zPfQj5Mq8-gThIiBcxETr7t8gND9bZWOjTGQAr80TQI,34500
|
|
282
|
+
astrbot-4.10.0a2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|