diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d4000a9..c1a0063 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,6 +14,9 @@ jobs: lint: name: Lint uses: agentjido/github-actions/.github/workflows/elixir-lint.yml@v3 + with: + otp_version: "28" + elixir_version: "1.20.0-rc.4" secrets: inherit test: @@ -23,3 +26,11 @@ jobs: otp_versions: '["27", "28"]' elixir_versions: '["1.18", "1.19"]' test_command: mix test + + test_elixir_120: + name: Test Elixir 1.20 + uses: agentjido/github-actions/.github/workflows/elixir-test.yml@v3 + with: + otp_versions: '["28"]' + elixir_versions: '["1.20.0-rc.4"]' + test_command: mix test diff --git a/lib/jido/agent_server/signal/child_exit.ex b/lib/jido/agent_server/signal/child_exit.ex index 98e7968..852276b 100644 --- a/lib/jido/agent_server/signal/child_exit.ex +++ b/lib/jido/agent_server/signal/child_exit.ex @@ -3,6 +3,10 @@ defmodule Jido.AgentServer.Signal.ChildExit do use Jido.Signal, type: "jido.agent.child.exit", + extension_policy: [ + {Jido.Signal.Ext.Trace, :optional}, + {Jido.Signal.Ext.Dispatch, :optional} + ], schema: [ tag: [type: :any, required: true, doc: "Tag assigned to the child when spawned"], pid: [type: :any, required: true, doc: "PID of the child process that exited"], diff --git a/lib/jido/agent_server/signal/child_started.ex b/lib/jido/agent_server/signal/child_started.ex index 17d0ef6..7da491a 100644 --- a/lib/jido/agent_server/signal/child_started.ex +++ b/lib/jido/agent_server/signal/child_started.ex @@ -19,6 +19,10 @@ defmodule Jido.AgentServer.Signal.ChildStarted do use Jido.Signal, type: "jido.agent.child.started", default_source: "/agent", + extension_policy: [ + {Jido.Signal.Ext.Trace, :optional}, + {Jido.Signal.Ext.Dispatch, :optional} + ], schema: [ parent_id: [type: :string, required: true, doc: "ID of the parent agent"], child_id: [type: :string, required: true, doc: "ID of the child agent"], diff --git a/lib/jido/agent_server/signal/cron_tick.ex b/lib/jido/agent_server/signal/cron_tick.ex index 85d962e..9ac456a 100644 --- a/lib/jido/agent_server/signal/cron_tick.ex +++ b/lib/jido/agent_server/signal/cron_tick.ex @@ -3,6 +3,10 @@ defmodule Jido.AgentServer.Signal.CronTick do use Jido.Signal, type: "jido.cron_tick", + extension_policy: [ + {Jido.Signal.Ext.Trace, :optional}, + {Jido.Signal.Ext.Dispatch, :optional} + ], schema: [ job_id: [type: :any, required: true, doc: "The logical cron job id"], message: [type: :any, required: true, doc: "The cron tick message payload"] diff --git a/lib/jido/agent_server/signal/orphaned.ex b/lib/jido/agent_server/signal/orphaned.ex index 3191b27..9820101 100644 --- a/lib/jido/agent_server/signal/orphaned.ex +++ b/lib/jido/agent_server/signal/orphaned.ex @@ -18,6 +18,10 @@ defmodule Jido.AgentServer.Signal.Orphaned do use Jido.Signal, type: "jido.agent.orphaned", + extension_policy: [ + {Jido.Signal.Ext.Trace, :optional}, + {Jido.Signal.Ext.Dispatch, :optional} + ], schema: [ parent_id: [type: :string, required: true, doc: "ID of the parent agent that died"], parent_pid: [type: :any, required: true, doc: "PID of the parent process that died"], diff --git a/lib/jido/agent_server/signal/scheduled.ex b/lib/jido/agent_server/signal/scheduled.ex index dcfeca3..819d562 100644 --- a/lib/jido/agent_server/signal/scheduled.ex +++ b/lib/jido/agent_server/signal/scheduled.ex @@ -3,6 +3,10 @@ defmodule Jido.AgentServer.Signal.Scheduled do use Jido.Signal, type: "jido.scheduled", + extension_policy: [ + {Jido.Signal.Ext.Trace, :optional}, + {Jido.Signal.Ext.Dispatch, :optional} + ], schema: [ message: [type: :any, required: true, doc: "The scheduled message payload"] ] diff --git a/lib/jido/discovery.ex b/lib/jido/discovery.ex index 52a36f8..efaaa33 100644 --- a/lib/jido/discovery.ex +++ b/lib/jido/discovery.ex @@ -62,8 +62,6 @@ defmodule Jido.Discovery do All processes can read concurrently without contention. """ - require Logger - @catalog_key :jido_discovery_catalog @type component_type :: :actions | :sensors | :agents | :plugins | :demos diff --git a/lib/jido/observe/log.ex b/lib/jido/observe/log.ex index e07c0c3..de55d1c 100644 --- a/lib/jido/observe/log.ex +++ b/lib/jido/observe/log.ex @@ -29,8 +29,6 @@ defmodule Jido.Observe.Log do Log.log(:info, "Agent completed", agent_id: agent.id) """ - require Logger - @type level :: Logger.level() @doc """ diff --git a/lib/jido/scheduler.ex b/lib/jido/scheduler.ex index 4285573..21a4b68 100644 --- a/lib/jido/scheduler.ex +++ b/lib/jido/scheduler.ex @@ -173,10 +173,7 @@ defmodule Jido.Scheduler do end def run_every(fun, cron_expr, opts) when is_function(fun, 0) and is_list(opts) do - case validate_cron_expression_type(cron_expr) do - :ok -> {:error, {:invalid_scheduler_options, :invalid_type}} - {:error, reason} -> {:error, reason} - end + validate_cron_expression_type(cron_expr) end def run_every(fun, _cron_expr, _opts) when is_function(fun, 0), diff --git a/lib/jido/storage/file.ex b/lib/jido/storage/file.ex index 0912881..ebf9e05 100644 --- a/lib/jido/storage/file.ex +++ b/lib/jido/storage/file.ex @@ -334,7 +334,7 @@ defmodule Jido.Storage.File do defp decode_entries(_malformed, _acc), do: {:error, :invalid_entries_log} defp decode_frame(rest, size) when byte_size(rest) >= size do - <> = rest + <> = rest {:ok, term_binary, remaining} end diff --git a/test/jido/agent/agent_test.exs b/test/jido/agent/agent_test.exs index 3e0e089..2289902 100644 --- a/test/jido/agent/agent_test.exs +++ b/test/jido/agent/agent_test.exs @@ -49,7 +49,7 @@ defmodule JidoTest.AgentTest do assert TestAgents.Minimal.name() == "minimal_agent" assert TestAgents.Minimal.description() == nil schema = TestAgents.Minimal.schema() - assert is_struct(schema) or schema == [] + assert is_struct(schema) end end diff --git a/test/jido/agent_server/directive_exec_test.exs b/test/jido/agent_server/directive_exec_test.exs index 5856f63..8af5e07 100644 --- a/test/jido/agent_server/directive_exec_test.exs +++ b/test/jido/agent_server/directive_exec_test.exs @@ -461,9 +461,13 @@ defmodule JidoTest.AgentServer.DirectiveExecTest do assert child_info.module == agent_struct.__struct__ assert is_pid(child_info.pid) - # Stop the child - catch potential exit as process may be in init - catch_exit do - GenServer.stop(child_info.pid, :normal, 100) + # Stop the child without relying on catch_exit's generated AST handling. + if Process.alive?(child_info.pid) do + try do + GenServer.stop(child_info.pid, :normal, 100) + catch + :exit, _ -> :ok + end end end