Skip to content

Feature/unified header multi pane#522

Open
gokulb20 wants to merge 22 commits intorowboatlabs:mainfrom
gokulb20:feature/unified-header-multi-pane
Open

Feature/unified header multi pane#522
gokulb20 wants to merge 22 commits intorowboatlabs:mainfrom
gokulb20:feature/unified-header-multi-pane

Conversation

@gokulb20
Copy link
Copy Markdown

No description provided.

Gokul and others added 22 commits April 26, 2026 14:42
- Remove all Rowboat cloud sign-in (isSignedIn() always returns false)
- Delete gateway.ts, billing.ts, rowboat.ts (cloud API clients)
- Remove 'rowboat' from LlmProvider enum
- Strip isSignedIn() branches from defaults, composio, voice, tools
- Remove sign-in UI from sidebar, settings, connectors popover
- Replace model settings with Ollama-only locked dropdown (GLM 5.1, Kimi K2.6, DeepSeek-v4-flash)
- Skip onboarding welcome/model steps, go straight to Connect Accounts
- Disable PostHog analytics (all tracking functions are no-ops)
- Disable auto-updater (commented out with fork reference)
- Add Bearer auth support for Ollama Cloud API key
- Restore ToolsLibrarySettings component (was accidentally deleted)

Net: -1124 lines of cloud-dependent code removed. App runs fully
offline/self-hosted with user-provided API keys only.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Add Composio API key fixture (COMPOSIO_API_KEY env var, auto-seeded at startup)
- Fully remove Fireflies integration (deleted sync_fireflies.ts, fireflies-client-factory.ts, OAuth provider, all UI references, prompt text, and sidebar labels — 20+ files)
- Remove dead Rowboat-cloud code from sidebar-content.tsx (isRowboatConnected, useBilling, handleRowboatLogin, appUrl)
- Fix settings dialog crash caused by defaulting to removed 'account' tab
- Delete dead useBilling hook and AccountSettings component
- Add React.memo on Message, ChatSidebar, SuggestedTopicsView, ChatInputWithMentions
- Add IPC caching for model config reads (30s TTL)
- Vite code splitting: settings and onboarding into separate chunks with React.lazy
- Main process: only start Gmail/Calendar/Granola syncs if config files exist
- Remove framer-motion from onboarding flow
- Fix onboarding-modal.tsx AnimatePresence removal

Net: -218 lines, +238 lines across 36 files

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…med export

- Remove undefined hasUnconnectedNotes reference from connectors-popover.tsx
- Remove dead isRowboatUnconnected and hasUnconnectedMeetingNotes variables
- Fix React.lazy for OnboardingModal (named export needs .then wrapper)
- Remove DevTools auto-open (debug only)

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…only

Connect Accounts, Connectors popover, and Settings now only show
Composio-based Gmail/Calendar connection. Direct Google OAuth
(requiring Client ID/Secret) removed from all UI surfaces.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Add core Supermemory client (add, profile, search, testConnection)
- Add IPC handlers for supermemory:is-configured/set-api-key/test-connection
- Create MemorySettings component with API key input + test connection
- Replace Connected Accounts tab with Memory tab in Settings
- Skip onboarding to step 3 (completion) since Connect Accounts removed
- Auto-seed SUPERMEMORY_API_KEY from environment at startup

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Decouple from Rowboat cloud: make app fully self-hosted/BYOK
…-fixture

Remove Fireflies, add Composio key fixture, performance optimizations
Fix white screen crash + remove direct Google OAuth
Add Supermemory integration — Memory tab replaces Connected Accounts
- App title, product name, executable name → Assistant
- Remove Connect Accounts button from sidebar (keep Settings + Help)
- Replace all user-facing Rowboat strings with generic equivalents
- Help popover: add GitHub repo + docs links, remove rowboatlabs TOS/privacy
- Electron forge config: update app bundle ID, author, homepage
- Onboarding: Welcome to Assistant, Get Started, generic sign-in text
- Screen recording prompt, email block draft text: generic
- Theme localStorage key: app-theme (was rowboat-theme)

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Rebrand: remove Rowboat branding, replace with generic Assistant
- New MeetingsView component with live transcription display
- Record/Stop button in Meetings header starts/stops Deepgram transcription
- Shows live transcript entries in real-time while recording
- Recent meeting notes list (from knowledge/Meetings/)
- Sidebar button: Mic icon, 'Meetings' label (was Suggested Topics)
- Expose liveTranscript from useMeetingTranscription hook
- Rename all suggestedTopics state → meetings throughout App.tsx
- Chat sidebar stays interactive during recording

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Replace Suggested Topics with Meeting Notepad
- Add /workspace/ endpoint to local-sites server (serves any workspace file via http)
- Route non-md/non-base files through embedded browser on navigate
- HTML code blocks in chat get 'Open in browser' + in-line preview buttons
- Browser auto-opens when clicking PDFs, images, HTML, SVG, CSV, etc.
- Smooth fade-in animation on browser pane
- Workspace file server with proper MIME types (PDF, CSV, MD, etc.)
- Keep 'Run browser task' sidebar button as manual browser launcher

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Make browser the default file/artifact viewer
- Route HTML/image/PDF/SVG files through embedded browser via browser:newTab
  instead of shell:openPath, fixing bug where they opened externally
