fix(agent-task view): display premium requests used

Signed-off-by: Babak K. Shandiz <babakks@github.com>
This commit is contained in:
Babak K. Shandiz 2025-09-17 13:29:38 +01:00
parent fe95cd86f1
commit 99a61618df
No known key found for this signature in database
GPG key ID: 9472CAEFF56C742E
2 changed files with 119 additions and 94 deletions

View file

@ -7,6 +7,7 @@ import (
"net/http"
"net/url"
"strconv"
"strings"
"time"
"github.com/MakeNowJust/heredoc"
@ -306,13 +307,19 @@ func printSession(opts *ViewOptions, session *capi.Session) {
fmt.Fprintf(opts.IO.Out, "Started %s\n", text.FuzzyAgo(time.Now(), session.CreatedAt))
}
var durationNote string
if session.CompletedAt.After(session.CreatedAt) {
durationNote = fmt.Sprintf("Duration %s", session.CompletedAt.Sub(session.CreatedAt).Round(time.Second).String())
additionalNotes := make([]string, 0, 2)
if session.PremiumRequests > 0 {
s := strings.TrimSuffix(fmt.Sprintf("%.1f", session.PremiumRequests), ".0")
additionalNotes = append(additionalNotes, fmt.Sprintf("Used %s premium request(s)", s))
}
if durationNote != "" {
fmt.Fprintf(opts.IO.Out, "%s\n", cs.Muted(durationNote))
if session.CompletedAt.After(session.CreatedAt) {
additionalNotes = append(additionalNotes, fmt.Sprintf("Duration %s", session.CompletedAt.Sub(session.CreatedAt).Round(time.Second).String()))
}
if len(additionalNotes) > 0 {
fmt.Fprintf(opts.IO.Out, "%s\n", cs.Muted(strings.Join(additionalNotes, " • ")))
}
if !opts.Log {

View file

@ -213,10 +213,11 @@ func Test_viewRun(t *testing.T) {
m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) {
assert.Equal(t, "some-session-id", id)
return &capi.Session{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -234,7 +235,7 @@ func Test_viewRun(t *testing.T) {
wantOut: heredoc.Doc(`
Ready for review fix something OWNER/REPO#101
Started on behalf of octocat about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
For detailed session logs, try:
gh agent-task view 'some-session-id' --log
@ -255,10 +256,11 @@ func Test_viewRun(t *testing.T) {
m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) {
assert.Equal(t, "some-session-id", id)
return &capi.Session{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -273,7 +275,7 @@ func Test_viewRun(t *testing.T) {
wantOut: heredoc.Doc(`
Ready for review fix something OWNER/REPO#101
Started about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
For detailed session logs, try:
gh agent-task view 'some-session-id' --log
@ -294,10 +296,11 @@ func Test_viewRun(t *testing.T) {
m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) {
assert.Equal(t, "some-session-id", id)
return &capi.Session{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
User: &api.GitHubUser{
Login: "octocat",
},
@ -307,7 +310,7 @@ func Test_viewRun(t *testing.T) {
wantOut: heredoc.Doc(`
Ready for review
Started on behalf of octocat about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
For detailed session logs, try:
gh agent-task view 'some-session-id' --log
@ -325,17 +328,18 @@ func Test_viewRun(t *testing.T) {
m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) {
assert.Equal(t, "some-session-id", id)
return &capi.Session{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
}, nil
}
},
wantOut: heredoc.Doc(`
Ready for review
Started about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
For detailed session logs, try:
gh agent-task view 'some-session-id' --log
@ -369,10 +373,11 @@ func Test_viewRun(t *testing.T) {
m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) {
assert.Equal(t, "some-session-id", id)
return &capi.Session{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
// User data is irrelevant in this case
}, nil
}
@ -392,10 +397,11 @@ func Test_viewRun(t *testing.T) {
m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) {
assert.Equal(t, "some-session-id", id)
return &capi.Session{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -499,10 +505,11 @@ func Test_viewRun(t *testing.T) {
assert.Equal(t, defaultLimit, limit)
return []*capi.Session{
{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -521,7 +528,7 @@ func Test_viewRun(t *testing.T) {
wantOut: heredoc.Doc(`
Ready for review fix something OWNER/REPO#101
Started on behalf of octocat about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
For detailed session logs, try:
gh agent-task view 'some-session-id' --log
@ -551,11 +558,12 @@ func Test_viewRun(t *testing.T) {
assert.Equal(t, defaultLimit, limit)
return []*capi.Session{
{
ID: "some-session-id",
Name: "session one",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
Name: "session one",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -569,11 +577,12 @@ func Test_viewRun(t *testing.T) {
},
},
{
ID: "some-other-session-id",
Name: "session two",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-other-session-id",
Name: "session two",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -604,7 +613,7 @@ func Test_viewRun(t *testing.T) {
wantOut: heredoc.Doc(`
Ready for review fix something OWNER/REPO#101
Started on behalf of octocat about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
For detailed session logs, try:
gh agent-task view 'some-session-id' --log
@ -636,11 +645,12 @@ func Test_viewRun(t *testing.T) {
assert.Equal(t, defaultLimit, limit)
return []*capi.Session{
{
ID: "some-session-id",
Name: "session one",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
Name: "session one",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -654,11 +664,12 @@ func Test_viewRun(t *testing.T) {
},
},
{
ID: "some-other-session-id",
Name: "session two",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-other-session-id",
Name: "session two",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -689,7 +700,7 @@ func Test_viewRun(t *testing.T) {
wantOut: heredoc.Doc(`
Ready for review fix something OWNER/REPO#101
Started on behalf of octocat about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
For detailed session logs, try:
gh agent-task view 'some-session-id' --log
@ -742,10 +753,11 @@ func Test_viewRun(t *testing.T) {
assert.Equal(t, defaultLimit, limit)
return []*capi.Session{
{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -784,11 +796,12 @@ func Test_viewRun(t *testing.T) {
assert.Equal(t, defaultLimit, limit)
return []*capi.Session{
{
ID: "some-session-id",
Name: "session one",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
Name: "session one",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -800,11 +813,12 @@ func Test_viewRun(t *testing.T) {
// User data is irrelevant in this case
},
{
ID: "some-other-session-id",
Name: "session two",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-other-session-id",
Name: "session two",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -845,11 +859,12 @@ func Test_viewRun(t *testing.T) {
assert.Equal(t, defaultLimit, limit)
return []*capi.Session{
{
ID: "some-session-id",
Name: "session one",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
Name: "session one",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -861,11 +876,12 @@ func Test_viewRun(t *testing.T) {
// User data is irrelevant in this case
},
{
ID: "some-other-session-id",
Name: "session two",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-other-session-id",
Name: "session two",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
PullRequest: &api.PullRequest{
Title: "fix something",
Number: 101,
@ -894,10 +910,11 @@ func Test_viewRun(t *testing.T) {
m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) {
assert.Equal(t, "some-session-id", id)
return &capi.Session{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
User: &api.GitHubUser{
Login: "octocat",
},
@ -917,7 +934,7 @@ func Test_viewRun(t *testing.T) {
wantOut: heredoc.Doc(`
Ready for review
Started on behalf of octocat about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
To follow session logs, try:
gh agent-task view 'some-session-id' --log --follow
@ -939,10 +956,11 @@ func Test_viewRun(t *testing.T) {
m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) {
assert.Equal(t, "some-session-id", id)
return &capi.Session{
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
ID: "some-session-id",
State: "completed",
CreatedAt: sampleDate,
CompletedAt: sampleCompletedAt,
PremiumRequests: 1.5,
User: &api.GitHubUser{
Login: "octocat",
},
@ -976,7 +994,7 @@ func Test_viewRun(t *testing.T) {
wantOut: heredoc.Doc(`
Ready for review
Started on behalf of octocat about 6 hours ago
Duration 5m0s
Used 1.5 premium request(s) Duration 5m0s
(rendered:) <raw-logs-one>
(rendered:) <raw-logs-two>