Skip to content

Andrevops/Epic-Lens

Repository files navigation

Epic Lens

AI is changing how fast we ship code. A feature that used to take days now lands in hours. But velocity without visibility is chaos — tickets pile up, MRs go stale overnight, and you start the next morning wondering "what did I even ship yesterday?"

Epic Lens gives you that visibility. It pulls your Jira epics, GitLab merge requests, and GitHub pull requests into a single VS Code sidebar so you can see everything at a glance: what's in progress, what's waiting for review, what's been approved, and what's stuck. When AI helps you move fast, Epic Lens helps you stay in control.

Features

  • Sidebar tree view — Epics with collapsible child issues, standalone issues listed below
  • Merge request tracking — See all your open GitLab MRs and GitHub PRs with approval, pipeline, and conflict status
  • Provider cycling — Toggle between Both / GitLab / GitHub with a single toolbar button
  • Dashboard — Board and list views with status columns, progress bars, and stats
  • Live Jira data — Pulls real statuses, assignees, and priorities from the Jira REST API
  • Scope filter — Show only your epics (mine) or everything in the project (all)
  • Status/type filters — Filter by status category, issue type, or hide done issues
  • Keyboard shortcuts — Chord-based shortcuts with Alt+E as the leader key
  • Click to open — Click any issue, epic, or MR to open it directly in the browser
  • Auto-refresh — Periodic re-fetch of epics and MRs on a configurable interval (default 5 min)
  • Stale MR highlighting — MRs older than a configurable threshold show a ⏰ indicator with age
  • Reviewer view — See MRs where you are assigned as reviewer; cycle between Authored / Reviewing / All scopes
  • Status change notifications — Toast alerts when an MR/PR status changes between fetches, with an "Open" button
  • Jira-MR linking — Automatically links MRs to Jira issues by parsing issue keys from branch names (e.g. feat/DX-419-foo → DX-419). Linked issues show a 🔗 count; tooltips show MR details
  • MR/PR dashboard section — The dashboard now includes a Merge Requests section below the Kanban board with status colors, stale flags, and reviewer tags

Quick Start

Jira Setup

  1. Install the extension
  2. Open the command palette (Ctrl+Shift+P) and run Epic Lens: Configure Jira Credentials
  3. Enter your Jira base URL, email, API token, and project key
  4. Epics load automatically

GitLab Setup

