Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions apps/desktop/electron.vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,14 +102,7 @@ export default defineConfig({
output: {
dir: resolve(devPath, "main"),
},
external: [
"electron",
"better-sqlite3",
"node-pty",
"pg-native",
"mastracode",
"@ast-grep/napi",
],
external: ["electron", "better-sqlite3", "node-pty", "pg-native"],
plugins: [sentryPlugin].filter(Boolean),
},
},
Expand Down
2 changes: 0 additions & 2 deletions apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
},
"dependencies": {
"@ai-sdk/react": "^3.0.0",
"@ast-grep/napi": "^0.41.0",
"@better-auth/stripe": "1.4.18",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
Expand Down Expand Up @@ -141,7 +140,6 @@
"lowdb": "^7.0.1",
"lowlight": "^3.3.0",
"lucide-react": "^0.563.0",
"mastracode": "^0.3.0",
"monaco-editor": "^0.55.1",
"nanoid": "^5.1.6",
"node-addon-api": "^7.1.0",
Expand Down
23 changes: 0 additions & 23 deletions apps/desktop/src/lib/trpc/routers/settings/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import {
DEFAULT_SHOW_PRESETS_BAR,
DEFAULT_SHOW_RESOURCE_MONITOR,
DEFAULT_TERMINAL_LINK_BEHAVIOR,
DEFAULT_USE_COMPACT_TERMINAL_ADD_BUTTON,
} from "shared/constants";
import {
CUSTOM_RINGTONE_ID,
Expand Down Expand Up @@ -413,28 +412,6 @@ export const createSettingsRouter = () => {
return { success: true };
}),

getUseCompactTerminalAddButton: publicProcedure.query(() => {
const row = getSettings();
const useBigAddButton =
row.useBigTerminalAddButton ?? !DEFAULT_USE_COMPACT_TERMINAL_ADD_BUTTON;
return !useBigAddButton;
}),

setUseCompactTerminalAddButton: publicProcedure
.input(z.object({ enabled: z.boolean() }))
.mutation(({ input }) => {
localDb
.insert(settings)
.values({ id: 1, useBigTerminalAddButton: !input.enabled })
.onConflictDoUpdate({
target: settings.id,
set: { useBigTerminalAddButton: !input.enabled },
})
.run();

return { success: true };
}),

getTerminalLinkBehavior: publicProcedure.query(() => {
const row = getSettings();
return row.terminalLinkBehavior ?? DEFAULT_TERMINAL_LINK_BEHAVIOR;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
import type { TerminalPreset } from "@superset/local-db";
import { FEATURE_FLAGS } from "@superset/shared/constants";
import { Button } from "@superset/ui/button";
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@superset/ui/dropdown-menu";
import { useLiveQuery } from "@tanstack/react-db";
import { useNavigate, useParams } from "@tanstack/react-router";
import { useParams } from "@tanstack/react-router";
import { useFeatureFlagEnabled } from "posthog-js/react";
import {
useCallback,
Expand All @@ -11,22 +19,21 @@ import {
useRef,
useState,
} from "react";
import { BsTerminalPlus } from "react-icons/bs";
import { LuPlus } from "react-icons/lu";
import { TbMessageCirclePlus, TbWorld } from "react-icons/tb";
import { HotkeyMenuShortcut } from "renderer/components/HotkeyMenuShortcut";
import { electronTrpc } from "renderer/lib/electron-trpc";
import { usePresets } from "renderer/react-query/presets";
import { useCollections } from "renderer/routes/_authenticated/providers/CollectionsProvider";
import { useTabsStore } from "renderer/stores/tabs/store";
import { useTabsWithPresets } from "renderer/stores/tabs/useTabsWithPresets";
import {
isLastPaneInTab,
resolveActiveTabIdForWorkspace,
} from "renderer/stores/tabs/utils";
import {
DEFAULT_SHOW_PRESETS_BAR,
DEFAULT_USE_COMPACT_TERMINAL_ADD_BUTTON,
} from "shared/constants";
import { type ActivePaneStatus, pickHigherStatus } from "shared/tabs-types";
import { AddTabButton } from "./components/AddTabButton";
import { GroupItem } from "./GroupItem";
import { NewTabDropZone } from "./NewTabDropZone";

export function GroupStrip() {
const { workspaceId: activeWorkspaceId } = useParams({ strict: false });
Expand All @@ -35,7 +42,7 @@ export function GroupStrip() {
const panes = useTabsStore((s) => s.panes);
const activeTabIds = useTabsStore((s) => s.activeTabIds);
const tabHistoryStacks = useTabsStore((s) => s.tabHistoryStacks);
const { addTab, openPreset } = useTabsWithPresets();
const { addTab } = useTabsWithPresets();
const addChatMastraTab = useTabsStore((s) => s.addChatMastraTab);
const addBrowserTab = useTabsStore((s) => s.addBrowserTab);
const renameTab = useTabsStore((s) => s.renameTab);
Expand All @@ -46,8 +53,6 @@ export function GroupStrip() {
const reorderTabs = useTabsStore((s) => s.reorderTabs);

const setTabAutoTitle = useTabsStore((s) => s.setTabAutoTitle);
const { presets } = usePresets();
const navigate = useNavigate();

const hasAiChat = useFeatureFlagEnabled(FEATURE_FLAGS.AI_CHAT);
const scrollContainerRef = useRef<HTMLDivElement>(null);
Expand All @@ -56,8 +61,6 @@ export function GroupStrip() {
const utils = electronTrpc.useUtils();
const { data: showPresetsBar } =
electronTrpc.settings.getShowPresetsBar.useQuery();
const { data: useCompactTerminalAddButton } =
electronTrpc.settings.getUseCompactTerminalAddButton.useQuery();
const setShowPresetsBar = electronTrpc.settings.setShowPresetsBar.useMutation(
{
onMutate: async ({ enabled }) => {
Expand All @@ -76,30 +79,6 @@ export function GroupStrip() {
},
},
);
const setUseCompactTerminalAddButton =
electronTrpc.settings.setUseCompactTerminalAddButton.useMutation({
onMutate: async ({ enabled }) => {
await utils.settings.getUseCompactTerminalAddButton.cancel();
const previous =
utils.settings.getUseCompactTerminalAddButton.getData();
utils.settings.getUseCompactTerminalAddButton.setData(
undefined,
enabled,
);
return { previous };
},
onError: (_err, _vars, context) => {
if (context?.previous !== undefined) {
utils.settings.getUseCompactTerminalAddButton.setData(
undefined,
context.previous,
);
}
},
onSettled: () => {
utils.settings.getUseCompactTerminalAddButton.invalidate();
},
});

const tabs = useMemo(
() =>
Expand Down Expand Up @@ -181,18 +160,6 @@ export function GroupStrip() {
addBrowserTab(activeWorkspaceId);
};

const handleOpenPreset = useCallback(
(preset: TerminalPreset) => {
if (!activeWorkspaceId) return;
openPreset(activeWorkspaceId, preset, { target: "active-tab" });
},
[activeWorkspaceId, openPreset],
);

const handleOpenPresetsSettings = useCallback(() => {
navigate({ to: "/settings/presets" });
}, [navigate]);

const handleSelectGroup = (tabId: string) => {
if (activeWorkspaceId) {
setActiveTab(activeWorkspaceId, tabId);
Expand Down Expand Up @@ -252,29 +219,52 @@ export function GroupStrip() {
requestAnimationFrame(updateOverflow);
}, [updateOverflow]);

const useCompactAddButton =
useCompactTerminalAddButton ?? DEFAULT_USE_COMPACT_TERMINAL_ADD_BUTTON;

const plusControl = (
<AddTabButton
hasAiChat={hasAiChat === true}
useCompactAddButton={useCompactAddButton}
showPresetsBar={showPresetsBar ?? DEFAULT_SHOW_PRESETS_BAR}
presets={presets}
onDropToNewTab={movePaneToNewTab}
<NewTabDropZone
onDrop={(paneId) => movePaneToNewTab(paneId)}
isLastPaneInTab={checkIsLastPaneInTab}
onAddTerminal={handleAddGroup}
onAddChat={handleAddChat}
onAddBrowser={handleAddBrowser}
onOpenPreset={handleOpenPreset}
onConfigurePresets={handleOpenPresetsSettings}
onToggleShowPresetsBar={(enabled) =>
setShowPresetsBar.mutate({ enabled })
}
onToggleCompactAddButton={(enabled) =>
setUseCompactTerminalAddButton.mutate({ enabled })
}
/>
>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
variant="ghost"
size="icon"
className="size-7 px-1 shrink-0 rounded-md border border-border/60 bg-muted/30 text-muted-foreground hover:bg-accent/60 hover:text-foreground"
>
<LuPlus className="size-3.5" strokeWidth={1.8} />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-56">
<DropdownMenuItem onClick={handleAddGroup} className="gap-2">
<BsTerminalPlus className="size-4" />
<span>Terminal</span>
<HotkeyMenuShortcut hotkeyId="NEW_GROUP" />
</DropdownMenuItem>
{hasAiChat && (
<DropdownMenuItem onClick={handleAddChat} className="gap-2">
<TbMessageCirclePlus className="size-4" />
<span>Chat</span>
<HotkeyMenuShortcut hotkeyId="NEW_CHAT" />
</DropdownMenuItem>
)}
<DropdownMenuItem onClick={handleAddBrowser} className="gap-2">
<TbWorld className="size-4" />
<span>Browser</span>
<HotkeyMenuShortcut hotkeyId="NEW_BROWSER" />
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuCheckboxItem
checked={showPresetsBar ?? false}
onCheckedChange={(checked) =>
setShowPresetsBar.mutate({ enabled: checked })
}
onSelect={(e) => e.preventDefault()}
>
Show Preset Bar
</DropdownMenuCheckboxItem>
</DropdownMenuContent>
</DropdownMenu>
</NewTabDropZone>
);

return (
Expand Down Expand Up @@ -311,15 +301,7 @@ export function GroupStrip() {
</div>
)}
{hasHorizontalOverflow ? (
<div
className={`h-full shrink-0 ${
!useCompactAddButton
? hasAiChat
? "w-[220px]"
: "w-[170px]"
: "w-10"
}`}
/>
<div className="h-full w-10 shrink-0" />
) : (
<div className="shrink-0">{plusControl}</div>
)}
Expand Down
Loading
Loading