| 1 |
|
defmodule Tools.Sys.Tell.Schema do |
| 2 |
|
def get(name, _state) do |
| 3 |
97 |
%{name: name, description: description(), parameters: params()} |
| 4 |
|
end |
| 5 |
|
|
| 6 |
97 |
defp description do |
| 7 |
|
"Send message to another agent" |
| 8 |
|
end |
| 9 |
|
|
| 10 |
|
defp params do |
| 11 |
97 |
%{type: "object", properties: properties(), required: required()} |
| 12 |
|
end |
| 13 |
|
|
| 14 |
97 |
defp required do |
| 15 |
|
["recipient", "message"] |
| 16 |
|
end |
| 17 |
|
|
| 18 |
|
defp properties do |
| 19 |
97 |
%{ |
| 20 |
|
recipient: %{type: "string", description: "Agent name to send message to"}, |
| 21 |
|
message: %{type: "string", description: "Message content"} |
| 22 |
|
} |
| 23 |
|
end |
| 24 |
|
end |
| 25 |
|
|
| 26 |
|
defmodule Tools.Sys.Tell do |
| 27 |
|
import Agent.Harness, only: [dispatch: 3] |
| 28 |
|
import Log, only: [log: 5, agent: 5] |
| 29 |
|
|
| 30 |
|
@icon "📢" |
| 31 |
|
|
| 32 |
|
defdelegate spec(name, state), to: Tools.Sys.Tell.Schema, as: :get |
| 33 |
|
|
| 34 |
|
def icon, do: @icon |
| 35 |
|
|
| 36 |
|
def exec(_, %{"recipient" => r, "message" => m}, %{name: s, skip_logs: l} = state) do |
| 37 |
|
note(@icon, s, r, m, l) |
| 38 |
|
dispatch(r, "[from #{s}] #{m}", :tell) |
| 39 |
|
{"sent", state} |
| 40 |
|
end |
| 41 |
|
|
| 42 |
|
def exec(_, _, state) do |
| 43 |
|
{"tell needs recipient and message", state} |
| 44 |
|
end |
| 45 |
|
|
| 46 |
|
defp note(_icon, _sender, _recipient, _message, true) do |
| 47 |
|
:ok |
| 48 |
|
end |
| 49 |
|
|
| 50 |
|
defp note(_icon, "el", _recipient, _message, _) do |
| 51 |
|
:ok |
| 52 |
|
end |
| 53 |
|
|
| 54 |
|
defp note(icon, sender, recipient, message, false) do |
| 55 |
|
log(icon, "#{sender} → #{recipient}", ": ", message, :yellow) |
| 56 |
|
agent(icon, "#{sender} → #{recipient}", ": ", message, %{name: sender}) |
| 57 |
|
end |
| 58 |
|
end |