Commit Graph

901 Commits

Author SHA1 Message Date
Louis Knight-Webb
7bf4b12ddb Can't retry a user message when dev server is running (vibe-kanban) (#937)
* Done! The fix is complete and all checks pass. Here's what changed:

**Summary:**
- Replaced local `anyRunning` check with `isAttemptRunning` from `useAttemptExecution`
- Removed unused `useMemo` import
- Updated tooltip text for clarity

The retry button now correctly allows retrying when only the dev server is running, while still blocking during actual task executions (codingagent, setupscript, cleanupscript).

* Cleanup script changes for task attempt 80246ab7-5ae8-4b09-8020-839cca417fb6

* Update frontend/src/hooks/useProcessRetry.ts

Co-authored-by: Solomon <abcpro11051@disroot.org>

---------

Co-authored-by: Solomon <abcpro11051@disroot.org>
2025-10-06 12:49:20 +01:00
Louis Knight-Webb
73f49cae9f Merged tasks are endlessly re-rendering (vibe-kanban) (#938)
* ##  Fix Complete

**Problem:** Merged tasks caused endless WebSocket reconnections because `useJsonPatchWsStream` incorrectly treated `{finished: true}` messages as signals to reconnect.

**Solution:** Modified [useJsonPatchWsStream.ts](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/0f2d-merged-tasks-are/frontend/src/hooks/useJsonPatchWsStream.ts) to treat "finished" as terminal:

1. Added `finishedRef` to track when stream completes
2. On `{finished: true}`: set flag, close cleanly (code 1000), **no reconnect**
3. On socket close: skip reconnection if finished flag is set or clean close
4. Reset flag on cleanup and new connections

**Result:**
- Merged tasks connect once, receive final state, and stop cleanly
- Active tasks still reconnect on network errors
- Aligned behavior with existing `streamJsonPatchEntries` utility
- All type checks pass 

* Cleanup script changes for task attempt 0f2d0086-1de2-4517-a023-1ee8cf133181
2025-10-06 12:49:08 +01:00
Louis Knight-Webb
fef06cf00e Done! I've successfully removed arrow key navigation while preserving hjkl shortcuts. Here's what changed: (#946)
## Changes Made:

1. **[frontend/src/keyboard/registry.ts](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/155e-remove-keyboard/frontend/src/keyboard/registry.ts)**
   - Removed arrow keys from navigation bindings, kept only hjkl
   - Fixed Enter key conflict by changing fullscreen toggle to ⌘/Ctrl+Enter

2. **[docs/configuration-customisation/keyboard-shortcuts.mdx](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/155e-remove-keyboard/docs/configuration-customisation/keyboard-shortcuts.mdx)**
   - Updated Board Navigation section to show hjkl only
   - Added fullscreen toggle documentation

All type checks pass ✓
2025-10-06 10:51:26 +01:00
Louis Knight-Webb
f26f70060c Markdown renderer bug (vibe-kanban) (#940)
* Done! Fixed the markdown renderer bug with a simple one-line change plus typo fix. All type checks pass.

**Changes made:**
1. Added `disableParsingRawHTML: true` to prevent invalid ref attributes from raw HTML
2. Fixed typo: `text-baseleading-tight` → `text-base leading-tight`

* Cleanup script changes for task attempt 67d094ca-1a5f-4713-b595-26fce3aea3ef
2025-10-04 22:25:35 +01:00
GitHub Action
d99980607d chore: bump version to 0.0.103 2025-10-04 13:31:52 +00:00
hayato iida
567b4a0411 Fix: Prevent form submission during IME composition (#934)
This fix addresses issue #919 where pressing Enter during IME (Input Method Editor)
composition incorrectly triggers form submission in task title and description fields.

Changes:
- Add isComposing check to Input component's Enter key handler
- Add isComposing check to AutoExpandingTextarea component's Enter key handler

This ensures that Enter key during IME composition (e.g., Japanese, Chinese, Korean input)
only confirms the text conversion without accidentally submitting the form.

Fixes #919
2025-10-04 14:30:46 +01:00
Louis Knight-Webb
8a9f398aaf Done! The change now ensures cleanup scripts will commit their changes even when they fail. (#931)
**What changed:**
- Added `success` flag: Process completed with exit code 0 (normal success path)
- Added `cleanup_done` flag: Cleanup script finished in any state except Running
- Commits are attempted if either condition is true

**Result:** When a cleanup script fails, any file changes it made will still be committed to git, instead of being lost.
2025-10-04 14:24:25 +01:00
Louis Knight-Webb
c45e40717e Close GitHub popup after login (vibe-kanban) (#930)
* ## Fix Implemented Successfully 

I've implemented the GitHub popup auto-close fix with two key changes to [`GitHubLoginDialog.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/d872-close-github-pop/frontend/src/components/dialogs/auth/GitHubLoginDialog.tsx):

1. **Auto-close effect**: Added a `useEffect` that automatically closes the dialog when the user becomes authenticated
2. **Reduced flicker**: Reordered the SUCCESS polling case to avoid briefly showing the "Sign in again" prompt

The popup will now automatically close within ~1 second after successful GitHub authentication, eliminating the confusing "sign in again" prompt. Type checks pass successfully.

* ## Fix Implemented Successfully 

I've implemented the complete fix for the GitHub popup staying open in the settings page:

**Changes Made:**

1. **Updated [`GitHubLoginDialog.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/d872-close-github-pop/frontend/src/components/dialogs/auth/GitHubLoginDialog.tsx#L34-L40)**: Added `modal.resolve(true)` before `modal.hide()` in the auto-close effect to properly settle the Promise

2. **Simplified [`GeneralSettings.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/d872-close-github-pop/frontend/src/pages/settings/GeneralSettings.tsx#L489-L491)**: Removed the unnecessary `.finally()` chain since the dialog now manages its own lifecycle

The popup will now automatically close after successful GitHub authentication from both the onboarding flow and the settings page. Type checks pass successfully.

* Cleanup script changes for task attempt d8729f37-551a-4490-a0bd-396032d528ce

* ## Self-Contained Fix Implemented Successfully 

I've implemented Option 2 - the most predictable approach that makes the dialog self-contained:

**Changes Made:**

1. **Removed the auto-close effect** that depended on external state changes
2. **Added direct modal close in the SUCCESS case** of the device flow polling:
   - After `await reloadSystem()`, immediately call `modal.resolve(true)` and `modal.hide()`
   - This happens right when we know authentication succeeded

**Benefits of this approach:**
- **Self-contained**: The dialog manages its own lifecycle without depending on external state
- **Predictable**: The flow is linear and obvious: start → poll → success → close
- **Readable**: No complex state dependencies or effects to understand
- **Reliable**: Eliminates the timing issues with stale `githubTokenInvalid` flags

The popup will now automatically close immediately after successful GitHub authentication in both the onboarding and settings flows. Type checks pass successfully.
2025-10-03 19:23:13 +01:00
Louis Knight-Webb
c8e660c7da Add discord shield to navbar (vibe-kanban) (#927)
*  Discord shield added to navbar with:

- **Desktop badge**: Discord shield visible on sm+ screens, positioned before the dropdown menu
- **Mobile fallback**: Discord link added to dropdown menu for small screens
- **Consistent styling**: Uses `h-5` height and proper spacing (`ml-2 mr-1`)
- **Accessibility**: Includes proper `aria-label` and `alt` text

The implementation follows the existing code patterns and maintains readability as requested.

*  Fixed both issues:

- **Vertical centering**: Changed from `block` to `flex items-center` to properly align with other navbar buttons
- **Theme adaptation**: Added `dark:brightness-90 dark:contrast-125` to subtly adjust the shield colors in dark mode for better visibility

The Discord shield now properly aligns with other navbar elements and adapts to both light and dark themes.

*  Updated Discord shield with theme colors and positioning:

- **Theme colors**: Custom badge using `bg-background`, `text-foreground` for left side and `bg-success`, `text-success-foreground` for right side
- **Position**: Moved to right of logo (left side of navbar) instead of right side
- **Design**: Clean two-part badge with "discord" label and "online" status that adapts to theme automatically

The Discord badge now uses your app's theme colors and is positioned next to the logo for better visual hierarchy.

*  Discord online count implemented with:

- **Live data**: Fetches real member count from Discord Widget API
- **Auto-refresh**: Updates every 60 seconds for live feel
- **Graceful fallback**: Shows "online" if API unavailable
- **Theme integration**: Maintains your custom success/background colors
- **Accessibility**: Includes `aria-live="polite"` for screen readers
- **Formatted display**: Shows count as "1,234 online" with proper locale formatting

The Discord badge now displays the actual number of online members from your server while maintaining the theme colors and positioning next to the logo.

* Cleanup script changes for task attempt 230fa5cc-96f7-4fdb-a549-c2ea46b9e88e

*  Fixed positioning - Added `flex items-center` to the container so the logo and Discord badge sit side by side horizontally instead of stacking vertically.

*  Added Discord logo from simple-icons:

- **Added simple-icons dependency** via pnpm
- **Imported Discord icon** from `simple-icons` package
- **Replaced "discord" text** with actual Discord SVG logo
- **Maintained theme colors** - icon uses `currentColor` so it adapts to theme automatically
- **Proper sizing** - `h-4 w-4` matches other navbar icons

The Discord badge now displays the official Discord logo instead of text, while maintaining the live member count and theme integration.

* Cleanup script changes for task attempt 230fa5cc-96f7-4fdb-a549-c2ea46b9e88e

* manual style improvement
2025-10-03 18:52:44 +01:00
Louis Knight-Webb
613caf91d6 Perfect! The amp version has been successfully updated from 0.0.1758615753-ge2e2fb to 0.0.1759507289-g3e67fa in [crates/executors/src/executors/amp.rs](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/af80-bump-amp-version/crates/executors/src/executors/amp.rs#L36). This was the only file containing the amp version reference. (#929) 2025-10-03 18:52:30 +01:00
Britannio Jarrett
81af7ac36c Add remaining IDE icons (vibe-kanban) (#925)
* Perfect! All the icons have been successfully added. The implementation is now complete:

 **Zed**: Added theme-aware icons (zed-dark.svg, zed-light.svg)
 **IntelliJ**: Added single icon (intellij.svg) since IntelliJ typically uses one consistent icon
 **Windsurf**: Added theme-aware icons (windsurf-dark.svg, windsurf-light.svg)

The [`IdeIcon` component](file:///private/var/folders/5q/5vgq75y92dz0k7n62z93299r0000gn/T/vibe-kanban/worktrees/2b83-remaining-ide-ic/frontend/src/components/ide/IdeIcon.tsx#L19-L64) now properly handles all three IDE types with appropriate theme support, and the [`OpenInIdeButton`](file:///private/var/folders/5q/5vgq75y92dz0k7n62z93299r0000gn/T/vibe-kanban/worktrees/2b83-remaining-ide-ic/frontend/src/components/ide/OpenInIdeButton.tsx) component already had the correct labels configured.

* Perfect! I've made the following changes:

 **Fixed Zed icons**: Now correctly uses light icon on dark theme and dark icon on light theme
 **Fixed Windsurf icons**: Now correctly uses light icon on dark theme and dark icon on light theme
 **Added Xcode support**: Ready to display Xcode icon when you add `xcode.svg` to the `/ide` directory

The icon mapping now works correctly - dark-colored icons show on light backgrounds, and light-colored icons show on dark backgrounds.

* Perfect! The Xcode icon has been successfully added. Now all IDE icons are in place:

 **Xcode**: Added `xcode.svg` icon
 **Zed**: Theme-aware icons with correct mapping
 **IntelliJ**: Single consistent icon
 **Windsurf**: Theme-aware icons with correct mapping

All IDE types from the EditorType enum now have proper icon support in the [`IdeIcon` component](file:///private/var/folders/5q/5vgq75y92dz0k7n62z93299r0000gn/T/vibe-kanban/worktrees/2b83-remaining-ide-ic/frontend/src/components/ide/IdeIcon.tsx).

* format IdeIcon.tsx
2025-10-03 16:42:02 +01:00
Gabriel Gordon-Hall
d6da689594 feat: MCP upgades (#904)
* wip: connect to api from mcp

* fix routes

* add start task mcp tool

* review comments
2025-10-03 16:00:15 +01:00
Gabriel Gordon-Hall
0f21d9e818 update readme (#923) 2025-10-03 13:48:27 +01:00
Solomon
a43fa76079 Copilot CLI (#915) 2025-10-03 13:12:53 +01:00
GitHub Action
86f7c00d94 chore: bump version to 0.0.102 2025-10-03 08:49:53 +00:00
Alex Netsch
8dc297c521 Fix mem leak (#916)
* Fix mem leak

* Fix cross-platform, fix no error logging
2025-10-03 09:46:44 +01:00
Solomon
0f835e9730 fix Gemini on windows (#912) 2025-10-02 18:09:19 +01:00
Solomon
b40b7f21b9 Speed-up running process check (#894) 2025-10-02 15:40:09 +01:00
Alex Netsch
2f2e85b6e0 Disable follow-up textbox during approvals (vibe-kanban) (#914)
* Perfect! All changes have been implemented successfully. Let me summarize what was done:

## Summary

I've successfully implemented the feature to disable the follow-up textbox during approvals. Here's what was changed:

### Changes Made:

1. **Created `usePendingApproval` hook** (`frontend/src/hooks/usePendingApproval.ts`):
   - This hook checks the conversation entries from `EntriesContext` to detect if any tool use entry has a `pending_approval` status
   - Returns a boolean indicating whether there's a pending approval

2. **Updated `TaskFollowUpSection` component** (`frontend/src/components/tasks/TaskFollowUpSection.tsx`):
   - Imported and used the new `usePendingApproval` hook
   - Updated `canTypeFollowUp` to include the `hasPendingApproval` check, preventing users from typing when an approval is pending
   - Updated `isEditable` to include `!hasPendingApproval`, which disables the textbox UI when there's a pending approval

### How It Works:

- When an agent requests approval for a tool use, the conversation entry will have a `status: 'pending_approval'`
- The `usePendingApproval` hook detects this by checking all entries in the `EntriesContext`
- When a pending approval is detected, the follow-up textbox becomes disabled, preventing users from typing and queueing follow-ups
- Once the approval is resolved (approved/denied), the entry status changes and the textbox becomes enabled again

The implementation follows the existing patterns in the codebase and integrates smoothly with the existing approval UI and context system. TypeScript type checking passes successfully.

* Cleanup script changes for task attempt bd98d75b-12d0-45da-b486-f516b274abff

* Perfect! The refactoring is complete. Here's what I did:

## Changes Made

1. **Deleted** `frontend/src/hooks/usePendingApproval.ts` - the custom hook was unnecessary

2. **Updated** `TaskFollowUpSection.tsx`:
   - Removed import of `usePendingApproval`
   - Added import of `useEntries` from `@/contexts/EntriesContext`
   - Replaced the hook call with inline logic using `useEntries()` and `useMemo()`

## Result

The implementation is now:
- **Simpler** - one less file to maintain
- **More consistent** - follows the same pattern as `TodoPanel.tsx` which also uses `useEntries()` directly
- **Just as efficient** - still memoized, same performance
- **Easier to understand** - all the logic is in one place

The functionality remains exactly the same - the follow-up textbox (and all related buttons) will be disabled when there's a pending approval in the conversation entries. TypeScript type checking passes successfully.
2025-10-02 15:20:08 +01:00
Alex Netsch
a2153be98c Keep git panel when branchstatus fails (vibe-kanban) (#913)
* Done! I've updated the code to keep the Git panel visible when `branchStatus` fails:

**Changes made:**

1. **GitOperations.tsx:253-256**: Changed the early return condition to only hide the panel when PR is merged, not when `branchStatus` is null
2. **GitOperations.tsx:438-505**: Wrapped the merge/PR/rebase buttons in a conditional `{branchStatus && ...}` so they only display when branch status is available
3. **TaskDetailsToolbar.tsx:227-238**: Removed the `branchStatus` condition from the parent, so `GitOperations` is always rendered when `selectedAttempt` exists

**Result:**
- The Git panel (showing branch names and the arrow) will now always display when there's a selected attempt
- The merge, PR, and rebase buttons will only show when branch status loads successfully
- The panel still hides completely if the PR has been merged

* Updated! Now the target branch will fallback to `selectedAttempt.target_branch` if `branchStatus` doesn't load, ensuring the target branch label always displays correctly.
2025-10-02 11:17:18 +01:00
Alex Netsch
5f2ff5e488 Fix wrong git status for remote branches (#903)
* Fix wrong git status for remote branches

* Fix edge case where prefix may be stripped multiple times
2025-10-02 10:08:19 +01:00
JonnyDB
eaf24bcb2a fix claude code rotuer version (#911)
2.0.49 is in not valid. 1.0.49 is. this is likely a minor typo
2025-10-02 09:39:17 +01:00
GitHub Action
d8fc7a985d chore: bump version to 0.0.101 2025-10-01 17:18:37 +00:00
Gabriel Gordon-Hall
d10c37f061 don't show virtuoso loader when pending approval (#909) 2025-10-01 18:16:15 +01:00
Louis Knight-Webb
b631f6fbc6 Improve plan scroll (#908)
* Done! I've removed the scrolling classes from the plan container. Plans will now use the parent chat history scroll instead of having their own nested scroll behavior.

The fix removes `max-h-[65vh] overflow-y-auto overscroll-contain` while preserving the padding and background styling.

* Cleanup script changes for task attempt 6c65f630-c1bb-4069-b3d8-7d937fc35bf7
2025-10-01 18:10:45 +01:00
Alex Netsch
0e431705d0 Fix clear text watchkill phrase (#907) 2025-10-01 17:44:52 +01:00
Jacek Tomaszewski
2b277d3ddf feat: implement automatic PR discovery and attachment for task attempts (#842)
* feat: implement automatic PR discovery and attachment for task attempts

- Add GitHub API methods to list PRs for a branch (open and all states)
- Create /pr/attach endpoint to discover and attach existing PRs
- Automatically mark tasks as done when attached PR is merged
- Update Merge model to support PR status on creation
- Handle both open and closed/merged PRs during attachment

This improves on #837 by using GitHub API to automatically discover PRs
rather than requiring manual input of PR details.

* fix: address PR review feedback

- Fix compilation issue by using find_latest_by_task_attempt_id
- Properly handle Merge enum (Direct vs Pr variants)
- Remove redundant list_prs_for_branch method
- Simplify PR discovery to use only list_all_prs_for_branch
- Only check for existing PR merges, not direct merges

* fix: resolve compilation issues

- Fix SQLx cache issue by restoring exact original create_pr method
- Fix API response type for GitHub token error
- Fix ProjectError variant name to ProjectNotFound
- Add update_status call after PR creation for non-open PRs

* fix: address PR review feedback

- Fix compilation issue by using find_latest_by_task_attempt_id
- Properly handle Merge enum (Direct vs Pr variants)
- Remove redundant list_prs_for_branch method
- Simplify PR discovery to use only list_all_prs_for_branch
- Only check for existing PR merges, not direct merges
- Update code to match current TaskAttempt struct (branch: String, target_branch: String)

* Clippy, fmt, cleanup

---------

Co-authored-by: Alex Netsch <alex@bloop.ai>
2025-10-01 17:31:50 +01:00
Greg Burch
0e9d10732a Allow image pasting into task field (#883)
* **Changes**
- Made `ImageUploadSection` ref-aware with an `addFiles` imperative handle and auto-expansion when images appear, enabling non-UI triggers to reuse its validation/upload flow (frontend/src/components/ui/ImageUploadSection.tsx:36-348).
- Captured clipboard image blobs in the shared textarea component and exposed them via a new `onPasteFiles` hook for upstream consumers (frontend/src/components/ui/file-search-textarea.tsx:111-137).
- Task creation dialog now routes pasted images straight into the uploader through the new ref, keeping the description markdown in sync (frontend/src/components/dialogs/tasks/TaskFormDialog.tsx:102-357).
- Follow-up editor keeps the image panel mounted but hidden, reveals it on paste, and forwards the new prop through its wrapper so task attempts accept clipboard images (frontend/src/components/tasks/TaskFollowUpSection.tsx:89-325; frontend/src/components/tasks/follow-up/FollowUpEditorCard.tsx:13-47).

**Tests**
- `npm run check` (frontend)
- `pnpm run check` (timed out after backend cargo check kicked off; see log)

**Next Steps**
1. Re-run `pnpm run check` or `npm run backend:check` when you can let Cargo finish to confirm backend continues to build.
2. Manually paste a few image formats/sizes into the task form and follow-up editor to confirm UX and markdown output look right.

* Update frontend/src/components/ui/ImageUploadSection.tsx

Co-authored-by: Gabriel Gordon-Hall <gabriel@bloop.ai>

* fmt

---------

Co-authored-by: Greg Burch <gburch@styleseat.com>
Co-authored-by: Gabriel Gordon-Hall <gabriel@bloop.ai>
Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com>
2025-10-01 17:17:51 +01:00
Louis Knight-Webb
2781e3651b Add preview tab + point and click editor (vibe-kanban) (#870)
* Perfect! The preview tab implementation is complete and all type checks pass. Let me provide a summary of what was implemented:

1. **Updated `TabType`** - Added 'preview' to the union type
2. **Created `useDevserverPreview` hook** - Intelligent devserver URL detection with:
   - Real-time log parsing using the regex `(?:localhost|127\.0\.0\.1|0\.0\.0\.0):(\d+)[^\d]*`
   - Three states: idle/searching/ready
   - URL normalization (0.0.0.0 → localhost)
   - Process monitoring for setup scripts and dev servers

3. **Built `PreviewTab` component** - Full-featured iframe preview with:
   - Proper sandbox settings for security
   - Toolbar with refresh, copy URL, and open external buttons
   - Smart error handling for mixed content/CORS issues
   - Clear empty states and loading indicators

4. **Enhanced `TabNavigation`** - Conditionally shows preview tab with:
   - Monitor icon and spinner when searching
   - Only appears when devserver is detected or likely

5. **Integrated in `TaskDetailsPanel`** - Wires everything together in fullscreen mode

- **Smart Detection**: Parses logs in real-time to find devserver URLs
- **Robust Error Handling**: Graceful fallbacks for iframe loading issues
- **Security**: Proper iframe sandboxing with necessary permissions
- **Performance**: Efficient log processing with deduplication
- **UX**: Clear states (searching/ready/error) with helpful messaging

The implementation follows the Oracle's architectural recommendations with proper separation of concerns and real-time detection capabilities.

* Cleanup script changes for task attempt 4f59c374-1cc5-4b3c-a79a-5f63756a366b

* Perfect! Now the preview tab will use the **first** dev server URL it detects rather than being overwritten by subsequent matches. This means:

- If both backend (e.g., `:3001`) and frontend (e.g., `:5173`) servers start
- The preview tab will show whichever URL appears first in the logs
- Subsequent URLs will be ignored to avoid switching the preview unexpectedly

This provides a more stable preview experience when multiple dev servers are running.

* Cleanup script changes for task attempt 4f59c374-1cc5-4b3c-a79a-5f63756a366b

* add parent lib

* fmt

* Listen for communication from the preview tab (vibe-kanban ace46045)

In frontend/src/components/tasks/TaskDetails/PreviewTab.tsx

We should expect that the iframe will communicate via frontend/src/utils/previewBridge.ts

When a message is received, we should add some details about the clicked element to the follow up textarea

* Component to view clicked element (vibe-kanban e3b90cc1)

frontend/src/components/tasks/TaskDetails/PreviewTab.tsx
frontend/src/components/tasks/TaskFollowUpSection.tsx

When a user clicks on an element, we should display a box in the follow up section similar to how we show reviews or conflicts.

The section should display a summary of each of the elements, the name of the component and the file location.

When the user sends a follow up, a markdown equivalent of the summary should be appended to the top of the follow up message.

* Component to view clicked element (vibe-kanban e3b90cc1)

frontend/src/components/tasks/TaskDetails/PreviewTab.tsx
frontend/src/components/tasks/TaskFollowUpSection.tsx

When a user clicks on an element, we should display a box in the follow up section similar to how we show reviews or conflicts.

The section should display a summary of each of the elements, the name of the component and the file location.

When the user sends a follow up, a markdown equivalent of the summary should be appended to the top of the follow up message.

* Tweaks to component click (vibe-kanban 756e1212)

Preview tab frontend/src/components/tasks/TaskDetails/PreviewTab.tsx
- Preview should remember which URL you were on
- Auto select the follow up box after point and click, so you can type feedback

Clicked elements: frontend/src/components/tasks/ClickedElementsBanner.tsx, frontend/src/contexts/ClickedElementsProvider.tsx
- The list of components should not overflow horizontally, instead we should truncate, omiting components from the left first
- If the user clicks on a component, it should omit the downstream components from the list, they should be displayed disabled and the prompt should start from the selected component

* strip ansi when parsing dev server URL

* cleanup

* cleanup

* improve help copy

* start dev server from preview page

* dev server wip

* restructure

* instructions

* fix

* restructur

* fmt

* i18n

* i18n fix

* config fix

* wip cleanup

* minor cleanup

* Preview tab feedback (vibe-kanban d531fff8)

In the PreviewToolbar, each icon button should have a tooltip

* fix + fmt

* move dev script textarea

* improve when help is shown

* i18n

* improve URL matching

* fix close logs

* auto install companion

* cleanup notices

* Copy tweak
2025-10-01 17:15:12 +01:00
Gabriel Gordon-Hall
0ace01b55f - remove AbortController in PendingApprovalEntry (#902)
- fix find execution process check
- force stop process with non-killed status
2025-10-01 16:51:23 +01:00
Solomon
c78f48ae02 CI: build static linux executables (#893) 2025-10-01 15:13:59 +01:00
Solomon
7217ab535b claude: Fork session on resume to enable retry (#899) 2025-10-01 15:13:48 +01:00
Solomon
ff2edd4c11 Allow retry on initial prompt (#898)
Also allow followups when initial process didn't produce a session id.
2025-10-01 14:53:03 +01:00
Britannio Jarrett
b77abac0c3 Use new sonnet models for the cursor agent profiles (#897)
* Updated cursor model from `sonnet-4` to `sonnet-4.5` in [`default_profiles.json`](file:///private/var/folders/5q/5vgq75y92dz0k7n62z93299r0000gn/T/vibe-kanban/worktrees/a67d-update-cursor-ag/crates/executors/default_profiles.json#L92-L97), updated available models in [`cursor.json`](file:///private/var/folders/5q/5vgq75y92dz0k7n62z93299r0000gn/T/vibe-kanban/worktrees/a67d-update-cursor-ag/shared/schemas/cursor.json#L22) schema, and [`cursor.rs`](file:///private/var/folders/5q/5vgq75y92dz0k7n62z93299r0000gn/T/vibe-kanban/worktrees/a67d-update-cursor-ag/crates/executors/src/executors/cursor.rs#L39) documentation.

* Added `SONNET_4_5_THINKING` profile to [`default_profiles.json`](file:///private/var/folders/5q/5vgq75y92dz0k7n62z93299r0000gn/T/vibe-kanban/worktrees/a67d-update-cursor-ag/crates/executors/default_profiles.json#L98-L103) for the `sonnet-4.5-thinking` model.
2025-10-01 09:15:16 +01:00
Gabriel Gordon-Hall
ce3c886ac9 bump claude code to 2.0.1 (#896) 2025-09-30 19:18:59 +01:00
Louis Knight-Webb
0bf4733bff ## Fix Complete! (#892)
I've successfully implemented the fix for the todos not updating when navigating between task attempts. Here's what I changed:

**File:** [`TaskDetailsPanel.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/cf76-todos-do-not-upd/frontend/src/components/tasks/TaskDetailsPanel.tsx#L100)

**Change:** Added `key={selectedAttempt?.id}` to the `EntriesProvider` component

```tsx
// Before
<EntriesProvider>

// After
<EntriesProvider key={selectedAttempt?.id}>
```

**How it works:**
- When `selectedAttempt?.id` changes, React unmounts and remounts the `EntriesProvider` with fresh state
- This immediately clears the entries array and resets the todos to an empty state
- The TodoPanel will hide until new entries arrive for the selected attempt
- No todos from previous attempts can persist

The fix is minimal, readable, and leverages React's built-in key behavior for state management - exactly what the Oracle recommended as the best approach.
2025-09-30 16:53:40 +01:00
Solomon
f9878e9183 Consolidate Retry and Follow-up (#800) 2025-09-30 13:09:50 +01:00
Louis Knight-Webb
71bfe9ac0b Fix dropdown colours (vibe-kanban) (#891)
* Done! The dropdown colors are now fixed for dark mode readability:

- **Selected items** now use `bg-accent text-accent-foreground` instead of hardcoded light-theme colors
- **File paths** in selected items use `text-accent-foreground/70` for better contrast
- **Added accessibility** attributes (`aria-selected` and `role="option"`)

The changes maintain your existing design token pattern and will automatically adapt to both light and dark themes.

* Cleanup script changes for task attempt 9dd6bd96-f216-408c-ab42-94eefb1437e1

* Perfect! Now the selected dropdown item uses:

1. **Background:** `bg-primary/10` (subtle primary tint)
2. **Text:** `text-primary` (primary color text)
3. **Left border:** `border-l-2 border-primary` (visual indicator)
4. **File path:** `text-primary/70` (muted primary for secondary info)

This provides much better visual distinction while maintaining theme compatibility and using your existing design token pattern.

* Cleanup script changes for task attempt 9dd6bd96-f216-408c-ab42-94eefb1437e1

* Now the selected item uses `bg-muted text-foreground` which provides proper contrast in both light and dark modes, with a primary-colored left border for visual distinction. The file path uses consistent `text-muted-foreground` in all states.

* Cleanup script changes for task attempt 9dd6bd96-f216-408c-ab42-94eefb1437e1

* Perfect! Now the selected dropdown item simply uses `bg-muted text-foreground` which provides clear contrast and visibility without the border.
2025-09-30 13:08:06 +01:00
GitHub Action
58badf2653 chore: bump version to 0.0.99 2025-09-30 10:44:02 +00:00
Gabriel Gordon-Hall
6727e2dbb9 feat: keyboard shortcuts for approvals (#869)
* wip

* cmd click shortcut to deny approval

* cleaner type

* show percentage in progress bar

* improve structure of PendingApprovalComponent

* enter to approve request

* disable kanban scope

* fix approval scope selection
2025-09-30 11:40:34 +01:00
Louis Knight-Webb
23243dda7a Prevent useConversationHistory conflicts (vibe-kanban) (#872)
* ## Summary

Successfully implemented the `mergeIntoDisplayed` helper to prevent useConversationHistory conflicts! Here's what was accomplished:

**Changes made to [`frontend/src/hooks/useConversationHistory.ts`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/5e29-prevent-useconve/frontend/src/hooks/useConversationHistory.ts):**

1. **Added mergeIntoDisplayed helper** that performs in-place mutations instead of reassigning the entire object
2. **Refactored 4 direct assignment locations**:
   - Stream updates in `loadRunningAndEmit`
   - Initial entries loading
   - Batch loading (with function signature improvement)
   - Process removal logic
3. **Maintained the deliberate reset** on attempt change (line 479)

**Key improvements**:
- Prevents race conditions between concurrent async operations
- Eliminates data loss from process log overwrites
- Maintains data integrity during streaming and batch loading
- Passes type checking successfully

The implementation follows the Oracle's recommendations for safe concurrent updates by always reading the latest state and mutating in-place rather than replacing the entire object reference.

* Cleanup script changes for task attempt 5e29a440-f572-406d-9f07-be5f11fd3775
2025-09-30 11:18:28 +01:00
Gabriel Gordon-Hall
4177a54d91 feat: default codex permissions (#886)
* add codex option

* update default codex configurations

* fix ci
2025-09-30 09:40:20 +01:00
Alex Netsch
091e903cf6 Alex/refactor bb rebase (#824)
* Refactor task_attempt branch handling and enforce NOT NULL constraint on branch column

* Change backend rebase to no change base branch, add change target branch api

* Change frontend rebase on branch to change target branch

Change status to show ahead/behind, always show rebase

* Use target branch for everything except rebase

* Remove base_branch

* Remove base branch frontend

* add rebase dialog with target and upstream options

* Fix unused upstream arg

* Add i18n

* Remove stray ts-rs file

* dont show +0, -0

* Move upstream to foldable advanced rebase

* Move buttons around

* Move git state/actions into a component

* Add task/target labels

* Fix action buttons layout

* Fmt

* i18n

* remove branch origin removal

* Remove empty divs

* Remove [1fr_auto_1fr] class in favour if divs

* use theme colours, make gear icon bigger

* Fix plural i18n

* Remove legacy ui reducer
2025-09-29 19:50:29 +01:00
Solomon
bcd6bdbe05 Make rebase conflict resolution message read-only (#871) 2025-09-29 17:44:16 +01:00
Solomon
6f2d6d4e40 Make diff stats much faster (#866) 2025-09-29 16:16:34 +01:00
Louis Knight-Webb
3a9e5533c9 Fixed! The missing space has been added after "Description:" in the task template format. The template will now correctly output: (#884)
```
Title: [TITLE]

Description: [DESCRIPTION]
```

Instead of the previous format without the space after "Description:".
2025-09-29 15:46:49 +01:00
GitHub Action
b8e756aa8d chore: bump version to 0.0.98 2025-09-29 14:06:50 +00:00
Alex Netsch
3299ff1d8a Fix children layout (vibe-kanban) (#873)
* Perfect! I've updated the child tasks layout to always display horizontally. Here's what changed:

**Before**: Used a responsive CSS grid (`grid-cols-1 md:grid-cols-2 xl:grid-cols-3`) that would stack cards vertically on smaller screens.

**After**: Replaced with a horizontal flexbox layout that:
- Uses `flex` with `gap-4` for consistent spacing
- Adds `overflow-x-auto` to enable horizontal scrolling when needed
- Wraps each card in a `flex-none w-80` container to maintain consistent card width
- Adds `pb-2` for bottom padding to account for the scrollbar

The child tasks will now always be laid out horizontally regardless of screen size, with horizontal scrolling when there are too many cards to fit in the available width.

* Perfect! I've updated the child tasks layout to always display vertically. The changes:

- Used `flex flex-col` to create a vertical flexbox layout
- Removed the responsive grid logic and horizontal overflow handling
- Each card now spans the full width and stacks vertically with consistent `gap-4` spacing

The child tasks will now always be laid out vertically in a single column, regardless of screen size.
2025-09-29 13:52:30 +01:00
Gabriel Gordon-Hall
dd877eaa51 feat: add task buttons to Kanban headers (#863)
* wip: add task

* add handler

* i18n

* add button styles

---------

Co-authored-by: Louis Knight-Webb <louis@bloop.ai>
2025-09-26 16:34:52 +01:00
Louis Knight-Webb
e3727e249d Implement Vibe Kanban Web Companion (#868)
* add companion

* bump companion version

* update package

* update package

* cleanup

* cleanup
2025-09-26 16:16:55 +01:00