models
This commit is contained in:
@@ -4,57 +4,15 @@ from typing import Any
|
||||
|
||||
from personal_mcp.registry.contracts import DocsRegistry
|
||||
from personal_mcp.registry.models.registry import PromptRecord
|
||||
from personal_mcp.registry.models.registry import PromptSummaryPayload
|
||||
from personal_mcp.registry.models.registry import SkillPatternPayload
|
||||
from personal_mcp.registry.models.registry import SkillRecord
|
||||
from personal_mcp.registry.models.registry import SkillSummaryPayload
|
||||
|
||||
DEFAULT_LIMIT = 20
|
||||
MAX_LIMIT = 100
|
||||
|
||||
|
||||
def _pattern_payload(skill: SkillRecord) -> dict[str, Any]:
|
||||
return {
|
||||
"id": skill.skill_id,
|
||||
"name": skill.name,
|
||||
"version": skill.version,
|
||||
"description": skill.description,
|
||||
"tags": list(skill.tags),
|
||||
"depends_on": list(skill.depends_on),
|
||||
"capabilities": list(skill.capabilities),
|
||||
"resources": list(skill.capabilities),
|
||||
}
|
||||
|
||||
|
||||
def _summary_payload(skill: SkillRecord) -> dict[str, Any]:
|
||||
return {
|
||||
"id": skill.skill_id,
|
||||
"name": skill.name,
|
||||
"description": skill.description,
|
||||
"tags": list(skill.tags),
|
||||
"capabilities": list(skill.capabilities),
|
||||
"version": skill.version,
|
||||
"document_uri": skill.document_uri,
|
||||
"detail_uri": f"resource://catalog/skills/{skill.skill_id}",
|
||||
"resources": {
|
||||
"document": skill.document_uri,
|
||||
"references": [
|
||||
f"resource://skills/{skill.skill_id}/references/{ref_id}" for ref_id in sorted(skill.references)
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def _prompt_summary_payload(prompt: PromptRecord) -> dict[str, Any]:
|
||||
return {
|
||||
"id": prompt.prompt_id,
|
||||
"name": prompt.name,
|
||||
"description": prompt.description,
|
||||
"tags": list(prompt.tags),
|
||||
"capabilities": list(prompt.capabilities),
|
||||
"version": prompt.version,
|
||||
"document_uri": prompt.document_uri,
|
||||
"detail_uri": f"resource://catalog/prompts/{prompt.prompt_id}",
|
||||
}
|
||||
|
||||
|
||||
def _skill_matches(
|
||||
skill: SkillRecord,
|
||||
*,
|
||||
@@ -130,7 +88,7 @@ def build_skills_index_payload(
|
||||
next_cursor = start + normalized_limit
|
||||
|
||||
return {
|
||||
"skills": [_summary_payload(skill) for skill in page],
|
||||
"skills": [SkillSummaryPayload.from_record(skill).model_dump() for skill in page],
|
||||
"total": len(matches),
|
||||
"cursor": str(start),
|
||||
"limit": normalized_limit,
|
||||
@@ -187,7 +145,7 @@ def build_prompts_index_payload(
|
||||
next_cursor = start + normalized_limit
|
||||
|
||||
return {
|
||||
"prompts": [_prompt_summary_payload(prompt) for prompt in page],
|
||||
"prompts": [PromptSummaryPayload.from_record(prompt).model_dump() for prompt in page],
|
||||
"total": len(matches),
|
||||
"cursor": str(start),
|
||||
"limit": normalized_limit,
|
||||
@@ -240,7 +198,7 @@ def search_patterns_payload(
|
||||
|
||||
page = matches[normalized_skip : normalized_skip + normalized_limit]
|
||||
return {
|
||||
"patterns": [_pattern_payload(skill) for skill in page],
|
||||
"patterns": [SkillPatternPayload.from_record(skill).model_dump() for skill in page],
|
||||
"total": len(matches),
|
||||
"skip": normalized_skip,
|
||||
"limit": normalized_limit,
|
||||
@@ -250,7 +208,7 @@ def search_patterns_payload(
|
||||
def get_pattern_by_id_payload(registry: DocsRegistry, skill_id: str) -> dict[str, Any]:
|
||||
if skill_id not in registry.skills_by_id:
|
||||
return {"found": False, "id": skill_id}
|
||||
return {"found": True, "pattern": _pattern_payload(registry.skills_by_id[skill_id])}
|
||||
return {"found": True, "pattern": SkillPatternPayload.from_record(registry.skills_by_id[skill_id]).model_dump()}
|
||||
|
||||
|
||||
def search_prompts_payload(
|
||||
@@ -277,7 +235,7 @@ def search_prompts_payload(
|
||||
|
||||
page = matches[normalized_skip : normalized_skip + normalized_limit]
|
||||
return {
|
||||
"prompts": [_prompt_summary_payload(prompt) for prompt in page],
|
||||
"prompts": [PromptSummaryPayload.from_record(prompt).model_dump() for prompt in page],
|
||||
"total": len(matches),
|
||||
"skip": normalized_skip,
|
||||
"limit": normalized_limit,
|
||||
|
||||
Reference in New Issue
Block a user