InfoGrab DocsInfoGrab Docs

플로 API

요약

이 API를 사용하여 GitLab Duo Agent Platform에서 플로를 생성하고 관리합니다. 복합 ID 서비스 계정 요구 조건은 기능 플래그로 제어됩니다. 성공하면 201 Created와 다음 응답 속성을 반환합니다.

이 API를 사용하여 GitLab Duo Agent Platform에서 플로를 생성하고 관리합니다. 플로는 버그 수정, 코드 작성, 취약점 해결과 같은 개발 작업을 완료하기 위해 여러 AI 에이전트를 조합한 것입니다.

플로 트리거#

히스토리
  • start_workflow가 true 일 때 복합 ID(composite identity) 서비스 계정을 요구하는 조건이 GitLab 19.4에서 enforce_composite_identity_for_api_started_workflows라는 이름의 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
  • callback_hook_id 및 client_reference 속성이 GitLab 19.4에서 duo_flow_callback_hooks라는 이름의 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
  • GitLab 19.5에서 일반 공개되었습니다.
Feature flag

복합 ID 서비스 계정 요구 조건은 기능 플래그로 제어됩니다. callback_hook_id 및 client_reference 속성의 사용 가능 여부는 별도의 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

새 플로를 트리거하고 시작합니다.

사전 요구 사항:

  • enforce_composite_identity_for_api_started_workflows 기능 플래그가 활성화되어 있고 start_workflow가 true 이면, 해당 플로에 복합 ID 서비스 계정이 있어야 합니다. 이 서비스 계정은 AI Catalog에서 플로에 구성된 계정이거나, 요청의 복합 ID 뒤에 있는 서비스 계정입니다. 그렇지 않으면 GitLab 이 403 Forbidden을 반환하고 플로를 시작하지 않습니다.
POST /ai/duo_workflows/workflows

지원되는 속성:

속성 유형 필수 여부 설명
additional_context array of objects 아니요 플로에 제공할 추가 컨텍스트입니다. 각 요소는 최소한 Category(string)와 Content(string, 직렬화된 JSON) 키를 가진 객체여야 합니다.
agent_privileges integer array 아니요 에이전트가 사용할 수 있는 권한 ID 입니다. 기본값은 모든 권한입니다. 모든 에이전트 권한 조회를 참고합니다.
ai_catalog_item_consumer_id integer 아니요 실행할 카탈로그 항목을 지정하는 AI Catalog 항목 소비자의 ID 입니다. project_id가 필요합니다. workflow_definition과 함께 사용할 수 없으며, 둘 다 제공되면 ai_catalog_item_consumer_id가 우선합니다. 소비자 ID 조회를 참고합니다.
ai_catalog_item_version_id integer 아니요 플로 구성의 출처가 된 AI Catalog 항목 버전의 ID 입니다.
allow_agent_to_request_user boolean 아니요 true(기본값)이면 에이전트가 진행하기 전에 사용자에게 질문하기 위해 일시 중지할 수 있습니다. false 이면 사용자 입력 없이 끝까지 실행합니다.
callback_hook_id integer 아니요 GitLab Duo 플로 웹훅 콜백이 켜진 웹훅의 ID 입니다. GitLab 이 해당 웹훅으로 플로 수명 주기 이벤트를 전송하므로 플로 상태를 폴링할 필요가 없습니다. 웹훅은 플로가 실행되는 프로젝트나 네임스페이스, 또는 그 상위 그룹 중 하나에 속해야 합니다. 이 속성은 실험 기능입니다.
client_reference string 아니요 모든 콜백 페이로드에 그대로 반환되는 불투명 문자열로, 콜백과 플로를 트리거한 요청을 연결하는 데 사용합니다. 최대 255자입니다. callback_hook_id가 없으면 적용되지 않습니다. 이 속성은 실험 기능입니다.
environment string 아니요 실행 환경입니다. ide, web, chat_partial, chat, ambient 중 하나입니다.
goal string 아니요 에이전트가 완료할 작업에 대한 설명입니다. 예: Fix the failing pipeline.
image string 아니요 플로에 사용할 컨테이너 이미지입니다. 플로가 CI 파이프라인에서 실행될 때만 적용됩니다. 사용자 지정 이미지 요구 사항을 충족해야 합니다. 예: registry.gitlab.com/gitlab-org/duo-workflow/custom-image:latest.
issue_id integer 아니요 플로와 연결할 이슈의 IID 입니다. project_id가 필요합니다.
merge_request_id integer 아니요 플로와 연결할 머지 리퀘스트의 IID 입니다. project_id가 필요합니다.
namespace_id string 아니요 플로와 연결할 네임스페이스의 ID 또는 경로입니다.
pre_approved_agent_privileges integer array 아니요 에이전트가 사용자 승인을 요청하지 않고 사용할 수 있는 권한 ID 입니다. agent_privileges의 부분 집합이어야 합니다.
project_id string 아니요 플로와 연결할 프로젝트의 ID 또는 경로입니다.
source string 아니요 세션이 트리거된 위치입니다. GitLab 기능 진입점(예: merge_request_code_conflict) 중 하나 또는 세션을 생성한 클라이언트 화면(duo_cli_interactive, duo_cli_run, duo_cli_acp, ide_extension) 중 하나입니다. 세션의 source_type으로 저장됩니다.
source_branch string 아니요 플로의 소스 브랜치입니다. 플로가 CI 파이프라인에서 실행될 때만 적용됩니다. 지정하지 않으면 fix_pipeline/v1 또는 code_review/v1처럼 목표가 파이프라인이나 머지 리퀘스트인 플로는 해당 파이프라인 또는 머지 리퀘스트의 브랜치에서 실행됩니다. fix_pipeline/v1의 경우 additional_context의 merge_request 및 pipeline 항목도 파이프라인에서 채워집니다. 다른 플로는 프로젝트의 기본 브랜치에서 실행됩니다.
start_workflow boolean 아니요 true 이면 생성 직후 플로를 시작합니다.
workflow_definition string 아니요 플로 유형 식별자입니다. 예: developer/v1. ai_catalog_item_consumer_id와 함께 사용할 수 없으며, 둘 다 제공되면 ai_catalog_item_consumer_id가 우선합니다.

