Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
8d3c4df
github: add agent tasks API support
danyalahmed1995 May 14, 2026
efa12d7
Merge remote-tracking branch 'upstream/master' into add-agent-tasks-api
danyalahmed1995 May 14, 2026
4263d58
test: cover agent tasks list options error
danyalahmed1995 May 14, 2026
43387ee
Update github/agent_tasks.go
danyalahmed1995 May 14, 2026
3c4d321
fix: address agent tasks review comments
danyalahmed1995 May 15, 2026
93e009c
fix: remove openapi operations diff
danyalahmed1995 May 15, 2026
738801b
fix: restore agent tasks creator id type
danyalahmed1995 May 15, 2026
ceabbf4
Update github/agent_tasks.go
danyalahmed1995 May 15, 2026
f8042ad
fix: address latest agent tasks review comments
danyalahmed1995 May 15, 2026
a2f45a2
fix: preserve agent tasks docs api version
danyalahmed1995 May 15, 2026
5160bbf
Update github/agent_tasks.go
danyalahmed1995 May 16, 2026
ab0cc87
Update github/agent_tasks.go
danyalahmed1995 May 16, 2026
d10a780
Update github/agent_tasks.go
danyalahmed1995 May 16, 2026
a982cae
Update github/agent_tasks.go
danyalahmed1995 May 16, 2026
41b1ac1
Update github/agent_tasks.go
danyalahmed1995 May 17, 2026
dc0817a
fix: address agent tasks schema review
danyalahmed1995 May 17, 2026
8e1ed64
fix: use shared agent tasks api version constant
danyalahmed1995 May 18, 2026
96ff69b
Merge remote-tracking branch 'upstream/master' into add-agent-tasks-api
danyalahmed1995 May 19, 2026
d40f10b
Update github/agent_tasks.go
danyalahmed1995 May 27, 2026
526dbeb
Update github/agent_tasks.go
danyalahmed1995 May 27, 2026
ca7b94c
Update agent_tasks.go
danyalahmed1995 May 27, 2026
f60454c
Update agent_tasks.go
danyalahmed1995 May 27, 2026
38fdd45
Update agent_tasks.go
danyalahmed1995 May 27, 2026
127e602
Update agent_tasks_test.go
danyalahmed1995 May 27, 2026
e939a80
Merge remote-tracking branch 'upstream/master' into add-agent-tasks-api
danyalahmed1995 May 29, 2026
0de7fd7
fix: address agent tasks review cleanup
danyalahmed1995 May 29, 2026
5669508
Merge remote-tracking branch 'origin/add-agent-tasks-api' into add-ag…
danyalahmed1995 May 29, 2026
4d43376
Update agent_tasks.go
danyalahmed1995 May 29, 2026
3637558
fix: address agent tasks schema review
danyalahmed1995 May 29, 2026
139e26e
Update github/agent_tasks.go
danyalahmed1995 May 29, 2026
24294fe
fix: use default docs version for agent tasks links
danyalahmed1995 May 29, 2026
0c9c94e
Update agent_tasks.go
danyalahmed1995 Jun 1, 2026
a39607d
Update agent_tasks.go
danyalahmed1995 Jun 1, 2026
0ee670d
Update agent_tasks.go
danyalahmed1995 Jun 1, 2026
848a6ab
Update agent_tasks.go
danyalahmed1995 Jun 1, 2026
c8a51f9
Update agent_tasks.go
danyalahmed1995 Jun 1, 2026
7053044
Update agent_tasks.go
danyalahmed1995 Jun 1, 2026
77ee6f4
Update agent_tasks.go
danyalahmed1995 Jun 1, 2026
5847795
Update agent_tasks_test.go
danyalahmed1995 Jun 1, 2026
332e7f9
Update agent_tasks_test.go
danyalahmed1995 Jun 1, 2026
2f707eb
fix: address agent tasks schema review
danyalahmed1995 Jun 1, 2026
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
1 change: 1 addition & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ linters:
- ActionsCacheListOptions.Key
- ActionsCacheListOptions.Ref
- ActionsCacheListOptions.Sort
- AgentTaskListByRepoOptions.CreatorID # TODO: AgentTasks
- ActiveCommittersListOptions.AdvancedSecurityProduct
- AnalysesListOptions.Ref
- AnalysesListOptions.SarifID
Expand Down
232 changes: 232 additions & 0 deletions github/agent_tasks.go
Comment thread
danyalahmed1995 marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
// Copyright 2026 The go-github AUTHORS. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package github

import (
"context"
"encoding/json"
"fmt"
"time"
)

