Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
384 changes: 384 additions & 0 deletions apps/loopover-ui/public/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -14856,6 +14856,210 @@
"login",
"marked"
]
},
"ListPendingActionsResponse": {
"type": "object",
"properties": {
"repoFullName": {
"type": "string"
},
"status": {
"type": "string"
},
"pendingActions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"actionClass": {
"type": "string"
},
"pullNumber": {
"type": "number"
},
"status": {
"type": "string"
},
"autonomyLevel": {
"type": "string"
},
"reason": {
"type": "string",
"nullable": true
},
"decidedBy": {
"type": "string",
"nullable": true
},
"decidedAt": {
"type": "string",
"nullable": true
},
"createdAt": {
"type": "string"
}
},
"required": [
"id",
"actionClass",
"pullNumber",
"status",
"autonomyLevel",
"reason",
"decidedBy",
"decidedAt",
"createdAt"
]
}
}
}
},
"ProposeActionRequest": {
"type": "object",
"properties": {
"pullNumber": {
"type": "integer",
"minimum": 0,
"exclusiveMinimum": true
},
"actionClass": {
"type": "string",
"enum": [
"review",
"request_changes",
"approve",
"merge",
"close",
"label",
"review_state_label"
]
},
"reason": {
"type": "string",
"maxLength": 500
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"reviewBody": {
"type": "string",
"maxLength": 60000
},
"mergeMethod": {
"type": "string",
"enum": [
"merge",
"squash",
"rebase"
]
},
"closeComment": {
"type": "string",
"maxLength": 60000
}
},
"required": [
"pullNumber",
"actionClass"
]
},
"ProposeActionResponse": {
"type": "object",
"properties": {
"created": {
"type": "boolean"
},
"action": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"actionClass": {
"type": "string"
},
"pullNumber": {
"type": "number"
},
"status": {
"type": "string"
},
"reason": {
"type": "string",
"nullable": true
}
},
"required": [
"id",
"actionClass",
"pullNumber",
"status",
"reason"
]
}
}
},
"DecidePendingActionResponse": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"executionOutcome": {
"type": "string"
},
"action": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"actionClass": {
"type": "string"
},
"pullNumber": {
"type": "number"
},
"status": {
"type": "string"
},
"autonomyLevel": {
"type": "string"
},
"reason": {
"type": "string",
"nullable": true
},
"decidedBy": {
"type": "string",
"nullable": true
},
"decidedAt": {
"type": "string",
"nullable": true
},
"createdAt": {
"type": "string"
}
},
"required": [
"id",
"actionClass",
"pullNumber",
"status",
"autonomyLevel",
"reason",
"decidedBy",
"decidedAt",
"createdAt"
]
}
}
}
},
"parameters": {},
Expand Down Expand Up @@ -19437,6 +19641,186 @@
}
]
}
},
"/v1/repos/{owner}/{repo}/agent/pending-actions": {
"get": {
"summary": "Maintainer-scoped agent approval queue of pending staged actions",
"parameters": [
{
"schema": {
"type": "string"
},
"required": true,
"name": "owner",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "repo",
"in": "path"
}
],
"responses": {
"200": {
"description": "Pending agent actions staged for maintainer approval (#784), mirroring the loopover_list_pending_actions MCP tool.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ListPendingActionsResponse"
}
}
}
},
"403": {
"description": "Insufficient role"
}
},
"security": [
{
"LoopOverBearer": []
},
{
"LoopOverSessionCookie": []
}
]
},
"post": {
"summary": "Stage an agent action into the approval queue for maintainer review",
"parameters": [
{
"schema": {
"type": "string"
},
"required": true,
"name": "owner",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "repo",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProposeActionRequest"
}
}
}
},
"responses": {
"200": {
"description": "The staged (or already-present) pending action (#6744), mirroring the loopover_propose_action MCP tool VERBATIM.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProposeActionResponse"
}
}
}
},
"400": {
"description": "Malformed propose-action request body"
},
"403": {
"description": "Insufficient role"
},
"409": {
"description": "The LoopOver App is not installed on this repository"
}
},
"security": [
{
"LoopOverBearer": []
},
{
"LoopOverSessionCookie": []
}
]
}
},
"/v1/repos/{owner}/{repo}/agent/pending-actions/{id}/{decision}": {
"post": {
"summary": "Accept (execute) or reject a staged agent action in the approval queue",
"parameters": [
{
"schema": {
"type": "string"
},
"required": true,
"name": "owner",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "repo",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"accept",
"reject"
]
},
"required": true,
"name": "decision",
"in": "path"
}
],
"responses": {
"200": {
"description": "The decided action's outcome (#779): accept executes it live, reject cancels it. Mirrors the loopover_decide_pending_action MCP tool.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecidePendingActionResponse"
}
}
}
},
"400": {
"description": "Decision is not 'accept' or 'reject'"
},
"403": {
"description": "Insufficient role"
},
"404": {
"description": "Pending action not found for this repository"
},
"409": {
"description": "Pending action was already decided"
}
},
"security": [
{
"LoopOverBearer": []
},
{
"LoopOverSessionCookie": []
}
]
}
}
},
"servers": [
Expand Down
Loading
Loading