# SPDX-FileCopyrightText: 2026 James Harton # # SPDX-License-Identifier: Apache-2.0 if Code.ensure_loaded?(Igniter) do defmodule BB.Jido.Igniter do @moduledoc """ Helpers for `bb_jido`'s Igniter installer and generator tasks. Only available when `:igniter` is loaded. """ alias Igniter.Project.Module, as: IgniterModule @doc """ Returns the Jido instance module to operate on. Resolution order: 1. The `--jido-instance` option from `igniter.args.options` (parsed module name). 2. `{AppPrefix}.Jido` (e.g. `MyApp.Jido`). Add `jido_instance: :string` to your task's schema to support the flag. """ @spec jido_instance_module(Igniter.t()) :: module() def jido_instance_module(igniter) do case Keyword.get(igniter.args.options, :jido_instance) do nil -> IgniterModule.module_name(igniter, "Jido") name -> IgniterModule.parse(name) end end @doc """ Returns the agent module to operate on. Resolution order: 1. The `--agent` option from `igniter.args.options` (parsed module name). 2. `{robot_module}.Agent` if a robot module is supplied. 3. `{AppPrefix}.Agent` as the last-resort default. Add `agent: :string` to your task's schema to support the flag. """ @spec agent_module(Igniter.t(), module() | nil) :: module() def agent_module(igniter, robot_module \\ nil) do case Keyword.get(igniter.args.options, :agent) do nil when is_atom(robot_module) and not is_nil(robot_module) -> Module.concat(robot_module, "Agent") nil -> IgniterModule.module_name(igniter, "Agent") name -> IgniterModule.parse(name) end end end end