diff --git a/src/components/tabs/tab-bar.tsx b/src/components/tabs/tab-bar.tsx index 04d89026..e87d7785 100644 --- a/src/components/tabs/tab-bar.tsx +++ b/src/components/tabs/tab-bar.tsx @@ -5,6 +5,7 @@ import { Reorder } from "motion/react" import { useAppWorkspace } from "@/contexts/app-workspace-context" import { useTabContext } from "@/contexts/tab-context" import type { TabItem as TabItemData } from "@/contexts/tab-context" +import { useAcpActions } from "@/contexts/acp-connections-context" import { useWorkspaceContext } from "@/contexts/workspace-context" import { useIsCoarsePointer } from "@/hooks/use-is-coarse-pointer" import { useShortcutSettings } from "@/hooks/use-shortcut-settings" @@ -27,6 +28,7 @@ export function TabBar() { } = useTabContext() const { allFolders, branches } = useAppWorkspace() const { mode, activePane, filesMaximized } = useWorkspaceContext() + const { reapplyConfig } = useAcpActions() const folderIndex = useMemo(() => { const map = new Map() @@ -112,6 +114,13 @@ export function TabBar() { [] ) + const handleReconnect = useCallback( + async (tabId: string) => { + await reapplyConfig(tabId) + }, + [reapplyConfig] + ) + if (tabs.length === 0) return null return ( @@ -154,6 +163,7 @@ export function TabBar() { onCloseOthers={closeOtherTabs} onCloseAll={closeAllTabs} onPin={pinTab} + onReconnect={handleReconnect} onToggleTile={toggleTileMode} isCoarsePointer={isCoarsePointer} isTouchSorting={touchSortingTabId === tab.id} diff --git a/src/components/tabs/tab-item.tsx b/src/components/tabs/tab-item.tsx index a30ec301..38c768ae 100644 --- a/src/components/tabs/tab-item.tsx +++ b/src/components/tabs/tab-item.tsx @@ -2,7 +2,7 @@ import { memo, useCallback, useMemo, useRef } from "react" import { Reorder } from "motion/react" -import { X } from "lucide-react" +import { RefreshCw, X } from "lucide-react" import { useTranslations } from "next-intl" import { cn, handleMiddleClickClose } from "@/lib/utils" import type { ConversationStatus } from "@/lib/types" @@ -28,6 +28,7 @@ interface TabItemProps { onCloseOthers: (tabId: string) => void onCloseAll: () => void onPin: (tabId: string) => void + onReconnect: (tabId: string) => void onToggleTile: () => void isCoarsePointer: boolean isTouchSorting: boolean @@ -46,6 +47,7 @@ export const TabItem = memo(function TabItem({ onCloseOthers, onCloseAll, onPin, + onReconnect, onToggleTile, isCoarsePointer, isTouchSorting, @@ -99,6 +101,10 @@ export const TabItem = memo(function TabItem({ onCloseOthers(tab.id) }, [onCloseOthers, tab.id]) + const handleReconnect = useCallback(() => { + onReconnect(tab.id) + }, [onReconnect, tab.id]) + const whileDrag = useMemo(() => ({ scale: 1.03 }), []) return ( @@ -167,6 +173,11 @@ export const TabItem = memo(function TabItem({ + + + {t("reconnect")} + + {t("close")} {t("closeOthers")} diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 103927f4..6ce82e47 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "إغلاق تبويب المحادثة", + "reconnect": "إعادة الاتصال", "close": "إغلاق", "closeOthers": "إغلاق البقية", "closeAll": "إغلاق الكل", diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 39c9732b..2b73a3c0 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "Konversationstab schließen", + "reconnect": "Neu verbinden", "close": "Schließen", "closeOthers": "Andere schließen", "closeAll": "Alle schließen", diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index d695d39d..2b660eb9 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "Close conversation tab", + "reconnect": "Reconnect", "close": "Close", "closeOthers": "Close Others", "closeAll": "Close All", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 31046c83..560f0e72 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "Cerrar pestaña de conversación", + "reconnect": "Reconectar", "close": "Cerrar", "closeOthers": "Cerrar otros", "closeAll": "Cerrar todo", diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 96227bbf..dc4341a9 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "Fermer l’onglet de conversation", + "reconnect": "Reconnecter", "close": "Fermer", "closeOthers": "Fermer les autres", "closeAll": "Tout fermer", diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 880af460..59d7eeef 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "会話タブを閉じる", + "reconnect": "再接続", "close": "閉じる", "closeOthers": "他を閉じる", "closeAll": "すべて閉じる", diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index 2e49c591..0a0e4494 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "대화 탭 닫기", + "reconnect": "다시 연결", "close": "닫기", "closeOthers": "다른 항목 닫기", "closeAll": "모두 닫기", diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 8fe7d195..31b55d3a 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "Fechar aba de conversa", + "reconnect": "Reconectar", "close": "Fechar", "closeOthers": "Fechar outros", "closeAll": "Fechar tudo", diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index f768a8c5..823f90f6 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "关闭会话标签", + "reconnect": "重新连接", "close": "关闭", "closeOthers": "关闭其它", "closeAll": "关闭所有", diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index d651fbd5..64e6b211 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -1172,6 +1172,7 @@ }, "tabs": { "closeConversationTab": "關閉會話分頁", + "reconnect": "重新連接", "close": "關閉", "closeOthers": "關閉其它", "closeAll": "關閉所有",