Skip to main content

Overview

The SCM (Source Control Management) interface is the richest plugin interface, covering the full PR pipeline: PR detection, state tracking, CI checks, code reviews, and merge operations. Plugin Slot: scm
Default Plugin: github

Interface Definition

PR Lifecycle Methods

(session: Session, project: ProjectConfig) => Promise<PRInfo | null>
required
Detect if a session has an open PR (by branch name).Parameters:
  • session - Session to check
  • project - Project configuration
Returns: PRInfo if PR exists, null otherwise
(pr: PRInfo) => Promise<PRState>
required
Get current PR state.Parameters:
  • pr - PR info
Returns: "open", "merged", or "closed"
(pr: PRInfo) => Promise<object>
Optional: Get PR summary with stats (state, title, additions, deletions).Parameters:
  • pr - PR info
Returns: Object with state, title, additions, deletions
(pr: PRInfo, method?: MergeMethod) => Promise<void>
required
Merge a PR.Parameters:
  • pr - PR info
  • method - Merge method: "merge", "squash", or "rebase" (default: repo settings)
(pr: PRInfo) => Promise<void>
required
Close a PR without merging.Parameters:
  • pr - PR info

CI Tracking Methods

(pr: PRInfo) => Promise<CICheck[]>
required
Get individual CI check statuses.Parameters:
  • pr - PR info
Returns: Array of CI checks with name, status, URL, timestamps
(pr: PRInfo) => Promise<CIStatus>
required
Get overall CI summary.Parameters:
  • pr - PR info
Returns: "pending", "passing", "failing", or "none"

Review Tracking Methods

(pr: PRInfo) => Promise<Review[]>
required
Get all reviews on a PR.Parameters:
  • pr - PR info
Returns: Array of reviews with author, state, body, timestamp
(pr: PRInfo) => Promise<ReviewDecision>
required
Get the overall review decision.Parameters:
  • pr - PR info
Returns: "approved", "changes_requested", "pending", or "none"
(pr: PRInfo) => Promise<ReviewComment[]>
required
Get pending (unresolved) review comments.Parameters:
  • pr - PR info
Returns: Array of unresolved comments
(pr: PRInfo) => Promise<AutomatedComment[]>
required
Get automated review comments (bots, linters, security scanners).Parameters:
  • pr - PR info
Returns: Array of automated comments with severity

Merge Readiness Method

(pr: PRInfo) => Promise<MergeReadiness>
required
Check if PR is ready to merge.Parameters:
  • pr - PR info
Returns: MergeReadiness with mergeable flag, CI status, approval status, conflicts, and blockers

PRInfo

number
required
PR number
string
required
Full URL to PR
string
required
PR title
string
required
Repository owner
string
required
Repository name
string
required
Source branch name
string
required
Target/base branch name
boolean
required
Whether PR is in draft mode

PRState

CICheck

CIStatus

Review

ReviewDecision

ReviewComment

AutomatedComment

MergeReadiness

boolean
required
Overall merge readiness (all checks must pass)
boolean
required
Whether CI is passing
boolean
required
Whether PR is approved
boolean
required
Whether PR has no merge conflicts
string[]
required
Array of blocker descriptions (e.g. "CI failing", "Changes requested")

MergeMethod

Usage Examples

Implementing an SCM Plugin

Using SCM in Lifecycle Manager

Implementation Notes

Authentication

SCM plugins typically use CLI tools or API tokens:
  • GitHub: gh CLI (uses ~/.config/gh/hosts.yml)
  • GitLab: glab CLI or GITLAB_TOKEN

Rate Limiting

Be mindful of API rate limits:
  • Cache PR info in session metadata
  • Batch requests when possible
  • Use GraphQL for complex queries (GitHub)

Review Comment Filtering

Distinguish between:
  • Human reviews (priority)
  • Bot comments (linters, security scanners)
  • Resolved vs unresolved comments

Built-in Plugins

  • github - GitHub (default, uses gh CLI)
Future plugins could support GitLab, Bitbucket, Gitea, etc.

See Also