성공하면 201 Created와 다음 응답 속성을 반환합니다.

속성 유형 설명
agent_privileges integer array 에이전트에 할당된 권한 ID 입니다.
agent_privileges_names string array agent_privileges에 대응하는 이름입니다.
ai_catalog_item_version_id integer AI Catalog 항목 버전의 ID 입니다. 설정되지 않은 경우 null 입니다.
allow_agent_to_request_user boolean true 이면 에이전트가 사용자 입력을 위해 일시 중지할 수 있습니다.
environment string 실행 환경입니다. 설정되지 않은 경우 null 입니다.
gitlab_url string GitLab 인스턴스의 기본 URL 입니다.
id integer 플로의 ID 입니다.
image string CI 파이프라인 실행에 사용할 컨테이너 이미지입니다. 설정되지 않은 경우 null 입니다.
mcp_enabled boolean 이 플로에서 MCP(Model Context Protocol) 도구가 활성화되어 있는지 여부입니다.
namespace_id integer 연결된 네임스페이스의 ID 입니다. 설정되지 않은 경우 null 입니다.
pre_approved_agent_privileges integer array 에이전트가 승인을 요청하지 않고 사용할 수 있는 권한 ID 입니다.
pre_approved_agent_privileges_names string array pre_approved_agent_privileges에 대응하는 이름입니다.
project_id integer 연결된 프로젝트의 ID 입니다. 설정되지 않은 경우 null 입니다.
status string 현재 플로 상태입니다. created, running, paused, finished, failed, stopped, input_required, plan_approval_required, tool_call_approval_required 중 하나입니다. GitLab에서 새 값을 추가할 수 있습니다.
summary string 워크플로의 짧은 텍스트 요약입니다.
title string 세션의 제목입니다.
web_url string GitLab UI에서 세션의 URL입니다. 세션이 프로젝트용이 아니면 null입니다.
workflow_definition string 플로 유형 식별자입니다.
workload object 워크로드에 대한 정보입니다.
workload.id integer 워크로드의 ID입니다. start_workflow가 true가 아닌 경우처럼 워크로드가 생성되지 않았다면 null입니다.
workload.message string 워크로드의 상태 메시지입니다. 워크로드가 생성되지 않았다면 null입니다.

