Skip to content

Conversation

@bvisible
Copy link
Owner

No description provided.

claude and others added 22 commits November 30, 2025 17:22
Add a complete Flutter-based file manager application that connects to
MCP SSH Manager via WebSocket, providing a FileZilla/Transmit-like interface
for remote file management.

New files:
- src/http-transport.js: HTTP/WebSocket transport for MCP server
- src/server-http.js: Standalone HTTP server exposing MCP tools
- flutter_app/: Complete Flutter application

Features:
- MCP Protocol compatible via WebSocket
- Server sidebar with connection status
- File browser with sorting and selection
- Create/rename/delete operations
- Transfer queue with progress tracking
- Responsive UI with Material 3 design
- Fix configLoader.listServers() -> configLoader.getAllServers()
- Fix configLoader.getServerConfig() -> configLoader.getServer()
- Add comprehensive test suite for HTTP/WebSocket server (33 tests)
- Add test:http npm script
The HTTP server was not loading the SSH server configuration,
resulting in "Available servers: (none configured)" message.

Added configLoader.load() call in main() before creating the transport.
…atibility

PopupMenuItem widgets in context menu were missing generic type annotations,
causing build errors on Flutter 3.0.x with strict type inference.

Changed:
- showMenu() → showMenu<void>()
- items: [] → items: <PopupMenuEntry<void>>[]
- PopupMenuItem() → PopupMenuItem<void>()
Added missing font files required by pubspec.yaml:
- fonts/JetBrainsMono-Regular.ttf
- fonts/JetBrainsMono-Bold.ttf

These fonts are used for monospace text display in the file browser.
Added macOS runner configuration with required entitlements:
- com.apple.security.app-sandbox
- com.apple.security.cs.allow-jit
- com.apple.security.network.server
- com.apple.security.network.client (required for WebSocket connections)

Generated with: flutter create --platforms=macos .
Added standard Flutter project files:
- .gitignore for Flutter build artifacts
- analysis_options.yaml for linting
- pubspec.lock for dependency pinning
- Add Settings dialog accessible from toolbar gear icon
- Configure default editor for opening files (VS Code, Cursor, Sublime, etc.)
- Auto-detect installed editors on macOS
- Support custom editor path selection
- Download and open remote files with configured editor on double-click
- Persist settings using shared_preferences

New files:
- lib/models/app_settings.dart: Settings model and known editors
- lib/services/settings_service.dart: Load/save settings, detect editors
- lib/services/file_opener_service.dart: Download and open files
- lib/providers/settings_provider.dart: State management for settings
- lib/widgets/settings_dialog.dart: Settings UI

Modified files:
- main.dart: Initialize SettingsProvider
- home_screen.dart: Add settings button
- file_browser_panel.dart: Handle file opening on double-click
- mcp_client.dart: Add downloadFile and uploadFile methods
- Fix file download by using base64 encoding via ssh_execute instead of
  ssh_download (which saves to MCP server, not Flutter client)
- Fix macOS sandboxed app opening by using 'open -a' command instead of
  direct command execution
- Add FileWatcherService to monitor local file changes and auto-sync
  back to remote server
- Use MD5 hash comparison to avoid duplicate syncs on multiple file
  system events
- Add debouncing (1s) and concurrent sync protection
- Add crypto package dependency for MD5 hashing
- Show snackbar notifications for sync status (syncing/success/error)
- Create EmbeddedServerService to auto-start Node.js MCP server
- Add splash screen during startup (initializing, connecting states)
- Auto-detect Node.js path (nvm, homebrew, system)
- Auto-detect server script path (dev, bundled, installed)
- Fall back to connecting to existing server if available
- Disable macOS sandbox to allow process spawning
- Show error screen with retry/manual connect options on failure
…configuration

- Add SSH server management UI (add/edit/delete connections)
- Add MCP tools configuration UI (enable/disable tool groups)
- Add Claude Code integration status checker
- Create ConfigService for TOML and JSON config management
- Auto-connect now fully transparent with embedded server
…mote file browsers

- Add LocalFileBrowser widget with Finder-like design
- Add RemoteFileBrowser widget with server selector dropdown
- Update HomeScreen with dual-pane layout (local left, remote right)
- Features: breadcrumb navigation, hidden files toggle, file icons, status bar
…ist_files

- Replace ~ with $HOME for proper shell expansion
- Use server's default_dir when no path is provided
- Return actual resolved path in response
- Create ServerSelector widget with grid and list view modes
- Add search filter to find servers by name, host, or user
- Remove auto-connect to first server on startup
- Add disconnect button to return to server selection
- User must now explicitly choose which server to connect to
- Local files: open directly with configured editor
- Remote files: download to temp folder then open with editor
- Show loading indicator during download
- Handle missing editor configuration with error message
- Add FileSyncService to watch opened files for changes
- Automatically upload modified files back to server
- Show sync status in snackbar notifications
- Poll for changes every 2 seconds
- Use base64 encoding for reliable file transfer
Add right-click context menu to both local and remote file browsers with:
- Open / Show in Finder (local) / Download (remote)
- File info dialog with details
- Rename with dialog
- Duplicate file/folder
- Move to path dialog
- Delete with confirmation
- New folder creation
- New file creation
- Refresh

Both panels support:
- Right-click on files for file-specific actions
- Right-click on empty space for new file/folder and refresh
- Snackbar notifications for success/error feedback
- Replace Material/Cupertino icons with HugeIcons stroke rounded style
- Fix icon type handling (List<List<dynamic>> instead of IconData)
- Update all widgets to use HugeIcon widget component
- Add hugeicons package dependency
- Add CLAUDE.md with mandatory testing rules for Claude Code
- Create test folder structure (unit, widget, mocks, helpers, fixtures)
- Add MockMcpClient for testing without server dependencies
- Add test helpers and factory functions for common test scenarios
- Add unit tests for models (AppSettings, EditorInfo, KnownEditors)
- Add unit tests for MCP classes (SshServer, RemoteFile, etc.)
- Add unit tests for providers (ConnectionProvider, FileBrowserProvider, TransferProvider)
- Add widget tests for ServerSelector
- 88 tests passing

Testing rules documented ensure future features always include tests
- Add DraggedLocalFiles and DraggedRemoteFiles data models for transfer operations
- Implement Draggable/DragTarget widgets for cross-panel drag & drop
- Add visual feedback with border highlighting when dragging over target
- Add "Upload to Server" context menu option in local file browser
- Wire up handlers in home_screen to queue transfers via TransferProvider
- Add 20 unit tests for drag & drop models (LocalFile, DraggedLocalFiles, etc.)

All 152 tests passing.
- Add sortable columns (Name, Date, Size) to both local and remote file browsers
- Click column headers to sort, click again to toggle ascending/descending
- Add auto-refresh: destination file browser refreshes after upload/download completes
- Add TransferProvider.onTransferComplete callback for transfer notifications
@bvisible bvisible closed this Dec 2, 2025
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.

3 participants