Skip to content

Conversation

@elikkatz1
Copy link

Add support for Bitbucket Server (on-premise) alongside existing GitHub integration using a VCS provider abstraction layer.

New features:

  • VcsProvider trait for unified VCS operations
  • VcsProviderRegistry for auto-detection from remote URL
  • BitbucketService implementing create PR, get status, list PRs, fetch comments
  • Secure credential storage (file-based with macOS Keychain integration)
  • Bitbucket REST API v1.0 client with retry logic

The system auto-detects whether a repository uses GitHub or Bitbucket based on the remote URL and routes operations accordingly.

🤖 Generated with Claude Code

@vibe-kanban-cloud
Copy link

Review Complete

Your review story is ready!

View Story

Comment !reviewfast on this PR to re-generate the story.

elikkatz1 and others added 4 commits January 8, 2026 12:58
Add support for Bitbucket Server (on-premise) alongside existing GitHub
integration using a VCS provider abstraction layer.

New features:
- VcsProvider trait for unified VCS operations
- VcsProviderRegistry for auto-detection from remote URL
- BitbucketService implementing create PR, get status, list PRs, fetch comments
- Secure credential storage (file-based with macOS Keychain integration)
- Bitbucket REST API v1.0 client with retry logic

The system auto-detects whether a repository uses GitHub or Bitbucket
based on the remote URL and routes operations accordingly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
I want to merge from main branch and resolve conflicts
- Add missing GitHubRepoInfo import in git.rs
- Add GitHubRepoInfo::from_remote_url() method for URL parsing
- Update get_pr_status to use new single-argument update_pr_status signature
- Fix Bitbucket test to avoid TLS provider requirement

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Add extensive test coverage for:
- Bitbucket models: PR state conversion, comment conversion, serialization
- Credentials: storage, loading, saving, invalid JSON handling
- VcsProvider: URL parsing edge cases, error display, type display

41 total tests for the Bitbucket/VcsProvider functionality.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
amittai-l and others added 5 commits January 17, 2026 22:32
Add ability to import assigned Jira tickets into new tasks using Claude's
Atlassian MCP plugin. When creating a task, users can load their Jira
tickets and select one to auto-populate the title and description.

Features:
- JiraService using Claude CLI with Atlassian MCP
- GET /api/jira/my-issues endpoint
- JiraTicketSelector dropdown component
- Auto-populate task title (KEY: Summary) and description
- 30s timeout to prevent hanging
- Debounce to prevent spam clicks

Prerequisites: Claude CLI with Atlassian MCP plugin configured

Co-Authored-By: Claude Opus 4.5 <[email protected]>
I've implemented SQLite caching for Jira tickets with a 5-minute TTL. Here's what was created/modified:

### New Files

1. **Migration** (`crates/db/migrations/20260117000000_add_jira_cache.sql`):
   - Creates `jira_cache` table with `id`, `cache_key`, `data` (JSON), and `cached_at`
   - Adds indexes for fast lookup and cleanup

2. **Cache Model** (`crates/db/src/models/jira_cache.rs`):
   - `JiraCache<T>` - generic struct with TTL validation methods
   - `JiraCacheRepo` - database operations (get, set, delete, cleanup_expired, invalidate_all)
   - Uses runtime queries (not compile-time macros) for flexibility

### Modified Files

1. **`crates/db/src/models/mod.rs`** - Added `jira_cache` module export

2. **`crates/services/src/services/jira.rs`**:
   - `fetch_my_issues(pool)` now checks cache first, returns cached data if valid (<5 min old)
   - Added `refresh_my_issues(pool)` to force-refresh and bypass cache
   - Internal `fetch_from_claude_mcp()` handles the actual Claude MCP call
   - Added `CacheError` variant to `JiraError`

3. **`crates/server/src/routes/jira.rs`**:
   - Updated handler to pass `&deployment.db().pool` to service
   - Added `POST /api/jira/refresh` endpoint for forced cache refresh
   - Refactored error handling into reusable `handle_jira_result()` function

### Behavior

- **First load**: ~10s (cache miss → Claude MCP call → cache result)
- **Subsequent loads within 5 minutes**: Instant (cache hit)
- **After 5 minutes**: Cache expires, next request fetches fresh data
- **Force refresh**: `POST /api/jira/refresh` bypasses cache and fetches fresh data

All tests pass (`cargo test --workspace`).

```
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
```
The refresh button now calls POST /api/jira/refresh to bypass
the cache instead of using the cached GET endpoint.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Explains architecture, Claude MCP call details, caching system,
and design decisions for the Jira ticket selector feature.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
feat: Add Jira integration with SQLite caching
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants