// Package capabilities defines Go interfaces for Navidrome plugin capabilities. // // These interfaces serve as the source of truth for capability definitions. // The ndpgen tool generates: // - Go export wrappers in plugins/pdk/go// for Go plugins // - XTP YAML schemas for non-Go plugins (Rust, TypeScript, etc.) // // Each capability is defined as an annotated interface: // // //nd:capability name=metadata // type MetadataAgent interface { // //nd:export name=nd_get_artist_biography // GetArtistBiography(ArtistRequest) (*ArtistBiographyResponse, error) // } // // Annotation Reference: // // //nd:capability name= [required=true] // - Marks an interface as a capability // - name: Generated package name (e.g., name=metadata → pdk/go/metadata/) // - required: If true, all methods must be implemented (default: false) // // //nd:export name= // - Marks a method as an exported WASM function // - name: The export name (e.g., nd_get_artist_biography) // // Generated Code Structure: // // For a capability like MetadataAgent with required=false: // // package metadata // // // Agent is the marker interface // type Agent interface{} // // // Optional provider interfaces // type ArtistBiographyProvider interface { // GetArtistBiography(ArtistRequest) (*ArtistBiographyResponse, error) // } // // // Registration function // func Register(impl Agent) { ... } // // For a capability with required=true: // // package scrobbler // // // Scrobbler requires all methods // type Scrobbler interface { // IsAuthorized(IsAuthorizedRequest) (bool, error) // NowPlaying(NowPlayingRequest) error // Scrobble(ScrobbleRequest) error // } // // func Register(impl Scrobbler) { ... } package capabilities