From 52cb582ae2838d9a13a7722981e6de6cbf4d7f91 Mon Sep 17 00:00:00 2001
From: "@mrubens" <2600+mrubens@users.noreply.github.com>
Date: Fri, 11 Sep 2026 00:10:27 +0000
Subject: [PATCH 1/4] chore: release Roomote 1.7.0
---
.changeset/quiet-drafts-stay-put.md | 5 --
.changeset/unify-skills-settings.md | 5 --
CHANGELOG.md | 45 ++++++++++
apps/docs/automations.mdx | 11 ++-
apps/docs/communications.mdx | 17 ++--
apps/docs/cost-analytics.mdx | 20 +++--
apps/docs/environment-variables.mdx | 2 +-
apps/docs/environments/definition.mdx | 7 +-
apps/docs/fast-sessions.mdx | 6 ++
apps/docs/integrations/custom-mcp-servers.mdx | 7 +-
apps/docs/integrations/index.mdx | 2 +-
apps/docs/integrations/voice.mdx | 2 +-
apps/docs/logo/integrations/agentmail.svg | 18 ++--
apps/docs/logo/integrations/voice.svg | 8 --
apps/docs/models.mdx | 8 ++
apps/docs/snippets/integration-name.jsx | 2 +-
apps/docs/source-control.mdx | 14 +++
apps/docs/voice.mdx | 8 +-
.../settings/ExperimentalSettings.tsx | 69 ---------------
.../pages/ExperimentalSettingsPage.tsx | 3 +-
.../settings/settings-navigation.test.ts | 4 +-
.../settings/settings-navigation.ts | 3 +-
.../experimental-settings/index.test.ts | 86 -------------------
.../commands/experimental-settings/index.ts | 63 --------------
apps/web/src/trpc/routers/_app.ts | 15 ----
package.json | 2 +-
packages/db/package.json | 1 -
.../db/src/lib/model-runtime-config.test.ts | 40 ---------
packages/db/src/lib/model-runtime-config.ts | 16 +---
.../src/__tests__/config.test.ts | 11 +--
.../__tests__/metadata-descriptions.test.ts | 10 +--
packages/feature-flags/src/config.ts | 6 --
packages/feature-flags/src/index.ts | 9 --
packages/feature-flags/src/types.ts | 6 +-
pnpm-lock.yaml | 3 -
35 files changed, 136 insertions(+), 398 deletions(-)
delete mode 100644 .changeset/quiet-drafts-stay-put.md
delete mode 100644 .changeset/unify-skills-settings.md
delete mode 100644 apps/docs/logo/integrations/voice.svg
delete mode 100644 apps/web/src/components/settings/ExperimentalSettings.tsx
delete mode 100644 apps/web/src/trpc/commands/experimental-settings/index.test.ts
delete mode 100644 apps/web/src/trpc/commands/experimental-settings/index.ts
diff --git a/.changeset/quiet-drafts-stay-put.md b/.changeset/quiet-drafts-stay-put.md
deleted file mode 100644
index 9713777be7..0000000000
--- a/.changeset/quiet-drafts-stay-put.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@roomote/web": patch
----
-
-Keep pull request metadata refreshes state-neutral and distinguish later opt-in clean-review promotion from the refresh itself.
diff --git a/.changeset/unify-skills-settings.md b/.changeset/unify-skills-settings.md
deleted file mode 100644
index 577f59b404..0000000000
--- a/.changeset/unify-skills-settings.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@roomote/web": patch
----
-
-Unify shared and environment-specific skills in one searchable Settings catalog with availability filters and a marketplace dialog.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ed2b670aa2..7c6c4ad1df 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,51 @@
This file tracks product releases for Roomote (single monorepo version). Automated release entries are prepended by `pnpm run version`.
+## 1.7.0 (2026-09-11)
+
+Roomote 1.7 adds natural voice and email conversations, smarter follow-through for delegated work, richer automation controls, and clearer usage insights.
+
+### Highlights
+
+- Talk with Fast Sessions through GPT-Live voice calls, or start and continue Roomote work over email with AgentMail.
+- Let Fast quietly follow delegated coding tasks, surface meaningful developments, and correct work that drifts from the request.
+- Add natural-language routing rules to built-in automations and manage existing pull requests across supported providers.
+- Track token usage alongside spend in Cost Analytics, with daily trends and detailed provider and model breakdowns.
+
+### Minor changes
+
+- Use Email through AgentMail as a replyable Roomote communications channel, with inbox-scoped setup, durable threaded delivery, signed answers, and verified-address safeguards.
+- Built-in automations can use natural-language Additional rules for repository scope, per-repository routing, and report guidance.
+- Track token usage alongside spend in Cost Analytics with a total-token trend line, provider and model totals and averages, and token-aware drilldowns.
+- DeepSeek V4.1 Flash replaces the dated Flash recommendation across OpenRouter, Vercel AI Gateway, and OpenCode Go.
+- Fast Sessions quietly follow launched coding tasks, report meaningful developments, and apply evidence-backed corrections until the work settles.
+- Agents can close, reopen, retarget, and edit existing pull requests across supported source-control providers without creating replacements.
+- Weekly Manager Stats includes a daily created-versus-merged pull request chart and starts enabled on new deployments once a destination is configured.
+- Unify shared and environment-specific skills in one searchable Settings catalog with availability filters and a marketplace dialog.
+- Talk naturally with Roomote from Fast Sessions using GPT-Live, with full-duplex audio, live transcription, interruptions, and deployment-wide Voice setup in Settings.
+
+### Patch changes
+
+- Custom automation task models can be changed only by the automation owner or an administrator.
+- Saved automation cards show cadence in the deployment scheduling timezone used for execution.
+- Fast Sessions can manage reminders and automations directly again without a scheduling-discovery step.
+- Fast Sessions can use deployment-wide custom remote MCP integrations without exposing upstream credentials.
+- Fast Sessions honor saved Routing Rules when selecting an environment or delegated coding-task model.
+- Source-control and Linear webhook redeliveries no longer risk repeating actions when the original audit outcome was not finalized.
+- Blank slate tasks no longer expose internal repository sentinels in task headers and filters.
+- Independent Slack suggested tasks start in separate execution threads and Sessions instead of sharing task context.
+- Communication replies use compact live footers that keep running-task counts, pull request links, and Session links current as work starts and finishes.
+- Preview Markdown artifacts directly in task and Session galleries before opening them.
+- Coding tasks recover from exhausted transient OpenCode connection resets instead of stopping without a useful Session handoff.
+- Preview status and failure pages provide consistent responsive branding, explanations, and recovery actions across desktop and mobile.
+- Keep pull request metadata refreshes state-neutral and distinguish later opt-in clean-review promotion from the refresh itself.
+- Custom automation cards refresh persisted results after Run now without requiring a page reload.
+- Slack requests no longer receive a redundant eyes reaction while Roomote is working.
+- Connected Sentry integrations expose the full admin-approved tool catalog instead of a stale static allowlist.
+- Open a user's Sessions directly from their avatar in Session viewers and task messages.
+- Automatic task follow-through timers stay out of the Session reminder list while user-created timer receipts clearly describe each action and reused schedule.
+- The Automations list combines built-in and custom entries with consistent search, columns, responsive text, and alphabetical ordering.
+
## 1.6.0 (2026-09-09)
Roomote 1.6 adds flexible sandbox and public-repository work, native conversation charts, leaner scheduling discovery, and more reliable Sessions and skill management.
diff --git a/apps/docs/automations.mdx b/apps/docs/automations.mdx
index bfda383e67..121df809c4 100644
--- a/apps/docs/automations.mdx
+++ b/apps/docs/automations.mdx
@@ -148,9 +148,7 @@ Each automation card summarizes its cadence, workspace target, report destinatio
creator, and most recent run. Blank slate runs do not clone repositories or require
source-control credentials.
-Use **View previous runs** on an automation card to open the task list
-filtered to that automation's runs. For a custom automation, the history is
-scoped to that specific automation rather than all custom automations.
+Use the Sessions list and its automation filters when you need run history.
When creating an automation through Roomote chat, ask for **suggested tasks** or
**launchable follow-ups** if qualifying findings should become tasks that
@@ -166,9 +164,10 @@ the automation only needs a specific repository set.
Suggestions can accompany the Session's report after a delegated task finishes,
not just its initial response. Accepting one keeps the follow-up in the
-originating Session, so earlier findings remain in context. In Slack, launches
-reuse that Session's report thread when it is available. Thread or topic
-placement on other providers depends on the provider and execution target.
+report context through a link without sharing execution context with another
+suggestion. In Slack, each accepted suggestion starts a separate top-level
+execution thread and Session. Thread or topic placement on other providers
+depends on the provider and execution target.
For a custom automation you manage, choose **Custom schedule** and enter either a standard
five-field cron expression or a natural-language schedule such as “weekdays at
diff --git a/apps/docs/communications.mdx b/apps/docs/communications.mdx
index 002b0b3e7b..ebf2c374c7 100644
--- a/apps/docs/communications.mdx
+++ b/apps/docs/communications.mdx
@@ -23,7 +23,7 @@ attention.
| | Teams that use Microsoft 365, Teams channels, and Microsoft Entra accounts | Microsoft can also be used for sign-in and account linking. |
| | Lightweight personal, group, or forum-topic chat access | Telegram is a messaging provider, not a sign-in provider. |
| | Communities and teams that organize work in channels, threads, and forums | Discord is a messaging provider, not a sign-in provider. |
-| | Low-frequency task requests and results over email | Email conversations are replyable in both directions; not a sign-in provider. |
+| | Low-frequency task requests and results over email | Email conversations are replyable in both directions; not a sign-in provider. |
Configure communications providers from **Settings > Communications**.
@@ -55,20 +55,19 @@ the exact suggestion you want by reacting to its message:
- on Telegram, add a new 👍 reaction or use the suggestion's **Start** button
The person starting the suggestion must have a linked Roomote account. Roomote
-also needs an environment that can run the suggestion's target repository. A
-suggestion with a pinned workspace starts its task inside the Session that
-produced the report, so the task, the report, and any follow-up conversation
-share one transcript.
+also needs an environment that can run the suggestion's target repository.
+Each accepted Slack suggestion starts in its own top-level execution thread and
+Session, so independent follow-ups do not share task context with each other.
Configured **Call Roomote via emoji** automations are separate from these
suggestion reactions.
When the suggestion is not pinned to an execution target, Fast-capable chat
surfaces start it in Fast so Roomote can answer or delegate as needed. A pinned
environment, repository-only surface, or provider without Fast support starts
-the coding task directly. Suggested work remains connected to the Session that
-produced the report. In Slack, suggestions with an available origin Session
-continue in its report thread. Thread or topic placement for other launches
-depends on the provider and execution target.
+the coding task directly. The launch links back to the originating report for
+context, while its execution and follow-up conversation remain isolated. Thread
+or topic placement on providers other than Slack depends on the provider and
+execution target.
## React to Roomote replies
diff --git a/apps/docs/cost-analytics.mdx b/apps/docs/cost-analytics.mdx
index b0b1b874a4..3af23ed69a 100644
--- a/apps/docs/cost-analytics.mdx
+++ b/apps/docs/cost-analytics.mdx
@@ -5,9 +5,9 @@ description: Review Roomote inference spend by type, source, environment, provid
---
Cost Analytics helps deployment teams understand how Roomote uses inference
-across tasks, Fast sessions, and automations. It reports the cost of
-recorded model usage in US dollars, so you can spot the environments, models,
-and work types that drive spend.
+across tasks, Fast sessions, and automations. It reports cost in US dollars and
+token usage, so you can spot the environments, models, and work types that drive
+spend or high-volume inference.
Any signed-in deployment user can open **Analytics** from the dashboard. The
page opens to **Costs** by default.
@@ -23,6 +23,7 @@ recorded inference usage. Use it to answer questions such as:
- whether a particular environment or model is driving costs
- how usage differs between people and automations
- how a provider's cost changes over time
+- how token volume changes even when a request has no recorded price
The view starts grouped by **Type**. It distinguishes manual and automated
tasks, **Session** orchestration, **Memories** synthesis, and other **Non-task
@@ -34,6 +35,11 @@ model and provider. The source also appears in the detail drilldown. Choose a
time range before comparing periods so the chart and breakdown use the same
window.
+The chart overlays a **Total tokens** trend line on the cost bars. Its tooltip
+shows token and cost totals for the same day and grouping. The breakdown table
+includes **Total tokens** and **Avg tokens / task** alongside cost, and selecting
+a chart segment or table value opens the matching token-aware detail rows.
+
Analytics date presets and daily chart buckets use the web server's timezone,
including daylight-saving transitions. Costs, Tasks, and PR analytics use the
same calendar-day boundaries; these are not based on each viewer's browser
@@ -52,6 +58,8 @@ providers. It is separate from [Anonymous Analytics](/anonymous-analytics):
cost data stays inside your deployment for your team to review, while anonymous
analytics is optional product telemetry sent to the Roomote team.
-If a provider does not report pricing or usage for a request, that request
-cannot contribute a cost to the view. Use provider and model filters to narrow
-an investigation when totals do not match an external provider invoice.
+If a provider reports tokens but no price for a request, that activity appears
+in token totals even though it contributes no cost. A request with neither
+pricing nor token usage cannot contribute to those metrics. Use provider and
+model filters to narrow an investigation when totals do not match an external
+provider invoice.
diff --git a/apps/docs/environment-variables.mdx b/apps/docs/environment-variables.mdx
index 57c655b072..518fc62feb 100644
--- a/apps/docs/environment-variables.mdx
+++ b/apps/docs/environment-variables.mdx
@@ -372,7 +372,7 @@ as per-task auth tokens or workspace paths.
| `R_ALLOWED_EMAILS` | Optional | Comma-separated email allowlist for deployments that restrict sign-in by email. |
| `R_ELEVENLABS_API_KEY` | Optional | ElevenLabs API key for narrated feature-demo videos. The key stays on the control plane; sandboxes reach text-to-speech only through an authenticated Roomote endpoint. A key scoped to text-to-speech only is sufficient and recommended. |
| `R_ELEVENLABS_VOICE_ID` | Optional | ElevenLabs voice ID used for feature-demo narration. Required alongside the API key for narration to be available. |
-| `R_VOICE_OPENAI_API_KEY` | Optional | OpenAI key dedicated to GPT-Live voice conversations. Falls back to `OPENAI_API_KEY` when unset and requires project access to `gpt-live-1`. The key stays on the control plane; browsers receive only a server-negotiated WebRTC session answer. |
+| `R_VOICE_OPENAI_API_KEY` | Optional | OpenAI key dedicated to GPT-Live voice conversations. It does not fall back to `OPENAI_API_KEY` and requires project access to `gpt-live-1`. The key stays on the control plane; browsers receive only a server-negotiated WebRTC session answer. |
During Microsoft Teams setup, Roomote uses the Microsoft Entra app values for
the Teams bot by default. Use **Show advanced config** after the Directory
diff --git a/apps/docs/environments/definition.mdx b/apps/docs/environments/definition.mdx
index a8b40594c4..255daef38f 100644
--- a/apps/docs/environments/definition.mdx
+++ b/apps/docs/environments/definition.mdx
@@ -381,11 +381,14 @@ repository has a known trap, state it plainly.
Admins can configure natural-language routing rules from **Settings →
Environments**. Each rule maps a description, such as “Messages sent in the
hospital-bugs Slack channel,” to an environment or the broad **All repositories**
-workspace.
+workspace. A rule can also recommend a coding model for work that Fast delegates.
Rules are guidance rather than exact string matchers. An environment explicitly
named in a request takes precedence, and a specific rule takes precedence over a
-catch-all default.
+catch-all default. Fast evaluates the saved rules when it chooses an environment
+or model for a delegated task; they do not override a model or environment the
+user explicitly requested. Rules that point to a deleted environment are ignored
+until an admin updates or removes them.
## MCP servers
diff --git a/apps/docs/fast-sessions.mdx b/apps/docs/fast-sessions.mdx
index 1aa567f52b..51b736435f 100644
--- a/apps/docs/fast-sessions.mdx
+++ b/apps/docs/fast-sessions.mdx
@@ -138,6 +138,12 @@ reply in the transcript. Delegated tasks also report their completion, blockers,
and relevant results back into the parent Session; open the task workspace when
you need its full logs or diff.
+Fast quietly follows the coding tasks it launches after the conversation becomes
+idle. It reports meaningful progress, blockers, and questions that need input,
+and can send an evidence-backed correction when a task is drifting from the
+request. Routine status stays quiet. Follow-through stops when the Session's
+coding work settles instead of leaving a recurring monitor behind.
+
**Session info** shows the total inference cost for the conversation and its
attached tasks. Open the cost breakdown to separate direct Session orchestration
from each task's usage.
diff --git a/apps/docs/integrations/custom-mcp-servers.mdx b/apps/docs/integrations/custom-mcp-servers.mdx
index 204ad10c5c..c3daee5a61 100644
--- a/apps/docs/integrations/custom-mcp-servers.mdx
+++ b/apps/docs/integrations/custom-mcp-servers.mdx
@@ -5,8 +5,9 @@ description: 'Connect MCP servers that are not in the built-in catalog'
Custom MCP servers let agents use services that Roomote does not ship a
built-in integration for. Deployment admins configure them under
-**Settings → Integrations → Custom MCP Servers**, and they become available to
-agents in every task.
+**Settings → Integrations → Custom MCP Servers**. Remote servers become
+available to both Fast Sessions and sandbox tasks. Local stdio servers need a
+task sandbox because Roomote launches their process inside that workspace.
Most MCP servers publish a JSON snippet in their docs. The add dialog's
**Import from JSON** button accepts a pasted `mcpServers` snippet (or a bare
@@ -27,7 +28,7 @@ Three kinds of servers are supported:
## How remote servers are reached
Remote custom servers are never handed to the task sandbox directly. The
-sandbox sees an authenticated Roomote proxy URL, and the proxy injects the
+sandbox and Fast use an authenticated Roomote proxy, and the proxy injects the
real credentials per request. This means:
- Header values and OAuth tokens never appear in sandbox-readable
diff --git a/apps/docs/integrations/index.mdx b/apps/docs/integrations/index.mdx
index c4694e85e0..7e0446cf19 100644
--- a/apps/docs/integrations/index.mdx
+++ b/apps/docs/integrations/index.mdx
@@ -72,7 +72,7 @@ from [Personal Settings](/personal-settings).
| | Read-only database access in Supabase | Enable first, then teammates link accounts |
| | Shared memory across tasks and Fast sessions | Admin connection once |
| | Deployments, logs, and domain availability | Admin connection once |
-| | Voice calls with Roomote on Fast Sessions | Admin connection once |
+| | Voice calls with Roomote on Fast Sessions | Admin connection once |
| | Public X posts, users, trends, and news | Admin connection once |
| | Paid external capabilities via Zero | Admin connection once |
diff --git a/apps/docs/integrations/voice.mdx b/apps/docs/integrations/voice.mdx
index 35054bdded..5e0cfdd62a 100644
--- a/apps/docs/integrations/voice.mdx
+++ b/apps/docs/integrations/voice.mdx
@@ -1,7 +1,7 @@
---
title: Voice
description: Let your team talk to Roomote on a voice call.
-icon: 'audio-lines'
+icon: 'openai'
---
Connect Voice when you want people to [talk to Roomote](/voice) on a call from
diff --git a/apps/docs/logo/integrations/agentmail.svg b/apps/docs/logo/integrations/agentmail.svg
index 5a462aa4a6..29cba51e61 100644
--- a/apps/docs/logo/integrations/agentmail.svg
+++ b/apps/docs/logo/integrations/agentmail.svg
@@ -1,14 +1,6 @@
-