feat(skills): host 模式 skill 归档目录迁移到运行态 agentskills

This commit is contained in:
JOJO 2026-07-09 18:42:42 +08:00
parent 3db4e0beb4
commit 765196ea3c
4 changed files with 11 additions and 22 deletions

View File

@ -1,15 +0,0 @@
---
name: Test Skill
description: Validate skills loading and read_file flow.
example_prompts:
- "Use the test skill to explain how to proceed."
tools:
- read_file
tags:
- test
---
# Test Skill
This skill exists to verify that the skills system can discover, list, sync,
and read SKILL.md content via read_file. Replace this content later.

View File

@ -105,6 +105,9 @@ USER_SPACE_DIR = _runtime_dir("USER_SPACE_DIR", "users")
# API 专用用户与工作区(与网页用户隔离) # API 专用用户与工作区(与网页用户隔离)
API_USER_SPACE_DIR = _runtime_dir("API_USER_SPACE_DIR", "api/users") API_USER_SPACE_DIR = _runtime_dir("API_USER_SPACE_DIR", "api/users")
# ── 用户自定义 skill 归档目录host 模式全局docker/web 模式可与 per-user 并存)──
CUSTOM_SKILLS_DIR = str(Path(RUNTIME_ROOT) / _MODE / "agentskills")
# ── 是否宿主机模式 ── # ── 是否宿主机模式 ──
IS_HOST_MODE = _MODE == "host" IS_HOST_MODE = _MODE == "host"
@ -190,6 +193,7 @@ __all__ = [
"INVITE_CODES_FILE", "INVITE_CODES_FILE",
"ADMIN_POLICY_FILE", "ADMIN_POLICY_FILE",
"API_USER_SPACE_DIR", "API_USER_SPACE_DIR",
"CUSTOM_SKILLS_DIR",
"API_USERS_DB_FILE", "API_USERS_DB_FILE",
"API_TOKENS_FILE", "API_TOKENS_FILE",
"API_USAGE_FILE", "API_USAGE_FILE",

View File

@ -26,7 +26,6 @@ try:
READONLY_RUN_COMMAND_ALLOWED, READONLY_RUN_COMMAND_ALLOWED,
READONLY_RUN_COMMAND_ALLOWED_GIT_SUBCOMMANDS, READONLY_RUN_COMMAND_ALLOWED_GIT_SUBCOMMANDS,
READONLY_RUN_COMMAND_BLOCKED_TOKENS, READONLY_RUN_COMMAND_BLOCKED_TOKENS,
AGENT_SKILLS_DIR,
) )
except ImportError: except ImportError:
import sys import sys
@ -50,7 +49,6 @@ except ImportError:
READONLY_RUN_COMMAND_ALLOWED, READONLY_RUN_COMMAND_ALLOWED,
READONLY_RUN_COMMAND_ALLOWED_GIT_SUBCOMMANDS, READONLY_RUN_COMMAND_ALLOWED_GIT_SUBCOMMANDS,
READONLY_RUN_COMMAND_BLOCKED_TOKENS, READONLY_RUN_COMMAND_BLOCKED_TOKENS,
AGENT_SKILLS_DIR,
) )
from modules.file_manager import FileManager from modules.file_manager import FileManager
@ -496,9 +494,6 @@ class MainTerminalToolsExecutionMixin:
return (project_root / candidate).resolve() return (project_root / candidate).resolve()
def _get_create_skill_target_root(self) -> Path: def _get_create_skill_target_root(self) -> Path:
if self._is_host_mode():
return Path(AGENT_SKILLS_DIR).expanduser().resolve()
inferred = infer_private_skills_dir(self.data_dir) inferred = infer_private_skills_dir(self.data_dir)
if inferred: if inferred:
return inferred return inferred

View File

@ -11,7 +11,7 @@ import threading
from pathlib import Path from pathlib import Path
from typing import Dict, List, Optional, Sequence from typing import Dict, List, Optional, Sequence
from config import AGENT_SKILLS_DIR, WORKSPACE_SKILLS_DIRNAME from config import AGENT_SKILLS_DIR, CUSTOM_SKILLS_DIR, IS_HOST_MODE, WORKSPACE_SKILLS_DIRNAME
from utils.logger import setup_logger from utils.logger import setup_logger
logger = setup_logger(__name__) logger = setup_logger(__name__)
@ -48,10 +48,15 @@ def ensure_workspace_skills_dir(project_path: str | Path) -> Path:
def infer_private_skills_dir(data_dir: str | Path | None) -> Optional[Path]: def infer_private_skills_dir(data_dir: str | Path | None) -> Optional[Path]:
"""Infer per-user private skills dir from workspace data_dir.""" """Infer per-user private skills dir from workspace data_dir.
host 模式下统一使用运行态根下的 ``agentskills``不再按用户拆分
"""
if not data_dir: if not data_dir:
return None return None
try: try:
if IS_HOST_MODE:
return Path(CUSTOM_SKILLS_DIR).expanduser().resolve()
data_path = Path(data_dir).expanduser().resolve() data_path = Path(data_dir).expanduser().resolve()
if data_path.name == "data" and data_path.parent.parent.name == "workspaces": if data_path.name == "data" and data_path.parent.parent.name == "workspaces":
return (data_path.parent.parent.parent / "agentskills").resolve() return (data_path.parent.parent.parent / "agentskills").resolve()