diff --git a/electron/package.json b/electron/package.json index 909a4472..285bd1e9 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "openswarm", - "version": "1.1.62", + "version": "1.1.63", "description": "OpenSwarm — AI Agent Orchestrator", "author": "openswarm-ai", "main": "main.js", diff --git a/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx b/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx index 67cd7c09..3f0bc7d7 100644 --- a/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx +++ b/frontend/src/app/components/Onboarding/ac/AgenticCursor.tsx @@ -259,7 +259,14 @@ const AgenticCursor = forwardRef((_props, ref) => { zIndex: 10500, pointerEvents: 'none', transformOrigin: 'top left', - ...(IS_WIN ? { transform: `translate(${storePos.x}px, ${storePos.y}px)` } : null), + ...(IS_WIN + ? { + transform: `translate(${storePos.x}px, ${storePos.y}px)`, + // Closest CSS approximation of the Mac spring (stiffness 260, damping 26): a softly easing ~420ms cubic-bezier. Without this the cursor teleports because the shim strips Framer's spring runtime. + transition: 'transform 420ms cubic-bezier(0.22, 1, 0.36, 1)', + willChange: 'transform', + } + : null), }} > {visible && ( diff --git a/frontend/src/app/pages/AgentChat/ChatInput/hooks/useEditorHandlers.ts b/frontend/src/app/pages/AgentChat/ChatInput/hooks/useEditorHandlers.ts index d4e233f0..d1544823 100644 --- a/frontend/src/app/pages/AgentChat/ChatInput/hooks/useEditorHandlers.ts +++ b/frontend/src/app/pages/AgentChat/ChatInput/hooks/useEditorHandlers.ts @@ -71,7 +71,7 @@ export function useEditorHandlers(p: Params) { const updateHasContent = useCallback(() => { const editor = editorRef.current; if (!editor) return; - const text = (editor.textContent || '').replace(/\u200B/g, ''); + const text = readEditorText(editor).replace(/\u200B/g, ''); const hasPills = editor.querySelector(`[${SKILL_PILL_ATTR}]`) !== null; setHasContent(text.trim().length > 0 || hasPills); }, []); @@ -104,7 +104,7 @@ export function useEditorHandlers(p: Params) { const { [skillId]: _, ...rest } = prev; return rest; }); - const text = (editor.textContent || '').replace(/\u200B/g, ''); + const text = readEditorText(editor).replace(/\u200B/g, ''); const hasPills = editor.querySelector(`[${SKILL_PILL_ATTR}]`) !== null; setHasContent(text.trim().length > 0 || hasPills); editor.focus(); diff --git a/frontend/src/app/pages/AgentChat/ChatInput/toolbar/ToolbarActions.tsx b/frontend/src/app/pages/AgentChat/ChatInput/toolbar/ToolbarActions.tsx index c0b92e20..78af52ce 100644 --- a/frontend/src/app/pages/AgentChat/ChatInput/toolbar/ToolbarActions.tsx +++ b/frontend/src/app/pages/AgentChat/ChatInput/toolbar/ToolbarActions.tsx @@ -2,9 +2,6 @@ import React, { RefObject } from 'react'; import Box from '@mui/material/Box'; import IconButton from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; - -// Windows ablation re-instated in v1.1.58: the file input AND the contentEditable were BOTH crashers. v1.1.57's restore of brought back the AgentChat-children commit segfault (crash fires right after AgentChat:before-jsx without any child render logs). Drag-and-drop attach still works via AttachmentChips drop zone on Windows. Future: replace this button with an Electron native showOpenDialog IPC so the button is functional on Windows again without touching . -const IS_WIN = typeof navigator !== 'undefined' && navigator.userAgent.includes('Windows'); import MicNoneOutlinedIcon from '@mui/icons-material/MicNoneOutlined'; import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward'; import StopIcon from '@mui/icons-material/Stop'; @@ -85,39 +82,34 @@ export const ToolbarActions: React.FC = ({ ); })()} - {/* Windows-only ablation: hidden + attach button skipped on Windows to test whether IFileDialog COM init is the trigger for the Chromium 144 commit-phase segfault. Mac still renders both (drag/paste/click attach all work). On Windows, drag-and-drop attach still works via AttachmentChips drop zone. */} - {!IS_WIN && ( - { - if (!e.target.files) return; - const all = Array.from(e.target.files); - const imgs = all.filter((f) => f.type.startsWith('image/')); - const rest = all.filter((f) => !f.type.startsWith('image/')); - if (imgs.length > 0) addImageFiles(imgs); - if (rest.length > 0) uploadAndAttachFiles(rest); - e.target.value = ''; + { + if (!e.target.files) return; + const all = Array.from(e.target.files); + const imgs = all.filter((f) => f.type.startsWith('image/')); + const rest = all.filter((f) => !f.type.startsWith('image/')); + if (imgs.length > 0) addImageFiles(imgs); + if (rest.length > 0) uploadAndAttachFiles(rest); + e.target.value = ''; + }} + /> + + generalFileInputRef.current?.click()} + sx={{ + color: c.text.tertiary, + p: 0.5, + '&:hover': { color: c.text.secondary, bgcolor: 'rgba(0,0,0,0.04)' }, }} - /> - )} - {!IS_WIN && ( - - generalFileInputRef.current?.click()} - sx={{ - color: c.text.tertiary, - p: 0.5, - '&:hover': { color: c.text.secondary, bgcolor: 'rgba(0,0,0,0.04)' }, - }} - > - - - - )} + > + + + {!autoRunMode && ( {hasContent && ( diff --git a/frontend/src/app/pages/AgentChat/ChatInput/view/EditorSurface.tsx b/frontend/src/app/pages/AgentChat/ChatInput/view/EditorSurface.tsx index 03ad4314..03977d82 100644 --- a/frontend/src/app/pages/AgentChat/ChatInput/view/EditorSurface.tsx +++ b/frontend/src/app/pages/AgentChat/ChatInput/view/EditorSurface.tsx @@ -18,9 +18,6 @@ interface Props { onPaste: (e: React.ClipboardEvent) => void; } -// Windows-only ablation: on Chromium 144 + Castlabs Electron 40, mounting a
initializes the Windows Text Services Framework (TSF) edit-context shim which segfaults during React commit (0xC0000005). Plain