fix: 重构内置技能目录处理逻辑,改为复制以兼容沙盒场景

This commit is contained in:
Wenjie Zhang 2026-03-24 15:46:01 +08:00
parent 77c91cabf5
commit d9b9980877
3 changed files with 20 additions and 9 deletions

View File

@ -118,7 +118,7 @@ DEFAULT_CHAT_MODEL_PROVIDERS: dict[str, ChatModelProvider] = {
"minimax": ChatModelProvider(
name="MiniMax",
url="https://platform.minimaxi.com/document/introduction",
base_url="https://api.minimax.io/v1",
base_url="https://api.minimaxi.com/v1",
default="MiniMax-M2.7",
env="MINIMAX_API_KEY",
models=[

View File

@ -99,18 +99,24 @@ def _is_builtin_managed(item: Skill, slug: str) -> bool:
return (item.created_by or "") in {"system", BUILTIN_SKILL_OPERATOR}
def _ensure_symlink_target(target_dir: Path, source_dir: Path) -> None:
def _dirs_equal(dir1: Path, dir2: Path) -> bool:
"""检查两个目录内容是否相同(通过文件列表比较)"""
if not dir1.exists() or not dir2.exists():
return False
list1 = sorted([f.relative_to(dir1) for f in dir1.rglob("*") if f.is_file()])
list2 = sorted([f.relative_to(dir2) for f in dir2.rglob("*") if f.is_file()])
return list1 == list2
def _copy_skill_target(target_dir: Path, source_dir: Path) -> None:
if target_dir.is_symlink():
if target_dir.resolve() == source_dir.resolve():
return
target_dir.unlink()
elif target_dir.exists():
if _dirs_equal(target_dir, source_dir):
return
raise ValueError(f"技能目录已存在且非内置链接,无法托管: {target_dir}")
try:
target_dir.symlink_to(source_dir, target_is_directory=True)
except OSError as e:
raise ValueError(f"创建内置技能链接失败: {target_dir} -> {source_dir} ({e})") from e
shutil.copytree(source_dir, target_dir, symlinks=False, dirs_exist_ok=True)
async def get_skill_dependency_options(db: AsyncSession) -> dict[str, list[str] | list[dict]]:
@ -615,7 +621,7 @@ async def init_builtin_skills(db: AsyncSession, *, created_by: str = "system") -
skill_dependencies = configured_skills or _normalize_string_list(meta.get("skill_dependencies"))
target_dir = skills_root / slug
_ensure_symlink_target(target_dir, source_dir)
_copy_skill_target(target_dir, source_dir)
item = await repo.get_by_slug(slug)
if item and not _is_builtin_managed(item, slug):

View File

@ -21,6 +21,10 @@
- 工具传递给模型的时候使用英文但部分模型不支持中文函数名如gpt-4o-minideepseek 官方接口)
- 生成基准测试会把所有的向量都计算一遍不合理
- RUNs API 导致的问题
- 双击导致的暂停问题
- 自定义embedding和rerank模型的配置问题
## v0.6
<!-- 添加到这里 -->
@ -28,6 +32,7 @@
- 新增 API Key 管理功能,支持外部系统通过 API Key 调用 Agent 对话接口(`POST /api/chat/agent/{agent_id}`)。统一使用 `Authorization: Bearer <api_key>` 认证API Key 以 `yxkey_` 开头。获取 API Key 即代表拥有绑定用户的所有接口访问权限。
- 将 后端代码 和 agents 解耦agents 作为单独的 package 使用
- 添加 subagents
- 将内置 skills 的初始化从符号链接改为复制,以兼容沙盒绑定场景
## v0.5