AstrBot 4.12.4__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/builtin_stars/astrbot/process_llm_request.py +42 -1
- astrbot/cli/__init__.py +1 -1
- astrbot/core/agent/runners/tool_loop_agent_runner.py +91 -1
- astrbot/core/agent/tool.py +61 -20
- astrbot/core/astr_agent_tool_exec.py +2 -2
- astrbot/core/{sandbox → computer}/booters/base.py +4 -4
- astrbot/core/{sandbox → computer}/booters/boxlite.py +2 -2
- astrbot/core/computer/booters/local.py +234 -0
- astrbot/core/{sandbox → computer}/booters/shipyard.py +2 -2
- astrbot/core/computer/computer_client.py +102 -0
- astrbot/core/{sandbox → computer}/tools/__init__.py +2 -1
- astrbot/core/{sandbox → computer}/tools/fs.py +1 -1
- astrbot/core/computer/tools/python.py +94 -0
- astrbot/core/{sandbox → computer}/tools/shell.py +13 -5
- astrbot/core/config/default.py +61 -9
- astrbot/core/db/__init__.py +3 -0
- astrbot/core/db/po.py +23 -61
- astrbot/core/db/sqlite.py +19 -1
- astrbot/core/message/components.py +2 -2
- astrbot/core/persona_mgr.py +8 -0
- astrbot/core/pipeline/context_utils.py +2 -2
- astrbot/core/pipeline/preprocess_stage/stage.py +1 -1
- astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py +21 -6
- astrbot/core/pipeline/process_stage/utils.py +19 -4
- astrbot/core/pipeline/scheduler.py +1 -1
- astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +3 -3
- astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +5 -7
- astrbot/core/provider/manager.py +31 -0
- astrbot/core/provider/sources/gemini_source.py +12 -9
- astrbot/core/skills/__init__.py +3 -0
- astrbot/core/skills/skill_manager.py +238 -0
- astrbot/core/star/command_management.py +1 -1
- astrbot/core/star/config.py +1 -1
- astrbot/core/star/filter/command.py +1 -1
- astrbot/core/star/filter/custom_filter.py +2 -2
- astrbot/core/star/register/star_handler.py +1 -1
- astrbot/core/utils/astrbot_path.py +6 -0
- astrbot/dashboard/routes/__init__.py +2 -0
- astrbot/dashboard/routes/config.py +236 -2
- astrbot/dashboard/routes/persona.py +7 -0
- astrbot/dashboard/routes/skills.py +148 -0
- astrbot/dashboard/routes/util.py +102 -0
- astrbot/dashboard/server.py +19 -5
- {astrbot-4.12.4.dist-info → astrbot-4.13.1.dist-info}/METADATA +2 -2
- {astrbot-4.12.4.dist-info → astrbot-4.13.1.dist-info}/RECORD +52 -47
- astrbot/core/sandbox/sandbox_client.py +0 -52
- astrbot/core/sandbox/tools/python.py +0 -74
- /astrbot/core/{sandbox → computer}/olayer/__init__.py +0 -0
- /astrbot/core/{sandbox → computer}/olayer/filesystem.py +0 -0
- /astrbot/core/{sandbox → computer}/olayer/python.py +0 -0
- /astrbot/core/{sandbox → computer}/olayer/shell.py +0 -0
- {astrbot-4.12.4.dist-info → astrbot-4.13.1.dist-info}/WHEEL +0 -0
- {astrbot-4.12.4.dist-info → astrbot-4.13.1.dist-info}/entry_points.txt +0 -0
- {astrbot-4.12.4.dist-info → astrbot-4.13.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import traceback
|
|
3
|
+
|
|
4
|
+
from quart import request
|
|
5
|
+
|
|
6
|
+
from astrbot.core import DEMO_MODE, logger
|
|
7
|
+
from astrbot.core.computer.computer_client import get_booter
|
|
8
|
+
from astrbot.core.skills.skill_manager import SkillManager
|
|
9
|
+
from astrbot.core.utils.astrbot_path import get_astrbot_temp_path
|
|
10
|
+
|
|
11
|
+
from .route import Response, Route, RouteContext
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SkillsRoute(Route):
|
|
15
|
+
def __init__(self, context: RouteContext, core_lifecycle) -> None:
|
|
16
|
+
super().__init__(context)
|
|
17
|
+
self.core_lifecycle = core_lifecycle
|
|
18
|
+
self.routes = {
|
|
19
|
+
"/skills": ("GET", self.get_skills),
|
|
20
|
+
"/skills/upload": ("POST", self.upload_skill),
|
|
21
|
+
"/skills/update": ("POST", self.update_skill),
|
|
22
|
+
"/skills/delete": ("POST", self.delete_skill),
|
|
23
|
+
}
|
|
24
|
+
self.register_routes()
|
|
25
|
+
|
|
26
|
+
async def get_skills(self):
|
|
27
|
+
try:
|
|
28
|
+
cfg = self.core_lifecycle.astrbot_config.get("provider_settings", {}).get(
|
|
29
|
+
"skills", {}
|
|
30
|
+
)
|
|
31
|
+
runtime = cfg.get("runtime", "local")
|
|
32
|
+
skills = SkillManager().list_skills(
|
|
33
|
+
active_only=False, runtime=runtime, show_sandbox_path=False
|
|
34
|
+
)
|
|
35
|
+
return Response().ok([skill.__dict__ for skill in skills]).__dict__
|
|
36
|
+
except Exception as e:
|
|
37
|
+
logger.error(traceback.format_exc())
|
|
38
|
+
return Response().error(str(e)).__dict__
|
|
39
|
+
|
|
40
|
+
async def upload_skill(self):
|
|
41
|
+
if DEMO_MODE:
|
|
42
|
+
return (
|
|
43
|
+
Response()
|
|
44
|
+
.error("You are not permitted to do this operation in demo mode")
|
|
45
|
+
.__dict__
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
temp_path = None
|
|
49
|
+
try:
|
|
50
|
+
files = await request.files
|
|
51
|
+
file = files.get("file")
|
|
52
|
+
if not file:
|
|
53
|
+
return Response().error("Missing file").__dict__
|
|
54
|
+
filename = os.path.basename(file.filename or "skill.zip")
|
|
55
|
+
if not filename.lower().endswith(".zip"):
|
|
56
|
+
return Response().error("Only .zip files are supported").__dict__
|
|
57
|
+
|
|
58
|
+
temp_dir = get_astrbot_temp_path()
|
|
59
|
+
os.makedirs(temp_dir, exist_ok=True)
|
|
60
|
+
temp_path = os.path.join(temp_dir, filename)
|
|
61
|
+
await file.save(temp_path)
|
|
62
|
+
|
|
63
|
+
cfg = self.core_lifecycle.astrbot_config.get("provider_settings", {}).get(
|
|
64
|
+
"skills", {}
|
|
65
|
+
)
|
|
66
|
+
runtime = cfg.get("runtime", "local")
|
|
67
|
+
if runtime == "sandbox":
|
|
68
|
+
sandbox_enabled = (
|
|
69
|
+
self.core_lifecycle.astrbot_config.get("provider_settings", {})
|
|
70
|
+
.get("sandbox", {})
|
|
71
|
+
.get("enable", False)
|
|
72
|
+
)
|
|
73
|
+
if not sandbox_enabled:
|
|
74
|
+
return (
|
|
75
|
+
Response()
|
|
76
|
+
.error(
|
|
77
|
+
"Sandbox is not enabled. Please enable sandbox before using sandbox runtime."
|
|
78
|
+
)
|
|
79
|
+
.__dict__
|
|
80
|
+
)
|
|
81
|
+
skill_mgr = SkillManager()
|
|
82
|
+
skill_name = skill_mgr.install_skill_from_zip(temp_path, overwrite=True)
|
|
83
|
+
|
|
84
|
+
if runtime == "sandbox":
|
|
85
|
+
sb = await get_booter(self.core_lifecycle.star_context, "skills-upload")
|
|
86
|
+
remote_root = "/home/shared/skills"
|
|
87
|
+
remote_zip = f"{remote_root}/{skill_name}.zip"
|
|
88
|
+
await sb.shell.exec(f"mkdir -p {remote_root}")
|
|
89
|
+
upload_result = await sb.upload_file(temp_path, remote_zip)
|
|
90
|
+
if not upload_result.get("success", False):
|
|
91
|
+
return (
|
|
92
|
+
Response().error("Failed to upload skill to sandbox").__dict__
|
|
93
|
+
)
|
|
94
|
+
await sb.shell.exec(
|
|
95
|
+
f"unzip -o {remote_zip} -d {remote_root} && rm -f {remote_zip}"
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
return (
|
|
99
|
+
Response()
|
|
100
|
+
.ok({"name": skill_name}, "Skill uploaded successfully.")
|
|
101
|
+
.__dict__
|
|
102
|
+
)
|
|
103
|
+
except Exception as e:
|
|
104
|
+
logger.error(traceback.format_exc())
|
|
105
|
+
return Response().error(str(e)).__dict__
|
|
106
|
+
finally:
|
|
107
|
+
if temp_path and os.path.exists(temp_path):
|
|
108
|
+
try:
|
|
109
|
+
os.remove(temp_path)
|
|
110
|
+
except Exception:
|
|
111
|
+
logger.warning(f"Failed to remove temp skill file: {temp_path}")
|
|
112
|
+
|
|
113
|
+
async def update_skill(self):
|
|
114
|
+
if DEMO_MODE:
|
|
115
|
+
return (
|
|
116
|
+
Response()
|
|
117
|
+
.error("You are not permitted to do this operation in demo mode")
|
|
118
|
+
.__dict__
|
|
119
|
+
)
|
|
120
|
+
try:
|
|
121
|
+
data = await request.get_json()
|
|
122
|
+
name = data.get("name")
|
|
123
|
+
active = data.get("active", True)
|
|
124
|
+
if not name:
|
|
125
|
+
return Response().error("Missing skill name").__dict__
|
|
126
|
+
SkillManager().set_skill_active(name, bool(active))
|
|
127
|
+
return Response().ok({"name": name, "active": bool(active)}).__dict__
|
|
128
|
+
except Exception as e:
|
|
129
|
+
logger.error(traceback.format_exc())
|
|
130
|
+
return Response().error(str(e)).__dict__
|
|
131
|
+
|
|
132
|
+
async def delete_skill(self):
|
|
133
|
+
if DEMO_MODE:
|
|
134
|
+
return (
|
|
135
|
+
Response()
|
|
136
|
+
.error("You are not permitted to do this operation in demo mode")
|
|
137
|
+
.__dict__
|
|
138
|
+
)
|
|
139
|
+
try:
|
|
140
|
+
data = await request.get_json()
|
|
141
|
+
name = data.get("name")
|
|
142
|
+
if not name:
|
|
143
|
+
return Response().error("Missing skill name").__dict__
|
|
144
|
+
SkillManager().delete_skill(name)
|
|
145
|
+
return Response().ok({"name": name}).__dict__
|
|
146
|
+
except Exception as e:
|
|
147
|
+
logger.error(traceback.format_exc())
|
|
148
|
+
return Response().error(str(e)).__dict__
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"""Dashboard 路由工具集。
|
|
2
|
+
|
|
3
|
+
这里放一些 dashboard routes 可复用的小工具函数。
|
|
4
|
+
|
|
5
|
+
目前主要用于「配置文件上传(file 类型配置项)」功能:
|
|
6
|
+
- 清洗/规范化用户可控的文件名与相对路径
|
|
7
|
+
- 将配置 key 映射到配置项独立子目录
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_schema_item(schema: dict | None, key_path: str) -> dict | None:
|
|
14
|
+
"""按 dot-path 获取 schema 的节点。
|
|
15
|
+
|
|
16
|
+
同时支持:
|
|
17
|
+
- 扁平 schema(直接 key 命中)
|
|
18
|
+
- 嵌套 object schema({type: "object", items: {...}})
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
if not isinstance(schema, dict) or not key_path:
|
|
22
|
+
return None
|
|
23
|
+
if key_path in schema:
|
|
24
|
+
return schema.get(key_path)
|
|
25
|
+
|
|
26
|
+
current = schema
|
|
27
|
+
parts = key_path.split(".")
|
|
28
|
+
for idx, part in enumerate(parts):
|
|
29
|
+
if part not in current:
|
|
30
|
+
return None
|
|
31
|
+
meta = current.get(part)
|
|
32
|
+
if idx == len(parts) - 1:
|
|
33
|
+
return meta
|
|
34
|
+
if not isinstance(meta, dict) or meta.get("type") != "object":
|
|
35
|
+
return None
|
|
36
|
+
current = meta.get("items", {})
|
|
37
|
+
return None
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def sanitize_filename(name: str) -> str:
|
|
41
|
+
"""清洗上传文件名,避免路径穿越与非法名称。
|
|
42
|
+
|
|
43
|
+
- 丢弃目录部分,仅保留 basename
|
|
44
|
+
- 将路径分隔符替换为下划线
|
|
45
|
+
- 拒绝空字符串 / "." / ".."
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
cleaned = os.path.basename(name).strip()
|
|
49
|
+
if not cleaned or cleaned in {".", ".."}:
|
|
50
|
+
return ""
|
|
51
|
+
for sep in (os.sep, os.altsep):
|
|
52
|
+
if sep:
|
|
53
|
+
cleaned = cleaned.replace(sep, "_")
|
|
54
|
+
return cleaned
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def sanitize_path_segment(segment: str) -> str:
|
|
58
|
+
"""清洗目录片段(URL/path 安全,避免穿越)。
|
|
59
|
+
|
|
60
|
+
仅保留 [A-Za-z0-9_-],其余替换为 "_"
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
cleaned = []
|
|
64
|
+
for ch in segment:
|
|
65
|
+
if (
|
|
66
|
+
("a" <= ch <= "z")
|
|
67
|
+
or ("A" <= ch <= "Z")
|
|
68
|
+
or ch.isdigit()
|
|
69
|
+
or ch
|
|
70
|
+
in {
|
|
71
|
+
"-",
|
|
72
|
+
"_",
|
|
73
|
+
}
|
|
74
|
+
):
|
|
75
|
+
cleaned.append(ch)
|
|
76
|
+
else:
|
|
77
|
+
cleaned.append("_")
|
|
78
|
+
result = "".join(cleaned).strip("_")
|
|
79
|
+
return result or "_"
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def config_key_to_folder(key_path: str) -> str:
|
|
83
|
+
"""将 dot-path 的配置 key 转成稳定的文件夹路径。"""
|
|
84
|
+
|
|
85
|
+
parts = [sanitize_path_segment(p) for p in key_path.split(".") if p]
|
|
86
|
+
return "/".join(parts) if parts else "_"
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def normalize_rel_path(rel_path: str | None) -> str | None:
|
|
90
|
+
"""规范化用户传入的相对路径,并阻止路径穿越。"""
|
|
91
|
+
|
|
92
|
+
if not isinstance(rel_path, str):
|
|
93
|
+
return None
|
|
94
|
+
rel = rel_path.replace("\\", "/").lstrip("/")
|
|
95
|
+
if not rel:
|
|
96
|
+
return None
|
|
97
|
+
parts = [p for p in rel.split("/") if p]
|
|
98
|
+
if any(part in {".", ".."} for part in parts):
|
|
99
|
+
return None
|
|
100
|
+
if rel.startswith("../") or "/../" in rel:
|
|
101
|
+
return None
|
|
102
|
+
return "/".join(parts)
|
astrbot/dashboard/server.py
CHANGED
|
@@ -7,6 +7,8 @@ from typing import cast
|
|
|
7
7
|
import jwt
|
|
8
8
|
import psutil
|
|
9
9
|
from flask.json.provider import DefaultJSONProvider
|
|
10
|
+
from hypercorn.asyncio import serve
|
|
11
|
+
from hypercorn.config import Config as HyperConfig
|
|
10
12
|
from psutil._common import addr as psutil_addr
|
|
11
13
|
from quart import Quart, g, jsonify, request
|
|
12
14
|
from quart.logging import default_handler
|
|
@@ -77,6 +79,7 @@ class AstrBotDashboard:
|
|
|
77
79
|
self.chat_route = ChatRoute(self.context, db, core_lifecycle)
|
|
78
80
|
self.chatui_project_route = ChatUIProjectRoute(self.context, db)
|
|
79
81
|
self.tools_root = ToolsRoute(self.context, core_lifecycle)
|
|
82
|
+
self.skills_route = SkillsRoute(self.context, core_lifecycle)
|
|
80
83
|
self.conversation_route = ConversationRoute(self.context, db, core_lifecycle)
|
|
81
84
|
self.file_route = FileRoute(self.context)
|
|
82
85
|
self.session_management_route = SessionManagementRoute(
|
|
@@ -244,11 +247,22 @@ class AstrBotDashboard:
|
|
|
244
247
|
|
|
245
248
|
logger.info(display)
|
|
246
249
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
# 配置 Hypercorn
|
|
251
|
+
config = HyperConfig()
|
|
252
|
+
config.bind = [f"{host}:{port}"]
|
|
253
|
+
|
|
254
|
+
# 根据配置决定是否禁用访问日志
|
|
255
|
+
disable_access_log = self.core_lifecycle.astrbot_config.get(
|
|
256
|
+
"dashboard", {}
|
|
257
|
+
).get("disable_access_log", True)
|
|
258
|
+
if disable_access_log:
|
|
259
|
+
config.accesslog = None
|
|
260
|
+
else:
|
|
261
|
+
# 启用访问日志,使用简洁格式
|
|
262
|
+
config.accesslog = "-"
|
|
263
|
+
config.access_log_format = "%(h)s %(r)s %(s)s %(b)s %(D)s"
|
|
264
|
+
|
|
265
|
+
return serve(self.app, config, shutdown_trigger=self.shutdown_trigger)
|
|
252
266
|
|
|
253
267
|
async def shutdown_trigger(self):
|
|
254
268
|
await self.shutdown_event.wait()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AstrBot
|
|
3
|
-
Version: 4.
|
|
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 个插件可一键安装。
|
|
@@ -11,7 +11,7 @@ astrbot/api/util/__init__.py,sha256=L1O_mFEUDk8V4lEPsT5iiNbIiOVh7HbrNmitqzUWMZg,
|
|
|
11
11
|
astrbot/builtin_stars/astrbot/long_term_memory.py,sha256=Gra7dqiqXLBH_u4M6TZmu49lxiolotbDNTwbh2aVTiA,7676
|
|
12
12
|
astrbot/builtin_stars/astrbot/main.py,sha256=KmiWqfQ1E7VR0Grf4jnO8d5_8tJJINbmFceAQ0FPeMU,4864
|
|
13
13
|
astrbot/builtin_stars/astrbot/metadata.yaml,sha256=GCPK0piMKr4C6Bb0kaBJYhiqPDoMEAYJJp2MV5pXs4k,197
|
|
14
|
-
astrbot/builtin_stars/astrbot/process_llm_request.py,sha256=
|
|
14
|
+
astrbot/builtin_stars/astrbot/process_llm_request.py,sha256=oog7JIW2bZhaz8OeuqP4AUAMX96kglvmlVbvDxTwHpA,12286
|
|
15
15
|
astrbot/builtin_stars/builtin_commands/main.py,sha256=T8bNer22YgFkKZbLn9Zl-5Y1SIbKpQe_HvDJpUiyte4,7613
|
|
16
16
|
astrbot/builtin_stars/builtin_commands/metadata.yaml,sha256=x0URUKI3S14RRXQ-ewgJy4dYXMKxZcEo2pSKeApGleg,152
|
|
17
17
|
astrbot/builtin_stars/builtin_commands/commands/__init__.py,sha256=jHIh8Dg5EX5FcyWCEey-z84-iPVSBEamIYwhR75c4Rk,705
|
|
@@ -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=
|
|
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
|
|
@@ -52,7 +52,7 @@ astrbot/core/__init__.py,sha256=zsaF9IeON4NaHk_Ktr0eB7xQEFC5tUZ4UJCesC3-KHM,1220
|
|
|
52
52
|
astrbot/core/astr_agent_context.py,sha256=bJnAm_CGzkhMnC99GA_j0Xwmi-OYoBPmgGanuS36DF4,637
|
|
53
53
|
astrbot/core/astr_agent_hooks.py,sha256=FTCQqhl-N8b163nxoPeoyfqhSGCG0bcAmnF1dAHMOm8,3020
|
|
54
54
|
astrbot/core/astr_agent_run_util.py,sha256=kPlWu2nLXfJzZddbtuoca0iZph9VRTJgdC9cLQf5UCQ,13592
|
|
55
|
-
astrbot/core/astr_agent_tool_exec.py,sha256=
|
|
55
|
+
astrbot/core/astr_agent_tool_exec.py,sha256=VPCJqVK4Teyrg8UgvUywtwKfLbJ29dZ0bj-NTNYzdmQ,10256
|
|
56
56
|
astrbot/core/astrbot_config_mgr.py,sha256=SUvusfo8Qk89eNpEmduWcXuczJ9g5TBH-VOV69ax28g,8950
|
|
57
57
|
astrbot/core/conversation_mgr.py,sha256=iELU-454tCOFRVs0DwJLZvx59mUSD55TYLlCVTEccyQ,15968
|
|
58
58
|
astrbot/core/core_lifecycle.py,sha256=gWzOi16v4EYJ176UVKV4L4cnwkZArIwZOj0YEYlm_ck,12847
|
|
@@ -61,7 +61,7 @@ astrbot/core/exceptions.py,sha256=GVCUgAjpvUHLL59MkJalFrSp_HbtliChu7XII_Px2WM,21
|
|
|
61
61
|
astrbot/core/file_token_service.py,sha256=8X0Qyo-NPGhtxy6IcRsJg7Z2tx_ULPf_7OKvw-KBk6o,3317
|
|
62
62
|
astrbot/core/initial_loader.py,sha256=q798G8wEti7-p3UC0y1GB3MOK-kO6z1Nt826iO5nJVA,1802
|
|
63
63
|
astrbot/core/log.py,sha256=PfybPaZAL_eab7r9nPIa_1nCXdhMMa3iqHg1Ogh3r1c,9116
|
|
64
|
-
astrbot/core/persona_mgr.py,sha256
|
|
64
|
+
astrbot/core/persona_mgr.py,sha256=whlJNS5FiFGZ8CwLBoJGVcWr3ZuLeZx3h6OB4YI17e0,12883
|
|
65
65
|
astrbot/core/platform_message_history_mgr.py,sha256=0frxrq6Bt18OXbt24uRnQl039wpi2gK5L9ONLtBuMsM,1580
|
|
66
66
|
astrbot/core/umop_config_router.py,sha256=K1Ya1Ke5iTZgrxgRp7VEiREAI2BcSGYeM3Os_05dUkE,3733
|
|
67
67
|
astrbot/core/updator.py,sha256=-F9elTgp4UwCdGEPwUwA0SAMQpouvAruktH4uh6nTwY,4666
|
|
@@ -73,7 +73,7 @@ astrbot/core/agent/mcp_client.py,sha256=u52GPgpeZ1DCCVbI6x4kOGyodD_kweB8H1OgaVg-
|
|
|
73
73
|
astrbot/core/agent/message.py,sha256=ufmUrXjboQHi6j7PGttSR5pk-degwjR1kgV3q0slauw,6901
|
|
74
74
|
astrbot/core/agent/response.py,sha256=g1aw5zE3Y_PsU7z1SVrNTJRlGnqdyuqG5-49LewsL2E,859
|
|
75
75
|
astrbot/core/agent/run_context.py,sha256=PJYgGlq_m6eBo1ftHE0M37UzOwTcXJNeKgKri1NC2Hk,677
|
|
76
|
-
astrbot/core/agent/tool.py,sha256=
|
|
76
|
+
astrbot/core/agent/tool.py,sha256=5MmvtvY4pDQVriuwIzwGSyene-qeFY0gy7ynqf3U9s8,11019
|
|
77
77
|
astrbot/core/agent/tool_executor.py,sha256=8GGgVB_JaKGVLQUG1epeL-lvKMqgfQ7mJaOPnVytnXo,438
|
|
78
78
|
astrbot/core/agent/context/compressor.py,sha256=YzMv7CLOIz96d2ZgT4Z-K4kx-mh82Es3VQwE_lkM4Jc,8319
|
|
79
79
|
astrbot/core/agent/context/config.py,sha256=Dtta1VYxo0alm9Zd7I2w1Aa7ZX5Nn-bu_Wu6zuPPSOU,1424
|
|
@@ -82,7 +82,7 @@ astrbot/core/agent/context/token_counter.py,sha256=LuGNzcqE5_25VTg8qNXhI1DR-M58I
|
|
|
82
82
|
astrbot/core/agent/context/truncator.py,sha256=KSmdVj0XsdTZRpx5LzleVg_D_G1lSe0CGpk7ie5Q1vI,4578
|
|
83
83
|
astrbot/core/agent/runners/__init__.py,sha256=KwR34OKGVSQpJ_MaGVP_MX5L1SZ4oU-lv4GuMbSF5Ys,65
|
|
84
84
|
astrbot/core/agent/runners/base.py,sha256=OHMt15x1C3O_F3EJI2Nb_3hwggGUkJHuPWWCa1kHX9o,1885
|
|
85
|
-
astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=
|
|
85
|
+
astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=WiiEQReoSgL5-58xDF0mvyR8HR2FZHsaf7L9kjAL3fE,26737
|
|
86
86
|
astrbot/core/agent/runners/coze/coze_agent_runner.py,sha256=bc2GImNsBTyXuotl_ohKYiNqws5Dkcms_xmIoUtDJMM,13846
|
|
87
87
|
astrbot/core/agent/runners/coze/coze_api_client.py,sha256=0k8pQsFsbjKdF-jkY91qZWsC8YSaSmwC98TMTK-zqw0,10853
|
|
88
88
|
astrbot/core/agent/runners/dashscope/dashscope_agent_runner.py,sha256=xr3otT0o6kHEy_sWjUv4xh-KmES3fjlowIPrtcKYiVI,13339
|
|
@@ -92,13 +92,26 @@ astrbot/core/backup/__init__.py,sha256=8uBY2FPYWfIsVZcAgfMWh5-Kwkd50HtyiM0gCETuD
|
|
|
92
92
|
astrbot/core/backup/constants.py,sha256=_e-SjZ-uvithscUqnqvPVtIPWN3PBPkSu4yHHKM7pHM,2251
|
|
93
93
|
astrbot/core/backup/exporter.py,sha256=tULFmXhYqRhJtAwePFkxXMSKqct1MSMyISv9LrfKwVU,19058
|
|
94
94
|
astrbot/core/backup/importer.py,sha256=efGW5-5ZAfvN1mg4rcc5OrcFTLfyj7L9T0Yd7SBUlNo,28618
|
|
95
|
+
astrbot/core/computer/computer_client.py,sha256=uy7l26qzOg_YM71jPdxcLrY6P6A37hndhP8LnG0HItQ,3432
|
|
96
|
+
astrbot/core/computer/booters/base.py,sha256=NgkkvkrTB4iaoIOck86FCtWNPwPhSo4-AuMB3GPKJGY,819
|
|
97
|
+
astrbot/core/computer/booters/boxlite.py,sha256=U1TsVqzm3qvbcQhB4Q1k7XBlmoiVam9iY0cpeazL7eQ,6495
|
|
98
|
+
astrbot/core/computer/booters/local.py,sha256=ILZfH7nH0MdHr0qAT0xsvuYDrf7Zs598__q5nmdIEO8,7358
|
|
99
|
+
astrbot/core/computer/booters/shipyard.py,sha256=L-SW_j2eNaxgUgfswup6ndXoT6mHIV3kk0fiNuLsLKw,2077
|
|
100
|
+
astrbot/core/computer/olayer/__init__.py,sha256=iNRCSk_uyTUJ_xXeoR2LOgPwziXwrisd8cokFcSuIp0,186
|
|
101
|
+
astrbot/core/computer/olayer/filesystem.py,sha256=e5vgzxZJlqxJctS2EAkHONGvESYbq52ZvVFQBfGGP8w,865
|
|
102
|
+
astrbot/core/computer/olayer/python.py,sha256=ksv0qdOgUFMWyb9iYSI3pLLSiBznojjerQv7y6En7co,368
|
|
103
|
+
astrbot/core/computer/olayer/shell.py,sha256=8vaNRpX_EjU0gXVT3rii1JFsYAyqTLlCr4fs7nZ-kQ0,430
|
|
104
|
+
astrbot/core/computer/tools/__init__.py,sha256=iFsuCjjyNIlkmxOXOSarXW70fGbXNc9ptT8QmzS6Jq4,259
|
|
105
|
+
astrbot/core/computer/tools/fs.py,sha256=OmSaKHpbhLVw-9Nj3ug8ZOBSBlghGfhg_qajK1_5X1o,6871
|
|
106
|
+
astrbot/core/computer/tools/python.py,sha256=E6-eRarOjE6AhYioOj5gZhfn10S3fC8uHjO3u0ThO5M,3031
|
|
107
|
+
astrbot/core/computer/tools/shell.py,sha256=b2RWis65YJtUZHhmsLZI1L1LRvnfMlsZcXL4KPbqq_s,2211
|
|
95
108
|
astrbot/core/config/__init__.py,sha256=vZjtpC7vr-IvBgSUtbS04C0wpulmCG5tPmcEP1WYE_4,172
|
|
96
109
|
astrbot/core/config/astrbot_config.py,sha256=5r2VhCNO4VuGCqct12g10-TcvAKyXV40-suk5vRMGns,6436
|
|
97
|
-
astrbot/core/config/default.py,sha256=
|
|
110
|
+
astrbot/core/config/default.py,sha256=ySh-MpB68hAF9YIx_c830FrEO0_f8BS0dV5IFxa02fI,160460
|
|
98
111
|
astrbot/core/config/i18n_utils.py,sha256=HJn_0XeeVS9ryCBelYfnc0nEn10LlX702fcSSFrF1J8,3879
|
|
99
|
-
astrbot/core/db/__init__.py,sha256=
|
|
100
|
-
astrbot/core/db/po.py,sha256=
|
|
101
|
-
astrbot/core/db/sqlite.py,sha256=
|
|
112
|
+
astrbot/core/db/__init__.py,sha256=ldEFdHkuQn_WpSNEC9X6knfthF2lD5YYLLZD4phwtdg,18515
|
|
113
|
+
astrbot/core/db/po.py,sha256=qGS8X2oXc1BWQCXHxqroBr9PhYCtXS6Of4Msm7NvMpI,13786
|
|
114
|
+
astrbot/core/db/sqlite.py,sha256=ry_FhBHXDXMrfBb9Yq1qHAc-8rJEj0UP8l6pwRx1USA,58647
|
|
102
115
|
astrbot/core/db/migration/helper.py,sha256=Kogq0FLJdvWTDuAVWLT1PlTGGJcWkDMWO37KM-G8lTk,2087
|
|
103
116
|
astrbot/core/db/migration/migra_3_to_4.py,sha256=AZkywKcS2aKo81k04uD2qxHsPqKWRfVz9smEnHDxWqE,15343
|
|
104
117
|
astrbot/core/db/migration/migra_45_to_46.py,sha256=wQk8NUiCNgmpSczO9U-OW6mMRHPWtJDlKuTCOGF8-WY,1560
|
|
@@ -133,24 +146,24 @@ astrbot/core/knowledge_base/retrieval/hit_stopwords.txt,sha256=8LikiRxpjLdAfJYyO
|
|
|
133
146
|
astrbot/core/knowledge_base/retrieval/manager.py,sha256=1kjjcBco_TdfZ1g6mEp7lb9AVkHr1dfBHVqgWVAiBsw,8560
|
|
134
147
|
astrbot/core/knowledge_base/retrieval/rank_fusion.py,sha256=OeE4dSAsmyCt_ssAnMf7CQ4tQHlBFxjePgXVf_YwHmY,4441
|
|
135
148
|
astrbot/core/knowledge_base/retrieval/sparse_retriever.py,sha256=sOCZ9I636j3P5WGxjKXVu7Amp-2DB9jQVQn96Ff7asI,3815
|
|
136
|
-
astrbot/core/message/components.py,sha256=
|
|
149
|
+
astrbot/core/message/components.py,sha256=eW0GQqdYFOzTBSeLl42zQB7QOdm97CWWhRar4uWz5GE,25895
|
|
137
150
|
astrbot/core/message/message_event_result.py,sha256=1jC6NLeO7lzcTCi2NO28057sWpTsDabICkmGsiggyhk,7204
|
|
138
151
|
astrbot/core/pipeline/__init__.py,sha256=nEepE3tnYYo0EYnzdLLyrp_k7XYg0LpQ3W6QuEeGL6k,1461
|
|
139
152
|
astrbot/core/pipeline/context.py,sha256=jfEyX9i34XM7uqeqqK6rKRDgBXfsV9UHgRpf9Wj_hnI,505
|
|
140
|
-
astrbot/core/pipeline/context_utils.py,sha256=
|
|
141
|
-
astrbot/core/pipeline/scheduler.py,sha256=
|
|
153
|
+
astrbot/core/pipeline/context_utils.py,sha256=Fvx_f7zi0VhgKCM3jBPhvB3V74oBc7m_KQdAeCKqvPo,3661
|
|
154
|
+
astrbot/core/pipeline/scheduler.py,sha256=2iMvyblMwxxPxWO1Aj0_RPqm5Dqm9kTvsr3a97REedo,3497
|
|
142
155
|
astrbot/core/pipeline/stage.py,sha256=hpzghbberezaBJtb2cwhY8x0xi6lZrgWfD2BYv-te1g,1350
|
|
143
156
|
astrbot/core/pipeline/content_safety_check/stage.py,sha256=wzHadhasKyYswVXfRJ_8My6S3mo_0Xjm6DF95TxD57g,1389
|
|
144
157
|
astrbot/core/pipeline/content_safety_check/strategies/__init__.py,sha256=47gYlyvW-Dr401fO0dMAAAmMXnSkTI63MnYak3GGvNw,164
|
|
145
158
|
astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py,sha256=-DvF8O9dZ7PDzRtQwYmIJfYHz1aA5C_gKafGw9IVgYs,1005
|
|
146
159
|
astrbot/core/pipeline/content_safety_check/strategies/keywords.py,sha256=N3bR19Deb3a-DOE-3hiuogsC068uYNL25fCe9BVkKKA,905
|
|
147
160
|
astrbot/core/pipeline/content_safety_check/strategies/strategy.py,sha256=XM2c-6apssEtAllMAI6BUXaEN_t2XINHcCoAudeKNwc,1206
|
|
148
|
-
astrbot/core/pipeline/preprocess_stage/stage.py,sha256=
|
|
161
|
+
astrbot/core/pipeline/preprocess_stage/stage.py,sha256=swnXm88qWvXPzYi75RpR-phef__NNyY7664fQKEl86U,4201
|
|
149
162
|
astrbot/core/pipeline/process_stage/stage.py,sha256=tOg6HYGVU1GoY921YBYVO1MTM7a55M0N8uB9tOoTomg,2406
|
|
150
|
-
astrbot/core/pipeline/process_stage/utils.py,sha256=
|
|
163
|
+
astrbot/core/pipeline/process_stage/utils.py,sha256=aOAB6A-drxvoO3XYnncCbteW_DqCelR7cnSDqeb7MRM,9379
|
|
151
164
|
astrbot/core/pipeline/process_stage/method/agent_request.py,sha256=vHC2Z73Fe96iW4j6ZbNvWQkfXD49pVWy6XKoG-20CS8,2049
|
|
152
165
|
astrbot/core/pipeline/process_stage/method/star_request.py,sha256=C-PTq_Wpq4QMS2ecfRDCcDSX3rYyldfsAN-jAaEEb-w,2430
|
|
153
|
-
astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py,sha256=
|
|
166
|
+
astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py,sha256=f_KTw7GRXGGnQa3OEsb5l5PN-v_0_zvaQR-cmf6s1Gc,33955
|
|
154
167
|
astrbot/core/pipeline/process_stage/method/agent_sub_stages/third_party.py,sha256=LNBRItSpZn0MLP4fyHQ_3gUJ8lnmCwuPlqnZDVFLI6Q,7332
|
|
155
168
|
astrbot/core/pipeline/rate_limit_check/stage.py,sha256=9EVJ0zYtxATFsj7ADyWDYcSGBRqmrMiKWp1kkD9LONI,3962
|
|
156
169
|
astrbot/core/pipeline/respond/stage.py,sha256=RIYGXTG-XvBhgRqaHyJYWlsZjskS9pgV-2jm5o956ho,11042
|
|
@@ -167,7 +180,7 @@ astrbot/core/platform/message_type.py,sha256=uGn5KN8B_7b9F5nFTpvLAXRlXx2VFHP3JmJ
|
|
|
167
180
|
astrbot/core/platform/platform.py,sha256=U2jq248bfPaAcIa8PUO5aiPyAOGIN1lz6LVnqQOPFik,5114
|
|
168
181
|
astrbot/core/platform/platform_metadata.py,sha256=PCqNk-H-V7BtiQXbbyHd84s43BBIZNhUQ9X-SVKP3uM,693
|
|
169
182
|
astrbot/core/platform/register.py,sha256=ptIPhVvbzODuWwXr8J0jJSzSPfv3rr7F67gXqvIpvvk,1985
|
|
170
|
-
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py,sha256=
|
|
183
|
+
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py,sha256=rlCB8f9Wmysq7C3vcbSgXKbY5jSW5SjhNn2GrZ34cFs,8144
|
|
171
184
|
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py,sha256=J9Nrv2VNxP12Ybg9LRZbvEnbw9JxZtCME8QxTj6XdbE,18612
|
|
172
185
|
astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py,sha256=36oOlr6AcqcqlebcRdSNhllPXb9QyZcKdJI3go5Mw6c,11463
|
|
173
186
|
astrbot/core/platform/sources/dingtalk/dingtalk_event.py,sha256=k6tIeP_2UEjGyg4sV4woEwkpWBWP0BOqyqvtDZf6Hnc,5479
|
|
@@ -182,7 +195,7 @@ astrbot/core/platform/sources/misskey/misskey_adapter.py,sha256=hbO9ZL0FCLcL2sxq
|
|
|
182
195
|
astrbot/core/platform/sources/misskey/misskey_api.py,sha256=YlE1zxHs0dPWJVuVsWR0Lr0d9TPQmnTwsLCQKI4p6Gk,35905
|
|
183
196
|
astrbot/core/platform/sources/misskey/misskey_event.py,sha256=2PYSU9arxzbS71jz5D__3maFFNKqxYZiGmXtLuC_aAc,6550
|
|
184
197
|
astrbot/core/platform/sources/misskey/misskey_utils.py,sha256=_B1Sr8ajI1ljWBoxhwzOVMNt_pFoVNfhIsOVokKI18g,17741
|
|
185
|
-
astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py,sha256=
|
|
198
|
+
astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py,sha256=VB_zIxXchKCURl8JfIiTzYMGQ62I0sE7HHhTf5oFFks,13682
|
|
186
199
|
astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py,sha256=p8ifAmXtvs7BBqRukqnkkPQ62niwGTjUIP50YUrQa7E,7388
|
|
187
200
|
astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py,sha256=AoELYkwpEUDhe10Yq1ltjpnL2kCIGsgjy3Ok90abWl0,5574
|
|
188
201
|
astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py,sha256=vqifw9itvrcr7sV9cL0T19qLZ7I9CWORi4oUBgZrOqc,501
|
|
@@ -216,7 +229,7 @@ astrbot/core/provider/__init__.py,sha256=0NVyKtTapnrUy0lkXVYWyM5KetwtDwXmTwBzqLG
|
|
|
216
229
|
astrbot/core/provider/entites.py,sha256=0eYiQ-xttqFTb3WZR2b1oemdZy3d5sevELvj9FixJtE,388
|
|
217
230
|
astrbot/core/provider/entities.py,sha256=1Az26czWgrnJn2zCi0_WfC3MRyAYrN_cxcYemFZqhxs,15604
|
|
218
231
|
astrbot/core/provider/func_tool_manager.py,sha256=2pBKHAuj-6rITOipHmH8hrs8D4N2bAUx5TcJfUVYtsk,21241
|
|
219
|
-
astrbot/core/provider/manager.py,sha256=
|
|
232
|
+
astrbot/core/provider/manager.py,sha256=_5qq7EEMYuWqVWHcxvmj-0N7e-DxTCnyIWgNVB6bwxs,31576
|
|
220
233
|
astrbot/core/provider/provider.py,sha256=p4l4qSTPimtkH0tba4D5k97bhVNczE9SNHw4bnos5SI,14336
|
|
221
234
|
astrbot/core/provider/register.py,sha256=0WMYrT9vbRjeq-72HD0oRT45kJmeKA96UgSItpTJbX8,1904
|
|
222
235
|
astrbot/core/provider/sources/anthropic_source.py,sha256=F3pFJvUrLdqhzNFHU7N9zPT8PdIxXVCgH-RcNaR1y0U,25123
|
|
@@ -226,7 +239,7 @@ astrbot/core/provider/sources/dashscope_tts.py,sha256=-qBMwbIt_QSmWCT_uPAxrXSYuE
|
|
|
226
239
|
astrbot/core/provider/sources/edge_tts_source.py,sha256=dsf6YtSGzCJvas3BqBwHSn8vlMgQ_vgD9NEwngqDlEo,4690
|
|
227
240
|
astrbot/core/provider/sources/fishaudio_tts_api_source.py,sha256=w3TUrNpJ9preNd4jeyCcjjjXZpaAo8TesSFIDxtLqyA,5917
|
|
228
241
|
astrbot/core/provider/sources/gemini_embedding_source.py,sha256=OoLMY-5-QXgLbj8KCnJ04SIHgTckvygxp5tkCopocKY,2612
|
|
229
|
-
astrbot/core/provider/sources/gemini_source.py,sha256=
|
|
242
|
+
astrbot/core/provider/sources/gemini_source.py,sha256=nyWBCXeX7CpjI6vq4zLmM5QmrMpYRoIpqa8243dGbPA,37476
|
|
230
243
|
astrbot/core/provider/sources/gemini_tts_source.py,sha256=6LJIT2aTjoZaMszjYRzDu38prsO9G5Xg7SzJmQb2TzE,2880
|
|
231
244
|
astrbot/core/provider/sources/genie_tts.py,sha256=RCKj0sMt1fUquvBzxXdR2Isa0hJ5s4gKWuYoc8ZlA4Q,4253
|
|
232
245
|
astrbot/core/provider/sources/groq_source.py,sha256=NqmiQn37mrMsaTyGX25eNzMpIgkCifY-5TJO8DFzHaA,456
|
|
@@ -245,22 +258,12 @@ astrbot/core/provider/sources/xai_source.py,sha256=wxAlbmQnbzhTKsVWK8fe6w7DNadZV
|
|
|
245
258
|
astrbot/core/provider/sources/xinference_rerank_source.py,sha256=DsF4JVlXGeeqqycyP05zz0I-jJ3R1cXiTUsjDeaQNpE,4692
|
|
246
259
|
astrbot/core/provider/sources/xinference_stt_provider.py,sha256=A2kzsVZD6Fnbfgv7r1xY1y5tT05mRKZYfRVfe8vN8JA,8198
|
|
247
260
|
astrbot/core/provider/sources/zhipu_source.py,sha256=oOCPXGsR9PLWOuu3h8RSVNRw1Qy2Se6dwmeFR3zk3GM,612
|
|
248
|
-
astrbot/core/
|
|
249
|
-
astrbot/core/
|
|
250
|
-
astrbot/core/sandbox/booters/boxlite.py,sha256=j80H1N362dRnDM9Qj2eFOcF9GdPZNkJfHLrjI0ae8ko,6493
|
|
251
|
-
astrbot/core/sandbox/booters/shipyard.py,sha256=4lbir-o_mQ1nWWxZCuPxcEgnsuP10yWeiqNy_5Y7Xqc,2075
|
|
252
|
-
astrbot/core/sandbox/olayer/__init__.py,sha256=iNRCSk_uyTUJ_xXeoR2LOgPwziXwrisd8cokFcSuIp0,186
|
|
253
|
-
astrbot/core/sandbox/olayer/filesystem.py,sha256=e5vgzxZJlqxJctS2EAkHONGvESYbq52ZvVFQBfGGP8w,865
|
|
254
|
-
astrbot/core/sandbox/olayer/python.py,sha256=ksv0qdOgUFMWyb9iYSI3pLLSiBznojjerQv7y6En7co,368
|
|
255
|
-
astrbot/core/sandbox/olayer/shell.py,sha256=8vaNRpX_EjU0gXVT3rii1JFsYAyqTLlCr4fs7nZ-kQ0,430
|
|
256
|
-
astrbot/core/sandbox/tools/__init__.py,sha256=5c0r6OK_DHZv_POegHri6St73M_a-OL9iJQzzV-l2BM,219
|
|
257
|
-
astrbot/core/sandbox/tools/fs.py,sha256=cCUcunZX6xXr2HBEqfwdBzT1qsqONQ2fDVCBGkgj2G8,6870
|
|
258
|
-
astrbot/core/sandbox/tools/python.py,sha256=53ITRd4a49p4LNOF4IEsrYwb9buElOBDa8LEAyDK5VI,2472
|
|
259
|
-
astrbot/core/sandbox/tools/shell.py,sha256=m4xysCMLwxvX5-DyoIaGcAm5ziHC019DQLOl1-YE_I4,1883
|
|
261
|
+
astrbot/core/skills/__init__.py,sha256=6ADR-BbIwB_QlXnWPki4RBPH5XbhNOQDlP5PHFKB32s,136
|
|
262
|
+
astrbot/core/skills/skill_manager.py,sha256=OLtg3zm1JRpKGyCf2pQAEr92Sm-3LVbdQqltlxhq8R4,9691
|
|
260
263
|
astrbot/core/star/README.md,sha256=LXxqxp3xv_oejO8ocBPOrbmLe0WB4feu43fYDNddHTQ,161
|
|
261
264
|
astrbot/core/star/__init__.py,sha256=iTlnjfEGJGy--78PhG7F1cKj9VwJVcDNFtGomX8hRO0,2229
|
|
262
|
-
astrbot/core/star/command_management.py,sha256=
|
|
263
|
-
astrbot/core/star/config.py,sha256=
|
|
265
|
+
astrbot/core/star/command_management.py,sha256=AAmbY-saiIoExPzDY5DMxQwCnUvtsWztMJxQIVk2Qco,18099
|
|
266
|
+
astrbot/core/star/config.py,sha256=dwIERy7S4k-2RHoMweZ_dYwNqkjiW78J_Gwoy3DLUq0,3533
|
|
264
267
|
astrbot/core/star/context.py,sha256=6THd6T3MsHyGukX7UJf4iJg4jWzC8eQmuvp1JyO7sXg,24650
|
|
265
268
|
astrbot/core/star/session_llm_manager.py,sha256=6y5rxQQ5RpuzOcw-4DAOeUBEep7nKIfBc6kTGTUkJX8,5707
|
|
266
269
|
astrbot/core/star/session_plugin_manager.py,sha256=2mGUhwWHsAOC1F575d7GwcVdoc3Brv-w-pbISJSmP38,3144
|
|
@@ -270,17 +273,17 @@ astrbot/core/star/star_manager.py,sha256=YP8bEy5zecAzTWtj2Oz1hZwX3CFLq4yJu-7tWJ9
|
|
|
270
273
|
astrbot/core/star/star_tools.py,sha256=4q8emjyTbyIsVXHmzT88kX9uK28rIhlHc0re40Xm6m0,10847
|
|
271
274
|
astrbot/core/star/updator.py,sha256=4pl42Ks_yjJ3kydx3BwOqocAczhhFBrRnxhBKh4_0Eo,3106
|
|
272
275
|
astrbot/core/star/filter/__init__.py,sha256=bC6eHXh0CjzHmn-LTvsanWReoGIPhhMnBSrMLh97hZQ,470
|
|
273
|
-
astrbot/core/star/filter/command.py,sha256=
|
|
276
|
+
astrbot/core/star/filter/command.py,sha256=ao_u1oTbtd-ThJPaCQkIqLEMApcIt4dQZf9Oks5Wvg4,8907
|
|
274
277
|
astrbot/core/star/filter/command_group.py,sha256=JC_cMkOe-DCBDwqNGPDi_hDb0V8t_l4gqNRnkAb1CKA,5049
|
|
275
|
-
astrbot/core/star/filter/custom_filter.py,sha256=
|
|
278
|
+
astrbot/core/star/filter/custom_filter.py,sha256=2SfHLrYJEuNceR81nzLRIhpcnx0J4AuXNCV4HP4kC2I,2241
|
|
276
279
|
astrbot/core/star/filter/event_message_type.py,sha256=DMQy1463oTcwZbIZwbr4uxH7wIVkzsQ6bSe4aRrYn2M,1164
|
|
277
280
|
astrbot/core/star/filter/permission.py,sha256=BYO9kd0coAJ4ayy0YOvTb4b35mavBSCKqR4mjm47jjQ,917
|
|
278
281
|
astrbot/core/star/filter/platform_adapter_type.py,sha256=yTJDeYRY_nH-LhRkkMUb6n6W1toiyP_WUJo-maJq8xM,2100
|
|
279
282
|
astrbot/core/star/filter/regex.py,sha256=GHB5YvBMLFbOOiFVUnEHaqHTER7sU1pAVrAcXdwBtkQ,545
|
|
280
283
|
astrbot/core/star/register/__init__.py,sha256=U1LfqaZ5NbLj6lLuABLQHjpzh-x1qonR43oJMFn9rrc,1204
|
|
281
284
|
astrbot/core/star/register/star.py,sha256=Eto7nD_HFuCNt-VJnXUXKv2D7a5TQ6qkhzLJ_itXo_8,1920
|
|
282
|
-
astrbot/core/star/register/star_handler.py,sha256=
|
|
283
|
-
astrbot/core/utils/astrbot_path.py,sha256=
|
|
285
|
+
astrbot/core/star/register/star_handler.py,sha256=qr0YFcNEiDWNbwgB3eDKfl5y79FrR-VYIQiXGzZE9zc,20058
|
|
286
|
+
astrbot/core/utils/astrbot_path.py,sha256=KPtOk8EpXC7_ThhCjtiXdxMZrXwWokRtxEWWm_v_cDY,2751
|
|
284
287
|
astrbot/core/utils/command_parser.py,sha256=Cwd4zzyKEoC-er0a-9WZ5n2g4F8eH9p6BHxD96gjaVM,617
|
|
285
288
|
astrbot/core/utils/file_extract.py,sha256=I9jgcaPYK74-BwuI18oUpoupnPYINeP3QFD3kFodqBA,697
|
|
286
289
|
astrbot/core/utils/io.py,sha256=WUgM6V9_a-hi3CRKS9a-RFRAkZ5yu0M3WgpbR3-3tCw,10817
|
|
@@ -304,32 +307,34 @@ astrbot/core/utils/t2i/renderer.py,sha256=3IH-eLxOCIpEPHjXA1GF-ylGGyKz4GlMIbkjfv
|
|
|
304
307
|
astrbot/core/utils/t2i/template_manager.py,sha256=Pfht7PZCdVteF93lja1LZQcUFNeCOKLs6EFx9XMeYKQ,4520
|
|
305
308
|
astrbot/core/utils/t2i/template/astrbot_powershell.html,sha256=UcjetoIJG3pJRUHMDOor3Nhj7FFmVXXpkySkpXXztO4,4943
|
|
306
309
|
astrbot/core/utils/t2i/template/base.html,sha256=fQvq4I4lrlH2s_jwAzj62lWeC4g87xXsYJMJ0XunCPA,6619
|
|
307
|
-
astrbot/dashboard/server.py,sha256=
|
|
310
|
+
astrbot/dashboard/server.py,sha256=Xd5POZMZa8NCGLGhpLiaNc3chaphKU1bqVve9zwGvQw,10849
|
|
308
311
|
astrbot/dashboard/utils.py,sha256=KrAv0lnPaVR0bx8yevT1CLGbSNsJizlfkKkPEtVVANI,5355
|
|
309
|
-
astrbot/dashboard/routes/__init__.py,sha256=
|
|
312
|
+
astrbot/dashboard/routes/__init__.py,sha256=nskGN0EwGPQAPNdZYySjKjQyusGsIYPOQ8HR1V6P3m4,1069
|
|
310
313
|
astrbot/dashboard/routes/auth.py,sha256=rYkvt3MpCY9BhWjG0DUoX3YaBkJT1Id7M2pKqTmXbvo,2946
|
|
311
314
|
astrbot/dashboard/routes/backup.py,sha256=npYpOdFAxcBmzPyTWtzAV1WtoO916Rv61CJgcfisHgU,39382
|
|
312
315
|
astrbot/dashboard/routes/chat.py,sha256=4Mb3n6a2A8LSVvViEX3-FyN2BLl0eDtJd7aVK-cN6sY,31398
|
|
313
316
|
astrbot/dashboard/routes/chatui_project.py,sha256=AUHP3fXNQ91nz0SGsICSeBfDgvKcz3AQtv-FVEAEfY0,8715
|
|
314
317
|
astrbot/dashboard/routes/command.py,sha256=DYwcqUF1ibFVQ4qMX3Nob7f0Kz5HmQE0iBWrVNF3Hk8,2917
|
|
315
|
-
astrbot/dashboard/routes/config.py,sha256=
|
|
318
|
+
astrbot/dashboard/routes/config.py,sha256=Xv6TOmL1JLNeVfxugWBd2f6Msmro9f-43x08xJINWFc,54146
|
|
316
319
|
astrbot/dashboard/routes/conversation.py,sha256=TWGY7BJ9QfmbxurAieBrbMmCi4_Ua2klxsAUlSRXbng,14302
|
|
317
320
|
astrbot/dashboard/routes/file.py,sha256=gULvXP9PnVOQlyv_PCEzZQE5ptnGQEjFPvwOLxdVgb4,708
|
|
318
321
|
astrbot/dashboard/routes/knowledge_base.py,sha256=GZ_iDYV2uXXzvGMF-4VJ8hZxLdHIWSSfg_3wlWwsizA,46081
|
|
319
322
|
astrbot/dashboard/routes/live_chat.py,sha256=3a1QdH0vz51xfd1e4VYKpYj19pw6ml69GlG4DYXbFIc,16029
|
|
320
323
|
astrbot/dashboard/routes/log.py,sha256=YyRG6rrxxCAdbJP4dJyywP1CH_GwXrKCBr5XU_eo230,3335
|
|
321
|
-
astrbot/dashboard/routes/persona.py,sha256=
|
|
324
|
+
astrbot/dashboard/routes/persona.py,sha256=HS3pT0WtcY-4T6a8cDBAtRqLx4cVjSJfpbfSUJERvM0,18555
|
|
322
325
|
astrbot/dashboard/routes/platform.py,sha256=JfQzzmWSnahKjke3lBUeXo7Auzz_nTB0mUv0fIf_Nag,3392
|
|
323
326
|
astrbot/dashboard/routes/plugin.py,sha256=qQvAtIY_33gF6F_D_iyQDbvrgO8t0IV_Gt6Qy_lcLlA,27475
|
|
324
327
|
astrbot/dashboard/routes/route.py,sha256=vhNIWFhic1eVHRx7ej8OUmmcNDA3FPaRPdXO_-SS4K4,1572
|
|
325
328
|
astrbot/dashboard/routes/session_management.py,sha256=KV1OhBbs0iTV3gv8NL1A5zzhyNVLrhbUKL9-L-2tEPM,36575
|
|
329
|
+
astrbot/dashboard/routes/skills.py,sha256=Obt6a_bbScQiiwU1TRbbq_QhhFGLxJolO-2eMjDbVSE,5761
|
|
326
330
|
astrbot/dashboard/routes/stat.py,sha256=8t1VjuSjk1IomUpOS9EFLIqh5484TSIZX5VYGVTbNyc,11028
|
|
327
331
|
astrbot/dashboard/routes/static_file.py,sha256=7KnNcOb1BVqSTft114LhGsDkfg69X2jHEm0tOK0kW0Y,1169
|
|
328
332
|
astrbot/dashboard/routes/t2i.py,sha256=F6smxdL99MF7cRw3hqS6-2GErw8Zhsv0V0mfBUeEk-c,8931
|
|
329
333
|
astrbot/dashboard/routes/tools.py,sha256=mMwVFw_VOlpqy_WZg1A-ddGtYa5L5QLWYawl37PT0-c,15354
|
|
330
334
|
astrbot/dashboard/routes/update.py,sha256=qXiqQ_dbqRVftOzGgCQrvK8-qopVK6zKhhVVJ9SK26U,6648
|
|
331
|
-
astrbot
|
|
332
|
-
astrbot-4.
|
|
333
|
-
astrbot-4.
|
|
334
|
-
astrbot-4.
|
|
335
|
-
astrbot-4.
|
|
335
|
+
astrbot/dashboard/routes/util.py,sha256=Ewf5EgWs0evjOyIbgFffJH6T4DzgDrIoacd6VZ5Ix2c,2856
|
|
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,,
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import uuid
|
|
2
|
-
|
|
3
|
-
from astrbot.api import logger
|
|
4
|
-
from astrbot.core.star.context import Context
|
|
5
|
-
|
|
6
|
-
from .booters.base import SandboxBooter
|
|
7
|
-
|
|
8
|
-
session_booter: dict[str, SandboxBooter] = {}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
async def get_booter(
|
|
12
|
-
context: Context,
|
|
13
|
-
session_id: str,
|
|
14
|
-
) -> SandboxBooter:
|
|
15
|
-
config = context.get_config(umo=session_id)
|
|
16
|
-
|
|
17
|
-
sandbox_cfg = config.get("provider_settings", {}).get("sandbox", {})
|
|
18
|
-
booter_type = sandbox_cfg.get("booter", "shipyard")
|
|
19
|
-
|
|
20
|
-
if session_id in session_booter:
|
|
21
|
-
booter = session_booter[session_id]
|
|
22
|
-
if not await booter.available():
|
|
23
|
-
# rebuild
|
|
24
|
-
session_booter.pop(session_id, None)
|
|
25
|
-
if session_id not in session_booter:
|
|
26
|
-
uuid_str = uuid.uuid5(uuid.NAMESPACE_DNS, session_id).hex
|
|
27
|
-
if booter_type == "shipyard":
|
|
28
|
-
from .booters.shipyard import ShipyardBooter
|
|
29
|
-
|
|
30
|
-
ep = sandbox_cfg.get("shipyard_endpoint", "")
|
|
31
|
-
token = sandbox_cfg.get("shipyard_access_token", "")
|
|
32
|
-
ttl = sandbox_cfg.get("shipyard_ttl", 3600)
|
|
33
|
-
max_sessions = sandbox_cfg.get("shipyard_max_sessions", 10)
|
|
34
|
-
|
|
35
|
-
client = ShipyardBooter(
|
|
36
|
-
endpoint_url=ep, access_token=token, ttl=ttl, session_num=max_sessions
|
|
37
|
-
)
|
|
38
|
-
elif booter_type == "boxlite":
|
|
39
|
-
from .booters.boxlite import BoxliteBooter
|
|
40
|
-
|
|
41
|
-
client = BoxliteBooter()
|
|
42
|
-
else:
|
|
43
|
-
raise ValueError(f"Unknown booter type: {booter_type}")
|
|
44
|
-
|
|
45
|
-
try:
|
|
46
|
-
await client.boot(uuid_str)
|
|
47
|
-
except Exception as e:
|
|
48
|
-
logger.error(f"Error booting sandbox for session {session_id}: {e}")
|
|
49
|
-
raise e
|
|
50
|
-
|
|
51
|
-
session_booter[session_id] = client
|
|
52
|
-
return session_booter[session_id]
|