Skip to content

Add the control plane console - #5863

Open
bhagyasakalanka wants to merge 2 commits into
thunder-id:mainfrom
bhagyasakalanka:console-cp
Open

bhagyasakalanka wants to merge 2 commits into
thunder-id:mainfrom
bhagyasakalanka:console-cp

Conversation

@bhagyasakalanka

@bhagyasakalanka bhagyasakalanka commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Purpose

The control plane administers the gateways configuration is deployed to (#5602), and it executes no flows. Its console therefore needs gateway management, and the administration operations the console runs through a flow on the all-in-one server have to call the management API directly.

Rather than one console build that switches on a runtime flag, this adds a console app for the control plane, frontend/apps/console-cp, composed from the same feature packages as the console plus gateway management (#5716), with every administration operation running natively (#5559). Which features a console has is decided by what each app mounts, not by a setting every package reads.

Approach

@thunderid/configure-onboarding, a new package, holds what the console previously implemented itself and both consoles need: the home page and its cards, the welcome page, Create Project, Get Started and the three tryouts, with the quick start bundle import. The pages read their routes through useOnboardingRoutes and the host's RoutesProvider, like every feature package; the bundles the build stages into an app are handed down through SampleBundlesProvider. The console mounts the package where its own pages were, and its tests moved with the code (they now run in Chromium, as package tests do). WelcomePage takes tryouts={false} for a host that offers no tryouts.

frontend/apps/console-cp is the console the control plane serves at /console: the console's shell (layouts, HOCs, i18n, route table) with

  • Gateway Management (/gateways, /gateways/{id}) in the navigation, from @thunderid/configure-gateways.
  • AdministrationProvider with mode native around the whole app, so user and application deletion and secret regeneration call the API directly, and so will user and agent creation once Add users and agents natively when the console runs without flows #5703 lands.
  • No tryouts, which walk through flows the control plane does not run; the welcome page is mounted without them.
  • Dev port 5192. It serves the console's public folder (icons, favicons, config.js) through Vite's publicDir rather than a copy, since nothing in it is specific to a plane; the control plane gets its own when it gets its own distribution.

The console app itself changes only by taking the onboarding pages from the package.

Packaging follows separately. The control plane has no distribution of its own yet, so build.sh keeps packing apps/console; when the control plane distribution is set up, it builds and packs apps/console-cp, stages the quick start bundles into it, and the control plane server serves that folder. Until pr-builder.yml lists the new app, its tests run locally but not in CI; the onboarding package's tests run with the other packages.

Related Issues

Related PRs

Checklist

  • Followed the contribution guidelines.
  • Manual test round performed and verified.
  • Documentation provided. (Add links if there are any)
    • Ran Vale and fixed all errors and warnings
  • Tests provided. (Add links if there are any)
    • Unit Tests: the onboarding package (287 tests, moved with the pages); the control plane console's routes, navigation, administration mode and absent tryouts; the console's routes.
    • Integration Tests
  • Breaking changes. (Fill if applicable)

Security checks

  • Followed secure coding standards in WSO2 Secure Coding Guidelines
  • Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 170 files, which is 20 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: Repository: thunder-id/thunderid/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b5c99f26-978f-4d57-a0f4-9ab022f32811
📥 Commits

Reviewing files that changed from the base of the PR and between 6b551b6 and 265836b.

⛔ Files ignored due to path filters: 1
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing: 170
  • docs/community/contributing/contributing-code/frontend-development/overview.mdx
  • frontend/AGENTS.md
  • frontend/apps/console-cp/.gitignore
  • frontend/apps/console-cp/eslint.config.js
  • frontend/apps/console-cp/index.html
  • frontend/apps/console-cp/package.json
  • frontend/apps/console-cp/prettier.config.js
  • frontend/apps/console-cp/src/App.tsx
  • frontend/apps/console-cp/src/AppWithDecorators.tsx
  • frontend/apps/console-cp/src/__tests__/App.test.tsx
  • frontend/apps/console-cp/src/__tests__/AppWithDecorators.test.tsx
  • frontend/apps/console-cp/src/__tests__/main.test.tsx
  • frontend/apps/console-cp/src/__tests__/withRuntimeUrl.test.tsx
  • frontend/apps/console-cp/src/components/Head.tsx
  • frontend/apps/console-cp/src/components/__tests__/Head.test.tsx
  • frontend/apps/console-cp/src/configs/RouteConfig.ts
  • frontend/apps/console-cp/src/configs/__tests__/RouteConfig.test.ts
  • frontend/apps/console-cp/src/data/sampleBundles.ts
  • frontend/apps/console-cp/src/hocs/__tests__/withConfig.test.tsx
  • frontend/apps/console-cp/src/hocs/__tests__/withI18n.test.tsx
  • frontend/apps/console-cp/src/hocs/__tests__/withTheme.test.tsx
  • frontend/apps/console-cp/src/hocs/withConfig.tsx
  • frontend/apps/console-cp/src/hocs/withI18n.tsx
  • frontend/apps/console-cp/src/hocs/withRuntimeUrl.tsx
  • frontend/apps/console-cp/src/hocs/withTheme.tsx
  • frontend/apps/console-cp/src/i18n/I18nProvider.tsx
  • frontend/apps/console-cp/src/i18n/__tests__/I18nProvider.test.tsx
  • frontend/apps/console-cp/src/i18n/__tests__/invalidate-i18n-cache.test.ts
  • frontend/apps/console-cp/src/i18n/invalidate-i18n-cache.ts
  • frontend/apps/console-cp/src/layouts/DashboardLayout.tsx
  • frontend/apps/console-cp/src/layouts/FullScreenLayout.tsx
  • frontend/apps/console-cp/src/layouts/__tests__/DashboardLayout.test.tsx
  • frontend/apps/console-cp/src/layouts/__tests__/FullScreenLayout.test.tsx
  • frontend/apps/console-cp/src/lib/monaco-setup.ts
  • frontend/apps/console-cp/src/main.tsx
  • frontend/apps/console-cp/src/vite-env.d.ts
  • frontend/apps/console-cp/tsconfig.app.json
  • frontend/apps/console-cp/tsconfig.eslint.json
  • frontend/apps/console-cp/tsconfig.json
  • frontend/apps/console-cp/tsconfig.node.json
  • frontend/apps/console-cp/tsconfig.test.json
  • frontend/apps/console-cp/vite.config.ts
  • frontend/apps/console/package.json
  • frontend/apps/console/src/App.tsx
  • frontend/apps/console/src/__tests__/App.test.tsx
  • frontend/apps/console/src/api/useGetSampleBundles.ts
  • frontend/apps/console/src/configs/RouteConfig.ts
  • frontend/apps/console/src/data/sampleBundles.ts
  • frontend/packages/configure-gateways/.editorconfig
  • frontend/packages/configure-gateways/.prettierignore
  • frontend/packages/configure-gateways/eslint.config.js
  • frontend/packages/configure-gateways/package.json
  • frontend/packages/configure-gateways/prettier.config.js
  • frontend/packages/configure-gateways/rolldown.config.js
  • frontend/packages/configure-gateways/src/__tests__/http.ts
  • frontend/packages/configure-gateways/src/api/__tests__/gatewayApi.test.tsx
  • frontend/packages/configure-gateways/src/api/useDeleteGateway.ts
  • frontend/packages/configure-gateways/src/api/useGetGateway.ts
  • frontend/packages/configure-gateways/src/api/useGetGateways.ts
  • frontend/packages/configure-gateways/src/api/useRegisterGateway.ts
  • frontend/packages/configure-gateways/src/api/useUpdateGateway.ts
  • frontend/packages/configure-gateways/src/components/GatewayDeleteDialog.tsx
  • frontend/packages/configure-gateways/src/components/GatewaysList.tsx
  • frontend/packages/configure-gateways/src/components/RegisterGatewayDialog.tsx
  • frontend/packages/configure-gateways/src/components/RotateKeyDialog.tsx
  • frontend/packages/configure-gateways/src/components/__tests__/Dialogs.test.tsx
  • frontend/packages/configure-gateways/src/constants/gateway-query-keys.ts
  • frontend/packages/configure-gateways/src/hooks/__tests__/hooks.test.tsx
  • frontend/packages/configure-gateways/src/hooks/useGatewayErrorTranslator.ts
  • frontend/packages/configure-gateways/src/hooks/useGatewayRoutes.ts
  • frontend/packages/configure-gateways/src/index.ts
  • frontend/packages/configure-gateways/src/models/gateway.ts
  • frontend/packages/configure-gateways/src/pages/GatewayDetailPage.tsx
  • frontend/packages/configure-gateways/src/pages/GatewaysListPage.tsx
  • frontend/packages/configure-gateways/src/pages/__tests__/GatewayDetailPage.test.tsx
  • frontend/packages/configure-gateways/src/pages/__tests__/GatewaysListPage.test.tsx
  • frontend/packages/configure-gateways/src/utils/__tests__/utils.test.ts
  • frontend/packages/configure-gateways/src/utils/formatTimestamp.ts
  • frontend/packages/configure-gateways/src/utils/generateGatewayKey.ts
  • frontend/packages/configure-gateways/tsconfig.eslint.json
  • frontend/packages/configure-gateways/tsconfig.json
  • frontend/packages/configure-gateways/tsconfig.lib.json
  • frontend/packages/configure-gateways/tsconfig.spec.json
  • frontend/packages/configure-gateways/vitest.config.ts
  • frontend/packages/configure-onboarding/.editorconfig
  • frontend/packages/configure-onboarding/.prettierignore
  • frontend/packages/configure-onboarding/eslint.config.js
  • frontend/packages/configure-onboarding/package.json
  • frontend/packages/configure-onboarding/prettier.config.js
  • frontend/packages/configure-onboarding/rolldown.config.js
  • frontend/packages/configure-onboarding/src/api/__tests__/useGetSampleBundles.test.tsx
  • frontend/packages/configure-onboarding/src/api/__tests__/useWayfinderReleases.test.ts
  • frontend/packages/configure-onboarding/src/api/useGetSampleBundles.ts
  • frontend/packages/configure-onboarding/src/api/useWayfinderReleases.ts
  • frontend/packages/configure-onboarding/src/components/home/FrameworkFlipCard.tsx
  • frontend/packages/configure-onboarding/src/components/home/NextStepsSection.tsx
  • frontend/packages/configure-onboarding/src/components/home/StartBuildingSection.tsx
  • frontend/packages/configure-onboarding/src/components/home/StartCoding.tsx
  • frontend/packages/configure-onboarding/src/components/home/__tests__/FrameworkFlipCard.test.tsx
  • frontend/packages/configure-onboarding/src/components/home/__tests__/NextStepsSection.test.tsx
  • frontend/packages/configure-onboarding/src/components/home/__tests__/StartBuildingSection.test.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/ConnectionsCard.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/HomeNextStepCard.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/InviteMembersCard.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/LoginBoxCard.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/MFACard.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/__tests__/ConnectionsCard.test.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/__tests__/HomeNextStepCard.test.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/__tests__/InviteMembersCard.test.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/__tests__/LoginBoxCard.test.tsx
  • frontend/packages/configure-onboarding/src/components/home/cards/__tests__/MFACard.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/AIAgentApiKeySetup.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/CodeInline.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/CredentialsBlock.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/ExternalLink.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/FormFieldsBlock.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/HowSolutionWorksIllustration.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/StepList.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/TerminalBlock.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/WayfinderConfigImport.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/WayfinderSampleDownload.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/WayfinderSampleSetup.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/WelcomeRedirect.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/AIAgentApiKeySetup.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/CodeInline.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/CredentialsBlock.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/ExternalLink.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/FormFieldsBlock.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/HowSolutionWorksIllustration.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/StepList.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/TerminalBlock.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/WayfinderConfigImport.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/WayfinderSampleDownload.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/WayfinderSampleSetup.test.tsx
  • frontend/packages/configure-onboarding/src/components/welcome/__tests__/WelcomeRedirect.test.tsx
  • frontend/packages/configure-onboarding/src/constants/sample-urls.ts
  • frontend/packages/configure-onboarding/src/constants/storage-keys.ts
  • frontend/packages/configure-onboarding/src/contexts/SampleBundlesContext.tsx
  • frontend/packages/configure-onboarding/src/contexts/SampleBundlesProvider.tsx
  • frontend/packages/configure-onboarding/src/hooks/__tests__/useWelcomeClose.test.ts
  • frontend/packages/configure-onboarding/src/hooks/useOnboardingRoutes.ts
  • frontend/packages/configure-onboarding/src/hooks/useWelcomeClose.ts
  • frontend/packages/configure-onboarding/src/index.ts
  • frontend/packages/configure-onboarding/src/models/download-assets.ts
  • frontend/packages/configure-onboarding/src/pages/CreateProjectPage.tsx
  • frontend/packages/configure-onboarding/src/pages/GetStartedPage.tsx
  • frontend/packages/configure-onboarding/src/pages/HomePage.tsx
  • frontend/packages/configure-onboarding/src/pages/TryoutSecuringAIAgentsPage.tsx
  • frontend/packages/configure-onboarding/src/pages/TryoutSecuringApplicationPage.tsx
  • frontend/packages/configure-onboarding/src/pages/TryoutSecuringMCPPage.tsx
  • frontend/packages/configure-onboarding/src/pages/WelcomePage.tsx
  • frontend/packages/configure-onboarding/src/pages/__tests__/CreateProjectPage.test.tsx
  • frontend/packages/configure-onboarding/src/pages/__tests__/GetStartedPage.test.tsx
  • frontend/packages/configure-onboarding/src/pages/__tests__/HomePage.test.tsx
  • frontend/packages/configure-onboarding/src/pages/__tests__/TryoutSecuringAIAgentsPage.test.tsx
  • frontend/packages/configure-onboarding/src/pages/__tests__/TryoutSecuringApplicationPage.test.tsx
  • frontend/packages/configure-onboarding/src/pages/__tests__/TryoutSecuringMCPPage.test.tsx
  • frontend/packages/configure-onboarding/src/pages/__tests__/WelcomePage.test.tsx
  • frontend/packages/configure-onboarding/src/utils/__tests__/sampleBundles.test.ts
  • frontend/packages/configure-onboarding/src/utils/getWayfinderConfiguredStorageKey.ts
  • frontend/packages/configure-onboarding/src/utils/getWayfinderSetupExpandedStorageKey.ts
  • frontend/packages/configure-onboarding/src/utils/getWelcomeDismissedStorageKey.ts
  • frontend/packages/configure-onboarding/src/utils/sampleBundles.ts
  • frontend/packages/configure-onboarding/tsconfig.eslint.json
  • frontend/packages/configure-onboarding/tsconfig.json
  • frontend/packages/configure-onboarding/tsconfig.lib.json
  • frontend/packages/configure-onboarding/tsconfig.spec.json
  • frontend/packages/configure-onboarding/vitest.config.ts
  • frontend/packages/i18n/src/locales/en-US.ts
  • turbo.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@rajithacharith rajithacharith added Type/Improvement trigger-pr-builder Add when the PR is ready for CI; starts the PR Builder for this and all later pushes labels Oct 16, 2026
@bhagyasakalanka

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review skipped: 170 files exceed the limit of 150.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Signed-off-by: bhagyasakalanka <bsakalanka9@gmail.com>
Signed-off-by: bhagyasakalanka <bsakalanka9@gmail.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trigger-pr-builder Add when the PR is ready for CI; starts the PR Builder for this and all later pushes Type/Improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants