From 5599ad28cb18dfc247e8fbb7a9fc72be6592efa5 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Tue, 16 Jun 2026 10:14:50 -0700 Subject: [PATCH] feat: improve source control setting - add API budget pane and clean up git search (#5512) Co-authored-by: Orca --- .../src/components/settings/GitPane.tsx | 55 ------------- .../settings/GitProviderApiBudgetPane.tsx | 81 +++++++++++++++++++ .../src/components/settings/Settings.tsx | 2 + .../git-provider-api-budget-search.ts | 33 ++++++++ .../src/components/settings/git-search.ts | 27 ------- .../hooks/useSettingsNavigationMetadata.ts | 7 +- 6 files changed, 122 insertions(+), 83 deletions(-) create mode 100644 src/renderer/src/components/settings/GitProviderApiBudgetPane.tsx create mode 100644 src/renderer/src/components/settings/git-provider-api-budget-search.ts diff --git a/src/renderer/src/components/settings/GitPane.tsx b/src/renderer/src/components/settings/GitPane.tsx index f060e353680..c4611e0751c 100644 --- a/src/renderer/src/components/settings/GitPane.tsx +++ b/src/renderer/src/components/settings/GitPane.tsx @@ -6,8 +6,6 @@ import { useAppStore } from '../../store' import { getGitPaneSearchEntries } from './git-search' import { SearchableSetting } from './SearchableSetting' import { matchesSettingsSearch } from './settings-search' -import { GitHubRateLimitPanel } from '../github/github-rate-limit-display' -import { GitLabRateLimitPanel } from '../gitlab/gitlab-rate-limit-display' import { AutoRenameBranchFromWorkSetting } from './AutoRenameBranchFromWorkSetting' import { getAutoRenameBranchSearchEntries } from './auto-rename-branch-search' import { @@ -210,59 +208,6 @@ export function GitPane({ settingsSearchQuery={searchQuery} /> ) : null, - matchesSettingsSearch(searchQuery, { - title: translate('auto.components.settings.GitPane.612a440e57', 'GitHub API Budget'), - description: translate( - 'auto.components.settings.GitPane.aa204f185f', - 'Current GitHub CLI REST, Search, and GraphQL rate limits.' - ), - keywords: [ - translate('auto.components.settings.GitPane.32dca11189', 'github'), - translate('auto.components.settings.GitPane.895d3f70b8', 'gh'), - translate('auto.components.settings.GitPane.2cde9044a8', 'graphql'), - translate('auto.components.settings.GitPane.b9c011fbc2', 'rate limit'), - translate('auto.components.settings.GitPane.cdd793134e', 'api budget') - ] - }) ? ( - - - - ) : null, - matchesSettingsSearch(searchQuery, { - title: translate('auto.components.settings.GitPane.0de4ae556c', 'GitLab API Budget'), - description: translate( - 'auto.components.settings.GitPane.c4f610d057', - 'Current GitLab CLI REST rate-limit headers when available.' - ), - keywords: [ - translate('auto.components.settings.GitPane.8a527d48e3', 'gitlab'), - translate('auto.components.settings.GitPane.3072428ac7', 'glab'), - translate('auto.components.settings.GitPane.b9c011fbc2', 'rate limit'), - translate('auto.components.settings.GitPane.cdd793134e', 'api budget') - ] - }) ? ( - - - - ) : null, matchesSettingsSearch(searchQuery, { title: translate('auto.components.settings.GitPane.e02ea23a32', 'Orca Attribution'), description: translate( diff --git a/src/renderer/src/components/settings/GitProviderApiBudgetPane.tsx b/src/renderer/src/components/settings/GitProviderApiBudgetPane.tsx new file mode 100644 index 00000000000..0d9ad86b1d9 --- /dev/null +++ b/src/renderer/src/components/settings/GitProviderApiBudgetPane.tsx @@ -0,0 +1,81 @@ +import { useAppStore } from '../../store' +import { SearchableSetting } from './SearchableSetting' +import { matchesSettingsSearch } from './settings-search' +import { GitHubRateLimitPanel } from '../github/github-rate-limit-display' +import { GitLabRateLimitPanel } from '../gitlab/gitlab-rate-limit-display' +import { translate } from '@/i18n/i18n' + +type GitProviderApiBudgetPaneProps = { + settingsSearchQuery?: string +} + +export function GitProviderApiBudgetPane({ + settingsSearchQuery +}: GitProviderApiBudgetPaneProps): React.JSX.Element | null { + const storeSearchQuery = useAppStore((s) => s.settingsSearchQuery) + const searchQuery = settingsSearchQuery ?? storeSearchQuery + + const visibleSections = [ + matchesSettingsSearch(searchQuery, { + title: translate('auto.components.settings.GitPane.612a440e57', 'GitHub API Budget'), + description: translate( + 'auto.components.settings.GitPane.aa204f185f', + 'Current GitHub CLI REST, Search, and GraphQL rate limits.' + ), + keywords: [ + translate('auto.components.settings.GitPane.32dca11189', 'github'), + translate('auto.components.settings.GitPane.895d3f70b8', 'gh'), + translate('auto.components.settings.GitPane.2cde9044a8', 'graphql'), + translate('auto.components.settings.GitPane.b9c011fbc2', 'rate limit'), + translate('auto.components.settings.GitPane.cdd793134e', 'api budget') + ] + }) ? ( + + + + ) : null, + matchesSettingsSearch(searchQuery, { + title: translate('auto.components.settings.GitPane.0de4ae556c', 'GitLab API Budget'), + description: translate( + 'auto.components.settings.GitPane.c4f610d057', + 'Current GitLab CLI REST rate-limit headers when available.' + ), + keywords: [ + translate('auto.components.settings.GitPane.8a527d48e3', 'gitlab'), + translate('auto.components.settings.GitPane.3072428ac7', 'glab'), + translate('auto.components.settings.GitPane.b9c011fbc2', 'rate limit'), + translate('auto.components.settings.GitPane.cdd793134e', 'api budget') + ] + }) ? ( + + + + ) : null + ].filter(Boolean) + + if (visibleSections.length === 0) { + return null + } + + // Why: provider budgets are diagnostic, so they render after core git and AI + // settings instead of competing with everyday branch and attribution controls. + return
{visibleSections}
+} diff --git a/src/renderer/src/components/settings/Settings.tsx b/src/renderer/src/components/settings/Settings.tsx index b765583c0a3..5d49c817cb4 100644 --- a/src/renderer/src/components/settings/Settings.tsx +++ b/src/renderer/src/components/settings/Settings.tsx @@ -28,6 +28,7 @@ import { useWarpThemeImport } from './useWarpThemeImport' import { RepositoryPane } from './RepositoryPane' import { GitPane } from './GitPane' import { CommitMessageAiPane } from './CommitMessageAiPane' +import { GitProviderApiBudgetPane } from './GitProviderApiBudgetPane' import { NotificationsPane } from './NotificationsPane' import { VoicePane } from './VoicePane' import { SshPane } from './SshPane' @@ -1172,6 +1173,7 @@ function Settings(): React.JSX.Element { customPromptDiscardSignal={sourceControlAiPromptDiscardSignal} settingsSearchQuery={settingsSearchQuery} /> + ) : null} diff --git a/src/renderer/src/components/settings/git-provider-api-budget-search.ts b/src/renderer/src/components/settings/git-provider-api-budget-search.ts new file mode 100644 index 00000000000..a875b239d53 --- /dev/null +++ b/src/renderer/src/components/settings/git-provider-api-budget-search.ts @@ -0,0 +1,33 @@ +import { translate } from '@/i18n/i18n' +import { translateSearchKeyword } from './settings-search-keywords' +import { createLocalizedCatalog } from '@/i18n/localized-catalog' + +export const getGitProviderApiBudgetSearchEntries = createLocalizedCatalog(() => [ + { + title: translate('auto.components.settings.git.search.ff86e354c4', 'GitHub API Budget'), + description: translate( + 'auto.components.settings.git.search.1139f61512', + 'Current GitHub CLI REST, Search, and GraphQL rate limits.' + ), + keywords: [ + ...translateSearchKeyword('auto.components.settings.git.search.d088806071', 'github'), + ...translateSearchKeyword('auto.components.settings.git.search.16f53f7323', 'gh'), + ...translateSearchKeyword('auto.components.settings.git.search.65b69d9f80', 'graphql'), + ...translateSearchKeyword('auto.components.settings.git.search.b7e52124c7', 'rate limit'), + ...translateSearchKeyword('auto.components.settings.git.search.40f9b815fd', 'api budget') + ] + }, + { + title: translate('auto.components.settings.git.search.83ecb3f470', 'GitLab API Budget'), + description: translate( + 'auto.components.settings.git.search.2b4a72885d', + 'Current GitLab CLI REST rate-limit headers when available.' + ), + keywords: [ + ...translateSearchKeyword('auto.components.settings.git.search.4808f065b3', 'gitlab'), + ...translateSearchKeyword('auto.components.settings.git.search.ead733645f', 'glab'), + ...translateSearchKeyword('auto.components.settings.git.search.b7e52124c7', 'rate limit'), + ...translateSearchKeyword('auto.components.settings.git.search.40f9b815fd', 'api budget') + ] + } +]) diff --git a/src/renderer/src/components/settings/git-search.ts b/src/renderer/src/components/settings/git-search.ts index f3d7b5e66cb..d452fd6e158 100644 --- a/src/renderer/src/components/settings/git-search.ts +++ b/src/renderer/src/components/settings/git-search.ts @@ -44,33 +44,6 @@ export const getGitPaneSearchEntries = createLocalizedCatalog(() => [ ] }, ...getAutoRenameBranchSearchEntries(), - { - title: translate('auto.components.settings.git.search.ff86e354c4', 'GitHub API Budget'), - description: translate( - 'auto.components.settings.git.search.1139f61512', - 'Current GitHub CLI REST, Search, and GraphQL rate limits.' - ), - keywords: [ - ...translateSearchKeyword('auto.components.settings.git.search.d088806071', 'github'), - ...translateSearchKeyword('auto.components.settings.git.search.16f53f7323', 'gh'), - ...translateSearchKeyword('auto.components.settings.git.search.65b69d9f80', 'graphql'), - ...translateSearchKeyword('auto.components.settings.git.search.b7e52124c7', 'rate limit'), - ...translateSearchKeyword('auto.components.settings.git.search.40f9b815fd', 'api budget') - ] - }, - { - title: translate('auto.components.settings.git.search.83ecb3f470', 'GitLab API Budget'), - description: translate( - 'auto.components.settings.git.search.2b4a72885d', - 'Current GitLab CLI REST rate-limit headers when available.' - ), - keywords: [ - ...translateSearchKeyword('auto.components.settings.git.search.4808f065b3', 'gitlab'), - ...translateSearchKeyword('auto.components.settings.git.search.ead733645f', 'glab'), - ...translateSearchKeyword('auto.components.settings.git.search.b7e52124c7', 'rate limit'), - ...translateSearchKeyword('auto.components.settings.git.search.40f9b815fd', 'api budget') - ] - }, { title: translate('auto.components.settings.git.search.bc7d9f69ce', 'Orca Attribution'), description: translate( diff --git a/src/renderer/src/hooks/useSettingsNavigationMetadata.ts b/src/renderer/src/hooks/useSettingsNavigationMetadata.ts index 4459e9ed99d..04acdbedc3c 100644 --- a/src/renderer/src/hooks/useSettingsNavigationMetadata.ts +++ b/src/renderer/src/hooks/useSettingsNavigationMetadata.ts @@ -43,6 +43,7 @@ import { getAgentsPaneSearchEntries } from '@/components/settings/agents-search' import { getAccountsPaneSearchEntries } from '@/components/settings/accounts-search' import { getIntegrationsPaneSearchEntries } from '@/components/settings/integrations-search' import { getGitPaneSearchEntries } from '@/components/settings/git-search' +import { getGitProviderApiBudgetSearchEntries } from '@/components/settings/git-provider-api-budget-search' import { getCommitMessageAiPaneSearchEntries } from '@/components/settings/commit-message-ai-search' import { getTasksPaneSearchEntries } from '@/components/settings/tasks-search' import { getFloatingWorkspaceSearchEntries } from '@/components/settings/floating-workspace-search' @@ -239,7 +240,11 @@ export function buildSettingsNavigationMetadata({ icon: GitBranch, // Why: Git AI Author is rendered inside Git, so shared // metadata must search both surfaces wherever Git appears. - searchEntries: [...getGitPaneSearchEntries(), ...getCommitMessageAiPaneSearchEntries()], + searchEntries: [ + ...getGitPaneSearchEntries(), + ...getCommitMessageAiPaneSearchEntries(), + ...getGitProviderApiBudgetSearchEntries() + ], group: 'workflows' }, {