// AgentTasksService handles communication with the agent tasks
// methods of the GitHub API.
//
// GitHub API docs: https://docs.github.com/rest/agent-tasks/agent-tasks?apiVersion=2026-03-10
type AgentTasksService service

// AgentTask represents a Copilot cloud agent task.
type AgentTask struct {
Comment thread
danyalahmed1995 marked this conversation as resolved.
ID *string `json:"id,omitempty"`
URL *string `json:"url,omitempty"`
HTMLURL *string `json:"html_url,omitempty"`
Name *string `json:"name,omitempty"`
Creator *User `json:"creator,omitempty"`
Comment thread
danyalahmed1995 marked this conversation as resolved.
CreatorType *string `json:"creator_type,omitempty"`
Comment thread
danyalahmed1995 marked this conversation as resolved.
Owner *User `json:"owner,omitempty"`
Comment thread
danyalahmed1995 marked this conversation as resolved.
Outdated
Repository *Repository `json:"repository,omitempty"`
Comment thread
danyalahmed1995 marked this conversation as resolved.
Outdated
State *string `json:"state,omitempty"`
SessionCount *int `json:"session_count,omitempty"`
Artifacts []*AgentTaskArtifact `json:"artifacts,omitempty"`
ArchivedAt *Timestamp `json:"archived_at,omitempty"`
CreatedAt *Timestamp `json:"created_at,omitempty"`
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
Sessions []*AgentTaskSession `json:"sessions,omitempty"`
}

// AgentTaskArtifact represents an artifact produced by an agent task.
type AgentTaskArtifact struct {
Provider *string `json:"provider,omitempty"`
Type *string `json:"type,omitempty"`
Data json.RawMessage `json:"data,omitempty"`
}

