Skip to content

Commit af60b97

Browse files
committed
fix
1 parent 73432b2 commit af60b97

6 files changed

Lines changed: 125 additions & 7 deletions

File tree

backend/biz/git/usecase/identity.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import (
66
"log/slog"
77
"strings"
88

9+
gh "github.com/google/go-github/v74/github"
910
"github.com/google/uuid"
1011
"github.com/samber/do"
1112

13+
"github.com/chaitin/MonkeyCode/backend/config"
1214
"github.com/chaitin/MonkeyCode/backend/consts"
1315
"github.com/chaitin/MonkeyCode/backend/db"
1416
"github.com/chaitin/MonkeyCode/backend/domain"
@@ -32,7 +34,7 @@ func NewGitIdentityUsecase(i *do.Injector) (domain.GitIdentityUsecase, error) {
3234
logger := do.MustInvoke[*slog.Logger](i)
3335
return &GitIdentityUsecase{
3436
repo: do.MustInvoke[domain.GitIdentityRepo](i),
35-
gh: github.NewGithub(logger),
37+
gh: github.NewGithub(logger, do.MustInvoke[*config.Config](i)),
3638
logger: logger.With("module", "GitIdentityUsecase"),
3739
}, nil
3840
}
@@ -64,6 +66,23 @@ func (u *GitIdentityUsecase) Get(ctx context.Context, uid uuid.UUID, id uuid.UUI
6466
}
6567
gi := cvt.From(identity, &domain.GitIdentity{})
6668

69+
// 返回 GitHub App 授权仓库的 fullname 和 repo-url
70+
if identity.InstallationID != 0 {
71+
repos, err := u.gh.ListInstallationRepos(ctx, identity.InstallationID)
72+
if err != nil {
73+
u.logger.WarnContext(ctx, "failed to get authorized repositories", "error", err, "installation_id", identity.InstallationID)
74+
} else {
75+
gi.AuthorizedRepositories = cvt.Iter(repos, func(_ int, r *gh.Repository) domain.AuthRepository {
76+
return domain.AuthRepository{
77+
FullName: *cvt.NilWithDefault(r.FullName, cvt.Zero[string]()),
78+
URL: *cvt.NilWithDefault(r.URL, cvt.Zero[string]()),
79+
Description: *cvt.NilWithDefault(r.Description, cvt.Zero[string]()),
80+
}
81+
})
82+
}
83+
return gi, nil
84+
}
85+
6786
// PAT 模式:获取授权仓库列表
6887
if identity.AccessToken == "" {
6988
return gi, nil

backend/biz/project/usecase/project.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ type ProjectUsecase struct {
4141
glInternational *gitlab.Gitlab
4242
tokenCache *cache.Cache
4343
}
44+
4445
// NewProjectUsecase 创建项目业务逻辑层实例
4546
func NewProjectUsecase(i *do.Injector) (domain.ProjectUsecase, error) {
4647
cfg := do.MustInvoke[*config.Config](i)
@@ -61,7 +62,7 @@ func NewProjectUsecase(i *do.Injector) (domain.ProjectUsecase, error) {
6162
gitidentityUC: do.MustInvoke[domain.GitIdentityUsecase](i),
6263
logger: logger.With("module", "usecase.ProjectUsecase"),
6364
cfg: cfg,
64-
gh: github.NewGithub(logger),
65+
gh: github.NewGithub(logger, cfg),
6566
gte: gitee.NewGitee(cfg.Gitee.BaseURL, logger),
6667
gta: gitea.NewGitea(logger, cfg.GetGiteaBaseURL()),
6768
glDomestic: glDomestic,
@@ -104,6 +105,7 @@ func (u *ProjectUsecase) List(ctx context.Context, uid uuid.UUID, cursor domain.
104105
Page: cur,
105106
}, nil
106107
}
108+
107109
// Create 创建项目
108110
func (u *ProjectUsecase) Create(ctx context.Context, uid uuid.UUID, req *domain.CreateProjectReq) (*domain.Project, error) {
109111
p, err := u.repo.Create(ctx, uid, req)
@@ -181,6 +183,7 @@ func (u *ProjectUsecase) ListCollaborators(ctx context.Context, uid uuid.UUID, r
181183
}),
182184
}, nil
183185
}
186+
184187
// ListIssueComments 列出问题评论
185188
func (u *ProjectUsecase) ListIssueComments(ctx context.Context, uid uuid.UUID, req *domain.ListIssueCommentsReq) (*domain.ListIssueCommentsResp, error) {
186189
if req.Limit <= 0 {
@@ -247,6 +250,7 @@ func (u *ProjectUsecase) GetIssueByTaskID(ctx context.Context, taskID string) (*
247250
}
248251
return cvt.From(issue, &domain.ProjectIssue{}), nil
249252
}
253+
250254
// gitlabProjectInfo GitLab 项目信息
251255
type gitlabProjectInfo struct {
252256
client *gitlab.Gitlab
@@ -311,6 +315,7 @@ func getGithubInfo(p *db.Project) *githubProjectInfo {
311315
defaultBranch: defaultBranch,
312316
}
313317
}
318+
314319
// giteeProjectInfo Gitee 项目信息
315320
type giteeProjectInfo struct {
316321
owner string
@@ -376,6 +381,7 @@ func (u *ProjectUsecase) getRepoToken(ctx context.Context, p *db.Project) (strin
376381
}
377382
return gi.AccessToken, nil
378383
}
384+
379385
// treeEntryToAdapter 将 github TreeEntry 转为 domain adapter
380386
func githubTreeEntryToAdapter(e *github.TreeEntry) *domain.TreeEntryAdapter {
381387
return &domain.TreeEntryAdapter{Mode: e.Mode, Name: e.Name, Path: e.Path, Sha: e.Sha, Size: e.Size, LastModifiedAt: e.LastModifiedAt}
@@ -465,6 +471,7 @@ func (u *ProjectUsecase) GetProjectTree(ctx context.Context, uid uuid.UUID, req
465471
return nil, errcode.ErrGitOperation.Wrap(fmt.Errorf("unsupported platform: %s", p.Platform))
466472
}
467473
}
474+
468475
// GetProjectBlob 获取项目文件内容
469476
func (u *ProjectUsecase) GetProjectBlob(ctx context.Context, uid uuid.UUID, req *domain.GetProjectBlobReq) (*domain.ProjectBlob, error) {
470477
p, err := u.repo.Get(ctx, uid, req.ID)
@@ -541,6 +548,7 @@ func (u *ProjectUsecase) GetProjectBlob(ctx context.Context, uid uuid.UUID, req
541548
return nil, errcode.ErrGitOperation.Wrap(fmt.Errorf("unsupported platform: %s", p.Platform))
542549
}
543550
}
551+
544552
// commitEntryToDomain 将平台 commit entry 转为 domain
545553
func commitEntryToDomain(sha, message, treeSha string, parentShas []string, author, committer *domain.CommitUserAdapter) *domain.ProjectCommitEntry {
546554
entry := &domain.ProjectCommitEntry{
@@ -703,6 +711,7 @@ func giteaLogsToProjectLogs(resp *gitea.GetGitLogsResp) *domain.ProjectLogs {
703711
}),
704712
}
705713
}
714+
706715
// GetProjectArchive 获取项目仓库压缩包
707716
func (u *ProjectUsecase) GetProjectArchive(ctx context.Context, uid uuid.UUID, req *domain.GetProjectArchiveReq) (*domain.GetProjectArchiveResp, error) {
708717
p, err := u.repo.Get(ctx, uid, req.ID)

backend/config/config.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,17 @@ func Init(dir string) (*Config, error) {
188188
type GithubConfig struct {
189189
Token string `mapstructure:"token"`
190190
Enabled bool `mapstructure:"enabled"`
191+
App GithubAppConfig `mapstructure:"app"`
191192
OAuth GithubOAuthConfig `mapstructure:"oauth"`
192193
}
193194

195+
type GithubAppConfig struct {
196+
ID int64 `mapstructure:"id"`
197+
WebhookSecret string `mapstructure:"webhook_secret"`
198+
PrivateKey string `mapstructure:"private_key"`
199+
RedirectURL string `mapstructure:"redirect_url"` // 安装完 GitHub App 后的跳转地址
200+
}
201+
194202
// GithubOAuthConfig GitHub OAuth 配置
195203
type GithubOAuthConfig struct {
196204
ClientID string `mapstructure:"client_id"`

backend/go.mod

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require (
1313
github.com/google/uuid v1.6.0
1414
github.com/labstack/echo/v4 v4.15.1
1515
github.com/lib/pq v1.10.9
16+
github.com/palantir/go-githubapp v0.38.1
1617
github.com/patrickmn/go-cache v2.1.0+incompatible
1718
github.com/redis/go-redis/v9 v9.18.0
1819
github.com/samber/do v1.6.0
@@ -29,6 +30,7 @@ require (
2930
github.com/agext/levenshtein v1.2.3 // indirect
3031
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
3132
github.com/bmatcuk/doublestar v1.3.4 // indirect
33+
github.com/bradleyfalzon/ghinstallation/v2 v2.17.0 // indirect
3234
github.com/cespare/xxhash/v2 v2.3.0 // indirect
3335
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
3436
github.com/fsnotify/fsnotify v1.9.0 // indirect
@@ -40,12 +42,16 @@ require (
4042
github.com/go-playground/universal-translator v0.18.1 // indirect
4143
github.com/go-playground/validator/v10 v10.30.1 // indirect
4244
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
45+
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
4346
github.com/google/go-cmp v0.7.0 // indirect
47+
github.com/google/go-github/v75 v75.0.0 // indirect
4448
github.com/google/go-querystring v1.2.0 // indirect
49+
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
4550
github.com/hashicorp/errwrap v1.1.0 // indirect
4651
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
4752
github.com/hashicorp/go-multierror v1.1.1 // indirect
4853
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
54+
github.com/hashicorp/golang-lru v1.0.2 // indirect
4955
github.com/hashicorp/hcl/v2 v2.18.1 // indirect
5056
github.com/labstack/gommon v0.4.2 // indirect
5157
github.com/leodido/go-urn v1.4.0 // indirect
@@ -54,7 +60,12 @@ require (
5460
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
5561
github.com/nicksnyder/go-i18n/v2 v2.6.1 // indirect
5662
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
63+
github.com/pkg/errors v0.9.1 // indirect
64+
github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 // indirect
65+
github.com/rs/zerolog v1.34.0 // indirect
5766
github.com/sagikazarmark/locafero v0.11.0 // indirect
67+
github.com/shurcooL/githubv4 v0.0.0-20260209031235-2402fdf4a9ed // indirect
68+
github.com/shurcooL/graphql v0.0.0-20240915155400-7ee5256398cf // indirect
5869
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
5970
github.com/spf13/afero v1.15.0 // indirect
6071
github.com/spf13/cast v1.10.0 // indirect

backend/go.sum

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew
2020
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
2121
github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0=
2222
github.com/bmatcuk/doublestar v1.3.4/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE=
23+
github.com/bradleyfalzon/ghinstallation/v2 v2.17.0 h1:SmbUK/GxpAspRjSQbB6ARvH+ArzlNzTtHydNyXUQ6zg=
24+
github.com/bradleyfalzon/ghinstallation/v2 v2.17.0/go.mod h1:vuD/xvJT9Y+ZVZRv4HQ42cMyPFIYqpc7AbB4Gvt/DlY=
2325
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
2426
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
2527
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
@@ -32,6 +34,7 @@ github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG
3234
github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
3335
github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
3436
github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
37+
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
3538
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
3639
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3740
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
@@ -75,21 +78,28 @@ github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
7578
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
7679
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
7780
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
81+
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
7882
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
7983
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
84+
github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
85+
github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
8086
github.com/golang-migrate/migrate/v4 v4.19.0 h1:RcjOnCGz3Or6HQYEJ/EEVLfWnmw9KnoigPSjzhCuaSE=
8187
github.com/golang-migrate/migrate/v4 v4.19.0/go.mod h1:9dyEcu+hO+G9hPSw8AIg50yg622pXJsoHItQnDGZkI0=
8288
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
8389
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
8490
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
8591
github.com/google/go-github/v74 v74.0.0 h1:yZcddTUn8DPbj11GxnMrNiAnXH14gNs559AsUpNpPgM=
8692
github.com/google/go-github/v74 v74.0.0/go.mod h1:ubn/YdyftV80VPSI26nSJvaEsTOnsjrxG3o9kJhcyak=
93+
github.com/google/go-github/v75 v75.0.0 h1:k7q8Bvg+W5KxRl9Tjq16a9XEgVY1pwuiG5sIL7435Ic=
94+
github.com/google/go-github/v75 v75.0.0/go.mod h1:H3LUJEA1TCrzuUqtdAQniBNwuKiQIqdGKgBo1/M/uqI=
8795
github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0=
8896
github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU=
8997
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
9098
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
9199
github.com/graph-gophers/graphql-go v1.9.0 h1:yu0ucKHLc5qGpRwLYKIWtr9bOoxovkWasuBrPQwlHls=
92100
github.com/graph-gophers/graphql-go v1.9.0/go.mod h1:23olKZ7duEvHlF/2ELEoSZaY1aNPfShjP782SOoNTyM=
101+
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
102+
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
93103
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
94104
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
95105
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -101,6 +111,8 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l
101111
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
102112
github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48=
103113
github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw=
114+
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
115+
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
104116
github.com/hashicorp/hcl/v2 v2.18.1 h1:6nxnOJFku1EuSawSD81fuviYUV8DxFr3fp2dUi3ZYSo=
105117
github.com/hashicorp/hcl/v2 v2.18.1/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE=
106118
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -121,8 +133,11 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
121133
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
122134
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
123135
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
136+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
124137
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
125138
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
139+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
140+
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
126141
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
127142
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
128143
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
@@ -141,6 +156,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8
141156
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
142157
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
143158
github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
159+
github.com/palantir/go-githubapp v0.38.1 h1:Pkb3yVErM0G85piU2DbJ9c1jlKc32bUZ/LMQqFqY6qQ=
160+
github.com/palantir/go-githubapp v0.38.1/go.mod h1:5MYLd1/cAhKITPQUDbdZ/vR8SsM7uGgohLCixOEbnGU=
144161
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
145162
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
146163
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
@@ -149,10 +166,15 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
149166
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
150167
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
151168
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
169+
github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 h1:bsUq1dX0N8AOIL7EB/X911+m4EHsnWEHeJ0c+3TTBrg=
170+
github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
152171
github.com/redis/go-redis/v9 v9.18.0 h1:pMkxYPkEbMPwRdenAzUNyFNrDgHx9U+DrBabWNfSRQs=
153172
github.com/redis/go-redis/v9 v9.18.0/go.mod h1:k3ufPphLU5YXwNTUcCRXGxUoF1fqxnhFQmscfkCoDA0=
154173
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
155174
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
175+
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
176+
github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
177+
github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
156178
github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc=
157179
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
158180
github.com/samber/do v1.6.0 h1:Jy/N++BXINDB6lAx5wBlbpHlUdl0FKpLWgGEV9YWqaU=
@@ -161,6 +183,10 @@ github.com/sashabaranov/go-openai v1.41.2 h1:vfPRBZNMpnqu8ELsclWcAvF19lDNgh1t6TV
161183
github.com/sashabaranov/go-openai v1.41.2/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
162184
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
163185
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
186+
github.com/shurcooL/githubv4 v0.0.0-20260209031235-2402fdf4a9ed h1:KT7hI8vYXgU0s2qaMkrfq9tCA1w/iEPgfredVP+4Tzw=
187+
github.com/shurcooL/githubv4 v0.0.0-20260209031235-2402fdf4a9ed/go.mod h1:zqMwyHmnN/eDOZOdiTohqIUKUrTFX62PNlu7IJdu0q8=
188+
github.com/shurcooL/graphql v0.0.0-20240915155400-7ee5256398cf h1:o1uxfymjZ7jZ4MsgCErcwWGtVKSiNAXtS59Lhs6uI/g=
189+
github.com/shurcooL/graphql v0.0.0-20240915155400-7ee5256398cf/go.mod h1:9dIRpgIY7hVhoqfe0/FcYp0bpInZaT7dc3BYOprrIUE=
164190
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
165191
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
166192
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
@@ -238,7 +264,9 @@ golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
238264
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
239265
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
240266
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
267+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
241268
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
269+
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
242270
golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=
243271
golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
244272
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

0 commit comments

Comments
 (0)