From 2994730c32d60f0798e72ffb65c749ce8d348d5e Mon Sep 17 00:00:00 2001
From: Jinwoo-H
Date: Wed, 10 Jun 2026 16:30:59 -0700
Subject: [PATCH] Make project host setup settings navigable
Co-authored-by: Orca
---
.../settings/RepositoryHostSetupsSection.tsx | 85 ++++++++++++++-----
src/renderer/src/i18n/locales/en.json | 5 ++
src/renderer/src/i18n/locales/ja.json | 5 ++
src/renderer/src/i18n/locales/ko.json | 5 ++
src/renderer/src/i18n/locales/zh.json | 5 ++
5 files changed, 83 insertions(+), 22 deletions(-)
diff --git a/src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx b/src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx
index 2f387496be7..1342ed3289b 100644
--- a/src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx
+++ b/src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx
@@ -1,7 +1,8 @@
import { getExecutionHostLabel } from '../../../../shared/execution-host'
-import type { Repo } from '../../../../shared/types'
+import type { ProjectHostSetupState, Repo } from '../../../../shared/types'
import { useAppStore } from '../../store'
import { getProjectHostSetupProjectionFromState } from '../../store/selectors'
+import { cn } from '../../lib/utils'
import { Label } from '../ui/label'
import { SearchableSetting } from './SearchableSetting'
import { SettingsBadge } from './SettingsFormControls'
@@ -16,12 +17,38 @@ type RepositoryHostSetupsSectionProps = {
searchEntries: SettingsSearchEntry[]
}
+function getSetupStateLabel(setupState: ProjectHostSetupState): string {
+ switch (setupState) {
+ case 'ready':
+ return translate('auto.components.settings.RepositoryPane.hostSetupStateReady', 'Ready')
+ case 'not-set-up':
+ return translate(
+ 'auto.components.settings.RepositoryPane.hostSetupStateNotSetUp',
+ 'Not set up'
+ )
+ case 'setting-up':
+ return translate(
+ 'auto.components.settings.RepositoryPane.hostSetupStateSettingUp',
+ 'Setting up'
+ )
+ case 'error':
+ return translate('auto.components.settings.RepositoryPane.hostSetupStateError', 'Error')
+ case 'unsupported':
+ return translate(
+ 'auto.components.settings.RepositoryPane.hostSetupStateUnsupported',
+ 'Unsupported'
+ )
+ }
+}
+
export function RepositoryHostSetupsSection({
repo,
forceVisible,
searchQuery,
searchEntries
}: RepositoryHostSetupsSectionProps): React.JSX.Element | null {
+ const openSettingsPage = useAppStore((state) => state.openSettingsPage)
+ const openSettingsTarget = useAppStore((state) => state.openSettingsTarget)
const projectHostSetupProjection = useAppStore((state) =>
getProjectHostSetupProjectionFromState(state)
)
@@ -64,28 +91,42 @@ export function RepositoryHostSetupsSection({
- {projectHostSetups.map((setup) => (
-
-
-
-
- {getExecutionHostLabel(setup.hostId)}
-
-
- {setup.setupState}
-
+ {projectHostSetups.map((setup) => {
+ const isCurrentSetup = setup.repoId === repo.id
+ return (
+
- {setup.repoId === repo.id ? (
-
- {translate('auto.components.settings.RepositoryPane.currentSetup', 'Current')}
-
- ) : null}
-
- ))}
+ {isCurrentSetup ? (
+
+ {translate('auto.components.settings.RepositoryPane.currentSetup', 'Current')}
+
+ ) : null}
+
+ )
+ })}
)
diff --git a/src/renderer/src/i18n/locales/en.json b/src/renderer/src/i18n/locales/en.json
index dcefa5fa017..3da0a046f25 100644
--- a/src/renderer/src/i18n/locales/en.json
+++ b/src/renderer/src/i18n/locales/en.json
@@ -5037,6 +5037,11 @@
"availableHostsDescription": "Hosts where this project is set up.",
"availableHostsHelp": "Project paths and worktree settings are host-specific; creating a workspace can target any ready setup.",
"currentSetup": "Current",
+ "hostSetupStateReady": "Ready",
+ "hostSetupStateNotSetUp": "Not set up",
+ "hostSetupStateSettingUp": "Setting up",
+ "hostSetupStateError": "Error",
+ "hostSetupStateUnsupported": "Unsupported",
"499a437335": "Identity"
},
"RepositorySourceControlAiActionRows": {
diff --git a/src/renderer/src/i18n/locales/ja.json b/src/renderer/src/i18n/locales/ja.json
index e8bd170203f..56915d065b6 100644
--- a/src/renderer/src/i18n/locales/ja.json
+++ b/src/renderer/src/i18n/locales/ja.json
@@ -5017,6 +5017,11 @@
"availableHostsDescription": "このプロジェクトがセットアップされているホスト。",
"availableHostsHelp": "プロジェクトのパスとワークツリー設定はホストごとに異なります。ワークスペースは準備済みの任意のセットアップで作成できます。",
"currentSetup": "現在",
+ "hostSetupStateReady": "準備完了",
+ "hostSetupStateNotSetUp": "未セットアップ",
+ "hostSetupStateSettingUp": "セットアップ中",
+ "hostSetupStateError": "エラー",
+ "hostSetupStateUnsupported": "未対応",
"499a437335": "身元"
},
"RepositorySourceControlAiActionRows": {
diff --git a/src/renderer/src/i18n/locales/ko.json b/src/renderer/src/i18n/locales/ko.json
index 023504cdebf..8d1a4e9cf05 100644
--- a/src/renderer/src/i18n/locales/ko.json
+++ b/src/renderer/src/i18n/locales/ko.json
@@ -5017,6 +5017,11 @@
"availableHostsDescription": "이 프로젝트가 설정된 호스트입니다.",
"availableHostsHelp": "프로젝트 경로와 워크트리 설정은 호스트별로 다릅니다. 워크스페이스는 준비된 모든 설정에서 만들 수 있습니다.",
"currentSetup": "현재",
+ "hostSetupStateReady": "준비됨",
+ "hostSetupStateNotSetUp": "설정되지 않음",
+ "hostSetupStateSettingUp": "설정 중",
+ "hostSetupStateError": "오류",
+ "hostSetupStateUnsupported": "지원되지 않음",
"499a437335": "신원"
},
"RepositorySourceControlAiActionRows": {
diff --git a/src/renderer/src/i18n/locales/zh.json b/src/renderer/src/i18n/locales/zh.json
index 611e3aa2124..f79e1101dbe 100644
--- a/src/renderer/src/i18n/locales/zh.json
+++ b/src/renderer/src/i18n/locales/zh.json
@@ -5017,6 +5017,11 @@
"availableHostsDescription": "此项目已设置的主机。",
"availableHostsHelp": "项目路径和工作树设置按主机区分;创建工作区可选择任何已就绪的设置。",
"currentSetup": "当前",
+ "hostSetupStateReady": "已就绪",
+ "hostSetupStateNotSetUp": "未设置",
+ "hostSetupStateSettingUp": "设置中",
+ "hostSetupStateError": "错误",
+ "hostSetupStateUnsupported": "不支持",
"499a437335": "身份"
},
"RepositorySourceControlAiActionRows": {