Validates plugin requirements at agent creation time.
Plugins can declare requirements in their configuration:
{:config, key}- Ensure resolved config has this key with non-nil value{:app, app_name}- Ensure the OTP application is available{:plugin, plugin_name}- Ensure another mounted plugin has this name
Example
defmodule MyApp.SlackPlugin do
use Jido.Plugin,
name: "slack",
requires: [
{:config, :token},
{:config, :channel},
{:app, :req}
]
endIf requirements are not met, agent compilation will fail with a descriptive error.
Summary
Functions
Formats missing requirements into a human-readable error message.
Validates requirements for all plugin instances.
Validates requirements for a single plugin instance.
Types
Functions
@spec format_error(%{required(String.t()) => [requirement()]}) :: String.t()
Formats missing requirements into a human-readable error message.
Examples
iex> format_error(%{"slack" => [{:config, :token}, {:app, :req}]})
"Missing requirements for plugins: slack requires {:config, :token}, {:app, :req}"
@spec validate_all_requirements([Jido.Plugin.Instance.t()], map()) :: {:ok, :valid} | {:error, %{required(String.t()) => [requirement()]}}
Validates requirements for all plugin instances.
Returns a single error listing all missing requirements grouped by plugin.
Parameters
instances- List of plugin instancesconfig_map- Map ofstate_key => resolved_configfor each plugin
Returns
{:ok, :valid}- All requirements for all plugins are met{:error, missing_by_plugin}- Map of plugin name => missing requirements
Examples
iex> validate_all_requirements(instances, config_map)
{:ok, :valid}
iex> validate_all_requirements([slack_instance], %{})
{:error, %{"slack" => [{:config, :token}]}}
@spec validate_requirements(Jido.Plugin.Instance.t(), context()) :: {:ok, :valid} | {:error, [requirement()]}
Validates requirements for a single plugin instance.
Parameters
instance- The plugin instance with manifest containing requirementscontext- Map with:mounted_pluginsand:resolved_config
Returns
{:ok, :valid}- All requirements are met{:error, missing_requirements}- List of unmet requirements
Examples
iex> validate_requirements(slack_instance, context)
{:ok, :valid}
iex> validate_requirements(slack_instance, %{mounted_plugins: [], resolved_config: %{}})
{:error, [{:config, :token}, {:app, :req}]}