diff --git a/docs/guides/docusaurus-site-guide.md b/docs/guides/docusaurus-site-guide.md index 8e0fbf8e..97d7bd44 100644 --- a/docs/guides/docusaurus-site-guide.md +++ b/docs/guides/docusaurus-site-guide.md @@ -89,7 +89,7 @@ For Sidecar plugins, use this structure: One-line description of what it does. -![Screenshot](/img/screenshots/plugin-name.png) +![Screenshot](../../docs/screenshots/plugin-name.png) ## Overview Brief explanation of the UI layout and core purpose. @@ -221,16 +221,40 @@ footer: { ## Adding Images -1. Place images in `static/img/` -2. Reference in Markdown: - ```markdown - ![Alt text](/img/screenshot.png) - ``` +### Screenshot Organization + +**Website documentation screenshots** (for Docusaurus pages in `website/docs/`): +- Store in: `docs/screenshots/` (project root) +- Reference with: `![Alt text](../../docs/screenshots/filename.png)` +- These are the official screenshots for the documentation site + +**README and other markdown screenshots** (for GitHub, repo docs, etc.): +- Store in: `docs/screenshots/` (project root) +- Reference with: `![Alt text](docs/screenshots/filename.png)` (from repo root) +- Same location, different relative path based on context + +**General website images** (logos, icons, graphics): +- Store in: `website/static/img/` +- Reference with: `![Alt text](/img/filename.png)` + +### For AI Agents + +When capturing screenshots: +- If the prompt mentions "website docs" or "Docusaurus": save to `docs/screenshots/` +- If the prompt mentions "README" or "repo documentation": save to `docs/screenshots/` +- The same screenshots in `docs/screenshots/` serve both website and repo docs + +### Usage Examples + +In website docs (`website/docs/*.md`): +```markdown +![Plugin Screenshot](../../docs/screenshots/sidecar-git.png) +``` -Or import in JSX: +In JSX components: ```jsx -import screenshot from '@site/static/img/screenshot.png'; -Screenshot +import screenshot from '@site/static/img/logo.png'; +Logo ``` ## Blog Posts diff --git a/internal/plugins/worktree/mouse.go b/internal/plugins/worktree/mouse.go index 7849c844..06c898c9 100644 --- a/internal/plugins/worktree/mouse.go +++ b/internal/plugins/worktree/mouse.go @@ -97,6 +97,8 @@ func (p *Plugin) handleMouseHover(action mouse.MouseAction) tea.Cmd { case ViewModeMerge: if action.Region == nil { p.mergeMethodHover = 0 + p.mergeConfirmCheckboxHover = 0 + p.mergeConfirmButtonHover = 0 return nil } switch action.Region.ID { @@ -104,14 +106,34 @@ func (p *Plugin) handleMouseHover(action mouse.MouseAction) tea.Cmd { if idx, ok := action.Region.Data.(int); ok { p.mergeMethodHover = idx + 1 // 1=Create PR, 2=Direct Merge } + p.mergeConfirmCheckboxHover = 0 + p.mergeConfirmButtonHover = 0 + case regionMergeConfirmCheckbox: + if idx, ok := action.Region.Data.(int); ok { + p.mergeConfirmCheckboxHover = idx + 1 // 1-4 for checkboxes + } + p.mergeMethodHover = 0 + p.mergeConfirmButtonHover = 0 + case regionMergeConfirmButton: + p.mergeConfirmButtonHover = 1 // Clean Up + p.mergeMethodHover = 0 + p.mergeConfirmCheckboxHover = 0 + case regionMergeSkipButton: + p.mergeConfirmButtonHover = 2 // Skip All + p.mergeMethodHover = 0 + p.mergeConfirmCheckboxHover = 0 default: p.mergeMethodHover = 0 + p.mergeConfirmCheckboxHover = 0 + p.mergeConfirmButtonHover = 0 } default: p.createButtonHover = 0 p.agentChoiceButtonHover = 0 p.deleteConfirmButtonHover = 0 p.mergeMethodHover = 0 + p.mergeConfirmCheckboxHover = 0 + p.mergeConfirmButtonHover = 0 } return nil } @@ -351,6 +373,13 @@ func (p *Plugin) handleMouseDoubleClick(action mouse.MouseAction) tea.Cmd { } switch action.Region.ID { + case regionPreviewPane: + // Double-click in preview pane attaches to tmux session if agent running + wt := p.selectedWorktree() + if wt != nil && wt.Agent != nil && wt.Agent.TmuxSession != "" { + p.attachedSession = wt.Name + return p.AttachToSession(wt) + } case regionWorktreeItem: // Double-click on worktree - attach to tmux session if agent running if idx, ok := action.Region.Data.(int); ok && idx >= 0 && idx < len(p.worktrees) { diff --git a/internal/plugins/worktree/plugin.go b/internal/plugins/worktree/plugin.go index cbac1aa1..7e877120 100644 --- a/internal/plugins/worktree/plugin.go +++ b/internal/plugins/worktree/plugin.go @@ -169,8 +169,10 @@ type Plugin struct { taskMarkdownWidth int // Width used for cached render // Merge workflow state - mergeState *MergeWorkflowState - mergeMethodHover int // 0=none, 1=Create PR option, 2=Direct Merge option (for mouse hover) + mergeState *MergeWorkflowState + mergeMethodHover int // 0=none, 1=Create PR option, 2=Direct Merge option (for mouse hover) + mergeConfirmCheckboxHover int // 0=none, 1-4 for cleanup checkboxes (mouse hover) + mergeConfirmButtonHover int // 0=none, 1=Clean Up, 2=Skip All (mouse hover) // Commit-before-merge state mergeCommitState *MergeCommitState diff --git a/internal/plugins/worktree/types.go b/internal/plugins/worktree/types.go index d5fb9106..474c642a 100644 --- a/internal/plugins/worktree/types.go +++ b/internal/plugins/worktree/types.go @@ -84,7 +84,7 @@ func (s WorktreeStatus) Icon() string { case StatusActive: return "●" case StatusWaiting: - return "💬" + return "⧗" case StatusDone: return "✓" case StatusError: diff --git a/internal/plugins/worktree/types_test.go b/internal/plugins/worktree/types_test.go index 4d2148b1..ea0327c3 100644 --- a/internal/plugins/worktree/types_test.go +++ b/internal/plugins/worktree/types_test.go @@ -122,7 +122,7 @@ func TestWorktreeStatusIcon(t *testing.T) { }{ {StatusPaused, "⏸"}, {StatusActive, "●"}, - {StatusWaiting, "💬"}, + {StatusWaiting, "⧗"}, {StatusDone, "✓"}, {StatusError, "✗"}, } diff --git a/internal/plugins/worktree/view_kanban.go b/internal/plugins/worktree/view_kanban.go index 897bd532..fffdec28 100644 --- a/internal/plugins/worktree/view_kanban.go +++ b/internal/plugins/worktree/view_kanban.go @@ -47,7 +47,7 @@ func (p *Plugin) renderKanbanView(width, height int) string { // Column headers and colors columnTitles := map[WorktreeStatus]string{ StatusActive: "● Active", - StatusWaiting: "💬 Waiting", + StatusWaiting: "⧗ Waiting", StatusDone: "✓ Ready", StatusPaused: "⏸ Paused", } diff --git a/internal/plugins/worktree/view_modals.go b/internal/plugins/worktree/view_modals.go index 01339b48..838418ef 100644 --- a/internal/plugins/worktree/view_modals.go +++ b/internal/plugins/worktree/view_modals.go @@ -1241,6 +1241,9 @@ func (p *Plugin) renderMergeModal(width, height int) string { if p.mergeState.ConfirmationFocus == i { sb.WriteString(lipgloss.NewStyle().Foreground(lipgloss.Color("62")).Bold(true).Render("> " + line[2:])) + } else if p.mergeConfirmCheckboxHover == i+1 { + // Hover state (subtle highlight) + sb.WriteString(lipgloss.NewStyle().Foreground(lipgloss.Color("75")).Render(line)) } else { sb.WriteString(line) } @@ -1266,6 +1269,9 @@ func (p *Plugin) renderMergeModal(width, height int) string { pullLine := fmt.Sprintf(" %s %s", pullCheckbox, pullLabel) if p.mergeState.ConfirmationFocus == 3 { sb.WriteString(lipgloss.NewStyle().Foreground(lipgloss.Color("62")).Bold(true).Render("> " + pullLine[2:])) + } else if p.mergeConfirmCheckboxHover == 4 { + // Hover state (subtle highlight) + sb.WriteString(lipgloss.NewStyle().Foreground(lipgloss.Color("75")).Render(pullLine)) } else { sb.WriteString(pullLine) } @@ -1286,9 +1292,15 @@ func (p *Plugin) renderMergeModal(width, height int) string { if p.mergeState.ConfirmationFocus == 4 { confirmStyle = confirmStyle.Bold(true).Background(lipgloss.Color("42")) + } else if p.mergeConfirmButtonHover == 1 { + // Hover state for Clean Up button + confirmStyle = confirmStyle.Background(lipgloss.Color("75")) } if p.mergeState.ConfirmationFocus == 5 { skipStyle = skipStyle.Bold(true).Background(lipgloss.Color("214")) + } else if p.mergeConfirmButtonHover == 2 { + // Hover state for Skip All button + skipStyle = skipStyle.Background(lipgloss.Color("245")) } sb.WriteString(" ") diff --git a/website/docs/conversations-plugin.md b/website/docs/conversations-plugin.md index 4a65b94f..18526c69 100644 --- a/website/docs/conversations-plugin.md +++ b/website/docs/conversations-plugin.md @@ -7,7 +7,7 @@ title: Conversations Plugin Browse and search your Claude Code sessions with turn-based organization, message expansion, and session analytics—see what your agent has been doing. -![Conversations Plugin](/img/screenshots/sidecar-conversations.png) +![Conversations Plugin](../../docs/screenshots/sidecar-conversations.png) ## Overview diff --git a/website/docs/files-plugin.md b/website/docs/files-plugin.md index 535de24b..b17c8de9 100644 --- a/website/docs/files-plugin.md +++ b/website/docs/files-plugin.md @@ -7,7 +7,7 @@ title: Files Plugin Browse, preview, and manage your project files with syntax highlighting, markdown rendering, and fuzzy search—all in a two-pane terminal interface. -![Files Plugin](/img/screenshots/sidecar-file-browser.png) +![Files Plugin](../../docs/screenshots/sidecar-files.png) ## Overview diff --git a/website/docs/git-plugin.md b/website/docs/git-plugin.md index 83a623cb..fa9abd8a 100644 --- a/website/docs/git-plugin.md +++ b/website/docs/git-plugin.md @@ -7,7 +7,7 @@ title: Git Plugin A full-featured git interface for staging, diffing, committing, and managing branches—all without leaving your terminal. Watch your agent's changes in real-time with side-by-side diffs and inline previews. -![Git Status](/img/screenshots/sidecar-git.png) +![Git Status](../../docs/screenshots/sidecar-git.png) ## Overview diff --git a/website/docs/intro.md b/website/docs/intro.md index b697c72d..93e498da 100644 --- a/website/docs/intro.md +++ b/website/docs/intro.md @@ -7,7 +7,7 @@ title: Getting Started A terminal dashboard for AI coding agents. Monitor git changes, browse conversations, track tasks, and manage worktrees—all without leaving your terminal. -![Sidecar Git Status](/img/screenshots/sidecar-git.png) +![Sidecar Git Status](../../docs/screenshots/sidecar-git.png) ## Quick Install @@ -52,7 +52,7 @@ Sidecar uses a plugin architecture. Each plugin provides a focused view into you Stage files, view diffs, browse commit history. A lightweight alternative to `git status` and `git diff`. -![Git Status with Diff](/img/screenshots/sidecar-git.png) +![Git Status with Diff](../../docs/screenshots/sidecar-git.png) | Key | Action | |-----|--------| @@ -63,13 +63,13 @@ Stage files, view diffs, browse commit history. A lightweight alternative to `gi | `c` | Commit staged changes | | `h/l` | Switch sidebar/diff focus | -![Side-by-side Diff](/img/screenshots/sidecar-git-diff-side-by-side.png) +![Side-by-side Diff](../../docs/screenshots/sidecar-git-diff-side-by-side.png) ### Conversations Browse AI agent session history with message content, token usage, and search. -![Conversations](/img/screenshots/sidecar-conversations.png) +![Conversations](../../docs/screenshots/sidecar-conversations.png) Supported agents: - Claude Code @@ -89,7 +89,7 @@ Supported agents: Integration with [TD](https://github.com/marcus/td), a task management system for AI agents working across context windows. -![TD Monitor](/img/screenshots/sidecar-td.png) +![TD Monitor](../../docs/screenshots/sidecar-td.png) | Key | Action | |-----|--------| @@ -100,7 +100,7 @@ Integration with [TD](https://github.com/marcus/td), a task management system fo Navigate project files with a collapsible tree and syntax-highlighted preview. -![File Browser](/img/screenshots/sidecar-file-browser.png) +![File Browser](../../docs/screenshots/sidecar-files.png) | Key | Action | |-----|--------| diff --git a/website/docs/td.md b/website/docs/td.md index 95fe5e7a..358528e8 100644 --- a/website/docs/td.md +++ b/website/docs/td.md @@ -7,7 +7,7 @@ title: TD - Task Management for AI Agents A task management CLI designed specifically for AI-assisted development. When an agent's context window ends, its memory ends. TD captures the work state—what's done, what's remaining, key decisions, and uncertainties—so the next session picks up exactly where the previous one left off. -![TD Monitor in Sidecar](/img/screenshots/sidecar-td.png) +![TD Monitor in Sidecar](../../docs/screenshots/sidecar-td.png) ## The Problem diff --git a/website/docs/worktrees-plugin.md b/website/docs/worktrees-plugin.md index abbfb807..a1ffd58e 100644 --- a/website/docs/worktrees-plugin.md +++ b/website/docs/worktrees-plugin.md @@ -7,7 +7,7 @@ title: Worktrees Plugin Manage multiple git worktrees with agent integration, real-time output streaming, and a Kanban board view—run parallel agents across branches. -![Worktrees Plugin](/img/screenshots/sidecar-riders.png) +![Worktrees Plugin](../../docs/screenshots/sidecar-worktrees.png) ## Overview diff --git a/website/static/img/screenshots/sidecar-conversations.png b/website/static/img/screenshots/sidecar-conversations.png deleted file mode 100644 index 982e4cd0..00000000 Binary files a/website/static/img/screenshots/sidecar-conversations.png and /dev/null differ diff --git a/website/static/img/screenshots/sidecar-file-browser.png b/website/static/img/screenshots/sidecar-file-browser.png deleted file mode 100644 index ea3c295e..00000000 Binary files a/website/static/img/screenshots/sidecar-file-browser.png and /dev/null differ diff --git a/website/static/img/screenshots/sidecar-git-diff-side-by-side.png b/website/static/img/screenshots/sidecar-git-diff-side-by-side.png deleted file mode 100644 index 170a6c51..00000000 Binary files a/website/static/img/screenshots/sidecar-git-diff-side-by-side.png and /dev/null differ diff --git a/website/static/img/screenshots/sidecar-git.png b/website/static/img/screenshots/sidecar-git.png deleted file mode 100644 index 624d36d7..00000000 Binary files a/website/static/img/screenshots/sidecar-git.png and /dev/null differ diff --git a/website/static/img/screenshots/sidecar-riders.png b/website/static/img/screenshots/sidecar-riders.png deleted file mode 100644 index 0dc18351..00000000 Binary files a/website/static/img/screenshots/sidecar-riders.png and /dev/null differ diff --git a/website/static/img/screenshots/sidecar-td.png b/website/static/img/screenshots/sidecar-td.png deleted file mode 100644 index db144abb..00000000 Binary files a/website/static/img/screenshots/sidecar-td.png and /dev/null differ diff --git a/website/static/img/screenshots/sidecar-td2.png b/website/static/img/screenshots/sidecar-td2.png deleted file mode 100644 index c86c6076..00000000 Binary files a/website/static/img/screenshots/sidecar-td2.png and /dev/null differ