docstrings
This commit is contained in:
@@ -14,6 +14,8 @@ SEMVER_RE: Final[re.Pattern[str]] = re.compile(r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0
|
|||||||
|
|
||||||
|
|
||||||
class StrictFrozenModel(BaseModel):
|
class StrictFrozenModel(BaseModel):
|
||||||
|
"""Immutable base model with strict field validation rules."""
|
||||||
|
|
||||||
model_config: ClassVar[ConfigDict] = ConfigDict(
|
model_config: ClassVar[ConfigDict] = ConfigDict(
|
||||||
extra="forbid",
|
extra="forbid",
|
||||||
frozen=True,
|
frozen=True,
|
||||||
@@ -28,6 +30,8 @@ def frozen_mapping[K, V](value: Mapping[K, V] | None = None) -> Mapping[K, V]:
|
|||||||
|
|
||||||
|
|
||||||
class ReferenceEntry(StrictFrozenModel):
|
class ReferenceEntry(StrictFrozenModel):
|
||||||
|
"""Reference metadata for a markdown file within a skill."""
|
||||||
|
|
||||||
path: str
|
path: str
|
||||||
mime_type: str = "text/markdown"
|
mime_type: str = "text/markdown"
|
||||||
title: str | None = None
|
title: str | None = None
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ from .common import StrictFrozenModel
|
|||||||
|
|
||||||
|
|
||||||
class MarkdownDocumentModel(StrictFrozenModel):
|
class MarkdownDocumentModel(StrictFrozenModel):
|
||||||
|
"""Normalized markdown document content with path and frontmatter."""
|
||||||
|
|
||||||
relpath: str
|
relpath: str
|
||||||
content: str
|
content: str
|
||||||
frontmatter: str | None = None
|
frontmatter: str | None = None
|
||||||
@@ -12,6 +14,8 @@ class MarkdownDocumentModel(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class SkillFilesBundleModel(StrictFrozenModel):
|
class SkillFilesBundleModel(StrictFrozenModel):
|
||||||
|
"""Grouped skill documents partitioned into skill, references, and other files."""
|
||||||
|
|
||||||
slug: str
|
slug: str
|
||||||
skill: MarkdownDocumentModel
|
skill: MarkdownDocumentModel
|
||||||
references: tuple[MarkdownDocumentModel, ...] = ()
|
references: tuple[MarkdownDocumentModel, ...] = ()
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ type PromptArgumentType = Literal[
|
|||||||
|
|
||||||
|
|
||||||
class PromptArgumentEntry(StrictFrozenModel):
|
class PromptArgumentEntry(StrictFrozenModel):
|
||||||
|
"""Schema for a single prompt argument definition."""
|
||||||
|
|
||||||
type: PromptArgumentType
|
type: PromptArgumentType
|
||||||
description: str | None = None
|
description: str | None = None
|
||||||
required: bool = False
|
required: bool = False
|
||||||
@@ -37,6 +39,8 @@ class PromptArgumentEntry(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class PromptMetadata(StrictFrozenModel):
|
class PromptMetadata(StrictFrozenModel):
|
||||||
|
"""Canonical metadata describing a prompt contract and arguments."""
|
||||||
|
|
||||||
id: str
|
id: str
|
||||||
version: str
|
version: str
|
||||||
tags: tuple[str, ...] = ()
|
tags: tuple[str, ...] = ()
|
||||||
@@ -80,6 +84,8 @@ class PromptMetadata(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class PromptFrontmatter(StrictFrozenModel):
|
class PromptFrontmatter(StrictFrozenModel):
|
||||||
|
"""Parsed PROMPT frontmatter including personal-mcp metadata."""
|
||||||
|
|
||||||
name: str = Field(min_length=1, max_length=64)
|
name: str = Field(min_length=1, max_length=64)
|
||||||
description: str = Field(min_length=1, max_length=1024)
|
description: str = Field(min_length=1, max_length=1024)
|
||||||
x_personal_mcp: PromptMetadata = Field(alias="x-personal-mcp")
|
x_personal_mcp: PromptMetadata = Field(alias="x-personal-mcp")
|
||||||
@@ -95,6 +101,8 @@ class PromptFrontmatter(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class PromptDocumentModel(StrictFrozenModel):
|
class PromptDocumentModel(StrictFrozenModel):
|
||||||
|
"""Structured representation of a prompt markdown document."""
|
||||||
|
|
||||||
prompt_id: str
|
prompt_id: str
|
||||||
relpath: str
|
relpath: str
|
||||||
content: str
|
content: str
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ from .prompt import PromptArgumentEntry
|
|||||||
|
|
||||||
|
|
||||||
class ReferenceRecord(StrictFrozenModel):
|
class ReferenceRecord(StrictFrozenModel):
|
||||||
|
"""Registry record for a resolved skill reference document."""
|
||||||
|
|
||||||
ref_id: str
|
ref_id: str
|
||||||
uri: str
|
uri: str
|
||||||
relpath: str
|
relpath: str
|
||||||
@@ -18,6 +20,8 @@ class ReferenceRecord(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class SkillRecord(StrictFrozenModel):
|
class SkillRecord(StrictFrozenModel):
|
||||||
|
"""Registry record containing a fully resolved skill and references."""
|
||||||
|
|
||||||
skill_id: str
|
skill_id: str
|
||||||
name: str
|
name: str
|
||||||
description: str
|
description: str
|
||||||
@@ -37,6 +41,8 @@ class SkillRecord(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class SkillSummaryRecord(StrictFrozenModel):
|
class SkillSummaryRecord(StrictFrozenModel):
|
||||||
|
"""Compact skill summary exposed by catalog listing APIs."""
|
||||||
|
|
||||||
skill_id: str
|
skill_id: str
|
||||||
name: str
|
name: str
|
||||||
description: str
|
description: str
|
||||||
@@ -47,6 +53,8 @@ class SkillSummaryRecord(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class PromptRecord(StrictFrozenModel):
|
class PromptRecord(StrictFrozenModel):
|
||||||
|
"""Registry record containing a fully resolved prompt document."""
|
||||||
|
|
||||||
prompt_id: str
|
prompt_id: str
|
||||||
name: str
|
name: str
|
||||||
description: str
|
description: str
|
||||||
@@ -65,6 +73,8 @@ class PromptRecord(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class PromptSummaryRecord(StrictFrozenModel):
|
class PromptSummaryRecord(StrictFrozenModel):
|
||||||
|
"""Compact prompt summary exposed by catalog listing APIs."""
|
||||||
|
|
||||||
prompt_id: str
|
prompt_id: str
|
||||||
name: str
|
name: str
|
||||||
description: str
|
description: str
|
||||||
@@ -75,6 +85,8 @@ class PromptSummaryRecord(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class DocsRegistry(StrictFrozenModel):
|
class DocsRegistry(StrictFrozenModel):
|
||||||
|
"""In-memory index of loaded skills, prompts, and docs content."""
|
||||||
|
|
||||||
skills_by_id: Mapping[str, SkillRecord] = Field(default_factory=frozen_mapping)
|
skills_by_id: Mapping[str, SkillRecord] = Field(default_factory=frozen_mapping)
|
||||||
skills_in_load_order: tuple[str, ...]
|
skills_in_load_order: tuple[str, ...]
|
||||||
skills_summary_in_load_order: tuple[SkillSummaryRecord, ...]
|
skills_summary_in_load_order: tuple[SkillSummaryRecord, ...]
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from collections.abc import Mapping
|
from collections.abc import Mapping
|
||||||
|
from pathlib import PurePosixPath
|
||||||
|
|
||||||
from pydantic import Field
|
from pydantic import Field
|
||||||
from pydantic import field_validator
|
from pydantic import field_validator
|
||||||
@@ -13,6 +14,8 @@ type ToolSelector = str | tuple[str, ...]
|
|||||||
|
|
||||||
|
|
||||||
class SkillMetadata(StrictFrozenModel):
|
class SkillMetadata(StrictFrozenModel):
|
||||||
|
"""Canonical metadata describing a skill and its dependencies."""
|
||||||
|
|
||||||
id: str
|
id: str
|
||||||
version: str
|
version: str
|
||||||
tags: tuple[str, ...] = ()
|
tags: tuple[str, ...] = ()
|
||||||
@@ -65,6 +68,8 @@ class SkillMetadata(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class SkillFrontmatter(StrictFrozenModel):
|
class SkillFrontmatter(StrictFrozenModel):
|
||||||
|
"""Parsed SKILL frontmatter including standard and personal-mcp fields."""
|
||||||
|
|
||||||
name: str = Field(min_length=1, max_length=64)
|
name: str = Field(min_length=1, max_length=64)
|
||||||
description: str = Field(min_length=1, max_length=1024)
|
description: str = Field(min_length=1, max_length=1024)
|
||||||
when_to_use: str | None = None
|
when_to_use: str | None = None
|
||||||
@@ -103,14 +108,18 @@ class SkillFrontmatter(StrictFrozenModel):
|
|||||||
|
|
||||||
|
|
||||||
class SkillDocumentModel(StrictFrozenModel):
|
class SkillDocumentModel(StrictFrozenModel):
|
||||||
|
"""Structured representation of a skill markdown document."""
|
||||||
|
|
||||||
skill_id: str
|
skill_id: str
|
||||||
relpath: str
|
relpath: PurePosixPath
|
||||||
content: str
|
content: str
|
||||||
frontmatter: SkillFrontmatter
|
frontmatter: SkillFrontmatter
|
||||||
|
|
||||||
|
|
||||||
class SkillReferenceDocumentModel(StrictFrozenModel):
|
class SkillReferenceDocumentModel(StrictFrozenModel):
|
||||||
|
"""Structured representation of a skill reference markdown document."""
|
||||||
|
|
||||||
ref_id: str
|
ref_id: str
|
||||||
relpath: str
|
relpath: PurePosixPath
|
||||||
content: str
|
content: str
|
||||||
entry: ReferenceEntry
|
entry: ReferenceEntry
|
||||||
|
|||||||
Reference in New Issue
Block a user