Skip to main content

Gitlab

@webframp/gitlabv2026.07.18.1· 9d agoMODELSREPORTS
01README

Read and write GitLab data via GraphQL (REST fallback for branches and merge accept). Projects, merge requests, issues, releases, pipelines, labels, members, branches, and a cross-project review dashboard with todos. No CLI dependencies — uses native fetch with a personal access token stored in a swamp vault.

Authentication

Requires a GitLab personal access token with api scope, stored in a swamp vault.

Usage

# Create with vault-stored token
swamp model create @webframp/gitlab gitlab \
  --global-arg host=git.example.org \
  --global-arg 'token=${{ vault.get("gitlab", "TOKEN") }}'

# Read operations
swamp model method run gitlab list_projects
swamp model method run gitlab list_issues --input project=group/repo
swamp model method run gitlab list_merge_requests --input project=group/repo

# Dashboard (GraphQL)
swamp model method run gitlab list_my_merge_requests
swamp model method run gitlab list_my_merge_requests --input role=reviewer

# Write operations
swamp model method run gitlab create_issue --input project=group/repo --input title="New issue"
swamp model method run gitlab add_issue_note --input project=group/repo --input iid=1 --input body="Comment"
swamp model method run gitlab create_merge_request --input project=group/repo --input title="MR" --input sourceBranch=feature

Methods