GitLab Duo Agent Platform을 사용하기 전에 사용자가 ID 확인을 완료해야 하는 경우, GitLab은 403 Forbidden과 함께 다음 message를 반환합니다.

{
  "message": "403 Forbidden - Identity verification is required to use GitLab Duo Agent Platform"
}

callback_hook_id가 설정되어 있고 다음 중 하나에 해당하면 GitLab은 400 Bad request를 반환합니다.

  • 플로가 실행되는 프로젝트나 네임스페이스의 최상위 그룹에 duo_flow_callback_hooks 기능 플래그가 활성화되어 있지 않은 경우.
  • 해당 ID가 플로가 실행되는 프로젝트나 네임스페이스, 또는 그 상위 그룹 중 하나에서 GitLab Duo 플로 콜백이 켜진 웹훅을 가리키지 않는 경우.

소비자 ID 조회#

ai_catalog_item_consumer_id를 사용하려면 먼저 GraphQL API로 AI Catalog에서 해당 ID를 조회해야 합니다. 해당 항목은 프로젝트에 이미 활성화되어 있어야 합니다.

query {
  aiCatalogConfiguredItems(projectId: "gid://gitlab/Project/<project_id>") {
    nodes {
      id
      item { name }
    }
  }
}

id 필드는 gid://gitlab/AiCatalogItemConsumer/<numeric_id> 형식의 전역 ID 입니다. 끝의 숫자 부분을 ai_catalog_item_consumer_id 값으로 사용합니다.

기본 제공 플로 유형을 사용하는 요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "project_id": "5",
    "goal": "Fix the failing pipeline by correcting the syntax error in .gitlab-ci.yml",
    "workflow_definition": "developer/v1",
    "start_workflow": true
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows"

카탈로그에 구성된 플로를 사용하는 요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "project_id": "5",
    "goal": "Fix the failing pipeline by correcting the syntax error in .gitlab-ci.yml",
    "ai_catalog_item_consumer_id": 12,
    "start_workflow": true
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows"

응답 예시:

{
  "id": 1,
  "web_url": "https://gitlab.example.com/group/project/-/automate/agent-sessions/1",
  "project_id": 5,
  "namespace_id": null,
  "agent_privileges": [1, 2, 3, 4, 5, 6],
  "agent_privileges_names": [
    "read_write_files",
    "read_only_gitlab",
    "read_write_gitlab",
    "run_commands",
    "use_git",
    "run_mcp_tools"
  ],
  "pre_approved_agent_privileges": [],
  "pre_approved_agent_privileges_names": [],
  "workflow_definition": "developer/v1",
  "status": "running",
  "allow_agent_to_request_user": true,
  "image": null,
  "environment": null,
  "ai_catalog_item_version_id": null,
  "workload": {
    "id": "abc-123",
    "message": "Workflow started"
  },
  "mcp_enabled": false,
  "gitlab_url": "https://gitlab.example.com"
}

플로 재시작#

실패했거나 중지된 플로를 같은 플로 파라미터로 새 플로를 시작하여 다시 시작합니다. 새 플로는 처음부터 실행됩니다. 원래 플로는 변경되지 않으며 failed 또는 stopped 상태로 유지됩니다.

상태가 failed 또는 stopped인 프로젝트 수준 플로만 재시작할 수 있습니다. 그 밖의 상태인 플로나 그룹 수준 플로를 재시작하면 403 Forbidden을 반환합니다. 재시작이 아직 진행 중인 상태에서 같은 플로를 다시 재시작하면 409 Conflict를 반환합니다.

POST /ai/duo_workflows/workflows/:workflow_id/restart

지원하는 속성:

속성 유형 필수 여부 설명
workflow_id integer 예 재시작할 플로의 ID입니다.

