v4.4.0 - Mobile Companion, Channel Streaming & Runtime Reliability #279
siddsachar
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
v4.4.0 - Mobile Companion, Channel Streaming & Runtime Reliability
This release builds on v4.3.0 with a mobile-access, messaging, provider, and
runtime-reliability pass. It adds a secure browser-first mobile companion,
brings live agent streaming and interactive approvals to external channels,
surfaces child-agent approvals and completion notices in parent conversations,
makes Stop cancel stalled provider streams and subprocess-backed tools, restores
automatic model discovery with last-known-good catalog protection, hardens
Gemini tool-schema compatibility and Google Calendar concurrency, and expands
the recommended MCP catalog with Xquik.
Mobile Web Companion
Activity, Workflows, Knowledge, and Settings navigation instead of shrinking
the desktop drawers and studio chrome onto a phone display.
creation, attachments, skills, profile and model controls, generation status,
and a persistent Stop control using the same durable threads as desktop.
recent workflow runs, tool approvals, and workflow approvals in one phone-safe
surface with approve, deny, and stop actions.
profiles, model overrides, approval policy, persistent threads, channel
delivery, enablement, and metadata while preserving advanced graph steps for
desktop editing.
summaries, local skill enable/pin controls, and installed plugin enablement.
Skills Hub and Plugin Marketplace installation/configuration remain desktop
actions in Mobile V1.
metadata, and offline page while deliberately excluding authenticated and
private Row-Bot surfaces from service-worker caching.
Settings -> System for local-network access, optional Tailscale direct or
Serve routes, an existing ngrok tunnel, and advanced custom origins.
stores session tokens in HttpOnly cookies, lists paired phones and access
events, and lets an authorized user revoke a phone immediately.
keeping direct loopback desktop access open, rejecting forwarded-header
localhost bypasses, and redirecting unpaired remote clients to pairing.
device scopes, revocation state, failed-attempt lockouts, and display-safe
audit events in a dedicated local SQLite database.
Channel Streaming, Approvals & Delivery
delivery with coalesced edits, typing keepalives, bounded previews,
rate-limit-aware retries, platform-safe splitting, preview cleanup, and final
send fallback when an edit cannot be completed.
splits long final answers, retries with a fresh final message when necessary,
and presents interactive approval buttons.
and appropriate, falls back to edited messages when they are not, and adds
Block Kit approval actions plus bounded retry-after handling.
private chats, falls back to edit streaming elsewhere, respects UTF-16 message
limits, and adds inline approve/deny controls.
finals, and approval resume. SMS intentionally remains final-text-only with
safe chunking and explicit YES/NO approval handling.
interrupted/resumed turns, and plugin-owned channel turns through the shared
delivery path without duplicate final responses.
checkpoint contains only the human turn, without duplicating an assistant
message already written by the agent graph.
Goal Mode completion/failure notices, retains failed notices for retry, and
reconciles them when configured channels start again.
Child Agents, Approvals & Generation Control
agent approval requests to the parent conversation so background work cannot
wait invisibly.
cards, redacts and bounds display text, and retains the raw action payload for
the actual safety decision.
shell and Developer commands so requested command execution can explain why
it is needed.
metadata, completion summaries, queued-turn ordering, checkpoint reloads, and
once-only rendering across parent and child conversations.
requests, subprocesses, tool waits, and its spawned child runs so Stop has one
consistent cancellation path.
Anthropic, xAI, MiniMax, OpenRouter, OpenCode, subscription, and compatible
transport responses so a blocked network stream no longer leaves a thread
stuck in Thinking.
processes, MCP probes and calls, browser operations, voice turns, and other
subprocess-backed work, with a clear stopped result where appropriate.
generation and wakes/detaches queued generation state without terminating
unrelated agent work.
Providers, Models & Tool Schemas
providers to targeted and scheduled model refreshes, including discovery of
newly available subscription models.
refresh is empty, fails, or loses a later pagination page, and replaces only
rows for a provider whose refresh completed successfully.
in provider settings so a retained catalog is distinguishable from a fresh
provider response.
input schemas without rewriting the tools used by unaffected transports.
for typed array
items, filters optional incompatible tools while preservingorder, and fails clearly when an explicitly requested tool is incompatible.
evidence/blocker arrays concrete item types while continuing to normalize
legacy scalar or structured inputs safely.
policy checks for catalog ownership, pagination, routing, current-model
discovery, media capability, and tool-schema conversion.
Google Calendar & MCP
service for each operation so concurrent tool calls do not share an unsafe
client instance.
and atomic when several operations discover an expired token together.
native multi-event create operation that preserves result order and reports
partial failures clearly.
fresh services, returns structured permanent errors, and reconciles ambiguous
timeouts so a backend-committed event is not created twice.
delete while exposing typed attendee, conference, timezone, notification,
calendar, and bulk-event inputs.
streamable HTTP with API-key header setup, capability metadata, and explicit
high-risk approval guidance for its generic executor.
installed server is edited, refreshes cached agent tools after MCP changes,
normalizes interrupted probes, and avoids repeatedly restarting failed
servers until an explicit refresh.
expanded channel, mobile, MCP, provider, approval, settings, storage, and tool
inventories.
UI Fixes, Tests & Release Validation
to the active thread and limits it to genuinely streaming state while
preserving pinned-thread and recency ordering.
for pairing, cookies, access gating, remote routes, PWA privacy, Tailscale,
chat, workflows, settings, and mobile-shell routing.
cadence, native fallback, typing, rate limits, overflow, message splitting,
approvals, checkpoint persistence, Goal Mode, terminal notifications, and
plugin-channel delivery.
cancellation, subprocess termination, generation Stop, shell, browser, MCP,
Developer, voice, and generation-linked child agents.
Gemini schema contracts, Gmail and Goal schemas, Xquik configuration, and
Google Calendar concurrency, retry, reconciliation, and bulk-create tests.
messages, child-agent lifecycle cards, approval display safety, thread titles,
tool filtering, and active-run rendering.
Breaking Changes And Caveats
service. The desktop host must remain running and reachable through the
selected local network, Tailscale, ngrok, or custom route.
still makes the pairing endpoint internet-reachable. Keep tunnel URLs and
short-lived pairing links private, review access events, and revoke devices
that are no longer trusted.
install/create flows, Plugin Marketplace install/configure/update flows, or
every advanced workflow graph control. Those remain desktop-only.
and Telegram fall back to edit streaming when native streaming is unavailable;
SMS remains final-text-only by design, and long messages may arrive in parts.
arrays. If an incompatible tool was explicitly selected, agent creation fails
with a schema error instead of sending a request Gemini will reject.
action and metered/private-data implications before approving it.
previous-version updater checks, and real provider/channel/MCP validation
remain manual release gates after CI artifacts are built.
Files Changed
src/row_bot/mobile/*,src/row_bot/ui/mobile*.py,src/row_bot/ui/head_html.pysrc/row_bot/app.py,src/row_bot/ui/settings.py,src/row_bot/ui/chat*.py,src/row_bot/ui/state.pysrc/row_bot/channels/streaming.py,src/row_bot/channels/thread_notifications.pysrc/row_bot/channels/discord_channel.py,slack.py,telegram.py,whatsapp.py,sms.pysrc/row_bot/plugins/channel_runtime.py,src/row_bot/channels/runtime.pysrc/row_bot/agent_run_messages.py,approval_messages.py,agent_runner.py,agent_runs.py,tasks.pysrc/row_bot/cancellation.py,process_cancellation.py,src/row_bot/providers/transports/*cancellable*.pysrc/row_bot/providers/runtime.py,src/row_bot/tools/shell_tool.py,browser_tool.py,src/row_bot/developer/runtime.py,src/row_bot/mcp_client/runtime.pysrc/row_bot/providers/model_catalog_cache.py,src/row_bot/models.py,src/row_bot/providers/codex.py,src/row_bot/ui/provider_settings.pysrc/row_bot/providers/tool_schema.py,src/row_bot/agent.py,src/row_bot/tools/gmail_tool.py,goal_tool.pysrc/row_bot/tools/calendar_tool.pysrc/row_bot/mcp_client/recommended_servers.json,config.py,conflicts.py,runtime.py,src/row_bot/ui/mcp_settings.pysrc/row_bot/ui/sidebar.py,src/row_bot/threads.py,src/row_bot/ui/render.py,streaming.pyREADME.md,docs/ARCHITECTURE.md,docs/RELEASING.md,docs/SOURCE_LAYOUT.md,installer/README.mddocs-site/docs/*,scripts/docs/*src/row_bot/version.py,installer/row_bot_setup.iss,installer/install_deps.bat,installer/Row-Bot.app/Contents/Info.plist,.github/workflows/*scripts/cut_release.py,.github/ISSUE_TEMPLATE/bug_report.yml,tests/test_brand_constants.py,tests/test_linux_support.pytests/subsystem/mobile/*,tests/integration/mobile/*tests/subsystem/channels/*,tests/subsystem/providers/*,tests/subsystem/tools/*,tests/test_*.pyThis discussion was created from the release v4.4.0 - Mobile Companion, Channel Streaming & Runtime Reliability.
All reactions