Read:

  • list_projects, get_project_info, list_merge_requests, list_issues
  • list_releases, list_pipelines, list_issue_notes, list_mr_notes
  • list_labels, list_members, list_branches
  • list_my_merge_requests (GraphQL — cross-project dashboard + todos)
  • list_todos (GraphQL — ALL todos, paginated past the 20-cap, each with target lifecycle state)
  • get_merge_request (detailed_merge_status + why an MR can/can't merge)
  • get_pipeline_jobs (jobs + failure_reason; defaults to failed jobs)
  • get_job_log (tail of a CI job's trace)

Write:

  • create_issue, update_issue, add_issue_note
  • create_merge_request, update_merge_request, merge, add_mr_note
  • update_mr_note / delete_mr_note (edit or remove an MR comment by id)
  • set_mr_assignees (assign/reassign/unassign by username; CE keeps one, EE many)
  • create_label
  • mark_todo_done (clear a handled to-do off the pending queue)
  • mark_todos_done (bulk-clear many todos in one call, sequential; companion to mark_todo_done)
  • rebase_merge_request (rebase a stale MR onto its target, polling to completion)
  • retry_job / retry_pipeline (re-run CI after a transient failure)
02Release Notes

2026.07.18.1

Added: An upgrades array entry (no-op) to projects.ts for proper typeVersion tracking on existing instances. No schema or behavior changes.

2026.07.11.1

Added: list_todos(state?, maxTodos?) — the authenticated user's todos across ALL pages, not the 20 the dashboard caps at. Paginates GraphQL currentUser.todos with a cursor up to a maxTodos safety cap (default 2000, truncated flag when hit). Each todo carries a hoisted targetState (opened/closed/merged for MR/issue targets, null otherwise) pulled via inline fragments, so classifying a large backlog as stale-vs-live is a flat CEL filter with no per-item fetch: todos.filter(t, t.targetState in ["merged", "closed"]). Writes a todoList resource.

Added: mark_todos_done(todoIds) — bulk companion to mark_todo_done. Marks many todos done in one call, one sequential GraphQL request per todo (not parallel; accepts gids or numeric ids), guarding the null payload GitLab returns on permission-denied/not-found; per-todo failures land in failed[] rather than aborting the batch. Writes a bulkTodoResult resource. Together with list_todos, clearing a large stale backlog is: list → CEL-filter merged/closed → mark_todos_done.

2026.07.10.4

Added: remove_mr_reviewers(project, iids, username?) — remove a reviewer (default: the authenticated user) from multiple MRs in one fan-out, via GraphQL mergeRequestSetReviewers with operationMode: REMOVE. Other reviewers are preserved; it is idempotent; per-MR failures land in failed[] rather than aborting the batch. The reviewer-side sibling of unassign_from_mrs, for clearing yourself off MRs you've already reviewed (the "approved-but-still-listed" clutter). Writes a reviewerRemovalResult resource.

2026.07.10.3

Added: list_mr_discussions(project, iid) — resolvable discussion threads on an MR with per-thread resolvable/resolved/resolvedBy and a slim diff position (file/line) hoisted to the thread level, plus the thread notes. System-only threads are excluded. Unresolved threads (the discussions_not_resolved merge blocker) are a CEL filter away: size(discussions.filter(d, d.resolvable && !d.resolved)).

Added: resolve_mr_discussion(project, iid, discussionId, resolved) — resolve or unresolve a thread (GraphQL discussionToggleResolve).

Changed: add_mr_note takes an optional discussionId to reply into an existing thread rather than post top-level. Omitting it is unchanged behavior; add_issue_note is untouched.

2026.07.10.2

Added: A canonical, GitLab-flavored reference on every dashboard work item from list_my_merge_requestsgroup/project!123 for MRs, group/project#123 for issue todos — so items in a cross-project list are uniquely identifiable and autolink in GitLab markdown. MRs derive it from the project path + iid; todos parse it (and a new iid) from targetUrl (the todo's own project field is a display name, not a path). The @webframp/review-dashboard report now renders these references, unfenced, in the MR tables and the todos table (falling back to the project path / target type for data written before this release).

2026.07.10.1

Added: unassign_from_mrs(project, iids, username?) — remove an assignee (default: the authenticated user) from multiple MRs in a single fan-out call. Uses GraphQL mergeRequestSetAssignees with operationMode: REMOVE, so other assignees are preserved; it is idempotent, and per-MR failures are recorded in a failed[] list rather than aborting the batch. Complements set_mr_assignees (REPLACE, single MR) for the common "clear my review queue" case without a read-modify-write. Writes a new unassignResult resource.

2026.07.08.4

Added: MR note management and assignee control.

  • update_mr_note(project, iid, noteId, body) — edit an MR comment by id (GraphQL updateNote).
  • delete_mr_note(project, iid, noteId) — remove an MR comment by id (GraphQL destroyNote). Previously a comment could be created but not deleted in-model.
  • set_mr_assignees(project, iid, usernames) — set/replace assignees by username (GraphQL mergeRequestSetAssignees, operationMode: REPLACE); pass an empty list to unassign. GitLab CE keeps a single assignee; EE/Premium support multiple.

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can
03Models1
@webframp/gitlabv2026.07.18.1gitlab/projects.ts

Global Arguments

ArgumentTypeDescription
hoststringGitLab hostname (e.g. git.example.org)
tokenstringGitLab personal access token with api scope (use vault reference)
fn list_projects()
List projects for the authenticated user with basic metadata
fn get_project_info(project: string)
Get detailed information about a specific project
ArgumentTypeDescription
projectstringProject path (e.g. mygroup/myproject)
fn list_merge_requests(project: string, state: enum)
List merge requests for a project with optional state filter
ArgumentTypeDescription
projectstring
stateenum
fn list_issues(project: string, state: enum)
List issues for a project with optional state filter
ArgumentTypeDescription
projectstring
stateenum
fn list_releases(project: string)
List releases for a project
ArgumentTypeDescription
projectstring
fn list_pipelines(project: string)
List recent CI/CD pipelines for a project
ArgumentTypeDescription
projectstring
fn create_issue(project: string, title: string, description: string, labels: array)
Create a new issue in a project
ArgumentTypeDescription
projectstring
titlestring
descriptionstring
labelsarray
fn update_issue(project: string, iid: number, title?: string, description?: string, labels?: array, stateEvent?: enum)
Update an existing issue (title, description, labels, state)
ArgumentTypeDescription
projectstring
iidnumber
title?string
description?string
labels?array
stateEvent?enum
fn add_issue_note(project: string, iid: number, body: string)
Add a comment to an issue
ArgumentTypeDescription
projectstring
iidnumber
bodystring
fn list_issue_notes(project: string, iid: number)
List comments on an issue
ArgumentTypeDescription
projectstring
iidnumber
fn list_mr_notes(project: string, iid: number)
List the most recent comments/discussion notes on a merge request (newest 50; truncated=true when older notes exist)
ArgumentTypeDescription
projectstring
iidnumber
fn mark_todo_done(todoId: string)
Mark a to-do as done so it drops off the pending list (todoMarkDone).
ArgumentTypeDescription
todoIdstringTodo ID — the gid (gid://gitlab/Todo/NNN) or the numeric id
fn list_todos(state: enum, maxTodos: number)
List the authenticated user's todos across ALL pages (the dashboard
ArgumentTypeDescription
stateenumWhich todos to fetch (default pending)
maxTodosnumberSafety cap on total todos fetched across pages
fn mark_todos_done(todoIds: array)
Mark MANY todos done in one call — one sequential GraphQL request per
ArgumentTypeDescription
todoIdsarrayTodo ids (gid://gitlab/Todo/NNN or numeric)
fn create_merge_request(project: string, title: string, sourceBranch: string, targetBranch: string, description: string)
Create a new merge request
ArgumentTypeDescription
projectstring
titlestring
sourceBranchstring
targetBranchstring
descriptionstring
fn get_merge_request(project: string, iid: number)
Report an MR's mergeability: detailed_merge_status plus a plain-English summary of why it can or cannot merge.
ArgumentTypeDescription
projectstring
iidnumber
fn rebase_merge_request(project: string, iid: number, skipCi: boolean)
Trigger a rebase of an MR's source branch onto its target (async), polling until it finishes or errors.
ArgumentTypeDescription
projectstring
iidnumber
skipCiboolean
fn get_pipeline_jobs(project: string, pipelineId: number, scope: enum)
List a pipeline's jobs with failure_reason (script_failure = real; runner_system_failure / stuck_or_timeout_failure / job_execution_timeout / api_failure = transient). Defaults to failed jobs only.
ArgumentTypeDescription
projectstring
pipelineIdnumber
scopeenum
fn get_job_log(project: string, jobId: number, tailLines: number)
Fetch the tail of a CI job's trace/log (last N lines) to diagnose a failure.
ArgumentTypeDescription
projectstring
jobIdnumber
tailLinesnumber
fn retry_job(project: string, jobId: number)
Retry a CI job (e.g. after a transient failure). Returns the new job's id and status.
ArgumentTypeDescription
projectstring
jobIdnumber
fn retry_pipeline(project: string, pipelineId: number)
Retry the failed jobs in a pipeline.
ArgumentTypeDescription
projectstring
pipelineIdnumber
fn merge(project: string, iid: number, squash: boolean)
Merge a merge request
ArgumentTypeDescription
projectstring
iidnumber
squashboolean
fn update_merge_request(project: string, iid: number, title?: string, description?: string, labels?: array, stateEvent?: enum)
Update a merge request (title, description, labels, state)
ArgumentTypeDescription
projectstring
iidnumber
title?string
description?string
labels?array
stateEvent?enum
fn add_mr_note(project: string, iid: number, body: string)
Add a comment to a merge request, or reply into an existing thread by passing discussionId (from list_mr_discussions)
ArgumentTypeDescription
projectstring
iidnumber
bodystring
fn update_mr_note(project: string, iid: number, noteId: number, body: string)
Edit an existing comment on a merge request by note id.
ArgumentTypeDescription
projectstring
iidnumber
noteIdnumber
bodystring
fn delete_mr_note(project: string, iid: number, noteId: number)
Delete a comment on a merge request by note id.
ArgumentTypeDescription
projectstring
iidnumber
noteIdnumber
fn set_mr_assignees(project: string, iid: number, usernames: array)
Set (replace) an MR's assignees by username; pass an empty list to unassign. GitLab CE keeps one; EE/Premium support multiple.
ArgumentTypeDescription
projectstring
iidnumber
usernamesarray
fn unassign_from_mrs(project: string, iids: array, username?: string)
Remove an assignee (default: the authenticated user) from multiple MRs
ArgumentTypeDescription
projectstring
iidsarray
username?string
fn remove_mr_reviewers(project: string, iids: array, username?: string)
Remove a reviewer (default: the authenticated user) from multiple MRs
ArgumentTypeDescription
projectstring
iidsarray
username?string
fn set_mr_reviewers(project: string, iid: number, usernames: array)
Set (replace) an MR's reviewers by username; pass an empty list to clear.
ArgumentTypeDescription
projectstring
iidnumber
usernamesarray
fn list_mr_discussions(project: string, iid: number, first: number)
List resolvable discussion threads on an MR with per-thread resolution state and slim diff position (file/line). System-only threads are excluded. Filter for blockers with CEL: size(discussions.filter(d, d.resolvable && !d.resolved)).
ArgumentTypeDescription
projectstring
iidnumber
firstnumber
fn resolve_mr_discussion(project: string, iid: number, discussionId: string, resolved: boolean)
Resolve (or unresolve) a merge request discussion thread by its discussionId (from list_mr_discussions). MUTATING.
ArgumentTypeDescription
projectstring
iidnumber
discussionIdstring
resolvedboolean
fn list_labels(project: string)
List labels for a project
ArgumentTypeDescription
projectstring
fn create_label(project: string, name: string, color: string, description: string)
Create a label in a project
ArgumentTypeDescription
projectstring
namestring
colorstring
descriptionstring
fn list_members(project: string)
List members of a project
ArgumentTypeDescription
projectstring
fn list_branches(project: string)
List branches for a project
ArgumentTypeDescription
projectstring
fn list_my_merge_requests()
List MRs and todos for the authenticated user via GraphQL (reviewer, assignee, author roles + pending todos)

Resources

projects(30m)— List of projects for the authenticated user
projectInfo(30m)— Detailed information about a specific project
mergeRequests(15m)— List of merge requests for a project
issues(15m)— List of issues for a project
issueDetail(15m)— Single issue detail (from create/update)
notes(15m)— Notes/comments on an issue or MR
discussions(15m)— Resolvable discussion threads on an MR, with per-thread resolution state and slim diff position
discussionResolution(15m)— Outcome of resolving/unresolving an MR discussion
mergeStatus(15m)— Mergeability of an MR — detailed_merge_status plus human-readable blockers
rebaseResult(15m)— Outcome of a triggered MR rebase
pipelineJobs(15m)— Jobs in a pipeline (with failure_reason), for CI diagnosis
jobLog(15m)— Tail of a CI job's trace/log
retryResult(15m)— Outcome of a triggered job/pipeline retry
noteDeleted(15m)— Record of a deleted MR note
unassignResult(infinite)— Result of a fan-out unassign across MRs (remaining assignees + failures)
reviewerRemovalResult(infinite)— Result of a fan-out reviewer removal across MRs (remaining reviewers + failures)
mrAssignees(15m)— Assignees of an MR after a set/unassign
mrReviewers(15m)— Reviewers of an MR after a set/clear
releases(1h)— List of releases for a project
pipelines(10m)— List of recent CI/CD pipelines
labels(1h)— Labels for a project
members(1h)— Members of a project
branches(15m)— Branches for a project
dashboard(30m)— Cross-project MR dashboard and todos for the authenticated user
todoList(15m)— All todos for the authenticated user (paginated past the dashboard's
bulkTodoResult(infinite)— Result of a bulk mark-todos-done (confirmed done + per-todo failures)
04Reports1
@webframp/review-dashboardmethod
review_dashboard.ts

Prioritized action items dashboard from cross-project MR data

gitlabreviewsdashboard
05Previous Versions14
2026.07.16.1

2026.07.11.1

Added: list_todos(state?, maxTodos?) — the authenticated user's todos across ALL pages, not the 20 the dashboard caps at. Paginates GraphQL currentUser.todos with a cursor up to a maxTodos safety cap (default 2000, truncated flag when hit). Each todo carries a hoisted targetState (opened/closed/merged for MR/issue targets, null otherwise) pulled via inline fragments, so classifying a large backlog as stale-vs-live is a flat CEL filter with no per-item fetch: todos.filter(t, t.targetState in ["merged", "closed"]). Writes a todoList resource.

Added: mark_todos_done(todoIds) — bulk companion to mark_todo_done. Marks many todos done in one call, one sequential GraphQL request per todo (not parallel; accepts gids or numeric ids), guarding the null payload GitLab returns on permission-denied/not-found; per-todo failures land in failed[] rather than aborting the batch. Writes a bulkTodoResult resource. Together with list_todos, clearing a large stale backlog is: list → CEL-filter merged/closed → mark_todos_done.

2026.07.10.4

Added: remove_mr_reviewers(project, iids, username?) — remove a reviewer (default: the authenticated user) from multiple MRs in one fan-out, via GraphQL mergeRequestSetReviewers with operationMode: REMOVE. Other reviewers are preserved; it is idempotent; per-MR failures land in failed[] rather than aborting the batch. The reviewer-side sibling of unassign_from_mrs, for clearing yourself off MRs you've already reviewed (the "approved-but-still-listed" clutter). Writes a reviewerRemovalResult resource.

2026.07.10.3

Added: list_mr_discussions(project, iid) — resolvable discussion threads on an MR with per-thread resolvable/resolved/resolvedBy and a slim diff position (file/line) hoisted to the thread level, plus the thread notes. System-only threads are excluded. Unresolved threads (the discussions_not_resolved merge blocker) are a CEL filter away: size(discussions.filter(d, d.resolvable && !d.resolved)).

Added: resolve_mr_discussion(project, iid, discussionId, resolved) — resolve or unresolve a thread (GraphQL discussionToggleResolve).

Changed: add_mr_note takes an optional discussionId to reply into an existing thread rather than post top-level. Omitting it is unchanged behavior; add_issue_note is untouched.

2026.07.10.2

Added: A canonical, GitLab-flavored reference on every dashboard work item from list_my_merge_requestsgroup/project!123 for MRs, group/project#123 for issue todos — so items in a cross-project list are uniquely identifiable and autolink in GitLab markdown. MRs derive it from the project path + iid; todos parse it (and a new iid) from targetUrl (the todo's own project field is a display name, not a path). The @webframp/review-dashboard report now renders these references, unfenced, in the MR tables and the todos table (falling back to the project path / target type for data written before this release).

2026.07.10.1

Added: unassign_from_mrs(project, iids, username?) — remove an assignee (default: the authenticated user) from multiple MRs in a single fan-out call. Uses GraphQL mergeRequestSetAssignees with operationMode: REMOVE, so other assignees are preserved; it is idempotent, and per-MR failures are recorded in a failed[] list rather than aborting the batch. Complements set_mr_assignees (REPLACE, single MR) for the common "clear my review queue" case without a read-modify-write. Writes a new unassignResult resource.

2026.07.08.4

Added: MR note management and assignee control.

  • update_mr_note(project, iid, noteId, body) — edit an MR comment by id (GraphQL updateNote).
  • delete_mr_note(project, iid, noteId) — remove an MR comment by id (GraphQL destroyNote). Previously a comment could be created but not deleted in-model.
  • set_mr_assignees(project, iid, usernames) — set/replace assignees by username (GraphQL mergeRequestSetAssignees, operationMode: REPLACE); pass an empty list to unassign. GitLab CE keeps a single assignee; EE/Premium support multiple.

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can go straight from a blocked MR to its failed jobs.

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's `detailed_merge_st

Modified 1 models

2026.07.11.1

2026.07.11.1

Added: list_todos(state?, maxTodos?) — the authenticated user's todos across ALL pages, not the 20 the dashboard caps at. Paginates GraphQL currentUser.todos with a cursor up to a maxTodos safety cap (default 2000, truncated flag when hit). Each todo carries a hoisted targetState (opened/closed/merged for MR/issue targets, null otherwise) pulled via inline fragments, so classifying a large backlog as stale-vs-live is a flat CEL filter with no per-item fetch: todos.filter(t, t.targetState in ["merged", "closed"]). Writes a todoList resource.

Added: mark_todos_done(todoIds) — bulk mirror of mark_todo_done. Marks many todos done in one fan-out (accepts gids or numeric ids), guarding the null payload GitLab returns on permission-denied/not-found; per-todo failures land in failed[] rather than aborting the batch. Writes a bulkTodoResult resource. Together with list_todos, clearing a large stale backlog is: list → CEL-filter merged/closed → mark_todos_done.

2026.07.10.4

Added: remove_mr_reviewers(project, iids, username?) — remove a reviewer (default: the authenticated user) from multiple MRs in one fan-out, via GraphQL mergeRequestSetReviewers with operationMode: REMOVE. Other reviewers are preserved; it is idempotent; per-MR failures land in failed[] rather than aborting the batch. The reviewer-side sibling of unassign_from_mrs, for clearing yourself off MRs you've already reviewed (the "approved-but-still-listed" clutter). Writes a reviewerRemovalResult resource.

2026.07.10.3

Added: list_mr_discussions(project, iid) — resolvable discussion threads on an MR with per-thread resolvable/resolved/resolvedBy and a slim diff position (file/line) hoisted to the thread level, plus the thread notes. System-only threads are excluded. Unresolved threads (the discussions_not_resolved merge blocker) are a CEL filter away: size(discussions.filter(d, d.resolvable && !d.resolved)).

Added: resolve_mr_discussion(project, iid, discussionId, resolved) — resolve or unresolve a thread (GraphQL discussionToggleResolve).

Changed: add_mr_note takes an optional discussionId to reply into an existing thread rather than post top-level. Omitting it is unchanged behavior; add_issue_note is untouched.

2026.07.10.2

Added: A canonical, GitLab-flavored reference on every dashboard work item from list_my_merge_requestsgroup/project!123 for MRs, group/project#123 for issue todos — so items in a cross-project list are uniquely identifiable and autolink in GitLab markdown. MRs derive it from the project path + iid; todos parse it (and a new iid) from targetUrl (the todo's own project field is a display name, not a path). The @webframp/review-dashboard report now renders these references, unfenced, in the MR tables and the todos table (falling back to the project path / target type for data written before this release).

2026.07.10.1

Added: unassign_from_mrs(project, iids, username?) — remove an assignee (default: the authenticated user) from multiple MRs in a single fan-out call. Uses GraphQL mergeRequestSetAssignees with operationMode: REMOVE, so other assignees are preserved; it is idempotent, and per-MR failures are recorded in a failed[] list rather than aborting the batch. Complements set_mr_assignees (REPLACE, single MR) for the common "clear my review queue" case without a read-modify-write. Writes a new unassignResult resource.

2026.07.08.4

Added: MR note management and assignee control.

  • update_mr_note(project, iid, noteId, body) — edit an MR comment by id (GraphQL updateNote).
  • delete_mr_note(project, iid, noteId) — remove an MR comment by id (GraphQL destroyNote). Previously a comment could be created but not deleted in-model.
  • set_mr_assignees(project, iid, usernames) — set/replace assignees by username (GraphQL mergeRequestSetAssignees, operationMode: REPLACE); pass an empty list to unassign. GitLab CE keeps a single assignee; EE/Premium support multiple.

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can go straight from a blocked MR to its failed jobs.

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's detailed_merge_status, with a plain-English summary and blockers li

Modified 1 models

2026.07.10.4

2026.07.10.4

Added: remove_mr_reviewers(project, iids, username?) — remove a reviewer (default: the authenticated user) from multiple MRs in one fan-out, via GraphQL mergeRequestSetReviewers with operationMode: REMOVE. Other reviewers are preserved; it is idempotent; per-MR failures land in failed[] rather than aborting the batch. The reviewer-side sibling of unassign_from_mrs, for clearing yourself off MRs you've already reviewed (the "approved-but-still-listed" clutter). Writes a reviewerRemovalResult resource.

2026.07.10.3

Added: list_mr_discussions(project, iid) — resolvable discussion threads on an MR with per-thread resolvable/resolved/resolvedBy and a slim diff position (file/line) hoisted to the thread level, plus the thread notes. System-only threads are excluded. Unresolved threads (the discussions_not_resolved merge blocker) are a CEL filter away: size(discussions.filter(d, d.resolvable && !d.resolved)).

Added: resolve_mr_discussion(project, iid, discussionId, resolved) — resolve or unresolve a thread (GraphQL discussionToggleResolve).

Changed: add_mr_note takes an optional discussionId to reply into an existing thread rather than post top-level. Omitting it is unchanged behavior; add_issue_note is untouched.

2026.07.10.2

Added: A canonical, GitLab-flavored reference on every dashboard work item from list_my_merge_requestsgroup/project!123 for MRs, group/project#123 for issue todos — so items in a cross-project list are uniquely identifiable and autolink in GitLab markdown. MRs derive it from the project path + iid; todos parse it (and a new iid) from targetUrl (the todo's own project field is a display name, not a path). The @webframp/review-dashboard report now renders these references, unfenced, in the MR tables and the todos table (falling back to the project path / target type for data written before this release).

2026.07.10.1

Added: unassign_from_mrs(project, iids, username?) — remove an assignee (default: the authenticated user) from multiple MRs in a single fan-out call. Uses GraphQL mergeRequestSetAssignees with operationMode: REMOVE, so other assignees are preserved; it is idempotent, and per-MR failures are recorded in a failed[] list rather than aborting the batch. Complements set_mr_assignees (REPLACE, single MR) for the common "clear my review queue" case without a read-modify-write. Writes a new unassignResult resource.

2026.07.08.4

Added: MR note management and assignee control.

  • update_mr_note(project, iid, noteId, body) — edit an MR comment by id (GraphQL updateNote).
  • delete_mr_note(project, iid, noteId) — remove an MR comment by id (GraphQL destroyNote). Previously a comment could be created but not deleted in-model.
  • set_mr_assignees(project, iid, usernames) — set/replace assignees by username (GraphQL mergeRequestSetAssignees, operationMode: REPLACE); pass an empty list to unassign. GitLab CE keeps a single assignee; EE/Premium support multiple.

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can go straight from a blocked MR to its failed jobs.

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's detailed_merge_status, with a plain-English summary and blockers list (answers "why can't this MR merge?": need_rebase, conflict, ci_must_pass, not_approved, discussions_not_resolved, draft, …).
  • rebase_merge_request — trigger a rebase of an MR's source branch onto its target (REST), polling until it finishes (rebased), errors (error with merge_error), or is still running (in_progress). Supports skipCi.

2026.07.08.1

Added:

  • list_mr_notes — list the discussion notes/comments on a merge request (mirrors list_issue_notes; writes the shared notes resource with noteableType: "merge_request").
  • mark_todo_done — mark a GitLab to-do as done via the todoMarkDone mutation, so handled items drop off the pending queue. Accepts either the gid://gitlab/Todo/NNN form or a bare numeric id.

2026.06.26.1

Added: approvedByMe (boolean) and myReviewState (pending/reviewed/approved/unapproved, nullable) fields on every MR in list_my_merge_requests output. Consumers can now filter actionable reviews from already-handled ones without

Modified 1 models

2026.07.10.3

2026.07.10.3

Added: list_mr_discussions(project, iid) — resolvable discussion threads on an MR with per-thread resolvable/resolved/resolvedBy and a slim diff position (file/line) hoisted to the thread level, plus the thread notes. System-only threads are excluded. Unresolved threads (the discussions_not_resolved merge blocker) are a CEL filter away: size(discussions.filter(d, d.resolvable && !d.resolved)).

Added: resolve_mr_discussion(project, iid, discussionId, resolved) — resolve or unresolve a thread (GraphQL discussionToggleResolve).

Changed: add_mr_note takes an optional discussionId to reply into an existing thread rather than post top-level. Omitting it is unchanged behavior; add_issue_note is untouched.

2026.07.10.2

Added: A canonical, GitLab-flavored reference on every dashboard work item from list_my_merge_requestsgroup/project!123 for MRs, group/project#123 for issue todos — so items in a cross-project list are uniquely identifiable and autolink in GitLab markdown. MRs derive it from the project path + iid; todos parse it (and a new iid) from targetUrl (the todo's own project field is a display name, not a path). The @webframp/review-dashboard report now renders these references, unfenced, in the MR tables and the todos table (falling back to the project path / target type for data written before this release).

2026.07.10.1

Added: unassign_from_mrs(project, iids, username?) — remove an assignee (default: the authenticated user) from multiple MRs in a single fan-out call. Uses GraphQL mergeRequestSetAssignees with operationMode: REMOVE, so other assignees are preserved; it is idempotent, and per-MR failures are recorded in a failed[] list rather than aborting the batch. Complements set_mr_assignees (REPLACE, single MR) for the common "clear my review queue" case without a read-modify-write. Writes a new unassignResult resource.

2026.07.08.4

Added: MR note management and assignee control.

  • update_mr_note(project, iid, noteId, body) — edit an MR comment by id (GraphQL updateNote).
  • delete_mr_note(project, iid, noteId) — remove an MR comment by id (GraphQL destroyNote). Previously a comment could be created but not deleted in-model.
  • set_mr_assignees(project, iid, usernames) — set/replace assignees by username (GraphQL mergeRequestSetAssignees, operationMode: REPLACE); pass an empty list to unassign. GitLab CE keeps a single assignee; EE/Premium support multiple.

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can go straight from a blocked MR to its failed jobs.

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's detailed_merge_status, with a plain-English summary and blockers list (answers "why can't this MR merge?": need_rebase, conflict, ci_must_pass, not_approved, discussions_not_resolved, draft, …).
  • rebase_merge_request — trigger a rebase of an MR's source branch onto its target (REST), polling until it finishes (rebased), errors (error with merge_error), or is still running (in_progress). Supports skipCi.

2026.07.08.1

Added:

  • list_mr_notes — list the discussion notes/comments on a merge request (mirrors list_issue_notes; writes the shared notes resource with noteableType: "merge_request").
  • mark_todo_done — mark a GitLab to-do as done via the todoMarkDone mutation, so handled items drop off the pending queue. Accepts either the gid://gitlab/Todo/NNN form or a bare numeric id.

2026.06.26.1

Added: approvedByMe (boolean) and myReviewState (pending/reviewed/approved/unapproved, nullable) fields on every MR in list_my_merge_requests output. Consumers can now filter actionable reviews from already-handled ones without additional API calls.

Changed: The GraphQL query now fetches approvedBy and reviewers with mergeRequestInteraction on all three MR lists (reviewer, assigned, authored). This adds ~200 bytes per MR to the response but no additional API round-trips. The assigned and authored lists now also populate the commented field (previously always false due to missing currentUser param).

Upgrade note: Schema is additive only. Existing model instances work without reconfiguration. Previously stored dashboard resources will

Modified 1 models

2026.07.10.2

2026.07.10.2

Added: A canonical, GitLab-flavored reference on every dashboard work item from list_my_merge_requestsgroup/project!123 for MRs, group/project#123 for issue todos — so items in a cross-project list are uniquely identifiable and autolink in GitLab markdown. MRs derive it from the project path + iid; todos parse it (and a new iid) from targetUrl (the todo's own project field is a display name, not a path). The @webframp/review-dashboard report now renders these references, unfenced, in the MR tables and the todos table (falling back to the project path / target type for data written before this release).

2026.07.10.1

Added: unassign_from_mrs(project, iids, username?) — remove an assignee (default: the authenticated user) from multiple MRs in a single fan-out call. Uses GraphQL mergeRequestSetAssignees with operationMode: REMOVE, so other assignees are preserved; it is idempotent, and per-MR failures are recorded in a failed[] list rather than aborting the batch. Complements set_mr_assignees (REPLACE, single MR) for the common "clear my review queue" case without a read-modify-write. Writes a new unassignResult resource.

2026.07.08.4

Added: MR note management and assignee control.

  • update_mr_note(project, iid, noteId, body) — edit an MR comment by id (GraphQL updateNote).
  • delete_mr_note(project, iid, noteId) — remove an MR comment by id (GraphQL destroyNote). Previously a comment could be created but not deleted in-model.
  • set_mr_assignees(project, iid, usernames) — set/replace assignees by username (GraphQL mergeRequestSetAssignees, operationMode: REPLACE); pass an empty list to unassign. GitLab CE keeps a single assignee; EE/Premium support multiple.

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can go straight from a blocked MR to its failed jobs.

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's detailed_merge_status, with a plain-English summary and blockers list (answers "why can't this MR merge?": need_rebase, conflict, ci_must_pass, not_approved, discussions_not_resolved, draft, …).
  • rebase_merge_request — trigger a rebase of an MR's source branch onto its target (REST), polling until it finishes (rebased), errors (error with merge_error), or is still running (in_progress). Supports skipCi.

2026.07.08.1

Added:

  • list_mr_notes — list the discussion notes/comments on a merge request (mirrors list_issue_notes; writes the shared notes resource with noteableType: "merge_request").
  • mark_todo_done — mark a GitLab to-do as done via the todoMarkDone mutation, so handled items drop off the pending queue. Accepts either the gid://gitlab/Todo/NNN form or a bare numeric id.

2026.06.26.1

Added: approvedByMe (boolean) and myReviewState (pending/reviewed/approved/unapproved, nullable) fields on every MR in list_my_merge_requests output. Consumers can now filter actionable reviews from already-handled ones without additional API calls.

Changed: The GraphQL query now fetches approvedBy and reviewers with mergeRequestInteraction on all three MR lists (reviewer, assigned, authored). This adds ~200 bytes per MR to the response but no additional API round-trips. The assigned and authored lists now also populate the commented field (previously always false due to missing currentUser param).

Upgrade note: Schema is additive only. Existing model instances work without reconfiguration. Previously stored dashboard resources will be overwritten on next method call.

2026.07.10.1

2026.07.10.1

Added: unassign_from_mrs(project, iids, username?) — remove an assignee (default: the authenticated user) from multiple MRs in a single fan-out call. Uses GraphQL mergeRequestSetAssignees with operationMode: REMOVE, so other assignees are preserved; it is idempotent, and per-MR failures are recorded in a failed[] list rather than aborting the batch. Complements set_mr_assignees (REPLACE, single MR) for the common "clear my review queue" case without a read-modify-write. Writes a new unassignResult resource.

2026.07.08.4

Added: MR note management and assignee control.

  • update_mr_note(project, iid, noteId, body) — edit an MR comment by id (GraphQL updateNote).
  • delete_mr_note(project, iid, noteId) — remove an MR comment by id (GraphQL destroyNote). Previously a comment could be created but not deleted in-model.
  • set_mr_assignees(project, iid, usernames) — set/replace assignees by username (GraphQL mergeRequestSetAssignees, operationMode: REPLACE); pass an empty list to unassign. GitLab CE keeps a single assignee; EE/Premium support multiple.

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can go straight from a blocked MR to its failed jobs.

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's detailed_merge_status, with a plain-English summary and blockers list (answers "why can't this MR merge?": need_rebase, conflict, ci_must_pass, not_approved, discussions_not_resolved, draft, …).
  • rebase_merge_request — trigger a rebase of an MR's source branch onto its target (REST), polling until it finishes (rebased), errors (error with merge_error), or is still running (in_progress). Supports skipCi.

2026.07.08.1

Added:

  • list_mr_notes — list the discussion notes/comments on a merge request (mirrors list_issue_notes; writes the shared notes resource with noteableType: "merge_request").
  • mark_todo_done — mark a GitLab to-do as done via the todoMarkDone mutation, so handled items drop off the pending queue. Accepts either the gid://gitlab/Todo/NNN form or a bare numeric id.

2026.06.26.1

Added: approvedByMe (boolean) and myReviewState (pending/reviewed/approved/unapproved, nullable) fields on every MR in list_my_merge_requests output. Consumers can now filter actionable reviews from already-handled ones without additional API calls.

Changed: The GraphQL query now fetches approvedBy and reviewers with mergeRequestInteraction on all three MR lists (reviewer, assigned, authored). This adds ~200 bytes per MR to the response but no additional API round-trips. The assigned and authored lists now also populate the commented field (previously always false due to missing currentUser param).

Upgrade note: Schema is additive only. Existing model instances work without reconfiguration. Previously stored dashboard resources will be overwritten on next method call.

Modified 1 models

2026.07.08.4

2026.07.08.4

Added: MR note management and assignee control.

  • update_mr_note(project, iid, noteId, body) — edit an MR comment by id (GraphQL updateNote).
  • delete_mr_note(project, iid, noteId) — remove an MR comment by id (GraphQL destroyNote). Previously a comment could be created but not deleted in-model.
  • set_mr_assignees(project, iid, usernames) — set/replace assignees by username (GraphQL mergeRequestSetAssignees, operationMode: REPLACE); pass an empty list to unassign. GitLab CE keeps a single assignee; EE/Premium support multiple.

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can go straight from a blocked MR to its failed jobs.

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's detailed_merge_status, with a plain-English summary and blockers list (answers "why can't this MR merge?": need_rebase, conflict, ci_must_pass, not_approved, discussions_not_resolved, draft, …).
  • rebase_merge_request — trigger a rebase of an MR's source branch onto its target (REST), polling until it finishes (rebased), errors (error with merge_error), or is still running (in_progress). Supports skipCi.

2026.07.08.1

Added:

  • list_mr_notes — list the discussion notes/comments on a merge request (mirrors list_issue_notes; writes the shared notes resource with noteableType: "merge_request").
  • mark_todo_done — mark a GitLab to-do as done via the todoMarkDone mutation, so handled items drop off the pending queue. Accepts either the gid://gitlab/Todo/NNN form or a bare numeric id.

2026.06.26.1

Added: approvedByMe (boolean) and myReviewState (pending/reviewed/approved/unapproved, nullable) fields on every MR in list_my_merge_requests output. Consumers can now filter actionable reviews from already-handled ones without additional API calls.

Changed: The GraphQL query now fetches approvedBy and reviewers with mergeRequestInteraction on all three MR lists (reviewer, assigned, authored). This adds ~200 bytes per MR to the response but no additional API round-trips. The assigned and authored lists now also populate the commented field (previously always false due to missing currentUser param).

Upgrade note: Schema is additive only. Existing model instances work without reconfiguration. Previously stored dashboard resources will be overwritten on next method call.

Modified 1 models

2026.07.08.3

2026.07.08.3

Added: CI-failure diagnosis for merge requests.

  • get_pipeline_jobs(project, pipelineId, scope=failed) — list a pipeline's jobs with GitLab's failure_reason, so a caller can tell a transient failure (runner_system_failure, stuck_or_timeout_failure, job_execution_timeout, api_failure) from a real one (script_failure).
  • get_job_log(project, jobId, tailLines=200) — the tail of a job's trace, to diagnose why it failed (never the whole log).
  • retry_job(project, jobId) / retry_pipeline(project, pipelineId) — re-run CI after a transient failure.
  • get_merge_request now also returns headPipelineId, so you can go straight from a blocked MR to its failed jobs.

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's detailed_merge_status, with a plain-English summary and blockers list (answers "why can't this MR merge?": need_rebase, conflict, ci_must_pass, not_approved, discussions_not_resolved, draft, …).
  • rebase_merge_request — trigger a rebase of an MR's source branch onto its target (REST), polling until it finishes (rebased), errors (error with merge_error), or is still running (in_progress). Supports skipCi.

2026.07.08.1

Added:

  • list_mr_notes — list the discussion notes/comments on a merge request (mirrors list_issue_notes; writes the shared notes resource with noteableType: "merge_request").
  • mark_todo_done — mark a GitLab to-do as done via the todoMarkDone mutation, so handled items drop off the pending queue. Accepts either the gid://gitlab/Todo/NNN form or a bare numeric id.

2026.06.26.1

Added: approvedByMe (boolean) and myReviewState (pending/reviewed/approved/unapproved, nullable) fields on every MR in list_my_merge_requests output. Consumers can now filter actionable reviews from already-handled ones without additional API calls.

Changed: The GraphQL query now fetches approvedBy and reviewers with mergeRequestInteraction on all three MR lists (reviewer, assigned, authored). This adds ~200 bytes per MR to the response but no additional API round-trips. The assigned and authored lists now also populate the commented field (previously always false due to missing currentUser param).

Upgrade note: Schema is additive only. Existing model instances work without reconfiguration. Previously stored dashboard resources will be overwritten on next method call.

Modified 1 models

2026.07.08.2

2026.07.08.2

Added:

  • get_merge_request — report an MR's mergeability via GitLab's detailed_merge_status, with a plain-English summary and blockers list (answers "why can't this MR merge?": need_rebase, conflict, ci_must_pass, not_approved, discussions_not_resolved, draft, …).
  • rebase_merge_request — trigger a rebase of an MR's source branch onto its target (REST), polling until it finishes (rebased), errors (error with merge_error), or is still running (in_progress). Supports skipCi.

2026.07.08.1

Added:

  • list_mr_notes — list the discussion notes/comments on a merge request (mirrors list_issue_notes; writes the shared notes resource with noteableType: "merge_request").
  • mark_todo_done — mark a GitLab to-do as done via the todoMarkDone mutation, so handled items drop off the pending queue. Accepts either the gid://gitlab/Todo/NNN form or a bare numeric id.

2026.06.26.1

Added: approvedByMe (boolean) and myReviewState (pending/reviewed/approved/unapproved, nullable) fields on every MR in list_my_merge_requests output. Consumers can now filter actionable reviews from already-handled ones without additional API calls.

Changed: The GraphQL query now fetches approvedBy and reviewers with mergeRequestInteraction on all three MR lists (reviewer, assigned, authored). This adds ~200 bytes per MR to the response but no additional API round-trips. The assigned and authored lists now also populate the commented field (previously always false due to missing currentUser param).

Upgrade note: Schema is additive only. Existing model instances work without reconfiguration. Previously stored dashboard resources will be overwritten on next method call.

Modified 1 models

2026.07.08.1

2026.07.08.1

Added:

  • list_mr_notes — list the discussion notes/comments on a merge request (mirrors list_issue_notes; writes the shared notes resource with noteableType: "merge_request").
  • mark_todo_done — mark a GitLab to-do as done via the todoMarkDone mutation, so handled items drop off the pending queue. Accepts either the gid://gitlab/Todo/NNN form or a bare numeric id.

2026.06.26.1

Added: approvedByMe (boolean) and myReviewState (pending/reviewed/approved/unapproved, nullable) fields on every MR in list_my_merge_requests output. Consumers can now filter actionable reviews from already-handled ones without additional API calls.

Changed: The GraphQL query now fetches approvedBy and reviewers with mergeRequestInteraction on all three MR lists (reviewer, assigned, authored). This adds ~200 bytes per MR to the response but no additional API round-trips. The assigned and authored lists now also populate the commented field (previously always false due to missing currentUser param).

Upgrade note: Schema is additive only. Existing model instances work without reconfiguration. Previously stored dashboard resources will be overwritten on next method call.

Modified 1 models

2026.06.26.1
2026.06.24.4
2026.06.15.1
2026.06.12.1

Modified 1 models. Added 1 reports. updated labels

06Stats
A
100 / 100
Downloads
62
Archive size
58.1 KB
  • Has README or module doc2/2earned
  • README has a code example1/1earned
  • README is substantive1/1earned
  • Most symbols documented1/1earned
  • No slow types (deprecated)1/1earned
  • Dependencies pass trust audit2/2earned
  • Has description1/1earned
  • Platform support declared (or universal)2/2earned
  • License declared1/1earned
  • Verified public repository2/2earned
07Platforms
08Labels