Frona v2026.6.0 – self-hosted personal AI assistant Frona v2026.6.0 introduces a unified human-in-the-loop pause/resume mechanism across all channels, a slash composer for invoking skills and agents, typed file tools to reduce token usage and hallucinations, and per-channel message splitters to prevent truncation. The update also adds button-based approvals on Telegram, Discord, Slack, and WhatsApp Cloud, with text-based prompts on Signal, SMS, and personal WhatsApp. This release ships a unified human-in-the-loop pause/resume mechanism across every channel, a slash composer for invoking skills and other agents directly, typed file tools that cut token usage and hallucinations, and per-channel message splitters so long replies arrive cleanly instead of getting truncated. Approvals app deploys, multiple-choice questions, credential picks now render as buttons on Telegram, Discord, Slack, and WhatsApp Cloud, and as Reply YES or NO prompts on Signal, SMS, and personal WhatsApp, with the inbound parser accepting the obvious variants. Behind the scenes, a new Harness struct consolidates the agent runtime view of AppState , sandboxing moves to a single SandboxManager per principal kind, and the channel adapter framework now classifies failures with a typed ChannelError . Supported channels: Slack, Discord, Telegram, Signal, SMS, WhatsApp Cloud, WhatsApp Personal. Human in the loop - Replace opaque tool data blobs on tool calls with typed Hitl values; build typed HITL tool components and consume new SSE event names. - Persist Paused message status and resume with an atomic compare-and-swap; translate the new InferenceResponse outcomes into pause/resume persistence. - Add a POST /api/chats/{chat id}/tool-calls/resolve endpoint, lift the HITL callback parser and response label into a shared hitl module, and drop the legacy app and vault approval routes superseded by the resolve endpoint. - Re-seed pending HITLs from msg.tool calls on inference done so paused turns continue to surface new questions. - Share an inbound reply HITL resolver with YES/NO variant parsing y , yeah , ok , nope , thumbs-up emoji, and the usual variants . - Resume HITL delivery on resolve so sequential adapters render the next prompt; use the absolute public base url for HITL fallback URLs on channels that can't render the picker. - Render HITL prompts and resolve responses on Telegram inline keyboard , Slack Block Kit via Socket Mode interactions , Discord buttons , WhatsApp Cloud interactive messages and button taps , WhatsApp personal account quote replies , Signal quote replies , and SMS Reply YES or NO hint on App-deploy approval prompts . - Hold the Discord and WhatsApp typing indicator across long inferences so the user sees activity while the agent is generating. - Rename the manage service tool to manage app and adopt typed HITL hooks; exit tasks on HITL and respawn via run task . - Test HITL persistence, pause rendering, batched resolve, and the resume race. Slash composer - Add a chat::slash invocation parser for / and @ prefixes; add a MessageCommand side field on Message for parsed slash invocations. - Wire up /commands end to end: dispatch, terminal-write refactor, cross-agent attribution, slash parsing. - Add a GET /api/chats/{id}/commands discovery endpoint and a listCommands API client. - Frontend: slash composer with Lexical triggers, directive chips, and a /new builtin that opens a fresh chat with the current agent. @