mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-02-19 00:37:23 +08:00
76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
"""
|
|
Type definitions for skills system.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
from typing import Dict, List, Optional, Any
|
|
from dataclasses import dataclass, field
|
|
|
|
|
|
@dataclass
|
|
class SkillInstallSpec:
|
|
"""Specification for installing skill dependencies."""
|
|
kind: str # brew, pip, npm, download, etc.
|
|
id: Optional[str] = None
|
|
label: Optional[str] = None
|
|
bins: List[str] = field(default_factory=list)
|
|
os: List[str] = field(default_factory=list)
|
|
formula: Optional[str] = None # for brew
|
|
package: Optional[str] = None # for pip/npm
|
|
module: Optional[str] = None
|
|
url: Optional[str] = None # for download
|
|
archive: Optional[str] = None
|
|
extract: bool = False
|
|
strip_components: Optional[int] = None
|
|
target_dir: Optional[str] = None
|
|
|
|
|
|
@dataclass
|
|
class SkillMetadata:
|
|
"""Metadata for a skill from frontmatter."""
|
|
always: bool = False # Always include this skill
|
|
skill_key: Optional[str] = None # Override skill key
|
|
primary_env: Optional[str] = None # Primary environment variable
|
|
emoji: Optional[str] = None
|
|
homepage: Optional[str] = None
|
|
os: List[str] = field(default_factory=list) # Supported OS platforms
|
|
requires: Dict[str, List[str]] = field(default_factory=dict) # Requirements
|
|
install: List[SkillInstallSpec] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class Skill:
|
|
"""Represents a skill loaded from a markdown file."""
|
|
name: str
|
|
description: str
|
|
file_path: str
|
|
base_dir: str
|
|
source: str # managed, workspace, bundled, etc.
|
|
content: str # Full markdown content
|
|
disable_model_invocation: bool = False
|
|
frontmatter: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class SkillEntry:
|
|
"""A skill with parsed metadata."""
|
|
skill: Skill
|
|
metadata: Optional[SkillMetadata] = None
|
|
user_invocable: bool = True # Can users invoke this skill directly
|
|
|
|
|
|
@dataclass
|
|
class LoadSkillsResult:
|
|
"""Result of loading skills from a directory."""
|
|
skills: List[Skill]
|
|
diagnostics: List[str] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class SkillSnapshot:
|
|
"""Snapshot of skills for a specific run."""
|
|
prompt: str # Formatted prompt text
|
|
skills: List[Dict[str, str]] # List of skill info (name, primary_env)
|
|
resolved_skills: List[Skill] = field(default_factory=list)
|
|
version: Optional[int] = None
|