// AgentTaskSession represents a session associated with an agent task.
type AgentTaskSession struct {
ID *string `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
User *User `json:"user,omitempty"`
Owner *User `json:"owner,omitempty"`
Repository *Repository `json:"repository,omitempty"`
TaskID *string `json:"task_id,omitempty"`
State *string `json:"state,omitempty"`
CreatedAt *Timestamp `json:"created_at,omitempty"`
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
CompletedAt *Timestamp `json:"completed_at,omitempty"`
Prompt *string `json:"prompt,omitempty"`
HeadRef *string `json:"head_ref,omitempty"`
BaseRef *string `json:"base_ref,omitempty"`
Model *string `json:"model,omitempty"`
}

// AgentTaskList represents a list of agent tasks.
type AgentTaskList struct {
Tasks []*AgentTask `json:"tasks,omitempty"`
Comment thread
danyalahmed1995 marked this conversation as resolved.
Outdated
}
Comment thread
danyalahmed1995 marked this conversation as resolved.

// AgentTaskListOptions specifies optional parameters to AgentTasksService.List.
type AgentTaskListOptions struct {
// Sort specifies the field to sort results by. Possible values are: updated_at, created_at.
Sort string `url:"sort,omitempty"`

// Direction specifies the direction to sort results by. Possible values are: asc, desc.
Direction string `url:"direction,omitempty"`

// State is a comma-separated list of task states to filter by.
Comment thread
danyalahmed1995 marked this conversation as resolved.
State string `url:"state,omitempty"`

// IsArchived filters tasks by archived status.
IsArchived bool `url:"is_archived,omitempty"`

// Since filters tasks updated at or after this time.
Since *time.Time `url:"since,omitempty"`
Comment thread
danyalahmed1995 marked this conversation as resolved.

ListOptions
}

// AgentTaskListByRepoOptions specifies optional parameters to AgentTasksService.ListByRepo.
type AgentTaskListByRepoOptions struct {
AgentTaskListOptions

// CreatorID filters tasks by creator user ID.
CreatorID *int64 `url:"creator_id,omitempty"`
Comment thread
danyalahmed1995 marked this conversation as resolved.
Outdated
}

// CreateAgentTaskOptions represents the parameters for creating an agent task.
type CreateAgentTaskOptions struct {
Comment thread
danyalahmed1995 marked this conversation as resolved.
Outdated
// Prompt is the user's prompt for the agent.
Prompt string `json:"prompt"`

// Model is the model to use for this task.
Model *string `json:"model,omitempty"`

// CreatePullRequest indicates whether to create a pull request.
CreatePullRequest *bool `json:"create_pull_request,omitempty"`

// BaseRef is the base ref for the new branch or pull request.
BaseRef *string `json:"base_ref,omitempty"`
}
Comment thread
danyalahmed1995 marked this conversation as resolved.

// ListByRepo lists tasks for a repository.
//
// GitHub API docs: https://docs.github.com/rest/agent-tasks/agent-tasks?apiVersion=2026-03-10#list-tasks-for-repository
//
//meta:operation GET /agents/repos/{owner}/{repo}/tasks
func (s *AgentTasksService) ListByRepo(ctx context.Context, owner, repo string, opts *AgentTaskListByRepoOptions) (*AgentTaskList, *Response, error) {
u := fmt.Sprintf("agents/repos/%v/%v/tasks", owner, repo)
u, err := addOptions(u, opts)
if err != nil {
return nil, nil, err
}

req, err := s.client.NewRequest(ctx, "GET", u, nil, WithVersion("2026-03-10"))
if err != nil {
return nil, nil, err
}

var tasks *AgentTaskList
resp, err := s.client.Do(req, &tasks)
if err != nil {
return nil, resp, err
}

return tasks, resp, nil
}

// Create starts a new Copilot cloud agent task for a repository.
//
// GitHub API docs: https://docs.github.com/rest/agent-tasks/agent-tasks?apiVersion=2026-03-10#start-a-task
//
//meta:operation POST /agents/repos/{owner}/{repo}/tasks
func (s *AgentTasksService) Create(ctx context.Context, owner, repo string, opts *CreateAgentTaskOptions) (*AgentTask, *Response, error) {
Comment thread
danyalahmed1995 marked this conversation as resolved.
Outdated
u := fmt.Sprintf("agents/repos/%v/%v/tasks", owner, repo)

req, err := s.client.NewRequest(ctx, "POST", u, opts, WithVersion("2026-03-10"))
if err != nil {
return nil, nil, err
}

var task *AgentTask
resp, err := s.client.Do(req, &task)
if err != nil {
return nil, resp, err
}

return task, resp, nil
}

// GetByRepoAndID gets a repository task by ID.
//
// GitHub API docs: https://docs.github.com/rest/agent-tasks/agent-tasks?apiVersion=2026-03-10#get-a-task-by-repo
//
//meta:operation GET /agents/repos/{owner}/{repo}/tasks/{task_id}
func (s *AgentTasksService) GetByRepoAndID(ctx context.Context, owner, repo, taskID string) (*AgentTask, *Response, error) {
Comment thread
danyalahmed1995 marked this conversation as resolved.
u := fmt.Sprintf("agents/repos/%v/%v/tasks/%v", owner, repo, taskID)

req, err := s.client.NewRequest(ctx, "GET", u, nil, WithVersion("2026-03-10"))
if err != nil {
return nil, nil, err
}

var task *AgentTask
resp, err := s.client.Do(req, &task)
if err != nil {
return nil, resp, err
}

return task, resp, nil
}

// List lists tasks for the authenticated user.
//
// GitHub API docs: https://docs.github.com/rest/agent-tasks/agent-tasks?apiVersion=2026-03-10#list-tasks
//
//meta:operation GET /agents/tasks
func (s *AgentTasksService) List(ctx context.Context, opts *AgentTaskListOptions) (*AgentTaskList, *Response, error) {
return s.list(ctx, "agents/tasks", opts)
}

func (s *AgentTasksService) list(ctx context.Context, u string, opts *AgentTaskListOptions) (*AgentTaskList, *Response, error) {
Comment thread
danyalahmed1995 marked this conversation as resolved.
Outdated
u, err := addOptions(u, opts)
if err != nil {
return nil, nil, err
}

req, err := s.client.NewRequest(ctx, "GET", u, nil, WithVersion("2026-03-10"))
Comment thread
danyalahmed1995 marked this conversation as resolved.
Outdated
if err != nil {
return nil, nil, err
}

var tasks *AgentTaskList
resp, err := s.client.Do(req, &tasks)
if err != nil {
return nil, resp, err
}

return tasks, resp, nil
}

// Get gets a task by ID for the authenticated user.
//
// GitHub API docs: https://docs.github.com/rest/agent-tasks/agent-tasks?apiVersion=2026-03-10#get-a-task-by-id
//
//meta:operation GET /agents/tasks/{task_id}
func (s *AgentTasksService) Get(ctx context.Context, taskID string) (*AgentTask, *Response, error) {
u := fmt.Sprintf("agents/tasks/%v", taskID)

req, err := s.client.NewRequest(ctx, "GET", u, nil, WithVersion("2026-03-10"))
if err != nil {
return nil, nil, err
}

var task *AgentTask
resp, err := s.client.Do(req, &task)
if err != nil {
return nil, resp, err
}

return task, resp, nil
}
Loading
Loading