성공하면 201 Created와 플로 트리거와 같은 응답 속성을 반환합니다. 응답은 새 플로를 설명하므로 id는 재시작한 플로가 아니라 새 플로의 ID입니다.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/42/restart"

워크플로 트레이스를 JSONL로 가져오기#

워크플로 세션의 ui_chat_log 항목을 JSON Lines(JSONL) 형식으로 반환합니다. 각 줄은 ui_chat_log 배열의 항목 하나를 나타내는 유효한 JSON 객체입니다. 트레이스를 파싱하거나 jq 같은 도구로 전달할 때 이 엔드포인트를 사용합니다.

기본적으로 이 엔드포인트는 컨텍스트 압축 이전의 메시지를 포함하여 세션의 모든 스레드에 걸친 전체 대화를 반환합니다. 단일 스레드만 반환하려면 thread 속성을 사용합니다.

GET /ai/duo_workflows/workflows/:workflow_id/trace.jsonl

지원되는 속성:

속성 유형 필수 여부 설명
workflow_id integer 예 워크플로의 ID 입니다.
thread string 아니요 반환할 스레드입니다. 모든 스레드에 걸친 전체 트레이스를 받으려면 생략합니다. 가장 최근 스레드만 받으려면 latest를, 특정 스레드를 받으려면 스레드 ID를 사용합니다.

성공하면 200 OK와 함께 다음을 반환합니다.

  • Content-Type: application/x-ndjson
  • Body: 한 줄에 JSON 객체 하나씩이며, 각 객체는 ui_chat_log 항목 하나를 나타냅니다. 워크플로에 체크포인트가 없거나 ui_chat_log 항목이 없으면 빈 본문을 반환합니다.

GitLab Duo Agent Platform을 사용하기 전에 사용자가 ID 확인을 완료해야 하는 경우, GitLab은 403 Forbidden과 함께 다음 message를 반환합니다.

{
  "message": "403 Forbidden - Identity verification is required to use GitLab Duo Agent Platform"
}

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/1/trace.jsonl"

응답 예시(각 줄이 별도의 JSON 객체입니다):

{"status":"success","content":"Analyze the issue","message_type":"human"}
{"status":"success","content":"I'll start by reading the codebase.","message_type":"ai"}

출력을 jq로 전달하여 유형별로 항목을 필터링할 수 있습니다.

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/1/trace.jsonl" \
  | jq 'select(.message_type == "ai")'

모든 에이전트 권한 조회#

사용 가능한 모든 에이전트 권한을 ID, 이름, 설명, 기본 활성화 여부와 함께 조회합니다.

GET /ai/duo_workflows/workflows/agent_privileges

이 엔드포인트에는 지원되는 속성이 없습니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다.

속성 유형 설명
all_privileges array of objects 사용 가능한 모든 에이전트 권한입니다.
all_privileges[].default_enabled boolean 해당 권한이 기본적으로 활성화되어 있는지 여부입니다.
all_privileges[].description string 해당 권한이 허용하는 내용에 대한 설명입니다.
all_privileges[].id integer 권한 ID 입니다.
all_privileges[].name string 기계가 읽을 수 있는 권한 이름입니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/agent_privileges"

응답 예시:

{
  "all_privileges": [
    {
      "id": 1,
      "name": "read_write_files",
      "description": "Allow local filesystem read/write access",
      "default_enabled": true
    },
    {
      "id": 2,
      "name": "read_only_gitlab",
      "description": "Allow read only access to GitLab APIs",
      "default_enabled": true
    },
    {
      "id": 3,
      "name": "read_write_gitlab",
      "description": "Allow write access to GitLab APIs",
      "default_enabled": true
    },
    {
      "id": 4,
      "name": "run_commands",
      "description": "Allow running any commands",
      "default_enabled": true
    },
    {
      "id": 5,
      "name": "use_git",
      "description": "Allow git commits, push and other git commands",
      "default_enabled": true
    },
    {
      "id": 6,
      "name": "run_mcp_tools",
      "description": "Allow running MCP tools",
      "default_enabled": true
    }
  ]
}

플로 API

