Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,27 @@

This file tracks product releases for Roomote (single monorepo version). Automated release entries are prepended by `pnpm run version`.

## 0.32.0 (2026-08-03)

This release adds OpenCode Go subscriptions, restores convenient automation test runs, refreshes recommended models, and makes license syncing more resilient.

### Highlights

- Let operators connect an OpenCode Go subscription independently from OpenCode Zen and use supported Go models across Roomote task roles.
- Run enabled custom automations on demand and test newly created automations immediately.
- Use current Qwen and DeepSeek recommendations across supported model providers.
- Retry license usage reporting after transient Roomote Cloud failures.

### Minor changes

- Let operators connect an OpenCode Go subscription independently from OpenCode Zen and use supported Go models across Roomote task roles.

### Patch changes

- Let administrators run enabled custom automations on demand from Automations settings, and offer an immediate test run after an automation is created conversationally.
- Recommend Qwen3.8 Max through supported providers and use OpenCode Zen's supported DeepSeek V4 Flash model identifier.
- Retry license usage reports after transient Roomote Cloud failures and report concurrent license-key changes accurately instead of dropping usage observations or reporting a false success.

## 0.31.0 (2026-08-03)

This release expands Amazon Bedrock and deployment controls, refreshes Automations and self-hosted licensing, and adds copyable Cookbook recipes for common workflows.
Expand Down
1 change: 1 addition & 0 deletions SELF_HOSTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@ common provider keys into worker containers:
- `ZAI_CODING_PLAN_API_KEY` (Z.AI Coding Plan, `zai-coding-plan/...` models,
with `ZAI_CODING_PLAN_REGION`)
- `OPENCODE_API_KEY`
- `OPENCODE_GO_API_KEY` (OpenCode Go subscription, `opencode-go/...` models)

