-
Notifications
You must be signed in to change notification settings - Fork 503
chore: integrate feature branches into local_main #529
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
… '# Folder: <name>' headers); toasts and dedupe
…le) and adjust top padding for alignment
…yy), right-aligned and vertically centered
…Files sidebar; IPC handlers and preload wiring
…es sidebar for quicker access
… to Files sidebar header)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Greptile Summary
This PR integrates four feature branches into a single integration branch, combining significant enhancements to file management, UI improvements, and model updates. The changes include:
Multi-select and Batch Operations: Adds comprehensive multi-select functionality to the file sidebar with support for Ctrl/Cmd and Shift key combinations. Users can now select multiple files and perform bulk "Copy Markdown" operations, including intelligent folder content aggregation with proper header formatting and deduplication logic.
Note Timestamps Feature: Introduces a new NoteTimestamps
component that displays file creation and modification dates directly in the editor interface. The component allows users to toggle between creation and modification timestamps with keyboard accessibility support, providing temporal context for notes.
Sidebar Quality-of-Life Improvements: Relocates "New Note" and "New Directory" action buttons from the main navigation sidebar to the Files sidebar header for better contextual placement. Adds a persistent date visibility toggle (calendar icon) that allows users to show/hide file modification dates in the sidebar, with preferences stored in the electron store across sessions.
Model Upgrade: Updates the default Anthropic model from claude-3-5-sonnet-latest
to claude-sonnet-4-20250514
, upgrading to the newer generation Claude Sonnet 4 model while switching from an alias to a specific version snapshot for better consistency.
Infrastructure Updates: Extends the electron store schema with new IPC handlers for file date visibility preferences, adds proper preload layer exposure for secure cross-process communication, and updates .gitignore
to exclude user-customizable agent configuration files.
The integration involved careful conflict resolution, particularly merging the multi-select logic with date display in FileItemRows.tsx
and combining action buttons with the date toggle in FileSidebar.tsx
. The changes maintain backward compatibility while adding these power-user features through the existing FileContext
architecture.
Confidence score: 4/5
- This PR introduces substantial new functionality but appears well-architected with appropriate separation of concerns and follows existing patterns
- Score reflects the complexity of integrating multiple features simultaneously, though individual changes appear solid
- Pay close attention to FileContext.tsx performance optimization and FileItemRows.tsx multi-select logic complexity
11 files reviewed, 2 comments
role="button" | ||
tabIndex={0} | ||
onKeyDown={(e) => { | ||
if (e.key === 'Enter' || e.key === ' ') setShowUpdated((prev) => !prev) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: Missing preventDefault() call for space key to prevent page scrolling
if (e.key === 'Enter' || e.key === ' ') setShowUpdated((prev) => !prev) | |
if (e.key === 'Enter' || e.key === ' ') { | |
e.preventDefault() | |
setShowUpdated((prev) => !prev) | |
} |
useEffect(() => { | ||
const init = async () => { | ||
const val = await window.electronStore.getFileIndexDateVisibility() | ||
setShowDates(val) | ||
} | ||
init() | ||
|
||
const handler = (_e: any, val: boolean) => setShowDates(val) | ||
window.ipcRenderer.on('file-index-date-visibility-changed', handler) | ||
}, []) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: Missing cleanup for IPC listener - this will cause memory leaks. Add return statement to remove the listener on unmount.
useEffect(() => { | |
const init = async () => { | |
const val = await window.electronStore.getFileIndexDateVisibility() | |
setShowDates(val) | |
} | |
init() | |
const handler = (_e: any, val: boolean) => setShowDates(val) | |
window.ipcRenderer.on('file-index-date-visibility-changed', handler) | |
}, []) | |
useEffect(() => { | |
const init = async () => { | |
const val = await window.electronStore.getFileIndexDateVisibility() | |
setShowDates(val) | |
} | |
init() | |
const handler = (_e: any, val: boolean) => setShowDates(val) | |
window.ipcRenderer.on('file-index-date-visibility-changed', handler) | |
return () => { | |
window.ipcRenderer.off('file-index-date-visibility-changed', handler) | |
} | |
}, []) |
This PR aggregates the following branches from the fork into a single integration branch:
Conflict resolutions: