package transportunibus import ( "context" "log/slog" "strings" "github.com/enmanuel/agents/pkg/transport" ) // DemoEchoHandler returns a minimal bot handler that proves the unibus transport // end to end: it receives a neutral InboundMessage and answers in the same room. // It echoes the message body back as a reply, with one built-in command // (!ping → pong) to show command routing works over the bus. It is intentionally // tiny — the point is the transport, not the bot. func DemoEchoHandler(t transport.Transport, logger *slog.Logger) transport.Handler { if logger == nil { logger = slog.Default() } return func(ctx context.Context, in transport.InboundMessage) { reply := "echo: " + in.Body if strings.TrimSpace(in.Body) == "!ping" { reply = "pong" } out := transport.OutboundReply{ RoomID: in.RoomID, ReplyTo: in.MsgID, ThreadID: in.ThreadID, Markdown: reply, } if err := t.Reply(ctx, out); err != nil { logger.Error("demo echo reply failed", "err", err, "sender", in.SenderID) } } }