Skip to content

Andrevops/Epic-Lens

Repository files navigation

Epic Lens

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
  • Pipeline monitoring β€” Dedicated Pipelines view showing recent CI/CD pipelines on default branches, grouped by project, with expandable job details, cancel action, and configurable scope
  • Provider cycling β€” Toggle between Both / GitLab / GitHub with a single toolbar button
  • Dashboard β€” Board, List, and Settings tabs with status columns, progress bars, stats, and in-dashboard configuration
  • Loading animations β€” Native VS Code notification toasts with spinners on all fetch/refresh commands; dashboard shows a blurred overlay spinner during load and refresh
  • 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 or pipeline 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:

Both β†’ GitLab Only β†’ GitHub Only β†’ Both ...

Projects are prefixed with 🦊 (GitLab) or πŸ™ (GitHub) when showing both providers.

A second toolbar button cycles the MR scope:

Authored β†’ Reviewing β†’ All β†’ Authored ...

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.

Pipelines View

The Pipelines view shows your recent CI/CD pipelines running on default branches (e.g. main), independent of any open MR. This is useful for monitoring post-merge pipelines.

  • Fetches the 5 most recent pipelines per project that you triggered
  • Queries your GitLab projects (by membership) and GitHub repos (by ownership)
  • Pipelines are always grouped by project with provider icons; each pipeline description shows project name and time ago
  • Pipelines are expandable to show individual job details with status and duration
  • Provider cycling works the same as for MRs: Both β†’ GitLab β†’ GitHub
  • Scope: configurable via epicLens.pipelineScope β€” Mine (only pipelines you triggered) or All (all pipelines on default branches). Also toggleable from the toolbar or the dashboard Settings tab
  • Cancel pipeline β€” Right-click a running or pending pipeline and select "Cancel Pipeline" (with confirmation), or use the inline cancel action. Calls the GitLab/GitHub cancel APIs
  • Canceled and successful pipelines are automatically filtered out of the tree
  • Pipeline max age: only pipelines created within the last N days are fetched (default 7, configurable via epicLens.pipelineMaxAgeDays)
  • Status change notifications fire when a pipeline transitions (e.g. running β†’ failed)
  • Included in auto-refresh alongside epics and MRs

Dashboard Settings Tab

The dashboard includes a third tab (Board / List / Settings) that lets you configure all Epic Lens settings directly from the webview UI β€” Jira connection, GitLab/GitHub hosts, and behavior settings. Click Save to apply changes.

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, GitLab, and GitHub 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)
epicLens.pipelineMaxAgeDays 7 Only show pipelines created within this many days (minimum 1)
epicLens.pipelineScope "mine" "mine" = your pipelines only, "all" = all pipelines on your projects

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
Alt+E P Fetch Pipelines

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
Epic Lens: Fetch Pipelines Pull recent pipelines from GitLab and GitHub
Epic Lens: Refresh Pipelines Re-fetch pipeline statuses
Epic Lens: Cycle Pipeline Provider Toggle pipeline view between Both / GitLab / GitHub
Epic Lens: Cycle Pipeline Scope Toggle pipeline scope between Mine / All
Epic Lens: Open Pipeline in Browser Open the selected pipeline in your browser
Epic Lens: Cancel Pipeline Cancel a running or pending pipeline (with confirmation)

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

Andrevops Ecosystem

Epic Lens is part of the Andrevops developer tooling suite.

Tool Relationship
Diffchestrator Epic Lens consumes Diffchestrator's public API to filter epics and MRs by the currently selected repo. When you click a repo in Diffchestrator, Epic Lens can scope its view to that repo's issues and merge requests.
Makestro Sibling extension β€” both consume Diffchestrator's API for repo-aware context
claude-sandbox Claude Code sessions launched via Diffchestrator's Yolo command generate the MRs and commits that Epic Lens tracks
claude-stats Complementary CLI β€” analyzes the Claude Code sessions that produce the work Epic Lens gives visibility into

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