- MD files now render as browser tabs via /md-view/<path> endpoint
  with styled HTML, dark/light mode, and Edit Source button
- Add markdownToHtml() inline converter to local-sites server
- browser:navigate replaced with browser:newTab for file/artifact opens
  so each gets its own tab
- Change browser HOME_URL from google.com to localhost:3210/sites/homepage/
- Bootstrap default homepage dashboard in sites/homepage/index.html
- Add rowboat://md-edit protocol for Edit Source button in MD view
- Add browser:mdEdit IPC channel for md-edit actions

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Fix critical bug: browser:newTab IPC param was 'rawUrl' but handler uses
  'args.url', causing all file opens to land on HOME_URL instead of the
  actual file. Changed all callers to pass { url } not { rawUrl }
- Add Home button to sidebar above New Chat that opens browser to
  https://gokul.vision (configurable in future)
- Import Home icon from lucide-react in sidebar-content.tsx

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Add /local-file?p=<path> endpoint to local-sites server that resolves
  absolute paths (including ~/) and serves files with viewable extensions
- Fix SystemFileCard to detect workspace vs external paths:
  workspace-relative paths use /workspace/, external paths use /local-file
- This fixes PDFs and other external files failing to open because
  /workspace/ couldn't serve paths like ~/Desktop/YZY.pdf
- Security: /local-file only serves allowed extensions (.pdf, .html, .svg,
  .png, .jpg, etc.) and resolves ~ to home directory

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Changed Home button URL from gokul.vision to gokuls.vision
- Fixed /local-file endpoint: path.join(os.homedir(), rawPath.slice(1))
  incorrectly resolved ~/ paths because slice(1) includes leading /.
  Now strips leading slashes before joining with homedir.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Create vault.ts: config loader, folder resolution, default folder detection
  (workspace, Downloads, Desktop, Documents auto-detected on first boot)
- Add /vault/:alias/* endpoint to local-sites server that resolves alias to
  physical folder and serves files with proper Content-Type
- Add /vault.json endpoint returning current vault configuration
- Auto-create ~/.rowboat/config/vault.json on startup with workspace
  plus auto-detected common folders
- Update all file URLs from /workspace/ to /vault/workspace/ (workspace alias)
- Keep /workspace/ and /local-file/ as backward-compatible endpoints
- Path traversal protection: files can only be served from within their vault folder

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
If browser:newTab IPC call fails, fall back to shell:openPath
instead of silently doing nothing. This ensures files always open
somewhere even if the browser pane isn't available.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…wser z-index

- Remove Meetings feature entirely (meetings-view.tsx deleted, all meeting code removed from App.tsx and sidebar)
- Replace single LeftPane per tab with LeftPane[] array (leftPanesByTab) with sub-tab bar in left pane
- Add sub-tab bar showing browser/markdown/bases/graph/task panes with close buttons
- Unified full-width header spanning both left pane and chat sidebar
- Remove ChatSidebar header (maximize button moved to unified header)
- Add Globe browser toggle and Maximize button to unified header
- Remove SquarePen new-chat button from header, remove Home/Run Browser Task from sidebar
- Remove 🌐 prefix from tab titles
- Fix browser WebContentsView appearing over search by hiding on isSearchOpen
- Fix TabBar: remove max-width constraint, make scrollable, remove overflow-hidden from header
- Fix temporal dead zone crash: syncPaneState uses ref for ensureFileTabForPath
- Fix pane rendering: use activeLeftPane.path instead of selectedPath for null-safety
- Fix ChatSidebar border: remove left border when maximized (full-width chat)
- Remove old conditional buttons (expandedFrom restore, knowledge maximize, new-chat)
- Wrap ContentHeader + split pane in vertical flex container for proper layout
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant