🏡 index : ironmagma/quintodrome.git

// 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/<capability>/ 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=<pkg> [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=<func>
//	  - 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