AgentForge.Signal (AgentForge v0.2.2)

View Source

Handles creation and manipulation of signals in the AgentForge system. Signals are the fundamental unit of communication.

Summary

Functions

Creates a new signal correlated with a parent signal. Copies the parent's trace_id into the new signal's correlation_id.

Creates an emit result with a new signal.

Creates an emit_many result with multiple signals.

Gets a metadata value from a signal.

Creates a halt result with a value.

Creates a new signal with the given type and data.

Updates metadata in a signal.

Types

signal_result()

@type signal_result() :: {:emit, t()} | {:emit_many, [t()]} | {:halt, term()} | :skip

t()

@type t() :: %{
  type: atom(),
  data: term(),
  meta: %{
    source: String.t() | nil,
    timestamp: DateTime.t() | nil,
    trace_id: String.t() | nil,
    correlation_id: String.t() | nil,
    custom: map()
  }
}

Functions

correlate(child, map)

Creates a new signal correlated with a parent signal. Copies the parent's trace_id into the new signal's correlation_id.

Examples

iex> parent = AgentForge.Signal.new(:parent, "data")
iex> child = AgentForge.Signal.correlate(AgentForge.Signal.new(:child, "response"), parent)
iex> child.meta.correlation_id == parent.meta.trace_id
true

emit(type, data, meta \\ %{})

Creates an emit result with a new signal.

Examples

iex> {:emit, signal} = AgentForge.Signal.emit(:test, "data")
iex> signal.type == :test and signal.data == "data"
true

emit_many(signals)

Creates an emit_many result with multiple signals.

Examples

iex> {:emit_many, signals} = AgentForge.Signal.emit_many([
...>   {:test1, "data1"},
...>   {:test2, "data2"}
...> ])
iex> length(signals) == 2
true

get_meta(map, key)

Gets a metadata value from a signal.

Examples

iex> signal = AgentForge.Signal.new(:test, "data", %{custom: %{key: "value"}})
iex> AgentForge.Signal.get_meta(signal, :custom)
%{key: "value"}

halt(value)

Creates a halt result with a value.

Examples

iex> {:halt, value} = AgentForge.Signal.halt("done")
iex> value == "done"
true

new(type, data, meta \\ %{})

Creates a new signal with the given type and data.

Examples

iex> signal = AgentForge.Signal.new(:user_message, "Hello")
iex> signal.type == :user_message and signal.data == "Hello"
true

update_meta(signal, key, value)

Updates metadata in a signal.

Examples

iex> signal = AgentForge.Signal.new(:test, "data")
iex> updated = AgentForge.Signal.update_meta(signal, :custom, %{key: "value"})
iex> get_in(updated.meta, [:custom, :key])
"value"