* add copy files setting
* DB prepare
* Move copy_project_files into the container trait so we remember to implement on cloud
* Autocomplete on the FE for files
* Clippy
* Lint and fmt
---------
Co-authored-by: Louis Knight-Webb <louis@bloop.ai>
* Increase broadcast channel size
* Use stdout_lines_stream
* WIP fix amp logs containing all previous conversation turns
* Mark raw and normalized log streams from the DB as finished
* Update event source manager to handle removed entries
* Clippy
* Cargo fmt
* Add collapsible agent log headers
- Make process headers (Setup Script, Coding Agent, Cleanup Script) clickable to hide/show logs
- Add chevron icon with rotation animation to indicate collapsed state
- Filter log entries to hide those from collapsed processes while preserving virtualization
- Maintain scroll position and follow-output behavior when toggling collapse
- Support keyboard navigation (Enter/Space) for accessibility
Amp-Thread: https://ampcode.com/threads/T-f44b0256-de19-45e1-96cb-df755553716d
Co-authored-by: Amp <amp@ampcode.com>
* Cleanup script changes for task attempt 990e23da-53ff-4203-ac58-f5b28653bc1f
* Commit changes from coding agent for task attempt 990e23da-53ff-4203-ac58-f5b28653bc1f
* Cleanup (and adjust lint)
* Enhance agent log collapsibility with auto-hide and dev server filtering
- Filter dev server processes from logs tab to reduce noise
- Auto-collapse completed setup/cleanup scripts on initial load for cleaner UX
- Auto-expand scripts that restart after completion
- Add process constants for type safety and consistency
- Separate auto-collapsed and user-collapsed state management
- Maintain scroll position and user preferences throughout
Amp-Thread: https://ampcode.com/threads/T-f44b0256-de19-45e1-96cb-df755553716d
Co-authored-by: Amp <amp@ampcode.com>
* Cleanup script changes for task attempt 990e23da-53ff-4203-ac58-f5b28653bc1f
* Add coding agent auto-collapse for cleaner log focus
- Auto-collapse all non-latest coding agents on task load for focused viewing
- Detect new coding agent starts (follow-ups) and collapse previous agents
- Latest coding agent always remains expanded for active monitoring
- Robust latest agent detection with timestamp tie-breaking
- One-shot initial collapse prevents duplicate processing
- Smart follow-up detection tracks new running agents
- User manual toggles permanently override auto-collapse behavior
- Comprehensive state reset on attempt changes
Amp-Thread: https://ampcode.com/threads/T-f44b0256-de19-45e1-96cb-df755553716d
Co-authored-by: Amp <amp@ampcode.com>
* Cleanup script changes for task attempt 990e23da-53ff-4203-ac58-f5b28653bc1f
* Fix timing issue with coding agent auto-collapse
- Only mark initial collapse as complete when coding agents are actually processed
- Prevents race condition where flag was set before real data arrived
- Ensures auto-collapse logic runs after data loads, not during empty state
- Fixes issue where all coding agents remained expanded instead of latest-only
Amp-Thread: https://ampcode.com/threads/T-f44b0256-de19-45e1-96cb-df755553716d
Co-authored-by: Amp <amp@ampcode.com>
* Cleanup script changes for task attempt 990e23da-53ff-4203-ac58-f5b28653bc1f
* refactor
* lints
* prettier
---------
Co-authored-by: Amp <amp@ampcode.com>
* init deployment
* refactor state
* pre executor app state refactor
* deployment in app state
* clone
* fix executors
* fix dependencies
* command runner via app_state
* clippy
* remove dependency on ENVIRONMENT from command_runner
* remove dependency on ENVIRONMENT from command_runner
* build fix
* clippy
* fmt
* featues
* vscode lints for cloud
* change streaming to SSE (#338)
Remove debug logging
Cleanup streaming logic
feat: add helper function for creating SSE stream responses for stdout/stderr
* update vscode guidance
* move start
* Fix executors
* Move command executor to separate file
* Fix imports for executors
* Partial fix test_remote
* Fix
* fmt
* Clippy
* Add back GitHub cloud only routes
* cleanup and shared types
* Prepare for separate cloud crate
* Init backend-common workspace
* Update
* WIP
* WIP
* WIP
* WIP
* WIP
* WIP
* Projects (and sqlx)
* Tasks
* WIP
* Amp
* Backend executor structs
* Task attempts outline
* Move to crates folder
* Cleanup frontend dist
* Split out executors into separate crate
* Config and sentry
* Create deployment method helper
* Router
* Config endpoints
* Projects, analytics
* Update analytics paths when keys not provided
* Tasks, task context
* Middleware, outline task attempts
* Delete backend common
* WIP container
* WIP container
* Migrate worktree_path to container_ref (generic)
* WIP container service create
* Launch container
* Fix create task
* Create worktree
* Move logic into container
* Execution outline
* Executor selection
* Use enum_dispatch to route spawn tree
* Update route errors
* Implement child calling
* Move running executions to container
* Add streaming with history
* Drop cloud WIP
* Logs
* Logs
* Refactor container logic to execution tracker
* Chunk based streaming and cleanup
* Alex/mirgate task templates (#350)
* Re-enable task templates; migrate routes; migrate args and return types
* Refactor task template routes; consolidate list functions into get_templates with query support
* Fix get_templates function
* Implement amp executor
* Gemini WIP
* Make streaming the event store reusable
* Rewrite mutex to rwlock
* Staging for normalised logs impl
* Store custom LogMsg instead of event as more flexible
* Cleanup
* WIP newline stream for amp (tested and working, needs store impl)
* refactor: move stranded `git2` logic out of `models` (#352)
* remove legacy command_executor; move git2 logic into GitService
* remove legacy cloud runner
* put back config get route
* remove dead logic
* WIP amp normalisation
* Normalized logs now save to save msg store as raw
* Refactor auth endpoints (#355)
* Re-enable auth;Change auth to use deployment
Add auth service
Move auth logic to service
Add auth router and service integration to deployment
Refactor auth service and routes to use octocrab
Refactor auth error handling and improve token validation responses
* rename auth_router to router for consistency
* refactor: rename auth_service to auth for consistency (#356)
* Refactor filesystem endpoints (#357)
* feat: implement filesystem service with directory listing and git repo detection
* refactor: update filesystem routes; sort repos by last modfied
* Gemini executor logs normalization
* feat: add sound file serving endpoint and implement sound file loading (#358)
* Gemini executor followup (#360)
* Sync logs to db (#359)
* Exit monitor
* Outline stream logs to DB
* Outline read from the message store
* Add execution_process_logs, store logs in DB
* Stream logs from DB
* Normalized logs from DB
* Remove eronious .sqlx cache
* Remove execution process stdout and stderr
* Update execution process record on completion
* Emit session event for amp
* Update session ID when event is emitted
* Split local/common spawn fn
* Create initial executor session
* Move normalized logs into executors
* Store executor action
* Refactor updated_at to use micro seconds
* Follow up executions (#363)
* Follow up request handler scaffold
Rename coding agent initial / follow up actions
* Follow ups
* Response for follow up
* Simplify execution actions for coding agents
* fix executor selection (#362)
* refactor: move logic out of `TaskAttempt` (#361)
* re-enable /diff /pr /rebase /merge /branch-status /open-editor /delete-file endpoints
* address review comments
* remove relic
* Claude Code (#365)
* Use ApiError rather than DeploymentError type in routes (#366)
* Fix fe routes (#367)
* /api/filesystem/list -> /api/filesystem/directory
* /api/projects/:project_id/tasks -> /api/tasks
* Remove with-branch
* /api/projects/:project_id/tasks/:task_id -> /api/tasks/:task_id
* Post tasks
* Update template routes
* Update BE for github poll endpoint, FE still needs updating
* WIP freeze old types
* File picker fix
* Project types
* Solve tsc warna
* Remove constants and FE cloud mode
* Setup for /api/info refactor
* WIP config refactor
* Remove custom mapping to coding agents
* Update settings to fix code editor
* Config fix (will need further changes once attempts types migrated)
* Tmp fix types
* Config auto deserialisation
* Alex/refactor background processes (#369)
* feat: add cleanup for orphaned executions at startup
* Fix worktree cleanup; re add worktree cleanup queries
* refactor worktree cleanup for orphaned and externally deleted worktrees
* Fix compile error
* refactor: container creation lifecycle (#368)
* Consolidate worktree logic in the WorktreeManager
* move auxiliary logic into worktree manager
* fix compile error
* Rename core crate to server
* Fix npm run dev
* Fix fe routes 2 (#371)
* Migrate config paths
* Update sounds, refactor lib.rs
* Project FE types
* Branch
* Cleanup sound constants
* Template types
* Cleanup file search and other unused types
* Handle errors
* wip: basic mcp config editing (#351)
* Re-add notification service, move assets to common dir (#373)
add config to containter, add notifications into exit monitor
Refctor notification service
Refactor notifications
* Stderr support (#372)
Refactor plain-text log processing and resuse it for gemini, stderr, and potentially other executors.
* Fix fe routes 3 (#378)
* Task attempts
* Task types
* Get single task attempt endpoint
* Task attempt response
* Branch status
* More task attempt endpoints
* Task attempt children
* Events WIP
* Stream events when task, task attempt and execution process change status
* Fixes
* Cleanup logs
* Alex/refactor pr monitor (#377)
* Refactor task status updates and add PR monitoring functionality
* Add PR monitoring service and integrate it into deployment flow
Refactor GitHub token retrieval in PR creation and monitoring services
Fix github pr regex
* Fix types
* refactor: dev server logic (#374)
* reimplement start dev server logic
* robust process group killing
* Fix fe routes 4 (#383)
* Add endpoint to get execution processes
* Update types for execution process
* Further execution process type cleanup
* Wipe existing logs display
* Further process related cleanup
* Update get task attempt endpoint
* Frozen type removal
* Diff types
* Display raw logs WIP
* fix: extract session id once per execution (#386)
* Fix fe routes 5 (#387)
* Display normalized logs
* Add execution-process info endpoint
* WIP load into virtualized
* Simplified unified logs
* Raw logs also use json patch now (simplifies FE keys)
* WIP
* Fix FE rendering
* Remove timestamps
* Fix conversation height
* Cleanup entry display
* Spacing
* Mark the boundaries between different execution processes in the logs
* Deduplicate entries
* Fix replace
* Fmt
* put back stop execution process endpoint (#384)
* Fix fe routes 6 (#391)
* WIP cleanup to remove related tasks and plans
* Refactor active tab
* Remove existing diff FE logic
* Rename tab
* WIP stream file events
* WIP track FS events
* Respect gitignore
* Debounced event
* Deduplicate events
* Refactor git diff
* WIP stream diffs
* Resolve issue with unstaged changes
* Diff filter by files
* Stream ongoing changes
* Remove entries when reset and json patch safe entry ids
* Update the diff tab
* Cleanup logs
* Cleanup
* Error enum
* Update create PR attempt URL
* Follow up and open in IDE
* Fix merge
* refactor: introduce `AgentProfiles` (#388)
* automatically schedule coding agent execution after setup script
* profiles implementation
* add next_action field to ExecutorAction type
* make start_next_action generic to action type
Remove ProfilesManager and DefaultCommandBuilder structs
* store executor_action_type in the DB
* update shared types
* rename structs
* fix compile error
* Refactor remaining task routes (#389)
* Implement deletion functionality for execution processes and task attempts, including recursive deletion of associated logs.
refactor: deletion process for task attempts and associated entities
feat: Refactor task and task attempt models to remove executor field
- Removed the `executor` field from the `task_attempt` model and related queries.
- Updated the `CreateTaskAndStart` struct to encapsulate task and attempt creation.
- Modified the task creation and starting logic to accommodate the new structure.
- Adjusted SQL queries and migration scripts to reflect the removal of the executor.
- Enhanced notification service to handle executor types dynamically.
- Updated TypeScript types to align with the changes in the Rust models.
refactor: remove CreateTaskAndStart type and update related code
Add TaskAttemptWithLatestProfile and alias in frontend
Fix silent failure of sqlx builder
Remove db migration
Fix rebase errors
* Remove unneeded delete logic; move common container logic to service
* Profiles fe (#398)
* Get things compiling
* Refactor the config
* WIP fix task attempt creation
* Further config fixes
* Sounds and executors in settings
* Fix sounds
* Display profile config
* Onboarding
* Remove hardcoded agents
* Move follow up attempt params to shared
* Remove further shared types
* Remove comment (#400)
* Codex (#380)
* only trigger error message when RunReason is SetupScript (#396)
* Opencode (#385)
* Restore Gemini followups (#392)
* fix task killing (#395)
* commit changes after successful execution (#403)
* Claude-code-router (#410)
* Amp tool use (#407)
* Config upgrades (#405)
* Versioned config
* Upgrade fixes
* Save config after migration
* Scoping
* Update Executor types
* Theme types fix
* Cleanup
* Change theme selector to an enum
* Rename config schema version field
* Diff improve (#412)
* Ensure container exists
* Safe handling when ExecutorAction isn't valid JSON in DB
* Reset data when endpoint changes
* refactor: conditional notification (#408)
* conditional notification
* fix next action run_reason
* remove redundant log
* Fix GitHub auth frontend (#404)
* fix frontend github auth
* Add GitHub error handling and update dependencies
- Introduced GitHubMagicErrorStrings enum for consistent error messaging related to GitHub authentication and permissions.
- Updated the GitHubService to include a check_token method for validating tokens.
- Refactored auth and task_attempts routes to utilize the new error handling.
- Added strum_macros dependency in Cargo.toml for enum display.
* Refactor GitHub error handling and API response structure to use CreateGitHubPRErrorData
* Refactor API response handling in CreatePRDialog and update attemptsApi to return structured results
* Refactor tasksApi.createAndStart to remove projectId parameter from API call
* use SCREAMING_SNAKE_CASE for consistency
* Refactor GitHub error handling to replace CreateGitHubPRErrorData with GitHubServiceError across the codebase
* Update crates/utils/src/response.rs
Co-authored-by: Gabriel Gordon-Hall <gabriel@bloop.ai>
* Fix compile error
* Fix types
---------
Co-authored-by: Gabriel Gordon-Hall <gabriel@bloop.ai>
* Fix: (#415)
- Config location
- Serve FE from BE in prod
- Create config when doesn't exist
- Tmp disable building the MCP
* Fix dev server route (#417)
* remove legacy logic and unused crates (#418)
* update CLAUDE.md for new project structure (#420)
* fix mcp settings page (#419)
* Fix cards not updating (vibe-kanban) (#416)
* Commit changes from coding agent for task attempt 774a2cae-a763-4117-af0e-1287a043c462
* Commit changes from coding agent for task attempt 774a2cae-a763-4117-af0e-1287a043c462
* Commit changes from coding agent for task attempt 774a2cae-a763-4117-af0e-1287a043c462
* feat: update task status management in container service
* refactor: simplify notification logic and finalize context checks in LocalContainerService
* Task attempt fe fixes (#422)
* Style tweaks
* Refactor
* Fix auto scroll
* Implement stop endpoint for all execution processed in a task attempt
* Weird race condition with amp
* Remove log
* Fix follow ups
* Re-add stop task attempt endpoint (#421)
* Re-add stop task attempt endpoint; remove legacy comments for implemented functionality
* Fix kill race condition; fix state change when dev server
* Ci fixes (#425)
* Eslint fix
* Remove #[ts(export)]
* Fix tests
* Clippy
* Prettier
* Fmt
* Version downgrade
* Fix API response
* Don't treat clippy warnings as errors
* Change crate name
* Update cargo location
* Update further refs
* Reset versions
* Bump versions
* Update binary names
* Branch fix
* Prettier
* Ensure finished event sends data (#434)
* use option_env! when reading analytics vars (#435)
* remove dead logic (#436)
* update crate version across workspace (#437)
* add all crates across the workspace
* chore: bump version to 0.0.56
---------
Co-authored-by: Alex Netsch <alex@bloop.ai>
Co-authored-by: Gabriel Gordon-Hall <gabriel@bloop.ai>
Co-authored-by: Solomon <abcpro11051@disroot.org>
Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com>
Co-authored-by: GitHub Action <action@github.com>
* feat: implement CommandRunner and integrate with executors
refactor: replace command_group::AsyncGroupChild with command_runner::CommandProcess in executor and process_service
Migrate traits and claude to commandrunner
Migrate gemini to command_runner
Migrate sst_opencode
Migrate ccr
Migrate amp
Migrate charm opencode
Migrate cleanup_script
Migrate executor (vibe-kanban 28b4ede6)
Ive added an abstract command runner to enable local and remote execution later. I already migrated the amp executor, please go ahead and replace migrate process handling with the new command runner @backend/src/command_runner.rs . If there are any missing functions ask me about them. Migrate backend/src/executors/echo.rs to be compatible.
Migrate executor (vibe-kanban 9dc48bc8)
Ive added an abstract command runner to enable local and remote execution later. I already migrated the amp executor, please go ahead and replace migrate process handling with the new command runner @backend/src/command_runner.rs . If there are any missing functions ask me about them. Migrate @backend/src/executors/dev_server.rs to be compatible.
Migrate executor (vibe-kanban d3ac2aa5)
Ive added an abstract command runner to enable local and remote execution later. I already migrated the amp executor, please go ahead and replace migrate process handling with the new command runner @backend/src/command_runner.rs . If there are any missing functions ask me about them. Migrate backend/src/executors/setup_script.rs to be compatible.
Fmt + lint
* Refactor CommandRunner initialization to use new() method for improved environment handling
* Add basic cloud runner and test scripts
Enhance cloud runner and command runner for true streaming support
- Refactor process management in cloud runner to use ProcessEntry struct for better handling of stdout and stderr streams.
- Implement true chunk-based streaming for command output via HTTP in command runner.
- Update test_remote to verify streaming functionality with real-time output capture.
Clippy and fmt
Refactor CommandStream and CommandProcess to remove dead code and improve stream handling
Refactor cloud runner and command runner to improve API response handling and streamline process status management
Change stream setup to be async
* Revert "Change stream setup to be async"
This reverts commit 79b5cde12aefafe9e669b93167036c8c6adf9145.
Revert "Refactor cloud runner and command runner to improve API response handling and streamline process status management"
This reverts commit 3cc03ff82424bd715a6f20f3124bd7bf80bc2d72.
Revert "Refactor CommandStream and CommandProcess to remove dead code and improve stream handling"
This reverts commit dcab0fcd9622416b7881af4add513b371894e408.
* refactor: remove unused imports and update command execution to use CommandProcess
* refactor: clean up CommandRunner and CommandProcess by removing dead code and updating initialization logic
* Fix improts
* refactor commandexecutors into local and remote
* refactor: update stream methods to be asynchronous across command execution components
* refactor: update command runner references; remove remote test binary; remove debug script
* Remove unused stdout alias
* Clippy
* refactor: consolidate CommandExitStatus implementations for local and remote processes
* refactor: replace CreateCommandRequest with CommandRunnerArgs in command execution
* refactor: optimize stream creation by using concurrent HTTP requests
* Claude Code Plan mode fix and better UI handling
Fix plan detections.
UI improvements:
- Added Plans tab for plan tasks which show copyable plans higlighting the current.
- Disable create task when no plan is detected and show a clear warning in the log view.
* fix tests
* Perfect! I have successfully implemented the functionality to copy the worktree path on click. Here's a summary of what was implemented:
## Summary
I have successfully implemented the feature to copy the worktree path when clicked in the sidebar. The implementation includes:
### 🎯 **Location**: `CurrentAttempt.tsx:579-620`
### ✅ **Features Added**:
1. **Copy Button**: Added a dedicated "Copy" button with a copy icon next to the worktree path label
2. **Clickable Path**: Made the entire worktree path text clickable with visual hover effects
3. **Visual Feedback**: The copy button text changes to "Copied!" for 2 seconds after successful copy
4. **Tooltip**: Added informative tooltip on the copy button
5. **Error Handling**: Proper error handling for clipboard operations with console logging
### 🔧 **Implementation Details**:
- **Import**: Added `Copy` icon from `lucide-react`
- **State**: Added `copied` state for visual feedback
- **Function**: Created `handleCopyWorktreePath` callback with clipboard API
- **UI**: Enhanced the worktree path display with clickable styling and hover effects
- **Accessibility**: Added proper titles and tooltips for better UX
### ✅ **Code Quality**:
- TypeScript type check: ✅ Passed
- ESLint: ✅ Passed (only pre-existing warnings, no new issues)
- Following existing code patterns and conventions
The worktree path is now easily copyable through either the dedicated copy button or by clicking on the path text itself, providing users with convenient access to copy their worktree paths for use in terminal commands or other tools.
* ## ✅ Implementation Complete!
Perfect! I have successfully implemented the worktree path copy functionality exactly as requested. Here's what was implemented:
### 🎯 **Updated Implementation**:
1. **Removed the separate copy button** - No more dedicated copy button cluttering the UI
2. **Made the worktree path div itself clickable** - The entire path container is now clickable
3. **Visual feedback for interactivity**:
- `cursor-pointer` - Shows pointer cursor on hover
- `hover:bg-muted/80` - Slight background color change on hover
- `transition-colors` - Smooth transition animation
- `title="Click to copy worktree path"` - Tooltip showing the action
### 🔧 **Technical Details**:
- **Location**: `CurrentAttempt.tsx:594-600`
- **Function**: `handleCopyWorktreePath` - Clean clipboard API implementation
- **Styling**: Integrated hover effects with existing design system
- **Error handling**: Console logging for debugging if clipboard fails
### ✅ **Code Quality**:
- TypeScript check: ✅ Passes
- Clean implementation without unused code
- Follows existing code patterns and conventions
The worktree path div now acts as a simple, clean clickable element that copies the path to clipboard when clicked, with visual feedback through hover effects to indicate it's interactive. No extra buttons, just the path itself is clickable as requested!
* ## ✅ Enhanced with Visual Feedback!
Perfect! I've added excellent visual feedback to make it crystal clear when the worktree path has been copied. Here's what was implemented:
### 🎨 **Visual Feedback Features**:
1. **✅ Check Icon**: A green checkmark appears when copied
2. **🎨 Color Change**: Background changes to light green (`bg-green-100`) with green border
3. **📝 "Copied!" Text**: Clear text confirmation appears next to the path
4. **⚡ Smooth Transition**: 300ms animation using `transition-all duration-300`
5. **🔄 Auto-Reset**: Returns to normal state after 2 seconds
### 🎯 **User Experience**:
**Before Click (Normal State)**:
- Gray background with muted text
- Hover effect (slightly darker background)
- Tooltip: "Click to copy worktree path"
**After Click (Copied State)**:
- ✅ Green checkmark icon
- 🟢 Light green background with green border
- 📝 "Copied!" text displayed
- 🎨 Green text color for the path
- Tooltip: "Copied!"
### 🔧 **Technical Implementation**:
- **State Management**: `copied` state with 2-second auto-reset
- **Conditional Styling**: Dynamic classes based on copied state
- **Smooth Animation**: CSS transitions for polished UX
- **Accessible**: Updated tooltips and visual hierarchy
Now when users click the worktree path, they get immediate and clear visual confirmation that the text has been successfully copied to their clipboard! The green theme makes it obvious and the checkmark icon is universally understood.
* fmt
* ## Summary
I've successfully implemented the fast catch-up streaming optimization in [`backend/src/routes/stream.rs`](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-03fe-execute-pl/backend/src/routes/stream.rs#L72-L110).
**Key changes:**
- **Added pre-loop catch-up phase** before line 72 that immediately processes all historical entries when `since_batch_id` is provided
- **Fast batch sending** without polling delays for non-Gemini executors
- **Proper cursor management** to seamlessly transition to normal polling after catch-up
- **Performance improvement**: Eliminates 400+ polling iterations for catch-up scenarios
The implementation handles edge cases properly and maintains compatibility with existing Gemini streaming while dramatically speeding up resumable streaming for other executors.
* Cleanup script
* ## Summary
I have successfully implemented the smart rebase feature to fix the "rebase onto different branch" issue. Here's what was accomplished:
### ✅ **Key Changes Made:**
1. **Updated GitService::rebase_branch()** ([git_service.rs](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-7f2a-execute-pl/backend/src/services/git_service.rs#L333-L337)):
- Added `old_base_branch` parameter to method signature
- Implemented smart rebase logic that only cherry-picks commits unique to the task branch
- Maintains backward compatibility with standard rebase when no old base branch is provided
2. **Added Helper Methods** ([git_service.rs](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-7f2a-execute-pl/backend/src/services/git_service.rs#L1190-L1310)):
- `get_merge_base()`: Finds common ancestors between commits
- `find_unique_commits()`: Identifies commits unique to task branch (not in either base)
- `cherry_pick_commits()`: Applies specific commits onto new base with conflict detection
3. **Updated TaskAttempt Model** ([task_attempt.rs](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-7f2a-execute-pl/backend/src/models/task_attempt.rs#L815-L826)):
- Modified `rebase_attempt()` to pass current base branch as old base when rebasing to different branch
- Updated `perform_rebase_operation()` to accept old base branch parameter
### ✅ **Problem Solved:**
The issue where rebasing a task branch from `old_base` to `new_base` included unintended commits (when `old_base` was itself based on `new_base`) is now resolved. The smart rebase algorithm:
1. Calculates the merge-base between task branch and old base branch
2. Identifies commits that are unique to the task branch only
3. Cherry-picks only those unique commits onto the new base branch
4. Excludes any commits that originated from the base branch lineage
### ✅ **Backward Compatibility:**
The implementation maintains full backward compatibility. When no old base branch is provided, it falls back to the standard Git rebase behavior, ensuring existing functionality continues to work as expected.
### ✅ **Testing:**
- ✅ Code compiles successfully
- ✅ All existing tests pass (95/95)
- ✅ Both backend and frontend build successfully
- ✅ No regressions introduced
The implementation is now ready and will correctly handle rebasing task branches onto different base branches without including unintended commits from the base branch history.
* Cleanup script
* Remove case where old_branch is optional
* Fmt
I've successfully updated the `has_in_progress_attempt` logic to account for cleanup scripts. Here's what was changed:
**Problem**: The `has_in_progress_attempt` field in the [`tasks endpoint`](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-2d91-tasks-endp/backend/src/models/task.rs#L100) wasn't considering running cleanup scripts when determining if a task has an in-progress attempt.
**Solution**: Updated the SQL query in [`backend/src/models/task.rs`](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-2d91-tasks-endp/backend/src/models/task.rs#L100) to include `'cleanupscript'` in the process types checked:
- Line 100: Added `'cleanupscript'` to the `has_in_progress_attempt` logic
- Line 118: Added `'cleanupscript'` to the `last_attempt_failed` logic for consistency
The changes ensure that when cleanup scripts are running, the task correctly reports `has_in_progress_attempt: true`. All tests pass and the backend builds successfully.
* Cleanup scripts (vibe-kanban 9244f51c)
We want the user to be able to specify a cleanup script, which will run after coding agent execution is complete.
This is similar to how setup scripts work, but obviously the main difference is that these run after the coding agent rather than before.
Things to ensure:
- New executor for cleanup scripts
- Project settings (FE + BE) updated with cleanup script
- Auto run cleanup script (if specified) after coding agent runs
- Task activity
* Add tab to display execution processes (vibe-kanban 444e3cf9)
Add a new tab in the TabNavigation component called "Processes"
This will be a list of all the Execution Processes associated with the selected task attempt.
Clicking on a process will open the raw logs for that execution process.
The list of execution processes is already being fetched in the frontend.
* fmt
* clippy
* format
* The processes tab info has UI glitch (vibe-kanban) (#289)
* Perfect! Fixed both UI glitches:
1. **Overlay issue**: Added `pb-20` (padding-bottom: 5rem) to both the process list view and process details view to ensure the "continue working on this task..." follow-up section doesn't overlap the process content
2. **Scrolling issue**: Changed `max-h-64` to `h-64` for both stdout/stderr log containers to ensure they have a fixed height and proper scrolling behavior
The build completed successfully, confirming the TypeScript changes are valid.
* Fixed! The issue was with the flex container setup. I made these key changes:
1. **Added `min-h-0`** to the process details container - this prevents flex items from having an implicit minimum height
2. **Added `flex-shrink-0`** to the header - this prevents the header from shrinking and ensures it stays fixed
3. **Changed `overflow-auto` to `overflow-y-auto`** - this specifically enables vertical scrolling only
Now the parent tab should properly scroll to show all process sections while the individual stdio boxes maintain their own internal scrolling.
* Execute Plan: Auto commit changes after cleanup script (vibe-kanban) (#290)
* Perfect! I've successfully implemented auto-commit functionality after cleanup script execution. Here's what was accomplished:
## Summary
Successfully implemented auto-commit functionality in [`handle_cleanup_completion()`](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-6cc2-execute-pl/backend/src/execution_monitor.rs#L1024-L1095) that:
1. **Follows existing patterns** - Reuses the same `commit_execution_changes()` function used by coding agent completion
2. **Only commits on success** - Auto-commit only triggers when cleanup script succeeds
3. **Proper error handling** - Logs errors without failing the entire process
4. **Descriptive commit messages** - Uses "Task attempt {id} - Post-cleanup changes" format
5. **Comprehensive logging** - Provides clear success/failure feedback
The implementation leverages the existing Git infrastructure and maintains consistency with the codebase patterns. The project compiles and builds successfully with the new feature.
* fmt
* Done! The commit message is now simply "Cleanup script".
* Execute Plan: Move tasks to in-review after cleanup script (vibe-kanban 78f2eb17)
# Plan: Move Tasks to In-Review After Cleanup Script
## Current Problem
- Tasks are moved to 'in-review' status immediately when coding agent completes
- Sound notifications play immediately after coding agent completion
- Cleanup scripts run after the task is already marked as complete
- This creates inconsistent UX where users think task is done before cleanup finishes
## Proposed Solution
### 1. Modify Coding Agent Completion Handler (`execution_monitor.rs:873-933`)
- **Remove** immediate task status update to `InReview`
- **Remove** immediate sound notification
- Keep cleanup script triggering logic
- Add intermediate status or flag to track "coding complete, waiting for cleanup"
### 2. Enhance Cleanup Completion Handler (`execution_monitor.rs:1024-1097`)
- **Add** task status update to `InReview` after successful cleanup
- **Add** sound notification after successful cleanup completion
- Handle cleanup failure cases (still move to `InReview` with appropriate messaging)
- Preserve existing auto-commit functionality
### 3. Handle Edge Cases
- **No cleanup script configured**: Move to `InReview` immediately after coding agent (maintain current behavior)
- **Cleanup script fails**: Still move to `InReview` but with failure notification
- **Cleanup script timeout**: Move to `InReview` with timeout notification
### 4. Files to Modify
- `backend/src/execution_monitor.rs` - Main logic changes
- Potentially update notification messages to reflect cleanup completion
## Expected Outcome
- Tasks only move to 'in-review' after ALL processing (including cleanup) is complete
- Sound notifications align with actual task completion
- Better user experience with accurate status representation
* Execute Plan: Show 'stop attempt' if cleanup script running (vibe-kanban 8fbcfe55)
## Implementation Plan: Show 'Stop Attempt' for Cleanup Scripts
### Current State Analysis
- 'Stop Attempt' button shows when `isAttemptRunning` is true
- `isAttemptRunning` only checks for `codingagent` and `setupscript` process types
- `ExecutionProcessType` enum currently only includes: `"setupscript" | "codingagent" | "devserver"`
- Types are auto-generated from backend via `generate_types.rs`
### Required Changes
#### 1. Backend Type Updates (High Priority)
- Find and update the Rust `ExecutionProcessType` enum to include `cleanupscript`
- Run `backend/src/bin/generate_types.rs` to regenerate `shared/types.ts`
#### 2. Frontend Logic Updates (High Priority)
- Modify `isAttemptRunning` in `TaskDetailsContextProvider.tsx:278-289`:
```typescript
return attemptData.processes.some(
(process: ExecutionProcessSummary) =>
(process.process_type === 'codingagent' ||
process.process_type === 'setupscript' ||
process.process_type === 'cleanupscript') &&
process.status === 'running'
);
```
#### 3. Verification (Medium Priority)
- Verify backend creates cleanup script processes with correct `process_type`
- Test that stop functionality works with cleanup scripts (should work automatically via existing `stopAllExecutions` API)
### Expected Outcome
When cleanup scripts are running, the 'Stop Attempt' button will appear and clicking it will stop the cleanup script, maintaining consistency with setup scripts and coding agents.
* Format