# Использование облачного агента Copilot через API

Вы можете запускать и управлять Copilot cloud agent задачами программно с помощью REST API.

Вы можете использовать API задач агента для интеграции cloud agent в свои инструменты и рабочие процессы. Например, вы можете начать новую задачу, перечислить существующие задачи или проверить статус задачи.

Кроме того, вы можете использовать API REST и GraphQL для задач, чтобы назначить задачи на Copilot.

## Использование API задач агента

> \[!NOTE]
> API задач агента включен Публичный предварительный просмотр и подвержен изменениям.

### Authentication

API задач агента поддерживает только токены между пользователями. Вы можете аутентифицироваться с помощью personal access tokenтокена или OAuth appGitHub App токена пользователя-сервера.

Токены сервер-сервер, такие как GitHub App токены доступа установки, не поддерживаются.

### Запуск задачи через API

Чтобы начать новую cloud agent задачу, отправьте `POST` запрос на `/agents/repos/{owner}/{repo}/tasks`. Единственный требуемый параметр — `prompt`, который является запросом для агента.

```shell copy
curl -X POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  -H "Authorization: Bearer YOUR-TOKEN" \
  https://api.github.com/agents/repos/OWNER/REPO/tasks \
  -d '{
    "prompt": "Fix the login button on the homepage",
    "base_ref": "main"
  }'
```

Замените следующие значения заполнятелей:

* `YOUR-TOKEN`: A или personal access tokenGitHub App токен пользователя-сервер.
* `OWNER`: Владелец аккаунта репозитория.
* `REPO`: Название репозитория.

Вы также можете включить следующие опциональные параметры в тело запроса:

* `base_ref`: Базовая ветка для новой ветки и pull request.
* `model`: Модель ИИ для выполнения задачи. Если опущено, auto model selection используется. Для получения дополнительной информации о поддерживаемых моделях см. [AUTOTITLE.](/ru/rest/agent-tasks/agent-tasks)
* `create_pull_request`: Булева величина, которая определяет, создавать ли pull request для задачи.

### Задачи по списку

Вы можете перечислять задачи для конкретного репозитория или во всех доступных репозиториях.

Чтобы перечислить задачи для конкретного репозитория:

```shell copy
curl -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  -H "Authorization: Bearer YOUR-TOKEN" \
  https://api.github.com/agents/repos/OWNER/REPO/tasks
```

Чтобы перечислить ваши задачи во всех репозиториях:

```shell copy
curl -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  -H "Authorization: Bearer YOUR-TOKEN" \
  https://api.github.com/agents/tasks
```

### Проверка статуса задачи

Чтобы проверить статус конкретной задачи, отправьте `GET` запрос с идентификатором задачи:

```shell copy
curl -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  -H "Authorization: Bearer YOUR-TOKEN" \
  https://api.github.com/agents/repos/OWNER/REPO/tasks/TASK-ID
```

Замените `TASK-ID` на ID задачи, которую хотите проверить. Этот идентификатор можно получить из ответа, когда создаёте задачу или перечисляете задачи. Ответ включает текущий `state`показатель задачи , который может быть одним из : `queued`, `in_progress`, `completed``failed``idle``waiting_for_user``timed_out`или .`cancelled`

## Использование API issues

> \[!NOTE]
> Эта функция уже присутствует Публичный предварительный просмотр и может измениться.

Вы можете назначать проблемы либо Copilot на использование GraphQL API, либо REST API. Оба API поддерживают опциональный ввод назначения агента для настройки задачи:

| Параметр GraphQL     | Параметр REST         | Description                                   |
| -------------------- | --------------------- | --------------------------------------------- |
| `targetRepositoryId` | `target_repo`         | Репозиторий, где Copilot будет работать       |
| `baseRef`            | `base_branch`         | Ветвь, от которой Copilot будет разветвляться |
| `customInstructions` | `custom_instructions` | Дополнительные инструкции для Copilot         |
| `customAgent`        | `custom_agent`        | A custom agent для выполнения задачи          |
| `model`              | `model`               | Модель для Copilot использования              |

### Использование API GraphQL

> \[!NOTE]
> Вы должны включить `GraphQL-Features` заголовок со значениями `issues_copilot_assignment_api_support` и `coding_agent_model_selection`.

Вы можете использовать следующие мутации GraphQL для присвоения проблем :Copilot

