Conversation
- Introduced IdeSettingsContext to manage theme and liquid glass settings across components. - Updated various components (e.g., ActivityBar, Sidebar, StatusBar) to support dynamic theming and glass effects. - Implemented scope color fetching and CSS variable updates for improved visual feedback. - Added a new IdeTitlebar component for a cohesive titlebar experience with search functionality. - Enhanced loading states and error handling in the IDE layout. - Refactored styles to align with Panager's design, ensuring a consistent user experience.
- Updated EditorTabs component to use a new layout with a fixed height and relative positioning. - Added a custom thin overlay scrollbar for better aesthetics and usability in the tabs. - Adjusted tab item widths for improved responsiveness and visual consistency.
- Added support for displaying left and right-aligned plugin status bar items in the StatusBar component. - Utilized useMemo for optimized rendering of status items based on their alignment. - Updated layout to accommodate new plugin items alongside existing file and Git information.
- Added functionality to convert preview tabs to permanent tabs on double-click in the EditorTabs component. - Implemented openFilePreview method in the file store to manage file previews. - Updated FileTreeNode to support single-click for previewing files and double-click for opening them permanently. - Enhanced file state management to track preview status and improve user experience with file interactions.
- Added Git blame support in the Monaco editor, displaying inline blame information for modified lines. - Implemented a commit input component for quick commits, allowing users to stage and amend commits directly from the UI. - Introduced a branch selector component for easier branch management within the IDE. - Enhanced the Git panel with stash management features, including stash pop, apply, and drop functionalities. - Updated the file tree and editor components to reflect Git status indicators for better visual feedback on file changes. - Integrated new hooks for managing Git blame and gutter decorations, improving the overall user experience with version control.
- Added support for Shiki syntax highlighting in the Monaco editor, improving code readability with TextMate-based themes. - Introduced a new hook for managing editor state, centralizing file content, blame data, and session information. - Updated editor components to utilize the new editor store for managing open tabs and file states. - Refactored existing components to streamline file handling and improve performance. - Enhanced the initialization process for Monaco to ensure a smooth user experience with reduced loading times.
- Added .yarnrc.yml to configure Yarn with nodeLinker set to node-modules. - Replaced npm commands with Yarn equivalents in Dockerfile, docker-compose.yml, and GitHub workflows for consistency. - Updated README.md to reflect Yarn usage for installation and build commands. - Introduced yarn.lock for dependency management. - Added patches for @monaco-editor/react to ensure compatibility with Yarn. - Enhanced build scripts to utilize Yarn for improved performance and reliability.
- Enhanced the openTab function to check both fileStates and openTabs for existing tabs, ensuring robustness in tab management. - Added logic to populate fileStates from openTabs after rehydration, improving state consistency. - Updated persistence logic to clarify that openTabs are managed separately to avoid restoration issues.
- Introduced a new hook, useRevealActiveFile, to automatically reveal the active file in the file tree when the active tab changes. - Enhanced FileTreePanel to utilize the new hook, improving user experience by ensuring the active file is visible. - Added a ref for the scrollable tree container to facilitate smooth scrolling to the active file. - Updated the file tree node to include a data attribute for file paths, aiding in the reveal functionality.
- Introduced a new GitChangeTree component to display staged, unstaged, and untracked changes in a hierarchical tree format. - Implemented diff tab functionality to view differences between file versions directly within the IDE. - Enhanced GitPanel to support toggling between list and tree views for better change management. - Updated editor store to manage diff tab states and integrate with existing file handling logic. - Improved file click handling to open diffs and manage file previews seamlessly.
- Updated EditorTabs component to manage both file and diff tabs using a unified TabState structure. - Introduced type guards for distinguishing between file and diff tabs, enhancing type safety. - Refactored state management in the editor store to streamline tab operations and improve performance. - Enhanced ContentArea and StatusBar components to utilize the new tab management logic. - Improved GitPanel to correctly derive selected file paths from active tabs, supporting both file and diff views.
… tabs - Introduced a new settings store to manage IDE settings with a three-tier hierarchy: user, scope, and workspace. - Added an IDE settings dialog for users to configure settings across different levels. - Implemented various settings tabs including General, Editor, Git, and Behavior settings for comprehensive configuration. - Enhanced file handling to support format-on-save functionality based on user-defined settings. - Integrated settings management into existing components, ensuring a seamless user experience with real-time updates. - Updated the Monaco editor and other components to utilize settings from the new store for improved customization.
- Introduced a comprehensive integration plan for the Agent Client Protocol (ACP) to enable AI-assisted coding features. - Added new components including ChatPanel, ChatMessage, ApprovalBanner, and DiffApprovalCard for enhanced user interaction. - Implemented state management for agent sessions, messages, and approvals using Zustand. - Developed a RightSidebar and RightActivityBar for seamless access to chat and task functionalities. - Created settings management for agent modes and approval workflows within the IDE settings dialog. - Integrated Tauri commands for ACP operations, facilitating communication with the backend. - Enhanced the IDE layout to accommodate new panels and improve user experience with real-time updates.
…new components - Introduced a unified entry architecture for chat sessions, allowing for consistent handling of messages, tool calls, and permission requests. - Added new components including MarkdownContent, ToolCallCard, ThoughtCard, PlanCard, and ModeChangeCard to improve user interaction and display of various entry types. - Implemented a PermissionDialog for managing user permissions on tool execution requests. - Enhanced ChatPanel and ChatMessage components to support the new entry structure and improve overall chat experience. - Updated state management in the agent store to accommodate new entry types and ensure seamless integration with the ACP backend. - Refactored existing components to align with the new architecture, improving maintainability and performance.
… file handling - Introduced a new ToolCallGroup component to render consecutive tool calls in a collapsible format, enhancing user interaction and organization of tool call entries. - Updated ChatMessage and ChatPanel components to support the new isTab prop, allowing for better display management in different contexts (tab vs sidebar). - Implemented debouncing for file modification events in useFileWatcher to improve performance and reduce unnecessary updates. - Enhanced file tree management in useFilesStore to ensure proper addition and removal of files, including handling of gitignored paths. - Added support for gitignore patterns in the file watcher to filter out events for ignored files, improving overall file management efficiency. - Refactored MarkdownContent styles to ensure proper overflow handling for tables, enhancing content display in the chat interface. - Introduced a new ide.db file for improved state management and persistence across sessions.
- Introduced a new inlay hints provider to display inline type and parameter hints in the Monaco editor. - Enhanced EditorSettingsTab to allow configuration of inlay hints, including toggles for parameter names, types, and more. - Implemented LSP commands for fetching inlay hints, integrating with the existing LSP infrastructure. - Updated settings management to include inlay hints options, ensuring user customization is preserved. - Added necessary types and interfaces for inlay hints in the LSP and settings modules. - Created a new ide.db file for improved state management and persistence across sessions.
- Add AI button in EditorTabs to open new chat tabs - Create ChatTabContent component with centered input for new sessions - Update ContentArea to render chat tabs - Add header with plan progress tracking in chat tab - Implement "type to start session" flow in both sidebar and tab - Generate session names from first user message - Sync tab names when session name changes
There was a problem hiding this comment.
Pull request overview
This PR introduces initial view files functionality for the IDE, including a Monaco editor wrapper, editor tabs system, diff viewer, dialog components for quick file access and navigation, and various agent/chat interface components. The changes also include CSS utility class syntax updates and package manager configuration changes.
Changes:
- Added Monaco editor integration with support for themes, language detection, and editor settings
- Implemented editor tabs with preview/permanent states, git status indicators, and diff/chat tab types
- Created dialog components for quick file opening and line navigation
- Added comprehensive agent/chat interface components for AI interactions
- Updated CSS utility classes syntax across multiple UI components
- Switched package manager references from npm to yarn
Reviewed changes
Copilot reviewed 107 out of 196 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| src/ide/components/editor/MonacoEditor.tsx | Monaco editor wrapper with theme support and settings integration |
| src/ide/components/editor/EditorTabs.tsx | Tab bar component with git status, preview tabs, and chat integration |
| src/ide/components/editor/DiffEditor.tsx | Side-by-side diff viewer for git changes |
| src/ide/components/dialogs/QuickOpenDialog.tsx | Cmd+P quick file search dialog |
| src/ide/components/dialogs/GoToLineDialog.tsx | Cmd+G line navigation dialog |
| src/ide/components/agent/*.tsx | Chat panel, message rendering, tool call cards, and AI interaction components |
| src/ide/IdeApp.tsx | IDE root component with project context and settings |
| src/components/ui/*.tsx | CSS utility class syntax updates (focus:outline-hidden, backdrop-blur-xs, etc.) |
| src/components/projects/*.tsx | Added onViewFiles prop and updated CSS classes |
| src/bindings/types.ts | Updated package manager reference to yarn |
| src-tauri/tauri.conf.json | Updated build commands to use yarn |
| src-tauri/src/plugins/*.rs | Plugin system implementation with TypeScript LSP support |
| src-tauri/src/ide/*.rs | IDE backend commands for file operations, git, and LSP |
| src-tauri/src/acp/*.rs | Agent Client Protocol implementation |
| postcss.config.js | Updated to use @tailwindcss/postcss plugin |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -86,7 +86,7 @@ export function CommandPalette({ | |||
| onOpenChange={onOpenChange} | |||
| label="Command Palette" | |||
| overlayClassName={ | |||
| useLiquidGlass ? "!bg-transparent" : "bg-black/40 backdrop-blur-sm" | |||
| useLiquidGlass ? "bg-transparent!" : "bg-black/40 backdrop-blur-xs" | |||
There was a problem hiding this comment.
Invalid Tailwind important modifier syntax. bg-transparent! should be !bg-transparent (important modifier comes before the class name).
| useLiquidGlass ? "bg-transparent!" : "bg-black/40 backdrop-blur-xs" | |
| useLiquidGlass ? "!bg-transparent" : "bg-black/40 backdrop-blur-xs" |
| "**:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5", | ||
| "**:[[cmdk-group-heading]]:text-[11px] **:[[cmdk-group-heading]]:font-medium", | ||
| "**:[[cmdk-group-heading]]:text-muted-foreground/60 **:[[cmdk-group-heading]]:uppercase", | ||
| "**:[[cmdk-group-heading]]:tracking-wide" |
There was a problem hiding this comment.
Invalid attribute selector syntax. **:[[cmdk-group-heading]] should be [&_[cmdk-group-heading]] for proper CSS descendant selection.
| "**:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5", | |
| "**:[[cmdk-group-heading]]:text-[11px] **:[[cmdk-group-heading]]:font-medium", | |
| "**:[[cmdk-group-heading]]:text-muted-foreground/60 **:[[cmdk-group-heading]]:uppercase", | |
| "**:[[cmdk-group-heading]]:tracking-wide" | |
| "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5", | |
| "[&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-medium", | |
| "[&_[cmdk-group-heading]]:text-muted-foreground/60 [&_[cmdk-group-heading]]:uppercase", | |
| "[&_[cmdk-group-heading]]:tracking-wide" |
| @@ -46,7 +46,7 @@ const DropdownMenuSubContent = React.forwardRef< | |||
| <DropdownMenuPrimitive.SubContent | |||
| ref={ref} | |||
| className={cn( | |||
| "z-50 min-w-[8rem] overflow-hidden p-1", | |||
| "z-50 min-w-32 overflow-hidden p-1", | |||
There was a problem hiding this comment.
Invalid Tailwind class. min-w-32 should be min-w-[8rem] (arbitrary value) since Tailwind doesn't have a min-w-32 utility by default.
| "z-50 min-w-32 overflow-hidden p-1", | |
| "z-50 min-w-[8rem] overflow-hidden p-1", |
| "focus:bg-black/5 dark:focus:bg-white/10", | ||
| "data-[disabled]:pointer-events-none data-[disabled]:opacity-50", | ||
| "data-disabled:pointer-events-none data-disabled:opacity-50", |
There was a problem hiding this comment.
Invalid data attribute syntax. data-disabled: should be data-[disabled]: (data attributes require square brackets in Tailwind).
| "focus:bg-black/5 dark:focus:bg-white/10", | ||
| "data-[disabled]:pointer-events-none data-[disabled]:opacity-50", | ||
| "data-disabled:pointer-events-none data-disabled:opacity-50", |
There was a problem hiding this comment.
Invalid data attribute syntax. data-disabled: should be data-[disabled]: (data attributes require square brackets in Tailwind).
| "focus:bg-black/5 dark:focus:bg-white/10", | ||
| "data-[disabled]:pointer-events-none data-[disabled]:opacity-50", | ||
| "data-disabled:pointer-events-none data-disabled:opacity-50", |
There was a problem hiding this comment.
Invalid data attribute syntax. data-disabled: should be data-[disabled]: (data attributes require square brackets in Tailwind).
| @@ -22,7 +22,7 @@ const DialogOverlay = React.forwardRef< | |||
| ref={ref} | |||
| className={cn( | |||
| "fixed inset-0 z-50", | |||
| useLiquidGlass ? "bg-transparent" : "bg-black/40 backdrop-blur-sm", | |||
| useLiquidGlass ? "bg-transparent" : "bg-black/40 backdrop-blur-xs", | |||
There was a problem hiding this comment.
Invalid Tailwind utility class. backdrop-blur-xs does not exist in Tailwind CSS. Should be backdrop-blur-sm or a custom arbitrary value like backdrop-blur-[2px].
| useLiquidGlass ? "bg-transparent" : "bg-black/40 backdrop-blur-xs", | |
| useLiquidGlass ? "bg-transparent" : "bg-black/40 backdrop-blur-sm", |
| @@ -271,7 +271,7 @@ function TabTrigger({ | |||
| ); | |||
|
|
|||
| const activeStyles = useLiquidGlass | |||
| ? "py-1.5 font-medium data-[state=active]:bg-[color-mix(in_srgb,_var(--scope-color)_10%,_transparent)] data-[state=active]:text-[var(--scope-color)]" | |||
| ? "py-1.5 font-medium data-[state=active]:bg-[color-mix(in_srgb,var(--scope-color)_10%,transparent)] data-[state=active]:text-(--scope-color)" | |||
There was a problem hiding this comment.
Invalid CSS variable syntax. text-(--scope-color) should be text-[var(--scope-color)] (CSS variables in Tailwind require var() function and square brackets).
| ? "py-1.5 font-medium data-[state=active]:bg-[color-mix(in_srgb,var(--scope-color)_10%,transparent)] data-[state=active]:text-(--scope-color)" | |
| ? "py-1.5 font-medium data-[state=active]:bg-[color-mix(in_srgb,var(--scope-color)_10%,transparent)] data-[state=active]:text-[var(--scope-color)]" |
| @@ -24,7 +24,7 @@ export function TabTrigger({ | |||
| variant === "danger" | |||
| ? dangerClasses | |||
| : liquidGlass | |||
| ? "data-[state=active]:bg-[color-mix(in_srgb,_var(--scope-color)_10%,_transparent)] data-[state=active]:text-[var(--scope-color)]" | |||
| ? "data-[state=active]:bg-[color-mix(in_srgb,var(--scope-color)_10%,transparent)] data-[state=active]:text-(--scope-color)" | |||
There was a problem hiding this comment.
Invalid CSS variable syntax. text-(--scope-color) should be text-[var(--scope-color)] (CSS variables in Tailwind require var() function and square brackets).
| ? "data-[state=active]:bg-[color-mix(in_srgb,var(--scope-color)_10%,transparent)] data-[state=active]:text-(--scope-color)" | |
| ? "data-[state=active]:bg-[color-mix(in_srgb,var(--scope-color)_10%,transparent)] data-[state=active]:text-[var(--scope-color)]" |
- Implemented logic to prevent grouping of important tool calls (Task, Bash, Write, Edit, ExitPlanMode) for better visibility. - Updated ToolCallCard to support expanded display for key tools, showing relevant markdown and diff content. - Enhanced ModelSelector and ModeSelector components to send commands to the backend, improving session management. - Added deduplication logic for tool call entries in the backend, ensuring updates to existing calls instead of creating duplicates. - Updated ENTRY_PROCESSING_RULES documentation to reflect new fields and deduplication process for tool calls.
…ting, and more - Implemented new LSP commands for document highlighting, signature help, document formatting, range formatting, and on-type formatting. - Added providers for document highlights, signature help, formatting, folding ranges, selection ranges, and linked editing ranges in the Monaco editor. - Enhanced the LSP types to include new structures for document highlights, signature help, formatting options, and folding ranges. - Updated the backend to handle new LSP commands and integrate them with the existing plugin architecture. - Improved the IDE's capabilities for code navigation and editing, enhancing the overall developer experience.
…ation and tab management - Introduced a Breadcrumb component to display the file path as clickable segments, enhancing navigation within the editor. - Added a TabContextMenu component for right-click actions on editor tabs, allowing users to close, pin, copy paths, and reveal files in the sidebar. - Enhanced EditorTabs to support tab pinning and navigation history, improving user experience when managing multiple tabs. - Implemented lazy loading for tab content to optimize performance and reduce flickering when switching between tabs. - Updated ContentArea to integrate the Breadcrumb component and handle loading states for active tabs.
…tMenu components for enhanced file management - Introduced ClipboardIndicator to visually indicate clipboard operations (copy/cut) in the file tree. - Added FileOperationDialog for reusable confirmation dialogs when deleting or moving files/folders. - Implemented FileTreeContextMenu for right-click actions on file tree items, supporting create, rename, delete, copy, cut, paste, and reveal in finder functionalities. - Enhanced FileTreePanel to integrate new components, improving user experience for file operations and context actions.
Extract the IDE module from Panager into a standalone app called "Glide", an AI-powered code editor that can run independently. Changes: - Create monorepo structure with apps/panager and apps/glide - Set up Cargo and Yarn workspaces for both apps - Extract IDE, ACP, and plugins modules to Glide - Add welcome screen with recent projects tracking (last 10) - Implement proper window decorations with macOS title bar overlay - Add Liquid Glass theme support with settings toggle - Remove all IDE-related code from Panager (now lightweight project manager) Glide features: - Standalone editor launchable via `glide <path>` - Welcome screen when opened without project - Recent projects grid with relative timestamps - LSP support via TypeScript plugin - Agent/Plan mode for AI assistance
- Modified the active state classes in the TabTrigger component to use the correct accent color for better visual consistency. - Ensured that the component maintains its intended styling across different variants.
- Updated the EditorTabs component to ensure proper layout with flex properties for better responsiveness. - Modified the ACP state initialization in the Tauri backend to wrap it in an Arc for improved command handling. - Enhanced session management by emitting status updates even when the current session is already active.
- Deleted the acp_get_current_session function and its references from the Tauri backend, streamlining the ACP command set. - Removed the current_session_id field from the AcpProcess struct, simplifying session management logic. - Cleaned up related code to enhance maintainability and reduce complexity in session handling.
- Removed the IdeSettingsContext and its references throughout the codebase, simplifying the theme and liquid glass management. - Introduced the useEffectiveTheme hook to provide theme and liquid glass state directly, enhancing component performance and reducing complexity. - Updated components to utilize the new hook, ensuring consistent theme application across the application. - Cleaned up related code and comments for improved maintainability and clarity.
- Introduced GoToSymbolDialog for navigating to symbols within the current file, improving code navigation capabilities. - Updated GoToLineDialog to utilize cmdk for a more streamlined user experience. - Enhanced QuickOpenDialog to include options for navigating to lines and symbols, integrating new commands for better accessibility. - Refactored dialog components to accept open state and change handlers, ensuring consistent dialog management across the application. - Improved IDE layout to accommodate new dialogs and maintain a cohesive user interface.
- Added BranchSwitchDialog component to facilitate branch switching with autocomplete, new branch creation, and handling of uncommitted changes. - Integrated the dialog into the IDE layout and QuickOpenDialog for improved accessibility. - Updated BranchSelector to open the BranchSwitchDialog, enhancing the user experience for branch management. - Implemented keyboard shortcuts for quick access to the branch switching functionality.
… provider - Introduced a custom context menu for the Monaco editor, replacing the default implementation with a React-based component for improved user experience. - Added a file content provider to enable on-demand loading of file content for features like peek widgets and go-to definition previews. - Updated various Monaco editor components to integrate the new context menu and file content provider, enhancing navigation and interaction capabilities. - Refactored related components and hooks to support the new context menu functionality, ensuring a cohesive user interface across the editor.
- Added functionality to open new windows with a welcome screen or specific project context, improving user experience for multi-project workflows. - Introduced window lifecycle management to determine whether to spawn a new welcome window or allow the app to exit when the last project window is closed. - Enhanced the application menu with options for creating and closing windows, streamlining navigation and window management. - Refactored window management commands to support the new multi-window capabilities, ensuring a cohesive application lifecycle.
…nagement - Enhanced the Vite configuration to support a multi-page application structure, introducing a dedicated welcome.html for project selection. - Refactored the GlideApp component to separate project window management from the welcome screen, improving clarity and functionality. - Introduced the WelcomeApp component for lightweight project selection, ensuring a streamlined user experience without loading heavy IDE components. - Implemented window geometry tracking to persist window states across sessions, enhancing user experience by restoring previous window layouts. - Updated session management to handle window states, allowing for better project context handling and improved application lifecycle management.
…ions - Introduced a MAX_DEPTH constant in FileTreePanel and useRevealActiveFile hooks to prevent excessive directory traversal. - Updated getUniqueNameInDir function to use a MAX_COPIES constant for limiting the number of file copies, enhancing stability and preventing potential infinite loops. - Refactored various file handling functions to improve readability and maintainability by simplifying loop structures.
…esource management - Updated the useEditor hook to manage event listeners more effectively by utilizing a disposables reference, ensuring proper cleanup of resources. - Introduced a mechanism in the file content provider to prevent duplicate model creations by tracking in-flight promises, enhancing performance and stability during concurrent file loading operations. - Refactored model creation logic to include deduplication, improving the efficiency of loading file content in the Monaco editor.
…stency - Introduced a new constants file to centralize application-wide constants, including debounce timings and limits for directory depth and file copies. - Updated various components and hooks to utilize the new constants, enhancing code readability and maintainability. - Replaced hardcoded values with constants in the DiffApprovalCard, FileTreePanel, SearchPanel, useFileWatcher, useRevealActiveFile, and getUniqueNameInDir functions.
…lity - Introduced a new tab management system that supports tab groups, allowing for split view functionality and improved organization of open files. - Implemented a resolver-based approach for handling different tab types, including file, diff, chat, and markdown tabs, enhancing flexibility and usability. - Added database-backed persistence for tabs and tab groups, ensuring state is maintained across sessions. - Refactored existing components and hooks to integrate with the new tabs store, improving overall code structure and maintainability. - Updated the Vite configuration and various components to support the new tab management features, enhancing user experience and navigation.
…performance - Removed the Monaco editor plugin from the Vite configuration to simplify setup and reduce initial load time. - Introduced a new workers.ts file to manage Monaco editor workers, improving modularity and performance. - Updated the EditorGroup and EditorGroupTabs components to utilize shallow comparisons for state management, reducing unnecessary re-renders and enhancing responsiveness. - Refactored tab management logic to improve efficiency and maintainability within the editor components.
…unctionality - Added Content Security Policy headers to the Vite configuration to enhance security. - Updated the WelcomeScreen component to utilize a new hideWindow function for better window management. - Refactored editor components (FileTabContent, MarkdownEditor, MonacoEditor) to support groupId, enabling better session management and state persistence. - Improved the useEditor hook to manage editor metadata and line diffs more effectively, ensuring accurate tracking of file changes. - Enhanced the GoToSymbolDialog to utilize updated editor metadata for improved symbol navigation.
- Introduced new language support for JSON, CSS, HTML, and YAML in the LSP client. - Enhanced the TypeScript and JavaScript language handling to include additional file extensions. - Implemented dedicated plugins for CSS, HTML, JSON, and YAML, providing language-specific features via LSP. - Updated the LSP configuration to accommodate new language capabilities and improve overall functionality. - Refactored existing code to streamline the integration of new language servers and enhance maintainability.
No description provided.