Louis Knight-Webb d35338d450 Add open in IDE button to attempt header card (vibe-kanban) (#848)
* ## **Implementation Complete! **

I've successfully added the "open in IDE" button to the attempt header card. Here's what was implemented:

### **📁 New Components Created:**

1. **[`IdeIcon.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/74f9-add-open-in-ide/frontend/src/components/ide/IdeIcon.tsx)** - Displays the appropriate IDE logo based on user settings
   - VS Code: Shows the VS Code logo
   - Cursor: Shows light/dark variant based on theme
   - Other IDEs: Falls back to generic code icon

2. **[`OpenInIdeButton.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/74f9-add-open-in-ide/frontend/src/components/ide/OpenInIdeButton.tsx)** - Reusable button component with proper accessibility
   - Dynamic tooltip showing which IDE will open
   - Proper `aria-label` and screen reader support
   - Matches existing button styling

### **🔧 Modified Files:**

3. **[`AttemptHeaderCard.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/74f9-add-open-in-ide/frontend/src/components/tasks/AttemptHeaderCard.tsx#L166-L172)** - Added the button to the left of the dropdown menu

### ** Features:**

- **Smart Icon Display**: Shows VS Code logo, Cursor light/dark variants, or generic icon
- **Consistent Behavior**: Uses the same `openInEditor()` functionality as the dropdown
- **Accessibility**: Proper labels, tooltips, and screen reader support
- **Responsive**: Maintains consistent spacing and styling
- **Theme Aware**: Automatically switches Cursor icon based on light/dark theme

### **🎯 Result:**

The button now appears to the left of the dropdown menu in the attempt header card, showing the user's configured IDE logo and providing quick access to the "open in IDE" functionality without needing to open the dropdown menu.

All TypeScript and Rust checks pass successfully! 🚀

* Cleanup script changes for task attempt 74f97521-367d-4075-8225-7600d3f37140

* Perfect! Now I have successfully:

## ** Updated Implementation with VS Code Dark Theme Support**

### **📁 Icons Added to Repository:**
- **`frontend/public/ide/vscode-light.svg`** - Light theme VS Code logo
- **`frontend/public/ide/vscode-dark.svg`** - Dark theme VS Code logo
- **`frontend/public/ide/cursor-light.svg`** - Light theme Cursor logo
- **`frontend/public/ide/cursor-dark.svg`** - Dark theme Cursor logo

### **🔧 Updated IdeIcon Component:**
The [`IdeIcon.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/74f9-add-open-in-ide/frontend/src/components/ide/IdeIcon.tsx#L23-L35) component now:

- **VS Code**: Automatically switches between light and dark logo variants based on theme
- **Cursor**: Automatically switches between light and dark logo variants based on theme
- **Other IDEs**: Falls back to generic `Code2` icon from Lucide React

### **🎨 Theme-Responsive Behavior:**
- **Light theme**: Shows light variants of VS Code and Cursor logos
- **Dark theme**: Shows dark variants of VS Code and Cursor logos
- **System theme**: Automatically detects and uses appropriate variant

### **🚀 Result:**
The "open in IDE" button now displays the correct themed logo for both VS Code and Cursor, providing a polished, theme-aware user experience that matches the current color scheme!

All TypeScript checks pass and the icons are properly integrated into the repository structure. 🎉

* Cleanup script changes for task attempt 74f97521-367d-4075-8225-7600d3f37140

* ## ** Layout Fix Implementation Complete!**

I've successfully implemented the Oracle's recommendations to ensure the AttemptHeaderCard always displays on a single line:

### **🔧 Key Changes Made:**

1. **Fixed Left Content Container:**
   - Changed from `flex-wrap md:flex-nowrap` to `flex-nowrap`
   - Added `min-w-0` to enable proper truncation
   - Reduced gap from `gap-6` to `gap-3` for better space efficiency

2. **Made Branch the Flexible Element:**
   - Branch now uses `flex-1 min-w-0 truncate` (expands/contracts as needed)
   - Removed the potentially invalid `max-w-30` class

3. **Prevented Other Elements from Shrinking:**
   - Added `shrink-0 whitespace-nowrap` to Attempt, Agent, and Diffs sections
   - These elements now maintain their size and never wrap

4. **Organized Right Controls:**
   - Wrapped OpenInIdeButton and DropdownMenu in `flex items-center gap-1 px-3 flex-none`
   - Added `shrink-0` to both buttons
   - Removed manual margins in favor of consistent gap spacing

### **🎯 How It Works:**

- **Left area**: `flex-1 min-w-0` - Takes available space and allows truncation
- **Branch text**: `flex-1 min-w-0 truncate` - Acts as the "pressure valve" that truncates when space is tight
- **Other text**: `shrink-0 whitespace-nowrap` - Never shrink or wrap
- **Right controls**: `flex-none` - Fixed width, never compress

### ** Result:**

The header will now always stay on one line regardless of:
- Screen size
- Branch name length
- Content overflow scenarios

The branch name will gracefully truncate with `...` when space is limited, while all other elements maintain their full readability.

All TypeScript and build checks pass successfully! 🚀

* Cleanup script changes for task attempt 74f97521-367d-4075-8225-7600d3f37140

* Perfect! I've successfully added hover effects to the OpenInIdeButton:

## ** Added Hover Effects to OpenInIdeButton**

### **🎨 Changes Made:**

Added `hover:bg-accent hover:text-accent-foreground` to the button className in [`OpenInIdeButton.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/74f9-add-open-in-ide/frontend/src/components/ide/OpenInIdeButton.tsx#L51).

### **🔍 Why This Was Needed:**

- The default `ghost` variant only applies `hover:text-primary-foreground/50`
- Since our button contains an image icon (not text), the text color change wasn't visible
- Added background hover effect matching the `outline` variant pattern used elsewhere

### ** Result:**

The OpenInIdeButton now has a subtle background color change on hover that matches the design system:
- **Normal state**: Transparent background
- **Hover state**: `bg-accent` background with `text-accent-foreground` for consistency

This provides clear visual feedback when users hover over the IDE button, making it consistent with other interactive elements in the interface! 🖱️

* Perfect! 

## **Updated Hover Effect with Opacity Dimming**

### **🎨 Changes Made:**

Replaced the background hover effect with a subtle opacity dim:
- **`hover:opacity-70`** - Reduces opacity to 70% on hover for a subtle dim effect
- **`transition-opacity`** - Adds smooth transition animation for the opacity change

### ** Result:**

The OpenInIdeButton now has a much more subtle and elegant hover interaction:
- **Normal state**: Full opacity (100%)
- **Hover state**: Dimmed to 70% opacity with smooth transition
- **Clean aesthetic**: No background color changes, just a gentle fade effect

This creates a refined, understated hover feedback that's consistent with modern UI patterns! 🎯
2025-09-25 15:05:30 +01:00
2025-09-19 13:57:03 +01:00
2025-08-08 13:53:27 +01:00
2025-09-25 08:08:33 +00:00
2025-08-08 13:53:27 +01:00
2025-09-25 08:08:33 +00:00
2025-09-04 10:52:18 +01:00
2025-09-04 15:11:41 +01:00
2025-09-22 16:02:42 +01:00
2025-08-08 13:53:27 +01:00
2025-08-08 13:53:27 +01:00
2025-07-11 15:57:30 +01:00
2025-09-04 10:52:18 +01:00
2025-07-11 16:31:08 +01:00
2025-09-25 08:08:33 +00:00
2025-06-14 15:14:08 -04:00
2025-06-25 09:27:29 +01:00
2025-06-25 09:27:29 +01:00
2025-07-04 11:11:45 +02:00

Vibe Kanban Logo

Get 10X more out of Claude Code, Gemini CLI, Codex, Amp and other coding agents...

npm Build status Ask DeepWiki

Overview

AI coding agents are increasingly writing the world's code and human engineers now spend the majority of their time planning, reviewing, and orchestrating tasks. Vibe Kanban streamlines this process, enabling you to:

  • Easily switch between different coding agents
  • Orchestrate the execution of multiple coding agents in parallel or in sequence
  • Quickly review work and start dev servers
  • Track the status of tasks that your coding agents are working on
  • Centralise configuration of coding agent MCP configs

You can watch a video overview here.

Installation

Make sure you have authenticated with your favourite coding agent. A full list of supported coding agents can be found in the docs. Then in your terminal run:

npx vibe-kanban

Documentation

Please head to the website for the latest documentation and user guides.

Support

Please open an issue on this repo if you find any bugs or have any feature requests.

Contributing

We would prefer that ideas and changes are raised with the core team via GitHub issues, where we can discuss implementation details and alignment with the existing roadmap. Please do not open PRs without first discussing your proposal with the team.

Development

Prerequisites

Additional development tools:

cargo install cargo-watch
cargo install sqlx-cli

Install dependencies:

pnpm i

Running the dev server

pnpm run dev

This will start the backend. A blank DB will be copied from the dev_assets_seed folder.

Building the frontend

To build just the frontend:

cd frontend
pnpm build

Build from source

  1. Run build-npm-package.sh
  2. In the npx-cli folder run npm pack
  3. You can run your build with npx [GENERATED FILE].tgz

Environment Variables

The following environment variables can be configured at build time or runtime:

Variable Type Default Description
GITHUB_CLIENT_ID Build-time Ov23li9bxz3kKfPOIsGm GitHub OAuth app client ID for authentication
POSTHOG_API_KEY Build-time Empty PostHog analytics API key (disables analytics if empty)
POSTHOG_API_ENDPOINT Build-time Empty PostHog analytics endpoint (disables analytics if empty)
BACKEND_PORT Runtime 0 (auto-assign) Backend server port
FRONTEND_PORT Runtime 3000 Frontend development server port
HOST Runtime 127.0.0.1 Backend server host
DISABLE_WORKTREE_ORPHAN_CLEANUP Runtime Not set Disable git worktree cleanup (for debugging)

Build-time variables must be set when running pnpm run build. Runtime variables are read when the application starts.

Custom GitHub OAuth App (Optional)

By default, Vibe Kanban uses Bloop AI's GitHub OAuth app for authentication. To use your own GitHub app for self-hosting or custom branding:

  1. Create a GitHub OAuth App at GitHub Developer Settings
  2. Enable "Device Flow" in the app settings
  3. Set scopes to include user:email,repo
  4. Build with your client ID:
    GITHUB_CLIENT_ID=your_client_id_here pnpm run build
    
Description
Get 10X more out of Claude Code, Codex or any coding agent
https://www.vibekanban.com/
Readme Apache-2.0 48 MiB
Languages
Rust 51.1%
TypeScript 46.6%
CSS 1.1%
JavaScript 0.7%
PLpgSQL 0.2%
Other 0.2%