BB.Jido.Action.WaitForState (bb_jido v0.2.0)

Copy Markdown View Source

Jido action that waits for a Beam Bots robot to enter a target state.

Blocks until the robot reports a transition into :target, or returns immediately if the robot is already in that state. The [:state_machine] subscription is held by a dedicated temporary process (so a caller's own PubSub subscriptions and mailbox are never touched) and is established before the current state is checked, so a transition landing between the two can't be missed.

The target may be either an operational state (:idle, :executing, or your robot's custom states, checked via BB.Robot.Runtime.state/1) or the safety state :armed (checked via BB.Safety.state/1BB.Robot.Runtime.state/1 reports the operational state while armed, never :armed itself). The remaining safety states (:disarmed, :disarming, :error) are reported by both.

Schema

  • :robot — the robot module (required).
  • :target — the desired robot state atom (required, e.g. :idle, :armed).
  • :timeout — millisecond timeout (default 30_000). This is a total deadline: unrelated transitions arriving while waiting don't extend it.

Returns

  • {:ok, %{state: target}} when the state is reached.
  • {:error, :timeout} if the timeout elapses first.
  • {:error, {:subscribe_failed, reason}} if the state topic could not be subscribed to.
  • {:error, {:wait_failed, reason}} if the temporary subscriber process exited abnormally.

Warning

This action blocks the calling process while waiting. When invoked directly from a Jido agent it will block the agent server; prefer running it from a dedicated process or via a workflow when long waits are expected.

Summary

Functions

Returns the Action metadata. Alias for to_json/0.

Returns the category of the Action.

Returns the description of the Action.

Returns the name of the Action.

Lifecycle hook called after Action execution.

Lifecycle hook called after output validation.

Lifecycle hook called after parameter validation.

Lifecycle hook called before output validation.

Lifecycle hook called before parameter validation.

Lifecycle hook called when an error occurs.

Returns the output schema of the Action.

Executes the Action with the given parameters and context.

Returns the input schema of the Action.

Returns the tags associated with the Action.

Returns the Action metadata as a JSON-serializable map.

Converts the Action to an LLM-compatible tool format.

Validates the output result for the Action.

Validates the input parameters for the Action.

Returns the version of the Action.

Functions

__action_metadata__()

Returns the Action metadata. Alias for to_json/0.

category()

Returns the category of the Action.

description()

Returns the description of the Action.

name()

Returns the name of the Action.

on_after_run(result)

Lifecycle hook called after Action execution.

on_after_validate_output(output)

Lifecycle hook called after output validation.

on_after_validate_params(params)

Lifecycle hook called after parameter validation.

on_before_validate_output(output)

Lifecycle hook called before output validation.

on_before_validate_params(params)

Lifecycle hook called before parameter validation.

on_error(failed_params, error, context, opts)

Lifecycle hook called when an error occurs.

output_schema()

Returns the output schema of the Action.

run(params, context)

Executes the Action with the given parameters and context.

The run/2 function must be implemented in the module using Jido.Action.

schema()

Returns the input schema of the Action.

tags()

Returns the tags associated with the Action.

to_json()

Returns the Action metadata as a JSON-serializable map.

to_tool()

Converts the Action to an LLM-compatible tool format.

validate_output(output)

@spec validate_output(map()) :: {:ok, map()} | {:error, String.t()}

Validates the output result for the Action.

Examples

iex> defmodule ExampleAction do
...>   use Jido.Action,
...>     name: "example_action",
...>     output_schema: [
...>       result: [type: :string, required: true]
...>     ]
...> end
...> ExampleAction.validate_output(%{result: "test", extra: "ignored"})
{:ok, %{result: "test", extra: "ignored"}}

iex> ExampleAction.validate_output(%{extra: "ignored"})
{:error, "Invalid output for Action: Required key :result not found"}

validate_params(params)

@spec validate_params(map()) :: {:ok, map()} | {:error, String.t()}

Validates the input parameters for the Action.

Examples

iex> defmodule ExampleAction do
...>   use Jido.Action,
...>     name: "example_action",
...>     schema: [
...>       input: [type: :string, required: true]
...>     ]
...> end
...> ExampleAction.validate_params(%{input: "test"})
{:ok, %{input: "test"}}

iex> ExampleAction.validate_params(%{})
{:error, "Invalid parameters for Action: Required key :input not found"}

vsn()

Returns the version of the Action.