A GitLab Personal Access Token with read_api scope is required.

  1. Create a Personal Access Token with read_api scope
  2. Run Epic Lens: Configure GitLab Credentials from the command palette (Ctrl+Shift+P)
  3. Enter your GitLab host URL (defaults to https://gitlab.com)
  4. Paste your token (stored securely in the OS keychain)

Alternatively, set the GITLAB_TOKEN environment variable or authenticate glab CLI with a PAT.

Note: If you used glab auth login with browser-based OAuth2 (the default), the stored token won't work. You need a Personal Access Token.

GitHub Setup

A GitHub Personal Access Token (classic or fine-grained) with repo scope is required.

  1. Create a Personal Access Token with repo scope
  2. Run Epic Lens: Configure GitHub Credentials from the command palette (Ctrl+Shift+P)
  3. Paste your token (stored securely in the OS keychain)

Alternatively, set the GITHUB_TOKEN environment variable or authenticate with gh auth login (PAT-based).

Provider Cycling

The Merge Requests view has a toolbar button to cycle the provider filter:

BothGitLab OnlyGitHub OnlyBoth ...

Projects are prefixed with 🦊 (GitLab) or 🐙 (GitHub) when showing both providers.

A second toolbar button cycles the MR scope:

AuthoredReviewingAllAuthored ...

In Reviewing mode, only MRs where you are assigned as a reviewer are shown (marked with 📋). In All mode, both authored and reviewer MRs are shown.

Generating a Jira API Token

  1. Go to https://id.atlassian.com/manage-profile/security/api-tokens
  2. Click Create API token
  3. Copy the token and paste it when prompted by the configure command

Settings

Jira

Setting Default Description
epicLens.jiraBaseUrl "" Jira Cloud instance URL (e.g. https://yourorg.atlassian.net)
epicLens.jiraEmail "" Jira account email for API authentication
epicLens.jiraProject "" Jira project key (e.g. MYPROJ)
epicLens.jiraScope "mine" "mine" = your epics only, "all" = entire project
epicLens.jiraJql "" Custom JQL (overrides project and scope when set)
epicLens.hideDoneIssues false Hide completed/done issues from the tree
epicLens.scanOnStartup true Automatically fetch from Jira and GitLab when VS Code starts
epicLens.autoRefreshInterval 5 Auto-refresh interval in minutes (0 to disable)

GitLab / GitHub

Setting Default Description
epicLens.gitlabHost "https://gitlab.com" GitLab instance URL (for self-hosted, e.g. https://gitlab.example.com)
epicLens.githubHost "https://api.github.com" GitHub API URL (for GitHub Enterprise, e.g. https://github.example.com/api/v3)
epicLens.staleMRDays 7 Flag MRs older than this many days as stale with ⏰ indicator (0 to disable)

Authentication

Jira token is resolved in this order:

  1. VS Code SecretStorage (OS keychain) — set via the configure command
  2. ATLASSIAN_TOKEN environment variable — useful for CLI/CI environments

GitLab token is resolved in this order:

  1. VS Code SecretStorage (OS keychain) — set via Configure GitLab Credentials
  2. GITLAB_TOKEN environment variable
  3. glab CLI config file (~/.config/glab-cli/config.yml) — PAT-based auth only, not OAuth2

GitHub token is resolved in this order:

  1. VS Code SecretStorage (OS keychain) — set via Configure GitHub Credentials
  2. GITHUB_TOKEN environment variable
  3. gh CLI config file (~/.config/gh/hosts.yml)

Keyboard Shortcuts

All shortcuts use Alt+E as a chord prefix:

Shortcut Command
Alt+E S Fetch Epics from Jira
Alt+E R Refresh Status
Alt+E D Open Dashboard
Alt+E F Filter by Status
Alt+E T Filter by Type
Alt+E H Toggle Hide Done
Alt+E C Clear All Filters
Alt+E M Fetch Merge Requests

Commands

Command Description
Epic Lens: Fetch Epics from Jira Pull latest epics and issues
Epic Lens: Refresh Status Re-fetch from Jira
Epic Lens: Open Dashboard Open the interactive dashboard panel
Epic Lens: Filter by Status Quick pick to filter by status category
Epic Lens: Filter by Type Quick pick to filter by issue type
Epic Lens: Toggle Hide Done Show/hide completed issues
Epic Lens: Clear All Filters Reset all active filters
Epic Lens: Configure Jira Credentials Guided setup for Jira connection
Epic Lens: Open in Jira Open the selected issue in your browser
Epic Lens: Copy Issue Key Copy the issue key to clipboard
Epic Lens: Fetch Merge Requests Pull open MRs/PRs from GitLab and GitHub
Epic Lens: Refresh Merge Requests Re-fetch MR/PR statuses
Epic Lens: Cycle Provider Toggle between Both / GitLab / GitHub
Epic Lens: Cycle Scope Toggle MR scope between Authored / Reviewing / All
Epic Lens: Open in Browser Open the selected MR/PR in your browser
Epic Lens: Copy MR/PR URL Copy the URL to clipboard
Epic Lens: Configure GitLab Credentials Guided setup for GitLab connection
Epic Lens: Configure GitHub Credentials Guided setup for GitHub connection

Status Categories

Jira statuses are mapped to these categories for filtering and display:

Category Statuses Icon
Backlog Backlog, To Do, Open, New, Queued 📋
In Progress In Progress, In Development, Working 🔄
Review Review, In Review, Code Review, PR Review 👀
QA QA, Testing, In QA, Ready for QA 🧪
Blocked Blocked, On Hold, Waiting 🚫
Done Done, Closed, Resolved, Complete
Rejected Won't Do, Cancelled, Rejected

Merge Request Status Indicators

Each MR in the sidebar shows a status based on its current state:

Status Icon Meaning
Ready to merge Approved, pipeline passed, no conflicts
Approved 👍 Has approvals but may need other checks
Needs review 👀 Waiting for reviewer approval
Draft ✏️ Marked as draft, not ready for review
Pipeline failed CI/CD pipeline failed
Pipeline running 🔄 CI/CD pipeline in progress
Has conflicts ⚠️ Merge conflicts need resolution
Changes requested 🔄 Reviewer requested changes (GitHub)
Unresolved discussions 💬 Open review threads to address (GitLab)
Stale MR/PR older than the configured staleMRDays threshold

MRs are grouped by project when you have open MRs across multiple repositories. Click any MR to open it in GitLab, or right-click for additional options.

Development

# Install dependencies
npm install
npm install --prefix webview-ui

# Build
make build

# Watch mode
make watch

# Package .vsix
make package

# Release (auto-bump from conventional commits)
make release

# Install locally
make install

License

MIT

About

A VS Code extension that discovers Jira epics from local .jira-upload-state.json files, displays them in a sidebar tree view and dashboard with status tracking, acceptance criteria progress, and filtering by status/type. Integrates with Diffchestrator for root-aware filtering across multi-repo workspaces.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors