tightening
This commit is contained in:
@@ -12,17 +12,14 @@ from .common import ReferenceEntry
|
||||
from .common import StrictFrozenModel
|
||||
from .common import frozen_mapping
|
||||
|
||||
type ToolSelector = str | tuple[str, ...]
|
||||
|
||||
|
||||
class SkillMetadata(StrictFrozenModel):
|
||||
"""Canonical metadata describing a skill and its dependencies."""
|
||||
"""Canonical metadata describing a skill."""
|
||||
|
||||
id: str
|
||||
version: str
|
||||
tags: tuple[str, ...] = ()
|
||||
capabilities: tuple[str, ...] = Field(min_length=1)
|
||||
depends_on: tuple[str, ...] = ()
|
||||
references: Mapping[str, ReferenceEntry] = Field(default_factory=frozen_mapping)
|
||||
|
||||
@field_validator("id")
|
||||
@@ -47,14 +44,6 @@ class SkillMetadata(StrictFrozenModel):
|
||||
raise ValueError(f"invalid tag: {tag}")
|
||||
return value
|
||||
|
||||
@field_validator("depends_on")
|
||||
@classmethod
|
||||
def validate_depends_on(cls, value: tuple[str, ...]) -> tuple[str, ...]:
|
||||
for dep in value:
|
||||
if not SKILL_ID_RE.fullmatch(dep):
|
||||
raise ValueError(f"invalid depends_on skill id: {dep}")
|
||||
return value
|
||||
|
||||
@field_validator("references", mode="before")
|
||||
@classmethod
|
||||
def freeze_references(cls, value: Mapping[str, ReferenceEntry] | None) -> Mapping[str, ReferenceEntry]:
|
||||
@@ -74,31 +63,8 @@ class SkillFrontmatter(StrictFrozenModel):
|
||||
|
||||
name: str = Field(min_length=1, max_length=64)
|
||||
description: str = Field(min_length=1, max_length=1024)
|
||||
when_to_use: str | None = None
|
||||
allowed_tools: ToolSelector | None = Field(default=None, alias="allowed-tools")
|
||||
disallowed_tools: ToolSelector | None = Field(
|
||||
default=None,
|
||||
alias="disallowed-tools",
|
||||
)
|
||||
disable_model_invocation: bool | None = Field(
|
||||
default=None,
|
||||
alias="disable-model-invocation",
|
||||
)
|
||||
user_invocable: bool | None = Field(default=None, alias="user-invocable")
|
||||
argument_hint: str | None = Field(default=None, alias="argument-hint")
|
||||
arguments: ToolSelector | None = None
|
||||
license: str | None = None
|
||||
compatibility: str | None = None
|
||||
metadata: Mapping[str, str] | None = None
|
||||
x_personal_mcp: SkillMetadata = Field(alias="x-personal-mcp")
|
||||
|
||||
@field_validator("metadata", mode="before")
|
||||
@classmethod
|
||||
def freeze_metadata(cls, value: Mapping[str, str] | None) -> Mapping[str, str] | None:
|
||||
if value is None:
|
||||
return None
|
||||
return frozen_mapping(value)
|
||||
|
||||
@field_validator("name")
|
||||
@classmethod
|
||||
def validate_name(cls, value: str) -> str:
|
||||
|
||||
Reference in New Issue
Block a user