diff --git a/apps/web/src/app/(sandbox)/sessions/[sessionId]/FastSessionTranscript.client.test.tsx b/apps/web/src/app/(sandbox)/sessions/[sessionId]/FastSessionTranscript.client.test.tsx
index 380e0e5a4b..3238c7c358 100644
--- a/apps/web/src/app/(sandbox)/sessions/[sessionId]/FastSessionTranscript.client.test.tsx
+++ b/apps/web/src/app/(sandbox)/sessions/[sessionId]/FastSessionTranscript.client.test.tsx
@@ -1201,6 +1201,42 @@ describe('FastSessionTranscript', () => {
expect(document.querySelector('.lucide-git-branch')).toBeInTheDocument();
});
+ it('renders integration discovery with the requested status copy and plug icon', () => {
+ const receipt = textMessage({
+ id: 'integration-receipt',
+ role: 'user',
+ text: 'Asked about integrations.',
+ ts: 1,
+ inputKind: SETUP_RECEIPT_INPUT_KIND,
+ userId: 'user-1',
+ });
+ receipt.payload = {
+ setupReceipt: {
+ kind: 'integration_discovery',
+ presentation: {
+ label: 'Asked about integrations',
+ iconKey: 'plug',
+ },
+ },
+ };
+
+ render(
+ ,
+ );
+
+ expect(screen.getByText('Asked about integrations')).toBeInTheDocument();
+ expect(document.querySelector('.lucide-plug')).toBeInTheDocument();
+ });
+
it('removes the running task indicator when the count returns to zero', () => {
const { rerender } = render(
diff --git a/apps/web/src/app/(sandbox)/sessions/[sessionId]/setup/SetupIntegrationsCard.client.test.tsx b/apps/web/src/app/(sandbox)/sessions/[sessionId]/setup/SetupIntegrationsCard.client.test.tsx
index 77a6040ec7..7d9203cdf2 100644
--- a/apps/web/src/app/(sandbox)/sessions/[sessionId]/setup/SetupIntegrationsCard.client.test.tsx
+++ b/apps/web/src/app/(sandbox)/sessions/[sessionId]/setup/SetupIntegrationsCard.client.test.tsx
@@ -143,7 +143,10 @@ beforeEach(() => {
});
it('shows only eligible option IDs in catalog order without badges or unmentioned defaults', () => {
- render();
+ const { container } = render(
+ ,
+ );
+ expect(container.querySelector('.lucide-plug')).toBeInTheDocument();
const rows = within(
screen.getByRole('list', { name: 'Available integrations' }),
).getAllByRole('listitem');
diff --git a/apps/web/src/trpc/commands/setup/setup-session.test.ts b/apps/web/src/trpc/commands/setup/setup-session.test.ts
index 82ed4e1ab7..d19f15eeb9 100644
--- a/apps/web/src/trpc/commands/setup/setup-session.test.ts
+++ b/apps/web/src/trpc/commands/setup/setup-session.test.ts
@@ -332,6 +332,27 @@ describe('optional setup integration discovery', () => {
.from(fastAgentMessages)
.where(eq(fastAgentMessages.eventId, 'event:integrations:response'));
expect(response?.metadata).toMatchObject({ userId: auth.userId });
+ const messages = await db
+ .select({ payload: fastAgentMessages.payload })
+ .from(fastAgentMessages)
+ .where(eq(fastAgentMessages.conversationId, conversationId));
+ expect(
+ messages.find(
+ ({ payload }) =>
+ (
+ payload as {
+ setupReceipt?: { kind?: string };
+ } | null
+ )?.setupReceipt?.kind === 'integration_discovery',
+ )?.payload,
+ ).toMatchObject({
+ setupReceipt: {
+ presentation: {
+ label: 'Asked about integrations',
+ iconKey: 'plug',
+ },
+ },
+ });
});
it('rejects setup replies from a collaborator instead of dropping setup guards', async () => {
diff --git a/apps/web/src/trpc/commands/setup/setup-session.ts b/apps/web/src/trpc/commands/setup/setup-session.ts
index f9fe20283f..a355974657 100644
--- a/apps/web/src/trpc/commands/setup/setup-session.ts
+++ b/apps/web/src/trpc/commands/setup/setup-session.ts
@@ -1145,10 +1145,10 @@ async function persistSetupPresetResponse(input: {
fingerprint: input.request.payload.requestId,
requestId: input.request.payload.requestId,
presentation: {
- label: 'Suggested integrations',
+ label: 'Asked about integrations',
iconKey: 'plug',
},
- text: 'Suggested integrations.',
+ text: 'Asked about integrations.',
payload: {},
ts: now.getTime(),
}),