From 00b60111d4d76ed9caf5408b1e126cb6460acd88 Mon Sep 17 00:00:00 2001
From: "@mrubens" <2600+mrubens@users.noreply.github.com>
Date: Sun, 6 Sep 2026 14:52:18 +0000
Subject: [PATCH] chore: release Roomote 1.4.0
---
.changeset/fast-automation-session-model.md | 5 --
.changeset/fast-reaction-supersession.md | 5 --
.changeset/session-wakeups.md | 5 --
CHANGELOG.md | 41 ++++++++++++++
apps/docs/automations.mdx | 53 +++++++++++++------
apps/docs/fast-sessions.mdx | 7 +++
apps/docs/integrations/sentry.mdx | 22 ++++++++
apps/docs/models.mdx | 21 ++++++--
.../providers/inference/github-copilot.mdx | 7 ++-
apps/docs/providers/inference/opencode.mdx | 7 ++-
.../providers/inference/vercel-ai-gateway.mdx | 6 ++-
package.json | 2 +-
12 files changed, 142 insertions(+), 39 deletions(-)
delete mode 100644 .changeset/fast-automation-session-model.md
delete mode 100644 .changeset/fast-reaction-supersession.md
delete mode 100644 .changeset/session-wakeups.md
diff --git a/.changeset/fast-automation-session-model.md b/.changeset/fast-automation-session-model.md
deleted file mode 100644
index 985dcff3de..0000000000
--- a/.changeset/fast-automation-session-model.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'roomote': patch
----
-
-Honor custom automation model and reasoning overrides for the Fast session across initial and resumed turns, without applying them to delegated coding tasks.
diff --git a/.changeset/fast-reaction-supersession.md b/.changeset/fast-reaction-supersession.md
deleted file mode 100644
index df333f1aef..0000000000
--- a/.changeset/fast-reaction-supersession.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@roomote/web': patch
----
-
-Emoji reactions and web platform events (setup kickoffs, input responses) no longer supersede a Fast turn that is parked for an inference retry or waiting to resume after an interruption. Every inline admission used to discard the conversation's older pending turn rows on the assumption that a newer human message stands in for the earlier request; a reaction or platform event does not, so the earlier question was silently dropped and its retry notice was turned into an interruption message. Those turns now keep their row and resume once the conversation is idle again, and a turn's entry and settle reconciles leave a retry notice alone while another durable row for the conversation is still pending, so the resumed run edits it into the answer instead of posting beside a false interruption. Typed human messages still supersede as before.
diff --git a/.changeset/session-wakeups.md b/.changeset/session-wakeups.md
deleted file mode 100644
index b1f47e47f2..0000000000
--- a/.changeset/session-wakeups.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@roomote/web': minor
----
-
-Fast Sessions can schedule a message to themselves with the new `manage_wakeups` tool. Ask Fast to "remind me in twenty minutes" or "check every ten minutes whether CI is green" and it creates a wakeup for that Session; when it fires, Fast picks the conversation back up with its history in context, does what was asked, and replies on the surface the Session lives on. One-shot wakeups always reply, recurring ones stay quiet unless there is news and cancel themselves when the monitored condition resolves. Wakeups are scoped to the conversation, need no administrator, are capped at ten per Session, and are cancelled when the Session is archived. Firing is durable: each occurrence is claimed on the row, a delayed queue job is only a hint, and a recovery sweep re-adds lost hints.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ad7e259885..dcdc30f202 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,47 @@
This file tracks product releases for Roomote (single monorepo version). Automated release entries are prepended by `pnpm run version`.
+## 1.4.0 (2026-09-06)
+
+Roomote 1.4 adds conversation-scoped reminders, Session-owned automations, and more model choices while improving task visibility and everyday reliability.
+
+### Highlights
+
+- Schedule reminders and recurring checks directly in a Fast Session, with results returning to the same conversation.
+- Keep custom automation reports, delegated work, and accepted suggestions together in one Session; review report destinations and environment preferences when upgrading.
+- Choose GPT-6 Astra through Vercel AI Gateway, GitHub Copilot, or OpenCode Zen, and inspect richer task handoffs and tool receipts.
+- Preserve follow-ups, Slack working indicators, and completed artifact uploads while improving Discord replies and mobile layouts.
+
+### Minor changes
+
+- Enable GPT-6 Astra through Vercel AI Gateway, GitHub Copilot, or OpenCode Zen alongside existing providers, subject to the connected account's model access. Existing model defaults remain unchanged.
+- Expand Session tool exchanges to inspect image questions and results, instructions sent to delegated tasks, and incoming task reports, with task links for following the conversation between participants.
+- OpenCode subagents can make one further nested delegation or consultation, allowing depth-two assistance while preserving each role's existing tool permissions.
+- Custom automations now run through Sessions, report delegated results together with actionable suggestions, and keep accepted suggestions in their originating Session and report thread. Configured environments are delegation preferences rather than guaranteed sandbox launches. Configure a report destination for chat delivery; otherwise results remain in the web Session without an owner-DM fallback. Runs use the creator's credentials, automations without a creator need an admin to re-save them, and Run now reports queued rather than a launched task ID.
+- Ask a Fast Session for a reminder or recurring check, including whole-second delays, and receive results in the same conversation. One-shot reminders reply when they fire; recurring checks stay quiet without news and stop when their condition resolves. Wakeups require no administrator, are limited to ten per Session, and are cancelled when the Session is archived; delivery is best effort rather than an exact-time guarantee.
+
+### Patch changes
+
+- Automation avatars no longer show glaring white backgrounds in dark mode, while retaining their light-mode appearance.
+- Azure sandboxes enable idle suspension by default and refresh the policy when reused, resumed, or restored. The policy follows the configured timeout, normally five hours; an explicit zero retains the opt-out.
+- Web transcripts hide newly marked runtime navigation messages already represented by task cards while preserving ordinary conversation links.
+- Previously uploaded artifacts remain available when a replacement upload is interrupted; unversioned task and Session lookups return the latest completed upload while explicit-version reads retain their existing behavior.
+- Completed visual proof is no longer reported as timed out while subsequent review or pull request delivery continues.
+- USD costs use consistent thousands separators, and Task Info refreshes inference costs when opened and while visible instead of leaving stale totals on screen.
+- Device-code connections can recover after a failed authorization dialog is closed and reopened, including GitHub Copilot, ChatGPT, and xAI connections.
+- Discord automation threads accept directed follow-ups without another mention, thread replies avoid invalid inline reply references, and coding-task links clearly identify newly started work.
+- Honor custom automation model and reasoning overrides for the Fast session across initial and resumed turns, without applying them to delegated coding tasks.
+- Fast retains follow-up messages sent during response closeout for the next turn, while reactions and platform events no longer discard parked questions or turn their retry notices into false interruptions.
+- Merge announcements recover uniquely matched signed pull request screenshot URLs after redaction so images remain available without relaxing safe-fetch restrictions.
+- Session board cards and long labels stay within mobile layouts, composer suggestion hints no longer overlap typed text, and Automations uses more of the available screen width.
+- Pull request feedback triage uses its configured queue retries after preparation failures instead of unnecessarily waiting for scheduled recovery.
+- Provider qualification verifies the requested structured tool call, rejecting misleading response text while accepting fragmented streamed function names.
+- Review handoffs resolve the acting user or human owner when messaging linked tasks instead of failing solely because the token lacks user context.
+- Sentry triage uses the requested accessible organization, projects, and time scope rather than assuming internal project names or implicit defaults, and asks for clarification when the scope is ambiguous.
+- New Sessions start correctly after resetting the model picker to Default.
+- Delayed titles from earlier Fast turns no longer clear the working indicator for a newer Slack turn.
+- Streamed output preserves UTF-8 characters split across chunks instead of replacing multibyte characters with corrupted text.
+
## 1.3.1 (2026-09-05)
Roomote 1.3.1 improves Fast, Live Preview, chat, and MCP coordination while adding focused controls for pull request reviews and custom automations.
diff --git a/apps/docs/automations.mdx b/apps/docs/automations.mdx
index 3439d94f59..8da07055b5 100644
--- a/apps/docs/automations.mdx
+++ b/apps/docs/automations.mdx
@@ -139,11 +139,15 @@ teammates can start from the report. Asking only for a summary or list of action
items keeps those actions as report text. Launchable suggestions require a chat
report destination. Each suggestion can select its own named environment,
**All repositories**, or **Fast** target, so one report can offer follow-ups for
-different workspaces and execution modes. Runs scoped to **All repositories**
-pin each suggestion to a concrete repository, then start it in a matching named
-environment when one is available. Those runs prepare every active repository,
-so they can take longer in large deployments. Use a named environment when the
-automation only needs a specific repository set.
+different workspaces and execution modes. Repository-specific suggestions from
+**All repositories** runs start in a matching named environment when one is
+available. Choosing **All repositories** is a delegation preference, not a
+request to prepare every repository on every run. Use a named environment when
+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 and report thread, so earlier findings remain in context.
Admins can also choose **Custom schedule** and enter either a standard
five-field cron expression or a natural-language schedule such as “weekdays at
@@ -154,8 +158,8 @@ Custom schedules do not support seconds or cron macros.
Every run is a Session. On each due tick, Roomote opens a Session for the run
and hands it the prompt exactly as if a teammate had typed it. The Session
answers from integrations when that is enough, and delegates a normal task when
-repository or workspace work is needed, launching it in the preferred
-environment when one is set. Delegated tasks report back to the Session, and
+repository or workspace work is needed, using the preferred environment as a
+routing hint when one is set. Delegated tasks report back to the Session, and
the Session is what talks to the report destination.
Runs deliver to every custom-automation report destination: Slack, Discord,
@@ -169,21 +173,21 @@ the active provider installation, conversation, and linked user before
resuming. Runs with no report destination remain stored Sessions and do not
post to chat.
-Runs execute as the automation's creator. An automation whose creator no longer
-exists fails until an administrator re-saves it.
+Runs execute as the automation's creator. An automation without a creator
+cannot run until an administrator re-saves it.
A run can skip or fail before execution when its configuration or launch state
-prevents it from starting. A failure always reaches the report destination: a
-run that cannot start, or whose delegated task fails, posts one short note
-there, so a broken automation is noticed rather than silently skipped.
+prevents it from starting. When the report destination is reachable, startup or
+delegated-task failures are reported there. If the destination is disconnected
+or cannot be resolved, check the automation's latest run error in the dashboard.
When a report destination is set, Roomote uses that conversation for actionable
or important findings, meaningful completed results, blockers, and questions
that need input. Routine success, healthy status, and no-change results stay
silent unless the automation prompt explicitly asks for a report in those
cases. The first message starts a thread, later updates continue that same
-thread, and you can reply there to talk to the task. There is no progress
+thread, and you can reply there to continue the Session. There is no progress
chatter in between. Without a destination, the run happens silently and its
-results appear only in the task view.
+results remain in its stored web Session, including any delegated task cards.
Unless the prompt asks for a different presentation, custom automation reports
lead with the result, stay concise, and use short Markdown headings and bullets
@@ -205,9 +209,24 @@ are not accepted.
Use **Run now** on an enabled automation to test it immediately. Each card has
its own run state, so starting one custom automation does not prevent you from
-running another. A queued result confirms that Roomote accepted the run, not
-that it completed; follow its task, Session, or configured report destination
-for the final result.
+running another. A queued result confirms that Roomote accepted a Session turn,
+not that a coding task launched or the work completed. A task ID is not promised
+at this point; follow the Session or configured report destination for the final
+result and any delegated tasks.
+
+### Upgrading to 1.4
+
+Existing custom automations now use this Session-first flow. Review prompts
+that assumed a sandbox would always start: specify the repository work you need,
+and check the preferred environment. Their model override now controls Fast;
+delegated coding tasks use an explicitly selected model or the deployment coding
+default instead.
+
+Set an explicit report destination if you want chat delivery. Without one, the
+run stays in a stored web Session rather than falling back to the owner's direct messages.
+Existing automations with a creator do not need to be re-saved just to upgrade;
+only creatorless automations require an administrator to re-save them before
+they can run. Use **Run now** to verify the prompt, routing, and destination.
The deployment cap is 25 custom automations.
diff --git a/apps/docs/fast-sessions.mdx b/apps/docs/fast-sessions.mdx
index 4bfa49fb35..4a4a350283 100644
--- a/apps/docs/fast-sessions.mdx
+++ b/apps/docs/fast-sessions.mdx
@@ -96,6 +96,13 @@ generated title that updates as the Session evolves. Replies appear as the
model writes them, then settle into the saved message once the reply is
delivered.
+Expand a tool receipt to inspect the request and result, including messages sent
+to delegated tasks, reports received from them, and image-inspection questions
+and answers. Task-message receipts link to the source or destination task by
+title, with its ID as a fallback. Details are sanitized for display; internal
+event metadata is not exposed. A running receipt may show its input before a
+result arrives.
+
Fast sessions can also render presentational widgets such as status cards,
tables, and plans directly in the transcript. Widget HTML is sanitized and
sandboxed in the web view. Chat surfaces receive a concise text preview and a
diff --git a/apps/docs/integrations/sentry.mdx b/apps/docs/integrations/sentry.mdx
index 3d63d153e4..614ad2a536 100644
--- a/apps/docs/integrations/sentry.mdx
+++ b/apps/docs/integrations/sentry.mdx
@@ -23,6 +23,28 @@ Sentry gives Roomote incident and performance context during a task. It can also
support scheduled read-only Sentry triage. The final decision, code change, and
review still happen in the normal task and repository flow.
+## Scope a triage request
+
+Name the Sentry organization, projects or workloads, time window, and relevant
+environments. For example: "Triage checkout errors in the storefront project
+in our Sentry organization over the last 24 hours, production only."
+Roomote discovers accessible scope and asks for clarification when the target
+or window is missing or ambiguous instead of assuming project names or scanning
+other organizations. Include multiple organizations only when you want them
+scanned, and preserve any region-specific Sentry URL in your request.
+
+Triage scans stay read-only. Ask explicitly for follow-up work and identify the
+eligible repository or environment if you want findings turned into execution;
+otherwise recommendations stay in the report. Specify a report destination and
+whether clean scans should stay quiet. Access or scope blockers are reported
+rather than treated as a clean result.
+
+The built-in **Triage Sentry Issues** [automation](/automations) supplies its own
+schedule-derived scan window and configured project scope. Leaving its project
+slugs blank selects all projects available to the configured connection; it
+does not restore an implicit project list for ad hoc or custom triage requests.
+Roomote still asks which organization to use if that selection is ambiguous.
+
## Recipes using this
- [Triage customer issues](/cookbook/support-channel)
diff --git a/apps/docs/models.mdx b/apps/docs/models.mdx
index eb882dc8fb..be2cae36a1 100644
--- a/apps/docs/models.mdx
+++ b/apps/docs/models.mdx
@@ -4,6 +4,8 @@ icon: brain
description: Choose inference providers, enable task models, and tune model roles for different kinds of Roomote work.
---
+import { IntegrationName } from '/snippets/integration-name.jsx';
+
Models decide how Roomote thinks through a task.
The sandbox provider gives a Roomote agent a sandbox to work in. The inference
@@ -74,11 +76,11 @@ These connections use metered API billing or a provider-managed gateway:
| [MiniMax](/providers/inference/minimax) | MiniMax API key | MiniMax account |
| [Moonshot AI (Kimi)](/providers/inference/moonshot-ai) | Kimi Open Platform key | Moonshot Open Platform balance |
| [OpenAI](/providers/inference/openai) | OpenAI API key | OpenAI API project |
-| [OpenCode Zen](/providers/inference/opencode) | OpenCode API key | OpenCode account |
+| | OpenCode API key | OpenCode account |
| [OpenRouter](/providers/inference/openrouter) | OpenRouter API key | OpenRouter balance and key limit |
| [Requesty](/providers/inference/requesty) | Requesty API key | Requesty organization |
| [Together AI](/providers/inference/together-ai) | Together AI API key | Together AI account |
-| [Vercel AI Gateway](/providers/inference/vercel-ai-gateway) | AI Gateway API key | Vercel team |
+| | AI Gateway API key | Vercel team |
| [xAI](/providers/inference/xai) | xAI API key | xAI API team |
| [Z.AI](/providers/inference/zai) | Regional Z.AI platform key | Z.AI or BigModel API balance |
@@ -90,7 +92,7 @@ general API balance:
| Provider | Connection | Usage behavior |
| --- | --- | --- |
| [ChatGPT Subscription](/providers/inference/chatgpt) | OpenAI device authorization | ChatGPT plan windows |
-| [GitHub Copilot](/providers/inference/github-copilot) | GitHub device authorization | Copilot plan allowance |
+| | GitHub device authorization | Copilot plan allowance |
| [Kimi for Coding](/providers/inference/kimi-for-coding) | Kimi membership key | Coding membership allowance |
| [OpenCode Go](/providers/inference/opencode-go) | OpenCode API key | Go plan allowance |
| [xAI Grok Subscription](/providers/inference/xai-subscription) | xAI account authorization | SuperGrok or eligible X plan allowance |
@@ -131,6 +133,13 @@ off, and they cannot be deleted while their provider stays connected — turn a
model off to stop using it. To go beyond the recommended set, add any model by
its slug from the add-model field.
+**GPT-6 Astra** is also recommended through [Vercel AI Gateway](/providers/inference/vercel-ai-gateway),
+[GitHub Copilot](/providers/inference/github-copilot), and
+[OpenCode Zen](/providers/inference/opencode). Connect the provider, enable Astra
+in **Available Models**, and assign it to a role or select it for a Session or
+task. Adding these routes does not change existing model defaults; access still
+depends on the connected provider account or plan.
+
### Recommended default models
Providers also carry recommended defaults for the model roles below — for
@@ -333,6 +342,12 @@ inspect a repository workspace, post to chat, or launch, message, or cancel
tasks. Fast remains responsible for the user-facing answer and any execution it
delegates.
+OpenCode allows two levels of subagents: the main agent can delegate to a
+subagent, which can make one further nested delegation or consultation. This
+does not permit unbounded recursion or expand a role's permissions. Fast
+consultants still cannot inspect a repository workspace or control tasks;
+Fast owns any workspace-backed execution.
+
## Choosing models
Start by choosing for reliability, then optimize for cost and speed once tasks
diff --git a/apps/docs/providers/inference/github-copilot.mdx b/apps/docs/providers/inference/github-copilot.mdx
index a8fe2e3e70..416cd7eb60 100644
--- a/apps/docs/providers/inference/github-copilot.mdx
+++ b/apps/docs/providers/inference/github-copilot.mdx
@@ -1,6 +1,6 @@
---
title: GitHub Copilot
-icon: 'https://unpkg.com/@lobehub/icons-static-svg@1.94.0/icons/githubcopilot.svg'
+icon: 'https://api.iconify.design/simple-icons:githubcopilot.svg?color=currentColor'
description: Use models included with an eligible GitHub Copilot account in Roomote.
---
@@ -18,6 +18,11 @@ if the account does not have access yet.
No API key or environment variable is required. Roomote stores the OAuth record
and exposes supported models with the `github-copilot/` prefix.
+GPT-6 Astra is available as `github-copilot/gpt-6-astra`. Enable it in
+**Settings > Models** and assign it to a role or select it for a task or Session.
+Existing defaults stay unchanged. Availability depends on your Copilot plan and
+organization's model-access policy.
+
## Cost behavior
Requests use the connected Copilot plan. For qualifying legacy annual Pro and
diff --git a/apps/docs/providers/inference/opencode.mdx b/apps/docs/providers/inference/opencode.mdx
index f3c9685f18..4cd10ba016 100644
--- a/apps/docs/providers/inference/opencode.mdx
+++ b/apps/docs/providers/inference/opencode.mdx
@@ -1,6 +1,6 @@
---
title: OpenCode Zen
-icon: 'https://unpkg.com/@lobehub/icons-static-svg@1.94.0/icons/opencode.svg'
+icon: 'https://api.iconify.design/simple-icons:opencode.svg?color=currentColor'
description: Use OpenCode's routed Zen model service with Roomote.
---
@@ -26,6 +26,11 @@ Roomote exposes routed Zen models under the `opencode/` prefix and adds a recomm
set after connection. The preset can use inexpensive routed models for helper
work and stronger models for coding, planning, vision, and review.
+GPT-6 Astra is available as `opencode/gpt-6-astra`. Enable it in
+**Settings > Models** and assign it to a role or select it for a task or Session.
+Existing defaults stay unchanged, and the Zen account must have access and
+sufficient balance for the model.
+
## Cost behavior
OpenCode applies the pricing rules shown for Zen and the routed
diff --git a/apps/docs/providers/inference/vercel-ai-gateway.mdx b/apps/docs/providers/inference/vercel-ai-gateway.mdx
index 932c35c4e0..37817592ee 100644
--- a/apps/docs/providers/inference/vercel-ai-gateway.mdx
+++ b/apps/docs/providers/inference/vercel-ai-gateway.mdx
@@ -1,6 +1,6 @@
---
title: Vercel AI Gateway
-icon: 'https://unpkg.com/@lobehub/icons-static-svg@1.94.0/icons/vercel.svg'
+icon: 'https://api.iconify.design/simple-icons:vercel.svg?color=currentColor'
description: Route Roomote model calls through Vercel AI Gateway.
---
@@ -26,6 +26,10 @@ Roomote exposes supported models under the `vercel//` prefix and
adds a recommended cross-vendor set. Apply the recommended mapping or choose
models individually for each role.
+GPT-6 Astra is available as `vercel/openai/gpt-6-astra`. Enable it in
+**Settings > Models** and select it for the work you want it to handle; existing
+defaults stay unchanged. Your Vercel gateway must allow access to that model.
+
## Cost behavior
Vercel records gateway usage and applies the billing terms, budgets, and
diff --git a/package.json b/package.json
index d68c6277af..146a93b2a7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "roomote",
- "version": "1.3.1",
+ "version": "1.4.0",
"license": "FCL-1.0-ALv2",
"packageManager": "pnpm@10.29.3",
"engines": {