Public discovery API for optional provider-native extension namespaces.
This boundary sits above ASM's normalized kernel. It reports which richer provider-native surfaces may be present without widening the kernel API or making provider SDK packages mandatory for core execution.
Use ASM.ProviderRegistry for normalized lane/runtime discovery and
ASM.Extensions.ProviderSDK for provider-native extension discovery.
Discovery is intentionally split into registered-versus-active views:
extensions/0andprovider_extensions/1return the static Claude/Codex native-extension catalog that ASM knows aboutavailable_extensions/0andavailable_provider_extensions/1return only the active subset for the currently installed optional depsprovider_report/1andcapability_report/0expose both views throughregistered_namespacesversusnamespaces
Gemini and Amp may therefore compose with sdk_available?: true while still
reporting no native namespaces, because they currently use only the common
ASM surface plus the optional SDK lane/runtime kit.
Summary
Types
Active and registered provider-native composition facts for one provider.
Functions
Returns whether a registered provider-native extension is active locally.
Returns the active provider-native extension catalog for the current deps.
Returns the active provider-native extensions for one provider.
Returns provider_report/1 for every ASM provider.
Resolves one registered provider-native extension by provider atom or module.
Returns ASM's static provider-native extension catalog.
Returns the active provider-native capability labels for one provider.
Returns the registered provider-native extension catalog for one provider.
Returns active and registered composition facts for one provider.
Types
@type provider_report() :: %{ provider: ASM.Provider.provider_name(), composition_mode: :common_surface_only | :native_extension, registered_namespaces: [module()], namespaces: [module()], sdk_available?: boolean(), registered_extensions: [ASM.Extensions.ProviderSDK.Extension.t()], native_capabilities: [atom()], native_surface_modules: [module()], extensions: [ASM.Extensions.ProviderSDK.Extension.t()] }
Active and registered provider-native composition facts for one provider.
registered_namespaces and registered_extensions describe the static
catalog ASM ships for that provider. namespaces and extensions describe
the active subset for the currently installed optional deps.
Functions
Returns whether a registered provider-native extension is active locally.
@spec available_extensions() :: [ASM.Extensions.ProviderSDK.Extension.t()]
Returns the active provider-native extension catalog for the current deps.
@spec available_provider_extensions(ASM.Provider.provider_name() | ASM.Provider.t()) :: {:ok, [ASM.Extensions.ProviderSDK.Extension.t()]} | {:error, ASM.Error.t()}
Returns the active provider-native extensions for one provider.
Providers with no active native namespace return {:ok, []}.
@spec capability_report() :: %{ optional(ASM.Provider.provider_name()) => provider_report() }
Returns provider_report/1 for every ASM provider.
@spec extension(atom() | module()) :: {:ok, ASM.Extensions.ProviderSDK.Extension.t()} | {:error, ASM.Error.t()}
Resolves one registered provider-native extension by provider atom or module.
@spec extensions() :: [ASM.Extensions.ProviderSDK.Extension.t()]
Returns ASM's static provider-native extension catalog.
This is the compile-time Claude/Codex catalog that ASM ships, regardless of whether the matching optional provider SDK deps are active in the current application.
@spec provider_capabilities(ASM.Provider.provider_name() | ASM.Provider.t()) :: {:ok, [atom()]} | {:error, ASM.Error.t()}
Returns the active provider-native capability labels for one provider.
@spec provider_extensions(ASM.Provider.provider_name() | ASM.Provider.t()) :: {:ok, [ASM.Extensions.ProviderSDK.Extension.t()]} | {:error, ASM.Error.t()}
Returns the registered provider-native extension catalog for one provider.
This reports what ASM knows how to expose for that provider, even if the matching optional dependency is currently inactive.
@spec provider_report(ASM.Provider.provider_name() | ASM.Provider.t()) :: {:ok, provider_report()} | {:error, ASM.Error.t()}
Returns active and registered composition facts for one provider.
sdk_available? reports whether the provider runtime kit is loadable for the
current dependency set. registered_namespaces reports the static ASM
catalog, while namespaces reports the active subset.