## CHANGES

- Added “View Git Log” action right inside GitStatusWidget tooltip 🧭
- Wired MainPanel to open Git Log directly from the widget 🪟
- Expanded GitStatusWidget API with optional `onViewLog` callback 🧩
- Improved test coverage for Git log tooltip interactions and rendering 🧪
- Cleaned repo by removing auto-generated CLAUDE.md memory context files 🧹
- Enhanced release notes frontmatter with a new newspaper icon 🗞️
This commit is contained in:
Pedram Amini
2026-02-01 00:14:51 -05:00
parent a809be18e0
commit ef7ac9c6a2
10 changed files with 43 additions and 72 deletions

View File

@@ -1,11 +0,0 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Jan 11, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #413 | 5:34 AM | 🔵 | History Documentation Content Loaded for Verification | ~412 |
</claude-mem-context>

View File

@@ -1,6 +1,7 @@
---
title: Release Notes
description: Version history and changelog for Maestro releases
icon: newspaper
---
# Release Notes

View File

@@ -115,12 +115,14 @@ const mockTheme: Theme = {
describe('GitStatusWidget', () => {
const mockOnViewDiff = vi.fn();
const mockOnViewLog = vi.fn();
const defaultProps = {
sessionId: 'test-session-id',
isGitRepo: true,
theme: mockTheme,
onViewDiff: mockOnViewDiff,
onViewLog: mockOnViewLog,
};
beforeEach(() => {
@@ -307,6 +309,29 @@ describe('GitStatusWidget', () => {
fireEvent.click(viewDiffButton);
expect(mockOnViewDiff).toHaveBeenCalled();
});
it('should call onViewLog when "View Git Log" link is clicked in tooltip', () => {
mockGetStatus.mockReturnValue(createGitStatusData());
render(<GitStatusWidget {...defaultProps} />);
const container = screen.getByRole('button').parentElement!;
fireEvent.mouseEnter(container);
const viewLogButton = screen.getByText('View Git Log');
fireEvent.click(viewLogButton);
expect(mockOnViewLog).toHaveBeenCalled();
});
it('should not render "View Git Log" button when onViewLog is not provided', () => {
mockGetStatus.mockReturnValue(createGitStatusData());
const { onViewLog: _, ...propsWithoutLog } = defaultProps;
render(<GitStatusWidget {...propsWithoutLog} />);
const container = screen.getByRole('button').parentElement!;
fireEvent.mouseEnter(container);
expect(screen.queryByText('View Git Log')).not.toBeInTheDocument();
});
});
describe('Tooltip Behavior', () => {

View File

@@ -1,11 +0,0 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Jan 11, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #421 | 5:35 AM | 🔵 | History Manager Implementation Details Verified | ~454 |
</claude-mem-context>

View File

@@ -1,15 +0,0 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Jan 11, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #444 | 5:37 AM | 🔵 | History Detail Modal Implementation Verified | ~517 |
| #443 | " | 🔵 | History Help Modal Content Verified | ~418 |
| #441 | " | 🔵 | Activity Graph Time Range Options Verified | ~292 |
| #437 | 5:36 AM | 🔵 | History Default Setting UI Label Verified | ~314 |
| #426 | " | 🔵 | History Panel UI Implementation Verified | ~529 |
</claude-mem-context>

View File

@@ -1,5 +1,5 @@
import { useState, useRef, useEffect, memo } from 'react';
import { GitBranch, Plus, Minus, FileEdit, FileDiff } from 'lucide-react';
import { GitBranch, Plus, Minus, FileEdit, FileDiff, History } from 'lucide-react';
import type { Theme } from '../types';
import { useGitFileStatus, useGitDetail, type GitFileChange } from '../contexts/GitStatusContext';
@@ -10,6 +10,7 @@ interface GitStatusWidgetProps {
isGitRepo: boolean;
theme: Theme;
onViewDiff: () => void;
onViewLog?: () => void;
/** Use compact mode - just show file count without breakdown */
compact?: boolean;
}
@@ -31,6 +32,7 @@ export const GitStatusWidget = memo(function GitStatusWidget({
isGitRepo,
theme,
onViewDiff,
onViewLog,
compact = false,
}: GitStatusWidgetProps) {
// Tooltip hover state with timeout for smooth UX
@@ -228,6 +230,19 @@ export const GitStatusWidget = memo(function GitStatusWidget({
<FileDiff className="w-3.5 h-3.5" style={{ color: theme.colors.textDim }} />
View Full Diff
</button>
{onViewLog && (
<button
onClick={onViewLog}
className="flex items-center justify-center gap-2 text-xs p-2 border-t w-full hover:bg-white/10 transition-colors cursor-pointer"
style={{
color: theme.colors.textDim,
borderColor: theme.colors.border,
}}
>
<History className="w-3.5 h-3.5" style={{ color: theme.colors.textDim }} />
View Git Log
</button>
)}
</div>
</>
)}

View File

@@ -1077,6 +1077,7 @@ export const MainPanel = React.memo(
isGitRepo={activeSession.isGitRepo}
theme={theme}
onViewDiff={handleViewGitDiff}
onViewLog={() => setGitLogOpen?.(true)}
compact={useCompactGitWidget}
/>
</div>

View File

@@ -1,11 +0,0 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Jan 11, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #433 | 5:36 AM | 🔵 | History Default Setting Verified in Settings Hook | ~323 |
</claude-mem-context>

View File

@@ -1,11 +0,0 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Jan 11, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #442 | 5:37 AM | 🔵 | Achievement Action Extension Verified in Renderer Types | ~311 |
</claude-mem-context>

View File

@@ -1,12 +0,0 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Jan 11, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #428 | 5:36 AM | 🔵 | HistoryEntry Interface Fields Verified | ~378 |
| #419 | 5:35 AM | 🔵 | History Constants and Types Verified in Shared Module | ~384 |
</claude-mem-context>