Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,25 @@ import Config

config :jido, default: Jido.DefaultInstance

# Logger configuration for Jido telemetry metadata
# These metadata keys are used by Jido.Telemetry for structured logging
config :logger, :default_formatter,
format: "[$level] $message $metadata\n",
metadata: [
:agent_id,
:agent_module,
:action,
:directive_count,
:directive_type,
:duration_μs,
:error,
:instruction_count,
:queue_size,
:result,
:signal_type,
:strategy
]

# Git hooks and git_ops configuration for conventional commits
# Only enabled in dev environment (git_ops is a dev-only dependency)
if config_env() == :dev do
Expand Down
4 changes: 3 additions & 1 deletion lib/jido.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
defmodule Jido do
use Supervisor

alias Jido.Agent.WorkerPool

@moduledoc """
自動 (Jido) - A foundational framework for building autonomous, distributed agent systems in Elixir.

Expand Down Expand Up @@ -201,7 +203,7 @@ defmodule Jido do
]

pool_children =
Jido.Agent.WorkerPool.build_pool_child_specs(name, Keyword.get(opts, :agent_pools, []))
WorkerPool.build_pool_child_specs(name, Keyword.get(opts, :agent_pools, []))

Supervisor.init(base_children ++ pool_children, strategy: :one_for_one)
end
Expand Down
21 changes: 18 additions & 3 deletions lib/jido/actions/control.ex
Original file line number Diff line number Diff line change
Expand Up @@ -109,14 +109,29 @@ defmodule Jido.Actions.Control do
def run(%{target_pid: pid, signal_type: type, payload: payload, source: source}, context) do
original = context[:signal]

final_type = type || (original && original.type) || "forwarded"
final_payload = payload || (original && original.data) || %{}
final_source = source || ((original && original.source) || "") <> "/forwarded"
final_type = resolve_type(type, original)
final_payload = resolve_payload(payload, original)
final_source = resolve_source(source, original)

signal = Signal.new!(final_type, final_payload, source: final_source)
directive = Directive.emit_to_pid(signal, pid)
{:ok, %{forwarded_to: pid}, [directive]}
end

defp resolve_type(type, _original) when is_binary(type), do: type
defp resolve_type(nil, %{type: type}) when is_binary(type), do: type
defp resolve_type(nil, _original), do: "forwarded"

defp resolve_payload(payload, _original) when is_map(payload), do: payload
defp resolve_payload(nil, %{data: data}) when is_map(data), do: data
defp resolve_payload(nil, _original), do: %{}

defp resolve_source(source, _original) when is_binary(source), do: source

defp resolve_source(nil, %{source: original_source}) when is_binary(original_source),
do: original_source <> "/forwarded"

defp resolve_source(nil, _original), do: "/forwarded"
end

defmodule Broadcast do
Expand Down
Loading