GitLab v19.5
Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

이 API를 사용하여 GitLab Duo Agent Platform에서 플로를 생성하고 관리합니다. 복합 ID 서비스 계정 요구 조건은 기능 플래그로 제어됩니다. 성공하면 201 Created와 다음 응답 속성을 반환합니다.

이 API를 사용하여 GitLab Duo Agent Platform에서 플로를 생성하고 관리합니다. 플로는 버그 수정, 코드 작성, 취약점 해결과 같은 개발 작업을 완료하기 위해 여러 AI 에이전트를 조합한 것입니다.

플로 트리거#

히스토리
  • start_workflow가 true 일 때 복합 ID(composite identity) 서비스 계정을 요구하는 조건이 GitLab 19.4에서 enforce_composite_identity_for_api_started_workflows라는 이름의 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
  • callback_hook_id 및 client_reference 속성이 GitLab 19.4에서 duo_flow_callback_hooks라는 이름의 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
  • GitLab 19.5에서 일반 공개되었습니다.
Feature flag

복합 ID 서비스 계정 요구 조건은 기능 플래그로 제어됩니다. callback_hook_id 및 client_reference 속성의 사용 가능 여부는 별도의 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

새 플로를 트리거하고 시작합니다.

사전 요구 사항:

  • enforce_composite_identity_for_api_started_workflows 기능 플래그가 활성화되어 있고 start_workflow가 true 이면, 해당 플로에 복합 ID 서비스 계정이 있어야 합니다. 이 서비스 계정은 AI Catalog에서 플로에 구성된 계정이거나, 요청의 복합 ID 뒤에 있는 서비스 계정입니다. 그렇지 않으면 GitLab 이 403 Forbidden을 반환하고 플로를 시작하지 않습니다.
POST /ai/duo_workflows/workflows

지원되는 속성:

속성 유형 필수 여부 설명
additional_context array of objects 아니요 플로에 제공할 추가 컨텍스트입니다. 각 요소는 최소한 Category(string)와 Content(string, 직렬화된 JSON) 키를 가진 객체여야 합니다.
agent_privileges integer array 아니요 에이전트가 사용할 수 있는 권한 ID 입니다. 기본값은 모든 권한입니다. 모든 에이전트 권한 조회를 참고합니다.
ai_catalog_item_consumer_id integer 아니요 실행할 카탈로그 항목을 지정하는 AI Catalog 항목 소비자의 ID 입니다. project_id가 필요합니다. workflow_definition과 함께 사용할 수 없으며, 둘 다 제공되면 ai_catalog_item_consumer_id가 우선합니다. 소비자 ID 조회를 참고합니다.
ai_catalog_item_version_id integer 아니요 플로 구성의 출처가 된 AI Catalog 항목 버전의 ID 입니다.
allow_agent_to_request_user boolean 아니요 true(기본값)이면 에이전트가 진행하기 전에 사용자에게 질문하기 위해 일시 중지할 수 있습니다. false 이면 사용자 입력 없이 끝까지 실행합니다.
callback_hook_id integer 아니요 GitLab Duo 플로 웹훅 콜백이 켜진 웹훅의 ID 입니다. GitLab 이 해당 웹훅으로 플로 수명 주기 이벤트를 전송하므로 플로 상태를 폴링할 필요가 없습니다. 웹훅은 플로가 실행되는 프로젝트나 네임스페이스, 또는 그 상위 그룹 중 하나에 속해야 합니다. 이 속성은 실험 기능입니다.
client_reference string 아니요 모든 콜백 페이로드에 그대로 반환되는 불투명 문자열로, 콜백과 플로를 트리거한 요청을 연결하는 데 사용합니다. 최대 255자입니다. callback_hook_id가 없으면 적용되지 않습니다. 이 속성은 실험 기능입니다.
environment string 아니요 실행 환경입니다. ide, web, chat_partial, chat, ambient 중 하나입니다.
goal string 아니요 에이전트가 완료할 작업에 대한 설명입니다. 예: Fix the failing pipeline.
image string 아니요 플로에 사용할 컨테이너 이미지입니다. 플로가 CI 파이프라인에서 실행될 때만 적용됩니다. 사용자 지정 이미지 요구 사항을 충족해야 합니다. 예: registry.gitlab.com/gitlab-org/duo-workflow/custom-image:latest.
issue_id integer 아니요 플로와 연결할 이슈의 IID 입니다. project_id가 필요합니다.
merge_request_id integer 아니요 플로와 연결할 머지 리퀘스트의 IID 입니다. project_id가 필요합니다.
namespace_id string 아니요 플로와 연결할 네임스페이스의 ID 또는 경로입니다.
pre_approved_agent_privileges integer array 아니요 에이전트가 사용자 승인을 요청하지 않고 사용할 수 있는 권한 ID 입니다. agent_privileges의 부분 집합이어야 합니다.
project_id string 아니요 플로와 연결할 프로젝트의 ID 또는 경로입니다.
source string 아니요 세션이 트리거된 위치입니다. GitLab 기능 진입점(예: merge_request_code_conflict) 중 하나 또는 세션을 생성한 클라이언트 화면(duo_cli_interactive, duo_cli_run, duo_cli_acp, ide_extension) 중 하나입니다. 세션의 source_type으로 저장됩니다.
source_branch string 아니요 플로의 소스 브랜치입니다. 플로가 CI 파이프라인에서 실행될 때만 적용됩니다. 지정하지 않으면 fix_pipeline/v1 또는 code_review/v1처럼 목표가 파이프라인이나 머지 리퀘스트인 플로는 해당 파이프라인 또는 머지 리퀘스트의 브랜치에서 실행됩니다. fix_pipeline/v1의 경우 additional_context의 merge_request 및 pipeline 항목도 파이프라인에서 채워집니다. 다른 플로는 프로젝트의 기본 브랜치에서 실행됩니다.
start_workflow boolean 아니요 true 이면 생성 직후 플로를 시작합니다.
workflow_definition string 아니요 플로 유형 식별자입니다. 예: developer/v1. ai_catalog_item_consumer_id와 함께 사용할 수 없으며, 둘 다 제공되면 ai_catalog_item_consumer_id가 우선합니다.