* [`updateIssue`](/ru/graphql/reference/issues#mutation-updateissue)
* [`createIssue`](/ru/graphql/reference/issues#mutation-createissue)
* [`addAssigneesToAssignable`](/ru/graphql/reference/issues#mutation-addassigneestoassignable)
* [`replaceActorsForAssignable`](/ru/graphql/reference/issues#mutation-replaceactorsforassignable)

#### Создание и назначение новой проблемы

1. Убедитесь, что вы аутентифицируете API с помощью пользовательского токена, например, personal access token или GitHub App токена пользователя-сервера.

   > \[!NOTE]
   > Если используется , fine-grained personal access tokenдля назначения Copilot задачи нужны следующие разрешения:
   >
   > * Read access к метаданным
   > * Read and Write access к действиям, содержимому, проблемам и pull requests
   >
   > Если использовать personal access token (classic), ему нужен `repo` прицел для назначения Copilot задачи.

2. Проверьте, что Copilot cloud agent включено в репозитории, проверив, включает ли репозиторий `suggestedActors` в API GraphQL Copilot. Замените `octo-org` владельцем репозитория и `octo-repo` именем репозитория.

   ```graphql copy
   query {
     repository(owner: "octo-org", name: "octo-repo") {
       suggestedActors(capabilities: [CAN_BE_ASSIGNED], first: 100) {
         nodes {
           login
           __typename

           ... on Bot {
             id
           }

           ... on User {
             id
           }
         }
       }
     }
   }
   ```

   Если Copilot cloud agent включён для пользователя и находится в репозитории, первый узел из запроса будет иметь `login` значение `copilot-swe-agent`.

3. Запишите `id` значение этого имени входа.

4. Получите глобальный идентификатор GraphQL репозитория, в который вы хотите создать проблему, заменив `octo-org` его владельцем и `octo-repo` именем репозитория.

   ```graphql copy
   query {
     repository(owner: "octo-org", name: "octo-repo") {
       id
     }
   }
   ```

5. Создайте проблему с мутацией `createIssue` . Замените `REPOSITORY_ID` идентификатор, возвращенный на предыдущем шаге, и `BOT_ID` идентификатором, возвращенным из шага до этого. Вы можете добавить `agentAssignment` ввод для настройки задачи.

   ```shell copy
   gh api graphql -f query='mutation {
     createIssue(input: {
       repositoryId: "REPOSITORY_ID",
       title: "Implement comprehensive unit tests",
       body: "DETAILS",
       assigneeIds: ["BOT_ID"],
       agentAssignment: {
         targetRepositoryId: "REPOSITORY_ID",
         baseRef: "main",
         customInstructions: "Add comprehensive test coverage",
         customAgent: "",
         model: ""
       }
     }) {
       issue {
         id
         title
         assignees(first: 10) {
           nodes {
             login
           }
         }
       }
     }
   }' -H 'GraphQL-Features: issues_copilot_assignment_api_support,coding_agent_model_selection'
   ```

#### Назначение существующей проблемы

1. Убедитесь, что вы аутентифицируете API с помощью пользовательского токена, например, personal access token или GitHub App токена пользователя-сервера.

2. Проверьте, что Copilot cloud agent включено в репозитории, проверив, включает ли репозиторий `suggestedActors` в API GraphQL Copilot. Замените `octo-org` владельцем репозитория и `octo-repo` именем репозитория.

   ```graphql copy
   query {
     repository(owner: "monalisa", name: "octocat") {
       suggestedActors(capabilities: [CAN_BE_ASSIGNED], first: 100) {
         nodes {
           login
           __typename

           ... on Bot {
             id
           }

           ... on User {
             id
           }
         }
       }
     }
   }
   ```

   Если Copilot cloud agent включён для пользователя и находится в репозитории, первый узел из запроса будет иметь `login` значение `copilot-swe-agent`.

3. Получите глобальный идентификатор GraphQL нужного выпуска Copilot, замените `monalisa` его владельцем репозитория, `octocat` именем и `9000` номером выпуска.

   ```graphql copy
   query {
     repository(owner: "monalisa", name: "octocat") {
       issue(number: 9000) {
         id
         title
       }
     }
   }
   ```

4. Назначите существующую проблему Copilot на использование мутации `replaceActorsForAssignable` . Замените `ISSUE_ID` на ID, вернувшийся с предыдущего шага, `BOT_ID` на ID, возвращённый с предыдущего шага, и `REPOSITORY_ID` на идентификатор репозитория. Вы можете добавить `agentAssignment` ввод для настройки задачи.

   ```shell copy
   gh api graphql -f query='mutation {
     replaceActorsForAssignable(input: {
       assignableId: "ISSUE_ID",
       actorIds: ["BOT_ID"],
       agentAssignment: {
         targetRepositoryId: "REPOSITORY_ID",
         baseRef: "main",
         customInstructions: "Fix the reported bug",
         customAgent: "",
         model: ""
       }
     }) {
       assignable {
         ... on Issue {
           id
           title
           assignees(first: 10) {
             nodes {
               login
             }
           }
         }
       }
     }
   }' -H 'GraphQL-Features: issues_copilot_assignment_api_support,coding_agent_model_selection'
   ```

5. Альтернативно, вы можете использовать `updateIssue` мутацию, чтобы обновить существующую проблему и назначить её на Copilot. Замените `ISSUE_ID` на ID проблемы и `BOT_ID` на ID бота.

   ```shell copy
   gh api graphql -f query='mutation {
     updateIssue(input: {
       id: "ISSUE_ID",
       assigneeIds: ["BOT_ID"],
       agentAssignment: {
         targetRepositoryId: "REPOSITORY_ID",
         baseRef: "main",
         customInstructions: "Update feature implementation",
         customAgent: "",
         model: ""
       }
     }) {
       issue {
         id
         title
         assignees(first: 10) {
           nodes {
             login
           }
         }
       }
     }
   }' -H 'GraphQL-Features: issues_copilot_assignment_api_support,coding_agent_model_selection'
   ```

6. Вы также можете использовать `addAssigneesToAssignable` мутацию, чтобы добавить Copilot к существующей проблеме, сохраняя при этом других назначенных. Замените `ISSUE_ID` на ID проблемы и `BOT_ID` на ID бота.

   ```shell copy
   gh api graphql -f query='mutation {
     addAssigneesToAssignable(input: {
       assignableId: "ISSUE_ID",
       assigneeIds: ["BOT_ID"],
       agentAssignment: {
         targetRepositoryId: "REPOSITORY_ID",
         baseRef: "main",
         customInstructions: "Collaborate on this task",
         customAgent: "",
         model: ""
       }
     }) {
       assignable {
         ... on Issue {
           id
           title
           assignees(first: 10) {
             nodes {
               login
             }
           }
         }
       }
     }
   }' -H 'GraphQL-Features: issues_copilot_assignment_api_support,coding_agent_model_selection'
   ```

### Использование REST API

Вы можете использовать следующие конечные точки REST API для назначения задач на:Copilot

* [Добавьте правоназначенцев к проблеме](/ru/rest/issues/assignees#add-assignees-to-an-issue)
* [Создайте проблему](/ru/rest/issues/issues#create-an-issue)
* [Обновить выпуск](/ru/rest/issues/issues#update-an-issue)

#### Добавление правопредоставлений к существующему выпуску

```shell copy
gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /repos/OWNER/REPO/issues/ISSUE_NUMBER/assignees \
  --input - <<< '{
  "assignees": ["copilot-swe-agent[bot]"],
  "agent_assignment": {
    "target_repo": "OWNER/REPO",
    "base_branch": "main",
    "custom_instructions": "",
    "custom_agent": "",
    "model": ""
  }
}'
```

#### Создание новой проблемы

```shell copy
gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /repos/OWNER/REPO/issues \
  --input - <<< '{
  "title": "Issue title",
  "body": "Issue description.",
  "assignees": ["copilot-swe-agent[bot]"],
  "agent_assignment": {
    "target_repo": "OWNER/REPO",
    "base_branch": "main",
    "custom_instructions": "",
    "custom_agent": "",
    "model": ""
  }
}'
```

#### Обновление существующей проблемы

```shell copy
gh api \
  --method PATCH \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /repos/OWNER/REPO/issues/ISSUE_NUMBER \
  --input - <<< '{
  "assignees": ["copilot-swe-agent[bot]"],
  "agent_assignment": {
    "target_repo": "OWNER/REPO",
    "base_branch": "main",
    "custom_instructions": "",
    "custom_agent": "",
    "model": ""
  }
}'
```

## Дополнительные материалы

* [Конечные точки REST API для задач агентов](/ru/rest/agent-tasks/agent-tasks)
* [О облачном агенте GitHub Copilot](/ru/copilot/concepts/agents/cloud-agent/about-cloud-agent)
* [Начало сессий GitHub Copilot](/ru/copilot/how-tos/use-copilot-agents/cloud-agent/start-copilot-sessions)