From 542f36d4925f13fd954d8c963a44bc802cfcf1ab Mon Sep 17 00:00:00 2001 From: daniel-lxs Date: Tue, 28 Jul 2026 14:41:13 -0500 Subject: [PATCH] Simplify Linear OAuth app setup --- .../components/settings/Integrations.test.tsx | 2 ++ .../settings/LinearOauthSetupDialog.tsx | 36 ++----------------- .../src/trpc/commands/linear/index.test.ts | 5 ++- .../src/trpc/commands/linear/oauth-setup.ts | 1 + 4 files changed, 10 insertions(+), 34 deletions(-) diff --git a/apps/web/src/components/settings/Integrations.test.tsx b/apps/web/src/components/settings/Integrations.test.tsx index 6ebbe083..602d2e29 100644 --- a/apps/web/src/components/settings/Integrations.test.tsx +++ b/apps/web/src/components/settings/Integrations.test.tsx @@ -496,6 +496,8 @@ describe('Integrations settings', () => { expect( screen.getByRole('button', { name: 'Create Linear app' }), ).toBeInTheDocument(); + expect(screen.queryByText('Callback URL')).not.toBeInTheDocument(); + expect(screen.queryByText('Webhook URL')).not.toBeInTheDocument(); expect(screen.getByLabelText('Client ID')).toBeInTheDocument(); expect(screen.getByLabelText('Client secret')).toBeInTheDocument(); expect(screen.getByLabelText('Webhook secret')).toBeInTheDocument(); diff --git a/apps/web/src/components/settings/LinearOauthSetupDialog.tsx b/apps/web/src/components/settings/LinearOauthSetupDialog.tsx index 929ae287..592a89bc 100644 --- a/apps/web/src/components/settings/LinearOauthSetupDialog.tsx +++ b/apps/web/src/components/settings/LinearOauthSetupDialog.tsx @@ -10,7 +10,6 @@ import { Alert, AlertDescription, Button, - Copy, Dialog, DialogContent, DialogDescription, @@ -53,31 +52,6 @@ const EMPTY_FORM: LinearOauthForm = { webhookSecret: '', }; -function EndpointField({ label, value }: { label: string; value: string }) { - const copyValue = async () => { - await navigator.clipboard.writeText(value); - toast.success(`${label} copied.`); - }; - - return ( -
- -
- - -
-
- ); -} - function CredentialField({ id, label, @@ -207,9 +181,9 @@ export function LinearOauthSetupDialog({ Create a Linear app for this deployment.

- Self-hosted Roomote needs its own Linear app. The manifest - pre-fills the callback, webhook, and agent event settings. - Review it in Linear, then create the app. + Roomote needs its own Linear app. The manifest pre-fills the + callback, webhook, and agent event settings. Review it in + Linear, then create the app.

-
- - -
diff --git a/apps/web/src/trpc/commands/linear/index.test.ts b/apps/web/src/trpc/commands/linear/index.test.ts index 98eec192..513682ab 100644 --- a/apps/web/src/trpc/commands/linear/index.test.ts +++ b/apps/web/src/trpc/commands/linear/index.test.ts @@ -86,7 +86,10 @@ describe('Linear OAuth setup', () => { expect(manifest).toMatchObject({ schemaVersion: '1.0.0', distribution: 'private', - display: { description: 'Cloud coding agents for all' }, + display: { + description: 'Cloud coding agents for all', + iconUrl: 'https://roomote.example/roomote-logo.png', + }, oauth: { client_name: 'roomote-example', redirect_uris: [setup.callbackUrl], diff --git a/apps/web/src/trpc/commands/linear/oauth-setup.ts b/apps/web/src/trpc/commands/linear/oauth-setup.ts index 007715f0..900b16ad 100644 --- a/apps/web/src/trpc/commands/linear/oauth-setup.ts +++ b/apps/web/src/trpc/commands/linear/oauth-setup.ts @@ -67,6 +67,7 @@ function buildLinearOauthSetup(publicOrigin: string) { distribution: 'private', display: { description: DEPLOYMENT_APP_DESCRIPTION, + iconUrl: new URL('/roomote-logo.png', publicOrigin).toString(), }, developer: { name: 'Roomote' }, oauth: {