성공하면 201 Created와 다음 응답 속성을 반환합니다.

속성 유형 설명
agent_privileges integer array 에이전트에 할당된 권한 ID 입니다.
agent_privileges_names string array agent_privileges에 대응하는 이름입니다.
ai_catalog_item_version_id integer AI Catalog 항목 버전의 ID 입니다. 설정되지 않은 경우 null 입니다.
allow_agent_to_request_user boolean true 이면 에이전트가 사용자 입력을 위해 일시 중지할 수 있습니다.
environment string 실행 환경입니다. 설정되지 않은 경우 null 입니다.
gitlab_url string GitLab 인스턴스의 기본 URL 입니다.
id integer 플로의 ID 입니다.
image string CI 파이프라인 실행에 사용할 컨테이너 이미지입니다. 설정되지 않은 경우 null 입니다.
mcp_enabled boolean 이 플로에서 MCP(Model Context Protocol) 도구가 활성화되어 있는지 여부입니다.
namespace_id integer 연결된 네임스페이스의 ID 입니다. 설정되지 않은 경우 null 입니다.
pre_approved_agent_privileges integer array 에이전트가 승인을 요청하지 않고 사용할 수 있는 권한 ID 입니다.
pre_approved_agent_privileges_names string array pre_approved_agent_privileges에 대응하는 이름입니다.
project_id integer 연결된 프로젝트의 ID 입니다. 설정되지 않은 경우 null 입니다.
status string 현재 플로 상태입니다. created, running, paused, finished, failed, stopped, input_required, plan_approval_required, tool_call_approval_required 중 하나입니다. GitLab에서 새 값을 추가할 수 있습니다.
summary string 워크플로의 짧은 텍스트 요약입니다.
title string 세션의 제목입니다.
web_url string GitLab UI에서 세션의 URL입니다. 세션이 프로젝트용이 아니면 null입니다.
workflow_definition string 플로 유형 식별자입니다.
workload object 워크로드에 대한 정보입니다.
workload.id integer 워크로드의 ID입니다. start_workflow가 true가 아닌 경우처럼 워크로드가 생성되지 않았다면 null입니다.
workload.message string 워크로드의 상태 메시지입니다. 워크로드가 생성되지 않았다면 null입니다.

