v5 (#1097) - #1106

Merged
brendan-kellam merged 91 commits into
mainfrom
v5
Jun 3, 2026
Merged

v5 (#1097)#1106
brendan-kellam merged 91 commits into
mainfrom
v5

Conversation

@brendan-kellam

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitaiBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 284 files, which is 134 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6868608-c7fa-4c64-8446-2ec8c11ca1c3

📥 Commits

Reviewing files that changed from the base of the PR and between 740bcc9 and ded4282.

⛔ Files ignored due to path filters (16)
  • docs/images/connectors_account_page.png is excluded by !**/*.png
  • docs/images/connectors_edit_scopes.png is excluded by !**/*.png
  • docs/images/connectors_edit_tool_permissions.png is excluded by !**/*.png
  • docs/images/connectors_oauth_scopes.png is excluded by !**/*.png
  • docs/images/connectors_permission_request.png is excluded by !**/*.png
  • docs/images/connectors_static_registration.png is excluded by !**/*.png
  • docs/images/connectors_toggle_off.png is excluded by !**/*.png
  • docs/images/connectors_tool_permissions.png is excluded by !**/*.png
  • docs/images/setup_sourcebot_splash.png is excluded by !**/*.png
  • packages/web/public/claude_code.svg is excluded by !**/*.svg
  • packages/web/public/codex.svg is excluded by !**/*.svg
  • packages/web/public/cursor_dark.svg is excluded by !**/*.svg
  • packages/web/public/cursor_light.svg is excluded by !**/*.svg
  • packages/web/public/vscode.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_dark.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_light.svg is excluded by !**/*.svg
📒 Files selected for processing (284)
  • .env.development
  • .github/workflows/release-mcp.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docker-compose.yml
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • docs/docs/activating-a-subscription.mdx
  • docs/docs/billing.mdx
  • docs/docs/configuration/audit-logs.mdx
  • docs/docs/configuration/auth/access-settings.mdx
  • docs/docs/configuration/auth/authentication.mdx
  • docs/docs/configuration/auth/providers.mdx
  • docs/docs/configuration/auth/roles-and-permissions.mdx
  • docs/docs/configuration/config-file.mdx
  • docs/docs/configuration/declarative-config.mdx
  • docs/docs/configuration/environment-variables.mdx
  • docs/docs/configuration/idp.mdx
  • docs/docs/connections/ado-cloud.mdx
  • docs/docs/connections/ado-server.mdx
  • docs/docs/connections/bitbucket-cloud.mdx
  • docs/docs/connections/bitbucket-data-center.mdx
  • docs/docs/connections/generic-git-host.mdx
  • docs/docs/connections/gerrit.mdx
  • docs/docs/connections/gitea.mdx
  • docs/docs/connections/github.mdx
  • docs/docs/connections/gitlab.mdx
  • docs/docs/connections/indexing-your-code.mdx
  • docs/docs/connections/local-repos.mdx
  • docs/docs/deployment/docker-compose.mdx
  • docs/docs/deployment/infrastructure/architecture.mdx
  • docs/docs/deployment/sizing-guide.mdx
  • docs/docs/features/agents/agents.mdx
  • docs/docs/features/ask/ask-sourcebot.mdx
  • docs/docs/features/ask/chat-sharing.mdx
  • docs/docs/features/ask/connectors.mdx
  • docs/docs/features/mcp-server.mdx
  • docs/docs/features/permission-syncing.mdx
  • docs/docs/features/search/code-search.mdx
  • docs/docs/features/search/multi-branch-indexing.mdx
  • docs/docs/features/search/search-contexts.mdx
  • docs/docs/free-trial.mdx
  • docs/docs/license-key.mdx
  • docs/docs/misc/architecture.mdx
  • docs/docs/misc/scalability.mdx
  • docs/docs/misc/service-ping.mdx
  • docs/docs/misc/telemetry.mdx
  • docs/docs/overview.mdx
  • docs/docs/upgrade/v3-to-v4-guide.mdx
  • docs/docs/upgrade/v4-to-v5-guide.mdx
  • docs/snippets/license-key-required.mdx
  • entrypoint.sh
  • packages/backend/src/__mocks__/prisma.ts
  • packages/backend/src/api.ts
  • packages/backend/src/ee/accountPermissionSyncer.ts
  • packages/backend/src/ee/repoPermissionSyncer.ts
  • packages/backend/src/ee/syncSearchContexts.test.ts
  • packages/backend/src/ee/syncSearchContexts.ts
  • packages/backend/src/entitlements.ts
  • packages/backend/src/github.ts
  • packages/backend/src/index.ts
  • packages/backend/src/posthog.ts
  • packages/backend/src/prisma.ts
  • packages/backend/src/redis.ts
  • packages/backend/src/utils.ts
  • packages/backend/vitest.config.ts
  • packages/db/prisma/migrations/20260502000000_remove_guest_org_role/migration.sql
  • packages/db/prisma/migrations/20260509000000_add_license_table/migration.sql
  • packages/db/prisma/migrations/20260523064558_add_repo_visit_table/migration.sql
  • packages/db/prisma/migrations/20260525214409_add_changelog_table/migration.sql
  • packages/db/prisma/migrations/20260526013307_add_user_last_active_at/migration.sql
  • packages/db/prisma/migrations/20260603172622_add_mcp_connectors/migration.sql
  • packages/db/prisma/schema.prisma
  • packages/db/tools/scriptRunner.ts
  • packages/db/tools/scripts/inject-chat-data.ts
  • packages/setupWizard/README.md
  • packages/setupWizard/package.json
  • packages/setupWizard/src/azuredevops.ts
  • packages/setupWizard/src/bitbucket.ts
  • packages/setupWizard/src/genericGit.ts
  • packages/setupWizard/src/gerrit.ts
  • packages/setupWizard/src/gitea.ts
  • packages/setupWizard/src/github.ts
  • packages/setupWizard/src/gitlab.ts
  • packages/setupWizard/src/index.ts
  • packages/setupWizard/src/localRepos.ts
  • packages/setupWizard/src/models.ts
  • packages/setupWizard/src/tabCheckbox.ts
  • packages/setupWizard/src/utils.ts
  • packages/setupWizard/tsconfig.json
  • packages/shared/package.json
  • packages/shared/src/constants.ts
  • packages/shared/src/crypto.ts
  • packages/shared/src/entitlements.test.ts
  • packages/shared/src/entitlements.ts
  • packages/shared/src/env.server.test.ts
  • packages/shared/src/env.server.ts
  • packages/shared/src/index.client.ts
  • packages/shared/src/index.server.ts
  • packages/shared/src/redis.ts
  • packages/shared/src/types.ts
  • packages/shared/src/versionUtils.ts
  • packages/shared/vitest.config.ts
  • packages/web/next.config.mjs
  • packages/web/package.json
  • packages/web/src/__mocks__/prisma.ts
  • packages/web/src/actions.ts
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/page.tsx
  • packages/web/src/app/(app)/@sidebar/components/changelogEntryDialog.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/chatHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/repoVisitHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/header.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/sidebarBase.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeBadge.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeButton.tsx
  • packages/web/src/app/(app)/@sidebar/components/whatsNewSidebarButton.tsx
  • packages/web/src/app/(app)/agents/page.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/components/landingPage.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/page.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/pureCodePreviewPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/trackRepoVisit.tsx
  • packages/web/src/app/(app)/browse/[...path]/page.tsx
  • packages/web/src/app/(app)/browse/actions.ts
  • packages/web/src/app/(app)/browse/components/bottomPanel.tsx
  • packages/web/src/app/(app)/browse/components/pureFileTreePanel.tsx
  • packages/web/src/app/(app)/browse/layout.tsx
  • packages/web/src/app/(app)/browse/layoutClient.tsx
  • packages/web/src/app/(app)/chat/[id]/page.tsx
  • packages/web/src/app/(app)/chat/chatLandingPage.tsx
  • packages/web/src/app/(app)/chat/components/chatActionsDropdown.tsx
  • packages/web/src/app/(app)/chat/components/chatSidePanel.tsx
  • packages/web/src/app/(app)/chat/components/landingPageChatBox.tsx
  • packages/web/src/app/(app)/chat/components/mcpOAuthStatusToast.tsx
  • packages/web/src/app/(app)/chat/components/tutorialDialog.tsx
  • packages/web/src/app/(app)/chat/layout.tsx
  • packages/web/src/app/(app)/chat/page.tsx
  • packages/web/src/app/(app)/chats/chatsPage.tsx
  • packages/web/src/app/(app)/chats/page.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenu.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenuGroup.tsx
  • packages/web/src/app/(app)/components/banners/actions.ts
  • packages/web/src/app/(app)/components/banners/bannerHeightObserver.tsx
  • packages/web/src/app/(app)/components/banners/bannerResolver.test.ts
  • packages/web/src/app/(app)/components/banners/bannerResolver.tsx
  • packages/web/src/app/(app)/components/banners/bannerShell.tsx
  • packages/web/src/app/(app)/components/banners/bannerSlot.tsx
  • packages/web/src/app/(app)/components/banners/invoicePastDueBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiredBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiryHeadsUpBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseReboundElsewhereBanner.tsx
  • packages/web/src/app/(app)/components/banners/openBillingPortalButton.tsx
  • packages/web/src/app/(app)/components/banners/permissionSyncBanner.tsx
  • packages/web/src/app/(app)/components/banners/refreshLicenseButton.tsx
  • packages/web/src/app/(app)/components/banners/servicePingFailedBanner.tsx
  • packages/web/src/app/(app)/components/banners/trialBanner.tsx
  • packages/web/src/app/(app)/components/banners/types.ts
  • packages/web/src/app/(app)/components/banners/upgradeAvailableBanner.tsx
  • packages/web/src/app/(app)/components/meControlDropdownMenu.tsx
  • packages/web/src/app/(app)/components/navigationMenu/index.tsx
  • packages/web/src/app/(app)/components/navigationMenu/navigationItems.tsx
  • packages/web/src/app/(app)/components/navigationMenu/progressIndicator.tsx
  • packages/web/src/app/(app)/components/notFound.tsx
  • packages/web/src/app/(app)/components/pageNotFound.tsx
  • packages/web/src/app/(app)/components/searchModeSelector.tsx
  • packages/web/src/app/(app)/components/topBar.tsx
  • packages/web/src/app/(app)/components/upgradeToast.tsx
  • packages/web/src/app/(app)/components/whatsNewIndicator.tsx
  • packages/web/src/app/(app)/layout.tsx
  • packages/web/src/app/(app)/page.tsx
  • packages/web/src/app/(app)/repos/[id]/page.tsx
  • packages/web/src/app/(app)/repos/layout.tsx
  • packages/web/src/app/(app)/search/components/searchLandingPage.tsx
  • packages/web/src/app/(app)/search/components/searchResultsPage.tsx
  • packages/web/src/app/(app)/search/page.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/accountAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/analytics/analyticsEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/analytics/page.tsx
  • packages/web/src/app/(app)/settings/apiKeys/apiKeysPage.tsx
  • packages/web/src/app/(app)/settings/apiKeys/columns.tsx
  • packages/web/src/app/(app)/settings/apiKeys/page.tsx
  • packages/web/src/app/(app)/settings/components/settingsCard.tsx
  • packages/web/src/app/(app)/settings/components/sidebar-nav.tsx
  • packages/web/src/app/(app)/settings/connections/page.tsx
  • packages/web/src/app/(app)/settings/general/generalPage.tsx
  • packages/web/src/app/(app)/settings/general/page.tsx
  • packages/web/src/app/(app)/settings/layout.tsx
  • packages/web/src/app/(app)/settings/license/activationCodeCard.tsx
  • packages/web/src/app/(app)/settings/license/offlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/licenseInactiveBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/onlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/planActionsMenu.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/removeActivationCodeDialog.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/trialMissingPaymentMethodBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/upcomingYearlyRenewalBanner.tsx
  • packages/web/src/app/(app)/settings/license/page.tsx
  • packages/web/src/app/(app)/settings/license/recentInvoicesCard.tsx
  • packages/web/src/app/(app)/settings/license/types.ts
  • packages/web/src/app/(app)/settings/license/yearlyTermSeatsUsageCard.tsx
  • packages/web/src/app/(app)/settings/linked-accounts/page.tsx
  • packages/web/src/app/(app)/settings/mcp/clientCard.tsx
  • packages/web/src/app/(app)/settings/mcp/clients.ts
  • packages/web/src/app/(app)/settings/mcp/mcpEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/mcp/mcpPage.tsx
  • packages/web/src/app/(app)/settings/mcp/page.tsx
  • packages/web/src/app/(app)/settings/members/components/inviteMemberCard.tsx
  • packages/web/src/app/(app)/settings/members/components/invitesList.tsx
  • packages/web/src/app/(app)/settings/members/components/membersList.tsx
  • packages/web/src/app/(app)/settings/members/components/requestsList.tsx
  • packages/web/src/app/(app)/settings/members/page.tsx
  • packages/web/src/app/(app)/settings/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/mcpToolPermissionsPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/prefabConnectorPopover.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentUnavailableMessage.tsx
  • packages/web/src/app/api/(client)/client.ts
  • packages/web/src/app/api/(server)/changelog/entries/route.ts
  • packages/web/src/app/api/(server)/chat/blocking/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-authorization-server/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-protected-resource/[...path]/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/types.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.ts
  • packages/web/src/app/api/(server)/ee/audit/route.ts
  • packages/web/src/app/api/(server)/ee/chat/[chatId]/searchMembers/route.ts
  • packages/web/src/app/api/(server)/ee/chat/route.ts
  • packages/web/src/app/api/(server)/ee/chats/route.ts
  • packages/web/src/app/api/(server)/ee/chats/types.ts
  • packages/web/src/app/api/(server)/ee/mcp/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/register/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/revoke/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/token/route.ts
  • packages/web/src/app/api/(server)/ee/permissionSyncStatus/api.ts
  • packages/web/src/app/api/(server)/ee/user/route.ts
  • packages/web/src/app/api/(server)/ee/users/route.ts
  • packages/web/src/app/api/(server)/offers/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/components/anonymousAccessToggle.tsx
  • packages/web/src/app/components/authMethodSelector.tsx
  • packages/web/src/app/components/organizationAccessSettings.tsx
  • packages/web/src/app/globals.css
  • packages/web/src/app/invite/actions.ts
  • packages/web/src/app/invite/page.tsx
  • packages/web/src/app/layout.tsx
  • packages/web/src/app/login/components/loginForm.tsx
  • packages/web/src/app/login/page.tsx
  • packages/web/src/app/not-found.tsx
  • packages/web/src/app/oauth/authorize/page.tsx
  • packages/web/src/app/onboard/components/alreadyLicensedStep.tsx
  • packages/web/src/app/onboard/components/completeOnboardingButton.tsx
  • packages/web/src/app/onboard/components/trialStep.tsx
  • packages/web/src/app/onboard/page.tsx
  • packages/web/src/app/posthogProvider.tsx
  • packages/web/src/app/progressBarProvider.tsx
  • packages/web/src/app/signup/page.tsx
  • packages/web/src/auth.ts
  • packages/web/src/components/ui/alert.tsx
  • packages/web/src/components/ui/data-table.tsx
  • packages/web/src/components/ui/dialog.tsx
  • packages/web/src/components/ui/sidebar.tsx

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v5

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 and usage tips.

@github-actions

github-actionsBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

License Audit

⚠️Status: PASS

MetricCount
Total packages2133
Resolved (non-standard)11
Unresolved0
Strong copyleft0
Weak copyleft39

Weak Copyleft Packages (informational)

PackageVersionLicense
@img/sharp-libvips-darwin-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.0.5LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-ppc641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-riscv641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.2.4LGPL-3.0-or-later
@img/sharp-wasm320.33.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-wasm320.34.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-win32-arm640.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.34.5Apache-2.0 AND LGPL-3.0-or-later
axe-core4.10.3MPL-2.0
dompurify3.4.0(MPL-2.0 OR Apache-2.0)
lightningcss1.32.0MPL-2.0
lightningcss-android-arm641.32.0MPL-2.0
lightningcss-darwin-arm641.32.0MPL-2.0
lightningcss-darwin-x641.32.0MPL-2.0
lightningcss-freebsd-x641.32.0MPL-2.0
lightningcss-linux-arm-gnueabihf1.32.0MPL-2.0
lightningcss-linux-arm64-gnu1.32.0MPL-2.0
lightningcss-linux-arm64-musl1.32.0MPL-2.0
lightningcss-linux-x64-gnu1.32.0MPL-2.0
lightningcss-linux-x64-musl1.32.0MPL-2.0
lightningcss-win32-arm64-msvc1.32.0MPL-2.0
lightningcss-win32-x64-msvc1.32.0MPL-2.0
Resolved Packages (11)
PackageVersionOriginalResolvedSource
@react-grab/cli0.1.23UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/cli0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/mcp0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
codemirror-lang-elixir4.0.0UNKNOWNApache-2.0GitHub repo (livebook-dev/codemirror-lang-elixir LICENSE)
element-source0.0.3UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
lezer-elixir1.1.2UNKNOWNApache-2.0GitHub repo (livebook-dev/lezer-elixir LICENSE)
map-stream0.1.0UNKNOWNMITGitHub repo (dominictarr/map-stream LICENCE)
memorystream0.3.1UNKNOWNMITextracted from object (npm licenses[0].type field)
pause-stream0.0.11["MIT","Apache2"]MIT OR Apache-2.0extracted from object array + GitHub repo (dominictarr/pause-stream LICENSE, dual licensed)
posthog-js1.369.0SEE LICENSE IN LICENSEApache-2.0GitHub repo (PostHog/posthog-js LICENSE file)
valid-url1.0.9UNKNOWNMITGitHub repo (ogt/valid-url LICENSE file)

* wip
* remove unused hook
* Add collapse sidebar button
* refactor settings into sidebar as a override context
* chat thread styling
* notification dot
* improved rendering
* fix light mode
* imporved api key page
* add chats page
* not found nit
* guest sidebar footer
* add tooltip for sidebar collapse button
* nit
* onboard nit
* fix permission sync banner
* what's new
* profile settings
* home view settings
* general settings
* remove shadow
* changelog
* feedback
brendan-kellamand others added 5 commits April 24, 2026 08:53
* wip on service ping
* add concept of License to the database and wire it into the enitlements system
* wip on e2e checkout flow
* basic card to display current plan
* store activation code at rest
* add manage subscription button
* wip on lighthouse client
* wip on lighthouse client
* remove the concept of a plan and just rely on entitlements at the app layer
* fix sidebar
* add temporary refresh license button
* clarified org availability design
* entitlements naming nit
* remove concept of a GUEST user
* remove anonymous-access entitlement
* change offline license to support optional seats
* handle license validation for all paths
* refactor some actions
* add explicit service ping calls to user <> organization update paths
* fix refresh bug with sidebar
* add billing details card
* fix invite redemption when user already a member
User was hitting a unique constraint on UserToOrg(orgId, userId) when
redeeming an invite, because onCreateUser auto-joins new signups in
self-serve mode and redeemInvite then tried to create the same row.
Make the insert idempotent via upsert so the downstream AccountRequest
and invite cleanup still runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wip on license card
* further wip on license card / activaction code card
* add recent invoices UI
* nit on seats terminology
* feat(web): surface subscription cancellation on license card
Adds cancelAt to the License model and the lighthouse ping schema, and
renders "Cancels on <date>" on the current plan card when there's no
upcoming renewal. Prefers "Next renewal" when Stripe still has an
upcoming invoice — so subscriptions scheduled to end after the next
billing cycle keep showing the renewal row.
Also makes nextRenewalAt / nextRenewalAmount nullable to match the
lighthouse response, and guards new Date() against null in servicePing.
Adds a CLAUDE.md under the lighthouse feature folder pointing at the
service repo so the two schemas stay in lockstep.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): add offline license card to settings
Renders a dedicated card for offline (SOURCEBOT_EE_LICENSE_KEY) licenses
showing the license id, seat cap, and expiry. When an offline license
is present, the page skips the online license lookup entirely to mirror
the precedence in entitlements.ts.
Also adds a header row with a mailto link to support and an "All plans"
shortcut to the public pricing page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): banner system for license + permission sync
Introduces a priority-ordered, single-slot banner system under
(app)/components/banners/. A server-side resolver picks the highest-priority
banner that matches the current context (role, license state, offline
license, permission-sync status) and renders it through a shared BannerShell
that handles per-day dismissal via cookies.
Banners included:
- License expired (everyone, non-dismissible, role-aware copy)
- License expiry heads-up (owner, dismissible, 14d window, uses
formatDistance for relative copy)
- Invoice past due (owner, non-dismissible)
- Permission sync pending (everyone, non-dismissible, migrated from the
prior standalone component through BannerShell)
Precedence mirrors entitlements.ts: offline license is the sole source
of truth when present, so online billing state is ignored.
Also splits getValidOfflineLicense into a decode-only path so
getOfflineLicenseMetadata can surface expired licenses to the UI.
Includes bannerResolver.test.ts covering priority, audience filtering,
dismissal filtering, offline/online expiry rules, and permission sync.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* handle failure case where lighthouse cannot be reached
* chore(web): mirror lighthouse trial + checkout schema changes
Adds trialEnd to the ping response schema and installId / requestTrial
to the checkout request schema so types match the lighthouse service.
createCheckoutSession passes the instance's SOURCEBOT_INSTALL_ID and
defaults requestTrial to false (the existing "upgrade" button is not
a trial path).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): trial banner + plumbing
Adds a trial banner to the owner-facing banner stack and the
surrounding plumbing:
- Schema: License.trialEnd, License.hasPaymentMethod, Org.trialUsedAt
(durable flag that survives license deactivation). Two migrations.
- servicePing persists trialEnd / hasPaymentMethod and flips
Org.trialUsedAt on first trial sync.
- Trial banner (owner, dismissible, priority 25): title uses
formatDistance ("Your trial ends in 10 days"); copy + action branch
on hasPaymentMethod. With-PM variant links to /settings/license;
no-PM variant opens the Stripe portal via a new
OpenBillingPortalButton (LoadingButton + createPortalSession).
- currentPlanCard gains a "Trial ends on" fallback column for the
trial-without-PM case (where nextRenewalAt is null).
- activationCodeCard accepts isTrialEligible and flips its checkout
button from "Purchase a license" to "Start a free trial" when the
org hasn't trialed yet, passing requestTrial through to the checkout
endpoint.
- Types mirror the new lighthouse fields (trialEnd, hasPaymentMethod)
and the checkout request additions (installId, requestTrial).
Side-trips to Stripe (portal, checkout) now append ?refresh=true so
the license resyncs on return; trial-checkout also appends
?trial_used=true so Org.trialUsedAt flips immediately (closes the UX
gap between checkout completion and activation-code entry). page.tsx
handles both params, preserves any other query params, and redirects
to a clean URL.
Also: fetchWithRetry now only retries 5xx, 408, and 429 — 4xx errors
(e.g. TRIAL_ALREADY_USED at 409) propagate immediately instead of
retrying pointlessly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add badges to invoice cards
* add basic billing docs
* refactor(lighthouse): throw ServiceErrorException on ping failure
syncWithLighthouse previously swallowed ping errors with a log and early
return, which masked real problems. Flip the model: on a lighthouse
ServiceError response, throw ServiceErrorException. The sew() middleware
already knows how to marshal that into an API response for user-initiated
paths.
Callers fall into two camps:
- Propagate (user-initiated): activateLicense and refreshLicense. The
existing try/catch in activateLicense now correctly rolls back the
license row when lighthouse rejects the activation code; refreshLicense
lets the throw propagate so the UI surfaces a toast.
- Swallow explicitly (background / side-effect): license page load, the
24h cron, user-approval, and signup paths all wrap with
`.catch(() => { /* ignore */ })`. These happen as a side effect of
other successful operations; a ping failure shouldn't block them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feedback
* fix tests
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@brendan-kellam
brendan-kellam marked this pull request as ready for review May 21, 2026 21:34
msukkariand others added 19 commits May 30, 2026 12:38
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): prevent top banner from pushing the chat prompt off-screen
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brendan Kellam <brendan@sourcebot.dev>
The code preview panel now persists the scroll position per
file/revision to sessionStorage and restores it on mount. Restoration
is skipped when a highlight_range query param is present so the existing
highlight scroll-into-view takes precedence.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ers (#1262)
Switches the safe.directory "*" config from --global (only written to
/root/.gitconfig) to --system (/etc/gitconfig) so it applies regardless
of which user runs git. The image intentionally sets no USER directive
and can be run as an arbitrary --user, where the global config was never
read, leaving the "dubious ownership" error unfixed.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)
* chore: remove embedded Postgres and Redis from the Docker image
As of v5, Sourcebot no longer ships an embedded Postgres or Redis.
External instances are now required via DATABASE_URL and REDIS_URL.
- Dockerfile: drop postgresql16/redis packages, DATABASE_DATA_DIR/
REDIS_DATA_DIR env, postgres/redis users, and /run/postgresql setup
- entrypoint.sh: hard-fail with guidance when DATABASE_URL/REDIS_URL are
unset; remove embedded init/startup blocks
- supervisord.conf: remove the redis program
- docs: mark DATABASE_URL/REDIS_URL required, drop data-dir vars, document
the breaking change and data migration in the v4-to-v5 guide
- CHANGELOG: note the breaking change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: point CHANGELOG entry at PR #1264
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* changelog
* docs: expand v4-to-v5 guide; require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY
- entrypoint.sh: require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY explicitly
(no auto-generation, no plaintext file loading); hard-fail with migration
guidance and warn if the legacy plaintext files linger
- v4-to-v5 guide: document the secrets, role-management, and external
Postgres/Redis breaking changes with per-item migration steps
- environment-variables: mark both secrets required
- roles-and-permissions: add default-role-by-plan table
- CHANGELOG: update breaking-change entries
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs nit
* changelog nit
* final nits
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
brendan-kellamand others added 2 commits June 2, 2026 20:29
…ces (#1267)
* feat(web): graceful error and loading states for billing/offers surfaces
Replace silent `null` returns with recoverable error states when the offers
fetch fails, across onboarding, the upsell dialog/panel, and feature gates:
- Onboarding trial step: reframe the error copy and add a "View pricing" link.
- UpsellDialog / UpsellPanel: shared UpsellLoadError fallback with a retry,
Status page link, and role-aware copy (owners get an outbound-access hint to
deployments.sourcebot.dev + Learn more; members are routed to their admin).
- UpsellPanel: add a `loadingVariant` prop so full-area feature gates render a
centered spinner while the in-flow license card keeps its skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* nit
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add scopes as part of the prisma schema
* Add MCP OAuth scope discovery and selection
* Refactor MCP scopes into configurable entries
* Refactor MCP server tool data table
* Add MCP server tool permissions
* Cache MCP tool definitions in Redis
* Auto-save MCP tool permission changes
* Avoid expensive tool fetch after updating tool permissions. Just update react query cache instead
* deduplicate some code for cleanliness
* Squash prisma migrations. Update redis cache for mcp tools to be per user, 1h time out
* update prisma migrations
* Update mcpScope to be referred to as mcpOAuthScope across the codebase
* Add documentation for scopes and permissions
* Update docs to say Ask Sourcebot
---------
Co-authored-by: Jack Minnetian <270441393+BlueBottleLatte@users.noreply.github.com>
Comment threadpackages/web/src/ee/features/chat/mcp/mcpToolSets.ts Dismissed
@brendan-kellam
brendan-kellam merged commit 72be168 into mainJun 3, 2026
11 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Jun 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@brendan-kellam@github-advanced-security@msukkari@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

v5 (#1097) - #1106

Merged
brendan-kellam merged 91 commits into
mainfrom
v5
Jun 3, 2026
Merged

v5 (#1097)#1106
brendan-kellam merged 91 commits into
mainfrom
v5

Conversation

@brendan-kellam

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitaiBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 284 files, which is 134 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6868608-c7fa-4c64-8446-2ec8c11ca1c3

📥 Commits

Reviewing files that changed from the base of the PR and between 740bcc9 and ded4282.

⛔ Files ignored due to path filters (16)
  • docs/images/connectors_account_page.png is excluded by !**/*.png
  • docs/images/connectors_edit_scopes.png is excluded by !**/*.png
  • docs/images/connectors_edit_tool_permissions.png is excluded by !**/*.png
  • docs/images/connectors_oauth_scopes.png is excluded by !**/*.png
  • docs/images/connectors_permission_request.png is excluded by !**/*.png
  • docs/images/connectors_static_registration.png is excluded by !**/*.png
  • docs/images/connectors_toggle_off.png is excluded by !**/*.png
  • docs/images/connectors_tool_permissions.png is excluded by !**/*.png
  • docs/images/setup_sourcebot_splash.png is excluded by !**/*.png
  • packages/web/public/claude_code.svg is excluded by !**/*.svg
  • packages/web/public/codex.svg is excluded by !**/*.svg
  • packages/web/public/cursor_dark.svg is excluded by !**/*.svg
  • packages/web/public/cursor_light.svg is excluded by !**/*.svg
  • packages/web/public/vscode.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_dark.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_light.svg is excluded by !**/*.svg
📒 Files selected for processing (284)
  • .env.development
  • .github/workflows/release-mcp.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docker-compose.yml
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • docs/docs/activating-a-subscription.mdx
  • docs/docs/billing.mdx
  • docs/docs/configuration/audit-logs.mdx
  • docs/docs/configuration/auth/access-settings.mdx
  • docs/docs/configuration/auth/authentication.mdx
  • docs/docs/configuration/auth/providers.mdx
  • docs/docs/configuration/auth/roles-and-permissions.mdx
  • docs/docs/configuration/config-file.mdx
  • docs/docs/configuration/declarative-config.mdx
  • docs/docs/configuration/environment-variables.mdx
  • docs/docs/configuration/idp.mdx
  • docs/docs/connections/ado-cloud.mdx
  • docs/docs/connections/ado-server.mdx
  • docs/docs/connections/bitbucket-cloud.mdx
  • docs/docs/connections/bitbucket-data-center.mdx
  • docs/docs/connections/generic-git-host.mdx
  • docs/docs/connections/gerrit.mdx
  • docs/docs/connections/gitea.mdx
  • docs/docs/connections/github.mdx
  • docs/docs/connections/gitlab.mdx
  • docs/docs/connections/indexing-your-code.mdx
  • docs/docs/connections/local-repos.mdx
  • docs/docs/deployment/docker-compose.mdx
  • docs/docs/deployment/infrastructure/architecture.mdx
  • docs/docs/deployment/sizing-guide.mdx
  • docs/docs/features/agents/agents.mdx
  • docs/docs/features/ask/ask-sourcebot.mdx
  • docs/docs/features/ask/chat-sharing.mdx
  • docs/docs/features/ask/connectors.mdx
  • docs/docs/features/mcp-server.mdx
  • docs/docs/features/permission-syncing.mdx
  • docs/docs/features/search/code-search.mdx
  • docs/docs/features/search/multi-branch-indexing.mdx
  • docs/docs/features/search/search-contexts.mdx
  • docs/docs/free-trial.mdx
  • docs/docs/license-key.mdx
  • docs/docs/misc/architecture.mdx
  • docs/docs/misc/scalability.mdx
  • docs/docs/misc/service-ping.mdx
  • docs/docs/misc/telemetry.mdx
  • docs/docs/overview.mdx
  • docs/docs/upgrade/v3-to-v4-guide.mdx
  • docs/docs/upgrade/v4-to-v5-guide.mdx
  • docs/snippets/license-key-required.mdx
  • entrypoint.sh
  • packages/backend/src/__mocks__/prisma.ts
  • packages/backend/src/api.ts
  • packages/backend/src/ee/accountPermissionSyncer.ts
  • packages/backend/src/ee/repoPermissionSyncer.ts
  • packages/backend/src/ee/syncSearchContexts.test.ts
  • packages/backend/src/ee/syncSearchContexts.ts
  • packages/backend/src/entitlements.ts
  • packages/backend/src/github.ts
  • packages/backend/src/index.ts
  • packages/backend/src/posthog.ts
  • packages/backend/src/prisma.ts
  • packages/backend/src/redis.ts
  • packages/backend/src/utils.ts
  • packages/backend/vitest.config.ts
  • packages/db/prisma/migrations/20260502000000_remove_guest_org_role/migration.sql
  • packages/db/prisma/migrations/20260509000000_add_license_table/migration.sql
  • packages/db/prisma/migrations/20260523064558_add_repo_visit_table/migration.sql
  • packages/db/prisma/migrations/20260525214409_add_changelog_table/migration.sql
  • packages/db/prisma/migrations/20260526013307_add_user_last_active_at/migration.sql
  • packages/db/prisma/migrations/20260603172622_add_mcp_connectors/migration.sql
  • packages/db/prisma/schema.prisma
  • packages/db/tools/scriptRunner.ts
  • packages/db/tools/scripts/inject-chat-data.ts
  • packages/setupWizard/README.md
  • packages/setupWizard/package.json
  • packages/setupWizard/src/azuredevops.ts
  • packages/setupWizard/src/bitbucket.ts
  • packages/setupWizard/src/genericGit.ts
  • packages/setupWizard/src/gerrit.ts
  • packages/setupWizard/src/gitea.ts
  • packages/setupWizard/src/github.ts
  • packages/setupWizard/src/gitlab.ts
  • packages/setupWizard/src/index.ts
  • packages/setupWizard/src/localRepos.ts
  • packages/setupWizard/src/models.ts
  • packages/setupWizard/src/tabCheckbox.ts
  • packages/setupWizard/src/utils.ts
  • packages/setupWizard/tsconfig.json
  • packages/shared/package.json
  • packages/shared/src/constants.ts
  • packages/shared/src/crypto.ts
  • packages/shared/src/entitlements.test.ts
  • packages/shared/src/entitlements.ts
  • packages/shared/src/env.server.test.ts
  • packages/shared/src/env.server.ts
  • packages/shared/src/index.client.ts
  • packages/shared/src/index.server.ts
  • packages/shared/src/redis.ts
  • packages/shared/src/types.ts
  • packages/shared/src/versionUtils.ts
  • packages/shared/vitest.config.ts
  • packages/web/next.config.mjs
  • packages/web/package.json
  • packages/web/src/__mocks__/prisma.ts
  • packages/web/src/actions.ts
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/page.tsx
  • packages/web/src/app/(app)/@sidebar/components/changelogEntryDialog.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/chatHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/repoVisitHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/header.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/sidebarBase.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeBadge.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeButton.tsx
  • packages/web/src/app/(app)/@sidebar/components/whatsNewSidebarButton.tsx
  • packages/web/src/app/(app)/agents/page.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/components/landingPage.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/page.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/pureCodePreviewPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/trackRepoVisit.tsx
  • packages/web/src/app/(app)/browse/[...path]/page.tsx
  • packages/web/src/app/(app)/browse/actions.ts
  • packages/web/src/app/(app)/browse/components/bottomPanel.tsx
  • packages/web/src/app/(app)/browse/components/pureFileTreePanel.tsx
  • packages/web/src/app/(app)/browse/layout.tsx
  • packages/web/src/app/(app)/browse/layoutClient.tsx
  • packages/web/src/app/(app)/chat/[id]/page.tsx
  • packages/web/src/app/(app)/chat/chatLandingPage.tsx
  • packages/web/src/app/(app)/chat/components/chatActionsDropdown.tsx
  • packages/web/src/app/(app)/chat/components/chatSidePanel.tsx
  • packages/web/src/app/(app)/chat/components/landingPageChatBox.tsx
  • packages/web/src/app/(app)/chat/components/mcpOAuthStatusToast.tsx
  • packages/web/src/app/(app)/chat/components/tutorialDialog.tsx
  • packages/web/src/app/(app)/chat/layout.tsx
  • packages/web/src/app/(app)/chat/page.tsx
  • packages/web/src/app/(app)/chats/chatsPage.tsx
  • packages/web/src/app/(app)/chats/page.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenu.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenuGroup.tsx
  • packages/web/src/app/(app)/components/banners/actions.ts
  • packages/web/src/app/(app)/components/banners/bannerHeightObserver.tsx
  • packages/web/src/app/(app)/components/banners/bannerResolver.test.ts
  • packages/web/src/app/(app)/components/banners/bannerResolver.tsx
  • packages/web/src/app/(app)/components/banners/bannerShell.tsx
  • packages/web/src/app/(app)/components/banners/bannerSlot.tsx
  • packages/web/src/app/(app)/components/banners/invoicePastDueBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiredBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiryHeadsUpBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseReboundElsewhereBanner.tsx
  • packages/web/src/app/(app)/components/banners/openBillingPortalButton.tsx
  • packages/web/src/app/(app)/components/banners/permissionSyncBanner.tsx
  • packages/web/src/app/(app)/components/banners/refreshLicenseButton.tsx
  • packages/web/src/app/(app)/components/banners/servicePingFailedBanner.tsx
  • packages/web/src/app/(app)/components/banners/trialBanner.tsx
  • packages/web/src/app/(app)/components/banners/types.ts
  • packages/web/src/app/(app)/components/banners/upgradeAvailableBanner.tsx
  • packages/web/src/app/(app)/components/meControlDropdownMenu.tsx
  • packages/web/src/app/(app)/components/navigationMenu/index.tsx
  • packages/web/src/app/(app)/components/navigationMenu/navigationItems.tsx
  • packages/web/src/app/(app)/components/navigationMenu/progressIndicator.tsx
  • packages/web/src/app/(app)/components/notFound.tsx
  • packages/web/src/app/(app)/components/pageNotFound.tsx
  • packages/web/src/app/(app)/components/searchModeSelector.tsx
  • packages/web/src/app/(app)/components/topBar.tsx
  • packages/web/src/app/(app)/components/upgradeToast.tsx
  • packages/web/src/app/(app)/components/whatsNewIndicator.tsx
  • packages/web/src/app/(app)/layout.tsx
  • packages/web/src/app/(app)/page.tsx
  • packages/web/src/app/(app)/repos/[id]/page.tsx
  • packages/web/src/app/(app)/repos/layout.tsx
  • packages/web/src/app/(app)/search/components/searchLandingPage.tsx
  • packages/web/src/app/(app)/search/components/searchResultsPage.tsx
  • packages/web/src/app/(app)/search/page.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/accountAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/analytics/analyticsEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/analytics/page.tsx
  • packages/web/src/app/(app)/settings/apiKeys/apiKeysPage.tsx
  • packages/web/src/app/(app)/settings/apiKeys/columns.tsx
  • packages/web/src/app/(app)/settings/apiKeys/page.tsx
  • packages/web/src/app/(app)/settings/components/settingsCard.tsx
  • packages/web/src/app/(app)/settings/components/sidebar-nav.tsx
  • packages/web/src/app/(app)/settings/connections/page.tsx
  • packages/web/src/app/(app)/settings/general/generalPage.tsx
  • packages/web/src/app/(app)/settings/general/page.tsx
  • packages/web/src/app/(app)/settings/layout.tsx
  • packages/web/src/app/(app)/settings/license/activationCodeCard.tsx
  • packages/web/src/app/(app)/settings/license/offlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/licenseInactiveBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/onlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/planActionsMenu.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/removeActivationCodeDialog.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/trialMissingPaymentMethodBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/upcomingYearlyRenewalBanner.tsx
  • packages/web/src/app/(app)/settings/license/page.tsx
  • packages/web/src/app/(app)/settings/license/recentInvoicesCard.tsx
  • packages/web/src/app/(app)/settings/license/types.ts
  • packages/web/src/app/(app)/settings/license/yearlyTermSeatsUsageCard.tsx
  • packages/web/src/app/(app)/settings/linked-accounts/page.tsx
  • packages/web/src/app/(app)/settings/mcp/clientCard.tsx
  • packages/web/src/app/(app)/settings/mcp/clients.ts
  • packages/web/src/app/(app)/settings/mcp/mcpEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/mcp/mcpPage.tsx
  • packages/web/src/app/(app)/settings/mcp/page.tsx
  • packages/web/src/app/(app)/settings/members/components/inviteMemberCard.tsx
  • packages/web/src/app/(app)/settings/members/components/invitesList.tsx
  • packages/web/src/app/(app)/settings/members/components/membersList.tsx
  • packages/web/src/app/(app)/settings/members/components/requestsList.tsx
  • packages/web/src/app/(app)/settings/members/page.tsx
  • packages/web/src/app/(app)/settings/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/mcpToolPermissionsPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/prefabConnectorPopover.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentUnavailableMessage.tsx
  • packages/web/src/app/api/(client)/client.ts
  • packages/web/src/app/api/(server)/changelog/entries/route.ts
  • packages/web/src/app/api/(server)/chat/blocking/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-authorization-server/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-protected-resource/[...path]/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/types.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.ts
  • packages/web/src/app/api/(server)/ee/audit/route.ts
  • packages/web/src/app/api/(server)/ee/chat/[chatId]/searchMembers/route.ts
  • packages/web/src/app/api/(server)/ee/chat/route.ts
  • packages/web/src/app/api/(server)/ee/chats/route.ts
  • packages/web/src/app/api/(server)/ee/chats/types.ts
  • packages/web/src/app/api/(server)/ee/mcp/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/register/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/revoke/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/token/route.ts
  • packages/web/src/app/api/(server)/ee/permissionSyncStatus/api.ts
  • packages/web/src/app/api/(server)/ee/user/route.ts
  • packages/web/src/app/api/(server)/ee/users/route.ts
  • packages/web/src/app/api/(server)/offers/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/components/anonymousAccessToggle.tsx
  • packages/web/src/app/components/authMethodSelector.tsx
  • packages/web/src/app/components/organizationAccessSettings.tsx
  • packages/web/src/app/globals.css
  • packages/web/src/app/invite/actions.ts
  • packages/web/src/app/invite/page.tsx
  • packages/web/src/app/layout.tsx
  • packages/web/src/app/login/components/loginForm.tsx
  • packages/web/src/app/login/page.tsx
  • packages/web/src/app/not-found.tsx
  • packages/web/src/app/oauth/authorize/page.tsx
  • packages/web/src/app/onboard/components/alreadyLicensedStep.tsx
  • packages/web/src/app/onboard/components/completeOnboardingButton.tsx
  • packages/web/src/app/onboard/components/trialStep.tsx
  • packages/web/src/app/onboard/page.tsx
  • packages/web/src/app/posthogProvider.tsx
  • packages/web/src/app/progressBarProvider.tsx
  • packages/web/src/app/signup/page.tsx
  • packages/web/src/auth.ts
  • packages/web/src/components/ui/alert.tsx
  • packages/web/src/components/ui/data-table.tsx
  • packages/web/src/components/ui/dialog.tsx
  • packages/web/src/components/ui/sidebar.tsx

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v5

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 and usage tips.

@github-actions

github-actionsBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

License Audit

⚠️Status: PASS

MetricCount
Total packages2133
Resolved (non-standard)11
Unresolved0
Strong copyleft0
Weak copyleft39

Weak Copyleft Packages (informational)

PackageVersionLicense
@img/sharp-libvips-darwin-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.0.5LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-ppc641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-riscv641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.2.4LGPL-3.0-or-later
@img/sharp-wasm320.33.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-wasm320.34.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-win32-arm640.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.34.5Apache-2.0 AND LGPL-3.0-or-later
axe-core4.10.3MPL-2.0
dompurify3.4.0(MPL-2.0 OR Apache-2.0)
lightningcss1.32.0MPL-2.0
lightningcss-android-arm641.32.0MPL-2.0
lightningcss-darwin-arm641.32.0MPL-2.0
lightningcss-darwin-x641.32.0MPL-2.0
lightningcss-freebsd-x641.32.0MPL-2.0
lightningcss-linux-arm-gnueabihf1.32.0MPL-2.0
lightningcss-linux-arm64-gnu1.32.0MPL-2.0
lightningcss-linux-arm64-musl1.32.0MPL-2.0
lightningcss-linux-x64-gnu1.32.0MPL-2.0
lightningcss-linux-x64-musl1.32.0MPL-2.0
lightningcss-win32-arm64-msvc1.32.0MPL-2.0
lightningcss-win32-x64-msvc1.32.0MPL-2.0
Resolved Packages (11)
PackageVersionOriginalResolvedSource
@react-grab/cli0.1.23UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/cli0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/mcp0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
codemirror-lang-elixir4.0.0UNKNOWNApache-2.0GitHub repo (livebook-dev/codemirror-lang-elixir LICENSE)
element-source0.0.3UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
lezer-elixir1.1.2UNKNOWNApache-2.0GitHub repo (livebook-dev/lezer-elixir LICENSE)
map-stream0.1.0UNKNOWNMITGitHub repo (dominictarr/map-stream LICENCE)
memorystream0.3.1UNKNOWNMITextracted from object (npm licenses[0].type field)
pause-stream0.0.11["MIT","Apache2"]MIT OR Apache-2.0extracted from object array + GitHub repo (dominictarr/pause-stream LICENSE, dual licensed)
posthog-js1.369.0SEE LICENSE IN LICENSEApache-2.0GitHub repo (PostHog/posthog-js LICENSE file)
valid-url1.0.9UNKNOWNMITGitHub repo (ogt/valid-url LICENSE file)

* wip
* remove unused hook
* Add collapse sidebar button
* refactor settings into sidebar as a override context
* chat thread styling
* notification dot
* improved rendering
* fix light mode
* imporved api key page
* add chats page
* not found nit
* guest sidebar footer
* add tooltip for sidebar collapse button
* nit
* onboard nit
* fix permission sync banner
* what's new
* profile settings
* home view settings
* general settings
* remove shadow
* changelog
* feedback
brendan-kellamand others added 5 commits April 24, 2026 08:53
* wip on service ping
* add concept of License to the database and wire it into the enitlements system
* wip on e2e checkout flow
* basic card to display current plan
* store activation code at rest
* add manage subscription button
* wip on lighthouse client
* wip on lighthouse client
* remove the concept of a plan and just rely on entitlements at the app layer
* fix sidebar
* add temporary refresh license button
* clarified org availability design
* entitlements naming nit
* remove concept of a GUEST user
* remove anonymous-access entitlement
* change offline license to support optional seats
* handle license validation for all paths
* refactor some actions
* add explicit service ping calls to user <> organization update paths
* fix refresh bug with sidebar
* add billing details card
* fix invite redemption when user already a member
User was hitting a unique constraint on UserToOrg(orgId, userId) when
redeeming an invite, because onCreateUser auto-joins new signups in
self-serve mode and redeemInvite then tried to create the same row.
Make the insert idempotent via upsert so the downstream AccountRequest
and invite cleanup still runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wip on license card
* further wip on license card / activaction code card
* add recent invoices UI
* nit on seats terminology
* feat(web): surface subscription cancellation on license card
Adds cancelAt to the License model and the lighthouse ping schema, and
renders "Cancels on <date>" on the current plan card when there's no
upcoming renewal. Prefers "Next renewal" when Stripe still has an
upcoming invoice — so subscriptions scheduled to end after the next
billing cycle keep showing the renewal row.
Also makes nextRenewalAt / nextRenewalAmount nullable to match the
lighthouse response, and guards new Date() against null in servicePing.
Adds a CLAUDE.md under the lighthouse feature folder pointing at the
service repo so the two schemas stay in lockstep.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): add offline license card to settings
Renders a dedicated card for offline (SOURCEBOT_EE_LICENSE_KEY) licenses
showing the license id, seat cap, and expiry. When an offline license
is present, the page skips the online license lookup entirely to mirror
the precedence in entitlements.ts.
Also adds a header row with a mailto link to support and an "All plans"
shortcut to the public pricing page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): banner system for license + permission sync
Introduces a priority-ordered, single-slot banner system under
(app)/components/banners/. A server-side resolver picks the highest-priority
banner that matches the current context (role, license state, offline
license, permission-sync status) and renders it through a shared BannerShell
that handles per-day dismissal via cookies.
Banners included:
- License expired (everyone, non-dismissible, role-aware copy)
- License expiry heads-up (owner, dismissible, 14d window, uses
formatDistance for relative copy)
- Invoice past due (owner, non-dismissible)
- Permission sync pending (everyone, non-dismissible, migrated from the
prior standalone component through BannerShell)
Precedence mirrors entitlements.ts: offline license is the sole source
of truth when present, so online billing state is ignored.
Also splits getValidOfflineLicense into a decode-only path so
getOfflineLicenseMetadata can surface expired licenses to the UI.
Includes bannerResolver.test.ts covering priority, audience filtering,
dismissal filtering, offline/online expiry rules, and permission sync.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* handle failure case where lighthouse cannot be reached
* chore(web): mirror lighthouse trial + checkout schema changes
Adds trialEnd to the ping response schema and installId / requestTrial
to the checkout request schema so types match the lighthouse service.
createCheckoutSession passes the instance's SOURCEBOT_INSTALL_ID and
defaults requestTrial to false (the existing "upgrade" button is not
a trial path).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): trial banner + plumbing
Adds a trial banner to the owner-facing banner stack and the
surrounding plumbing:
- Schema: License.trialEnd, License.hasPaymentMethod, Org.trialUsedAt
(durable flag that survives license deactivation). Two migrations.
- servicePing persists trialEnd / hasPaymentMethod and flips
Org.trialUsedAt on first trial sync.
- Trial banner (owner, dismissible, priority 25): title uses
formatDistance ("Your trial ends in 10 days"); copy + action branch
on hasPaymentMethod. With-PM variant links to /settings/license;
no-PM variant opens the Stripe portal via a new
OpenBillingPortalButton (LoadingButton + createPortalSession).
- currentPlanCard gains a "Trial ends on" fallback column for the
trial-without-PM case (where nextRenewalAt is null).
- activationCodeCard accepts isTrialEligible and flips its checkout
button from "Purchase a license" to "Start a free trial" when the
org hasn't trialed yet, passing requestTrial through to the checkout
endpoint.
- Types mirror the new lighthouse fields (trialEnd, hasPaymentMethod)
and the checkout request additions (installId, requestTrial).
Side-trips to Stripe (portal, checkout) now append ?refresh=true so
the license resyncs on return; trial-checkout also appends
?trial_used=true so Org.trialUsedAt flips immediately (closes the UX
gap between checkout completion and activation-code entry). page.tsx
handles both params, preserves any other query params, and redirects
to a clean URL.
Also: fetchWithRetry now only retries 5xx, 408, and 429 — 4xx errors
(e.g. TRIAL_ALREADY_USED at 409) propagate immediately instead of
retrying pointlessly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add badges to invoice cards
* add basic billing docs
* refactor(lighthouse): throw ServiceErrorException on ping failure
syncWithLighthouse previously swallowed ping errors with a log and early
return, which masked real problems. Flip the model: on a lighthouse
ServiceError response, throw ServiceErrorException. The sew() middleware
already knows how to marshal that into an API response for user-initiated
paths.
Callers fall into two camps:
- Propagate (user-initiated): activateLicense and refreshLicense. The
existing try/catch in activateLicense now correctly rolls back the
license row when lighthouse rejects the activation code; refreshLicense
lets the throw propagate so the UI surfaces a toast.
- Swallow explicitly (background / side-effect): license page load, the
24h cron, user-approval, and signup paths all wrap with
`.catch(() => { /* ignore */ })`. These happen as a side effect of
other successful operations; a ping failure shouldn't block them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feedback
* fix tests
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@brendan-kellam
brendan-kellam marked this pull request as ready for review May 21, 2026 21:34
msukkariand others added 19 commits May 30, 2026 12:38
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): prevent top banner from pushing the chat prompt off-screen
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brendan Kellam <brendan@sourcebot.dev>
The code preview panel now persists the scroll position per
file/revision to sessionStorage and restores it on mount. Restoration
is skipped when a highlight_range query param is present so the existing
highlight scroll-into-view takes precedence.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ers (#1262)
Switches the safe.directory "*" config from --global (only written to
/root/.gitconfig) to --system (/etc/gitconfig) so it applies regardless
of which user runs git. The image intentionally sets no USER directive
and can be run as an arbitrary --user, where the global config was never
read, leaving the "dubious ownership" error unfixed.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)
* chore: remove embedded Postgres and Redis from the Docker image
As of v5, Sourcebot no longer ships an embedded Postgres or Redis.
External instances are now required via DATABASE_URL and REDIS_URL.
- Dockerfile: drop postgresql16/redis packages, DATABASE_DATA_DIR/
REDIS_DATA_DIR env, postgres/redis users, and /run/postgresql setup
- entrypoint.sh: hard-fail with guidance when DATABASE_URL/REDIS_URL are
unset; remove embedded init/startup blocks
- supervisord.conf: remove the redis program
- docs: mark DATABASE_URL/REDIS_URL required, drop data-dir vars, document
the breaking change and data migration in the v4-to-v5 guide
- CHANGELOG: note the breaking change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: point CHANGELOG entry at PR #1264
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* changelog
* docs: expand v4-to-v5 guide; require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY
- entrypoint.sh: require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY explicitly
(no auto-generation, no plaintext file loading); hard-fail with migration
guidance and warn if the legacy plaintext files linger
- v4-to-v5 guide: document the secrets, role-management, and external
Postgres/Redis breaking changes with per-item migration steps
- environment-variables: mark both secrets required
- roles-and-permissions: add default-role-by-plan table
- CHANGELOG: update breaking-change entries
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs nit
* changelog nit
* final nits
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
brendan-kellamand others added 2 commits June 2, 2026 20:29
…ces (#1267)
* feat(web): graceful error and loading states for billing/offers surfaces
Replace silent `null` returns with recoverable error states when the offers
fetch fails, across onboarding, the upsell dialog/panel, and feature gates:
- Onboarding trial step: reframe the error copy and add a "View pricing" link.
- UpsellDialog / UpsellPanel: shared UpsellLoadError fallback with a retry,
Status page link, and role-aware copy (owners get an outbound-access hint to
deployments.sourcebot.dev + Learn more; members are routed to their admin).
- UpsellPanel: add a `loadingVariant` prop so full-area feature gates render a
centered spinner while the in-flow license card keeps its skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* nit
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add scopes as part of the prisma schema
* Add MCP OAuth scope discovery and selection
* Refactor MCP scopes into configurable entries
* Refactor MCP server tool data table
* Add MCP server tool permissions
* Cache MCP tool definitions in Redis
* Auto-save MCP tool permission changes
* Avoid expensive tool fetch after updating tool permissions. Just update react query cache instead
* deduplicate some code for cleanliness
* Squash prisma migrations. Update redis cache for mcp tools to be per user, 1h time out
* update prisma migrations
* Update mcpScope to be referred to as mcpOAuthScope across the codebase
* Add documentation for scopes and permissions
* Update docs to say Ask Sourcebot
---------
Co-authored-by: Jack Minnetian <270441393+BlueBottleLatte@users.noreply.github.com>
Comment threadpackages/web/src/ee/features/chat/mcp/mcpToolSets.ts Dismissed
@brendan-kellam
brendan-kellam merged commit 72be168 into mainJun 3, 2026
11 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Jun 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@brendan-kellam@github-advanced-security@msukkari@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

v5 (#1097) - #1106

Merged
brendan-kellam merged 91 commits into
mainfrom
v5
Jun 3, 2026
Merged

v5 (#1097)#1106
brendan-kellam merged 91 commits into
mainfrom
v5

Conversation

@brendan-kellam

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitaiBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 284 files, which is 134 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6868608-c7fa-4c64-8446-2ec8c11ca1c3

📥 Commits

Reviewing files that changed from the base of the PR and between 740bcc9 and ded4282.

⛔ Files ignored due to path filters (16)
  • docs/images/connectors_account_page.png is excluded by !**/*.png
  • docs/images/connectors_edit_scopes.png is excluded by !**/*.png
  • docs/images/connectors_edit_tool_permissions.png is excluded by !**/*.png
  • docs/images/connectors_oauth_scopes.png is excluded by !**/*.png
  • docs/images/connectors_permission_request.png is excluded by !**/*.png
  • docs/images/connectors_static_registration.png is excluded by !**/*.png
  • docs/images/connectors_toggle_off.png is excluded by !**/*.png
  • docs/images/connectors_tool_permissions.png is excluded by !**/*.png
  • docs/images/setup_sourcebot_splash.png is excluded by !**/*.png
  • packages/web/public/claude_code.svg is excluded by !**/*.svg
  • packages/web/public/codex.svg is excluded by !**/*.svg
  • packages/web/public/cursor_dark.svg is excluded by !**/*.svg
  • packages/web/public/cursor_light.svg is excluded by !**/*.svg
  • packages/web/public/vscode.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_dark.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_light.svg is excluded by !**/*.svg
📒 Files selected for processing (284)
  • .env.development
  • .github/workflows/release-mcp.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docker-compose.yml
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • docs/docs/activating-a-subscription.mdx
  • docs/docs/billing.mdx
  • docs/docs/configuration/audit-logs.mdx
  • docs/docs/configuration/auth/access-settings.mdx
  • docs/docs/configuration/auth/authentication.mdx
  • docs/docs/configuration/auth/providers.mdx
  • docs/docs/configuration/auth/roles-and-permissions.mdx
  • docs/docs/configuration/config-file.mdx
  • docs/docs/configuration/declarative-config.mdx
  • docs/docs/configuration/environment-variables.mdx
  • docs/docs/configuration/idp.mdx
  • docs/docs/connections/ado-cloud.mdx
  • docs/docs/connections/ado-server.mdx
  • docs/docs/connections/bitbucket-cloud.mdx
  • docs/docs/connections/bitbucket-data-center.mdx
  • docs/docs/connections/generic-git-host.mdx
  • docs/docs/connections/gerrit.mdx
  • docs/docs/connections/gitea.mdx
  • docs/docs/connections/github.mdx
  • docs/docs/connections/gitlab.mdx
  • docs/docs/connections/indexing-your-code.mdx
  • docs/docs/connections/local-repos.mdx
  • docs/docs/deployment/docker-compose.mdx
  • docs/docs/deployment/infrastructure/architecture.mdx
  • docs/docs/deployment/sizing-guide.mdx
  • docs/docs/features/agents/agents.mdx
  • docs/docs/features/ask/ask-sourcebot.mdx
  • docs/docs/features/ask/chat-sharing.mdx
  • docs/docs/features/ask/connectors.mdx
  • docs/docs/features/mcp-server.mdx
  • docs/docs/features/permission-syncing.mdx
  • docs/docs/features/search/code-search.mdx
  • docs/docs/features/search/multi-branch-indexing.mdx
  • docs/docs/features/search/search-contexts.mdx
  • docs/docs/free-trial.mdx
  • docs/docs/license-key.mdx
  • docs/docs/misc/architecture.mdx
  • docs/docs/misc/scalability.mdx
  • docs/docs/misc/service-ping.mdx
  • docs/docs/misc/telemetry.mdx
  • docs/docs/overview.mdx
  • docs/docs/upgrade/v3-to-v4-guide.mdx
  • docs/docs/upgrade/v4-to-v5-guide.mdx
  • docs/snippets/license-key-required.mdx
  • entrypoint.sh
  • packages/backend/src/__mocks__/prisma.ts
  • packages/backend/src/api.ts
  • packages/backend/src/ee/accountPermissionSyncer.ts
  • packages/backend/src/ee/repoPermissionSyncer.ts
  • packages/backend/src/ee/syncSearchContexts.test.ts
  • packages/backend/src/ee/syncSearchContexts.ts
  • packages/backend/src/entitlements.ts
  • packages/backend/src/github.ts
  • packages/backend/src/index.ts
  • packages/backend/src/posthog.ts
  • packages/backend/src/prisma.ts
  • packages/backend/src/redis.ts
  • packages/backend/src/utils.ts
  • packages/backend/vitest.config.ts
  • packages/db/prisma/migrations/20260502000000_remove_guest_org_role/migration.sql
  • packages/db/prisma/migrations/20260509000000_add_license_table/migration.sql
  • packages/db/prisma/migrations/20260523064558_add_repo_visit_table/migration.sql
  • packages/db/prisma/migrations/20260525214409_add_changelog_table/migration.sql
  • packages/db/prisma/migrations/20260526013307_add_user_last_active_at/migration.sql
  • packages/db/prisma/migrations/20260603172622_add_mcp_connectors/migration.sql
  • packages/db/prisma/schema.prisma
  • packages/db/tools/scriptRunner.ts
  • packages/db/tools/scripts/inject-chat-data.ts
  • packages/setupWizard/README.md
  • packages/setupWizard/package.json
  • packages/setupWizard/src/azuredevops.ts
  • packages/setupWizard/src/bitbucket.ts
  • packages/setupWizard/src/genericGit.ts
  • packages/setupWizard/src/gerrit.ts
  • packages/setupWizard/src/gitea.ts
  • packages/setupWizard/src/github.ts
  • packages/setupWizard/src/gitlab.ts
  • packages/setupWizard/src/index.ts
  • packages/setupWizard/src/localRepos.ts
  • packages/setupWizard/src/models.ts
  • packages/setupWizard/src/tabCheckbox.ts
  • packages/setupWizard/src/utils.ts
  • packages/setupWizard/tsconfig.json
  • packages/shared/package.json
  • packages/shared/src/constants.ts
  • packages/shared/src/crypto.ts
  • packages/shared/src/entitlements.test.ts
  • packages/shared/src/entitlements.ts
  • packages/shared/src/env.server.test.ts
  • packages/shared/src/env.server.ts
  • packages/shared/src/index.client.ts
  • packages/shared/src/index.server.ts
  • packages/shared/src/redis.ts
  • packages/shared/src/types.ts
  • packages/shared/src/versionUtils.ts
  • packages/shared/vitest.config.ts
  • packages/web/next.config.mjs
  • packages/web/package.json
  • packages/web/src/__mocks__/prisma.ts
  • packages/web/src/actions.ts
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/page.tsx
  • packages/web/src/app/(app)/@sidebar/components/changelogEntryDialog.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/chatHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/repoVisitHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/header.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/sidebarBase.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeBadge.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeButton.tsx
  • packages/web/src/app/(app)/@sidebar/components/whatsNewSidebarButton.tsx
  • packages/web/src/app/(app)/agents/page.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/components/landingPage.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/page.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/pureCodePreviewPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/trackRepoVisit.tsx
  • packages/web/src/app/(app)/browse/[...path]/page.tsx
  • packages/web/src/app/(app)/browse/actions.ts
  • packages/web/src/app/(app)/browse/components/bottomPanel.tsx
  • packages/web/src/app/(app)/browse/components/pureFileTreePanel.tsx
  • packages/web/src/app/(app)/browse/layout.tsx
  • packages/web/src/app/(app)/browse/layoutClient.tsx
  • packages/web/src/app/(app)/chat/[id]/page.tsx
  • packages/web/src/app/(app)/chat/chatLandingPage.tsx
  • packages/web/src/app/(app)/chat/components/chatActionsDropdown.tsx
  • packages/web/src/app/(app)/chat/components/chatSidePanel.tsx
  • packages/web/src/app/(app)/chat/components/landingPageChatBox.tsx
  • packages/web/src/app/(app)/chat/components/mcpOAuthStatusToast.tsx
  • packages/web/src/app/(app)/chat/components/tutorialDialog.tsx
  • packages/web/src/app/(app)/chat/layout.tsx
  • packages/web/src/app/(app)/chat/page.tsx
  • packages/web/src/app/(app)/chats/chatsPage.tsx
  • packages/web/src/app/(app)/chats/page.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenu.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenuGroup.tsx
  • packages/web/src/app/(app)/components/banners/actions.ts
  • packages/web/src/app/(app)/components/banners/bannerHeightObserver.tsx
  • packages/web/src/app/(app)/components/banners/bannerResolver.test.ts
  • packages/web/src/app/(app)/components/banners/bannerResolver.tsx
  • packages/web/src/app/(app)/components/banners/bannerShell.tsx
  • packages/web/src/app/(app)/components/banners/bannerSlot.tsx
  • packages/web/src/app/(app)/components/banners/invoicePastDueBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiredBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiryHeadsUpBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseReboundElsewhereBanner.tsx
  • packages/web/src/app/(app)/components/banners/openBillingPortalButton.tsx
  • packages/web/src/app/(app)/components/banners/permissionSyncBanner.tsx
  • packages/web/src/app/(app)/components/banners/refreshLicenseButton.tsx
  • packages/web/src/app/(app)/components/banners/servicePingFailedBanner.tsx
  • packages/web/src/app/(app)/components/banners/trialBanner.tsx
  • packages/web/src/app/(app)/components/banners/types.ts
  • packages/web/src/app/(app)/components/banners/upgradeAvailableBanner.tsx
  • packages/web/src/app/(app)/components/meControlDropdownMenu.tsx
  • packages/web/src/app/(app)/components/navigationMenu/index.tsx
  • packages/web/src/app/(app)/components/navigationMenu/navigationItems.tsx
  • packages/web/src/app/(app)/components/navigationMenu/progressIndicator.tsx
  • packages/web/src/app/(app)/components/notFound.tsx
  • packages/web/src/app/(app)/components/pageNotFound.tsx
  • packages/web/src/app/(app)/components/searchModeSelector.tsx
  • packages/web/src/app/(app)/components/topBar.tsx
  • packages/web/src/app/(app)/components/upgradeToast.tsx
  • packages/web/src/app/(app)/components/whatsNewIndicator.tsx
  • packages/web/src/app/(app)/layout.tsx
  • packages/web/src/app/(app)/page.tsx
  • packages/web/src/app/(app)/repos/[id]/page.tsx
  • packages/web/src/app/(app)/repos/layout.tsx
  • packages/web/src/app/(app)/search/components/searchLandingPage.tsx
  • packages/web/src/app/(app)/search/components/searchResultsPage.tsx
  • packages/web/src/app/(app)/search/page.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/accountAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/analytics/analyticsEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/analytics/page.tsx
  • packages/web/src/app/(app)/settings/apiKeys/apiKeysPage.tsx
  • packages/web/src/app/(app)/settings/apiKeys/columns.tsx
  • packages/web/src/app/(app)/settings/apiKeys/page.tsx
  • packages/web/src/app/(app)/settings/components/settingsCard.tsx
  • packages/web/src/app/(app)/settings/components/sidebar-nav.tsx
  • packages/web/src/app/(app)/settings/connections/page.tsx
  • packages/web/src/app/(app)/settings/general/generalPage.tsx
  • packages/web/src/app/(app)/settings/general/page.tsx
  • packages/web/src/app/(app)/settings/layout.tsx
  • packages/web/src/app/(app)/settings/license/activationCodeCard.tsx
  • packages/web/src/app/(app)/settings/license/offlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/licenseInactiveBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/onlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/planActionsMenu.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/removeActivationCodeDialog.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/trialMissingPaymentMethodBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/upcomingYearlyRenewalBanner.tsx
  • packages/web/src/app/(app)/settings/license/page.tsx
  • packages/web/src/app/(app)/settings/license/recentInvoicesCard.tsx
  • packages/web/src/app/(app)/settings/license/types.ts
  • packages/web/src/app/(app)/settings/license/yearlyTermSeatsUsageCard.tsx
  • packages/web/src/app/(app)/settings/linked-accounts/page.tsx
  • packages/web/src/app/(app)/settings/mcp/clientCard.tsx
  • packages/web/src/app/(app)/settings/mcp/clients.ts
  • packages/web/src/app/(app)/settings/mcp/mcpEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/mcp/mcpPage.tsx
  • packages/web/src/app/(app)/settings/mcp/page.tsx
  • packages/web/src/app/(app)/settings/members/components/inviteMemberCard.tsx
  • packages/web/src/app/(app)/settings/members/components/invitesList.tsx
  • packages/web/src/app/(app)/settings/members/components/membersList.tsx
  • packages/web/src/app/(app)/settings/members/components/requestsList.tsx
  • packages/web/src/app/(app)/settings/members/page.tsx
  • packages/web/src/app/(app)/settings/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/mcpToolPermissionsPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/prefabConnectorPopover.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentUnavailableMessage.tsx
  • packages/web/src/app/api/(client)/client.ts
  • packages/web/src/app/api/(server)/changelog/entries/route.ts
  • packages/web/src/app/api/(server)/chat/blocking/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-authorization-server/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-protected-resource/[...path]/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/types.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.ts
  • packages/web/src/app/api/(server)/ee/audit/route.ts
  • packages/web/src/app/api/(server)/ee/chat/[chatId]/searchMembers/route.ts
  • packages/web/src/app/api/(server)/ee/chat/route.ts
  • packages/web/src/app/api/(server)/ee/chats/route.ts
  • packages/web/src/app/api/(server)/ee/chats/types.ts
  • packages/web/src/app/api/(server)/ee/mcp/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/register/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/revoke/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/token/route.ts
  • packages/web/src/app/api/(server)/ee/permissionSyncStatus/api.ts
  • packages/web/src/app/api/(server)/ee/user/route.ts
  • packages/web/src/app/api/(server)/ee/users/route.ts
  • packages/web/src/app/api/(server)/offers/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/components/anonymousAccessToggle.tsx
  • packages/web/src/app/components/authMethodSelector.tsx
  • packages/web/src/app/components/organizationAccessSettings.tsx
  • packages/web/src/app/globals.css
  • packages/web/src/app/invite/actions.ts
  • packages/web/src/app/invite/page.tsx
  • packages/web/src/app/layout.tsx
  • packages/web/src/app/login/components/loginForm.tsx
  • packages/web/src/app/login/page.tsx
  • packages/web/src/app/not-found.tsx
  • packages/web/src/app/oauth/authorize/page.tsx
  • packages/web/src/app/onboard/components/alreadyLicensedStep.tsx
  • packages/web/src/app/onboard/components/completeOnboardingButton.tsx
  • packages/web/src/app/onboard/components/trialStep.tsx
  • packages/web/src/app/onboard/page.tsx
  • packages/web/src/app/posthogProvider.tsx
  • packages/web/src/app/progressBarProvider.tsx
  • packages/web/src/app/signup/page.tsx
  • packages/web/src/auth.ts
  • packages/web/src/components/ui/alert.tsx
  • packages/web/src/components/ui/data-table.tsx
  • packages/web/src/components/ui/dialog.tsx
  • packages/web/src/components/ui/sidebar.tsx

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v5

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 and usage tips.

@github-actions

github-actionsBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

License Audit

⚠️Status: PASS

MetricCount
Total packages2133
Resolved (non-standard)11
Unresolved0
Strong copyleft0
Weak copyleft39

Weak Copyleft Packages (informational)

PackageVersionLicense
@img/sharp-libvips-darwin-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.0.5LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-ppc641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-riscv641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.2.4LGPL-3.0-or-later
@img/sharp-wasm320.33.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-wasm320.34.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-win32-arm640.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.34.5Apache-2.0 AND LGPL-3.0-or-later
axe-core4.10.3MPL-2.0
dompurify3.4.0(MPL-2.0 OR Apache-2.0)
lightningcss1.32.0MPL-2.0
lightningcss-android-arm641.32.0MPL-2.0
lightningcss-darwin-arm641.32.0MPL-2.0
lightningcss-darwin-x641.32.0MPL-2.0
lightningcss-freebsd-x641.32.0MPL-2.0
lightningcss-linux-arm-gnueabihf1.32.0MPL-2.0
lightningcss-linux-arm64-gnu1.32.0MPL-2.0
lightningcss-linux-arm64-musl1.32.0MPL-2.0
lightningcss-linux-x64-gnu1.32.0MPL-2.0
lightningcss-linux-x64-musl1.32.0MPL-2.0
lightningcss-win32-arm64-msvc1.32.0MPL-2.0
lightningcss-win32-x64-msvc1.32.0MPL-2.0
Resolved Packages (11)
PackageVersionOriginalResolvedSource
@react-grab/cli0.1.23UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/cli0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/mcp0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
codemirror-lang-elixir4.0.0UNKNOWNApache-2.0GitHub repo (livebook-dev/codemirror-lang-elixir LICENSE)
element-source0.0.3UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
lezer-elixir1.1.2UNKNOWNApache-2.0GitHub repo (livebook-dev/lezer-elixir LICENSE)
map-stream0.1.0UNKNOWNMITGitHub repo (dominictarr/map-stream LICENCE)
memorystream0.3.1UNKNOWNMITextracted from object (npm licenses[0].type field)
pause-stream0.0.11["MIT","Apache2"]MIT OR Apache-2.0extracted from object array + GitHub repo (dominictarr/pause-stream LICENSE, dual licensed)
posthog-js1.369.0SEE LICENSE IN LICENSEApache-2.0GitHub repo (PostHog/posthog-js LICENSE file)
valid-url1.0.9UNKNOWNMITGitHub repo (ogt/valid-url LICENSE file)

* wip
* remove unused hook
* Add collapse sidebar button
* refactor settings into sidebar as a override context
* chat thread styling
* notification dot
* improved rendering
* fix light mode
* imporved api key page
* add chats page
* not found nit
* guest sidebar footer
* add tooltip for sidebar collapse button
* nit
* onboard nit
* fix permission sync banner
* what's new
* profile settings
* home view settings
* general settings
* remove shadow
* changelog
* feedback
brendan-kellamand others added 5 commits April 24, 2026 08:53
* wip on service ping
* add concept of License to the database and wire it into the enitlements system
* wip on e2e checkout flow
* basic card to display current plan
* store activation code at rest
* add manage subscription button
* wip on lighthouse client
* wip on lighthouse client
* remove the concept of a plan and just rely on entitlements at the app layer
* fix sidebar
* add temporary refresh license button
* clarified org availability design
* entitlements naming nit
* remove concept of a GUEST user
* remove anonymous-access entitlement
* change offline license to support optional seats
* handle license validation for all paths
* refactor some actions
* add explicit service ping calls to user <> organization update paths
* fix refresh bug with sidebar
* add billing details card
* fix invite redemption when user already a member
User was hitting a unique constraint on UserToOrg(orgId, userId) when
redeeming an invite, because onCreateUser auto-joins new signups in
self-serve mode and redeemInvite then tried to create the same row.
Make the insert idempotent via upsert so the downstream AccountRequest
and invite cleanup still runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wip on license card
* further wip on license card / activaction code card
* add recent invoices UI
* nit on seats terminology
* feat(web): surface subscription cancellation on license card
Adds cancelAt to the License model and the lighthouse ping schema, and
renders "Cancels on <date>" on the current plan card when there's no
upcoming renewal. Prefers "Next renewal" when Stripe still has an
upcoming invoice — so subscriptions scheduled to end after the next
billing cycle keep showing the renewal row.
Also makes nextRenewalAt / nextRenewalAmount nullable to match the
lighthouse response, and guards new Date() against null in servicePing.
Adds a CLAUDE.md under the lighthouse feature folder pointing at the
service repo so the two schemas stay in lockstep.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): add offline license card to settings
Renders a dedicated card for offline (SOURCEBOT_EE_LICENSE_KEY) licenses
showing the license id, seat cap, and expiry. When an offline license
is present, the page skips the online license lookup entirely to mirror
the precedence in entitlements.ts.
Also adds a header row with a mailto link to support and an "All plans"
shortcut to the public pricing page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): banner system for license + permission sync
Introduces a priority-ordered, single-slot banner system under
(app)/components/banners/. A server-side resolver picks the highest-priority
banner that matches the current context (role, license state, offline
license, permission-sync status) and renders it through a shared BannerShell
that handles per-day dismissal via cookies.
Banners included:
- License expired (everyone, non-dismissible, role-aware copy)
- License expiry heads-up (owner, dismissible, 14d window, uses
formatDistance for relative copy)
- Invoice past due (owner, non-dismissible)
- Permission sync pending (everyone, non-dismissible, migrated from the
prior standalone component through BannerShell)
Precedence mirrors entitlements.ts: offline license is the sole source
of truth when present, so online billing state is ignored.
Also splits getValidOfflineLicense into a decode-only path so
getOfflineLicenseMetadata can surface expired licenses to the UI.
Includes bannerResolver.test.ts covering priority, audience filtering,
dismissal filtering, offline/online expiry rules, and permission sync.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* handle failure case where lighthouse cannot be reached
* chore(web): mirror lighthouse trial + checkout schema changes
Adds trialEnd to the ping response schema and installId / requestTrial
to the checkout request schema so types match the lighthouse service.
createCheckoutSession passes the instance's SOURCEBOT_INSTALL_ID and
defaults requestTrial to false (the existing "upgrade" button is not
a trial path).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): trial banner + plumbing
Adds a trial banner to the owner-facing banner stack and the
surrounding plumbing:
- Schema: License.trialEnd, License.hasPaymentMethod, Org.trialUsedAt
(durable flag that survives license deactivation). Two migrations.
- servicePing persists trialEnd / hasPaymentMethod and flips
Org.trialUsedAt on first trial sync.
- Trial banner (owner, dismissible, priority 25): title uses
formatDistance ("Your trial ends in 10 days"); copy + action branch
on hasPaymentMethod. With-PM variant links to /settings/license;
no-PM variant opens the Stripe portal via a new
OpenBillingPortalButton (LoadingButton + createPortalSession).
- currentPlanCard gains a "Trial ends on" fallback column for the
trial-without-PM case (where nextRenewalAt is null).
- activationCodeCard accepts isTrialEligible and flips its checkout
button from "Purchase a license" to "Start a free trial" when the
org hasn't trialed yet, passing requestTrial through to the checkout
endpoint.
- Types mirror the new lighthouse fields (trialEnd, hasPaymentMethod)
and the checkout request additions (installId, requestTrial).
Side-trips to Stripe (portal, checkout) now append ?refresh=true so
the license resyncs on return; trial-checkout also appends
?trial_used=true so Org.trialUsedAt flips immediately (closes the UX
gap between checkout completion and activation-code entry). page.tsx
handles both params, preserves any other query params, and redirects
to a clean URL.
Also: fetchWithRetry now only retries 5xx, 408, and 429 — 4xx errors
(e.g. TRIAL_ALREADY_USED at 409) propagate immediately instead of
retrying pointlessly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add badges to invoice cards
* add basic billing docs
* refactor(lighthouse): throw ServiceErrorException on ping failure
syncWithLighthouse previously swallowed ping errors with a log and early
return, which masked real problems. Flip the model: on a lighthouse
ServiceError response, throw ServiceErrorException. The sew() middleware
already knows how to marshal that into an API response for user-initiated
paths.
Callers fall into two camps:
- Propagate (user-initiated): activateLicense and refreshLicense. The
existing try/catch in activateLicense now correctly rolls back the
license row when lighthouse rejects the activation code; refreshLicense
lets the throw propagate so the UI surfaces a toast.
- Swallow explicitly (background / side-effect): license page load, the
24h cron, user-approval, and signup paths all wrap with
`.catch(() => { /* ignore */ })`. These happen as a side effect of
other successful operations; a ping failure shouldn't block them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feedback
* fix tests
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@brendan-kellam
brendan-kellam marked this pull request as ready for review May 21, 2026 21:34
msukkariand others added 19 commits May 30, 2026 12:38
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): prevent top banner from pushing the chat prompt off-screen
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brendan Kellam <brendan@sourcebot.dev>
The code preview panel now persists the scroll position per
file/revision to sessionStorage and restores it on mount. Restoration
is skipped when a highlight_range query param is present so the existing
highlight scroll-into-view takes precedence.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ers (#1262)
Switches the safe.directory "*" config from --global (only written to
/root/.gitconfig) to --system (/etc/gitconfig) so it applies regardless
of which user runs git. The image intentionally sets no USER directive
and can be run as an arbitrary --user, where the global config was never
read, leaving the "dubious ownership" error unfixed.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)
* chore: remove embedded Postgres and Redis from the Docker image
As of v5, Sourcebot no longer ships an embedded Postgres or Redis.
External instances are now required via DATABASE_URL and REDIS_URL.
- Dockerfile: drop postgresql16/redis packages, DATABASE_DATA_DIR/
REDIS_DATA_DIR env, postgres/redis users, and /run/postgresql setup
- entrypoint.sh: hard-fail with guidance when DATABASE_URL/REDIS_URL are
unset; remove embedded init/startup blocks
- supervisord.conf: remove the redis program
- docs: mark DATABASE_URL/REDIS_URL required, drop data-dir vars, document
the breaking change and data migration in the v4-to-v5 guide
- CHANGELOG: note the breaking change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: point CHANGELOG entry at PR #1264
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* changelog
* docs: expand v4-to-v5 guide; require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY
- entrypoint.sh: require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY explicitly
(no auto-generation, no plaintext file loading); hard-fail with migration
guidance and warn if the legacy plaintext files linger
- v4-to-v5 guide: document the secrets, role-management, and external
Postgres/Redis breaking changes with per-item migration steps
- environment-variables: mark both secrets required
- roles-and-permissions: add default-role-by-plan table
- CHANGELOG: update breaking-change entries
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs nit
* changelog nit
* final nits
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
brendan-kellamand others added 2 commits June 2, 2026 20:29
…ces (#1267)
* feat(web): graceful error and loading states for billing/offers surfaces
Replace silent `null` returns with recoverable error states when the offers
fetch fails, across onboarding, the upsell dialog/panel, and feature gates:
- Onboarding trial step: reframe the error copy and add a "View pricing" link.
- UpsellDialog / UpsellPanel: shared UpsellLoadError fallback with a retry,
Status page link, and role-aware copy (owners get an outbound-access hint to
deployments.sourcebot.dev + Learn more; members are routed to their admin).
- UpsellPanel: add a `loadingVariant` prop so full-area feature gates render a
centered spinner while the in-flow license card keeps its skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* nit
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add scopes as part of the prisma schema
* Add MCP OAuth scope discovery and selection
* Refactor MCP scopes into configurable entries
* Refactor MCP server tool data table
* Add MCP server tool permissions
* Cache MCP tool definitions in Redis
* Auto-save MCP tool permission changes
* Avoid expensive tool fetch after updating tool permissions. Just update react query cache instead
* deduplicate some code for cleanliness
* Squash prisma migrations. Update redis cache for mcp tools to be per user, 1h time out
* update prisma migrations
* Update mcpScope to be referred to as mcpOAuthScope across the codebase
* Add documentation for scopes and permissions
* Update docs to say Ask Sourcebot
---------
Co-authored-by: Jack Minnetian <270441393+BlueBottleLatte@users.noreply.github.com>
Comment threadpackages/web/src/ee/features/chat/mcp/mcpToolSets.ts Dismissed
@brendan-kellam
brendan-kellam merged commit 72be168 into mainJun 3, 2026
11 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Jun 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@brendan-kellam@github-advanced-security@msukkari@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

v5 (#1097) - #1106

Merged
brendan-kellam merged 91 commits into
mainfrom
v5
Jun 3, 2026
Merged

v5 (#1097)#1106
brendan-kellam merged 91 commits into
mainfrom
v5

Conversation

@brendan-kellam

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitaiBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 284 files, which is 134 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6868608-c7fa-4c64-8446-2ec8c11ca1c3

📥 Commits

Reviewing files that changed from the base of the PR and between 740bcc9 and ded4282.

⛔ Files ignored due to path filters (16)
  • docs/images/connectors_account_page.png is excluded by !**/*.png
  • docs/images/connectors_edit_scopes.png is excluded by !**/*.png
  • docs/images/connectors_edit_tool_permissions.png is excluded by !**/*.png
  • docs/images/connectors_oauth_scopes.png is excluded by !**/*.png
  • docs/images/connectors_permission_request.png is excluded by !**/*.png
  • docs/images/connectors_static_registration.png is excluded by !**/*.png
  • docs/images/connectors_toggle_off.png is excluded by !**/*.png
  • docs/images/connectors_tool_permissions.png is excluded by !**/*.png
  • docs/images/setup_sourcebot_splash.png is excluded by !**/*.png
  • packages/web/public/claude_code.svg is excluded by !**/*.svg
  • packages/web/public/codex.svg is excluded by !**/*.svg
  • packages/web/public/cursor_dark.svg is excluded by !**/*.svg
  • packages/web/public/cursor_light.svg is excluded by !**/*.svg
  • packages/web/public/vscode.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_dark.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_light.svg is excluded by !**/*.svg
📒 Files selected for processing (284)
  • .env.development
  • .github/workflows/release-mcp.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docker-compose.yml
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • docs/docs/activating-a-subscription.mdx
  • docs/docs/billing.mdx
  • docs/docs/configuration/audit-logs.mdx
  • docs/docs/configuration/auth/access-settings.mdx
  • docs/docs/configuration/auth/authentication.mdx
  • docs/docs/configuration/auth/providers.mdx
  • docs/docs/configuration/auth/roles-and-permissions.mdx
  • docs/docs/configuration/config-file.mdx
  • docs/docs/configuration/declarative-config.mdx
  • docs/docs/configuration/environment-variables.mdx
  • docs/docs/configuration/idp.mdx
  • docs/docs/connections/ado-cloud.mdx
  • docs/docs/connections/ado-server.mdx
  • docs/docs/connections/bitbucket-cloud.mdx
  • docs/docs/connections/bitbucket-data-center.mdx
  • docs/docs/connections/generic-git-host.mdx
  • docs/docs/connections/gerrit.mdx
  • docs/docs/connections/gitea.mdx
  • docs/docs/connections/github.mdx
  • docs/docs/connections/gitlab.mdx
  • docs/docs/connections/indexing-your-code.mdx
  • docs/docs/connections/local-repos.mdx
  • docs/docs/deployment/docker-compose.mdx
  • docs/docs/deployment/infrastructure/architecture.mdx
  • docs/docs/deployment/sizing-guide.mdx
  • docs/docs/features/agents/agents.mdx
  • docs/docs/features/ask/ask-sourcebot.mdx
  • docs/docs/features/ask/chat-sharing.mdx
  • docs/docs/features/ask/connectors.mdx
  • docs/docs/features/mcp-server.mdx
  • docs/docs/features/permission-syncing.mdx
  • docs/docs/features/search/code-search.mdx
  • docs/docs/features/search/multi-branch-indexing.mdx
  • docs/docs/features/search/search-contexts.mdx
  • docs/docs/free-trial.mdx
  • docs/docs/license-key.mdx
  • docs/docs/misc/architecture.mdx
  • docs/docs/misc/scalability.mdx
  • docs/docs/misc/service-ping.mdx
  • docs/docs/misc/telemetry.mdx
  • docs/docs/overview.mdx
  • docs/docs/upgrade/v3-to-v4-guide.mdx
  • docs/docs/upgrade/v4-to-v5-guide.mdx
  • docs/snippets/license-key-required.mdx
  • entrypoint.sh
  • packages/backend/src/__mocks__/prisma.ts
  • packages/backend/src/api.ts
  • packages/backend/src/ee/accountPermissionSyncer.ts
  • packages/backend/src/ee/repoPermissionSyncer.ts
  • packages/backend/src/ee/syncSearchContexts.test.ts
  • packages/backend/src/ee/syncSearchContexts.ts
  • packages/backend/src/entitlements.ts
  • packages/backend/src/github.ts
  • packages/backend/src/index.ts
  • packages/backend/src/posthog.ts
  • packages/backend/src/prisma.ts
  • packages/backend/src/redis.ts
  • packages/backend/src/utils.ts
  • packages/backend/vitest.config.ts
  • packages/db/prisma/migrations/20260502000000_remove_guest_org_role/migration.sql
  • packages/db/prisma/migrations/20260509000000_add_license_table/migration.sql
  • packages/db/prisma/migrations/20260523064558_add_repo_visit_table/migration.sql
  • packages/db/prisma/migrations/20260525214409_add_changelog_table/migration.sql
  • packages/db/prisma/migrations/20260526013307_add_user_last_active_at/migration.sql
  • packages/db/prisma/migrations/20260603172622_add_mcp_connectors/migration.sql
  • packages/db/prisma/schema.prisma
  • packages/db/tools/scriptRunner.ts
  • packages/db/tools/scripts/inject-chat-data.ts
  • packages/setupWizard/README.md
  • packages/setupWizard/package.json
  • packages/setupWizard/src/azuredevops.ts
  • packages/setupWizard/src/bitbucket.ts
  • packages/setupWizard/src/genericGit.ts
  • packages/setupWizard/src/gerrit.ts
  • packages/setupWizard/src/gitea.ts
  • packages/setupWizard/src/github.ts
  • packages/setupWizard/src/gitlab.ts
  • packages/setupWizard/src/index.ts
  • packages/setupWizard/src/localRepos.ts
  • packages/setupWizard/src/models.ts
  • packages/setupWizard/src/tabCheckbox.ts
  • packages/setupWizard/src/utils.ts
  • packages/setupWizard/tsconfig.json
  • packages/shared/package.json
  • packages/shared/src/constants.ts
  • packages/shared/src/crypto.ts
  • packages/shared/src/entitlements.test.ts
  • packages/shared/src/entitlements.ts
  • packages/shared/src/env.server.test.ts
  • packages/shared/src/env.server.ts
  • packages/shared/src/index.client.ts
  • packages/shared/src/index.server.ts
  • packages/shared/src/redis.ts
  • packages/shared/src/types.ts
  • packages/shared/src/versionUtils.ts
  • packages/shared/vitest.config.ts
  • packages/web/next.config.mjs
  • packages/web/package.json
  • packages/web/src/__mocks__/prisma.ts
  • packages/web/src/actions.ts
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/page.tsx
  • packages/web/src/app/(app)/@sidebar/components/changelogEntryDialog.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/chatHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/repoVisitHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/header.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/sidebarBase.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeBadge.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeButton.tsx
  • packages/web/src/app/(app)/@sidebar/components/whatsNewSidebarButton.tsx
  • packages/web/src/app/(app)/agents/page.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/components/landingPage.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/page.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/pureCodePreviewPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/trackRepoVisit.tsx
  • packages/web/src/app/(app)/browse/[...path]/page.tsx
  • packages/web/src/app/(app)/browse/actions.ts
  • packages/web/src/app/(app)/browse/components/bottomPanel.tsx
  • packages/web/src/app/(app)/browse/components/pureFileTreePanel.tsx
  • packages/web/src/app/(app)/browse/layout.tsx
  • packages/web/src/app/(app)/browse/layoutClient.tsx
  • packages/web/src/app/(app)/chat/[id]/page.tsx
  • packages/web/src/app/(app)/chat/chatLandingPage.tsx
  • packages/web/src/app/(app)/chat/components/chatActionsDropdown.tsx
  • packages/web/src/app/(app)/chat/components/chatSidePanel.tsx
  • packages/web/src/app/(app)/chat/components/landingPageChatBox.tsx
  • packages/web/src/app/(app)/chat/components/mcpOAuthStatusToast.tsx
  • packages/web/src/app/(app)/chat/components/tutorialDialog.tsx
  • packages/web/src/app/(app)/chat/layout.tsx
  • packages/web/src/app/(app)/chat/page.tsx
  • packages/web/src/app/(app)/chats/chatsPage.tsx
  • packages/web/src/app/(app)/chats/page.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenu.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenuGroup.tsx
  • packages/web/src/app/(app)/components/banners/actions.ts
  • packages/web/src/app/(app)/components/banners/bannerHeightObserver.tsx
  • packages/web/src/app/(app)/components/banners/bannerResolver.test.ts
  • packages/web/src/app/(app)/components/banners/bannerResolver.tsx
  • packages/web/src/app/(app)/components/banners/bannerShell.tsx
  • packages/web/src/app/(app)/components/banners/bannerSlot.tsx
  • packages/web/src/app/(app)/components/banners/invoicePastDueBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiredBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiryHeadsUpBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseReboundElsewhereBanner.tsx
  • packages/web/src/app/(app)/components/banners/openBillingPortalButton.tsx
  • packages/web/src/app/(app)/components/banners/permissionSyncBanner.tsx
  • packages/web/src/app/(app)/components/banners/refreshLicenseButton.tsx
  • packages/web/src/app/(app)/components/banners/servicePingFailedBanner.tsx
  • packages/web/src/app/(app)/components/banners/trialBanner.tsx
  • packages/web/src/app/(app)/components/banners/types.ts
  • packages/web/src/app/(app)/components/banners/upgradeAvailableBanner.tsx
  • packages/web/src/app/(app)/components/meControlDropdownMenu.tsx
  • packages/web/src/app/(app)/components/navigationMenu/index.tsx
  • packages/web/src/app/(app)/components/navigationMenu/navigationItems.tsx
  • packages/web/src/app/(app)/components/navigationMenu/progressIndicator.tsx
  • packages/web/src/app/(app)/components/notFound.tsx
  • packages/web/src/app/(app)/components/pageNotFound.tsx
  • packages/web/src/app/(app)/components/searchModeSelector.tsx
  • packages/web/src/app/(app)/components/topBar.tsx
  • packages/web/src/app/(app)/components/upgradeToast.tsx
  • packages/web/src/app/(app)/components/whatsNewIndicator.tsx
  • packages/web/src/app/(app)/layout.tsx
  • packages/web/src/app/(app)/page.tsx
  • packages/web/src/app/(app)/repos/[id]/page.tsx
  • packages/web/src/app/(app)/repos/layout.tsx
  • packages/web/src/app/(app)/search/components/searchLandingPage.tsx
  • packages/web/src/app/(app)/search/components/searchResultsPage.tsx
  • packages/web/src/app/(app)/search/page.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/accountAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/analytics/analyticsEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/analytics/page.tsx
  • packages/web/src/app/(app)/settings/apiKeys/apiKeysPage.tsx
  • packages/web/src/app/(app)/settings/apiKeys/columns.tsx
  • packages/web/src/app/(app)/settings/apiKeys/page.tsx
  • packages/web/src/app/(app)/settings/components/settingsCard.tsx
  • packages/web/src/app/(app)/settings/components/sidebar-nav.tsx
  • packages/web/src/app/(app)/settings/connections/page.tsx
  • packages/web/src/app/(app)/settings/general/generalPage.tsx
  • packages/web/src/app/(app)/settings/general/page.tsx
  • packages/web/src/app/(app)/settings/layout.tsx
  • packages/web/src/app/(app)/settings/license/activationCodeCard.tsx
  • packages/web/src/app/(app)/settings/license/offlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/licenseInactiveBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/onlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/planActionsMenu.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/removeActivationCodeDialog.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/trialMissingPaymentMethodBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/upcomingYearlyRenewalBanner.tsx
  • packages/web/src/app/(app)/settings/license/page.tsx
  • packages/web/src/app/(app)/settings/license/recentInvoicesCard.tsx
  • packages/web/src/app/(app)/settings/license/types.ts
  • packages/web/src/app/(app)/settings/license/yearlyTermSeatsUsageCard.tsx
  • packages/web/src/app/(app)/settings/linked-accounts/page.tsx
  • packages/web/src/app/(app)/settings/mcp/clientCard.tsx
  • packages/web/src/app/(app)/settings/mcp/clients.ts
  • packages/web/src/app/(app)/settings/mcp/mcpEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/mcp/mcpPage.tsx
  • packages/web/src/app/(app)/settings/mcp/page.tsx
  • packages/web/src/app/(app)/settings/members/components/inviteMemberCard.tsx
  • packages/web/src/app/(app)/settings/members/components/invitesList.tsx
  • packages/web/src/app/(app)/settings/members/components/membersList.tsx
  • packages/web/src/app/(app)/settings/members/components/requestsList.tsx
  • packages/web/src/app/(app)/settings/members/page.tsx
  • packages/web/src/app/(app)/settings/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/mcpToolPermissionsPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/prefabConnectorPopover.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentUnavailableMessage.tsx
  • packages/web/src/app/api/(client)/client.ts
  • packages/web/src/app/api/(server)/changelog/entries/route.ts
  • packages/web/src/app/api/(server)/chat/blocking/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-authorization-server/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-protected-resource/[...path]/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/types.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.ts
  • packages/web/src/app/api/(server)/ee/audit/route.ts
  • packages/web/src/app/api/(server)/ee/chat/[chatId]/searchMembers/route.ts
  • packages/web/src/app/api/(server)/ee/chat/route.ts
  • packages/web/src/app/api/(server)/ee/chats/route.ts
  • packages/web/src/app/api/(server)/ee/chats/types.ts
  • packages/web/src/app/api/(server)/ee/mcp/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/register/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/revoke/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/token/route.ts
  • packages/web/src/app/api/(server)/ee/permissionSyncStatus/api.ts
  • packages/web/src/app/api/(server)/ee/user/route.ts
  • packages/web/src/app/api/(server)/ee/users/route.ts
  • packages/web/src/app/api/(server)/offers/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/components/anonymousAccessToggle.tsx
  • packages/web/src/app/components/authMethodSelector.tsx
  • packages/web/src/app/components/organizationAccessSettings.tsx
  • packages/web/src/app/globals.css
  • packages/web/src/app/invite/actions.ts
  • packages/web/src/app/invite/page.tsx
  • packages/web/src/app/layout.tsx
  • packages/web/src/app/login/components/loginForm.tsx
  • packages/web/src/app/login/page.tsx
  • packages/web/src/app/not-found.tsx
  • packages/web/src/app/oauth/authorize/page.tsx
  • packages/web/src/app/onboard/components/alreadyLicensedStep.tsx
  • packages/web/src/app/onboard/components/completeOnboardingButton.tsx
  • packages/web/src/app/onboard/components/trialStep.tsx
  • packages/web/src/app/onboard/page.tsx
  • packages/web/src/app/posthogProvider.tsx
  • packages/web/src/app/progressBarProvider.tsx
  • packages/web/src/app/signup/page.tsx
  • packages/web/src/auth.ts
  • packages/web/src/components/ui/alert.tsx
  • packages/web/src/components/ui/data-table.tsx
  • packages/web/src/components/ui/dialog.tsx
  • packages/web/src/components/ui/sidebar.tsx

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v5

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 and usage tips.

@github-actions

github-actionsBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

License Audit

⚠️Status: PASS

MetricCount
Total packages2133
Resolved (non-standard)11
Unresolved0
Strong copyleft0
Weak copyleft39

Weak Copyleft Packages (informational)

PackageVersionLicense
@img/sharp-libvips-darwin-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.0.5LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-ppc641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-riscv641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.2.4LGPL-3.0-or-later
@img/sharp-wasm320.33.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-wasm320.34.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-win32-arm640.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.34.5Apache-2.0 AND LGPL-3.0-or-later
axe-core4.10.3MPL-2.0
dompurify3.4.0(MPL-2.0 OR Apache-2.0)
lightningcss1.32.0MPL-2.0
lightningcss-android-arm641.32.0MPL-2.0
lightningcss-darwin-arm641.32.0MPL-2.0
lightningcss-darwin-x641.32.0MPL-2.0
lightningcss-freebsd-x641.32.0MPL-2.0
lightningcss-linux-arm-gnueabihf1.32.0MPL-2.0
lightningcss-linux-arm64-gnu1.32.0MPL-2.0
lightningcss-linux-arm64-musl1.32.0MPL-2.0
lightningcss-linux-x64-gnu1.32.0MPL-2.0
lightningcss-linux-x64-musl1.32.0MPL-2.0
lightningcss-win32-arm64-msvc1.32.0MPL-2.0
lightningcss-win32-x64-msvc1.32.0MPL-2.0
Resolved Packages (11)
PackageVersionOriginalResolvedSource
@react-grab/cli0.1.23UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/cli0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/mcp0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
codemirror-lang-elixir4.0.0UNKNOWNApache-2.0GitHub repo (livebook-dev/codemirror-lang-elixir LICENSE)
element-source0.0.3UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
lezer-elixir1.1.2UNKNOWNApache-2.0GitHub repo (livebook-dev/lezer-elixir LICENSE)
map-stream0.1.0UNKNOWNMITGitHub repo (dominictarr/map-stream LICENCE)
memorystream0.3.1UNKNOWNMITextracted from object (npm licenses[0].type field)
pause-stream0.0.11["MIT","Apache2"]MIT OR Apache-2.0extracted from object array + GitHub repo (dominictarr/pause-stream LICENSE, dual licensed)
posthog-js1.369.0SEE LICENSE IN LICENSEApache-2.0GitHub repo (PostHog/posthog-js LICENSE file)
valid-url1.0.9UNKNOWNMITGitHub repo (ogt/valid-url LICENSE file)

* wip
* remove unused hook
* Add collapse sidebar button
* refactor settings into sidebar as a override context
* chat thread styling
* notification dot
* improved rendering
* fix light mode
* imporved api key page
* add chats page
* not found nit
* guest sidebar footer
* add tooltip for sidebar collapse button
* nit
* onboard nit
* fix permission sync banner
* what's new
* profile settings
* home view settings
* general settings
* remove shadow
* changelog
* feedback
brendan-kellamand others added 5 commits April 24, 2026 08:53
* wip on service ping
* add concept of License to the database and wire it into the enitlements system
* wip on e2e checkout flow
* basic card to display current plan
* store activation code at rest
* add manage subscription button
* wip on lighthouse client
* wip on lighthouse client
* remove the concept of a plan and just rely on entitlements at the app layer
* fix sidebar
* add temporary refresh license button
* clarified org availability design
* entitlements naming nit
* remove concept of a GUEST user
* remove anonymous-access entitlement
* change offline license to support optional seats
* handle license validation for all paths
* refactor some actions
* add explicit service ping calls to user <> organization update paths
* fix refresh bug with sidebar
* add billing details card
* fix invite redemption when user already a member
User was hitting a unique constraint on UserToOrg(orgId, userId) when
redeeming an invite, because onCreateUser auto-joins new signups in
self-serve mode and redeemInvite then tried to create the same row.
Make the insert idempotent via upsert so the downstream AccountRequest
and invite cleanup still runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wip on license card
* further wip on license card / activaction code card
* add recent invoices UI
* nit on seats terminology
* feat(web): surface subscription cancellation on license card
Adds cancelAt to the License model and the lighthouse ping schema, and
renders "Cancels on <date>" on the current plan card when there's no
upcoming renewal. Prefers "Next renewal" when Stripe still has an
upcoming invoice — so subscriptions scheduled to end after the next
billing cycle keep showing the renewal row.
Also makes nextRenewalAt / nextRenewalAmount nullable to match the
lighthouse response, and guards new Date() against null in servicePing.
Adds a CLAUDE.md under the lighthouse feature folder pointing at the
service repo so the two schemas stay in lockstep.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): add offline license card to settings
Renders a dedicated card for offline (SOURCEBOT_EE_LICENSE_KEY) licenses
showing the license id, seat cap, and expiry. When an offline license
is present, the page skips the online license lookup entirely to mirror
the precedence in entitlements.ts.
Also adds a header row with a mailto link to support and an "All plans"
shortcut to the public pricing page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): banner system for license + permission sync
Introduces a priority-ordered, single-slot banner system under
(app)/components/banners/. A server-side resolver picks the highest-priority
banner that matches the current context (role, license state, offline
license, permission-sync status) and renders it through a shared BannerShell
that handles per-day dismissal via cookies.
Banners included:
- License expired (everyone, non-dismissible, role-aware copy)
- License expiry heads-up (owner, dismissible, 14d window, uses
formatDistance for relative copy)
- Invoice past due (owner, non-dismissible)
- Permission sync pending (everyone, non-dismissible, migrated from the
prior standalone component through BannerShell)
Precedence mirrors entitlements.ts: offline license is the sole source
of truth when present, so online billing state is ignored.
Also splits getValidOfflineLicense into a decode-only path so
getOfflineLicenseMetadata can surface expired licenses to the UI.
Includes bannerResolver.test.ts covering priority, audience filtering,
dismissal filtering, offline/online expiry rules, and permission sync.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* handle failure case where lighthouse cannot be reached
* chore(web): mirror lighthouse trial + checkout schema changes
Adds trialEnd to the ping response schema and installId / requestTrial
to the checkout request schema so types match the lighthouse service.
createCheckoutSession passes the instance's SOURCEBOT_INSTALL_ID and
defaults requestTrial to false (the existing "upgrade" button is not
a trial path).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): trial banner + plumbing
Adds a trial banner to the owner-facing banner stack and the
surrounding plumbing:
- Schema: License.trialEnd, License.hasPaymentMethod, Org.trialUsedAt
(durable flag that survives license deactivation). Two migrations.
- servicePing persists trialEnd / hasPaymentMethod and flips
Org.trialUsedAt on first trial sync.
- Trial banner (owner, dismissible, priority 25): title uses
formatDistance ("Your trial ends in 10 days"); copy + action branch
on hasPaymentMethod. With-PM variant links to /settings/license;
no-PM variant opens the Stripe portal via a new
OpenBillingPortalButton (LoadingButton + createPortalSession).
- currentPlanCard gains a "Trial ends on" fallback column for the
trial-without-PM case (where nextRenewalAt is null).
- activationCodeCard accepts isTrialEligible and flips its checkout
button from "Purchase a license" to "Start a free trial" when the
org hasn't trialed yet, passing requestTrial through to the checkout
endpoint.
- Types mirror the new lighthouse fields (trialEnd, hasPaymentMethod)
and the checkout request additions (installId, requestTrial).
Side-trips to Stripe (portal, checkout) now append ?refresh=true so
the license resyncs on return; trial-checkout also appends
?trial_used=true so Org.trialUsedAt flips immediately (closes the UX
gap between checkout completion and activation-code entry). page.tsx
handles both params, preserves any other query params, and redirects
to a clean URL.
Also: fetchWithRetry now only retries 5xx, 408, and 429 — 4xx errors
(e.g. TRIAL_ALREADY_USED at 409) propagate immediately instead of
retrying pointlessly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add badges to invoice cards
* add basic billing docs
* refactor(lighthouse): throw ServiceErrorException on ping failure
syncWithLighthouse previously swallowed ping errors with a log and early
return, which masked real problems. Flip the model: on a lighthouse
ServiceError response, throw ServiceErrorException. The sew() middleware
already knows how to marshal that into an API response for user-initiated
paths.
Callers fall into two camps:
- Propagate (user-initiated): activateLicense and refreshLicense. The
existing try/catch in activateLicense now correctly rolls back the
license row when lighthouse rejects the activation code; refreshLicense
lets the throw propagate so the UI surfaces a toast.
- Swallow explicitly (background / side-effect): license page load, the
24h cron, user-approval, and signup paths all wrap with
`.catch(() => { /* ignore */ })`. These happen as a side effect of
other successful operations; a ping failure shouldn't block them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feedback
* fix tests
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@brendan-kellam
brendan-kellam marked this pull request as ready for review May 21, 2026 21:34
msukkariand others added 19 commits May 30, 2026 12:38
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): prevent top banner from pushing the chat prompt off-screen
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brendan Kellam <brendan@sourcebot.dev>
The code preview panel now persists the scroll position per
file/revision to sessionStorage and restores it on mount. Restoration
is skipped when a highlight_range query param is present so the existing
highlight scroll-into-view takes precedence.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ers (#1262)
Switches the safe.directory "*" config from --global (only written to
/root/.gitconfig) to --system (/etc/gitconfig) so it applies regardless
of which user runs git. The image intentionally sets no USER directive
and can be run as an arbitrary --user, where the global config was never
read, leaving the "dubious ownership" error unfixed.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)
* chore: remove embedded Postgres and Redis from the Docker image
As of v5, Sourcebot no longer ships an embedded Postgres or Redis.
External instances are now required via DATABASE_URL and REDIS_URL.
- Dockerfile: drop postgresql16/redis packages, DATABASE_DATA_DIR/
REDIS_DATA_DIR env, postgres/redis users, and /run/postgresql setup
- entrypoint.sh: hard-fail with guidance when DATABASE_URL/REDIS_URL are
unset; remove embedded init/startup blocks
- supervisord.conf: remove the redis program
- docs: mark DATABASE_URL/REDIS_URL required, drop data-dir vars, document
the breaking change and data migration in the v4-to-v5 guide
- CHANGELOG: note the breaking change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: point CHANGELOG entry at PR #1264
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* changelog
* docs: expand v4-to-v5 guide; require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY
- entrypoint.sh: require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY explicitly
(no auto-generation, no plaintext file loading); hard-fail with migration
guidance and warn if the legacy plaintext files linger
- v4-to-v5 guide: document the secrets, role-management, and external
Postgres/Redis breaking changes with per-item migration steps
- environment-variables: mark both secrets required
- roles-and-permissions: add default-role-by-plan table
- CHANGELOG: update breaking-change entries
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs nit
* changelog nit
* final nits
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
brendan-kellamand others added 2 commits June 2, 2026 20:29
…ces (#1267)
* feat(web): graceful error and loading states for billing/offers surfaces
Replace silent `null` returns with recoverable error states when the offers
fetch fails, across onboarding, the upsell dialog/panel, and feature gates:
- Onboarding trial step: reframe the error copy and add a "View pricing" link.
- UpsellDialog / UpsellPanel: shared UpsellLoadError fallback with a retry,
Status page link, and role-aware copy (owners get an outbound-access hint to
deployments.sourcebot.dev + Learn more; members are routed to their admin).
- UpsellPanel: add a `loadingVariant` prop so full-area feature gates render a
centered spinner while the in-flow license card keeps its skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* nit
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add scopes as part of the prisma schema
* Add MCP OAuth scope discovery and selection
* Refactor MCP scopes into configurable entries
* Refactor MCP server tool data table
* Add MCP server tool permissions
* Cache MCP tool definitions in Redis
* Auto-save MCP tool permission changes
* Avoid expensive tool fetch after updating tool permissions. Just update react query cache instead
* deduplicate some code for cleanliness
* Squash prisma migrations. Update redis cache for mcp tools to be per user, 1h time out
* update prisma migrations
* Update mcpScope to be referred to as mcpOAuthScope across the codebase
* Add documentation for scopes and permissions
* Update docs to say Ask Sourcebot
---------
Co-authored-by: Jack Minnetian <270441393+BlueBottleLatte@users.noreply.github.com>
Comment threadpackages/web/src/ee/features/chat/mcp/mcpToolSets.ts Dismissed
@brendan-kellam
brendan-kellam merged commit 72be168 into mainJun 3, 2026
11 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Jun 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@brendan-kellam@github-advanced-security@msukkari@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

v5 (#1097) - #1106

Merged
brendan-kellam merged 91 commits into
mainfrom
v5
Jun 3, 2026
Merged

v5 (#1097)#1106
brendan-kellam merged 91 commits into
mainfrom
v5

Conversation

@brendan-kellam

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitaiBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 284 files, which is 134 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6868608-c7fa-4c64-8446-2ec8c11ca1c3

📥 Commits

Reviewing files that changed from the base of the PR and between 740bcc9 and ded4282.

⛔ Files ignored due to path filters (16)
  • docs/images/connectors_account_page.png is excluded by !**/*.png
  • docs/images/connectors_edit_scopes.png is excluded by !**/*.png
  • docs/images/connectors_edit_tool_permissions.png is excluded by !**/*.png
  • docs/images/connectors_oauth_scopes.png is excluded by !**/*.png
  • docs/images/connectors_permission_request.png is excluded by !**/*.png
  • docs/images/connectors_static_registration.png is excluded by !**/*.png
  • docs/images/connectors_toggle_off.png is excluded by !**/*.png
  • docs/images/connectors_tool_permissions.png is excluded by !**/*.png
  • docs/images/setup_sourcebot_splash.png is excluded by !**/*.png
  • packages/web/public/claude_code.svg is excluded by !**/*.svg
  • packages/web/public/codex.svg is excluded by !**/*.svg
  • packages/web/public/cursor_dark.svg is excluded by !**/*.svg
  • packages/web/public/cursor_light.svg is excluded by !**/*.svg
  • packages/web/public/vscode.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_dark.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_light.svg is excluded by !**/*.svg
📒 Files selected for processing (284)
  • .env.development
  • .github/workflows/release-mcp.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docker-compose.yml
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • docs/docs/activating-a-subscription.mdx
  • docs/docs/billing.mdx
  • docs/docs/configuration/audit-logs.mdx
  • docs/docs/configuration/auth/access-settings.mdx
  • docs/docs/configuration/auth/authentication.mdx
  • docs/docs/configuration/auth/providers.mdx
  • docs/docs/configuration/auth/roles-and-permissions.mdx
  • docs/docs/configuration/config-file.mdx
  • docs/docs/configuration/declarative-config.mdx
  • docs/docs/configuration/environment-variables.mdx
  • docs/docs/configuration/idp.mdx
  • docs/docs/connections/ado-cloud.mdx
  • docs/docs/connections/ado-server.mdx
  • docs/docs/connections/bitbucket-cloud.mdx
  • docs/docs/connections/bitbucket-data-center.mdx
  • docs/docs/connections/generic-git-host.mdx
  • docs/docs/connections/gerrit.mdx
  • docs/docs/connections/gitea.mdx
  • docs/docs/connections/github.mdx
  • docs/docs/connections/gitlab.mdx
  • docs/docs/connections/indexing-your-code.mdx
  • docs/docs/connections/local-repos.mdx
  • docs/docs/deployment/docker-compose.mdx
  • docs/docs/deployment/infrastructure/architecture.mdx
  • docs/docs/deployment/sizing-guide.mdx
  • docs/docs/features/agents/agents.mdx
  • docs/docs/features/ask/ask-sourcebot.mdx
  • docs/docs/features/ask/chat-sharing.mdx
  • docs/docs/features/ask/connectors.mdx
  • docs/docs/features/mcp-server.mdx
  • docs/docs/features/permission-syncing.mdx
  • docs/docs/features/search/code-search.mdx
  • docs/docs/features/search/multi-branch-indexing.mdx
  • docs/docs/features/search/search-contexts.mdx
  • docs/docs/free-trial.mdx
  • docs/docs/license-key.mdx
  • docs/docs/misc/architecture.mdx
  • docs/docs/misc/scalability.mdx
  • docs/docs/misc/service-ping.mdx
  • docs/docs/misc/telemetry.mdx
  • docs/docs/overview.mdx
  • docs/docs/upgrade/v3-to-v4-guide.mdx
  • docs/docs/upgrade/v4-to-v5-guide.mdx
  • docs/snippets/license-key-required.mdx
  • entrypoint.sh
  • packages/backend/src/__mocks__/prisma.ts
  • packages/backend/src/api.ts
  • packages/backend/src/ee/accountPermissionSyncer.ts
  • packages/backend/src/ee/repoPermissionSyncer.ts
  • packages/backend/src/ee/syncSearchContexts.test.ts
  • packages/backend/src/ee/syncSearchContexts.ts
  • packages/backend/src/entitlements.ts
  • packages/backend/src/github.ts
  • packages/backend/src/index.ts
  • packages/backend/src/posthog.ts
  • packages/backend/src/prisma.ts
  • packages/backend/src/redis.ts
  • packages/backend/src/utils.ts
  • packages/backend/vitest.config.ts
  • packages/db/prisma/migrations/20260502000000_remove_guest_org_role/migration.sql
  • packages/db/prisma/migrations/20260509000000_add_license_table/migration.sql
  • packages/db/prisma/migrations/20260523064558_add_repo_visit_table/migration.sql
  • packages/db/prisma/migrations/20260525214409_add_changelog_table/migration.sql
  • packages/db/prisma/migrations/20260526013307_add_user_last_active_at/migration.sql
  • packages/db/prisma/migrations/20260603172622_add_mcp_connectors/migration.sql
  • packages/db/prisma/schema.prisma
  • packages/db/tools/scriptRunner.ts
  • packages/db/tools/scripts/inject-chat-data.ts
  • packages/setupWizard/README.md
  • packages/setupWizard/package.json
  • packages/setupWizard/src/azuredevops.ts
  • packages/setupWizard/src/bitbucket.ts
  • packages/setupWizard/src/genericGit.ts
  • packages/setupWizard/src/gerrit.ts
  • packages/setupWizard/src/gitea.ts
  • packages/setupWizard/src/github.ts
  • packages/setupWizard/src/gitlab.ts
  • packages/setupWizard/src/index.ts
  • packages/setupWizard/src/localRepos.ts
  • packages/setupWizard/src/models.ts
  • packages/setupWizard/src/tabCheckbox.ts
  • packages/setupWizard/src/utils.ts
  • packages/setupWizard/tsconfig.json
  • packages/shared/package.json
  • packages/shared/src/constants.ts
  • packages/shared/src/crypto.ts
  • packages/shared/src/entitlements.test.ts
  • packages/shared/src/entitlements.ts
  • packages/shared/src/env.server.test.ts
  • packages/shared/src/env.server.ts
  • packages/shared/src/index.client.ts
  • packages/shared/src/index.server.ts
  • packages/shared/src/redis.ts
  • packages/shared/src/types.ts
  • packages/shared/src/versionUtils.ts
  • packages/shared/vitest.config.ts
  • packages/web/next.config.mjs
  • packages/web/package.json
  • packages/web/src/__mocks__/prisma.ts
  • packages/web/src/actions.ts
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/page.tsx
  • packages/web/src/app/(app)/@sidebar/components/changelogEntryDialog.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/chatHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/repoVisitHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/header.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/sidebarBase.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeBadge.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeButton.tsx
  • packages/web/src/app/(app)/@sidebar/components/whatsNewSidebarButton.tsx
  • packages/web/src/app/(app)/agents/page.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/components/landingPage.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/page.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/pureCodePreviewPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/trackRepoVisit.tsx
  • packages/web/src/app/(app)/browse/[...path]/page.tsx
  • packages/web/src/app/(app)/browse/actions.ts
  • packages/web/src/app/(app)/browse/components/bottomPanel.tsx
  • packages/web/src/app/(app)/browse/components/pureFileTreePanel.tsx
  • packages/web/src/app/(app)/browse/layout.tsx
  • packages/web/src/app/(app)/browse/layoutClient.tsx
  • packages/web/src/app/(app)/chat/[id]/page.tsx
  • packages/web/src/app/(app)/chat/chatLandingPage.tsx
  • packages/web/src/app/(app)/chat/components/chatActionsDropdown.tsx
  • packages/web/src/app/(app)/chat/components/chatSidePanel.tsx
  • packages/web/src/app/(app)/chat/components/landingPageChatBox.tsx
  • packages/web/src/app/(app)/chat/components/mcpOAuthStatusToast.tsx
  • packages/web/src/app/(app)/chat/components/tutorialDialog.tsx
  • packages/web/src/app/(app)/chat/layout.tsx
  • packages/web/src/app/(app)/chat/page.tsx
  • packages/web/src/app/(app)/chats/chatsPage.tsx
  • packages/web/src/app/(app)/chats/page.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenu.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenuGroup.tsx
  • packages/web/src/app/(app)/components/banners/actions.ts
  • packages/web/src/app/(app)/components/banners/bannerHeightObserver.tsx
  • packages/web/src/app/(app)/components/banners/bannerResolver.test.ts
  • packages/web/src/app/(app)/components/banners/bannerResolver.tsx
  • packages/web/src/app/(app)/components/banners/bannerShell.tsx
  • packages/web/src/app/(app)/components/banners/bannerSlot.tsx
  • packages/web/src/app/(app)/components/banners/invoicePastDueBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiredBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiryHeadsUpBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseReboundElsewhereBanner.tsx
  • packages/web/src/app/(app)/components/banners/openBillingPortalButton.tsx
  • packages/web/src/app/(app)/components/banners/permissionSyncBanner.tsx
  • packages/web/src/app/(app)/components/banners/refreshLicenseButton.tsx
  • packages/web/src/app/(app)/components/banners/servicePingFailedBanner.tsx
  • packages/web/src/app/(app)/components/banners/trialBanner.tsx
  • packages/web/src/app/(app)/components/banners/types.ts
  • packages/web/src/app/(app)/components/banners/upgradeAvailableBanner.tsx
  • packages/web/src/app/(app)/components/meControlDropdownMenu.tsx
  • packages/web/src/app/(app)/components/navigationMenu/index.tsx
  • packages/web/src/app/(app)/components/navigationMenu/navigationItems.tsx
  • packages/web/src/app/(app)/components/navigationMenu/progressIndicator.tsx
  • packages/web/src/app/(app)/components/notFound.tsx
  • packages/web/src/app/(app)/components/pageNotFound.tsx
  • packages/web/src/app/(app)/components/searchModeSelector.tsx
  • packages/web/src/app/(app)/components/topBar.tsx
  • packages/web/src/app/(app)/components/upgradeToast.tsx
  • packages/web/src/app/(app)/components/whatsNewIndicator.tsx
  • packages/web/src/app/(app)/layout.tsx
  • packages/web/src/app/(app)/page.tsx
  • packages/web/src/app/(app)/repos/[id]/page.tsx
  • packages/web/src/app/(app)/repos/layout.tsx
  • packages/web/src/app/(app)/search/components/searchLandingPage.tsx
  • packages/web/src/app/(app)/search/components/searchResultsPage.tsx
  • packages/web/src/app/(app)/search/page.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/accountAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/analytics/analyticsEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/analytics/page.tsx
  • packages/web/src/app/(app)/settings/apiKeys/apiKeysPage.tsx
  • packages/web/src/app/(app)/settings/apiKeys/columns.tsx
  • packages/web/src/app/(app)/settings/apiKeys/page.tsx
  • packages/web/src/app/(app)/settings/components/settingsCard.tsx
  • packages/web/src/app/(app)/settings/components/sidebar-nav.tsx
  • packages/web/src/app/(app)/settings/connections/page.tsx
  • packages/web/src/app/(app)/settings/general/generalPage.tsx
  • packages/web/src/app/(app)/settings/general/page.tsx
  • packages/web/src/app/(app)/settings/layout.tsx
  • packages/web/src/app/(app)/settings/license/activationCodeCard.tsx
  • packages/web/src/app/(app)/settings/license/offlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/licenseInactiveBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/onlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/planActionsMenu.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/removeActivationCodeDialog.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/trialMissingPaymentMethodBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/upcomingYearlyRenewalBanner.tsx
  • packages/web/src/app/(app)/settings/license/page.tsx
  • packages/web/src/app/(app)/settings/license/recentInvoicesCard.tsx
  • packages/web/src/app/(app)/settings/license/types.ts
  • packages/web/src/app/(app)/settings/license/yearlyTermSeatsUsageCard.tsx
  • packages/web/src/app/(app)/settings/linked-accounts/page.tsx
  • packages/web/src/app/(app)/settings/mcp/clientCard.tsx
  • packages/web/src/app/(app)/settings/mcp/clients.ts
  • packages/web/src/app/(app)/settings/mcp/mcpEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/mcp/mcpPage.tsx
  • packages/web/src/app/(app)/settings/mcp/page.tsx
  • packages/web/src/app/(app)/settings/members/components/inviteMemberCard.tsx
  • packages/web/src/app/(app)/settings/members/components/invitesList.tsx
  • packages/web/src/app/(app)/settings/members/components/membersList.tsx
  • packages/web/src/app/(app)/settings/members/components/requestsList.tsx
  • packages/web/src/app/(app)/settings/members/page.tsx
  • packages/web/src/app/(app)/settings/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/mcpToolPermissionsPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/prefabConnectorPopover.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentUnavailableMessage.tsx
  • packages/web/src/app/api/(client)/client.ts
  • packages/web/src/app/api/(server)/changelog/entries/route.ts
  • packages/web/src/app/api/(server)/chat/blocking/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-authorization-server/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-protected-resource/[...path]/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/types.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.ts
  • packages/web/src/app/api/(server)/ee/audit/route.ts
  • packages/web/src/app/api/(server)/ee/chat/[chatId]/searchMembers/route.ts
  • packages/web/src/app/api/(server)/ee/chat/route.ts
  • packages/web/src/app/api/(server)/ee/chats/route.ts
  • packages/web/src/app/api/(server)/ee/chats/types.ts
  • packages/web/src/app/api/(server)/ee/mcp/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/register/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/revoke/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/token/route.ts
  • packages/web/src/app/api/(server)/ee/permissionSyncStatus/api.ts
  • packages/web/src/app/api/(server)/ee/user/route.ts
  • packages/web/src/app/api/(server)/ee/users/route.ts
  • packages/web/src/app/api/(server)/offers/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/components/anonymousAccessToggle.tsx
  • packages/web/src/app/components/authMethodSelector.tsx
  • packages/web/src/app/components/organizationAccessSettings.tsx
  • packages/web/src/app/globals.css
  • packages/web/src/app/invite/actions.ts
  • packages/web/src/app/invite/page.tsx
  • packages/web/src/app/layout.tsx
  • packages/web/src/app/login/components/loginForm.tsx
  • packages/web/src/app/login/page.tsx
  • packages/web/src/app/not-found.tsx
  • packages/web/src/app/oauth/authorize/page.tsx
  • packages/web/src/app/onboard/components/alreadyLicensedStep.tsx
  • packages/web/src/app/onboard/components/completeOnboardingButton.tsx
  • packages/web/src/app/onboard/components/trialStep.tsx
  • packages/web/src/app/onboard/page.tsx
  • packages/web/src/app/posthogProvider.tsx
  • packages/web/src/app/progressBarProvider.tsx
  • packages/web/src/app/signup/page.tsx
  • packages/web/src/auth.ts
  • packages/web/src/components/ui/alert.tsx
  • packages/web/src/components/ui/data-table.tsx
  • packages/web/src/components/ui/dialog.tsx
  • packages/web/src/components/ui/sidebar.tsx

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v5

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 and usage tips.

@github-actions

github-actionsBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

License Audit

⚠️Status: PASS

MetricCount
Total packages2133
Resolved (non-standard)11
Unresolved0
Strong copyleft0
Weak copyleft39

Weak Copyleft Packages (informational)

PackageVersionLicense
@img/sharp-libvips-darwin-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.0.5LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-ppc641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-riscv641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.2.4LGPL-3.0-or-later
@img/sharp-wasm320.33.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-wasm320.34.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-win32-arm640.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.34.5Apache-2.0 AND LGPL-3.0-or-later
axe-core4.10.3MPL-2.0
dompurify3.4.0(MPL-2.0 OR Apache-2.0)
lightningcss1.32.0MPL-2.0
lightningcss-android-arm641.32.0MPL-2.0
lightningcss-darwin-arm641.32.0MPL-2.0
lightningcss-darwin-x641.32.0MPL-2.0
lightningcss-freebsd-x641.32.0MPL-2.0
lightningcss-linux-arm-gnueabihf1.32.0MPL-2.0
lightningcss-linux-arm64-gnu1.32.0MPL-2.0
lightningcss-linux-arm64-musl1.32.0MPL-2.0
lightningcss-linux-x64-gnu1.32.0MPL-2.0
lightningcss-linux-x64-musl1.32.0MPL-2.0
lightningcss-win32-arm64-msvc1.32.0MPL-2.0
lightningcss-win32-x64-msvc1.32.0MPL-2.0
Resolved Packages (11)
PackageVersionOriginalResolvedSource
@react-grab/cli0.1.23UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/cli0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/mcp0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
codemirror-lang-elixir4.0.0UNKNOWNApache-2.0GitHub repo (livebook-dev/codemirror-lang-elixir LICENSE)
element-source0.0.3UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
lezer-elixir1.1.2UNKNOWNApache-2.0GitHub repo (livebook-dev/lezer-elixir LICENSE)
map-stream0.1.0UNKNOWNMITGitHub repo (dominictarr/map-stream LICENCE)
memorystream0.3.1UNKNOWNMITextracted from object (npm licenses[0].type field)
pause-stream0.0.11["MIT","Apache2"]MIT OR Apache-2.0extracted from object array + GitHub repo (dominictarr/pause-stream LICENSE, dual licensed)
posthog-js1.369.0SEE LICENSE IN LICENSEApache-2.0GitHub repo (PostHog/posthog-js LICENSE file)
valid-url1.0.9UNKNOWNMITGitHub repo (ogt/valid-url LICENSE file)

* wip
* remove unused hook
* Add collapse sidebar button
* refactor settings into sidebar as a override context
* chat thread styling
* notification dot
* improved rendering
* fix light mode
* imporved api key page
* add chats page
* not found nit
* guest sidebar footer
* add tooltip for sidebar collapse button
* nit
* onboard nit
* fix permission sync banner
* what's new
* profile settings
* home view settings
* general settings
* remove shadow
* changelog
* feedback
brendan-kellamand others added 5 commits April 24, 2026 08:53
* wip on service ping
* add concept of License to the database and wire it into the enitlements system
* wip on e2e checkout flow
* basic card to display current plan
* store activation code at rest
* add manage subscription button
* wip on lighthouse client
* wip on lighthouse client
* remove the concept of a plan and just rely on entitlements at the app layer
* fix sidebar
* add temporary refresh license button
* clarified org availability design
* entitlements naming nit
* remove concept of a GUEST user
* remove anonymous-access entitlement
* change offline license to support optional seats
* handle license validation for all paths
* refactor some actions
* add explicit service ping calls to user <> organization update paths
* fix refresh bug with sidebar
* add billing details card
* fix invite redemption when user already a member
User was hitting a unique constraint on UserToOrg(orgId, userId) when
redeeming an invite, because onCreateUser auto-joins new signups in
self-serve mode and redeemInvite then tried to create the same row.
Make the insert idempotent via upsert so the downstream AccountRequest
and invite cleanup still runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wip on license card
* further wip on license card / activaction code card
* add recent invoices UI
* nit on seats terminology
* feat(web): surface subscription cancellation on license card
Adds cancelAt to the License model and the lighthouse ping schema, and
renders "Cancels on <date>" on the current plan card when there's no
upcoming renewal. Prefers "Next renewal" when Stripe still has an
upcoming invoice — so subscriptions scheduled to end after the next
billing cycle keep showing the renewal row.
Also makes nextRenewalAt / nextRenewalAmount nullable to match the
lighthouse response, and guards new Date() against null in servicePing.
Adds a CLAUDE.md under the lighthouse feature folder pointing at the
service repo so the two schemas stay in lockstep.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): add offline license card to settings
Renders a dedicated card for offline (SOURCEBOT_EE_LICENSE_KEY) licenses
showing the license id, seat cap, and expiry. When an offline license
is present, the page skips the online license lookup entirely to mirror
the precedence in entitlements.ts.
Also adds a header row with a mailto link to support and an "All plans"
shortcut to the public pricing page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): banner system for license + permission sync
Introduces a priority-ordered, single-slot banner system under
(app)/components/banners/. A server-side resolver picks the highest-priority
banner that matches the current context (role, license state, offline
license, permission-sync status) and renders it through a shared BannerShell
that handles per-day dismissal via cookies.
Banners included:
- License expired (everyone, non-dismissible, role-aware copy)
- License expiry heads-up (owner, dismissible, 14d window, uses
formatDistance for relative copy)
- Invoice past due (owner, non-dismissible)
- Permission sync pending (everyone, non-dismissible, migrated from the
prior standalone component through BannerShell)
Precedence mirrors entitlements.ts: offline license is the sole source
of truth when present, so online billing state is ignored.
Also splits getValidOfflineLicense into a decode-only path so
getOfflineLicenseMetadata can surface expired licenses to the UI.
Includes bannerResolver.test.ts covering priority, audience filtering,
dismissal filtering, offline/online expiry rules, and permission sync.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* handle failure case where lighthouse cannot be reached
* chore(web): mirror lighthouse trial + checkout schema changes
Adds trialEnd to the ping response schema and installId / requestTrial
to the checkout request schema so types match the lighthouse service.
createCheckoutSession passes the instance's SOURCEBOT_INSTALL_ID and
defaults requestTrial to false (the existing "upgrade" button is not
a trial path).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): trial banner + plumbing
Adds a trial banner to the owner-facing banner stack and the
surrounding plumbing:
- Schema: License.trialEnd, License.hasPaymentMethod, Org.trialUsedAt
(durable flag that survives license deactivation). Two migrations.
- servicePing persists trialEnd / hasPaymentMethod and flips
Org.trialUsedAt on first trial sync.
- Trial banner (owner, dismissible, priority 25): title uses
formatDistance ("Your trial ends in 10 days"); copy + action branch
on hasPaymentMethod. With-PM variant links to /settings/license;
no-PM variant opens the Stripe portal via a new
OpenBillingPortalButton (LoadingButton + createPortalSession).
- currentPlanCard gains a "Trial ends on" fallback column for the
trial-without-PM case (where nextRenewalAt is null).
- activationCodeCard accepts isTrialEligible and flips its checkout
button from "Purchase a license" to "Start a free trial" when the
org hasn't trialed yet, passing requestTrial through to the checkout
endpoint.
- Types mirror the new lighthouse fields (trialEnd, hasPaymentMethod)
and the checkout request additions (installId, requestTrial).
Side-trips to Stripe (portal, checkout) now append ?refresh=true so
the license resyncs on return; trial-checkout also appends
?trial_used=true so Org.trialUsedAt flips immediately (closes the UX
gap between checkout completion and activation-code entry). page.tsx
handles both params, preserves any other query params, and redirects
to a clean URL.
Also: fetchWithRetry now only retries 5xx, 408, and 429 — 4xx errors
(e.g. TRIAL_ALREADY_USED at 409) propagate immediately instead of
retrying pointlessly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add badges to invoice cards
* add basic billing docs
* refactor(lighthouse): throw ServiceErrorException on ping failure
syncWithLighthouse previously swallowed ping errors with a log and early
return, which masked real problems. Flip the model: on a lighthouse
ServiceError response, throw ServiceErrorException. The sew() middleware
already knows how to marshal that into an API response for user-initiated
paths.
Callers fall into two camps:
- Propagate (user-initiated): activateLicense and refreshLicense. The
existing try/catch in activateLicense now correctly rolls back the
license row when lighthouse rejects the activation code; refreshLicense
lets the throw propagate so the UI surfaces a toast.
- Swallow explicitly (background / side-effect): license page load, the
24h cron, user-approval, and signup paths all wrap with
`.catch(() => { /* ignore */ })`. These happen as a side effect of
other successful operations; a ping failure shouldn't block them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feedback
* fix tests
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@brendan-kellam
brendan-kellam marked this pull request as ready for review May 21, 2026 21:34
msukkariand others added 19 commits May 30, 2026 12:38
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): prevent top banner from pushing the chat prompt off-screen
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brendan Kellam <brendan@sourcebot.dev>
The code preview panel now persists the scroll position per
file/revision to sessionStorage and restores it on mount. Restoration
is skipped when a highlight_range query param is present so the existing
highlight scroll-into-view takes precedence.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ers (#1262)
Switches the safe.directory "*" config from --global (only written to
/root/.gitconfig) to --system (/etc/gitconfig) so it applies regardless
of which user runs git. The image intentionally sets no USER directive
and can be run as an arbitrary --user, where the global config was never
read, leaving the "dubious ownership" error unfixed.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)
* chore: remove embedded Postgres and Redis from the Docker image
As of v5, Sourcebot no longer ships an embedded Postgres or Redis.
External instances are now required via DATABASE_URL and REDIS_URL.
- Dockerfile: drop postgresql16/redis packages, DATABASE_DATA_DIR/
REDIS_DATA_DIR env, postgres/redis users, and /run/postgresql setup
- entrypoint.sh: hard-fail with guidance when DATABASE_URL/REDIS_URL are
unset; remove embedded init/startup blocks
- supervisord.conf: remove the redis program
- docs: mark DATABASE_URL/REDIS_URL required, drop data-dir vars, document
the breaking change and data migration in the v4-to-v5 guide
- CHANGELOG: note the breaking change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: point CHANGELOG entry at PR #1264
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* changelog
* docs: expand v4-to-v5 guide; require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY
- entrypoint.sh: require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY explicitly
(no auto-generation, no plaintext file loading); hard-fail with migration
guidance and warn if the legacy plaintext files linger
- v4-to-v5 guide: document the secrets, role-management, and external
Postgres/Redis breaking changes with per-item migration steps
- environment-variables: mark both secrets required
- roles-and-permissions: add default-role-by-plan table
- CHANGELOG: update breaking-change entries
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs nit
* changelog nit
* final nits
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
brendan-kellamand others added 2 commits June 2, 2026 20:29
…ces (#1267)
* feat(web): graceful error and loading states for billing/offers surfaces
Replace silent `null` returns with recoverable error states when the offers
fetch fails, across onboarding, the upsell dialog/panel, and feature gates:
- Onboarding trial step: reframe the error copy and add a "View pricing" link.
- UpsellDialog / UpsellPanel: shared UpsellLoadError fallback with a retry,
Status page link, and role-aware copy (owners get an outbound-access hint to
deployments.sourcebot.dev + Learn more; members are routed to their admin).
- UpsellPanel: add a `loadingVariant` prop so full-area feature gates render a
centered spinner while the in-flow license card keeps its skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* nit
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add scopes as part of the prisma schema
* Add MCP OAuth scope discovery and selection
* Refactor MCP scopes into configurable entries
* Refactor MCP server tool data table
* Add MCP server tool permissions
* Cache MCP tool definitions in Redis
* Auto-save MCP tool permission changes
* Avoid expensive tool fetch after updating tool permissions. Just update react query cache instead
* deduplicate some code for cleanliness
* Squash prisma migrations. Update redis cache for mcp tools to be per user, 1h time out
* update prisma migrations
* Update mcpScope to be referred to as mcpOAuthScope across the codebase
* Add documentation for scopes and permissions
* Update docs to say Ask Sourcebot
---------
Co-authored-by: Jack Minnetian <270441393+BlueBottleLatte@users.noreply.github.com>
Comment threadpackages/web/src/ee/features/chat/mcp/mcpToolSets.ts Dismissed
@brendan-kellam
brendan-kellam merged commit 72be168 into mainJun 3, 2026
11 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Jun 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@brendan-kellam@github-advanced-security@msukkari@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

v5 (#1097) - #1106

Merged
brendan-kellam merged 91 commits into
mainfrom
v5
Jun 3, 2026
Merged

v5 (#1097)#1106
brendan-kellam merged 91 commits into
mainfrom
v5

Conversation

@brendan-kellam

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitaiBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 284 files, which is 134 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6868608-c7fa-4c64-8446-2ec8c11ca1c3

📥 Commits

Reviewing files that changed from the base of the PR and between 740bcc9 and ded4282.

⛔ Files ignored due to path filters (16)
  • docs/images/connectors_account_page.png is excluded by !**/*.png
  • docs/images/connectors_edit_scopes.png is excluded by !**/*.png
  • docs/images/connectors_edit_tool_permissions.png is excluded by !**/*.png
  • docs/images/connectors_oauth_scopes.png is excluded by !**/*.png
  • docs/images/connectors_permission_request.png is excluded by !**/*.png
  • docs/images/connectors_static_registration.png is excluded by !**/*.png
  • docs/images/connectors_toggle_off.png is excluded by !**/*.png
  • docs/images/connectors_tool_permissions.png is excluded by !**/*.png
  • docs/images/setup_sourcebot_splash.png is excluded by !**/*.png
  • packages/web/public/claude_code.svg is excluded by !**/*.svg
  • packages/web/public/codex.svg is excluded by !**/*.svg
  • packages/web/public/cursor_dark.svg is excluded by !**/*.svg
  • packages/web/public/cursor_light.svg is excluded by !**/*.svg
  • packages/web/public/vscode.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_dark.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_light.svg is excluded by !**/*.svg
📒 Files selected for processing (284)
  • .env.development
  • .github/workflows/release-mcp.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docker-compose.yml
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • docs/docs/activating-a-subscription.mdx
  • docs/docs/billing.mdx
  • docs/docs/configuration/audit-logs.mdx
  • docs/docs/configuration/auth/access-settings.mdx
  • docs/docs/configuration/auth/authentication.mdx
  • docs/docs/configuration/auth/providers.mdx
  • docs/docs/configuration/auth/roles-and-permissions.mdx
  • docs/docs/configuration/config-file.mdx
  • docs/docs/configuration/declarative-config.mdx
  • docs/docs/configuration/environment-variables.mdx
  • docs/docs/configuration/idp.mdx
  • docs/docs/connections/ado-cloud.mdx
  • docs/docs/connections/ado-server.mdx
  • docs/docs/connections/bitbucket-cloud.mdx
  • docs/docs/connections/bitbucket-data-center.mdx
  • docs/docs/connections/generic-git-host.mdx
  • docs/docs/connections/gerrit.mdx
  • docs/docs/connections/gitea.mdx
  • docs/docs/connections/github.mdx
  • docs/docs/connections/gitlab.mdx
  • docs/docs/connections/indexing-your-code.mdx
  • docs/docs/connections/local-repos.mdx
  • docs/docs/deployment/docker-compose.mdx
  • docs/docs/deployment/infrastructure/architecture.mdx
  • docs/docs/deployment/sizing-guide.mdx
  • docs/docs/features/agents/agents.mdx
  • docs/docs/features/ask/ask-sourcebot.mdx
  • docs/docs/features/ask/chat-sharing.mdx
  • docs/docs/features/ask/connectors.mdx
  • docs/docs/features/mcp-server.mdx
  • docs/docs/features/permission-syncing.mdx
  • docs/docs/features/search/code-search.mdx
  • docs/docs/features/search/multi-branch-indexing.mdx
  • docs/docs/features/search/search-contexts.mdx
  • docs/docs/free-trial.mdx
  • docs/docs/license-key.mdx
  • docs/docs/misc/architecture.mdx
  • docs/docs/misc/scalability.mdx
  • docs/docs/misc/service-ping.mdx
  • docs/docs/misc/telemetry.mdx
  • docs/docs/overview.mdx
  • docs/docs/upgrade/v3-to-v4-guide.mdx
  • docs/docs/upgrade/v4-to-v5-guide.mdx
  • docs/snippets/license-key-required.mdx
  • entrypoint.sh
  • packages/backend/src/__mocks__/prisma.ts
  • packages/backend/src/api.ts
  • packages/backend/src/ee/accountPermissionSyncer.ts
  • packages/backend/src/ee/repoPermissionSyncer.ts
  • packages/backend/src/ee/syncSearchContexts.test.ts
  • packages/backend/src/ee/syncSearchContexts.ts
  • packages/backend/src/entitlements.ts
  • packages/backend/src/github.ts
  • packages/backend/src/index.ts
  • packages/backend/src/posthog.ts
  • packages/backend/src/prisma.ts
  • packages/backend/src/redis.ts
  • packages/backend/src/utils.ts
  • packages/backend/vitest.config.ts
  • packages/db/prisma/migrations/20260502000000_remove_guest_org_role/migration.sql
  • packages/db/prisma/migrations/20260509000000_add_license_table/migration.sql
  • packages/db/prisma/migrations/20260523064558_add_repo_visit_table/migration.sql
  • packages/db/prisma/migrations/20260525214409_add_changelog_table/migration.sql
  • packages/db/prisma/migrations/20260526013307_add_user_last_active_at/migration.sql
  • packages/db/prisma/migrations/20260603172622_add_mcp_connectors/migration.sql
  • packages/db/prisma/schema.prisma
  • packages/db/tools/scriptRunner.ts
  • packages/db/tools/scripts/inject-chat-data.ts
  • packages/setupWizard/README.md
  • packages/setupWizard/package.json
  • packages/setupWizard/src/azuredevops.ts
  • packages/setupWizard/src/bitbucket.ts
  • packages/setupWizard/src/genericGit.ts
  • packages/setupWizard/src/gerrit.ts
  • packages/setupWizard/src/gitea.ts
  • packages/setupWizard/src/github.ts
  • packages/setupWizard/src/gitlab.ts
  • packages/setupWizard/src/index.ts
  • packages/setupWizard/src/localRepos.ts
  • packages/setupWizard/src/models.ts
  • packages/setupWizard/src/tabCheckbox.ts
  • packages/setupWizard/src/utils.ts
  • packages/setupWizard/tsconfig.json
  • packages/shared/package.json
  • packages/shared/src/constants.ts
  • packages/shared/src/crypto.ts
  • packages/shared/src/entitlements.test.ts
  • packages/shared/src/entitlements.ts
  • packages/shared/src/env.server.test.ts
  • packages/shared/src/env.server.ts
  • packages/shared/src/index.client.ts
  • packages/shared/src/index.server.ts
  • packages/shared/src/redis.ts
  • packages/shared/src/types.ts
  • packages/shared/src/versionUtils.ts
  • packages/shared/vitest.config.ts
  • packages/web/next.config.mjs
  • packages/web/package.json
  • packages/web/src/__mocks__/prisma.ts
  • packages/web/src/actions.ts
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/page.tsx
  • packages/web/src/app/(app)/@sidebar/components/changelogEntryDialog.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/chatHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/repoVisitHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/header.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/sidebarBase.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeBadge.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeButton.tsx
  • packages/web/src/app/(app)/@sidebar/components/whatsNewSidebarButton.tsx
  • packages/web/src/app/(app)/agents/page.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/components/landingPage.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/page.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/pureCodePreviewPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/trackRepoVisit.tsx
  • packages/web/src/app/(app)/browse/[...path]/page.tsx
  • packages/web/src/app/(app)/browse/actions.ts
  • packages/web/src/app/(app)/browse/components/bottomPanel.tsx
  • packages/web/src/app/(app)/browse/components/pureFileTreePanel.tsx
  • packages/web/src/app/(app)/browse/layout.tsx
  • packages/web/src/app/(app)/browse/layoutClient.tsx
  • packages/web/src/app/(app)/chat/[id]/page.tsx
  • packages/web/src/app/(app)/chat/chatLandingPage.tsx
  • packages/web/src/app/(app)/chat/components/chatActionsDropdown.tsx
  • packages/web/src/app/(app)/chat/components/chatSidePanel.tsx
  • packages/web/src/app/(app)/chat/components/landingPageChatBox.tsx
  • packages/web/src/app/(app)/chat/components/mcpOAuthStatusToast.tsx
  • packages/web/src/app/(app)/chat/components/tutorialDialog.tsx
  • packages/web/src/app/(app)/chat/layout.tsx
  • packages/web/src/app/(app)/chat/page.tsx
  • packages/web/src/app/(app)/chats/chatsPage.tsx
  • packages/web/src/app/(app)/chats/page.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenu.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenuGroup.tsx
  • packages/web/src/app/(app)/components/banners/actions.ts
  • packages/web/src/app/(app)/components/banners/bannerHeightObserver.tsx
  • packages/web/src/app/(app)/components/banners/bannerResolver.test.ts
  • packages/web/src/app/(app)/components/banners/bannerResolver.tsx
  • packages/web/src/app/(app)/components/banners/bannerShell.tsx
  • packages/web/src/app/(app)/components/banners/bannerSlot.tsx
  • packages/web/src/app/(app)/components/banners/invoicePastDueBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiredBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiryHeadsUpBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseReboundElsewhereBanner.tsx
  • packages/web/src/app/(app)/components/banners/openBillingPortalButton.tsx
  • packages/web/src/app/(app)/components/banners/permissionSyncBanner.tsx
  • packages/web/src/app/(app)/components/banners/refreshLicenseButton.tsx
  • packages/web/src/app/(app)/components/banners/servicePingFailedBanner.tsx
  • packages/web/src/app/(app)/components/banners/trialBanner.tsx
  • packages/web/src/app/(app)/components/banners/types.ts
  • packages/web/src/app/(app)/components/banners/upgradeAvailableBanner.tsx
  • packages/web/src/app/(app)/components/meControlDropdownMenu.tsx
  • packages/web/src/app/(app)/components/navigationMenu/index.tsx
  • packages/web/src/app/(app)/components/navigationMenu/navigationItems.tsx
  • packages/web/src/app/(app)/components/navigationMenu/progressIndicator.tsx
  • packages/web/src/app/(app)/components/notFound.tsx
  • packages/web/src/app/(app)/components/pageNotFound.tsx
  • packages/web/src/app/(app)/components/searchModeSelector.tsx
  • packages/web/src/app/(app)/components/topBar.tsx
  • packages/web/src/app/(app)/components/upgradeToast.tsx
  • packages/web/src/app/(app)/components/whatsNewIndicator.tsx
  • packages/web/src/app/(app)/layout.tsx
  • packages/web/src/app/(app)/page.tsx
  • packages/web/src/app/(app)/repos/[id]/page.tsx
  • packages/web/src/app/(app)/repos/layout.tsx
  • packages/web/src/app/(app)/search/components/searchLandingPage.tsx
  • packages/web/src/app/(app)/search/components/searchResultsPage.tsx
  • packages/web/src/app/(app)/search/page.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/accountAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/analytics/analyticsEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/analytics/page.tsx
  • packages/web/src/app/(app)/settings/apiKeys/apiKeysPage.tsx
  • packages/web/src/app/(app)/settings/apiKeys/columns.tsx
  • packages/web/src/app/(app)/settings/apiKeys/page.tsx
  • packages/web/src/app/(app)/settings/components/settingsCard.tsx
  • packages/web/src/app/(app)/settings/components/sidebar-nav.tsx
  • packages/web/src/app/(app)/settings/connections/page.tsx
  • packages/web/src/app/(app)/settings/general/generalPage.tsx
  • packages/web/src/app/(app)/settings/general/page.tsx
  • packages/web/src/app/(app)/settings/layout.tsx
  • packages/web/src/app/(app)/settings/license/activationCodeCard.tsx
  • packages/web/src/app/(app)/settings/license/offlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/licenseInactiveBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/onlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/planActionsMenu.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/removeActivationCodeDialog.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/trialMissingPaymentMethodBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/upcomingYearlyRenewalBanner.tsx
  • packages/web/src/app/(app)/settings/license/page.tsx
  • packages/web/src/app/(app)/settings/license/recentInvoicesCard.tsx
  • packages/web/src/app/(app)/settings/license/types.ts
  • packages/web/src/app/(app)/settings/license/yearlyTermSeatsUsageCard.tsx
  • packages/web/src/app/(app)/settings/linked-accounts/page.tsx
  • packages/web/src/app/(app)/settings/mcp/clientCard.tsx
  • packages/web/src/app/(app)/settings/mcp/clients.ts
  • packages/web/src/app/(app)/settings/mcp/mcpEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/mcp/mcpPage.tsx
  • packages/web/src/app/(app)/settings/mcp/page.tsx
  • packages/web/src/app/(app)/settings/members/components/inviteMemberCard.tsx
  • packages/web/src/app/(app)/settings/members/components/invitesList.tsx
  • packages/web/src/app/(app)/settings/members/components/membersList.tsx
  • packages/web/src/app/(app)/settings/members/components/requestsList.tsx
  • packages/web/src/app/(app)/settings/members/page.tsx
  • packages/web/src/app/(app)/settings/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/mcpToolPermissionsPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/prefabConnectorPopover.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentUnavailableMessage.tsx
  • packages/web/src/app/api/(client)/client.ts
  • packages/web/src/app/api/(server)/changelog/entries/route.ts
  • packages/web/src/app/api/(server)/chat/blocking/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-authorization-server/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-protected-resource/[...path]/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/types.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.ts
  • packages/web/src/app/api/(server)/ee/audit/route.ts
  • packages/web/src/app/api/(server)/ee/chat/[chatId]/searchMembers/route.ts
  • packages/web/src/app/api/(server)/ee/chat/route.ts
  • packages/web/src/app/api/(server)/ee/chats/route.ts
  • packages/web/src/app/api/(server)/ee/chats/types.ts
  • packages/web/src/app/api/(server)/ee/mcp/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/register/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/revoke/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/token/route.ts
  • packages/web/src/app/api/(server)/ee/permissionSyncStatus/api.ts
  • packages/web/src/app/api/(server)/ee/user/route.ts
  • packages/web/src/app/api/(server)/ee/users/route.ts
  • packages/web/src/app/api/(server)/offers/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/components/anonymousAccessToggle.tsx
  • packages/web/src/app/components/authMethodSelector.tsx
  • packages/web/src/app/components/organizationAccessSettings.tsx
  • packages/web/src/app/globals.css
  • packages/web/src/app/invite/actions.ts
  • packages/web/src/app/invite/page.tsx
  • packages/web/src/app/layout.tsx
  • packages/web/src/app/login/components/loginForm.tsx
  • packages/web/src/app/login/page.tsx
  • packages/web/src/app/not-found.tsx
  • packages/web/src/app/oauth/authorize/page.tsx
  • packages/web/src/app/onboard/components/alreadyLicensedStep.tsx
  • packages/web/src/app/onboard/components/completeOnboardingButton.tsx
  • packages/web/src/app/onboard/components/trialStep.tsx
  • packages/web/src/app/onboard/page.tsx
  • packages/web/src/app/posthogProvider.tsx
  • packages/web/src/app/progressBarProvider.tsx
  • packages/web/src/app/signup/page.tsx
  • packages/web/src/auth.ts
  • packages/web/src/components/ui/alert.tsx
  • packages/web/src/components/ui/data-table.tsx
  • packages/web/src/components/ui/dialog.tsx
  • packages/web/src/components/ui/sidebar.tsx

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v5

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 and usage tips.

@github-actions

github-actionsBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

License Audit

⚠️Status: PASS

MetricCount
Total packages2133
Resolved (non-standard)11
Unresolved0
Strong copyleft0
Weak copyleft39

Weak Copyleft Packages (informational)

PackageVersionLicense
@img/sharp-libvips-darwin-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.0.5LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-ppc641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-riscv641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.2.4LGPL-3.0-or-later
@img/sharp-wasm320.33.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-wasm320.34.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-win32-arm640.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.34.5Apache-2.0 AND LGPL-3.0-or-later
axe-core4.10.3MPL-2.0
dompurify3.4.0(MPL-2.0 OR Apache-2.0)
lightningcss1.32.0MPL-2.0
lightningcss-android-arm641.32.0MPL-2.0
lightningcss-darwin-arm641.32.0MPL-2.0
lightningcss-darwin-x641.32.0MPL-2.0
lightningcss-freebsd-x641.32.0MPL-2.0
lightningcss-linux-arm-gnueabihf1.32.0MPL-2.0
lightningcss-linux-arm64-gnu1.32.0MPL-2.0
lightningcss-linux-arm64-musl1.32.0MPL-2.0
lightningcss-linux-x64-gnu1.32.0MPL-2.0
lightningcss-linux-x64-musl1.32.0MPL-2.0
lightningcss-win32-arm64-msvc1.32.0MPL-2.0
lightningcss-win32-x64-msvc1.32.0MPL-2.0
Resolved Packages (11)
PackageVersionOriginalResolvedSource
@react-grab/cli0.1.23UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/cli0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/mcp0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
codemirror-lang-elixir4.0.0UNKNOWNApache-2.0GitHub repo (livebook-dev/codemirror-lang-elixir LICENSE)
element-source0.0.3UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
lezer-elixir1.1.2UNKNOWNApache-2.0GitHub repo (livebook-dev/lezer-elixir LICENSE)
map-stream0.1.0UNKNOWNMITGitHub repo (dominictarr/map-stream LICENCE)
memorystream0.3.1UNKNOWNMITextracted from object (npm licenses[0].type field)
pause-stream0.0.11["MIT","Apache2"]MIT OR Apache-2.0extracted from object array + GitHub repo (dominictarr/pause-stream LICENSE, dual licensed)
posthog-js1.369.0SEE LICENSE IN LICENSEApache-2.0GitHub repo (PostHog/posthog-js LICENSE file)
valid-url1.0.9UNKNOWNMITGitHub repo (ogt/valid-url LICENSE file)

* wip
* remove unused hook
* Add collapse sidebar button
* refactor settings into sidebar as a override context
* chat thread styling
* notification dot
* improved rendering
* fix light mode
* imporved api key page
* add chats page
* not found nit
* guest sidebar footer
* add tooltip for sidebar collapse button
* nit
* onboard nit
* fix permission sync banner
* what's new
* profile settings
* home view settings
* general settings
* remove shadow
* changelog
* feedback
brendan-kellamand others added 5 commits April 24, 2026 08:53
* wip on service ping
* add concept of License to the database and wire it into the enitlements system
* wip on e2e checkout flow
* basic card to display current plan
* store activation code at rest
* add manage subscription button
* wip on lighthouse client
* wip on lighthouse client
* remove the concept of a plan and just rely on entitlements at the app layer
* fix sidebar
* add temporary refresh license button
* clarified org availability design
* entitlements naming nit
* remove concept of a GUEST user
* remove anonymous-access entitlement
* change offline license to support optional seats
* handle license validation for all paths
* refactor some actions
* add explicit service ping calls to user <> organization update paths
* fix refresh bug with sidebar
* add billing details card
* fix invite redemption when user already a member
User was hitting a unique constraint on UserToOrg(orgId, userId) when
redeeming an invite, because onCreateUser auto-joins new signups in
self-serve mode and redeemInvite then tried to create the same row.
Make the insert idempotent via upsert so the downstream AccountRequest
and invite cleanup still runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wip on license card
* further wip on license card / activaction code card
* add recent invoices UI
* nit on seats terminology
* feat(web): surface subscription cancellation on license card
Adds cancelAt to the License model and the lighthouse ping schema, and
renders "Cancels on <date>" on the current plan card when there's no
upcoming renewal. Prefers "Next renewal" when Stripe still has an
upcoming invoice — so subscriptions scheduled to end after the next
billing cycle keep showing the renewal row.
Also makes nextRenewalAt / nextRenewalAmount nullable to match the
lighthouse response, and guards new Date() against null in servicePing.
Adds a CLAUDE.md under the lighthouse feature folder pointing at the
service repo so the two schemas stay in lockstep.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): add offline license card to settings
Renders a dedicated card for offline (SOURCEBOT_EE_LICENSE_KEY) licenses
showing the license id, seat cap, and expiry. When an offline license
is present, the page skips the online license lookup entirely to mirror
the precedence in entitlements.ts.
Also adds a header row with a mailto link to support and an "All plans"
shortcut to the public pricing page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): banner system for license + permission sync
Introduces a priority-ordered, single-slot banner system under
(app)/components/banners/. A server-side resolver picks the highest-priority
banner that matches the current context (role, license state, offline
license, permission-sync status) and renders it through a shared BannerShell
that handles per-day dismissal via cookies.
Banners included:
- License expired (everyone, non-dismissible, role-aware copy)
- License expiry heads-up (owner, dismissible, 14d window, uses
formatDistance for relative copy)
- Invoice past due (owner, non-dismissible)
- Permission sync pending (everyone, non-dismissible, migrated from the
prior standalone component through BannerShell)
Precedence mirrors entitlements.ts: offline license is the sole source
of truth when present, so online billing state is ignored.
Also splits getValidOfflineLicense into a decode-only path so
getOfflineLicenseMetadata can surface expired licenses to the UI.
Includes bannerResolver.test.ts covering priority, audience filtering,
dismissal filtering, offline/online expiry rules, and permission sync.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* handle failure case where lighthouse cannot be reached
* chore(web): mirror lighthouse trial + checkout schema changes
Adds trialEnd to the ping response schema and installId / requestTrial
to the checkout request schema so types match the lighthouse service.
createCheckoutSession passes the instance's SOURCEBOT_INSTALL_ID and
defaults requestTrial to false (the existing "upgrade" button is not
a trial path).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): trial banner + plumbing
Adds a trial banner to the owner-facing banner stack and the
surrounding plumbing:
- Schema: License.trialEnd, License.hasPaymentMethod, Org.trialUsedAt
(durable flag that survives license deactivation). Two migrations.
- servicePing persists trialEnd / hasPaymentMethod and flips
Org.trialUsedAt on first trial sync.
- Trial banner (owner, dismissible, priority 25): title uses
formatDistance ("Your trial ends in 10 days"); copy + action branch
on hasPaymentMethod. With-PM variant links to /settings/license;
no-PM variant opens the Stripe portal via a new
OpenBillingPortalButton (LoadingButton + createPortalSession).
- currentPlanCard gains a "Trial ends on" fallback column for the
trial-without-PM case (where nextRenewalAt is null).
- activationCodeCard accepts isTrialEligible and flips its checkout
button from "Purchase a license" to "Start a free trial" when the
org hasn't trialed yet, passing requestTrial through to the checkout
endpoint.
- Types mirror the new lighthouse fields (trialEnd, hasPaymentMethod)
and the checkout request additions (installId, requestTrial).
Side-trips to Stripe (portal, checkout) now append ?refresh=true so
the license resyncs on return; trial-checkout also appends
?trial_used=true so Org.trialUsedAt flips immediately (closes the UX
gap between checkout completion and activation-code entry). page.tsx
handles both params, preserves any other query params, and redirects
to a clean URL.
Also: fetchWithRetry now only retries 5xx, 408, and 429 — 4xx errors
(e.g. TRIAL_ALREADY_USED at 409) propagate immediately instead of
retrying pointlessly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add badges to invoice cards
* add basic billing docs
* refactor(lighthouse): throw ServiceErrorException on ping failure
syncWithLighthouse previously swallowed ping errors with a log and early
return, which masked real problems. Flip the model: on a lighthouse
ServiceError response, throw ServiceErrorException. The sew() middleware
already knows how to marshal that into an API response for user-initiated
paths.
Callers fall into two camps:
- Propagate (user-initiated): activateLicense and refreshLicense. The
existing try/catch in activateLicense now correctly rolls back the
license row when lighthouse rejects the activation code; refreshLicense
lets the throw propagate so the UI surfaces a toast.
- Swallow explicitly (background / side-effect): license page load, the
24h cron, user-approval, and signup paths all wrap with
`.catch(() => { /* ignore */ })`. These happen as a side effect of
other successful operations; a ping failure shouldn't block them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feedback
* fix tests
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@brendan-kellam
brendan-kellam marked this pull request as ready for review May 21, 2026 21:34
msukkariand others added 19 commits May 30, 2026 12:38
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): prevent top banner from pushing the chat prompt off-screen
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brendan Kellam <brendan@sourcebot.dev>
The code preview panel now persists the scroll position per
file/revision to sessionStorage and restores it on mount. Restoration
is skipped when a highlight_range query param is present so the existing
highlight scroll-into-view takes precedence.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ers (#1262)
Switches the safe.directory "*" config from --global (only written to
/root/.gitconfig) to --system (/etc/gitconfig) so it applies regardless
of which user runs git. The image intentionally sets no USER directive
and can be run as an arbitrary --user, where the global config was never
read, leaving the "dubious ownership" error unfixed.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)
* chore: remove embedded Postgres and Redis from the Docker image
As of v5, Sourcebot no longer ships an embedded Postgres or Redis.
External instances are now required via DATABASE_URL and REDIS_URL.
- Dockerfile: drop postgresql16/redis packages, DATABASE_DATA_DIR/
REDIS_DATA_DIR env, postgres/redis users, and /run/postgresql setup
- entrypoint.sh: hard-fail with guidance when DATABASE_URL/REDIS_URL are
unset; remove embedded init/startup blocks
- supervisord.conf: remove the redis program
- docs: mark DATABASE_URL/REDIS_URL required, drop data-dir vars, document
the breaking change and data migration in the v4-to-v5 guide
- CHANGELOG: note the breaking change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: point CHANGELOG entry at PR #1264
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* changelog
* docs: expand v4-to-v5 guide; require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY
- entrypoint.sh: require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY explicitly
(no auto-generation, no plaintext file loading); hard-fail with migration
guidance and warn if the legacy plaintext files linger
- v4-to-v5 guide: document the secrets, role-management, and external
Postgres/Redis breaking changes with per-item migration steps
- environment-variables: mark both secrets required
- roles-and-permissions: add default-role-by-plan table
- CHANGELOG: update breaking-change entries
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs nit
* changelog nit
* final nits
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
brendan-kellamand others added 2 commits June 2, 2026 20:29
…ces (#1267)
* feat(web): graceful error and loading states for billing/offers surfaces
Replace silent `null` returns with recoverable error states when the offers
fetch fails, across onboarding, the upsell dialog/panel, and feature gates:
- Onboarding trial step: reframe the error copy and add a "View pricing" link.
- UpsellDialog / UpsellPanel: shared UpsellLoadError fallback with a retry,
Status page link, and role-aware copy (owners get an outbound-access hint to
deployments.sourcebot.dev + Learn more; members are routed to their admin).
- UpsellPanel: add a `loadingVariant` prop so full-area feature gates render a
centered spinner while the in-flow license card keeps its skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* nit
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add scopes as part of the prisma schema
* Add MCP OAuth scope discovery and selection
* Refactor MCP scopes into configurable entries
* Refactor MCP server tool data table
* Add MCP server tool permissions
* Cache MCP tool definitions in Redis
* Auto-save MCP tool permission changes
* Avoid expensive tool fetch after updating tool permissions. Just update react query cache instead
* deduplicate some code for cleanliness
* Squash prisma migrations. Update redis cache for mcp tools to be per user, 1h time out
* update prisma migrations
* Update mcpScope to be referred to as mcpOAuthScope across the codebase
* Add documentation for scopes and permissions
* Update docs to say Ask Sourcebot
---------
Co-authored-by: Jack Minnetian <270441393+BlueBottleLatte@users.noreply.github.com>
Comment threadpackages/web/src/ee/features/chat/mcp/mcpToolSets.ts Dismissed
@brendan-kellam
brendan-kellam merged commit 72be168 into mainJun 3, 2026
11 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Jun 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@brendan-kellam@github-advanced-security@msukkari@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

v5 (#1097) - #1106

Merged
brendan-kellam merged 91 commits into
mainfrom
v5
Jun 3, 2026
Merged

v5 (#1097)#1106
brendan-kellam merged 91 commits into
mainfrom
v5

Conversation

@brendan-kellam

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitaiBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 284 files, which is 134 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6868608-c7fa-4c64-8446-2ec8c11ca1c3

📥 Commits

Reviewing files that changed from the base of the PR and between 740bcc9 and ded4282.

⛔ Files ignored due to path filters (16)
  • docs/images/connectors_account_page.png is excluded by !**/*.png
  • docs/images/connectors_edit_scopes.png is excluded by !**/*.png
  • docs/images/connectors_edit_tool_permissions.png is excluded by !**/*.png
  • docs/images/connectors_oauth_scopes.png is excluded by !**/*.png
  • docs/images/connectors_permission_request.png is excluded by !**/*.png
  • docs/images/connectors_static_registration.png is excluded by !**/*.png
  • docs/images/connectors_toggle_off.png is excluded by !**/*.png
  • docs/images/connectors_tool_permissions.png is excluded by !**/*.png
  • docs/images/setup_sourcebot_splash.png is excluded by !**/*.png
  • packages/web/public/claude_code.svg is excluded by !**/*.svg
  • packages/web/public/codex.svg is excluded by !**/*.svg
  • packages/web/public/cursor_dark.svg is excluded by !**/*.svg
  • packages/web/public/cursor_light.svg is excluded by !**/*.svg
  • packages/web/public/vscode.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_dark.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_light.svg is excluded by !**/*.svg
📒 Files selected for processing (284)
  • .env.development
  • .github/workflows/release-mcp.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docker-compose.yml
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • docs/docs/activating-a-subscription.mdx
  • docs/docs/billing.mdx
  • docs/docs/configuration/audit-logs.mdx
  • docs/docs/configuration/auth/access-settings.mdx
  • docs/docs/configuration/auth/authentication.mdx
  • docs/docs/configuration/auth/providers.mdx
  • docs/docs/configuration/auth/roles-and-permissions.mdx
  • docs/docs/configuration/config-file.mdx
  • docs/docs/configuration/declarative-config.mdx
  • docs/docs/configuration/environment-variables.mdx
  • docs/docs/configuration/idp.mdx
  • docs/docs/connections/ado-cloud.mdx
  • docs/docs/connections/ado-server.mdx
  • docs/docs/connections/bitbucket-cloud.mdx
  • docs/docs/connections/bitbucket-data-center.mdx
  • docs/docs/connections/generic-git-host.mdx
  • docs/docs/connections/gerrit.mdx
  • docs/docs/connections/gitea.mdx
  • docs/docs/connections/github.mdx
  • docs/docs/connections/gitlab.mdx
  • docs/docs/connections/indexing-your-code.mdx
  • docs/docs/connections/local-repos.mdx
  • docs/docs/deployment/docker-compose.mdx
  • docs/docs/deployment/infrastructure/architecture.mdx
  • docs/docs/deployment/sizing-guide.mdx
  • docs/docs/features/agents/agents.mdx
  • docs/docs/features/ask/ask-sourcebot.mdx
  • docs/docs/features/ask/chat-sharing.mdx
  • docs/docs/features/ask/connectors.mdx
  • docs/docs/features/mcp-server.mdx
  • docs/docs/features/permission-syncing.mdx
  • docs/docs/features/search/code-search.mdx
  • docs/docs/features/search/multi-branch-indexing.mdx
  • docs/docs/features/search/search-contexts.mdx
  • docs/docs/free-trial.mdx
  • docs/docs/license-key.mdx
  • docs/docs/misc/architecture.mdx
  • docs/docs/misc/scalability.mdx
  • docs/docs/misc/service-ping.mdx
  • docs/docs/misc/telemetry.mdx
  • docs/docs/overview.mdx
  • docs/docs/upgrade/v3-to-v4-guide.mdx
  • docs/docs/upgrade/v4-to-v5-guide.mdx
  • docs/snippets/license-key-required.mdx
  • entrypoint.sh
  • packages/backend/src/__mocks__/prisma.ts
  • packages/backend/src/api.ts
  • packages/backend/src/ee/accountPermissionSyncer.ts
  • packages/backend/src/ee/repoPermissionSyncer.ts
  • packages/backend/src/ee/syncSearchContexts.test.ts
  • packages/backend/src/ee/syncSearchContexts.ts
  • packages/backend/src/entitlements.ts
  • packages/backend/src/github.ts
  • packages/backend/src/index.ts
  • packages/backend/src/posthog.ts
  • packages/backend/src/prisma.ts
  • packages/backend/src/redis.ts
  • packages/backend/src/utils.ts
  • packages/backend/vitest.config.ts
  • packages/db/prisma/migrations/20260502000000_remove_guest_org_role/migration.sql
  • packages/db/prisma/migrations/20260509000000_add_license_table/migration.sql
  • packages/db/prisma/migrations/20260523064558_add_repo_visit_table/migration.sql
  • packages/db/prisma/migrations/20260525214409_add_changelog_table/migration.sql
  • packages/db/prisma/migrations/20260526013307_add_user_last_active_at/migration.sql
  • packages/db/prisma/migrations/20260603172622_add_mcp_connectors/migration.sql
  • packages/db/prisma/schema.prisma
  • packages/db/tools/scriptRunner.ts
  • packages/db/tools/scripts/inject-chat-data.ts
  • packages/setupWizard/README.md
  • packages/setupWizard/package.json
  • packages/setupWizard/src/azuredevops.ts
  • packages/setupWizard/src/bitbucket.ts
  • packages/setupWizard/src/genericGit.ts
  • packages/setupWizard/src/gerrit.ts
  • packages/setupWizard/src/gitea.ts
  • packages/setupWizard/src/github.ts
  • packages/setupWizard/src/gitlab.ts
  • packages/setupWizard/src/index.ts
  • packages/setupWizard/src/localRepos.ts
  • packages/setupWizard/src/models.ts
  • packages/setupWizard/src/tabCheckbox.ts
  • packages/setupWizard/src/utils.ts
  • packages/setupWizard/tsconfig.json
  • packages/shared/package.json
  • packages/shared/src/constants.ts
  • packages/shared/src/crypto.ts
  • packages/shared/src/entitlements.test.ts
  • packages/shared/src/entitlements.ts
  • packages/shared/src/env.server.test.ts
  • packages/shared/src/env.server.ts
  • packages/shared/src/index.client.ts
  • packages/shared/src/index.server.ts
  • packages/shared/src/redis.ts
  • packages/shared/src/types.ts
  • packages/shared/src/versionUtils.ts
  • packages/shared/vitest.config.ts
  • packages/web/next.config.mjs
  • packages/web/package.json
  • packages/web/src/__mocks__/prisma.ts
  • packages/web/src/actions.ts
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/page.tsx
  • packages/web/src/app/(app)/@sidebar/components/changelogEntryDialog.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/chatHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/repoVisitHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/header.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/sidebarBase.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeBadge.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeButton.tsx
  • packages/web/src/app/(app)/@sidebar/components/whatsNewSidebarButton.tsx
  • packages/web/src/app/(app)/agents/page.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/components/landingPage.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/page.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/pureCodePreviewPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/trackRepoVisit.tsx
  • packages/web/src/app/(app)/browse/[...path]/page.tsx
  • packages/web/src/app/(app)/browse/actions.ts
  • packages/web/src/app/(app)/browse/components/bottomPanel.tsx
  • packages/web/src/app/(app)/browse/components/pureFileTreePanel.tsx
  • packages/web/src/app/(app)/browse/layout.tsx
  • packages/web/src/app/(app)/browse/layoutClient.tsx
  • packages/web/src/app/(app)/chat/[id]/page.tsx
  • packages/web/src/app/(app)/chat/chatLandingPage.tsx
  • packages/web/src/app/(app)/chat/components/chatActionsDropdown.tsx
  • packages/web/src/app/(app)/chat/components/chatSidePanel.tsx
  • packages/web/src/app/(app)/chat/components/landingPageChatBox.tsx
  • packages/web/src/app/(app)/chat/components/mcpOAuthStatusToast.tsx
  • packages/web/src/app/(app)/chat/components/tutorialDialog.tsx
  • packages/web/src/app/(app)/chat/layout.tsx
  • packages/web/src/app/(app)/chat/page.tsx
  • packages/web/src/app/(app)/chats/chatsPage.tsx
  • packages/web/src/app/(app)/chats/page.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenu.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenuGroup.tsx
  • packages/web/src/app/(app)/components/banners/actions.ts
  • packages/web/src/app/(app)/components/banners/bannerHeightObserver.tsx
  • packages/web/src/app/(app)/components/banners/bannerResolver.test.ts
  • packages/web/src/app/(app)/components/banners/bannerResolver.tsx
  • packages/web/src/app/(app)/components/banners/bannerShell.tsx
  • packages/web/src/app/(app)/components/banners/bannerSlot.tsx
  • packages/web/src/app/(app)/components/banners/invoicePastDueBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiredBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiryHeadsUpBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseReboundElsewhereBanner.tsx
  • packages/web/src/app/(app)/components/banners/openBillingPortalButton.tsx
  • packages/web/src/app/(app)/components/banners/permissionSyncBanner.tsx
  • packages/web/src/app/(app)/components/banners/refreshLicenseButton.tsx
  • packages/web/src/app/(app)/components/banners/servicePingFailedBanner.tsx
  • packages/web/src/app/(app)/components/banners/trialBanner.tsx
  • packages/web/src/app/(app)/components/banners/types.ts
  • packages/web/src/app/(app)/components/banners/upgradeAvailableBanner.tsx
  • packages/web/src/app/(app)/components/meControlDropdownMenu.tsx
  • packages/web/src/app/(app)/components/navigationMenu/index.tsx
  • packages/web/src/app/(app)/components/navigationMenu/navigationItems.tsx
  • packages/web/src/app/(app)/components/navigationMenu/progressIndicator.tsx
  • packages/web/src/app/(app)/components/notFound.tsx
  • packages/web/src/app/(app)/components/pageNotFound.tsx
  • packages/web/src/app/(app)/components/searchModeSelector.tsx
  • packages/web/src/app/(app)/components/topBar.tsx
  • packages/web/src/app/(app)/components/upgradeToast.tsx
  • packages/web/src/app/(app)/components/whatsNewIndicator.tsx
  • packages/web/src/app/(app)/layout.tsx
  • packages/web/src/app/(app)/page.tsx
  • packages/web/src/app/(app)/repos/[id]/page.tsx
  • packages/web/src/app/(app)/repos/layout.tsx
  • packages/web/src/app/(app)/search/components/searchLandingPage.tsx
  • packages/web/src/app/(app)/search/components/searchResultsPage.tsx
  • packages/web/src/app/(app)/search/page.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/accountAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/analytics/analyticsEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/analytics/page.tsx
  • packages/web/src/app/(app)/settings/apiKeys/apiKeysPage.tsx
  • packages/web/src/app/(app)/settings/apiKeys/columns.tsx
  • packages/web/src/app/(app)/settings/apiKeys/page.tsx
  • packages/web/src/app/(app)/settings/components/settingsCard.tsx
  • packages/web/src/app/(app)/settings/components/sidebar-nav.tsx
  • packages/web/src/app/(app)/settings/connections/page.tsx
  • packages/web/src/app/(app)/settings/general/generalPage.tsx
  • packages/web/src/app/(app)/settings/general/page.tsx
  • packages/web/src/app/(app)/settings/layout.tsx
  • packages/web/src/app/(app)/settings/license/activationCodeCard.tsx
  • packages/web/src/app/(app)/settings/license/offlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/licenseInactiveBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/onlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/planActionsMenu.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/removeActivationCodeDialog.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/trialMissingPaymentMethodBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/upcomingYearlyRenewalBanner.tsx
  • packages/web/src/app/(app)/settings/license/page.tsx
  • packages/web/src/app/(app)/settings/license/recentInvoicesCard.tsx
  • packages/web/src/app/(app)/settings/license/types.ts
  • packages/web/src/app/(app)/settings/license/yearlyTermSeatsUsageCard.tsx
  • packages/web/src/app/(app)/settings/linked-accounts/page.tsx
  • packages/web/src/app/(app)/settings/mcp/clientCard.tsx
  • packages/web/src/app/(app)/settings/mcp/clients.ts
  • packages/web/src/app/(app)/settings/mcp/mcpEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/mcp/mcpPage.tsx
  • packages/web/src/app/(app)/settings/mcp/page.tsx
  • packages/web/src/app/(app)/settings/members/components/inviteMemberCard.tsx
  • packages/web/src/app/(app)/settings/members/components/invitesList.tsx
  • packages/web/src/app/(app)/settings/members/components/membersList.tsx
  • packages/web/src/app/(app)/settings/members/components/requestsList.tsx
  • packages/web/src/app/(app)/settings/members/page.tsx
  • packages/web/src/app/(app)/settings/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/mcpToolPermissionsPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/prefabConnectorPopover.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentUnavailableMessage.tsx
  • packages/web/src/app/api/(client)/client.ts
  • packages/web/src/app/api/(server)/changelog/entries/route.ts
  • packages/web/src/app/api/(server)/chat/blocking/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-authorization-server/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-protected-resource/[...path]/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/types.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.ts
  • packages/web/src/app/api/(server)/ee/audit/route.ts
  • packages/web/src/app/api/(server)/ee/chat/[chatId]/searchMembers/route.ts
  • packages/web/src/app/api/(server)/ee/chat/route.ts
  • packages/web/src/app/api/(server)/ee/chats/route.ts
  • packages/web/src/app/api/(server)/ee/chats/types.ts
  • packages/web/src/app/api/(server)/ee/mcp/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/register/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/revoke/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/token/route.ts
  • packages/web/src/app/api/(server)/ee/permissionSyncStatus/api.ts
  • packages/web/src/app/api/(server)/ee/user/route.ts
  • packages/web/src/app/api/(server)/ee/users/route.ts
  • packages/web/src/app/api/(server)/offers/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/components/anonymousAccessToggle.tsx
  • packages/web/src/app/components/authMethodSelector.tsx
  • packages/web/src/app/components/organizationAccessSettings.tsx
  • packages/web/src/app/globals.css
  • packages/web/src/app/invite/actions.ts
  • packages/web/src/app/invite/page.tsx
  • packages/web/src/app/layout.tsx
  • packages/web/src/app/login/components/loginForm.tsx
  • packages/web/src/app/login/page.tsx
  • packages/web/src/app/not-found.tsx
  • packages/web/src/app/oauth/authorize/page.tsx
  • packages/web/src/app/onboard/components/alreadyLicensedStep.tsx
  • packages/web/src/app/onboard/components/completeOnboardingButton.tsx
  • packages/web/src/app/onboard/components/trialStep.tsx
  • packages/web/src/app/onboard/page.tsx
  • packages/web/src/app/posthogProvider.tsx
  • packages/web/src/app/progressBarProvider.tsx
  • packages/web/src/app/signup/page.tsx
  • packages/web/src/auth.ts
  • packages/web/src/components/ui/alert.tsx
  • packages/web/src/components/ui/data-table.tsx
  • packages/web/src/components/ui/dialog.tsx
  • packages/web/src/components/ui/sidebar.tsx

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v5

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 and usage tips.

@github-actions

github-actionsBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

License Audit

⚠️Status: PASS

MetricCount
Total packages2133
Resolved (non-standard)11
Unresolved0
Strong copyleft0
Weak copyleft39

Weak Copyleft Packages (informational)

PackageVersionLicense
@img/sharp-libvips-darwin-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.0.5LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-ppc641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-riscv641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.2.4LGPL-3.0-or-later
@img/sharp-wasm320.33.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-wasm320.34.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-win32-arm640.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.34.5Apache-2.0 AND LGPL-3.0-or-later
axe-core4.10.3MPL-2.0
dompurify3.4.0(MPL-2.0 OR Apache-2.0)
lightningcss1.32.0MPL-2.0
lightningcss-android-arm641.32.0MPL-2.0
lightningcss-darwin-arm641.32.0MPL-2.0
lightningcss-darwin-x641.32.0MPL-2.0
lightningcss-freebsd-x641.32.0MPL-2.0
lightningcss-linux-arm-gnueabihf1.32.0MPL-2.0
lightningcss-linux-arm64-gnu1.32.0MPL-2.0
lightningcss-linux-arm64-musl1.32.0MPL-2.0
lightningcss-linux-x64-gnu1.32.0MPL-2.0
lightningcss-linux-x64-musl1.32.0MPL-2.0
lightningcss-win32-arm64-msvc1.32.0MPL-2.0
lightningcss-win32-x64-msvc1.32.0MPL-2.0
Resolved Packages (11)
PackageVersionOriginalResolvedSource
@react-grab/cli0.1.23UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/cli0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/mcp0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
codemirror-lang-elixir4.0.0UNKNOWNApache-2.0GitHub repo (livebook-dev/codemirror-lang-elixir LICENSE)
element-source0.0.3UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
lezer-elixir1.1.2UNKNOWNApache-2.0GitHub repo (livebook-dev/lezer-elixir LICENSE)
map-stream0.1.0UNKNOWNMITGitHub repo (dominictarr/map-stream LICENCE)
memorystream0.3.1UNKNOWNMITextracted from object (npm licenses[0].type field)
pause-stream0.0.11["MIT","Apache2"]MIT OR Apache-2.0extracted from object array + GitHub repo (dominictarr/pause-stream LICENSE, dual licensed)
posthog-js1.369.0SEE LICENSE IN LICENSEApache-2.0GitHub repo (PostHog/posthog-js LICENSE file)
valid-url1.0.9UNKNOWNMITGitHub repo (ogt/valid-url LICENSE file)

* wip
* remove unused hook
* Add collapse sidebar button
* refactor settings into sidebar as a override context
* chat thread styling
* notification dot
* improved rendering
* fix light mode
* imporved api key page
* add chats page
* not found nit
* guest sidebar footer
* add tooltip for sidebar collapse button
* nit
* onboard nit
* fix permission sync banner
* what's new
* profile settings
* home view settings
* general settings
* remove shadow
* changelog
* feedback
brendan-kellamand others added 5 commits April 24, 2026 08:53
* wip on service ping
* add concept of License to the database and wire it into the enitlements system
* wip on e2e checkout flow
* basic card to display current plan
* store activation code at rest
* add manage subscription button
* wip on lighthouse client
* wip on lighthouse client
* remove the concept of a plan and just rely on entitlements at the app layer
* fix sidebar
* add temporary refresh license button
* clarified org availability design
* entitlements naming nit
* remove concept of a GUEST user
* remove anonymous-access entitlement
* change offline license to support optional seats
* handle license validation for all paths
* refactor some actions
* add explicit service ping calls to user <> organization update paths
* fix refresh bug with sidebar
* add billing details card
* fix invite redemption when user already a member
User was hitting a unique constraint on UserToOrg(orgId, userId) when
redeeming an invite, because onCreateUser auto-joins new signups in
self-serve mode and redeemInvite then tried to create the same row.
Make the insert idempotent via upsert so the downstream AccountRequest
and invite cleanup still runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wip on license card
* further wip on license card / activaction code card
* add recent invoices UI
* nit on seats terminology
* feat(web): surface subscription cancellation on license card
Adds cancelAt to the License model and the lighthouse ping schema, and
renders "Cancels on <date>" on the current plan card when there's no
upcoming renewal. Prefers "Next renewal" when Stripe still has an
upcoming invoice — so subscriptions scheduled to end after the next
billing cycle keep showing the renewal row.
Also makes nextRenewalAt / nextRenewalAmount nullable to match the
lighthouse response, and guards new Date() against null in servicePing.
Adds a CLAUDE.md under the lighthouse feature folder pointing at the
service repo so the two schemas stay in lockstep.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): add offline license card to settings
Renders a dedicated card for offline (SOURCEBOT_EE_LICENSE_KEY) licenses
showing the license id, seat cap, and expiry. When an offline license
is present, the page skips the online license lookup entirely to mirror
the precedence in entitlements.ts.
Also adds a header row with a mailto link to support and an "All plans"
shortcut to the public pricing page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): banner system for license + permission sync
Introduces a priority-ordered, single-slot banner system under
(app)/components/banners/. A server-side resolver picks the highest-priority
banner that matches the current context (role, license state, offline
license, permission-sync status) and renders it through a shared BannerShell
that handles per-day dismissal via cookies.
Banners included:
- License expired (everyone, non-dismissible, role-aware copy)
- License expiry heads-up (owner, dismissible, 14d window, uses
formatDistance for relative copy)
- Invoice past due (owner, non-dismissible)
- Permission sync pending (everyone, non-dismissible, migrated from the
prior standalone component through BannerShell)
Precedence mirrors entitlements.ts: offline license is the sole source
of truth when present, so online billing state is ignored.
Also splits getValidOfflineLicense into a decode-only path so
getOfflineLicenseMetadata can surface expired licenses to the UI.
Includes bannerResolver.test.ts covering priority, audience filtering,
dismissal filtering, offline/online expiry rules, and permission sync.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* handle failure case where lighthouse cannot be reached
* chore(web): mirror lighthouse trial + checkout schema changes
Adds trialEnd to the ping response schema and installId / requestTrial
to the checkout request schema so types match the lighthouse service.
createCheckoutSession passes the instance's SOURCEBOT_INSTALL_ID and
defaults requestTrial to false (the existing "upgrade" button is not
a trial path).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): trial banner + plumbing
Adds a trial banner to the owner-facing banner stack and the
surrounding plumbing:
- Schema: License.trialEnd, License.hasPaymentMethod, Org.trialUsedAt
(durable flag that survives license deactivation). Two migrations.
- servicePing persists trialEnd / hasPaymentMethod and flips
Org.trialUsedAt on first trial sync.
- Trial banner (owner, dismissible, priority 25): title uses
formatDistance ("Your trial ends in 10 days"); copy + action branch
on hasPaymentMethod. With-PM variant links to /settings/license;
no-PM variant opens the Stripe portal via a new
OpenBillingPortalButton (LoadingButton + createPortalSession).
- currentPlanCard gains a "Trial ends on" fallback column for the
trial-without-PM case (where nextRenewalAt is null).
- activationCodeCard accepts isTrialEligible and flips its checkout
button from "Purchase a license" to "Start a free trial" when the
org hasn't trialed yet, passing requestTrial through to the checkout
endpoint.
- Types mirror the new lighthouse fields (trialEnd, hasPaymentMethod)
and the checkout request additions (installId, requestTrial).
Side-trips to Stripe (portal, checkout) now append ?refresh=true so
the license resyncs on return; trial-checkout also appends
?trial_used=true so Org.trialUsedAt flips immediately (closes the UX
gap between checkout completion and activation-code entry). page.tsx
handles both params, preserves any other query params, and redirects
to a clean URL.
Also: fetchWithRetry now only retries 5xx, 408, and 429 — 4xx errors
(e.g. TRIAL_ALREADY_USED at 409) propagate immediately instead of
retrying pointlessly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add badges to invoice cards
* add basic billing docs
* refactor(lighthouse): throw ServiceErrorException on ping failure
syncWithLighthouse previously swallowed ping errors with a log and early
return, which masked real problems. Flip the model: on a lighthouse
ServiceError response, throw ServiceErrorException. The sew() middleware
already knows how to marshal that into an API response for user-initiated
paths.
Callers fall into two camps:
- Propagate (user-initiated): activateLicense and refreshLicense. The
existing try/catch in activateLicense now correctly rolls back the
license row when lighthouse rejects the activation code; refreshLicense
lets the throw propagate so the UI surfaces a toast.
- Swallow explicitly (background / side-effect): license page load, the
24h cron, user-approval, and signup paths all wrap with
`.catch(() => { /* ignore */ })`. These happen as a side effect of
other successful operations; a ping failure shouldn't block them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feedback
* fix tests
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@brendan-kellam
brendan-kellam marked this pull request as ready for review May 21, 2026 21:34
msukkariand others added 19 commits May 30, 2026 12:38
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): prevent top banner from pushing the chat prompt off-screen
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brendan Kellam <brendan@sourcebot.dev>
The code preview panel now persists the scroll position per
file/revision to sessionStorage and restores it on mount. Restoration
is skipped when a highlight_range query param is present so the existing
highlight scroll-into-view takes precedence.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ers (#1262)
Switches the safe.directory "*" config from --global (only written to
/root/.gitconfig) to --system (/etc/gitconfig) so it applies regardless
of which user runs git. The image intentionally sets no USER directive
and can be run as an arbitrary --user, where the global config was never
read, leaving the "dubious ownership" error unfixed.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)
* chore: remove embedded Postgres and Redis from the Docker image
As of v5, Sourcebot no longer ships an embedded Postgres or Redis.
External instances are now required via DATABASE_URL and REDIS_URL.
- Dockerfile: drop postgresql16/redis packages, DATABASE_DATA_DIR/
REDIS_DATA_DIR env, postgres/redis users, and /run/postgresql setup
- entrypoint.sh: hard-fail with guidance when DATABASE_URL/REDIS_URL are
unset; remove embedded init/startup blocks
- supervisord.conf: remove the redis program
- docs: mark DATABASE_URL/REDIS_URL required, drop data-dir vars, document
the breaking change and data migration in the v4-to-v5 guide
- CHANGELOG: note the breaking change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: point CHANGELOG entry at PR #1264
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* changelog
* docs: expand v4-to-v5 guide; require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY
- entrypoint.sh: require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY explicitly
(no auto-generation, no plaintext file loading); hard-fail with migration
guidance and warn if the legacy plaintext files linger
- v4-to-v5 guide: document the secrets, role-management, and external
Postgres/Redis breaking changes with per-item migration steps
- environment-variables: mark both secrets required
- roles-and-permissions: add default-role-by-plan table
- CHANGELOG: update breaking-change entries
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs nit
* changelog nit
* final nits
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
brendan-kellamand others added 2 commits June 2, 2026 20:29
…ces (#1267)
* feat(web): graceful error and loading states for billing/offers surfaces
Replace silent `null` returns with recoverable error states when the offers
fetch fails, across onboarding, the upsell dialog/panel, and feature gates:
- Onboarding trial step: reframe the error copy and add a "View pricing" link.
- UpsellDialog / UpsellPanel: shared UpsellLoadError fallback with a retry,
Status page link, and role-aware copy (owners get an outbound-access hint to
deployments.sourcebot.dev + Learn more; members are routed to their admin).
- UpsellPanel: add a `loadingVariant` prop so full-area feature gates render a
centered spinner while the in-flow license card keeps its skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* nit
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add scopes as part of the prisma schema
* Add MCP OAuth scope discovery and selection
* Refactor MCP scopes into configurable entries
* Refactor MCP server tool data table
* Add MCP server tool permissions
* Cache MCP tool definitions in Redis
* Auto-save MCP tool permission changes
* Avoid expensive tool fetch after updating tool permissions. Just update react query cache instead
* deduplicate some code for cleanliness
* Squash prisma migrations. Update redis cache for mcp tools to be per user, 1h time out
* update prisma migrations
* Update mcpScope to be referred to as mcpOAuthScope across the codebase
* Add documentation for scopes and permissions
* Update docs to say Ask Sourcebot
---------
Co-authored-by: Jack Minnetian <270441393+BlueBottleLatte@users.noreply.github.com>
Comment threadpackages/web/src/ee/features/chat/mcp/mcpToolSets.ts Dismissed
@brendan-kellam
brendan-kellam merged commit 72be168 into mainJun 3, 2026
11 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Jun 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@brendan-kellam@github-advanced-security@msukkari@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

v5 (#1097) - #1106

Merged
brendan-kellam merged 91 commits into
mainfrom
v5
Jun 3, 2026
Merged

v5 (#1097)#1106
brendan-kellam merged 91 commits into
mainfrom
v5

Conversation

@brendan-kellam

Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai

coderabbitaiBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 284 files, which is 134 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6868608-c7fa-4c64-8446-2ec8c11ca1c3

📥 Commits

Reviewing files that changed from the base of the PR and between 740bcc9 and ded4282.

⛔ Files ignored due to path filters (16)
  • docs/images/connectors_account_page.png is excluded by !**/*.png
  • docs/images/connectors_edit_scopes.png is excluded by !**/*.png
  • docs/images/connectors_edit_tool_permissions.png is excluded by !**/*.png
  • docs/images/connectors_oauth_scopes.png is excluded by !**/*.png
  • docs/images/connectors_permission_request.png is excluded by !**/*.png
  • docs/images/connectors_static_registration.png is excluded by !**/*.png
  • docs/images/connectors_toggle_off.png is excluded by !**/*.png
  • docs/images/connectors_tool_permissions.png is excluded by !**/*.png
  • docs/images/setup_sourcebot_splash.png is excluded by !**/*.png
  • packages/web/public/claude_code.svg is excluded by !**/*.svg
  • packages/web/public/codex.svg is excluded by !**/*.svg
  • packages/web/public/cursor_dark.svg is excluded by !**/*.svg
  • packages/web/public/cursor_light.svg is excluded by !**/*.svg
  • packages/web/public/vscode.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_dark.svg is excluded by !**/*.svg
  • packages/web/public/windsurf_light.svg is excluded by !**/*.svg
📒 Files selected for processing (284)
  • .env.development
  • .github/workflows/release-mcp.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docker-compose.yml
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • docs/docs/activating-a-subscription.mdx
  • docs/docs/billing.mdx
  • docs/docs/configuration/audit-logs.mdx
  • docs/docs/configuration/auth/access-settings.mdx
  • docs/docs/configuration/auth/authentication.mdx
  • docs/docs/configuration/auth/providers.mdx
  • docs/docs/configuration/auth/roles-and-permissions.mdx
  • docs/docs/configuration/config-file.mdx
  • docs/docs/configuration/declarative-config.mdx
  • docs/docs/configuration/environment-variables.mdx
  • docs/docs/configuration/idp.mdx
  • docs/docs/connections/ado-cloud.mdx
  • docs/docs/connections/ado-server.mdx
  • docs/docs/connections/bitbucket-cloud.mdx
  • docs/docs/connections/bitbucket-data-center.mdx
  • docs/docs/connections/generic-git-host.mdx
  • docs/docs/connections/gerrit.mdx
  • docs/docs/connections/gitea.mdx
  • docs/docs/connections/github.mdx
  • docs/docs/connections/gitlab.mdx
  • docs/docs/connections/indexing-your-code.mdx
  • docs/docs/connections/local-repos.mdx
  • docs/docs/deployment/docker-compose.mdx
  • docs/docs/deployment/infrastructure/architecture.mdx
  • docs/docs/deployment/sizing-guide.mdx
  • docs/docs/features/agents/agents.mdx
  • docs/docs/features/ask/ask-sourcebot.mdx
  • docs/docs/features/ask/chat-sharing.mdx
  • docs/docs/features/ask/connectors.mdx
  • docs/docs/features/mcp-server.mdx
  • docs/docs/features/permission-syncing.mdx
  • docs/docs/features/search/code-search.mdx
  • docs/docs/features/search/multi-branch-indexing.mdx
  • docs/docs/features/search/search-contexts.mdx
  • docs/docs/free-trial.mdx
  • docs/docs/license-key.mdx
  • docs/docs/misc/architecture.mdx
  • docs/docs/misc/scalability.mdx
  • docs/docs/misc/service-ping.mdx
  • docs/docs/misc/telemetry.mdx
  • docs/docs/overview.mdx
  • docs/docs/upgrade/v3-to-v4-guide.mdx
  • docs/docs/upgrade/v4-to-v5-guide.mdx
  • docs/snippets/license-key-required.mdx
  • entrypoint.sh
  • packages/backend/src/__mocks__/prisma.ts
  • packages/backend/src/api.ts
  • packages/backend/src/ee/accountPermissionSyncer.ts
  • packages/backend/src/ee/repoPermissionSyncer.ts
  • packages/backend/src/ee/syncSearchContexts.test.ts
  • packages/backend/src/ee/syncSearchContexts.ts
  • packages/backend/src/entitlements.ts
  • packages/backend/src/github.ts
  • packages/backend/src/index.ts
  • packages/backend/src/posthog.ts
  • packages/backend/src/prisma.ts
  • packages/backend/src/redis.ts
  • packages/backend/src/utils.ts
  • packages/backend/vitest.config.ts
  • packages/db/prisma/migrations/20260502000000_remove_guest_org_role/migration.sql
  • packages/db/prisma/migrations/20260509000000_add_license_table/migration.sql
  • packages/db/prisma/migrations/20260523064558_add_repo_visit_table/migration.sql
  • packages/db/prisma/migrations/20260525214409_add_changelog_table/migration.sql
  • packages/db/prisma/migrations/20260526013307_add_user_last_active_at/migration.sql
  • packages/db/prisma/migrations/20260603172622_add_mcp_connectors/migration.sql
  • packages/db/prisma/schema.prisma
  • packages/db/tools/scriptRunner.ts
  • packages/db/tools/scripts/inject-chat-data.ts
  • packages/setupWizard/README.md
  • packages/setupWizard/package.json
  • packages/setupWizard/src/azuredevops.ts
  • packages/setupWizard/src/bitbucket.ts
  • packages/setupWizard/src/genericGit.ts
  • packages/setupWizard/src/gerrit.ts
  • packages/setupWizard/src/gitea.ts
  • packages/setupWizard/src/github.ts
  • packages/setupWizard/src/gitlab.ts
  • packages/setupWizard/src/index.ts
  • packages/setupWizard/src/localRepos.ts
  • packages/setupWizard/src/models.ts
  • packages/setupWizard/src/tabCheckbox.ts
  • packages/setupWizard/src/utils.ts
  • packages/setupWizard/tsconfig.json
  • packages/shared/package.json
  • packages/shared/src/constants.ts
  • packages/shared/src/crypto.ts
  • packages/shared/src/entitlements.test.ts
  • packages/shared/src/entitlements.ts
  • packages/shared/src/env.server.test.ts
  • packages/shared/src/env.server.ts
  • packages/shared/src/index.client.ts
  • packages/shared/src/index.server.ts
  • packages/shared/src/redis.ts
  • packages/shared/src/types.ts
  • packages/shared/src/versionUtils.ts
  • packages/shared/vitest.config.ts
  • packages/web/next.config.mjs
  • packages/web/package.json
  • packages/web/src/__mocks__/prisma.ts
  • packages/web/src/actions.ts
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/(default)/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/[...slug]/page.tsx
  • packages/web/src/app/(app)/@sidebar/(routes)/settings/page.tsx
  • packages/web/src/app/(app)/@sidebar/components/changelogEntryDialog.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/chatHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/defaultSidebar/repoVisitHistory.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/header.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/index.tsx
  • packages/web/src/app/(app)/@sidebar/components/settingsSidebar/nav.tsx
  • packages/web/src/app/(app)/@sidebar/components/sidebarBase.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeBadge.tsx
  • packages/web/src/app/(app)/@sidebar/components/upgradeButton.tsx
  • packages/web/src/app/(app)/@sidebar/components/whatsNewSidebarButton.tsx
  • packages/web/src/app/(app)/agents/page.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/components/landingPage.tsx
  • packages/web/src/app/(app)/askgh/[owner]/[repo]/page.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/codePreviewPanel/pureCodePreviewPanel.tsx
  • packages/web/src/app/(app)/browse/[...path]/components/trackRepoVisit.tsx
  • packages/web/src/app/(app)/browse/[...path]/page.tsx
  • packages/web/src/app/(app)/browse/actions.ts
  • packages/web/src/app/(app)/browse/components/bottomPanel.tsx
  • packages/web/src/app/(app)/browse/components/pureFileTreePanel.tsx
  • packages/web/src/app/(app)/browse/layout.tsx
  • packages/web/src/app/(app)/browse/layoutClient.tsx
  • packages/web/src/app/(app)/chat/[id]/page.tsx
  • packages/web/src/app/(app)/chat/chatLandingPage.tsx
  • packages/web/src/app/(app)/chat/components/chatActionsDropdown.tsx
  • packages/web/src/app/(app)/chat/components/chatSidePanel.tsx
  • packages/web/src/app/(app)/chat/components/landingPageChatBox.tsx
  • packages/web/src/app/(app)/chat/components/mcpOAuthStatusToast.tsx
  • packages/web/src/app/(app)/chat/components/tutorialDialog.tsx
  • packages/web/src/app/(app)/chat/layout.tsx
  • packages/web/src/app/(app)/chat/page.tsx
  • packages/web/src/app/(app)/chats/chatsPage.tsx
  • packages/web/src/app/(app)/chats/page.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenu.tsx
  • packages/web/src/app/(app)/components/appearanceDropdownMenuGroup.tsx
  • packages/web/src/app/(app)/components/banners/actions.ts
  • packages/web/src/app/(app)/components/banners/bannerHeightObserver.tsx
  • packages/web/src/app/(app)/components/banners/bannerResolver.test.ts
  • packages/web/src/app/(app)/components/banners/bannerResolver.tsx
  • packages/web/src/app/(app)/components/banners/bannerShell.tsx
  • packages/web/src/app/(app)/components/banners/bannerSlot.tsx
  • packages/web/src/app/(app)/components/banners/invoicePastDueBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiredBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseExpiryHeadsUpBanner.tsx
  • packages/web/src/app/(app)/components/banners/licenseReboundElsewhereBanner.tsx
  • packages/web/src/app/(app)/components/banners/openBillingPortalButton.tsx
  • packages/web/src/app/(app)/components/banners/permissionSyncBanner.tsx
  • packages/web/src/app/(app)/components/banners/refreshLicenseButton.tsx
  • packages/web/src/app/(app)/components/banners/servicePingFailedBanner.tsx
  • packages/web/src/app/(app)/components/banners/trialBanner.tsx
  • packages/web/src/app/(app)/components/banners/types.ts
  • packages/web/src/app/(app)/components/banners/upgradeAvailableBanner.tsx
  • packages/web/src/app/(app)/components/meControlDropdownMenu.tsx
  • packages/web/src/app/(app)/components/navigationMenu/index.tsx
  • packages/web/src/app/(app)/components/navigationMenu/navigationItems.tsx
  • packages/web/src/app/(app)/components/navigationMenu/progressIndicator.tsx
  • packages/web/src/app/(app)/components/notFound.tsx
  • packages/web/src/app/(app)/components/pageNotFound.tsx
  • packages/web/src/app/(app)/components/searchModeSelector.tsx
  • packages/web/src/app/(app)/components/topBar.tsx
  • packages/web/src/app/(app)/components/upgradeToast.tsx
  • packages/web/src/app/(app)/components/whatsNewIndicator.tsx
  • packages/web/src/app/(app)/layout.tsx
  • packages/web/src/app/(app)/page.tsx
  • packages/web/src/app/(app)/repos/[id]/page.tsx
  • packages/web/src/app/(app)/repos/layout.tsx
  • packages/web/src/app/(app)/search/components/searchLandingPage.tsx
  • packages/web/src/app/(app)/search/components/searchResultsPage.tsx
  • packages/web/src/app/(app)/search/page.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/accountAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/accountAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/analytics/analyticsEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/analytics/page.tsx
  • packages/web/src/app/(app)/settings/apiKeys/apiKeysPage.tsx
  • packages/web/src/app/(app)/settings/apiKeys/columns.tsx
  • packages/web/src/app/(app)/settings/apiKeys/page.tsx
  • packages/web/src/app/(app)/settings/components/settingsCard.tsx
  • packages/web/src/app/(app)/settings/components/sidebar-nav.tsx
  • packages/web/src/app/(app)/settings/connections/page.tsx
  • packages/web/src/app/(app)/settings/general/generalPage.tsx
  • packages/web/src/app/(app)/settings/general/page.tsx
  • packages/web/src/app/(app)/settings/layout.tsx
  • packages/web/src/app/(app)/settings/license/activationCodeCard.tsx
  • packages/web/src/app/(app)/settings/license/offlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/licenseInactiveBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/onlineLicenseCard.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/planActionsMenu.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/removeActivationCodeDialog.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/trialMissingPaymentMethodBanner.tsx
  • packages/web/src/app/(app)/settings/license/onlineLicenseCard/upcomingYearlyRenewalBanner.tsx
  • packages/web/src/app/(app)/settings/license/page.tsx
  • packages/web/src/app/(app)/settings/license/recentInvoicesCard.tsx
  • packages/web/src/app/(app)/settings/license/types.ts
  • packages/web/src/app/(app)/settings/license/yearlyTermSeatsUsageCard.tsx
  • packages/web/src/app/(app)/settings/linked-accounts/page.tsx
  • packages/web/src/app/(app)/settings/mcp/clientCard.tsx
  • packages/web/src/app/(app)/settings/mcp/clients.ts
  • packages/web/src/app/(app)/settings/mcp/mcpEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/mcp/mcpPage.tsx
  • packages/web/src/app/(app)/settings/mcp/page.tsx
  • packages/web/src/app/(app)/settings/members/components/inviteMemberCard.tsx
  • packages/web/src/app/(app)/settings/members/components/invitesList.tsx
  • packages/web/src/app/(app)/settings/members/components/membersList.tsx
  • packages/web/src/app/(app)/settings/members/components/requestsList.tsx
  • packages/web/src/app/(app)/settings/members/page.tsx
  • packages/web/src/app/(app)/settings/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/mcpToolPermissionsPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/connectors/[serverId]/tools/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/page.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/prefabConnectorPopover.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentEntitlementMessage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentPage.tsx
  • packages/web/src/app/(app)/settings/workspaceAskAgent/workspaceAskAgentUnavailableMessage.tsx
  • packages/web/src/app/api/(client)/client.ts
  • packages/web/src/app/api/(server)/changelog/entries/route.ts
  • packages/web/src/app/api/(server)/chat/blocking/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-authorization-server/route.ts
  • packages/web/src/app/api/(server)/ee/.well-known/oauth-protected-resource/[...path]/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/callback/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/[serverId]/tools/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/configuration/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/connect/types.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/servers/route.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.test.ts
  • packages/web/src/app/api/(server)/ee/askmcp/tools/route.ts
  • packages/web/src/app/api/(server)/ee/audit/route.ts
  • packages/web/src/app/api/(server)/ee/chat/[chatId]/searchMembers/route.ts
  • packages/web/src/app/api/(server)/ee/chat/route.ts
  • packages/web/src/app/api/(server)/ee/chats/route.ts
  • packages/web/src/app/api/(server)/ee/chats/types.ts
  • packages/web/src/app/api/(server)/ee/mcp/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/register/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/revoke/route.ts
  • packages/web/src/app/api/(server)/ee/oauth/token/route.ts
  • packages/web/src/app/api/(server)/ee/permissionSyncStatus/api.ts
  • packages/web/src/app/api/(server)/ee/user/route.ts
  • packages/web/src/app/api/(server)/ee/users/route.ts
  • packages/web/src/app/api/(server)/offers/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/components/anonymousAccessToggle.tsx
  • packages/web/src/app/components/authMethodSelector.tsx
  • packages/web/src/app/components/organizationAccessSettings.tsx
  • packages/web/src/app/globals.css
  • packages/web/src/app/invite/actions.ts
  • packages/web/src/app/invite/page.tsx
  • packages/web/src/app/layout.tsx
  • packages/web/src/app/login/components/loginForm.tsx
  • packages/web/src/app/login/page.tsx
  • packages/web/src/app/not-found.tsx
  • packages/web/src/app/oauth/authorize/page.tsx
  • packages/web/src/app/onboard/components/alreadyLicensedStep.tsx
  • packages/web/src/app/onboard/components/completeOnboardingButton.tsx
  • packages/web/src/app/onboard/components/trialStep.tsx
  • packages/web/src/app/onboard/page.tsx
  • packages/web/src/app/posthogProvider.tsx
  • packages/web/src/app/progressBarProvider.tsx
  • packages/web/src/app/signup/page.tsx
  • packages/web/src/auth.ts
  • packages/web/src/components/ui/alert.tsx
  • packages/web/src/components/ui/data-table.tsx
  • packages/web/src/components/ui/dialog.tsx
  • packages/web/src/components/ui/sidebar.tsx

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v5

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 and usage tips.

@github-actions

github-actionsBot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

License Audit

⚠️Status: PASS

MetricCount
Total packages2133
Resolved (non-standard)11
Unresolved0
Strong copyleft0
Weak copyleft39

Weak Copyleft Packages (informational)

PackageVersionLicense
@img/sharp-libvips-darwin-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-darwin-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.0.5LGPL-3.0-or-later
@img/sharp-libvips-linux-arm1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-ppc641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-riscv641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-s390x1.2.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linux-x641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-arm641.2.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.0.4LGPL-3.0-or-later
@img/sharp-libvips-linuxmusl-x641.2.4LGPL-3.0-or-later
@img/sharp-wasm320.33.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-wasm320.34.5Apache-2.0 AND LGPL-3.0-or-later AND MIT
@img/sharp-win32-arm640.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-ia320.34.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.33.5Apache-2.0 AND LGPL-3.0-or-later
@img/sharp-win32-x640.34.5Apache-2.0 AND LGPL-3.0-or-later
axe-core4.10.3MPL-2.0
dompurify3.4.0(MPL-2.0 OR Apache-2.0)
lightningcss1.32.0MPL-2.0
lightningcss-android-arm641.32.0MPL-2.0
lightningcss-darwin-arm641.32.0MPL-2.0
lightningcss-darwin-x641.32.0MPL-2.0
lightningcss-freebsd-x641.32.0MPL-2.0
lightningcss-linux-arm-gnueabihf1.32.0MPL-2.0
lightningcss-linux-arm64-gnu1.32.0MPL-2.0
lightningcss-linux-arm64-musl1.32.0MPL-2.0
lightningcss-linux-x64-gnu1.32.0MPL-2.0
lightningcss-linux-x64-musl1.32.0MPL-2.0
lightningcss-win32-arm64-msvc1.32.0MPL-2.0
lightningcss-win32-x64-msvc1.32.0MPL-2.0
Resolved Packages (11)
PackageVersionOriginalResolvedSource
@react-grab/cli0.1.23UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/cli0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
@react-grab/mcp0.1.29UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
codemirror-lang-elixir4.0.0UNKNOWNApache-2.0GitHub repo (livebook-dev/codemirror-lang-elixir LICENSE)
element-source0.0.3UNKNOWNMITGitHub repo (LICENSE file in npm tarball via unpkg)
lezer-elixir1.1.2UNKNOWNApache-2.0GitHub repo (livebook-dev/lezer-elixir LICENSE)
map-stream0.1.0UNKNOWNMITGitHub repo (dominictarr/map-stream LICENCE)
memorystream0.3.1UNKNOWNMITextracted from object (npm licenses[0].type field)
pause-stream0.0.11["MIT","Apache2"]MIT OR Apache-2.0extracted from object array + GitHub repo (dominictarr/pause-stream LICENSE, dual licensed)
posthog-js1.369.0SEE LICENSE IN LICENSEApache-2.0GitHub repo (PostHog/posthog-js LICENSE file)
valid-url1.0.9UNKNOWNMITGitHub repo (ogt/valid-url LICENSE file)

* wip
* remove unused hook
* Add collapse sidebar button
* refactor settings into sidebar as a override context
* chat thread styling
* notification dot
* improved rendering
* fix light mode
* imporved api key page
* add chats page
* not found nit
* guest sidebar footer
* add tooltip for sidebar collapse button
* nit
* onboard nit
* fix permission sync banner
* what's new
* profile settings
* home view settings
* general settings
* remove shadow
* changelog
* feedback
brendan-kellamand others added 5 commits April 24, 2026 08:53
* wip on service ping
* add concept of License to the database and wire it into the enitlements system
* wip on e2e checkout flow
* basic card to display current plan
* store activation code at rest
* add manage subscription button
* wip on lighthouse client
* wip on lighthouse client
* remove the concept of a plan and just rely on entitlements at the app layer
* fix sidebar
* add temporary refresh license button
* clarified org availability design
* entitlements naming nit
* remove concept of a GUEST user
* remove anonymous-access entitlement
* change offline license to support optional seats
* handle license validation for all paths
* refactor some actions
* add explicit service ping calls to user <> organization update paths
* fix refresh bug with sidebar
* add billing details card
* fix invite redemption when user already a member
User was hitting a unique constraint on UserToOrg(orgId, userId) when
redeeming an invite, because onCreateUser auto-joins new signups in
self-serve mode and redeemInvite then tried to create the same row.
Make the insert idempotent via upsert so the downstream AccountRequest
and invite cleanup still runs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wip on license card
* further wip on license card / activaction code card
* add recent invoices UI
* nit on seats terminology
* feat(web): surface subscription cancellation on license card
Adds cancelAt to the License model and the lighthouse ping schema, and
renders "Cancels on <date>" on the current plan card when there's no
upcoming renewal. Prefers "Next renewal" when Stripe still has an
upcoming invoice — so subscriptions scheduled to end after the next
billing cycle keep showing the renewal row.
Also makes nextRenewalAt / nextRenewalAmount nullable to match the
lighthouse response, and guards new Date() against null in servicePing.
Adds a CLAUDE.md under the lighthouse feature folder pointing at the
service repo so the two schemas stay in lockstep.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): add offline license card to settings
Renders a dedicated card for offline (SOURCEBOT_EE_LICENSE_KEY) licenses
showing the license id, seat cap, and expiry. When an offline license
is present, the page skips the online license lookup entirely to mirror
the precedence in entitlements.ts.
Also adds a header row with a mailto link to support and an "All plans"
shortcut to the public pricing page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): banner system for license + permission sync
Introduces a priority-ordered, single-slot banner system under
(app)/components/banners/. A server-side resolver picks the highest-priority
banner that matches the current context (role, license state, offline
license, permission-sync status) and renders it through a shared BannerShell
that handles per-day dismissal via cookies.
Banners included:
- License expired (everyone, non-dismissible, role-aware copy)
- License expiry heads-up (owner, dismissible, 14d window, uses
formatDistance for relative copy)
- Invoice past due (owner, non-dismissible)
- Permission sync pending (everyone, non-dismissible, migrated from the
prior standalone component through BannerShell)
Precedence mirrors entitlements.ts: offline license is the sole source
of truth when present, so online billing state is ignored.
Also splits getValidOfflineLicense into a decode-only path so
getOfflineLicenseMetadata can surface expired licenses to the UI.
Includes bannerResolver.test.ts covering priority, audience filtering,
dismissal filtering, offline/online expiry rules, and permission sync.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* handle failure case where lighthouse cannot be reached
* chore(web): mirror lighthouse trial + checkout schema changes
Adds trialEnd to the ping response schema and installId / requestTrial
to the checkout request schema so types match the lighthouse service.
createCheckoutSession passes the instance's SOURCEBOT_INSTALL_ID and
defaults requestTrial to false (the existing "upgrade" button is not
a trial path).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(web): trial banner + plumbing
Adds a trial banner to the owner-facing banner stack and the
surrounding plumbing:
- Schema: License.trialEnd, License.hasPaymentMethod, Org.trialUsedAt
(durable flag that survives license deactivation). Two migrations.
- servicePing persists trialEnd / hasPaymentMethod and flips
Org.trialUsedAt on first trial sync.
- Trial banner (owner, dismissible, priority 25): title uses
formatDistance ("Your trial ends in 10 days"); copy + action branch
on hasPaymentMethod. With-PM variant links to /settings/license;
no-PM variant opens the Stripe portal via a new
OpenBillingPortalButton (LoadingButton + createPortalSession).
- currentPlanCard gains a "Trial ends on" fallback column for the
trial-without-PM case (where nextRenewalAt is null).
- activationCodeCard accepts isTrialEligible and flips its checkout
button from "Purchase a license" to "Start a free trial" when the
org hasn't trialed yet, passing requestTrial through to the checkout
endpoint.
- Types mirror the new lighthouse fields (trialEnd, hasPaymentMethod)
and the checkout request additions (installId, requestTrial).
Side-trips to Stripe (portal, checkout) now append ?refresh=true so
the license resyncs on return; trial-checkout also appends
?trial_used=true so Org.trialUsedAt flips immediately (closes the UX
gap between checkout completion and activation-code entry). page.tsx
handles both params, preserves any other query params, and redirects
to a clean URL.
Also: fetchWithRetry now only retries 5xx, 408, and 429 — 4xx errors
(e.g. TRIAL_ALREADY_USED at 409) propagate immediately instead of
retrying pointlessly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* add badges to invoice cards
* add basic billing docs
* refactor(lighthouse): throw ServiceErrorException on ping failure
syncWithLighthouse previously swallowed ping errors with a log and early
return, which masked real problems. Flip the model: on a lighthouse
ServiceError response, throw ServiceErrorException. The sew() middleware
already knows how to marshal that into an API response for user-initiated
paths.
Callers fall into two camps:
- Propagate (user-initiated): activateLicense and refreshLicense. The
existing try/catch in activateLicense now correctly rolls back the
license row when lighthouse rejects the activation code; refreshLicense
lets the throw propagate so the UI surfaces a toast.
- Swallow explicitly (background / side-effect): license page load, the
24h cron, user-approval, and signup paths all wrap with
`.catch(() => { /* ignore */ })`. These happen as a side effect of
other successful operations; a ping failure shouldn't block them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feedback
* fix tests
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@brendan-kellam
brendan-kellam marked this pull request as ready for review May 21, 2026 21:34
msukkariand others added 19 commits May 30, 2026 12:38
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): prevent top banner from pushing the chat prompt off-screen
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feedback
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brendan Kellam <brendan@sourcebot.dev>
The code preview panel now persists the scroll position per
file/revision to sessionStorage and restores it on mount. Restoration
is skipped when a highlight_range query param is present so the existing
highlight scroll-into-view takes precedence.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ers (#1262)
Switches the safe.directory "*" config from --global (only written to
/root/.gitconfig) to --system (/etc/gitconfig) so it applies regardless
of which user runs git. The image intentionally sets no USER directive
and can be run as an arbitrary --user, where the global config was never
read, leaving the "dubious ownership" error unfixed.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)
* chore: remove embedded Postgres and Redis from the Docker image
As of v5, Sourcebot no longer ships an embedded Postgres or Redis.
External instances are now required via DATABASE_URL and REDIS_URL.
- Dockerfile: drop postgresql16/redis packages, DATABASE_DATA_DIR/
REDIS_DATA_DIR env, postgres/redis users, and /run/postgresql setup
- entrypoint.sh: hard-fail with guidance when DATABASE_URL/REDIS_URL are
unset; remove embedded init/startup blocks
- supervisord.conf: remove the redis program
- docs: mark DATABASE_URL/REDIS_URL required, drop data-dir vars, document
the breaking change and data migration in the v4-to-v5 guide
- CHANGELOG: note the breaking change
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: point CHANGELOG entry at PR #1264
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* changelog
* docs: expand v4-to-v5 guide; require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY
- entrypoint.sh: require AUTH_SECRET and SOURCEBOT_ENCRYPTION_KEY explicitly
(no auto-generation, no plaintext file loading); hard-fail with migration
guidance and warn if the legacy plaintext files linger
- v4-to-v5 guide: document the secrets, role-management, and external
Postgres/Redis breaking changes with per-item migration steps
- environment-variables: mark both secrets required
- roles-and-permissions: add default-role-by-plan table
- CHANGELOG: update breaking-change entries
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs nit
* changelog nit
* final nits
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
brendan-kellamand others added 2 commits June 2, 2026 20:29
…ces (#1267)
* feat(web): graceful error and loading states for billing/offers surfaces
Replace silent `null` returns with recoverable error states when the offers
fetch fails, across onboarding, the upsell dialog/panel, and feature gates:
- Onboarding trial step: reframe the error copy and add a "View pricing" link.
- UpsellDialog / UpsellPanel: shared UpsellLoadError fallback with a retry,
Status page link, and role-aware copy (owners get an outbound-access hint to
deployments.sourcebot.dev + Learn more; members are routed to their admin).
- UpsellPanel: add a `loadingVariant` prop so full-area feature gates render a
centered spinner while the in-flow license card keeps its skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* nit
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add scopes as part of the prisma schema
* Add MCP OAuth scope discovery and selection
* Refactor MCP scopes into configurable entries
* Refactor MCP server tool data table
* Add MCP server tool permissions
* Cache MCP tool definitions in Redis
* Auto-save MCP tool permission changes
* Avoid expensive tool fetch after updating tool permissions. Just update react query cache instead
* deduplicate some code for cleanliness
* Squash prisma migrations. Update redis cache for mcp tools to be per user, 1h time out
* update prisma migrations
* Update mcpScope to be referred to as mcpOAuthScope across the codebase
* Add documentation for scopes and permissions
* Update docs to say Ask Sourcebot
---------
Co-authored-by: Jack Minnetian <270441393+BlueBottleLatte@users.noreply.github.com>
Comment threadpackages/web/src/ee/features/chat/mcp/mcpToolSets.ts Dismissed
@brendan-kellam
brendan-kellam merged commit 72be168 into mainJun 3, 2026
11 checks passed
@github-actionsgithub-actionsBot mentioned this pull request Jun 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@brendan-kellam@github-advanced-security@msukkari@jsourcebot