From 2a13ef40e99394b6e01c61864e41850dcfd68cf3 Mon Sep 17 00:00:00 2001 From: "@mrubens" <2600+mrubens@users.noreply.github.com> Date: Thu, 27 Aug 2026 23:05:42 +0000 Subject: [PATCH 1/2] Release Roomote 0.45.0 --- CHANGELOG.md | 34 ++++++++++++++++++ apps/docs/environment-variables.mdx | 9 +++++ apps/docs/memory.mdx | 56 +++++++++++++++++++++-------- apps/docs/models.mdx | 12 ++++--- apps/docs/self-hosting.mdx | 32 +++++++++-------- package.json | 2 +- 6 files changed, 111 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b497743f5..95bc6f304 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,40 @@ This file tracks product releases for Roomote (single monorepo version). Automated release entries are prepended by `pnpm run version`. +## 0.45.0 (2026-08-27) + +This release adds secure hosted trial inference and self-run Brain model options, expands GLM 5.3 support, and improves reliability across Fast sessions, pull-request reviews, Memory, and chat. + +### Highlights + +- Start hosted deployments with secure, spend-capped Roomote trial inference and accurate cost reporting. +- Run Brain embeddings and reranking on self-hosted infrastructure with multilingual bundled defaults. +- Use GLM 5.3 and GLM 5.3 Flash across more existing inference providers. +- Keep Fast sessions, pull-request re-reviews, Memory ingestion, and chat reporting reliable through retries and resumptions. + +### Minor changes + +- Expand GLM 5.3 and GLM 5.3 Flash availability and recommendations across OpenRouter, Vercel AI Gateway, Requesty, OpenCode Go, Z.AI, and Z.AI Coding Plan. +- Offer secure, spend-capped Roomote trial inference during hosted setup, record its real model costs in task and cost analytics, and present the option with clearer onboarding copy. +- Let self-hosted deployments run Brain embeddings and reranking through their own OpenAI-compatible upstream, including an opt-in bundled CPU service with multilingual model defaults. + +### Patch changes + +- Include the Brain's memory volume and database state in supported self-hosted backup and restore bundles so memories survive host recovery consistently. +- Treat temporary Brain network outages as queue backpressure so infrastructure restarts do not exhaust individual memory write retries or require manual repair. +- Render Fast replies as rich Markdown in Discord guild channels instead of falling back to plain unformatted messages. +- Make suggested tasks in Fast automation reports launch reliably across Slack, Discord, Microsoft Teams, and Telegram while keeping each suggestion card's state in sync. +- Preserve the full Fast conversation context across resumed turns so follow-up answers continue from the existing thread instead of losing earlier messages. +- Keep Fast session sidebars and information panels usable on mobile by switching them to the same single-panel layout as task workspaces. +- Discover Notion pages and database rows that inherit integration access through shared parents, even when Notion search does not return them. +- Keep automatic pull-request re-reviews running after their previous sandbox shuts down and anchor each sync review on the head commit that was actually reviewed. +- Keep Standard tasks and Fast web sessions running through retryable inference-provider failures instead of ending the work prematurely. +- Briefly name the recalled insight that materially influenced an agent's approach without exposing internal memory provenance or identifiers. +- Keep Fast and standard agents identified as Roomote by removing OpenCode's conflicting injected identity prefix from their system prompts. +- Render automation report Markdown correctly in Slack while preserving the report's replyable thread footer. +- Use task-specific wording in Slack inline status updates so progress messages describe the work instead of exposing generic agent terminology. +- Make transcript tool activity easier to inspect by showing sanitized inputs and readable YAML details without hiding the corresponding tool results. + ## 0.44.0 (2026-08-26) This release adds shared memory, skill discovery, and presentational widgets to Fast sessions, expands automation delivery across chat providers, and improves session and pull request review reliability. diff --git a/apps/docs/environment-variables.mdx b/apps/docs/environment-variables.mdx index 3d546b22e..16112440b 100644 --- a/apps/docs/environment-variables.mdx +++ b/apps/docs/environment-variables.mdx @@ -220,6 +220,15 @@ as per-task auth tokens or workspace paths. | `OPENAI_COMPATIBLE__LABEL` | Optional | Display label stored with a named OpenAI-compatible connection. | | `VLLM_BASE_URL` | vLLM | vLLM OpenAI-compatible endpoint URL, usually including its `/v1` path. | | `VLLM_API_KEY` | Optional | Bearer API key for a vLLM endpoint that requires authentication. | +| `R_BRAIN_OPENROUTER_API_KEY` | Memory provider | OpenRouter key that enables Memory embeddings, reranking, and synthesis. | +| `R_BRAIN_OPENAI_API_KEY` | Memory provider | OpenAI key that enables Memory embeddings and synthesis. | +| `R_BRAIN_MODEL` | Optional | Memory synthesis model in the configured provider's naming. Changes apply immediately. | +| `R_BRAIN_EMBEDDING_MODEL` | Before first Memory boot | Embedding model id that sizes Memory's vector storage. Changing it later requires re-embedding. | +| `R_BRAIN_EMBEDDING_DIMENSIONS` | Before first Memory boot | Output width for `R_BRAIN_EMBEDDING_MODEL`; it must match the served model. | +| `R_BRAIN_RERANKER_MODEL` | Optional | Memory reranker model. Use the `openrouter:` prefix for OpenRouter or a configured self-run rerank upstream. | +| `R_BRAIN_EMBEDDINGS_UPSTREAM_URL` | Optional | OpenAI-compatible embeddings endpoint used instead of the Memory provider. | +| `R_BRAIN_RERANK_UPSTREAM_URL` | Optional | OpenAI-compatible rerank endpoint used instead of OpenRouter. | +| `R_BRAIN_INFERENCE_UPSTREAM_API_KEY` | Optional | Bearer key shared by the self-run embeddings and rerank upstreams; omit it for a trusted private-network service. | ### Sandbox providers diff --git a/apps/docs/memory.mdx b/apps/docs/memory.mdx index 71b23c927..35b16ee22 100644 --- a/apps/docs/memory.mdx +++ b/apps/docs/memory.mdx @@ -89,8 +89,36 @@ embeddings and synthesis, and Roomote forwards them under the Memory key. Changing that key later takes effect on Memory's next request, with no redeploy. -OpenRouter and OpenAI both support Memory's embedding and synthesis calls, -but search reranking requires OpenRouter. +OpenRouter and OpenAI both support Memory's embedding and synthesis calls. +Search reranking requires OpenRouter unless a self-run rerank upstream is +configured. + +### Run embeddings and reranking locally + +Self-hosted Compose deployments can keep embeddings and reranking on their own +hardware while continuing to send chat synthesis to the configured Memory +provider. Enable both services and point Memory at the bundled inference server: + +```sh +COMPOSE_PROFILES=brain,local-inference +R_BRAIN_EMBEDDINGS_UPSTREAM_URL=http://infinity:7997 +R_BRAIN_RERANK_UPSTREAM_URL=http://infinity:7997 +R_BRAIN_EMBEDDING_MODEL=BAAI/bge-m3 +R_BRAIN_EMBEDDING_DIMENSIONS=1024 +R_BRAIN_RERANKER_MODEL=openrouter:BAAI/bge-reranker-v2-m3 +``` + +The bundled CPU service uses multilingual models so recall can cross languages. +For a smaller CPU host, `Alibaba-NLP/gte-multilingual-base` with `768` +dimensions is a lighter embedding alternative. Choose the embedding model and +dimensions before Memory's first boot; changing that pair later requires +re-embedding the corpus. + +The two upstream URLs can instead target any OpenAI-compatible embedding and +rerank server. Set `R_BRAIN_INFERENCE_UPSTREAM_API_KEY` when that server requires +a bearer key. The upstream must serve the exact model names configured above, +and `R_BRAIN_RERANKER_MODEL` keeps the `openrouter:` prefix because Roomote +removes it when forwarding to the rerank upstream. Without a Memory key, Memory stays inert. Agents are not told it exists, and nothing is ingested. @@ -243,18 +271,18 @@ matching on keywords alone. ## Operating it -- **Back up the Memory volume.** The Railway template schedules daily and - weekly backups for it. On other platforms, include `/data/brain` in the - deployment's normal volume backups. That directory is the Markdown corpus, - including pages produced by nightly synthesis. Postgres holds the searchable - index, extracted facts, and durable maintenance jobs; keeping it in the - normal database backup makes restores faster, but it is not the only copy of - the source pages. -- **Losing Memory is recoverable but not free.** If the volume or isolated - `gbrain` database is recreated, Roomote re-registers its clients, resets its - ingestion checkpoints, and backfills task history and integration sources. - The deployment starts cold until that finishes, and regenerated synthesis - may not be byte-for-byte identical. +- **Back up both Memory stores together.** The Railway template schedules + backups for the Memory volume. On supported self-hosted installs, `roomote + backup` includes both the `gbrain_data` volume and the isolated `gbrain` + database when Memory is enabled. The volume holds the Markdown system of + record; Postgres holds the searchable index, extracted facts, and durable + maintenance jobs. Restoring only one can leave the storage layout and index + inconsistent, so keep them at the same backup consistency point. +- **Losing Memory is recoverable only from connected sources.** If both stores + are recreated, Roomote can reset ingestion checkpoints and backfill task + history and connected integrations, but user-saved facts and generated + synthesis may not be reproducible. The deployment starts cold until the + backfill finishes. - **The filesystem cutover rebuilds older memory once.** The first start of a filesystem-backed image replaces a Postgres-only Memory service instead of trying to merge the old index into an empty checkout. Roomote then repopulates diff --git a/apps/docs/models.mdx b/apps/docs/models.mdx index 10d03e8de..9821d9019 100644 --- a/apps/docs/models.mdx +++ b/apps/docs/models.mdx @@ -24,13 +24,15 @@ deployment on one account, one vendor, or one model family. ### Managed Roomote inference -Some hosting deployments offer **Roomote inference** with a limited number of -managed credits during setup. It is separate from your own provider +Some hosting deployments provision **Roomote inference** with a limited, +spend-capped credit grant during setup. It is separate from your own provider connections: in particular, you can add an OpenRouter key in **Settings > Models** even when Roomote inference is active. If the hosting deployment does -not offer it, the option is not shown. Its key is stored with your other -provider credentials, so deleting the Roomote inference provider in -**Settings > Models** disables it permanently. +not offer it, the option is not shown. Trial token usage and estimated model +cost appear in task details and [Cost Analytics](/cost-analytics), while the +remaining credit line reflects the hosted grant's authoritative limit. Its key +is stored with your other provider credentials, so deleting the Roomote +inference provider in **Settings > Models** disables it permanently. For example, a deployment might use: diff --git a/apps/docs/self-hosting.mdx b/apps/docs/self-hosting.mdx index 678e0ff43..568b2f10c 100644 --- a/apps/docs/self-hosting.mdx +++ b/apps/docs/self-hosting.mdx @@ -10,10 +10,11 @@ its work, and returns reviewable pull requests with previews when they apply. Run the same single-tenant product on Roomote Cloud or infrastructure you control. -Choose the fastest path for your team. In every deployment, you connect a -ChatGPT subscription or inference provider API key, plus source control and a -sandbox provider. Connect communications providers and other tools when your -team needs them. +Choose the fastest path for your team. Every deployment needs model inference: +use hosting-provisioned Roomote inference when it is offered, or connect a +ChatGPT subscription or inference provider API key. You also need source control +and a sandbox provider. Connect communications providers and other tools when +your team needs them.
Deploy on Roomote Cloud @@ -35,8 +36,8 @@ Running Roomote on Proxmox or another server at home? Follow the public ingress, and a prompt that a local agent can follow. By the end of setup, you should have a reachable Roomote URL, sign-in, a -source-control provider, a ChatGPT subscription or inference provider, at least -one environment, and a first reviewable Roomote task. +source-control provider, managed Roomote inference or a connected inference +provider, at least one environment, and a first reviewable Roomote task. The canonical, always up-to-date guide for operating your own server lives in [`SELF_HOSTING.md`](https://github.com/RooCodeInc/Roomote/blob/main/SELF_HOSTING.md) @@ -51,9 +52,10 @@ curl -fsSL https://get.roomote.dev | bash ``` The installer brings up the full stack from published images and prints a setup -link. Open it in a browser and the wizard walks you through the rest: sign-in -provider, source-control provider, a ChatGPT subscription or inference provider -API key, communications provider, repositories, and a first task. +link. For this self-hosted path, open it in a browser and the wizard walks you +through the rest: sign-in provider, source-control provider, a ChatGPT +subscription or inference provider API key, communications provider, +repositories, and a first task. No DNS setup is needed to try it out; pass `--domain roomote.example.com` for a production install on your own domain. @@ -77,7 +79,7 @@ Have these ready before the wizard asks for them: - a source-control provider account with permission to install or configure the app for the repositories Roomote should reach - a ChatGPT subscription or inference provider API key, such as OpenRouter, - Anthropic, or OpenAI + Anthropic, or OpenAI, unless your host already provisioned Roomote inference - a communications provider workspace, such as Slack, Microsoft Teams, Telegram, or Discord, if your team wants to start work from chat - at least one repository that can become the first Roomote environment @@ -96,8 +98,10 @@ roomote logs # tail service logs `roomote backup` prompts for a passphrase and writes a versioned `.roomote` bundle under `/opt/roomote/backups`. The bundle contains PostgreSQL, the deployment configuration and encryption/signing keys, local MinIO artifacts, -schema metadata, and the exact deployed image identities. Store the passphrase -separately in your secret manager; the backup cannot be restored without it. +schema metadata, the exact deployed image identities, and both the Memory volume +and isolated Memory database when the `brain` profile is enabled. Store the +passphrase separately in your secret manager; the backup cannot be restored +without it. Use `roomote backup --include-redis` when queued work, BullMQ schedules, sessions, and other transient Redis state must survive. Backups briefly stop @@ -170,8 +174,8 @@ After you upgrade, Roomote can surface the new release in the web app: ## Requirements -- A ChatGPT subscription or inference provider API key (OpenRouter, Anthropic, - OpenAI, and others). +- Managed Roomote inference from an eligible host, or a ChatGPT subscription or + inference provider API key (OpenRouter, Anthropic, OpenAI, and others). - An account with a supported source-control provider. For GitHub, the setup wizard creates the GitHub App; other providers use their documented OAuth or credential flow. diff --git a/package.json b/package.json index 9879595b5..f3b9f26ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "roomote", - "version": "0.44.0", + "version": "0.45.0", "license": "FCL-1.0-ALv2", "packageManager": "pnpm@10.29.3", "engines": { From a867759defc744c404f2e9a9e92ccd1e5cc56df7 Mon Sep 17 00:00:00 2001 From: "@mrubens" <2600+mrubens@users.noreply.github.com> Date: Thu, 27 Aug 2026 23:14:18 +0000 Subject: [PATCH 2/2] Fix local Brain reranker model example --- .env.production.example | 7 +++---- apps/docs/environment-variables.mdx | 2 +- apps/docs/memory.mdx | 13 +++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.env.production.example b/.env.production.example index eed5f73b3..eb8f77702 100644 --- a/.env.production.example +++ b/.env.production.example @@ -149,15 +149,14 @@ DEFAULT_COMPUTE_PROVIDER=docker # serves, and the embedding pair is create-time: set everything BEFORE the # Brain's first boot. gbrain's defaults (text-embedding-3-small, 1536) name # models the bundled server does not serve, so the URLs alone are not a -# working configuration. The openrouter: prefix on the reranker routes it -# through this deployment's gateway, which strips the prefix before -# forwarding. +# working configuration. Self-run model names pass through unchanged and +# must exactly match the ids served by the upstream. # R_BRAIN_EMBEDDINGS_UPSTREAM_URL=http://infinity:7997 # R_BRAIN_RERANK_UPSTREAM_URL=http://infinity:7997 # R_BRAIN_INFERENCE_UPSTREAM_API_KEY= # R_BRAIN_EMBEDDING_MODEL=BAAI/bge-m3 # R_BRAIN_EMBEDDING_DIMENSIONS=1024 -# R_BRAIN_RERANKER_MODEL=openrouter:BAAI/bge-reranker-v2-m3 +# R_BRAIN_RERANKER_MODEL=BAAI/bge-reranker-v2-m3 # R_GITHUB_APP_ID= # Raw GitHub App private-key PEM with newlines escaped as \n; do not base64 it. # R_GITHUB_APP_PRIVATE_KEY= diff --git a/apps/docs/environment-variables.mdx b/apps/docs/environment-variables.mdx index 16112440b..efb846f87 100644 --- a/apps/docs/environment-variables.mdx +++ b/apps/docs/environment-variables.mdx @@ -225,7 +225,7 @@ as per-task auth tokens or workspace paths. | `R_BRAIN_MODEL` | Optional | Memory synthesis model in the configured provider's naming. Changes apply immediately. | | `R_BRAIN_EMBEDDING_MODEL` | Before first Memory boot | Embedding model id that sizes Memory's vector storage. Changing it later requires re-embedding. | | `R_BRAIN_EMBEDDING_DIMENSIONS` | Before first Memory boot | Output width for `R_BRAIN_EMBEDDING_MODEL`; it must match the served model. | -| `R_BRAIN_RERANKER_MODEL` | Optional | Memory reranker model. Use the `openrouter:` prefix for OpenRouter or a configured self-run rerank upstream. | +| `R_BRAIN_RERANKER_MODEL` | Optional | Memory reranker model. Use OpenRouter's model id for OpenRouter, or the exact bare model id served by a self-run rerank upstream. | | `R_BRAIN_EMBEDDINGS_UPSTREAM_URL` | Optional | OpenAI-compatible embeddings endpoint used instead of the Memory provider. | | `R_BRAIN_RERANK_UPSTREAM_URL` | Optional | OpenAI-compatible rerank endpoint used instead of OpenRouter. | | `R_BRAIN_INFERENCE_UPSTREAM_API_KEY` | Optional | Bearer key shared by the self-run embeddings and rerank upstreams; omit it for a trusted private-network service. | diff --git a/apps/docs/memory.mdx b/apps/docs/memory.mdx index 35b16ee22..806f71c9b 100644 --- a/apps/docs/memory.mdx +++ b/apps/docs/memory.mdx @@ -105,7 +105,7 @@ R_BRAIN_EMBEDDINGS_UPSTREAM_URL=http://infinity:7997 R_BRAIN_RERANK_UPSTREAM_URL=http://infinity:7997 R_BRAIN_EMBEDDING_MODEL=BAAI/bge-m3 R_BRAIN_EMBEDDING_DIMENSIONS=1024 -R_BRAIN_RERANKER_MODEL=openrouter:BAAI/bge-reranker-v2-m3 +R_BRAIN_RERANKER_MODEL=BAAI/bge-reranker-v2-m3 ``` The bundled CPU service uses multilingual models so recall can cross languages. @@ -116,9 +116,9 @@ re-embedding the corpus. The two upstream URLs can instead target any OpenAI-compatible embedding and rerank server. Set `R_BRAIN_INFERENCE_UPSTREAM_API_KEY` when that server requires -a bearer key. The upstream must serve the exact model names configured above, -and `R_BRAIN_RERANKER_MODEL` keeps the `openrouter:` prefix because Roomote -removes it when forwarding to the rerank upstream. +a bearer key. Roomote forwards model names unchanged to self-run upstreams, so +`R_BRAIN_EMBEDDING_MODEL` and `R_BRAIN_RERANKER_MODEL` must exactly match the +models that server exposes, without a provider prefix. Without a Memory key, Memory stays inert. Agents are not told it exists, and nothing is ingested. @@ -224,7 +224,7 @@ Three settings pick Memory's models: | ----------------------------- | ----------------- | --------------------------------- | --------------------- | | `R_BRAIN_MODEL` | Sourced synthesis | your provider's naming | any time | | `R_BRAIN_EMBEDDING_MODEL` | Semantic recall | a plain model id | before the first boot | -| `R_BRAIN_RERANKER_MODEL` | Search precision | `openrouter:/` | after a restart | +| `R_BRAIN_RERANKER_MODEL` | Search precision | provider or upstream naming | after a restart | Leave the first two unset and Memory uses OpenAI's `gpt-5.6-luna` and `text-embedding-3-small` through whichever provider you configured. @@ -233,7 +233,8 @@ The reranker defaults to OpenRouter's `voyageai/rerank-2.5-lite`. Set `R_BRAIN_RERANKER_MODEL` to choose another model from OpenRouter's reranker catalog. Reranking requires an OpenRouter key; with only OpenAI configured, gbrain keeps the unreranked results instead of failing the -search. +search. When `R_BRAIN_RERANK_UPSTREAM_URL` is set, use the exact bare model id +served by that upstream instead. The synthesis model is applied by Roomote when it forwards the call and passed to the provider as written, so use that provider's naming