from collections.abc import Awaitable, Callable from dataclasses import dataclass, field @dataclass class Plugin: id: str title: str description: str = "" skeleton_fn: Callable[[], Awaitable[str]] | None = field(default=None) async def skeleton(self) -> str: if self.skeleton_fn is None: raise NotImplementedError return await self.skeleton_fn()