Create a platform-agnostic chat interface abstraction that allows the agent system to work with multiple chat platforms (Telegram, Zulip, Slack, etc.) without duplicating core logic.
Omni/Agent.hs - core agent engine (platform-agnostic)Omni/Ava.hs - telegram-specific wrapperOmni.Agent (core)
├─ skills system
├─ tool registry
└─ provider interface
Omni.Agent.Chat (NEW - generic adapter)
├─ input: platform-agnostic message type
├─ output: platform-agnostic response type
└─ handles: conversation state, skill loading, tool execution
Omni.Agent.Chat.Telegram
└─ maps telegram api ↔ generic chat types
Omni.Agent.Chat.Zulip
└─ maps zulip api ↔ generic chat types
Omni.Agent.Chat.Slack
└─ maps slack api ↔ generic chat types
data ChatMessage = ChatMessage
{ sender :: UserId
, text :: Text
, attachments :: [Attachment]
, thread :: Maybe ThreadId
}
data ChatResponse = ChatResponse
{ text :: Text
, formatting :: MarkupType -- markdown, html, plain
, actions :: [Action] -- buttons, edits, etc
}
Pipeline: agent died without producing a commit, resetting
Pipeline scheduler: failed to spawn agentd run
Pipeline scheduler: failed to spawn agentd run
Pipeline scheduler: started run=pipeline-omni-agent-chat-hs-t-462-1771554730 domain=Omni/Agent/Chat.hs
Pipeline scheduler reset stale run pipeline-omni-agent-chat-hs-t-462-1771554730 (agentd reported running but no active container). Returning task to Open for requeue.
Pipeline scheduler: started run=pipeline-omni-agent-chat-hs-t-462-1771559948 domain=Omni/Agent/Chat.hs
Pipeline scheduler: run=pipeline-omni-agent-chat-hs-t-462-1771559948 domain=Omni/Agent/Chat.hs status=done cost=30c (fund-spend=failed)
Ava triage: pipeline auto-run reached status=done but the agent made NO git commits and reported blockers (missing files, path mismatches, or need clarification). This task is not actually in review — there's nothing to review. Resetting status to Open so it can be re-scoped.
Pipeline: dev failed (run=dev-t-462-1771468859): Agent exited with code -15: