From f8c2fc38b8f93a4c9bee42ef7abf50862c91bb96 Mon Sep 17 00:00:00 2001 From: haikdc Date: Wed, 18 Mar 2026 02:55:21 -0700 Subject: [PATCH] [Haik]: ckpt (right click in dash triggers marquee drag) (if click enter while a single agent card is selected in dash -> triggers expand/collapse) (also btw that g workspace issue still exists in prod) --- backend/apps/tools_lib/tools_lib.py | 5 +++- electron/package-lock.json | 4 +-- electron/package.json | 2 +- .../src/app/pages/Dashboard/AgentCard.tsx | 2 ++ .../src/app/pages/Dashboard/BrowserCard.tsx | 2 ++ .../src/app/pages/Dashboard/Dashboard.tsx | 25 ++++++++++++++++++- .../app/pages/Dashboard/DashboardViewCard.tsx | 2 ++ .../pages/Dashboard/useDashboardSelection.ts | 2 +- 8 files changed, 38 insertions(+), 6 deletions(-) diff --git a/backend/apps/tools_lib/tools_lib.py b/backend/apps/tools_lib/tools_lib.py index b7710a9f..274f077c 100644 --- a/backend/apps/tools_lib/tools_lib.py +++ b/backend/apps/tools_lib/tools_lib.py @@ -618,7 +618,10 @@ async def _discover_mcp_tools_stdio(command: str, args: list[str] | None = None, proc.terminate() await asyncio.wait_for(proc.wait(), timeout=5.0) except Exception: - proc.kill() + try: + proc.kill() + except Exception: + pass @tools_lib.router.post("/{tool_id}/discover") diff --git a/electron/package-lock.json b/electron/package-lock.json index 7fbc9ffd..bb3fa6aa 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -1,12 +1,12 @@ { "name": "openswarm", - "version": "1.0.5", + "version": "1.0.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "openswarm", - "version": "1.0.5", + "version": "1.0.6", "hasInstallScript": true, "dependencies": { "electron-updater": "^6.3.0", diff --git a/electron/package.json b/electron/package.json index 812e5983..3be7cad4 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "openswarm", - "version": "1.0.5", + "version": "1.0.6", "description": "OpenSwarm — AI Agent Orchestrator", "main": "main.js", "scripts": { diff --git a/frontend/src/app/pages/Dashboard/AgentCard.tsx b/frontend/src/app/pages/Dashboard/AgentCard.tsx index 7e02b366..12bfb9dc 100644 --- a/frontend/src/app/pages/Dashboard/AgentCard.tsx +++ b/frontend/src/app/pages/Dashboard/AgentCard.tsx @@ -214,6 +214,7 @@ const AgentCard: React.FC = ({ const justDraggedRef = useRef(false); const handleDragPointerDown = useCallback((e: React.PointerEvent) => { + if (e.button !== 0) return; e.preventDefault(); e.stopPropagation(); dragState.current = { startX: e.clientX, startY: e.clientY, origX: cardX, origY: cardY }; @@ -274,6 +275,7 @@ const AgentCard: React.FC = ({ const handleResizeDown = useCallback( (dir: ResizeDir) => (e: React.PointerEvent) => { + if (e.button !== 0) return; e.preventDefault(); e.stopPropagation(); const effectiveW = Math.max(cardWidth, MIN_W); diff --git a/frontend/src/app/pages/Dashboard/BrowserCard.tsx b/frontend/src/app/pages/Dashboard/BrowserCard.tsx index bf5eb8f8..58c2e47d 100644 --- a/frontend/src/app/pages/Dashboard/BrowserCard.tsx +++ b/frontend/src/app/pages/Dashboard/BrowserCard.tsx @@ -376,6 +376,7 @@ const BrowserCard: React.FC = ({ const justDraggedRef = useRef(false); const handleDragPointerDown = useCallback((e: React.PointerEvent) => { + if (e.button !== 0) return; e.preventDefault(); e.stopPropagation(); dragState.current = { startX: e.clientX, startY: e.clientY, origX: cardX, origY: cardY }; @@ -431,6 +432,7 @@ const BrowserCard: React.FC = ({ const handleResizeDown = useCallback( (dir: ResizeDir) => (e: React.PointerEvent) => { + if (e.button !== 0) return; e.preventDefault(); e.stopPropagation(); resizeRef.current = { diff --git a/frontend/src/app/pages/Dashboard/Dashboard.tsx b/frontend/src/app/pages/Dashboard/Dashboard.tsx index d25093a4..79c62974 100644 --- a/frontend/src/app/pages/Dashboard/Dashboard.tsx +++ b/frontend/src/app/pages/Dashboard/Dashboard.tsx @@ -13,6 +13,7 @@ import { generateTitle, resumeSession, setExpandedSessionIds, + toggleExpandSession, } from '@/shared/state/agentsSlice'; import type { AgentConfig } from '@/shared/state/agentsSlice'; import { @@ -159,11 +160,17 @@ const DashboardInner: React.FC = () => { canvas.handlers.onMouseDown(e); return; } + + if (e.button === 2) { + e.preventDefault(); + selection.handleCanvasMouseDown(e.nativeEvent); + return; + } + if (e.button !== 0) return; if (isCardTarget(e.target, e.currentTarget)) return; if (isElementSelectMode) { - // Cmd/Ctrl held → allow panning even in element select mode if (e.metaKey || e.ctrlKey) { canvas.handlers.onMouseDown(e); } @@ -348,6 +355,21 @@ const DashboardInner: React.FC = () => { return () => window.removeEventListener('keydown', handleShortcut); }, [newAgentShortcut]); + useEffect(() => { + const handleEnter = (e: KeyboardEvent) => { + if (e.key !== 'Enter') return; + const tag = (e.target as HTMLElement)?.tagName; + if (tag === 'INPUT' || tag === 'TEXTAREA' || (e.target as HTMLElement)?.isContentEditable) return; + if (selection.selectedIds.size !== 1) return; + const [id, type] = selection.selectedIds.entries().next().value!; + if (type !== 'agent') return; + e.preventDefault(); + dispatch(toggleExpandSession(id)); + }; + window.addEventListener('keydown', handleEnter); + return () => window.removeEventListener('keydown', handleEnter); + }, [selection.selectedIds, dispatch]); + const handleNewAgent = useCallback(() => { setToolbarOpen(true); }, []); @@ -508,6 +530,7 @@ const DashboardInner: React.FC = () => { onMouseDown={handleViewportMouseDown} onMouseMove={handleViewportMouseMove} onMouseUp={handleViewportMouseUp} + onContextMenu={(e) => e.preventDefault()} sx={{ position: 'absolute', inset: 0, diff --git a/frontend/src/app/pages/Dashboard/DashboardViewCard.tsx b/frontend/src/app/pages/Dashboard/DashboardViewCard.tsx index 7b6437c2..135214ee 100644 --- a/frontend/src/app/pages/Dashboard/DashboardViewCard.tsx +++ b/frontend/src/app/pages/Dashboard/DashboardViewCard.tsx @@ -80,6 +80,7 @@ const DashboardViewCard: React.FC = ({ const justDraggedRef = useRef(false); const handleDragPointerDown = useCallback((e: React.PointerEvent) => { + if (e.button !== 0) return; e.preventDefault(); e.stopPropagation(); dragState.current = { startX: e.clientX, startY: e.clientY, origX: cardX, origY: cardY }; @@ -135,6 +136,7 @@ const DashboardViewCard: React.FC = ({ const handleResizeDown = useCallback( (dir: ResizeDir) => (e: React.PointerEvent) => { + if (e.button !== 0) return; e.preventDefault(); e.stopPropagation(); resizeRef.current = { diff --git a/frontend/src/app/pages/Dashboard/useDashboardSelection.ts b/frontend/src/app/pages/Dashboard/useDashboardSelection.ts index 02640950..aa84f6e2 100644 --- a/frontend/src/app/pages/Dashboard/useDashboardSelection.ts +++ b/frontend/src/app/pages/Dashboard/useDashboardSelection.ts @@ -155,7 +155,7 @@ export function useDashboardSelection( const handleCanvasMouseDown = useCallback( (e: MouseEvent) => { - if (e.button !== 0) return; + if (e.button !== 0 && e.button !== 2) return; marqueeOriginRef.current = { screenX: e.clientX, screenY: e.clientY }; isDraggingMarqueeRef.current = false;