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
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,29 @@

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

## 0.33.0 (2026-08-04)

This release adds new ways to connect and invoke Roomote, gives deployments clearer account-linking guidance, and improves automation and Amazon Bedrock model discovery.

### Highlights

- Start Roomote from existing Slack, Discord, and Microsoft Teams conversations with an administrator-configured emoji reaction.
- Connect Resend with safe inspection-oriented defaults and explicit controls for sensitive actions.
- Add deployment-specific account-linking guidance across chat, source control, and sign-in surfaces.
- Keep Amazon Bedrock models visible and organized under one provider section in model settings.

### Minor changes

- Let administrators configure an emoji that starts Roomote from an existing Slack, Discord, or Microsoft Teams conversation, reusing the normal task flow and preserving the reacting user's account attribution.
- Add Resend as a deployment-wide integration with inspection-oriented access by default and explicit administrator controls for sensitive email, credential, automation, contact, domain, and webhook actions.
- Let administrators add deployment-specific account-linking guidance that appears alongside Roomote's built-in instructions in source-control comments, Discord, Telegram, and the sign-in page.

### Patch changes

- Keep Amazon Bedrock Mantle models visible after settings reload and group native Bedrock and Mantle entries under one Amazon Bedrock section instead of showing duplicate headings.
- Make routine Discord release announcements shorter and suppress link-preview cards while keeping the release notes link available.
- Make automations the highest-priority onboarding prompt for users who have not enabled one, and link the Automations page directly to practical Cookbook recipes.

## 0.32.1 (2026-08-04)

This patch restores licensed Cloud seat limits and keeps custom automation destinations limited to connected communication providers.
Expand Down
41 changes: 41 additions & 0 deletions apps/api/src/handlers/account-link-help.test.ts

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

17 changes: 17 additions & 0 deletions apps/api/src/handlers/account-link-help.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { getDeploymentAccountLinkHelpText } from '@roomote/db/server';

import { apiLogger } from '../logging.js';

export async function appendAccountLinkHelpText(
baseMessage: string,
): Promise<string> {
try {
const helpText = await getDeploymentAccountLinkHelpText();
return helpText ? `${baseMessage} ${helpText}` : baseMessage;
} catch (error) {
apiLogger.warn(
`[account-link] Failed to load deployment help text: ${error instanceof Error ? error.message : String(error)}`,
);
return baseMessage;
}
}

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

2 changes: 1 addition & 1 deletion apps/api/src/handlers/ado/handleComment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ export async function handleAdoComment(
const body =
targetsResult.status === 'error' &&
targetsResult.code === 'account_link_required'
? buildSourceControlAccountLinkRequiredMessage('ado')
? await buildSourceControlAccountLinkRequiredMessage('ado')
: buildReviewerGateMissComment();

await postMentionResponseComment({
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/handlers/ado/handleWorkItemComment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ export async function handleAdoWorkItemComment(
await postWorkItemMentionResponseComment({
project: projectName,
workItemId,
body: buildSourceControlAccountLinkRequiredMessage('ado'),
body: await buildSourceControlAccountLinkRequiredMessage('ado'),
});

return { status: 'ok', message: 'account_link_required' };
Expand Down

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

2 changes: 1 addition & 1 deletion apps/api/src/handlers/bitbucket/handleComment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ export async function handleBitbucketComment(
await postMentionResponseComment({
...mentionResponseTarget,
body: requiresAccountLink
? buildSourceControlAccountLinkRequiredMessage('bitbucket')
? await buildSourceControlAccountLinkRequiredMessage('bitbucket')
: requiresEnvironment
? buildSourceControlEnvironmentRequiredMessage('bitbucket')
: buildReviewerGateMissComment(),
Expand Down
66 changes: 66 additions & 0 deletions apps/api/src/handlers/call-roomote-via-emoji.test.ts

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

36 changes: 36 additions & 0 deletions apps/api/src/handlers/call-roomote-via-emoji.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { reactionEmojiMatches } from '@roomote/communication/reaction-emoji';
import { getAutomationRuntime } from '@roomote/db/server';

export const CALL_ROOMOTE_VIA_EMOJI_PROMPT = 'Act on this';

type CallRoomoteViaEmojiConfiguration = {
emoji: string;
prompt: string;
};

export async function getCallRoomoteViaEmojiConfiguration(
receivedEmoji: string,
): Promise<CallRoomoteViaEmojiConfiguration | null> {
const automation = await getAutomationRuntime('call_roomote_via_emoji');
const emoji =
typeof automation.settings.emoji === 'string'
? automation.settings.emoji.trim()
: '';

if (
!automation.enabled ||
!emoji ||
!reactionEmojiMatches(emoji, receivedEmoji)
) {
return null;
}

const instructions = automation.instructions?.trim();

return {
emoji,
prompt: instructions
? `${CALL_ROOMOTE_VIA_EMOJI_PROMPT}\n\nAdditional instructions:\n${instructions}`
: CALL_ROOMOTE_VIA_EMOJI_PROMPT,
};
}
28 changes: 25 additions & 3 deletions apps/api/src/handlers/discord/__tests__/account-link.test.ts

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

Loading
Loading