If your provider uses another env var name, list it in
`R_MODEL_ENV_KEYS`:
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions apps/docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
"providers/inference/openai",
"providers/inference/openai-compatible",
"providers/inference/opencode",
"providers/inference/opencode-go",
"providers/inference/openrouter",
"providers/inference/together-ai",
"providers/inference/vercel-ai-gateway",
Expand Down
3 changes: 2 additions & 1 deletion apps/docs/environment-variables.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,8 @@ as per-task auth tokens or workspace paths.
| `ZAI_REGION` | Provider key | Z.AI region: `global` (International) or `china`. Defaults to `global` when unset. |
| `ZAI_CODING_PLAN_API_KEY` | Provider key | Z.AI Coding Plan API key for `zai-coding-plan/...` models. Not a general platform key. |
| `ZAI_CODING_PLAN_REGION` | Provider key | Z.AI Coding Plan region: `global` (International) or `china`. Defaults to `global` when unset. |
| `OPENCODE_API_KEY` | Provider key | OpenCode Zen / Go API key. |
| `OPENCODE_API_KEY` | Provider key | OpenCode Zen API key. |
| `OPENCODE_GO_API_KEY` | Provider key | OpenCode API key for an active Go subscription and `opencode-go/...` models. |
| `GEMINI_API_KEY` | Provider key | Google Gemini API key. Can also be saved from **Settings > Models**. |
| `GOOGLE_GENERATIVE_AI_API_KEY` | Provider key | Alternate Google/Gemini provider key forwarded when configured or inferred. |
| `AWS_BEARER_TOKEN_BEDROCK` | Provider key | Amazon Bedrock Mantle API key. Can also be saved from **Settings > Models**. |
Expand Down
3 changes: 2 additions & 1 deletion apps/docs/models.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ 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 / Go](/providers/inference/opencode) | OpenCode API key | OpenCode account |
| [OpenCode Zen](/providers/inference/opencode) | OpenCode API key | OpenCode account |
| [OpenRouter](/providers/inference/openrouter) | OpenRouter API key | OpenRouter balance and key limit |
| [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 |
Expand All @@ -68,6 +68,7 @@ general API balance:
| [ChatGPT Subscription](/providers/inference/chatgpt) | OpenAI device authorization | ChatGPT plan windows |
| [GitHub Copilot](/providers/inference/github-copilot) | 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 |
| [Z.AI Coding Plan](/providers/inference/zai-coding-plan) | Regional Coding Plan key | Coding Plan quota windows |

Expand Down
55 changes: 55 additions & 0 deletions apps/docs/providers/inference/opencode-go.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
title: OpenCode Go
icon: 'https://unpkg.com/@lobehub/icons-static-svg@1.94.0/icons/opencode.svg'
description: Use an OpenCode Go subscription with Roomote.
---

OpenCode Go is a subscription for a curated catalog of coding models. Use this
provider when you want Roomote tasks to consume the allowance included with
your Go plan.

## Subscribe and get an API key

Sign in to [OpenCode](https://opencode.ai/auth), subscribe to Go, and copy your
API key. OpenCode currently allows one Go subscription per workspace.

## Configuration

Add **OpenCode Go** in **Settings > Models** and paste the key, or set:

```sh
OPENCODE_GO_API_KEY=...
```

Roomote uses a separate environment variable so Zen and Go can be configured
independently. Paste the OpenCode API key issued for the workspace; Roomote
binds it to OpenCode's `opencode-go` provider at runtime.

Go models use the `opencode-go/` prefix. Connecting the provider adds a curated
set of eligible models and recommends lower-cost options for helper work.

## Usage behavior

Requests consume the rolling and monthly allowances defined by your Go plan.
The OpenCode account console is authoritative for current usage and resets. If
you enable **Use balance** in OpenCode, requests can fall back to your Zen
balance after the included allowance is exhausted.

See [OpenCode Go documentation](https://opencode.ai/docs/go/) for current
models, limits, pricing, and retention details.

## Verify setup

1. save `OPENCODE_GO_API_KEY`
2. confirm OpenCode Go models appear in **Settings > Models**
3. apply a preset or assign an `opencode-go/...` model manually
4. run a small task and confirm it appears in OpenCode usage

## Common issues

- **The key is rejected.** Confirm the workspace has an active Go subscription
and that you copied its OpenCode API key.
- **A model is unavailable.** Go's catalog can change; select another model
shown in the OpenCode Go console.
- **Requests stop after sustained use.** Check the plan's rolling, weekly, and
monthly allowance windows in OpenCode.
6 changes: 3 additions & 3 deletions apps/docs/providers/inference/opencode.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: OpenCode Zen / Go
title: OpenCode Zen
icon: 'https://unpkg.com/@lobehub/icons-static-svg@1.94.0/icons/opencode.svg'
description: Use OpenCode's routed Zen model service with Roomote.
---
Expand All @@ -16,13 +16,13 @@ selected models.

## Configuration

Add **OpenCode Zen / Go** in **Settings > Models** and paste the key, or set:
Add **OpenCode Zen** in **Settings > Models** and paste the key, or set:

```sh
OPENCODE_API_KEY=...
```

Roomote exposes routed models under the `opencode/` prefix and adds a recommended
Roomote exposes routed Zen models under the `opencode/` prefix and adds a recommended
set after connection. The preset can use inexpensive routed models for helper
work and stronger models for coding, planning, vision, and review.

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions apps/web/src/app/(onboarding)/setup/setup-docs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ const MODEL_PROVIDER_DOC_PATHS: Partial<
openai: 'providers/inference/openai',
'openai-compatible': 'providers/inference/openai-compatible',
opencode: 'providers/inference/opencode',
'opencode-go': 'providers/inference/opencode-go',
openrouter: 'providers/inference/openrouter',
togetherai: 'providers/inference/together-ai',
vercel: 'providers/inference/vercel-ai-gateway',
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
DialogTitle,
Input,
Label,
Play,
Plus,
Select,
SelectContent,
Expand Down Expand Up @@ -284,6 +285,35 @@ export function CustomAutomationsSection() {
}),
);

const triggerMutation = useMutation(
trpc.automations.triggerCustomAutomation.mutationOptions({
onSuccess: (result) => {
switch (result.outcome) {
case 'launched':
toast.success('Custom automation started a task.', {
action: {
label: 'Open task',
onClick: () => window.open(`/task/${result.taskId}`, '_blank'),
},
});
break;
case 'completed':
toast.success('Custom automation ran successfully.');
break;
case 'skipped':
toast.info(`Custom automation had nothing to do: ${result.reason}`);
break;
case 'failed':
toast.error(`Custom automation failed: ${result.error}`);
break;
}
},
onError: (error) => {
toast.error(error.message || 'Failed to run custom automation');
},
}),
);

const resolveScheduleMutation = useMutation(
trpc.automations.resolveCustomAutomationSchedule.mutationOptions({
onSuccess: (result, variables) => {
Expand Down Expand Up @@ -336,7 +366,8 @@ export function CustomAutomationsSection() {
createMutation.isPending ||
updateMutation.isPending ||
deleteMutation.isPending ||
toggleMutation.isPending;
toggleMutation.isPending ||
triggerMutation.isPending;

const closeEditor = () => {
setIsCreating(false);
Expand Down Expand Up @@ -898,6 +929,18 @@ export function CustomAutomationsSection() {
</p>
</div>
<div className="col-start-2 row-start-2 flex shrink-0 items-center gap-1 sm:col-start-3 sm:row-start-1">
<BasicTooltip content="Run now">
<Button
type="button"
size="icon"
variant="ghost"
disabled={busy || !row.enabled}
aria-label={`Run ${row.name} now`}
onClick={() => triggerMutation.mutate({ id: row.id })}
>
<Play />
</Button>
</BasicTooltip>
<BasicTooltip content="Configure">
<Button
type="button"
Expand Down
1 change: 1 addition & 0 deletions apps/web/src/trpc/commands/task-models/index.test.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/worker/src/mcp/roomote-mcp-server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ roomoteMcpServer.registerTool(
{
title: 'Manage Custom Automations',
description:
'Admin-only management of deployment custom automations. List existing automations, resolve a cron or natural-language schedule, create or update an automation, delete an automation by exact ID, or run an enabled automation now. Natural-language schedules are converted to validated five-field cron in the deployment scheduling timezone.',
'Admin-only management of deployment custom automations. List existing automations, resolve a cron or natural-language schedule, create or update an automation, delete an automation by exact ID, or run an enabled automation now. Natural-language schedules are converted to validated five-field cron in the deployment scheduling timezone. After successfully creating an automation in response to a conversational request, ask the user whether they want to run it now to test it.',
inputSchema: {
action: z.enum([
'list',
Expand Down
Loading
Loading