Commit Graph

26 Commits

Author SHA1 Message Date
Gabriel Gordon-Hall
4c5be4e807 feat: one click installation for popular MCP servers (#657)
* backend configuration

* frontend

* fmt

* adapt remote config

* lock

* opencode adapter
2025-09-10 10:39:45 +01:00
Alex Netsch
afd3674d30 Show branch selector in create new task (vibe-kanban) (#637)
* Perfect! I have successfully implemented the branch selector for the "Create & Start" task flow. Let me provide a summary of what was implemented:

1. **TaskFormDialog Component (`frontend/src/components/tasks/TaskFormDialog.tsx`)**:
   - Added imports for `projectsApi` and `GitBranch` type
   - Added state management for branches and selected branch
   - Enhanced the template/branches fetch logic to also load project branches
   - Added a branch selector dropdown that appears only for "Create & Start" mode
   - Updated the `onCreateAndStartTask` interface to accept optional `baseBranch` parameter
   - Added branch reset logic when form is cleared

2. **TaskFormDialogContainer (`frontend/src/components/tasks/TaskFormDialogContainer.tsx`)**:
   - Updated `handleCreateAndStartTask` to accept and forward the `baseBranch` parameter
   - Modified the mutation data to include `base_branch` field

1. **CreateTask Model (`crates/db/src/models/task.rs`)**:
   - Added `base_branch: Option<String>` field to the `CreateTask` struct

2. **Create-and-Start Endpoint (`crates/server/src/routes/tasks.rs`)**:
   - Modified `create_task_and_start` function to use the provided `base_branch` from payload
   - Added fallback logic to current branch when no base_branch is specified
   - Updated the TaskAttempt creation to use the selected base branch

3. **MCP Task Server (`crates/server/src/mcp/task_server.rs`)**:
   - Updated CreateTask construction to include `base_branch: None` field

4. **Type Generation**:
   - Regenerated TypeScript types to include the new `base_branch` field in `CreateTask`

- **Branch selector appears only for "Create & Start"** - keeps UI clean and contextual
- **Smart defaults** - automatically selects current branch, then falls back to main/master
- **Visual indicators** - shows "(current)" next to the current branch in the dropdown
- **Proper state management** - branch selection is reset when form is cleared
- **Backward compatibility** - existing functionality works unchanged

The implementation follows the existing patterns in the codebase and provides a seamless way for users to select which branch they want to base their task work on when using the "Create & Start" workflow.

Perfect! I can see your approach now. You've created a much cleaner separation of concerns by:

1. **Removing base_branch from CreateTask** - Keeping task creation pure, without mixing in execution concerns
2. **Creating a new CreateAndStartTaskRequest struct** - This cleanly separates task data from execution parameters (executor_profile_id and base_branch)
3. **Modified the create-and-start endpoint** - To use the new request structure

This is a much better design because it maintains clear boundaries between task creation and task execution. Let me examine what still needs to be completed:

Perfect! Everything compiles successfully. Let me do a final check of the implementation by reviewing what we've accomplished:

Using your excellent design approach, I've successfully completed the branch selector implementation:

1. **`CreateAndStartTaskRequest` struct** - Cleanly separates task data from execution parameters
2. **Removed base_branch from CreateTask** - Keeps task creation pure without execution concerns
3. **Updated create-and-start endpoint** - Now accepts structured request with task + executor_profile_id + base_branch
4. **TypeScript types generated** - All new types properly exported to frontend

1. **Updated `tasksApi.createAndStart`** - Now accepts `CreateAndStartTaskRequest` format
2. **Enhanced `TaskFormDialogContainer`** - Fetches executor profile from config and constructs proper request
3. **Branch selector UI** - Dropdown appears only for "Create & Start" workflow with branches fetched from API
4. **Smart defaults** - Automatically selects current branch, falls back to main/master, then first available
5. **State management** - Proper branch state handling and form reset logic
6. **Visual indicators** - Shows "(current)" next to the current branch in dropdown

- **Contextual UI**: Branch selector only appears for "Create & Start" - keeps interface clean
- **Smart defaults**: Automatically selects the most appropriate branch
- **Validation**: Won't submit without a selected branch and executor profile
- **Error handling**: Graceful handling when config or branches aren't available
- **State consistency**: Form resets properly including branch selection

- **Clean separation**: Task creation vs task execution parameters are properly separated
- **Type safety**: Strong typing with the structured request format
- **Extensible**: Easy to add executor profile selection to UI later
- **Maintainable**: Clear API contracts and no mixed concerns

The implementation is complete and follows your clean architecture pattern. Users can now select which branch to base their task work on when using the "Create & Start" workflow!

Perfect!  **Done!**

The fix was simple and clean:

**Removed:**
```typescript
const mainBranch = projectBranches.find(b => b.name === 'main' || b.name === 'master');
const defaultBranch = currentBranch || mainBranch || projectBranches[0];
```

**Replaced with:**
```typescript
const defaultBranch = currentBranch || projectBranches[0];
```

Now the branch selector:
- **Uses the current branch as default** (most logical choice)
- **Falls back to first available branch** if no current branch
- **No hardcoded assumptions** about branch names
- **Works with any Git repository** regardless of default branch naming conventions

The implementation is complete and follows the principle of using sensible defaults without hardcoding specific branch names!

* Great! The TaskFormDialog linting issues are now fixed. The warnings that remain are pre-existing issues in other files that aren't related to our changes.

 **CI Issues Fixed:**

**Frontend:**
-  **Formatting**: `npm run format` completed successfully
-  **Linting**: Fixed the two dependency warnings in TaskFormDialog and the `any` type in TaskFormDialogContainer
-  **Our code**: No new linting issues in the code we changed

**Backend:**
-  **Clippy**: `cargo clippy --all --all-targets -- -D warnings` passes
-  **Reverted git.rs**: As requested, didn't fix unrelated Rust issues

The implementation is ready! The Quickstart section now:

1.  **Uses established patterns**: `useUserSystem()` hook like other components
2.  **Pre-selects config defaults**: Executor profile auto-selected from user config
3.  **Clean architecture**: No duplication, follows TaskDetailsToolbar pattern
4.  **Passes CI checks**: All linting and formatting requirements met

The branch selector with executor profile selection is complete and ready to use!

* - **Rust Clippy**: `cargo clippy --all --all-targets -- -D warnings`  PASSED
- **Frontend Format**: `npm run format`  PASSED (files formatted)
- **Frontend Lint**: `npm run lint`  PASSED (96 warnings are pre-existing, 0 errors)

**1. Updated `useTaskMutations.ts`:**
- Changed `createAndStart` mutation to expect `CreateAndStartTaskRequest`
- Added proper TypeScript types for all mutations
- Maintains compatibility with Nice Modal architecture

**2. Enhanced `TaskFormDialog.tsx`:**
-  **Imports**: Added `projectsApi`, `GitBranch`, `ExecutorProfileId`, `useUserSystem`
-  **State Management**: Added branch, executor profile, and quickstart expansion state
-  **Data Fetching**: Enhanced template useEffect to also fetch branches
-  **Default Selection**: Pre-selects current branch and user's config executor profile
-  **Quickstart Section**: Complete UI with executor profile, variant, and branch dropdowns
-  **Request Format**: Updated `handleCreateAndStart` to use `CreateAndStartTaskRequest`
-  **Form Reset**: Properly resets all quickstart selections

```typescript
🚀 Quickstart ▼
   Configuration for "Create & Start" workflow

   Executor Profile: [CLAUDE_CODE ▼]     ← Pre-selected from config
   Variant:         [DEFAULT ▼]         ← Pre-selected from config
   Branch:          [main (current) ▼]   ← Pre-selected current branch
```

**Available Options:**
- **Executors**: CLAUDE_CODE, GEMINI, AMP, CODEX, OPENCODE, CURSOR, QWEN_CODE
- **Variants**: DEFAULT, PLAN, ROUTER (CLAUDE_CODE), FLASH (GEMINI), etc.
- **Branches**: All project branches with current branch indicator

**🚀 Zero-Click Ready:**
- All defaults intelligently pre-selected from user config and Git state
- User can immediately click "Create & Start" with sensible defaults
- No confusion about branch selection - clearly part of "Create & Start" workflow

**⚙️ Power User Friendly:**
- Full customization of executor profile, variant, and branch
- Collapsible section keeps UI clean when not needed
- Follows established patterns from other components

**🏗️ Clean Architecture:**
- Uses `useUserSystem` hook like other components (no duplication)
- Proper separation between task creation and execution parameters
- Works seamlessly with Nice Modal pattern introduced in rebase

The branch selector functionality has been fully restored and enhanced, adapted to work perfectly with the new Nice Modal architecture while maintaining all the benefits of the original implementation!

* Make settings reusable (vibe-kanban a8e9fe1d)

In the last few commits we implemented a branch selector for new tasks.
we need to
- Check if there already is a reusable branch selector
- Make the whole settings thing reusable

* Fmt

* Fix wrong prop

* Update frontend/src/components/dialogs/tasks/TaskFormDialog.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* ts-rs types

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-09 20:37:21 +01:00
Louis Knight-Webb
3c05db3c49 UI form builder for editing executor config (#619)
* ## 🎉 Implementation Complete!

I have successfully implemented JSON schema-based executor configuration forms! Here's what was accomplished:

### ** Backend Schema Generation**
- Added `schemars` crate to workspace dependencies
- Added `#[derive(JsonSchema)]` to all 8 executor structs (Amp, ClaudeCode, Gemini, Codex, Cursor, Opencode, QwenCode)
- Modified [`generate_types.rs`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/vk-4b73-use-the-sc/crates/server/src/bin/generate_types.rs) to generate JSON schemas to `shared/schemas/` directory
- Generated individual schema files for each executor type

### ** Frontend Form System**
- Added `@rjsf/core`, `@rjsf/utils`, and `@rjsf/validator-ajv8` packages
- Created [`ExecutorConfigForm`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/vk-4b73-use-the-sc/frontend/src/components/ExecutorConfigForm.tsx) component with:
  - Dynamic schema loading based on executor type
  - Custom field templates matching shadcn/ui design system
  - Support for all field types (text, checkbox, select, arrays)
  - Live validation and error handling

### ** Enhanced Settings UI**
- Updated [`Settings.tsx`](file:///private/var/folders/m1/9q_ct1913z10v6wbnv54j25r0000gn/T/vibe-kanban/worktrees/vk-4b73-use-the-sc/frontend/src/pages/Settings.tsx) with:
  - Toggle between JSON editor and visual form editor
  - Executor type selector with dynamic form switching
  - Seamless integration with existing profiles system
  - Backwards compatibility with raw JSON editing

### ** Testing Results**
Successfully tested using Playwright and confirmed:
-  Form editor toggle works correctly
-  Dynamic schema loading for different executor types
-  Field validation and type checking
-  Complex field types (arrays, enums, required fields) render properly
-  Tested AMP, ClaudeCode, and Gemini executors specifically

### **Key Features Delivered**
1. **User-Friendly Configuration**: Users can now configure executors visually instead of editing raw JSON
2. **Type Safety**: Generated schemas ensure configuration validity
3. **Dynamic Forms**: Each executor type shows only relevant fields
4. **Backwards Compatibility**: Users can still switch back to JSON mode
5. **Professional UI**: Custom templates match the existing design system
6. **Extensible**: Adding new executor types automatically generates forms

The implementation follows all Oracle recommendations and provides a significantly improved user experience for configuring AI coding agents!

* Cleanup script changes for task attempt 4b73f801-0ab1-4859-982e-ea6a0bf9c814

* ## 🚀 **Implementation Complete with Profile Selection!**

Your question was perfectly answered! The new implementation now provides:

### ** Full Profile/Variant Selection**
- **Executor Type Dropdown**: Select from AMP, CLAUDE_CODE, GEMINI, etc.
- **Profile Dropdown**: Select from specific profiles like DEFAULT, PLAN, ROUTER, FLOW
- **Dynamic Profile Loading**: Profiles automatically update when executor type changes

### ** Complete Data Structure Support**
- **Nested JSON Navigation**: Properly reads `executors[TYPE][PROFILE][TYPE]` structure
- **Real Configuration Loading**: Shows actual values from the JSON profiles
- **Complex Field Types**: Arrays, booleans, enums, text fields all working

### ** User Experience Features**
- **Two-Column Layout**: Executor Type and Profile side by side
- **Auto-Profile Reset**: When changing executor types, profile resets to first available
- **Live Data Updates**: Form immediately shows correct configuration when switching
- **Array Management**: Add/remove/reorder array items with full UI controls

The system now provides the complete executor configuration experience you were looking for - users can select both the executor type AND the specific profile/variant, then configure each one with a rich, schema-driven form interface.

* Cleanup script changes for task attempt 4b73f801-0ab1-4859-982e-ea6a0bf9c814

* improvements

* append_prompt

* generate forms

* order

* settings

* amp MCP config update

* form styles

* textarea

* style additional params

* validate

* menu styles

* prevent reload

* fmt

* add and delete configurations

* lint

* fmnt

* clippy

* prettier

* copy

* remove old MCP

* Auto detect schemas on FE

* wipe shared before generation

* fmt

* clippy fmt

* fixes

* fmt

* update shared types check

* disable clippy for large enum

* copy

* tweaks

* fmt

* fmt
2025-09-04 20:46:26 +01:00
Louis Knight-Webb
9e286b61e5 Overhaul UI (#577)
* font

* flat ui

* burger menu

* button styles

* drag effects

* search

* Improve

* navbar

* task details header WIP

* task attempt window actions

* task details

* split out title description component

* follow up

* better board spacing

* Incrementally use tanstack (vibe-kanban 0c34261d)

Let's refactor the codebase to remove:
@frontend/src/components/context/TaskDetailsContextProvider.tsx
@frontend/src/components/context/TaskDetailsContextProvider.ts

Instead, we want to use @tanstack/react-query

* task attempt header info

* ui for dropdown

* optionally disable

* Create hook for attempt actions (vibe-kanban 651551d9)

- Start dev server
- Rebase
- Create PR
- Merge

These should all be hooks, similar to frontend/src/hooks/useOpenInEditor.ts

Their usage in two places should be standardised:
- frontend/src/components/tasks/AttemptHeaderCard.tsx
- frontend/src/components/tasks/Toolbar/CurrentAttempt.tsx

* dropdown positioning

* color

* soften colours

* add new task button

* editor dialog via hook

* project provider

* fmt

* lint

* follow up styling

* break words

* card styles

* Stop executions from follow up (vibe-kanban e2a2c75b)

The follow up section currently disables the 'send' button if a task attempt is running, however instead we should show a destructive 'stop' button which will perform the same functionality as 'stop attempt'

frontend/src/components/tasks/TaskFollowUpSection.tsx

You can see how we stop already in frontend/src/components/tasks/Toolbar/CurrentAttempt.tsx

Maybe we could make this a hook and use tanstack similar to frontend/src/hooks/useBranchStatus.ts

What about making the hook more generic, to cover start/stop and status retrieval.

We should also combine the hook frontend/src/hooks/useExecutionProcesses.ts

* Make sure the kanban columns are always at least full height (vibe-kanban 220cb780)

There can be whitespace underneath the columns, ideally there should be no whitespace - the columns should extend to the bottom of the page, even when there aren't enough tasks to fill it up all the way ![Screenshot 2025-08-27 at 14.42.41.png](.vibe-images/11efe690-ec72-4513-a7b6-49641ff170c4.png)

frontend/src/pages/project-tasks.tsx

* Display diff summary (vibe-kanban f1736551)

If files have been changed, we should display a summary of the changes like "6 files changed, +21 -19" in the AttemptHeaderCard, to the right of the dropdown, similar to how we do at the top of the difftab.

We should also add an icon button to open the task attempt in full screen and at the diff tab.

frontend/src/components/tasks/AttemptHeaderCard.tsx
frontend/src/components/tasks/TaskDetails/DiffTab.tsx

* styles

* projects

* full screen max width

* full screen actions

* remove log

* style improve

* create new attempt

* darkmode

* scroll diffs

* Refactor useCreatePR (vibe-kanban e6b76f10)

The useCreatePR hook should function similarly to useOpenInEditor, in that the the popup should be rendered in some root node. This improves the reusability of this functionality.

We should then update TaskDetailsPanel to make the 'create pr' button real.

frontend/src/hooks/useOpenInEditor.ts
frontend/src/hooks/useCreatePR.ts
frontend/src/components/tasks/TaskDetailsPanel.tsx

* Rebasing should cause branch status to refresh (vibe-kanban 3da4fe0f)

Currently doesn't in frontend/src/components/tasks/TaskDetailsPanel.tsx

* project name

* Change ?view=full to /full (vibe-kanban a25483a6)

* Hide TaskDetailsHeader (vibe-kanban b73697bd)

If the app is running inside of VS Code

* copy

* Add button to open repo (vibe-kanban e447df94)

Open repo in IDE button in the navbar, next to create task button

* style process cards

* Errors not displayed properly (vibe-kanban fb65eb03)

frontend/src/components/tasks/TaskDetailsToolbar.tsx

Errors are currently failing silently on actions like merge and rebase

* fmt

* fix

* fix border
2025-08-27 23:59:26 +01:00
Gabriel Gordon-Hall
37e401fb0f feat: full screen task attempt view (#553)
* full screen task attempt view

* fix tsc errors

* remove padding

* Full screen view improvements (#568)

* delete FullscreenHeaderContext.tsx

* add fullscreen responsive layout

* full screen props

* cleanup fullscreen

* fmt

* task status

* task actions

* simplify toolbar

* reset CurrentAttempt

* buttons

* Truncate properly branch name

* fmt

* polish

* fmt

---------

Co-authored-by: Louis Knight-Webb <louis@bloop.ai>
2025-08-23 09:39:42 -07:00
Alex Netsch
ed594a3d80 Allow multiple merges (#510)
* Allow multiple merge for a single task attempt

Merge more than once (vibe-kanban 618829fc)

When creating a PR, new changes can be pushed after creation.
We need merge to work the same way, when changes have been made after the first merge, a second one should work.

Commit changes from coding agent for task attempt 548ff450-df77-47b2-a5ba-c88d0aa4a334

Merge more than once (vibe-kanban 618829fc)

When creating a PR, new changes can be pushed after creation.
We need merge to work the same way, when changes have been made after the first merge, a second one should work.

Remove pinned todo list (vibe-kanban cc66cda2)

Make a minimal change to remove the pinned todo list from the frontend

Remove pinned todo list (vibe-kanban cc66cda2)

Make a minimal change to remove the pinned todo list from the frontend

* Create merges table; remove task_attempt.merge_commit

Add merge model, replace ta.merge_commit with m.merge_commit

Fix frontend

* Move PR to merges table

* Refactor GitHub repository info retrieval to return structured data

* Fix frontend

* Reset task branch after PR merge

Add branch status handling to TaskDetailsProvider and related components

fmt

Add branch status handling to TaskDetailsProvider and related components

fmt

Test (vibe-kanban 1bf1a80f)

add test.txt

Show merged diff when no worktree present

Refresh branch status after PR creation

Test (vibe-kanban 1bf1a80f)

add test.txt

Test (vibe-kanban 1bf1a80f)

add test.txt

Show rebase when behind

Refactor container service to check if the container is clean before showing merged diff; remove unused BranchStatus import

Test (vibe-kanban a3c1b297)

add test.txt

Refactor branch status handling: rename BranchStatusResponse to BranchStatus and update related types and usages

Test (vibe-kanban) (#540)

* Remove test.txt

* Test (vibe-kanban aade357e)

add test.txt

* test.txt removed.

* Fix diff when merged and new commits have been made

* Remvoe logging (vibe-kanban) (#541)

* Test (vibe-kanban aade357e)

add test.txt

* Test (vibe-kanban aade357e)

add test.txt

* Perfect! I've successfully removed the "Fetching branch status" logging statement from the code. The logging has been removed from `crates/server/src/routes/task_attempts.rs:568-571`.

* Clear previous errors on successful PR creation, push, merge, and rebase actions

* Show branch in worktree dirty error message

* Add success indicators for push and merge actions in CurrentAttempt

* Refactor status display logic in CurrentAttempt for improved readability and maintainability

* Add target_branch_name to merge models and queries for direct and PR merges

* Enhance merge status display logic in CurrentAttempt for better clarity on direct merges

* Remove unnecessary condition check in attempt data fetching interval

* Clippy

* Add index for task_attempt_id in merges table to improve query performance

* Pass PR creation error

* Disable buttons (vibe-kanban 240346bf)

Instead of not showing the merge/pr buttons when theyre not available we should disable them. frontend/src/components/tasks/Toolbar/CurrentAttempt.tsx
2025-08-21 16:00:35 +01:00
Louis Knight-Webb
b868d1917e Raw logs should render ANSI (vibe-kanban) (#520)
* Perfect! Let me summarize what has been successfully implemented:

##  Implementation Complete

I've successfully implemented a **unified log rendering architecture** with ANSI support across the entire application:

### 🎯 What Was Accomplished

1. ** Added `fancy-ansi` dependency** - React 18 compatible ANSI rendering library
2. ** Created `RawLogText` component** - Single, unified component for all raw log rendering
3. ** Added ANSI color CSS classes** - Consistent theming with Tailwind classes
4. ** Refactored all log rendering components**:
   - **StdoutEntry.tsx** - Now uses RawLogText with `channel="stdout"`
   - **StderrEntry.tsx** - Now uses RawLogText with `channel="stderr"`  
   - **ProcessLogsViewer.tsx** - Replaced `formatLogLine()` with RawLogText
   - **ProcessCard.tsx** - Updated raw log display to use RawLogText
5. ** Added comprehensive tests** - Unit tests for the RawLogText component
6. ** Verified build success** - All TypeScript checks pass

### 🌟 Key Features

- **ANSI Escape Code Rendering**: Raw logs like `[0m[1][0m   [32m[1mVITE[22m v5.4.19[39m` now render with proper colors
- **Smart STDERR Handling**: Only applies red fallback color when no ANSI codes are present
- **Flexible HTML Elements**: Supports both `<div>` and `<span>` rendering
- **Performance Optimized**: Uses `memo()` and efficient ANSI detection
- **Consistent Styling**: Single source of truth for all log rendering with proper whitespace preservation

### 📁 Files Modified

- `frontend/package.json` - Added `fancy-ansi` dependency
- `frontend/src/components/common/RawLogText.tsx` - **New unified component**
- `frontend/src/styles/index.css` - Added ANSI color CSS classes
- `frontend/src/components/logs/StdoutEntry.tsx` - Refactored to use RawLogText
- `frontend/src/components/logs/StderrEntry.tsx` - Refactored to use RawLogText  
- `frontend/src/components/tasks/TaskDetails/ProcessLogsViewer.tsx` - Refactored to use RawLogText
- `frontend/src/components/tasks/TaskDetails/ProcessCard.tsx` - Refactored to use RawLogText
- `frontend/src/components/common/__tests__/RawLogText.test.tsx` - **New test file**

The implementation follows all the best practices identified by the Oracle and provides a robust, maintainable solution for ANSI log rendering across the entire application. Raw logs will now display with proper colors, formatting, and styling instead of showing escape codes as plain text.

* Cleanup script changes for task attempt 287442b9-2ddf-4f29-9b91-ddc18e4a96b7

* lockfile

* delete test
2025-08-19 14:19:50 +01:00
Louis Knight-Webb
88a67d8d9c Prepend and append prompt arguments to executors (vibe-kanban) (#507)
* Commit changes from coding agent for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Cleanup script changes for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Commit changes from coding agent for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Cleanup script changes for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Reverse JSON editor disable

* prompt_args_for_profiles

* Reset any frontend changes

* Remove new. UI components

* reset shared types

* Commit changes from coding agent for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Cleanup script changes for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* fmt

* lockfile
2025-08-19 10:54:53 +01:00
Louis Knight-Webb
41305215fe Use codemirror for JSON editing (vibe-kanban) (#489)
* Commit changes from coding agent for task attempt 009251c6-0595-4baf-be5f-684488a8326c

* Cleanup script changes for task attempt 009251c6-0595-4baf-be5f-684488a8326c

* Commit changes from coding agent for task attempt 009251c6-0595-4baf-be5f-684488a8326c
2025-08-15 11:56:02 +01:00
Gabriel Gordon-Hall
9b4ca9dc45 feat: edit coding agent profiles (#453)
* edit profiles.json

* move default crate configuration to a default_profiles.json

button to open mcp config in editor

initialse empty mcp config files

fix test

new JSON structure

remove editor buttons

fmt and types

* feat: add profile field to follow-up attempt (#442)

* move default crate configuration to a default_profiles.json

* new JSON structure

* feat: add profile field to follow-up attempt; fix follow ups using wrong session id at 2nd+ follow up

fmt

Profile selection (vibe-kanban cf714482)

Right now in the frontend, when viewing a task card, we show the base_coding_agent from the task attempt. We should also show the currently selected profile there in the same way

feat: add watchkill support to CommandBuilder and integrate with Claude executor

feat: refactor profile handling to use ProfileVariant across executors and requests

feat: restructure command modes in default_profiles.json for clarity and consistency

update profile handling to use ProfileVariant across components and add mode selection

fmt

feat: refactor profile handling to use variants instead of modes across components and update related structures

Fix frontend

* Refactor coding agent representation in task and task attempt models

- Changed `base_coding_agent` field to `profile` in `TaskWithAttemptStatus` and `TaskAttempt` structs.
- Updated SQL queries and data handling to reflect the new `profile` field.
- Modified related API endpoints and request/response structures to use `profile` instead of `base_coding_agent`.
- Adjusted frontend API calls and components to align with the updated data structure.
- Removed unused `BaseCodingAgent` enum and related type guards from the frontend.
- Enhanced MCP server configuration handling to utilize the new profile-based approach.

feat: Introduce MCP configuration management

- Added `McpConfig` struct for managing MCP server configurations.
- Implemented reading and writing of agent config files in JSON and TOML formats.
- Refactored MCP server handling in the `McpServers` component to utilize the new configuration structure.
- Removed deprecated `agent_config.rs` and updated related imports.
- Enhanced error handling for MCP server operations.
- Updated frontend strategies to accommodate the new MCP configuration structure.

feat: Introduce MCP configuration management

- Added `McpConfig` struct for managing MCP server configurations.
- Implemented reading and writing of agent config files in JSON and TOML formats.
- Refactored MCP server handling in the `McpServers` component to utilize the new configuration structure.
- Removed deprecated `agent_config.rs` and updated related imports.
- Enhanced error handling for MCP server operations.
- Updated frontend strategies to accommodate the new MCP configuration structure.

Best effort migration; add missing feature flag

feat: refactor execution process handling and introduce profile variant extraction

feat: add default follow-up variant handling in task details context

feat: enhance profile variant selection with dropdown menus in onboarding and task sections

fmt, types

* refactor: rename ProfileVariant to ProfileVariantLabel; Modified AgentProfile to wrap AgentProfileVariant

Fmt, clippy

* Fix rebase issues

* refactor: replace OnceLock with RwLock for AgentProfiles caching; update profile retrieval in executors and routes

---------

Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com>

Fmt

Fix tests

refactor: clean up unused imports and default implementations in executor modules

Move profiles to profiles.rs

* rename profile to profile_variant_label for readability

rename AgentProfile to ProfileConfig, AgentProfileVariant to VariantAgentConfig

* remove duplicated profile state

* Amp yolo

---------

Co-authored-by: Alex Netsch <alex@bloop.ai>
2025-08-14 17:33:33 +01:00
Louis Knight-Webb
69cda33532 Agent logs should be collapsable (vibe-kanban) (#451)
* 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>
2025-08-11 23:52:32 +01:00
Louis Knight-Webb
9130ac46fd Diff revamp (#443)
* Display agent file edits in chat history

* Update diff format

* Fix

* Fixes

* Update BE entry IDs

* Get git-diff-view working

* Style the diffs

* Fixes

* Loader

* Diff styles

* Cleanup

* Prettier

* Clippy

---------

Co-authored-by: Solomon <abcpro11051@disroot.org>
2025-08-11 15:08:35 +01:00
Louis Knight-Webb
3ed134d7d5 Deployments (#414)
* 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>
2025-08-08 13:53:27 +01:00
Gabriel Gordon-Hall
471d28defd feat: task templates (vibe-kanban) (#197)
* I've successfully implemented task templates for vibe-kanban with the following features:

- Created a new `task_templates` table with fields for:
  - `id` (UUID primary key)
  - `project_id` (nullable for global templates)
  - `title` (default task title)
  - `description` (default task description)
  - `template_name` (display name for the template)
  - Timestamps for tracking creation/updates

- Created `TaskTemplate` model with full CRUD operations
- Added REST API endpoints:
  - `GET /api/templates` - List all templates
  - `GET /api/templates/global` - List only global templates
  - `GET /api/projects/:project_id/templates` - List templates for a project (includes global)
  - `GET /api/templates/:id` - Get specific template
  - `POST /api/templates` - Create template
  - `PUT /api/templates/:id` - Update template
  - `DELETE /api/templates/:id` - Delete template

1. **Task Creation Dialog**:
   - Added template selector dropdown when creating new tasks
   - Templates are fetched based on project context
   - Selecting a template pre-fills title and description fields
   - User can edit pre-filled values before creating the task

2. **Global Settings**:
   - Added "Task Templates" section to manage global templates
   - Full CRUD interface with table view
   - Create/Edit dialog for template management

3. **Project Settings**:
   - Modified project form to use tabs when editing
   - Added "Task Templates" tab for project-specific templates
   - Same management interface as global settings

- **Scope Management**: Templates can be global (available to all projects) or project-specific
- **User Experience**: Template selection is optional and doesn't interfere with normal task creation
- **Data Validation**: Unique template names within same scope (global or per-project)
- **UI Polish**: Clean interface with loading states, error handling, and confirmation dialogs

The implementation allows users to create reusable task templates that streamline the task creation process by pre-filling common values while still allowing full editing before submission.

* improve styling

* address review comments

* fix unqiue contraint on tempaltes

* distinguish between local and global templates in UI

* keyboard shortcuts for task creation

* add dropdown on project page to select templates

* update types

* add default global task templates

* Add task templates from kanban (#219)

* Create project templates from kanban

* Fixes

* remove duplicate

---------

Co-authored-by: Louis Knight-Webb <louis@bloop.ai>
2025-07-16 15:46:42 +01:00
Solomon
6a51020fd9 Streaming support for conversation history with SSE (#167)
* Streaming support with SSE

The main focus was on Gemini-CLI token streaming, which uses the standard JSON-Patch format to stream real-time updates to the frontend visa SSE.

There is also a default database-backed SSE implementation which covers the remaining executors like Claude-code.

* minor refactorings
2025-07-16 13:31:49 +01:00
Solomon
930b8f6146 Markdown rendering for Gemini-CLI and other Assitant messages (#89)
* Cluster Gemini messages

* Render Assitant messages as markdown
2025-07-08 12:25:52 +01:00
Anastasiia Solop
597cefbf97 feat: Add Sentry (#55)
* add basic sentry integration

* add FE sourcemaps to Sentry

* add sentry release step to pre-release workflow

* add test exceptions

* update pnpm lock file

* workflow fixes

* upload rust debug files to sentry in CI

* fix action name

* fix sentry upload action args

* fix env name to match CI

* fix sentry-cli on windows

* remove test errors, format FE files

* cargo fmt

* mcp bin async fix

* update Sentry DSN to new project

* update Sentry DSN to new project
2025-07-04 11:11:45 +02:00
couscous
c315eaaa51 chore: fmt deps 2025-06-25 09:36:34 +01:00
Louis Knight-Webb
354234b70b Improve layout 2025-06-21 19:13:42 +01:00
Louis Knight-Webb
80defbddbc Task attempt 92c56515-8aa3-48e8-ad77-dfc1b0dbd0eb - Final changes 2025-06-18 08:17:18 -04:00
Louis Knight-Webb
0654a66caf Task attempt e6b58807-7976-489f-ad8b-21018be694de - Final changes 2025-06-17 21:15:43 -04:00
Louis Knight-Webb
eca26240fe Add click to component 2025-06-16 11:30:11 -04:00
Louis Knight-Webb
0041f5e92a Kanban 2025-06-14 19:02:37 -04:00
Louis Knight-Webb
b96277195f Add tasks 2025-06-14 18:44:34 -04:00
Louis Knight-Webb
ca231bd6be User management 2025-06-14 16:26:48 -04:00
Louis Knight-Webb
563994934d Init 2025-06-14 15:14:08 -04:00