diff --git a/.changeset/simplify-fast-provider-docs.md b/.changeset/simplify-fast-provider-docs.md new file mode 100644 index 000000000..4f715c9ad --- /dev/null +++ b/.changeset/simplify-fast-provider-docs.md @@ -0,0 +1,5 @@ +--- +"@roomote/web": patch +--- + +Remove stale provider-specific Fast continuation caveats from automation settings. diff --git a/apps/docs/automations.mdx b/apps/docs/automations.mdx index 233661c11..ef76ec810 100644 --- a/apps/docs/automations.mdx +++ b/apps/docs/automations.mdx @@ -126,16 +126,11 @@ environment (or across all active repositories), or runs the prompt directly in **Fast** without starting a sandbox. A Fast run can still delegate a normal task when repository or workspace execution is required. -Fast runs deliver to every custom-automation report destination: Slack, -Discord, Microsoft Teams, or Telegram, as either a channel/chat or a direct -message to the automation owner. Each run keeps a distinct Fast session, and -the report links back to that session in the web app. Slack, Discord, and -Microsoft Teams replies continue the Fast session directly in chat. Teams only -resumes after verifying the active tenant installation, conversation, and -linked user. Telegram can deliver the same reports and continue them from the -web app, but inbound Telegram replies still use its normal task-routing flow. -Runs with no report destination remain stored Fast sessions and do not post to -chat. +Fast automation reports can be delivered to Slack, Discord, Microsoft Teams, or +Telegram channels, chats, topics, or owner direct messages. Each run keeps a +distinct Fast session, links back to the web app, and continues from replies in +the provider conversation. Runs with no report destination remain stored Fast +sessions and do not post to chat. A run can skip or fail before execution when its configuration or launch state prevents it from starting. @@ -143,16 +138,16 @@ 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 -chatter in between. Without a destination, the run happens silently and its -results appear only in the task view. +cases. The first message establishes the destination conversation, later +updates stay there, and replies continue the associated Session or task. There +is no progress chatter in between. Without a destination, the run happens +silently and its results appear only in the task view. Unless the prompt asks for a different presentation, custom automation reports lead with the result, stay concise, and use short Markdown headings and bullets when there are several findings. A report sent to chat keeps the essential -conclusions and actions in its first message; supporting detail can continue in -thread replies. Explicit instructions in the automation prompt about format, +conclusions and actions in its first message; supporting detail can follow in +later messages. Explicit instructions in the automation prompt about format, length, tone, audience, or detail placement always take precedence. In Slack, automation reports appear as structured cards. Markdown tables render diff --git a/apps/docs/fast-sessions.mdx b/apps/docs/fast-sessions.mdx index ee44179eb..d2bf10135 100644 --- a/apps/docs/fast-sessions.mdx +++ b/apps/docs/fast-sessions.mdx @@ -42,6 +42,13 @@ tables, and plans directly in the transcript. Widget HTML is sanitized and sandboxed in the web view; chat surfaces receive only the widget's text fallback. +Fast can use bounded context from the current conversation, access enabled MCP +servers and permitted user-scoped integrations, and delegate repository work to +Roomote tasks. It does not implicitly read unrelated conversations or inspect +repository contents without delegating to a task. Deployment admins can manage +custom automations through Fast, and requests spanning every repository can be +delegated to an all-repositories environment. + ## Reply to a session Conversational Sessions have a reply box at the bottom of the transcript; @@ -50,12 +57,10 @@ that live on another surface, Roomote posts the answer back into the originating thread with a quoted copy of your web message, so the conversation stays in one place for everyone following it there. -Fast replies across Slack, Discord, Microsoft Teams, and Telegram link back to -the Session view. Slack and Discord can also resume Fast directly from chat. -Microsoft Teams replies continue the same Session after Roomote verifies the -tenant, installation, conversation, and linked user. Telegram currently uses -the Session view for Fast follow-ups because its inbound webhook route does not -yet carry Fast Session identity. +Fast replies from Slack, Discord, Microsoft Teams, and Telegram link back to the +Session view. Replies in a Fast-owned thread, topic, chat, or direct message +continue that Session. Existing task-only conversations continue or resume the +task instead. ## Execution access diff --git a/apps/docs/providers/communications/discord.mdx b/apps/docs/providers/communications/discord.mdx index feb4f7396..3b2a8533e 100644 --- a/apps/docs/providers/communications/discord.mdx +++ b/apps/docs/providers/communications/discord.mdx @@ -121,8 +121,7 @@ under **Settings > Automations**, the same way you would pick a Slack channel. - use `/goal objective:` to keep working toward an objective across multiple turns in an active task thread or DM; this does not create a new task - ordinary Discord DMs, mentions, and eligible thread replies from your linked - account are always answered in Fast mode, which can delegate repository work - into tasks + account are answered in Fast - replies in a Fast-owned DM or thread continue that Fast session; replies in an existing task-only conversation continue or resume the task - when Roomote asks where to run a task, use a button or reply naturally in the @@ -136,18 +135,6 @@ under **Settings > Automations**, the same way you would pick a Slack channel. (lookups outside the originating task thread require a linked Discord account) - use `/help` to see the available commands -Fast can read bounded context from the current Discord thread or channel, use -MCP servers and user-scoped integrations that you are allowed to access, and -delegate repository work to Roomote tasks. Deployment admins can also manage -custom automations through Fast. Fast does not read other channels implicitly -or inspect repository contents without delegating the work to a task. When the -request spans every repository, Fast can delegate it to the deployment's -all-repositories environment. - -Fast automation reports can be delivered to configured Discord channels or the -automation owner's DM. Replies continue the report's Fast session in Discord, -and the footer also links to the same session in the web app. - Roomote does not quote every message it answers. In a task thread, the conversation itself supplies the context. When you start a task by tagging Roomote in an existing thread, Roomote reads earlier messages in that thread @@ -200,9 +187,9 @@ setup UI are detected automatically without a restart. Gateway 2. confirm **Message Content intent** and **Slash commands** pass their checks 3. link your personal Discord account -4. mention the bot with a small request and confirm Roomote creates a task - thread or forum post -5. reply in that conversation and confirm the same task continues +4. mention the bot with a small request and confirm Roomote answers in Fast with + a web continuation link +5. reply in that conversation and confirm the same Session continues If the Gateway remains disconnected, verify BullMQ is running and has access to the same Redis, database, token, and internal secret as the API. If natural diff --git a/apps/docs/providers/communications/microsoft-teams.mdx b/apps/docs/providers/communications/microsoft-teams.mdx index 27d7379a6..2ee00e3f7 100644 --- a/apps/docs/providers/communications/microsoft-teams.mdx +++ b/apps/docs/providers/communications/microsoft-teams.mdx @@ -156,18 +156,14 @@ mention or eligible thread-reply signals used for task entry. Sessions are isolated by linked Roomote user even when several people share one Teams thread. Unlinked senders receive the account-link prompt instead of starting work. -Replies to Fast messages continue the bound Fast session. Existing task-only -conversations keep their active-task and resumable-snapshot behavior, and Fast -can delegate repository work into those normal Roomote tasks. If Fast cannot -initialize a new session, Roomote safely falls back to the existing task router. -Bot Framework and Microsoft Graph images, image-only messages, and transcribed -audio continue through the same attachment handling. +Replies to Fast messages continue the same Session. Existing task-only +conversations keep their active-task and resumable-snapshot behavior. Bot +Framework and Microsoft Graph images, image-only messages, and transcribed audio +continue through the same attachment handling. When a task calls `request_user_input`, Teams accepts a text reply in the same conversation. Sensitive input remains in the web app; Teams does not currently -render interactive answer buttons. Fast automation reports can target a Teams -channel, chat, or owner direct message. Replies continue the report's Fast -session, and its footer opens the same session in the web app. +render interactive answer buttons. The first verified Teams message also captures the conversation Roomote uses for proactive output. When Slack and Telegram are not connected, setup diff --git a/apps/docs/providers/communications/slack.mdx b/apps/docs/providers/communications/slack.mdx index 2a398a5a9..6ff1a7922 100644 --- a/apps/docs/providers/communications/slack.mdx +++ b/apps/docs/providers/communications/slack.mdx @@ -181,19 +181,11 @@ Mention the app and use `!fast ` to ask the fast orchestrator a question or delegate work into a task. For example: `@Roomote !fast summarize this thread` or `@Roomote !fast fix the failing CI job`. -**Fast response mode** is always on across Slack, Discord, Microsoft Teams, and -Telegram: ordinary messages from your linked account go through the Fast -orchestrator, which can delegate work into tasks. `!fast` remains available for -an explicit Slack Fast request. Replies in a Fast-owned Slack thread continue -that Fast session; replies in an existing task-only thread continue the task. - -Fast can read a bounded history from the current Slack channel, use MCP servers -and user-scoped integrations that you are allowed to access, and delegate -repository work to Roomote tasks. Deployment admins can also manage custom -automations through Fast. Fast does not read other channels implicitly or -inspect repository contents without delegating the work to a task. When the -request spans every repository, Fast can delegate it to the deployment's -all-repositories environment. +Ordinary messages from your linked Slack account go through Fast. `!fast` +remains available for an explicit Slack Fast request. Replies in a Fast-owned +Slack thread continue that Session; replies in an existing task-only thread +continue the task. Fast can use bounded history from the current Slack channel +as conversation context. ## Local URL changes diff --git a/apps/docs/providers/communications/telegram.mdx b/apps/docs/providers/communications/telegram.mdx index 46ad19a17..aa861ce62 100644 --- a/apps/docs/providers/communications/telegram.mdx +++ b/apps/docs/providers/communications/telegram.mdx @@ -116,11 +116,7 @@ an explicit fresh-task command: it bypasses Fast and snapshot resume so the request starts a normal task, creating a topic when Telegram supports it. Existing task-only chats and topics keep their active-task, -`request_user_input`, routing-confirmation, and resumable-snapshot behavior. If -Fast cannot initialize a new session, Roomote safely falls back to that existing -task router. Fast automation reports can target a Telegram chat, topic, or owner -direct message; replies continue the report's Fast session, and its footer opens -the same session in the web app. +`request_user_input`, routing-confirmation, and resumable-snapshot behavior. Photos are passed to Fast or the task as image input. Supported text documents are downloaded server-side and their extracted content is added to the request; diff --git a/apps/web/src/components/settings/automations/AutomationsSettings.render.client.test.tsx b/apps/web/src/components/settings/automations/AutomationsSettings.render.client.test.tsx index 5965fa397..bdf1e76a3 100644 --- a/apps/web/src/components/settings/automations/AutomationsSettings.render.client.test.tsx +++ b/apps/web/src/components/settings/automations/AutomationsSettings.render.client.test.tsx @@ -1456,6 +1456,49 @@ describe('AutomationsSettings', () => { ).toBeInTheDocument(); }); + it('explains that Telegram replies continue the Fast session', async () => { + state.settingsQuery.data.capabilities.telegramConnected = true; + state.customAutomations = [ + { + id: 'automation-telegram-fast', + name: 'Telegram daily brief', + prompt: 'Summarize my priorities.', + enabled: true, + scheduleMode: 'daily', + cronExpression: null, + model: null, + executionMode: 'fast', + environmentId: '__fast__', + target: { + provider: 'telegram', + targetKind: 'telegram_user', + externalRef: 'user-1', + }, + lastRunAt: null, + lastSucceededAt: null, + lastFailedAt: null, + lastError: null, + lastLaunchedTaskId: null, + createdByName: 'Ada', + createdAt: new Date('2026-01-01T00:00:00Z'), + updatedAt: new Date('2026-01-01T00:00:00Z'), + }, + ]; + + render(); + fireEvent.click( + await screen.findByRole('button', { + name: 'Configure Telegram daily brief', + }), + ); + + expect( + screen.getByText( + 'Each Fast run posts here, and replies continue the Fast session.', + ), + ).toBeInTheDocument(); + }); + it('only offers connected providers as custom automation destinations', async () => { state.settingsQuery.data.capabilities.slackConnected = false; state.settingsQuery.data.capabilities.discordConnected = true; diff --git a/apps/web/src/components/settings/automations/CustomAutomationsSection.tsx b/apps/web/src/components/settings/automations/CustomAutomationsSection.tsx index ade8f27e6..54be03f31 100644 --- a/apps/web/src/components/settings/automations/CustomAutomationsSection.tsx +++ b/apps/web/src/components/settings/automations/CustomAutomationsSection.tsx @@ -921,9 +921,7 @@ export function CustomAutomationsSection() {

{form.targetProvider === 'none' ? 'This run is stored as a Fast conversation without posting to chat.' - : form.targetProvider === 'telegram' - ? 'Each Fast run posts here. Continue the session from the web app; chat replies on this provider do not resume Fast yet.' - : 'Each Fast run posts here, and replies continue the Fast session.'} + : 'Each Fast run posts here, and replies continue the Fast session.'}

) : null}