GitLab Duo Agent Platform을 사용하기 전에 사용자가 ID 확인을 완료해야 하는 경우, GitLab은 403 Forbidden과 함께 다음 message를 반환합니다.

{
  "message": "403 Forbidden - Identity verification is required to use GitLab Duo Agent Platform"
}

callback_hook_id가 설정되어 있고 다음 중 하나에 해당하면 GitLab은 400 Bad request를 반환합니다.

  • 플로가 실행되는 프로젝트나 네임스페이스의 최상위 그룹에 duo_flow_callback_hooks 기능 플래그가 활성화되어 있지 않은 경우.
  • 해당 ID가 플로가 실행되는 프로젝트나 네임스페이스, 또는 그 상위 그룹 중 하나에서 GitLab Duo 플로 콜백이 켜진 웹훅을 가리키지 않는 경우.

소비자 ID 조회#

ai_catalog_item_consumer_id를 사용하려면 먼저 GraphQL API로 AI Catalog에서 해당 ID를 조회해야 합니다. 해당 항목은 프로젝트에 이미 활성화되어 있어야 합니다.

query {
  aiCatalogConfiguredItems(projectId: "gid://gitlab/Project/<project_id>") {
    nodes {
      id
      item { name }
    }
  }
}

id 필드는 gid://gitlab/AiCatalogItemConsumer/<numeric_id> 형식의 전역 ID 입니다. 끝의 숫자 부분을 ai_catalog_item_consumer_id 값으로 사용합니다.

기본 제공 플로 유형을 사용하는 요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "project_id": "5",
    "goal": "Fix the failing pipeline by correcting the syntax error in .gitlab-ci.yml",
    "workflow_definition": "developer/v1",
    "start_workflow": true
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows"

카탈로그에 구성된 플로를 사용하는 요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "project_id": "5",
    "goal": "Fix the failing pipeline by correcting the syntax error in .gitlab-ci.yml",
    "ai_catalog_item_consumer_id": 12,
    "start_workflow": true
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows"

응답 예시:

{
  "id": 1,
  "web_url": "https://gitlab.example.com/group/project/-/automate/agent-sessions/1",
  "project_id": 5,
  "namespace_id": null,
  "agent_privileges": [1, 2, 3, 4, 5, 6],
  "agent_privileges_names": [
    "read_write_files",
    "read_only_gitlab",
    "read_write_gitlab",
    "run_commands",
    "use_git",
    "run_mcp_tools"
  ],
  "pre_approved_agent_privileges": [],
  "pre_approved_agent_privileges_names": [],
  "workflow_definition": "developer/v1",
  "status": "running",
  "allow_agent_to_request_user": true,
  "image": null,
  "environment": null,
  "ai_catalog_item_version_id": null,
  "workload": {
    "id": "abc-123",
    "message": "Workflow started"
  },
  "mcp_enabled": false,
  "gitlab_url": "https://gitlab.example.com"
}

플로 재시작#

실패했거나 중지된 플로를 같은 플로 파라미터로 새 플로를 시작하여 다시 시작합니다. 새 플로는 처음부터 실행됩니다. 원래 플로는 변경되지 않으며 failed 또는 stopped 상태로 유지됩니다.

상태가 failed 또는 stopped인 프로젝트 수준 플로만 재시작할 수 있습니다. 그 밖의 상태인 플로나 그룹 수준 플로를 재시작하면 403 Forbidden을 반환합니다. 재시작이 아직 진행 중인 상태에서 같은 플로를 다시 재시작하면 409 Conflict를 반환합니다.

POST /ai/duo_workflows/workflows/:workflow_id/restart

지원하는 속성:

속성 유형 필수 여부 설명
workflow_id integer 예 재시작할 플로의 ID입니다.

