Public provider feature manifests for ASM.
This module exposes two related surfaces:
- provider-native permission mode metadata inherited from
CliSubprocessCore.ProviderFeatures - ASM common features that are only supported by some providers, such as the common Ollama surface
Summary
Types
@type capability_manifest() :: %{ supported?: boolean(), lane: atom() | [atom()], provider_native?: boolean(), common_surface?: boolean(), support_state: :common | :native | :sdk_local | :event_only | :unsupported | :planned, asm_option_keys: [atom()], provider_native_option_keys: [atom()], event_kinds: [atom()], live_example: String.t() | nil, notes: [String.t()] }
@type lane_manifest() :: %{ provider: ASM.Provider.provider_name(), lane: atom(), composition_mode: :common_surface_only | :native_extension, sdk_available?: boolean(), native_namespaces: [module()], capabilities: %{optional(atom()) => capability_manifest()} }
@type manifest() :: %{ provider: ASM.Provider.provider_name(), permission_modes: %{optional(atom()) => permission_manifest()}, common_features: %{optional(atom()) => common_feature_manifest()}, lanes: %{optional(atom()) => lane_manifest()} }
@type permission_manifest() :: CliSubprocessCore.ProviderFeatures.permission_manifest()
Functions
@spec capability(ASM.Provider.t() | ASM.Provider.provider_name(), atom(), atom()) :: {:ok, capability_manifest()} | {:error, ASM.Error.t()}
@spec common_feature(ASM.Provider.t() | ASM.Provider.provider_name(), atom()) :: {:ok, common_feature_manifest()} | {:error, ASM.Error.t()}
@spec common_feature!(ASM.Provider.t() | ASM.Provider.provider_name(), atom()) :: common_feature_manifest()
@spec lane_manifest(ASM.Provider.t() | ASM.Provider.provider_name(), atom()) :: {:ok, lane_manifest()} | {:error, ASM.Error.t()}
@spec lane_manifest!(ASM.Provider.t() | ASM.Provider.provider_name(), atom()) :: lane_manifest()
@spec manifest(ASM.Provider.t() | ASM.Provider.provider_name()) :: {:ok, manifest()} | {:error, ASM.Error.t()}
@spec manifest!(ASM.Provider.t() | ASM.Provider.provider_name()) :: manifest()
@spec permission_mode( ASM.Provider.t() | ASM.Provider.provider_name(), atom() | String.t() ) :: {:ok, permission_manifest()} | {:error, ASM.Error.t()}
@spec permission_mode!( ASM.Provider.t() | ASM.Provider.provider_name(), atom() | String.t() ) :: permission_manifest()
@spec require_capability( ASM.Provider.t() | ASM.Provider.provider_name(), atom(), atom() ) :: :ok | {:error, ASM.Error.t()}
@spec support_states() :: [atom()]
@spec supports_common_feature?( ASM.Provider.t() | ASM.Provider.provider_name(), atom() ) :: boolean()