diff --git a/src/main/codex-accounts/runtime-home-service.test.ts b/src/main/codex-accounts/runtime-home-service.test.ts index a8aee0423b7..b3b846162a9 100644 --- a/src/main/codex-accounts/runtime-home-service.test.ts +++ b/src/main/codex-accounts/runtime-home-service.test.ts @@ -130,7 +130,6 @@ function createSettings(overrides: Partial = {}): GlobalSettings experimentalTerminalAttention: false, experimentalCompactWorktreeCards: false, experimentalWorktreeSymlinks: false, - experimentalUnifiedNewTabLauncher: false, terminalWindowsShell: 'powershell.exe', terminalWindowsPowerShellImplementation: 'powershell.exe', enableGitHubAttribution: true, diff --git a/src/main/codex-accounts/service.test.ts b/src/main/codex-accounts/service.test.ts index 04cb908443b..0e45dfbf399 100644 --- a/src/main/codex-accounts/service.test.ts +++ b/src/main/codex-accounts/service.test.ts @@ -134,7 +134,6 @@ function createSettings(overrides: Partial = {}): GlobalSettings experimentalTerminalAttention: false, experimentalCompactWorktreeCards: false, experimentalWorktreeSymlinks: false, - experimentalUnifiedNewTabLauncher: false, terminalWindowsShell: 'powershell.exe', terminalWindowsPowerShellImplementation: 'powershell.exe', enableGitHubAttribution: true, diff --git a/src/renderer/src/components/settings/ExperimentalPane.tsx b/src/renderer/src/components/settings/ExperimentalPane.tsx index ac003572738..7dde24c0ec2 100644 --- a/src/renderer/src/components/settings/ExperimentalPane.tsx +++ b/src/renderer/src/components/settings/ExperimentalPane.tsx @@ -33,9 +33,6 @@ export function ExperimentalPane({ const showWorktreeSymlinks = matchesSettingsSearch(searchQuery, [ EXPERIMENTAL_SEARCH_ENTRY.symlinks ]) - const showUnifiedNewTabLauncher = matchesSettingsSearch(searchQuery, [ - EXPERIMENTAL_SEARCH_ENTRY.unifiedNewTabLauncher - ]) return (
@@ -233,46 +230,6 @@ export function ExperimentalPane({ ) : null} - {showUnifiedNewTabLauncher ? ( - -
-
- -

- Type in the New Tab menu to open a terminal, launch an agent, visit a URL, or - open/create a file. -

-
- -
-
- ) : null} - {hiddenExperimentalUnlocked ? : null}
) diff --git a/src/renderer/src/components/settings/experimental-search.ts b/src/renderer/src/components/settings/experimental-search.ts index 15ad2e7fdc6..47f12c6997e 100644 --- a/src/renderer/src/components/settings/experimental-search.ts +++ b/src/renderer/src/components/settings/experimental-search.ts @@ -79,26 +79,6 @@ export const EXPERIMENTAL_PANE_SEARCH_ENTRIES: SettingsSearchEntry[] = [ 'env', 'node_modules' ] - }, - { - title: 'Smart New Tab menu', - description: - 'Type in the New Tab menu to open a terminal, launch an agent, visit a URL, or open/create a file.', - keywords: [ - 'experimental', - 'smart', - 'new tab', - 'new tab menu', - 'launcher', - 'unified', - 'plus', - 'terminal', - 'agents', - 'claude', - 'codex', - 'url', - 'file' - ] } ] @@ -118,6 +98,5 @@ export const EXPERIMENTAL_SEARCH_ENTRY = { activity: findEntry('Agents View'), terminalAttention: findEntry('Terminal attention'), compactWorktreeCards: findEntry('Compact worktree cards'), - symlinks: findEntry('Symlinks on worktrees'), - unifiedNewTabLauncher: findEntry('Smart New Tab menu') + symlinks: findEntry('Symlinks on worktrees') } as const diff --git a/src/renderer/src/components/tab-bar/TabBar.tsx b/src/renderer/src/components/tab-bar/TabBar.tsx index 228a91bce46..6b3b2067abb 100644 --- a/src/renderer/src/components/tab-bar/TabBar.tsx +++ b/src/renderer/src/components/tab-bar/TabBar.tsx @@ -237,17 +237,11 @@ function TabBarInner({ const repo = worktree ? s.repos?.find((entry) => entry.id === worktree.repoId) : null return Boolean(repo?.connectionId) }) - const unifiedNewTabLauncherEnabled = useAppStore( - (s) => s.settings?.experimentalUnifiedNewTabLauncher === true - ) const defaultAgent = useAppStore((s) => s.settings?.defaultTuiAgent) const agentCmdOverrides = useAppStore( (s) => s.settings?.agentCmdOverrides ?? EMPTY_AGENT_CMD_OVERRIDES ) const connectionId = useAppStore((s) => { - if (!unifiedNewTabLauncherEnabled) { - return undefined - } const allWorktrees = Object.values(s.worktreesByRepo ?? {}).flat() const worktree = allWorktrees.find((w) => w.id === worktreeId) if (!worktree) { @@ -969,7 +963,7 @@ function TabBarInner({ { // Why: terminal-producing menu actions activate a freshly-mounted // xterm. Radix's default focus restore sends focus back to the "+" @@ -978,7 +972,7 @@ function TabBarInner({ runPendingNewTabMenuFocusAfterClose() }} > - {!terminalOnly && onOpenEntry && unifiedNewTabLauncherEnabled ? ( + {!terminalOnly && onOpenEntry ? ( <> unifiedTabsByWorktree: Record activeGroupIdByWorktree: Record + detectedAgentIds: string[] | null + remoteDetectedAgentIds: Record + isDetectingAgents: boolean + isDetectingRemoteAgents: Record } = { activeTabId: null, activeTabType: null, @@ -18,7 +22,11 @@ const appStoreSnapshot: { repos: [], worktreesByRepo: {}, unifiedTabsByWorktree: {}, - activeGroupIdByWorktree: {} + activeGroupIdByWorktree: {}, + detectedAgentIds: null, + remoteDetectedAgentIds: {}, + isDetectingAgents: false, + isDetectingRemoteAgents: {} } const pinTabMock: (tabId: string) => void = vi.fn() const unpinTabMock: (tabId: string) => void = vi.fn() @@ -33,6 +41,10 @@ const useAppStoreMock = vi.fn( worktreesByRepo: Record unifiedTabsByWorktree: Record activeGroupIdByWorktree: Record + detectedAgentIds: string[] | null + remoteDetectedAgentIds: Record + isDetectingAgents: boolean + isDetectingRemoteAgents: Record pinTab: typeof pinTabMock unpinTab: typeof unpinTabMock settings: { @@ -50,6 +62,10 @@ const useAppStoreMock = vi.fn( worktreesByRepo: appStoreSnapshot.worktreesByRepo, unifiedTabsByWorktree: appStoreSnapshot.unifiedTabsByWorktree, activeGroupIdByWorktree: appStoreSnapshot.activeGroupIdByWorktree, + detectedAgentIds: appStoreSnapshot.detectedAgentIds, + remoteDetectedAgentIds: appStoreSnapshot.remoteDetectedAgentIds, + isDetectingAgents: appStoreSnapshot.isDetectingAgents, + isDetectingRemoteAgents: appStoreSnapshot.isDetectingRemoteAgents, pinTab: pinTabMock, unpinTab: unpinTabMock, settings: { @@ -107,6 +123,10 @@ useAppStoreExport.getState = vi.fn(() => ({ worktreesByRepo: appStoreSnapshot.worktreesByRepo, unifiedTabsByWorktree: appStoreSnapshot.unifiedTabsByWorktree, activeGroupIdByWorktree: appStoreSnapshot.activeGroupIdByWorktree, + detectedAgentIds: appStoreSnapshot.detectedAgentIds, + remoteDetectedAgentIds: appStoreSnapshot.remoteDetectedAgentIds, + isDetectingAgents: appStoreSnapshot.isDetectingAgents, + isDetectingRemoteAgents: appStoreSnapshot.isDetectingRemoteAgents, pinTab: pinTabMock, unpinTab: unpinTabMock, settings: { diff --git a/src/renderer/src/components/tab-bar/TabBarCreateEntry.tsx b/src/renderer/src/components/tab-bar/TabBarCreateEntry.tsx index 8783fdecc61..90f07105945 100644 --- a/src/renderer/src/components/tab-bar/TabBarCreateEntry.tsx +++ b/src/renderer/src/components/tab-bar/TabBarCreateEntry.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useMemo, useRef, useState } from 'react' -import { FilePlus, FileText, Globe, Loader2, Search } from 'lucide-react' +import { FilePlus, FileText, Globe, Loader2 } from 'lucide-react' import { Input } from '@/components/ui/input' import { AgentIcon } from '@/lib/agent-catalog' import { cn } from '@/lib/utils' @@ -100,7 +100,7 @@ export default function TabBarCreateEntry({ const statusMessage = statusOption?.classification.kind === 'empty' || statusOption?.classification.kind === 'blocked' ? statusOption.classification.message - : 'URL, file, or new file' + : 'Open any file, URL, agent, ...' const submitOption = (option?: ActiveOption) => { if (disabled || pending) { @@ -143,7 +143,7 @@ export default function TabBarCreateEntry({ return (
{ event.preventDefault() submitOption() @@ -164,11 +164,7 @@ export default function TabBarCreateEntry({ }} onPointerDown={(event) => event.stopPropagation()} > -
-