성공하면 201 Created와 플로 트리거와 같은 응답 속성을 반환합니다. 응답은 새 플로를 설명하므로 id는 재시작한 플로가 아니라 새 플로의 ID입니다.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/42/restart"

워크플로 트레이스를 JSONL로 가져오기#

워크플로 세션의 ui_chat_log 항목을 JSON Lines(JSONL) 형식으로 반환합니다. 각 줄은 ui_chat_log 배열의 항목 하나를 나타내는 유효한 JSON 객체입니다. 트레이스를 파싱하거나 jq 같은 도구로 전달할 때 이 엔드포인트를 사용합니다.

기본적으로 이 엔드포인트는 컨텍스트 압축 이전의 메시지를 포함하여 세션의 모든 스레드에 걸친 전체 대화를 반환합니다. 단일 스레드만 반환하려면 thread 속성을 사용합니다.

GET /ai/duo_workflows/workflows/:workflow_id/trace.jsonl

지원되는 속성:

속성 유형 필수 여부 설명
workflow_id integer 예 워크플로의 ID 입니다.
thread string 아니요 반환할 스레드입니다. 모든 스레드에 걸친 전체 트레이스를 받으려면 생략합니다. 가장 최근 스레드만 받으려면 latest를, 특정 스레드를 받으려면 스레드 ID를 사용합니다.

성공하면 200 OK와 함께 다음을 반환합니다.

  • Content-Type: application/x-ndjson
  • Body: 한 줄에 JSON 객체 하나씩이며, 각 객체는 ui_chat_log 항목 하나를 나타냅니다. 워크플로에 체크포인트가 없거나 ui_chat_log 항목이 없으면 빈 본문을 반환합니다.

GitLab Duo Agent Platform을 사용하기 전에 사용자가 ID 확인을 완료해야 하는 경우, GitLab은 403 Forbidden과 함께 다음 message를 반환합니다.

{
  "message": "403 Forbidden - Identity verification is required to use GitLab Duo Agent Platform"
}

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/1/trace.jsonl"

응답 예시(각 줄이 별도의 JSON 객체입니다):

{"status":"success","content":"Analyze the issue","message_type":"human"}
{"status":"success","content":"I'll start by reading the codebase.","message_type":"ai"}

출력을 jq로 전달하여 유형별로 항목을 필터링할 수 있습니다.

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/1/trace.jsonl" \
  | jq 'select(.message_type == "ai")'

모든 에이전트 권한 조회#

사용 가능한 모든 에이전트 권한을 ID, 이름, 설명, 기본 활성화 여부와 함께 조회합니다.

GET /ai/duo_workflows/workflows/agent_privileges

이 엔드포인트에는 지원되는 속성이 없습니다.

성공하면 200 OK와 다음 응답 속성을 반환합니다.

속성 유형 설명
all_privileges array of objects 사용 가능한 모든 에이전트 권한입니다.
all_privileges[].default_enabled boolean 해당 권한이 기본적으로 활성화되어 있는지 여부입니다.
all_privileges[].description string 해당 권한이 허용하는 내용에 대한 설명입니다.
all_privileges[].id integer 권한 ID 입니다.
all_privileges[].name string 기계가 읽을 수 있는 권한 이름입니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/agent_privileges"

응답 예시:

{
  "all_privileges": [
    {
      "id": 1,
      "name": "read_write_files",
      "description": "Allow local filesystem read/write access",
      "default_enabled": true
    },
    {
      "id": 2,
      "name": "read_only_gitlab",
      "description": "Allow read only access to GitLab APIs",
      "default_enabled": true
    },
    {
      "id": 3,
      "name": "read_write_gitlab",
      "description": "Allow write access to GitLab APIs",
      "default_enabled": true
    },
    {
      "id": 4,
      "name": "run_commands",
      "description": "Allow running any commands",
      "default_enabled": true
    },
    {
      "id": 5,
      "name": "use_git",
      "description": "Allow git commits, push and other git commands",
      "default_enabled": true
    },
    {
      "id": 6,
      "name": "run_mcp_tools",
      "description": "Allow running MCP tools",
      "default_enabled": true
    }
  ]
}