diff --git a/go.mod b/go.mod
index 60557ca57..03efb2eb0 100644
--- a/go.mod
+++ b/go.mod
@@ -1,20 +1,20 @@
module github.com/digitalocean/digitalocean-cloud-controller-manager
-go 1.26.4
+go 1.26.8
require (
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
- github.com/digitalocean/godo v1.204.0
+ github.com/digitalocean/godo v1.206.0
github.com/go-logr/logr v1.4.3
github.com/google/go-cmp v0.7.0
github.com/google/uuid v1.6.0
github.com/minio/minio-go v6.0.14+incompatible
github.com/mitchellh/copystructure v1.2.0
github.com/pkg/errors v0.9.1
- github.com/prometheus/client_golang v1.23.2
+ github.com/prometheus/client_golang v1.24.1
go.uber.org/zap v1.28.0
golang.org/x/lint v0.0.0-20241112194109-818c5a804067
- golang.org/x/oauth2 v0.36.0
+ golang.org/x/oauth2 v0.37.0
golang.org/x/sync v0.22.0
k8s.io/api v0.36.2
k8s.io/apimachinery v0.36.2
@@ -80,7 +80,7 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
- github.com/prometheus/common v0.69.0 // indirect
+ github.com/prometheus/common v0.70.1 // indirect
github.com/prometheus/procfs v0.21.1 // indirect
github.com/spf13/cobra v1.10.2 // indirect
github.com/spf13/pflag v1.0.10 // indirect
@@ -101,14 +101,14 @@ require (
go.uber.org/multierr v1.11.0 // indirect
go.yaml.in/yaml/v2 v2.4.4 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
- golang.org/x/crypto v0.53.0 // indirect
+ golang.org/x/crypto v0.54.0 // indirect
golang.org/x/exp v0.0.0-20260611194520-c48552f49976 // indirect
- golang.org/x/net v0.56.0 // indirect
- golang.org/x/sys v0.46.0 // indirect
- golang.org/x/term v0.44.0 // indirect
- golang.org/x/text v0.38.0 // indirect
+ golang.org/x/net v0.57.0 // indirect
+ golang.org/x/sys v0.47.0 // indirect
+ golang.org/x/term v0.45.0 // indirect
+ golang.org/x/text v0.40.0 // indirect
golang.org/x/time v0.15.0 // indirect
- golang.org/x/tools v0.46.0 // indirect
+ golang.org/x/tools v0.47.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260630182238-925bb5da69e7 // indirect
diff --git a/go.sum b/go.sum
index 1c9f5a4ac..84be8331b 100644
--- a/go.sum
+++ b/go.sum
@@ -27,8 +27,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/digitalocean/godo v1.204.0 h1:jeYzhQ4T1ZgCEAQtGmy/qjzc4t9jH7kWj1xitHWfsHA=
-github.com/digitalocean/godo v1.204.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU=
+github.com/digitalocean/godo v1.206.0 h1:/GPyFPaT6Rk9wmT8RWlg1S5Kuq9ahuBZNEu/LvY8yB0=
+github.com/digitalocean/godo v1.206.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes=
@@ -134,8 +134,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
-github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
+github.com/klauspost/compress v1.19.1 h1:VsB4HPswih7mmZ8WleSFQ75c/Ui1M4trX5oAsJnhSlk=
+github.com/klauspost/compress v1.19.1/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -173,12 +173,12 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
-github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
+github.com/prometheus/client_golang v1.24.1 h1:JnJkREXzWxUdCuPFpIWZiPispT9xVV59uiuyR2bPlnU=
+github.com/prometheus/client_golang v1.24.1/go.mod h1:F+oSRECHg4sse5ucfYpYDeIv/hu68Zo0uoHKetWnzcE=
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
-github.com/prometheus/common v0.69.0 h1:OA85nJQS/T/MaYh/Q2CcgDKSGWqNIgrBDvDH85CuiNk=
-github.com/prometheus/common v0.69.0/go.mod h1:ZzL3f6u94qUxh9p+tJTrF+FvBS1XXbbRAZCQkytAL0Y=
+github.com/prometheus/common v0.70.1 h1:1HvjP4D5oL3t8RsPlwxA9onvvStjtIHYE5XuuwOi/PY=
+github.com/prometheus/common v0.70.1/go.mod h1:VdFUQDMZK3VLkurFUVhia6uys/0suUp86TJz5qbJRhc=
github.com/prometheus/procfs v0.21.1 h1:GljZCt+zSTS+NZq88cyQ1LjZ+RCHp3uVuabBWA5+OJI=
github.com/prometheus/procfs v0.21.1/go.mod h1:aB55Cww9pdSJVHk0hUf0inxWyyjPogFIjmHKYgMKmtY=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
@@ -256,8 +256,8 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
-golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
+golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw=
+golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk=
golang.org/x/exp v0.0.0-20260611194520-c48552f49976 h1:X8Hz2ImujgbmetVuW+w2YkyZChE3cBpZi2P158rTG9M=
golang.org/x/exp v0.0.0-20260611194520-c48552f49976/go.mod h1:vnf4pv9iKZXY58sQE1L86zmNWJ4159e1RkcWiLCkeEY=
golang.org/x/lint v0.0.0-20241112194109-818c5a804067 h1:adDmSQyFTCiv19j015EGKJBoaa7ElV0Q1Wovb/4G7NA=
@@ -271,10 +271,10 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o=
-golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec=
-golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
-golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
+golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE=
+golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
+golang.org/x/oauth2 v0.37.0 h1:JUlcxA8oAtauLfiH8FX2/FkAWHAdi0QtGCGc+hofE98=
+golang.org/x/oauth2 v0.37.0/go.mod h1:IxwZNxUULJmpBFf9K/9NTMSIfZZuvuTy1gGxhigP/58=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -284,14 +284,14 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
-golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
-golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
+golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
+golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0=
+golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
-golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
+golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs=
+golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY=
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -299,8 +299,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk=
-golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys=
+golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q=
+golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/vendor/github.com/digitalocean/godo/CHANGELOG.md b/vendor/github.com/digitalocean/godo/CHANGELOG.md
index 231402379..b10e0a3c0 100644
--- a/vendor/github.com/digitalocean/godo/CHANGELOG.md
+++ b/vendor/github.com/digitalocean/godo/CHANGELOG.md
@@ -1,5 +1,13 @@
# Change Log
+## [1.206.0] - 2026-08-31
+
+- #1094 - @sshirolkar - add godo support for simulations rpcs
+
+## [1.205.0] - 2026-08-25
+
+- #1089 - @ddatta-do - feat : add routes endpoints
+
## [1.204.0] - 2026-08-10
- #1080 - @nayanjd-do - Add constant to string match against volume capacity errors
diff --git a/vendor/github.com/digitalocean/godo/godo.go b/vendor/github.com/digitalocean/godo/godo.go
index 6d7f991c9..c0770303f 100644
--- a/vendor/github.com/digitalocean/godo/godo.go
+++ b/vendor/github.com/digitalocean/godo/godo.go
@@ -21,7 +21,7 @@ import (
)
const (
- libraryVersion = "1.204.0"
+ libraryVersion = "1.206.0"
defaultBaseURL = "https://api.digitalocean.com/"
userAgent = "godo/" + libraryVersion
mediaType = "application/json"
@@ -102,6 +102,7 @@ type Client struct {
UptimeChecks UptimeChecksService
VectorDBs VectorDBsService
VPCs VPCsService
+ Routes RoutesService
PartnerAttachment PartnerAttachmentService
GradientAI GradientAIService
DedicatedInference DedicatedInferenceService
@@ -348,6 +349,7 @@ func NewClient(httpClient *http.Client) *Client {
c.UptimeChecks = &UptimeChecksServiceOp{client: c}
c.VectorDBs = &VectorDBsServiceOp{client: c}
c.VPCs = &VPCsServiceOp{client: c}
+ c.Routes = &RoutesServiceOp{client: c}
c.PartnerAttachment = &PartnerAttachmentServiceOp{client: c}
c.GradientAI = &GradientAIServiceOp{client: c}
c.DedicatedInference = &DedicatedInferenceServiceOp{client: c}
diff --git a/vendor/github.com/digitalocean/godo/gradientai.go b/vendor/github.com/digitalocean/godo/gradientai.go
index ae0545616..6b65aa331 100644
--- a/vendor/github.com/digitalocean/godo/gradientai.go
+++ b/vendor/github.com/digitalocean/godo/gradientai.go
@@ -237,6 +237,28 @@ type GradientAIService interface {
ListModelEvaluationMetrics(ctx context.Context) (*ModelEvaluationMetricListResponse, *Response, error)
ListEvaluationDatasets(ctx context.Context, opt *EvaluationDatasetListOptions) (*EvaluationDatasetListResponse, *Response, error)
DeleteEvaluationDataset(ctx context.Context, datasetUUID string) (*EvaluationDatasetDeleteResponse, *Response, error)
+ CreateScenarioSetUploadPresignedURLs(ctx context.Context, createRequest *CreateScenarioSetUploadPresignedURLsRequest) (*CreateScenarioSetUploadPresignedURLsResponse, *Response, error)
+ CreateScenarioSet(ctx context.Context, createRequest *CreateScenarioSetRequest) (*ScenarioSet, *Response, error)
+ GenerateScenarioSet(ctx context.Context, generateRequest *GenerateScenarioSetRequest) (*ScenarioSet, *Response, error)
+ ListScenarioSets(ctx context.Context, opt *ScenarioSetListOptions) (*ScenarioSetListResponse, *Response, error)
+ GetScenarioSet(ctx context.Context, scenarioSetUUID string) (*ScenarioSet, *Response, error)
+ ListScenarios(ctx context.Context, scenarioSetUUID string, opt *ScenarioListOptions) (*ScenarioListResponse, *Response, error)
+ GetScenarioSetDownloadURL(ctx context.Context, scenarioSetUUID string) (*ScenarioSetDownloadURLResponse, *Response, error)
+ UpdateScenarioSet(ctx context.Context, scenarioSetUUID string, updateRequest *UpdateScenarioSetRequest) (*ScenarioSet, *Response, error)
+ DeleteScenarioSet(ctx context.Context, scenarioSetUUID string) (*ScenarioSetDeleteResponse, *Response, error)
+ ListScenarioLibrary(ctx context.Context, opt *ScenarioLibraryListOptions) (*ScenarioLibraryListResponse, *Response, error)
+ ListScenarioLibraryScenarios(ctx context.Context, libraryScenarioUUID string, opt *ScenarioListOptions) (*ScenarioListResponse, *Response, error)
+ CreateScenarioSetFromLibrary(ctx context.Context, libraryScenarioUUID string, createRequest *CreateScenarioSetFromLibraryRequest) (*ScenarioSet, *Response, error)
+ CreateSimulationRun(ctx context.Context, createRequest *CreateSimulationRunRequest) (*SimulationRun, *Response, error)
+ ListSimulationRuns(ctx context.Context, opt *SimulationRunListOptions) (*SimulationRunListResponse, *Response, error)
+ GetSimulationRun(ctx context.Context, runUUID string) (*SimulationRunGetResponse, *Response, error)
+ UpdateSimulationRun(ctx context.Context, runUUID string, updateRequest *UpdateSimulationRunRequest) (*SimulationRun, *Response, error)
+ CancelSimulationRun(ctx context.Context, runUUID string) (*SimulationRun, *Response, error)
+ DeleteSimulationRun(ctx context.Context, runUUID string) (*SimulationRunDeleteResponse, *Response, error)
+ ListSimulationJourneys(ctx context.Context, runUUID string, opt *SimulationJourneyListOptions) (*SimulationJourneyListResponse, *Response, error)
+ GetSimulationJourney(ctx context.Context, runUUID, journeyUUID string) (*SimulationJourney, *Response, error)
+ GetSimulationJourneyTrajectoryURL(ctx context.Context, runUUID, journeyUUID string) (*SimulationJourneyTrajectoryURLResponse, *Response, error)
+ GetSimulationJourneyTrajectory(ctx context.Context, runUUID, journeyUUID string) (*SimulationTrajectory, *Response, error)
}
var _ GradientAIService = &GradientAIServiceOp{}
diff --git a/vendor/github.com/digitalocean/godo/gradientai_simulations.go b/vendor/github.com/digitalocean/godo/gradientai_simulations.go
new file mode 100644
index 000000000..4a54561c6
--- /dev/null
+++ b/vendor/github.com/digitalocean/godo/gradientai_simulations.go
@@ -0,0 +1,1138 @@
+package godo
+
+import (
+ "context"
+ "fmt"
+ "net/http"
+)
+
+const (
+ scenarioSetsBasePath = "/v2/gen-ai/scenario_sets"
+ scenarioSetUploadPresignedURLsPath = scenarioSetsBasePath + "/file_upload_presigned_urls"
+ scenarioSetGeneratePath = scenarioSetsBasePath + "/generate"
+ scenarioSetByIDPath = scenarioSetsBasePath + "/%s"
+ scenarioSetScenariosPath = scenarioSetByIDPath + "/scenarios"
+ scenarioSetDownloadURLPath = scenarioSetByIDPath + "/download_url"
+ scenarioLibraryBasePath = "/v2/gen-ai/scenario_library"
+ scenarioLibraryByIDPath = scenarioLibraryBasePath + "/%s"
+ scenarioLibraryScenariosPath = scenarioLibraryByIDPath + "/scenarios"
+ scenarioLibraryCreateScenarioSetPath = scenarioLibraryByIDPath + "/create_scenario_set"
+ simulationRunsBasePath = "/v2/gen-ai/simulation_runs"
+ simulationRunByIDPath = simulationRunsBasePath + "/%s"
+ simulationRunCancelPath = simulationRunByIDPath + "/cancel"
+ simulationRunJourneysPath = simulationRunByIDPath + "/journeys"
+ simulationJourneyByIDPath = simulationRunJourneysPath + "/%s"
+ simulationJourneyTrajectoryPath = simulationJourneyByIDPath + "/trajectory"
+ simulationJourneyTrajectoryURLPath = simulationJourneyByIDPath + "/trajectory_url"
+)
+
+// GenAISortDirection is the sort direction used by GenAI list endpoints.
+type GenAISortDirection string
+
+const (
+ GenAISortDirectionUnspecified GenAISortDirection = "SORT_DIRECTION_UNSPECIFIED"
+ GenAISortDirectionAsc GenAISortDirection = "SORT_DIRECTION_ASC"
+ GenAISortDirectionDesc GenAISortDirection = "SORT_DIRECTION_DESC"
+)
+
+// ScenarioSetStatus is the lifecycle status of a scenario set.
+type ScenarioSetStatus string
+
+const (
+ ScenarioSetStatusUnspecified ScenarioSetStatus = "SCENARIO_SET_STATUS_UNSPECIFIED"
+ ScenarioSetStatusGenerating ScenarioSetStatus = "SCENARIO_SET_STATUS_GENERATING"
+ ScenarioSetStatusReady ScenarioSetStatus = "SCENARIO_SET_STATUS_READY"
+ ScenarioSetStatusFailed ScenarioSetStatus = "SCENARIO_SET_STATUS_FAILED"
+ ScenarioSetStatusCancelled ScenarioSetStatus = "SCENARIO_SET_STATUS_CANCELLED"
+)
+
+// ScenarioSetSourceKind describes how a scenario set was created.
+type ScenarioSetSourceKind string
+
+const (
+ ScenarioSetSourceKindUnspecified ScenarioSetSourceKind = "SCENARIO_SET_SOURCE_KIND_UNSPECIFIED"
+ ScenarioSetSourceKindUserUpload ScenarioSetSourceKind = "SCENARIO_SET_SOURCE_KIND_USER_UPLOAD"
+ ScenarioSetSourceKindGoalGenerated ScenarioSetSourceKind = "SCENARIO_SET_SOURCE_KIND_GOAL_GENERATED"
+ ScenarioSetSourceKindLibrary ScenarioSetSourceKind = "SCENARIO_SET_SOURCE_KIND_LIBRARY"
+ ScenarioSetSourceKindSignalGenerated ScenarioSetSourceKind = "SCENARIO_SET_SOURCE_KIND_SIGNAL_GENERATED"
+)
+
+// ScenarioSetSortField is a sortable field for ListScenarioSets.
+type ScenarioSetSortField string
+
+const (
+ ScenarioSetSortFieldUnspecified ScenarioSetSortField = "SCENARIO_SET_SORT_FIELD_UNSPECIFIED"
+ ScenarioSetSortFieldCreatedAt ScenarioSetSortField = "SCENARIO_SET_SORT_FIELD_CREATED_AT"
+ ScenarioSetSortFieldName ScenarioSetSortField = "SCENARIO_SET_SORT_FIELD_NAME"
+ ScenarioSetSortFieldStatus ScenarioSetSortField = "SCENARIO_SET_SORT_FIELD_STATUS"
+ ScenarioSetSortFieldScenarioCount ScenarioSetSortField = "SCENARIO_SET_SORT_FIELD_SCENARIO_COUNT"
+ ScenarioSetSortFieldUpdatedAt ScenarioSetSortField = "SCENARIO_SET_SORT_FIELD_UPDATED_AT"
+)
+
+// ScenarioSortField is a sortable field for ListScenarios.
+type ScenarioSortField string
+
+const (
+ ScenarioSortFieldUnspecified ScenarioSortField = "SCENARIO_SORT_FIELD_UNSPECIFIED"
+ ScenarioSortFieldFileOrder ScenarioSortField = "SCENARIO_SORT_FIELD_FILE_ORDER"
+ ScenarioSortFieldName ScenarioSortField = "SCENARIO_SORT_FIELD_NAME"
+ ScenarioSortFieldDescription ScenarioSortField = "SCENARIO_SORT_FIELD_DESCRIPTION"
+)
+
+// ScenarioLibraryEntryStatus is the lifecycle status of a scenario library entry.
+type ScenarioLibraryEntryStatus string
+
+const (
+ ScenarioLibraryEntryStatusUnspecified ScenarioLibraryEntryStatus = "SCENARIO_LIBRARY_ENTRY_STATUS_UNSPECIFIED"
+ ScenarioLibraryEntryStatusActive ScenarioLibraryEntryStatus = "SCENARIO_LIBRARY_ENTRY_STATUS_ACTIVE"
+ ScenarioLibraryEntryStatusArchived ScenarioLibraryEntryStatus = "SCENARIO_LIBRARY_ENTRY_STATUS_ARCHIVED"
+)
+
+// ScenarioLibrarySortField is a sortable field for ListScenarioLibrary.
+type ScenarioLibrarySortField string
+
+const (
+ ScenarioLibrarySortFieldUnspecified ScenarioLibrarySortField = "SCENARIO_LIBRARY_SORT_FIELD_UNSPECIFIED"
+ ScenarioLibrarySortFieldName ScenarioLibrarySortField = "SCENARIO_LIBRARY_SORT_FIELD_NAME"
+ ScenarioLibrarySortFieldCreatedAt ScenarioLibrarySortField = "SCENARIO_LIBRARY_SORT_FIELD_CREATED_AT"
+)
+
+// SimulationRunStatus is the lifecycle status of a simulation run.
+type SimulationRunStatus string
+
+const (
+ SimulationRunStatusUnspecified SimulationRunStatus = "SIMULATION_RUN_STATUS_UNSPECIFIED"
+ SimulationRunStatusPending SimulationRunStatus = "SIMULATION_RUN_STATUS_PENDING"
+ SimulationRunStatusRunning SimulationRunStatus = "SIMULATION_RUN_STATUS_RUNNING"
+ SimulationRunStatusSucceeded SimulationRunStatus = "SIMULATION_RUN_STATUS_SUCCEEDED"
+ SimulationRunStatusFailed SimulationRunStatus = "SIMULATION_RUN_STATUS_FAILED"
+ SimulationRunStatusCancelled SimulationRunStatus = "SIMULATION_RUN_STATUS_CANCELLED"
+ SimulationRunStatusEvaluating SimulationRunStatus = "SIMULATION_RUN_STATUS_EVALUATING"
+ SimulationRunStatusPartiallySuccessful SimulationRunStatus = "SIMULATION_RUN_STATUS_PARTIALLY_SUCCESSFUL"
+)
+
+// SimulationRunSortField is a sortable field for ListSimulationRuns.
+type SimulationRunSortField string
+
+const (
+ SimulationRunSortFieldUnspecified SimulationRunSortField = "SIMULATION_RUN_SORT_FIELD_UNSPECIFIED"
+ SimulationRunSortFieldCreatedAt SimulationRunSortField = "SIMULATION_RUN_SORT_FIELD_CREATED_AT"
+ SimulationRunSortFieldName SimulationRunSortField = "SIMULATION_RUN_SORT_FIELD_NAME"
+ SimulationRunSortFieldStatus SimulationRunSortField = "SIMULATION_RUN_SORT_FIELD_STATUS"
+ SimulationRunSortFieldUpdatedAt SimulationRunSortField = "SIMULATION_RUN_SORT_FIELD_UPDATED_AT"
+)
+
+// SimulationJourneyStatus is the lifecycle status of a simulation journey.
+type SimulationJourneyStatus string
+
+const (
+ SimulationJourneyStatusUnspecified SimulationJourneyStatus = "SIMULATION_JOURNEY_STATUS_UNSPECIFIED"
+ SimulationJourneyStatusRunning SimulationJourneyStatus = "SIMULATION_JOURNEY_STATUS_RUNNING"
+ SimulationJourneyStatusFinished SimulationJourneyStatus = "SIMULATION_JOURNEY_STATUS_FINISHED"
+ SimulationJourneyStatusFailed SimulationJourneyStatus = "SIMULATION_JOURNEY_STATUS_FAILED"
+ SimulationJourneyStatusPreparing SimulationJourneyStatus = "SIMULATION_JOURNEY_STATUS_PREPARING"
+)
+
+// SimulationJourneyVerdict is the judge verdict for a journey.
+type SimulationJourneyVerdict string
+
+const (
+ SimulationJourneyVerdictUnspecified SimulationJourneyVerdict = "SIMULATION_JOURNEY_VERDICT_UNSPECIFIED"
+ SimulationJourneyVerdictSuccess SimulationJourneyVerdict = "SIMULATION_JOURNEY_VERDICT_SUCCESS"
+ SimulationJourneyVerdictFailure SimulationJourneyVerdict = "SIMULATION_JOURNEY_VERDICT_FAILURE"
+ SimulationJourneyVerdictInconclusive SimulationJourneyVerdict = "SIMULATION_JOURNEY_VERDICT_INCONCLUSIVE"
+)
+
+// SimulationJourneySortField is a sortable field for ListSimulationJourneys.
+type SimulationJourneySortField string
+
+const (
+ SimulationJourneySortFieldUnspecified SimulationJourneySortField = "SIMULATION_JOURNEY_SORT_FIELD_UNSPECIFIED"
+ SimulationJourneySortFieldScenario SimulationJourneySortField = "SIMULATION_JOURNEY_SORT_FIELD_SCENARIO"
+ SimulationJourneySortFieldCreatedAt SimulationJourneySortField = "SIMULATION_JOURNEY_SORT_FIELD_CREATED_AT"
+ SimulationJourneySortFieldStatus SimulationJourneySortField = "SIMULATION_JOURNEY_SORT_FIELD_STATUS"
+ SimulationJourneySortFieldVerdict SimulationJourneySortField = "SIMULATION_JOURNEY_SORT_FIELD_VERDICT"
+)
+
+// SimulationTrajectoryStatus is the lifecycle status of a trajectory JSON object.
+type SimulationTrajectoryStatus string
+
+const (
+ SimulationTrajectoryStatusUnspecified SimulationTrajectoryStatus = "SIMULATION_TRAJECTORY_STATUS_UNSPECIFIED"
+ SimulationTrajectoryStatusRunning SimulationTrajectoryStatus = "SIMULATION_TRAJECTORY_STATUS_RUNNING"
+ SimulationTrajectoryStatusCompleted SimulationTrajectoryStatus = "SIMULATION_TRAJECTORY_STATUS_COMPLETED"
+ SimulationTrajectoryStatusFailed SimulationTrajectoryStatus = "SIMULATION_TRAJECTORY_STATUS_FAILED"
+ SimulationTrajectoryStatusCancelled SimulationTrajectoryStatus = "SIMULATION_TRAJECTORY_STATUS_CANCELLED"
+)
+
+// Scenario is a single unit of what to test within a scenario set.
+type Scenario struct {
+ ScenarioUUID string `json:"scenario_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+ Description string `json:"description,omitempty"`
+ UserPersona string `json:"user_persona,omitempty"`
+ StoppingCriteria []string `json:"stopping_criteria,omitempty"`
+ MaxTurns uint32 `json:"max_turns,omitempty"`
+ ExplorationBudget uint32 `json:"exploration_budget,omitempty"`
+}
+
+// ScenarioSet is a team-owned pool of scenarios backed by a canonical JSONL file.
+type ScenarioSet struct {
+ ScenarioSetUUID string `json:"scenario_set_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+ Description string `json:"description,omitempty"`
+ Status ScenarioSetStatus `json:"status,omitempty"`
+ SourceKind ScenarioSetSourceKind `json:"source_kind,omitempty"`
+ ScenarioCount uint32 `json:"scenario_count,omitempty"`
+ BucketName string `json:"bucket_name,omitempty"`
+ BucketRegion string `json:"bucket_region,omitempty"`
+ SpacesKey string `json:"spaces_key,omitempty"`
+ FailureReason string `json:"failure_reason,omitempty"`
+ SourceGoalDescription string `json:"source_goal_description,omitempty"`
+ GeneratorModelUUID string `json:"generator_model_uuid,omitempty"`
+ WorkflowUUID string `json:"workflow_uuid,omitempty"`
+ LibraryScenarioUUID string `json:"library_scenario_uuid,omitempty"`
+ SourceExportID string `json:"source_export_id,omitempty"`
+ CreatedAt *Timestamp `json:"created_at,omitempty"`
+ UpdatedAt *Timestamp `json:"updated_at,omitempty"`
+ DeletedAt *Timestamp `json:"deleted_at,omitempty"`
+}
+
+// ScenarioLibraryEntry is a platform-curated scenario set from the common library.
+type ScenarioLibraryEntry struct {
+ LibraryScenarioUUID string `json:"library_scenario_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+ Description string `json:"description,omitempty"`
+ GoalDescription string `json:"goal_description,omitempty"`
+ Category string `json:"category,omitempty"`
+ ScenarioCount uint32 `json:"scenario_count,omitempty"`
+ Status ScenarioLibraryEntryStatus `json:"status,omitempty"`
+ CreatedAt *Timestamp `json:"created_at,omitempty"`
+ UpdatedAt *Timestamp `json:"updated_at,omitempty"`
+}
+
+// CandidateAgentConfig configures the candidate agent under test for a simulation run.
+type CandidateAgentConfig struct {
+ AgentUUID string `json:"agent_uuid,omitempty"`
+ AgentDeploymentUUID string `json:"agent_deployment_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+}
+
+// SimulationEvaluationConfig opts a simulation run into an attached evaluation.
+type SimulationEvaluationConfig struct {
+ MetricUUIDs []string `json:"metric_uuids,omitempty"`
+ StarMetric *StarMetric `json:"star_metric,omitempty"`
+}
+
+// SimulationTokenUsage is per-actor token accounting for a run or journey.
+type SimulationTokenUsage struct {
+ SimulatorTokens string `json:"simulator_tokens,omitempty"`
+ JudgeTokens string `json:"judge_tokens,omitempty"`
+ CandidateAgentTokens string `json:"candidate_agent_tokens,omitempty"`
+ GeneratorTokens string `json:"generator_tokens,omitempty"`
+ TotalTokens string `json:"total_tokens,omitempty"`
+}
+
+// SimulationJourneyCounts is a breakdown of journey outcomes by verdict.
+type SimulationJourneyCounts struct {
+ SuccessCount uint32 `json:"success_count,omitempty"`
+ FailureCount uint32 `json:"failure_count,omitempty"`
+ InconclusiveCount uint32 `json:"inconclusive_count,omitempty"`
+}
+
+// SimulationRunResultSummary is the aggregated final result of a simulation run.
+type SimulationRunResultSummary struct {
+ VerdictCounts *SimulationJourneyCounts `json:"verdict_counts,omitempty"`
+ TokenUsage *SimulationTokenUsage `json:"token_usage,omitempty"`
+ TotalDurationSec string `json:"total_duration_sec,omitempty"`
+}
+
+// SimulationScenarioResult is a per-scenario rollup of journey outcomes within a run.
+type SimulationScenarioResult struct {
+ ScenarioUUID string `json:"scenario_uuid,omitempty"`
+ TotalJourneys uint32 `json:"total_journeys,omitempty"`
+ JourneysFinished uint32 `json:"journeys_finished,omitempty"`
+ VerdictCounts *SimulationJourneyCounts `json:"verdict_counts,omitempty"`
+}
+
+// SimulationRun is one execution of a scenario set against a candidate agent.
+type SimulationRun struct {
+ RunUUID string `json:"run_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+ ScenarioSetUUID string `json:"scenario_set_uuid,omitempty"`
+ AgentConfig *CandidateAgentConfig `json:"agent_config,omitempty"`
+ Status SimulationRunStatus `json:"status,omitempty"`
+ UserSimulatorModelUUID string `json:"user_simulator_model_uuid,omitempty"`
+ JudgeModelUUID string `json:"judge_model_uuid,omitempty"`
+ UserSimulatorConfig map[string]interface{} `json:"user_simulator_config,omitempty"`
+ ScenarioCount uint32 `json:"scenario_count,omitempty"`
+ TotalJourneys uint32 `json:"total_journeys,omitempty"`
+ JourneysFinished uint32 `json:"journeys_finished,omitempty"`
+ ResultSummary *SimulationRunResultSummary `json:"result_summary,omitempty"`
+ WorkflowUUID string `json:"workflow_uuid,omitempty"`
+ ExplorationBudget uint32 `json:"exploration_budget,omitempty"`
+ MaxTurns uint32 `json:"max_turns,omitempty"`
+ FailureReason string `json:"failure_reason,omitempty"`
+ CreatedAt *Timestamp `json:"created_at,omitempty"`
+ UpdatedAt *Timestamp `json:"updated_at,omitempty"`
+ DeletedAt *Timestamp `json:"deleted_at,omitempty"`
+ UserSimulatorModelName string `json:"user_simulator_model_name,omitempty"`
+ JudgeModelName string `json:"judge_model_name,omitempty"`
+ CreatedByUserID string `json:"created_by_user_id,omitempty"`
+ CreatedByUserEmail string `json:"created_by_user_email,omitempty"`
+ EvaluationRunUUID string `json:"evaluation_run_uuid,omitempty"`
+}
+
+// SimulationJourney is one independent execution within a simulation run.
+type SimulationJourney struct {
+ JourneyUUID string `json:"journey_uuid,omitempty"`
+ RunUUID string `json:"run_uuid,omitempty"`
+ ScenarioUUID string `json:"scenario_uuid,omitempty"`
+ JourneyIndex uint32 `json:"journey_index,omitempty"`
+ SessionID string `json:"session_id,omitempty"`
+ Status SimulationJourneyStatus `json:"status,omitempty"`
+ Verdict SimulationJourneyVerdict `json:"verdict,omitempty"`
+ TrajectoryBucketName string `json:"trajectory_bucket_name,omitempty"`
+ TrajectoryBucketRegion string `json:"trajectory_bucket_region,omitempty"`
+ TrajectorySpacesKey string `json:"trajectory_spaces_key,omitempty"`
+ TokenUsage *SimulationTokenUsage `json:"token_usage,omitempty"`
+ DurationSec string `json:"duration_sec,omitempty"`
+ JudgeReasoning string `json:"judge_reasoning,omitempty"`
+ FailureReason string `json:"failure_reason,omitempty"`
+ CreatedAt *Timestamp `json:"created_at,omitempty"`
+ UpdatedAt *Timestamp `json:"updated_at,omitempty"`
+}
+
+// SimulationTrajectoryToolCall is a tool call recorded on an assistant turn.
+type SimulationTrajectoryToolCall struct {
+ Name string `json:"name,omitempty"`
+ Description string `json:"description,omitempty"`
+ InputParameters map[string]interface{} `json:"input_parameters,omitempty"`
+ Output interface{} `json:"output,omitempty"`
+ ToolCallID string `json:"tool_call_id,omitempty"`
+ Ok bool `json:"ok,omitempty"`
+}
+
+// SimulationTrajectoryMessageTokens is token usage for a single assistant message.
+type SimulationTrajectoryMessageTokens struct {
+ Input uint32 `json:"input,omitempty"`
+ Output uint32 `json:"output,omitempty"`
+}
+
+// SimulationTrajectoryMessage is one user or assistant message in a trajectory.
+type SimulationTrajectoryMessage struct {
+ TurnIndex uint32 `json:"turn_index,omitempty"`
+ Role string `json:"role,omitempty"`
+ Content string `json:"content,omitempty"`
+ StartedAt string `json:"started_at,omitempty"`
+ CompletedAt string `json:"completed_at,omitempty"`
+ ToolCalls []*SimulationTrajectoryToolCall `json:"tool_calls,omitempty"`
+ Tokens *SimulationTrajectoryMessageTokens `json:"tokens,omitempty"`
+}
+
+// SimulationTrajectoryJudgeCriterion is a per-criterion judge evaluation.
+type SimulationTrajectoryJudgeCriterion struct {
+ Criterion string `json:"criterion,omitempty"`
+ Passed bool `json:"passed,omitempty"`
+ Reasoning string `json:"reasoning,omitempty"`
+}
+
+// SimulationTrajectoryJudgeResult is judge output embedded in a trajectory.
+type SimulationTrajectoryJudgeResult struct {
+ Verdict SimulationJourneyVerdict `json:"verdict,omitempty"`
+ Reasoning string `json:"reasoning,omitempty"`
+ CriteriaPassFail []*SimulationTrajectoryJudgeCriterion `json:"criteria_pass_fail,omitempty"`
+}
+
+// EvaluationMetricResultStatus is the outcome of scoring a single metric.
+// Matches cthulhu EvaluationMetricResultStatus.
+type EvaluationMetricResultStatus string
+
+const (
+ EvaluationMetricResultStatusUnspecified EvaluationMetricResultStatus = "EVALUATION_METRIC_RESULT_STATUS_UNSPECIFIED"
+ EvaluationMetricResultStatusCompleted EvaluationMetricResultStatus = "EVALUATION_METRIC_RESULT_STATUS_COMPLETED"
+ EvaluationMetricResultStatusFailed EvaluationMetricResultStatus = "EVALUATION_METRIC_RESULT_STATUS_FAILED"
+ EvaluationMetricResultStatusSkipped EvaluationMetricResultStatus = "EVALUATION_METRIC_RESULT_STATUS_SKIPPED"
+)
+
+// EvaluationMetricResult is a per-metric score and judge reasoning.
+// Matches cthulhu EvaluationMetricResult (used on simulation trajectories).
+type EvaluationMetricResult struct {
+ ErrorDescription string `json:"error_description,omitempty"`
+ MetricName string `json:"metric_name,omitempty"`
+ MetricUUID string `json:"metric_uuid,omitempty"`
+ MetricValueType EvaluationMetricValueType `json:"metric_value_type,omitempty"`
+ NumberValue float64 `json:"number_value,omitempty"`
+ Reasoning string `json:"reasoning,omitempty"`
+ Status EvaluationMetricResultStatus `json:"status,omitempty"`
+ StringValue string `json:"string_value,omitempty"`
+}
+
+// SimulationTrajectory is the canonical trajectory JSON for one journey.
+type SimulationTrajectory struct {
+ AgentID string `json:"agent_id,omitempty"`
+ CompletedAt string `json:"completed_at,omitempty"`
+ DurationSec string `json:"duration_sec,omitempty"`
+ EvaluationMetrics []*EvaluationMetricResult `json:"evaluation_metrics,omitempty"`
+ FailureReason string `json:"failure_reason,omitempty"`
+ JourneyIndex uint32 `json:"journey_index,omitempty"`
+ JourneyUUID string `json:"journey_uuid,omitempty"`
+ Judge *SimulationTrajectoryJudgeResult `json:"judge,omitempty"`
+ MaxTurns uint32 `json:"max_turns,omitempty"`
+ Messages []*SimulationTrajectoryMessage `json:"messages,omitempty"`
+ RunUUID string `json:"run_uuid,omitempty"`
+ ScenarioUUID string `json:"scenario_uuid,omitempty"`
+ SessionID string `json:"session_id,omitempty"`
+ StartedAt string `json:"started_at,omitempty"`
+ Status SimulationTrajectoryStatus `json:"status,omitempty"`
+ TokenUsage *SimulationTokenUsage `json:"token_usage,omitempty"`
+ TurnCount uint32 `json:"turn_count,omitempty"`
+ Verdict SimulationJourneyVerdict `json:"verdict,omitempty"`
+}
+
+// CreateScenarioSetUploadPresignedURLsRequest requests presigned upload URLs for scenario set files.
+type CreateScenarioSetUploadPresignedURLsRequest struct {
+ Files []*PresignedUrlFile `json:"files,omitempty"`
+}
+
+// CreateScenarioSetUploadPresignedURLsResponse is returned by CreateScenarioSetUploadPresignedURLs.
+type CreateScenarioSetUploadPresignedURLsResponse struct {
+ RequestID string `json:"request_id,omitempty"`
+ Uploads []*FilePresignedUrlResponse `json:"uploads,omitempty"`
+}
+
+// CreateScenarioSetRequest creates a scenario set from inline scenarios or an uploaded file.
+type CreateScenarioSetRequest struct {
+ Name string `json:"name,omitempty"`
+ Scenarios []*Scenario `json:"scenarios,omitempty"`
+ FileUploadScenarioSet *FileUploadDataSource `json:"file_upload_scenario_set,omitempty"`
+}
+
+// GenerateScenarioSetRequest dispatches goal-driven scenario generation.
+type GenerateScenarioSetRequest struct {
+ Name string `json:"name,omitempty"`
+ GoalDescription string `json:"goal_description,omitempty"`
+ NumScenarios uint32 `json:"num_scenarios,omitempty"`
+ GeneratorModelUUID string `json:"generator_model_uuid,omitempty"`
+}
+
+// UpdateScenarioSetRequest updates a scenario set name and/or replaces its scenarios.
+type UpdateScenarioSetRequest struct {
+ ScenarioSetUUID string `json:"scenario_set_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+ Scenarios []*Scenario `json:"scenarios,omitempty"`
+}
+
+// CreateScenarioSetFromLibraryRequest materializes a library entry into a team-owned scenario set.
+type CreateScenarioSetFromLibraryRequest struct {
+ LibraryScenarioUUID string `json:"library_scenario_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+}
+
+// CreateSimulationRunRequest creates a simulation run.
+type CreateSimulationRunRequest struct {
+ ScenarioSetUUID string `json:"scenario_set_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+ AgentConfig *CandidateAgentConfig `json:"agent_config,omitempty"`
+ UserSimulatorModelUUID string `json:"user_simulator_model_uuid,omitempty"`
+ JudgeModelUUID string `json:"judge_model_uuid,omitempty"`
+ UserSimulatorConfig map[string]interface{} `json:"user_simulator_config,omitempty"`
+ ExplorationBudget uint32 `json:"exploration_budget,omitempty"`
+ MaxTurns uint32 `json:"max_turns,omitempty"`
+ EvaluationConfig *SimulationEvaluationConfig `json:"evaluation_config,omitempty"`
+}
+
+// UpdateSimulationRunRequest renames a simulation run.
+type UpdateSimulationRunRequest struct {
+ RunUUID string `json:"run_uuid,omitempty"`
+ Name string `json:"name,omitempty"`
+}
+
+// ScenarioSetListOptions specifies optional parameters for listing scenario sets.
+type ScenarioSetListOptions struct {
+ Statuses []ScenarioSetStatus `url:"statuses,omitempty"`
+ SourceKinds []ScenarioSetSourceKind `url:"source_kinds,omitempty"`
+ Search string `url:"search,omitempty"`
+ SortBy ScenarioSetSortField `url:"sort_by,omitempty"`
+ SortDirection GenAISortDirection `url:"sort_direction,omitempty"`
+ ListOptions
+}
+
+// ScenarioListOptions specifies optional parameters for listing scenarios.
+type ScenarioListOptions struct {
+ Search string `url:"search,omitempty"`
+ SortBy ScenarioSortField `url:"sort_by,omitempty"`
+ SortDirection GenAISortDirection `url:"sort_direction,omitempty"`
+ ListOptions
+}
+
+// ScenarioLibraryListOptions specifies optional parameters for listing the scenario library.
+type ScenarioLibraryListOptions struct {
+ Category string `url:"category,omitempty"`
+ Search string `url:"search,omitempty"`
+ SortBy ScenarioLibrarySortField `url:"sort_by,omitempty"`
+ SortDirection GenAISortDirection `url:"sort_direction,omitempty"`
+ ListOptions
+}
+
+// SimulationRunListOptions specifies optional parameters for listing simulation runs.
+type SimulationRunListOptions struct {
+ ScenarioSetUUID string `url:"scenario_set_uuid,omitempty"`
+ Statuses []SimulationRunStatus `url:"statuses,omitempty"`
+ Search string `url:"search,omitempty"`
+ SortBy SimulationRunSortField `url:"sort_by,omitempty"`
+ SortDirection GenAISortDirection `url:"sort_direction,omitempty"`
+ ListOptions
+}
+
+// SimulationJourneyListOptions specifies optional parameters for listing simulation journeys.
+type SimulationJourneyListOptions struct {
+ ScenarioUUID string `url:"scenario_uuid,omitempty"`
+ Statuses []SimulationJourneyStatus `url:"statuses,omitempty"`
+ Verdicts []SimulationJourneyVerdict `url:"verdicts,omitempty"`
+ Search string `url:"search,omitempty"`
+ SortBy SimulationJourneySortField `url:"sort_by,omitempty"`
+ SortDirection GenAISortDirection `url:"sort_direction,omitempty"`
+ ListOptions
+}
+
+// ScenarioSetListResponse is returned by ListScenarioSets.
+type ScenarioSetListResponse struct {
+ ScenarioSets []*ScenarioSet `json:"scenario_sets,omitempty"`
+ Links *Links `json:"links,omitempty"`
+ Meta *Meta `json:"meta,omitempty"`
+ AvailableStatuses []ScenarioSetStatus `json:"available_statuses,omitempty"`
+ AvailableSourceKinds []ScenarioSetSourceKind `json:"available_source_kinds,omitempty"`
+ AvailableSortBy []ScenarioSetSortField `json:"available_sort_by,omitempty"`
+ AvailableSortDirections []GenAISortDirection `json:"available_sort_directions,omitempty"`
+}
+
+// ScenarioListResponse is returned by ListScenarios and ListScenarioLibraryScenarios.
+type ScenarioListResponse struct {
+ Scenarios []*Scenario `json:"scenarios,omitempty"`
+ Links *Links `json:"links,omitempty"`
+ Meta *Meta `json:"meta,omitempty"`
+ AvailableSortBy []ScenarioSortField `json:"available_sort_by,omitempty"`
+ AvailableSortDirections []GenAISortDirection `json:"available_sort_directions,omitempty"`
+}
+
+// ScenarioLibraryListResponse is returned by ListScenarioLibrary.
+type ScenarioLibraryListResponse struct {
+ Scenarios []*ScenarioLibraryEntry `json:"scenarios,omitempty"`
+ Links *Links `json:"links,omitempty"`
+ Meta *Meta `json:"meta,omitempty"`
+ AvailableCategories []string `json:"available_categories,omitempty"`
+ AvailableSortBy []ScenarioLibrarySortField `json:"available_sort_by,omitempty"`
+ AvailableSortDirections []GenAISortDirection `json:"available_sort_directions,omitempty"`
+}
+
+// ScenarioSetDownloadURLResponse is returned by GetScenarioSetDownloadURL.
+type ScenarioSetDownloadURLResponse struct {
+ DownloadURL string `json:"download_url,omitempty"`
+ ExpiresAt *Timestamp `json:"expires_at,omitempty"`
+}
+
+// ScenarioSetDeleteResponse is returned by DeleteScenarioSet.
+type ScenarioSetDeleteResponse struct {
+ ScenarioSetUUID string `json:"scenario_set_uuid,omitempty"`
+}
+
+// SimulationRunListResponse is returned by ListSimulationRuns.
+type SimulationRunListResponse struct {
+ SimulationRuns []*SimulationRun `json:"simulation_runs,omitempty"`
+ Links *Links `json:"links,omitempty"`
+ Meta *Meta `json:"meta,omitempty"`
+ AvailableStatuses []SimulationRunStatus `json:"available_statuses,omitempty"`
+ AvailableSortBy []SimulationRunSortField `json:"available_sort_by,omitempty"`
+ AvailableSortDirections []GenAISortDirection `json:"available_sort_directions,omitempty"`
+}
+
+// SimulationRunGetResponse is returned by GetSimulationRun.
+type SimulationRunGetResponse struct {
+ SimulationRun *SimulationRun `json:"simulation_run,omitempty"`
+ ScenarioResults []*SimulationScenarioResult `json:"scenario_results,omitempty"`
+}
+
+// SimulationRunDeleteResponse is returned by DeleteSimulationRun.
+type SimulationRunDeleteResponse struct {
+ RunUUID string `json:"run_uuid,omitempty"`
+}
+
+// SimulationJourneyListResponse is returned by ListSimulationJourneys.
+type SimulationJourneyListResponse struct {
+ Journeys []*SimulationJourney `json:"journeys,omitempty"`
+ Links *Links `json:"links,omitempty"`
+ Meta *Meta `json:"meta,omitempty"`
+ AvailableStatuses []SimulationJourneyStatus `json:"available_statuses,omitempty"`
+ AvailableVerdicts []SimulationJourneyVerdict `json:"available_verdicts,omitempty"`
+ AvailableSortBy []SimulationJourneySortField `json:"available_sort_by,omitempty"`
+ AvailableSortDirections []GenAISortDirection `json:"available_sort_directions,omitempty"`
+}
+
+// SimulationJourneyTrajectoryURLResponse is returned by GetSimulationJourneyTrajectoryURL.
+type SimulationJourneyTrajectoryURLResponse struct {
+ DownloadURL string `json:"download_url,omitempty"`
+ ExpiresAt *Timestamp `json:"expires_at,omitempty"`
+}
+
+type scenarioSetRoot struct {
+ ScenarioSet *ScenarioSet `json:"scenario_set"`
+}
+
+type simulationRunRoot struct {
+ SimulationRun *SimulationRun `json:"simulation_run"`
+}
+
+type simulationJourneyRoot struct {
+ Journey *SimulationJourney `json:"journey"`
+}
+
+type simulationTrajectoryRoot struct {
+ Trajectory *SimulationTrajectory `json:"trajectory"`
+}
+
+// CreateScenarioSetUploadPresignedURLs creates presigned URLs for uploading
+// scenario set files.
+func (s *GradientAIServiceOp) CreateScenarioSetUploadPresignedURLs(ctx context.Context, createRequest *CreateScenarioSetUploadPresignedURLsRequest) (*CreateScenarioSetUploadPresignedURLsResponse, *Response, error) {
+ if createRequest == nil {
+ return nil, nil, fmt.Errorf("create request is required")
+ }
+ if len(createRequest.Files) == 0 {
+ return nil, nil, fmt.Errorf("files is required")
+ }
+ for _, file := range createRequest.Files {
+ if file == nil || file.FileName == "" {
+ return nil, nil, fmt.Errorf("file_name is required for every requested file")
+ }
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodPost, scenarioSetUploadPresignedURLsPath, createRequest)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(CreateScenarioSetUploadPresignedURLsResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root, resp, nil
+}
+
+// CreateScenarioSet creates a scenario set from inline scenarios or an uploaded
+// file. Exactly one of the two sources must be provided.
+func (s *GradientAIServiceOp) CreateScenarioSet(ctx context.Context, createRequest *CreateScenarioSetRequest) (*ScenarioSet, *Response, error) {
+ if createRequest == nil {
+ return nil, nil, fmt.Errorf("create request is required")
+ }
+ if createRequest.Name == "" {
+ return nil, nil, fmt.Errorf("name is required")
+ }
+ hasScenarios := len(createRequest.Scenarios) > 0
+ hasFile := createRequest.FileUploadScenarioSet != nil && createRequest.FileUploadScenarioSet.StoredObjectKey != ""
+ if hasScenarios == hasFile {
+ return nil, nil, fmt.Errorf("provide exactly one of scenarios or file_upload_scenario_set")
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodPost, scenarioSetsBasePath, createRequest)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(scenarioSetRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.ScenarioSet, resp, nil
+}
+
+// GenerateScenarioSet dispatches goal-driven scenario generation.
+func (s *GradientAIServiceOp) GenerateScenarioSet(ctx context.Context, generateRequest *GenerateScenarioSetRequest) (*ScenarioSet, *Response, error) {
+ if generateRequest == nil {
+ return nil, nil, fmt.Errorf("generate request is required")
+ }
+ if generateRequest.Name == "" {
+ return nil, nil, fmt.Errorf("name is required")
+ }
+ if generateRequest.GoalDescription == "" {
+ return nil, nil, fmt.Errorf("goal_description is required")
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodPost, scenarioSetGeneratePath, generateRequest)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(scenarioSetRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.ScenarioSet, resp, nil
+}
+
+// ListScenarioSets lists scenario sets for the team.
+func (s *GradientAIServiceOp) ListScenarioSets(ctx context.Context, opt *ScenarioSetListOptions) (*ScenarioSetListResponse, *Response, error) {
+ path, err := addOptions(scenarioSetsBasePath, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(ScenarioSetListResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ if l := root.Links; l != nil {
+ resp.Links = l
+ }
+ if m := root.Meta; m != nil {
+ resp.Meta = m
+ }
+ return root, resp, nil
+}
+
+// GetScenarioSet retrieves a scenario set by UUID.
+func (s *GradientAIServiceOp) GetScenarioSet(ctx context.Context, scenarioSetUUID string) (*ScenarioSet, *Response, error) {
+ if scenarioSetUUID == "" {
+ return nil, nil, fmt.Errorf("scenario set uuid is required")
+ }
+ path := fmt.Sprintf(scenarioSetByIDPath, scenarioSetUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(scenarioSetRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.ScenarioSet, resp, nil
+}
+
+// ListScenarios lists scenarios within a scenario set.
+func (s *GradientAIServiceOp) ListScenarios(ctx context.Context, scenarioSetUUID string, opt *ScenarioListOptions) (*ScenarioListResponse, *Response, error) {
+ if scenarioSetUUID == "" {
+ return nil, nil, fmt.Errorf("scenario set uuid is required")
+ }
+ path := fmt.Sprintf(scenarioSetScenariosPath, scenarioSetUUID)
+ path, err := addOptions(path, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(ScenarioListResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ if l := root.Links; l != nil {
+ resp.Links = l
+ }
+ if m := root.Meta; m != nil {
+ resp.Meta = m
+ }
+ return root, resp, nil
+}
+
+// GetScenarioSetDownloadURL returns a presigned download URL for a scenario set's
+// canonical JSONL file.
+func (s *GradientAIServiceOp) GetScenarioSetDownloadURL(ctx context.Context, scenarioSetUUID string) (*ScenarioSetDownloadURLResponse, *Response, error) {
+ if scenarioSetUUID == "" {
+ return nil, nil, fmt.Errorf("scenario set uuid is required")
+ }
+ path := fmt.Sprintf(scenarioSetDownloadURLPath, scenarioSetUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(ScenarioSetDownloadURLResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root, resp, nil
+}
+
+// UpdateScenarioSet updates a scenario set name and/or replaces its scenarios.
+func (s *GradientAIServiceOp) UpdateScenarioSet(ctx context.Context, scenarioSetUUID string, updateRequest *UpdateScenarioSetRequest) (*ScenarioSet, *Response, error) {
+ if scenarioSetUUID == "" {
+ return nil, nil, fmt.Errorf("scenario set uuid is required")
+ }
+ if updateRequest == nil {
+ return nil, nil, fmt.Errorf("update request is required")
+ }
+ if updateRequest.Name == "" && len(updateRequest.Scenarios) == 0 {
+ return nil, nil, fmt.Errorf("at least one of name or scenarios must be set")
+ }
+ path := fmt.Sprintf(scenarioSetByIDPath, scenarioSetUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodPut, path, updateRequest)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(scenarioSetRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.ScenarioSet, resp, nil
+}
+
+// DeleteScenarioSet deletes a scenario set by UUID.
+func (s *GradientAIServiceOp) DeleteScenarioSet(ctx context.Context, scenarioSetUUID string) (*ScenarioSetDeleteResponse, *Response, error) {
+ if scenarioSetUUID == "" {
+ return nil, nil, fmt.Errorf("scenario set uuid is required")
+ }
+ path := fmt.Sprintf(scenarioSetByIDPath, scenarioSetUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(ScenarioSetDeleteResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root, resp, nil
+}
+
+// ListScenarioLibrary lists platform-curated scenario library entries.
+func (s *GradientAIServiceOp) ListScenarioLibrary(ctx context.Context, opt *ScenarioLibraryListOptions) (*ScenarioLibraryListResponse, *Response, error) {
+ path, err := addOptions(scenarioLibraryBasePath, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(ScenarioLibraryListResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ if l := root.Links; l != nil {
+ resp.Links = l
+ }
+ if m := root.Meta; m != nil {
+ resp.Meta = m
+ }
+ return root, resp, nil
+}
+
+// ListScenarioLibraryScenarios lists scenarios within a scenario library entry.
+func (s *GradientAIServiceOp) ListScenarioLibraryScenarios(ctx context.Context, libraryScenarioUUID string, opt *ScenarioListOptions) (*ScenarioListResponse, *Response, error) {
+ if libraryScenarioUUID == "" {
+ return nil, nil, fmt.Errorf("library scenario uuid is required")
+ }
+ path := fmt.Sprintf(scenarioLibraryScenariosPath, libraryScenarioUUID)
+ path, err := addOptions(path, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(ScenarioListResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ if l := root.Links; l != nil {
+ resp.Links = l
+ }
+ if m := root.Meta; m != nil {
+ resp.Meta = m
+ }
+ return root, resp, nil
+}
+
+// CreateScenarioSetFromLibrary materializes a library entry into a team-owned
+// scenario set.
+func (s *GradientAIServiceOp) CreateScenarioSetFromLibrary(ctx context.Context, libraryScenarioUUID string, createRequest *CreateScenarioSetFromLibraryRequest) (*ScenarioSet, *Response, error) {
+ if libraryScenarioUUID == "" {
+ return nil, nil, fmt.Errorf("library scenario uuid is required")
+ }
+ if createRequest == nil {
+ createRequest = &CreateScenarioSetFromLibraryRequest{}
+ }
+ if createRequest.LibraryScenarioUUID == "" {
+ createRequest.LibraryScenarioUUID = libraryScenarioUUID
+ }
+ path := fmt.Sprintf(scenarioLibraryCreateScenarioSetPath, libraryScenarioUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodPost, path, createRequest)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(scenarioSetRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.ScenarioSet, resp, nil
+}
+
+// CreateSimulationRun creates a simulation run.
+func (s *GradientAIServiceOp) CreateSimulationRun(ctx context.Context, createRequest *CreateSimulationRunRequest) (*SimulationRun, *Response, error) {
+ if createRequest == nil {
+ return nil, nil, fmt.Errorf("create request is required")
+ }
+ if createRequest.ScenarioSetUUID == "" {
+ return nil, nil, fmt.Errorf("scenario_set_uuid is required")
+ }
+ if createRequest.AgentConfig == nil || createRequest.AgentConfig.AgentUUID == "" {
+ return nil, nil, fmt.Errorf("agent_config.agent_uuid is required")
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodPost, simulationRunsBasePath, createRequest)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(simulationRunRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.SimulationRun, resp, nil
+}
+
+// ListSimulationRuns lists simulation runs for the team.
+func (s *GradientAIServiceOp) ListSimulationRuns(ctx context.Context, opt *SimulationRunListOptions) (*SimulationRunListResponse, *Response, error) {
+ path, err := addOptions(simulationRunsBasePath, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(SimulationRunListResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ if l := root.Links; l != nil {
+ resp.Links = l
+ }
+ if m := root.Meta; m != nil {
+ resp.Meta = m
+ }
+ return root, resp, nil
+}
+
+// GetSimulationRun retrieves a simulation run by UUID, including per-scenario
+// result rollups when available.
+func (s *GradientAIServiceOp) GetSimulationRun(ctx context.Context, runUUID string) (*SimulationRunGetResponse, *Response, error) {
+ if runUUID == "" {
+ return nil, nil, fmt.Errorf("run uuid is required")
+ }
+ path := fmt.Sprintf(simulationRunByIDPath, runUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(SimulationRunGetResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root, resp, nil
+}
+
+// UpdateSimulationRun updates mutable fields on a simulation run.
+func (s *GradientAIServiceOp) UpdateSimulationRun(ctx context.Context, runUUID string, updateRequest *UpdateSimulationRunRequest) (*SimulationRun, *Response, error) {
+ if runUUID == "" {
+ return nil, nil, fmt.Errorf("run uuid is required")
+ }
+ if updateRequest == nil {
+ return nil, nil, fmt.Errorf("update request is required")
+ }
+ if updateRequest.Name == "" {
+ return nil, nil, fmt.Errorf("name is required")
+ }
+ path := fmt.Sprintf(simulationRunByIDPath, runUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodPut, path, updateRequest)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(simulationRunRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.SimulationRun, resp, nil
+}
+
+// CancelSimulationRun cancels an in-progress simulation run.
+func (s *GradientAIServiceOp) CancelSimulationRun(ctx context.Context, runUUID string) (*SimulationRun, *Response, error) {
+ if runUUID == "" {
+ return nil, nil, fmt.Errorf("run uuid is required")
+ }
+ path := fmt.Sprintf(simulationRunCancelPath, runUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodPatch, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(simulationRunRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.SimulationRun, resp, nil
+}
+
+// DeleteSimulationRun deletes a simulation run by UUID.
+func (s *GradientAIServiceOp) DeleteSimulationRun(ctx context.Context, runUUID string) (*SimulationRunDeleteResponse, *Response, error) {
+ if runUUID == "" {
+ return nil, nil, fmt.Errorf("run uuid is required")
+ }
+ path := fmt.Sprintf(simulationRunByIDPath, runUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodDelete, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(SimulationRunDeleteResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root, resp, nil
+}
+
+// ListSimulationJourneys lists journeys for a simulation run.
+func (s *GradientAIServiceOp) ListSimulationJourneys(ctx context.Context, runUUID string, opt *SimulationJourneyListOptions) (*SimulationJourneyListResponse, *Response, error) {
+ if runUUID == "" {
+ return nil, nil, fmt.Errorf("run uuid is required")
+ }
+ path := fmt.Sprintf(simulationRunJourneysPath, runUUID)
+ path, err := addOptions(path, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(SimulationJourneyListResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ if l := root.Links; l != nil {
+ resp.Links = l
+ }
+ if m := root.Meta; m != nil {
+ resp.Meta = m
+ }
+ return root, resp, nil
+}
+
+// GetSimulationJourney retrieves a single journey within a simulation run.
+func (s *GradientAIServiceOp) GetSimulationJourney(ctx context.Context, runUUID, journeyUUID string) (*SimulationJourney, *Response, error) {
+ if runUUID == "" {
+ return nil, nil, fmt.Errorf("run uuid is required")
+ }
+ if journeyUUID == "" {
+ return nil, nil, fmt.Errorf("journey uuid is required")
+ }
+ path := fmt.Sprintf(simulationJourneyByIDPath, runUUID, journeyUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(simulationJourneyRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.Journey, resp, nil
+}
+
+// GetSimulationJourneyTrajectoryURL returns a presigned download URL for a
+// journey's trajectory JSON.
+func (s *GradientAIServiceOp) GetSimulationJourneyTrajectoryURL(ctx context.Context, runUUID, journeyUUID string) (*SimulationJourneyTrajectoryURLResponse, *Response, error) {
+ if runUUID == "" {
+ return nil, nil, fmt.Errorf("run uuid is required")
+ }
+ if journeyUUID == "" {
+ return nil, nil, fmt.Errorf("journey uuid is required")
+ }
+ path := fmt.Sprintf(simulationJourneyTrajectoryURLPath, runUUID, journeyUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(SimulationJourneyTrajectoryURLResponse)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root, resp, nil
+}
+
+// GetSimulationJourneyTrajectory retrieves the parsed trajectory JSON for a
+// journey.
+func (s *GradientAIServiceOp) GetSimulationJourneyTrajectory(ctx context.Context, runUUID, journeyUUID string) (*SimulationTrajectory, *Response, error) {
+ if runUUID == "" {
+ return nil, nil, fmt.Errorf("run uuid is required")
+ }
+ if journeyUUID == "" {
+ return nil, nil, fmt.Errorf("journey uuid is required")
+ }
+ path := fmt.Sprintf(simulationJourneyTrajectoryPath, runUUID, journeyUUID)
+
+ req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(simulationTrajectoryRoot)
+ resp, err := s.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ return root.Trajectory, resp, nil
+}
diff --git a/vendor/github.com/digitalocean/godo/routes.go b/vendor/github.com/digitalocean/godo/routes.go
new file mode 100644
index 000000000..7fa01a0f5
--- /dev/null
+++ b/vendor/github.com/digitalocean/godo/routes.go
@@ -0,0 +1,159 @@
+package godo
+
+import (
+ "context"
+ "fmt"
+ "net/http"
+ "time"
+)
+
+// Route types assigned by the server.
+const (
+ RouteTypeStatic = "STATIC"
+ RouteTypeDynamic = "DYNAMIC"
+)
+
+// RoutesService is an interface for managing VPC and subnet scoped routes with the
+// DigitalOcean API.
+// See: https://docs.digitalocean.com/reference/api/api-reference/#tag/Routes
+type RoutesService interface {
+ ListVPCRoutes(context.Context, string, *ListOptions) ([]*Route, *Response, error)
+ ListSubnetRoutes(context.Context, string, string, *ListOptions) ([]*Route, *Response, error)
+ CreateSubnetRoute(context.Context, string, string, *RouteCreateRequest) (*Route, *Response, error)
+ UpdateSubnetRoute(context.Context, string, string, string, *RouteUpdateRequest) (*Route, *Response, error)
+ DeleteSubnetRoute(context.Context, string, string, string) (*Response, error)
+}
+
+var _ RoutesService = &RoutesServiceOp{}
+
+// RoutesServiceOp interfaces with Routes endpoints in the DigitalOcean API.
+type RoutesServiceOp struct {
+ client *Client
+}
+
+// Route represents a DigitalOcean VPC or subnet-scoped route.
+type Route struct {
+ ID string `json:"id,omitempty"`
+ Type string `json:"type,omitempty"`
+ DestinationCIDR string `json:"destination_cidr,omitempty"`
+ TargetURNs []string `json:"target_urns,omitempty"`
+ Modifiable bool `json:"modifiable,omitempty"`
+ CreatedAt time.Time `json:"created_at,omitempty"`
+}
+
+// RouteCreateRequest represents a request to create a subnet-scoped static route.
+type RouteCreateRequest struct {
+ DestinationCIDR string `json:"destination_cidr"`
+ TargetURNs []string `json:"target_urns"`
+}
+
+// RouteUpdateRequest represents a request to update a subnet-scoped static route.
+type RouteUpdateRequest struct {
+ TargetURNs []string `json:"target_urns"`
+}
+
+type routeRoot struct {
+ Route *Route `json:"route"`
+}
+
+type routesRoot struct {
+ Routes []*Route `json:"routes"`
+ Links *Links `json:"links"`
+ Meta *Meta `json:"meta"`
+}
+
+func vpcRoutesPath(vpcUUID string) string {
+ return fmt.Sprintf("%s/%s/routes", vpcsBasePath, vpcUUID)
+}
+
+func subnetRoutesPath(vpcUUID, subnetUUID string) string {
+ return fmt.Sprintf("%s/%s/subnets/%s/routes", vpcsBasePath, vpcUUID, subnetUUID)
+}
+
+func subnetRoutePath(vpcUUID, subnetUUID, routeUUID string) string {
+ return fmt.Sprintf("%s/%s/subnets/%s/routes/%s", vpcsBasePath, vpcUUID, subnetUUID, routeUUID)
+}
+
+// ListVPCRoutes lists VPC-scoped routes. Entries are read-only in the public API.
+func (r *RoutesServiceOp) ListVPCRoutes(ctx context.Context, vpcUUID string, opt *ListOptions) ([]*Route, *Response, error) {
+ return r.list(ctx, vpcRoutesPath(vpcUUID), opt)
+}
+
+// ListSubnetRoutes lists routes for a subnet, including VPC-scoped routes
+// propagated into the subnet's effective routing.
+func (r *RoutesServiceOp) ListSubnetRoutes(ctx context.Context, vpcUUID, subnetUUID string, opt *ListOptions) ([]*Route, *Response, error) {
+ return r.list(ctx, subnetRoutesPath(vpcUUID, subnetUUID), opt)
+}
+
+func (r *RoutesServiceOp) list(ctx context.Context, path string, opt *ListOptions) ([]*Route, *Response, error) {
+ path, err := addOptions(path, opt)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ req, err := r.client.NewRequest(ctx, http.MethodGet, path, nil)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(routesRoot)
+ resp, err := r.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+ if l := root.Links; l != nil {
+ resp.Links = l
+ }
+ if m := root.Meta; m != nil {
+ resp.Meta = m
+ }
+
+ return root.Routes, resp, nil
+}
+
+// CreateSubnetRoute creates a customer-managed static route for a subnet.
+func (r *RoutesServiceOp) CreateSubnetRoute(ctx context.Context, vpcUUID, subnetUUID string, create *RouteCreateRequest) (*Route, *Response, error) {
+ req, err := r.client.NewRequest(ctx, http.MethodPost, subnetRoutesPath(vpcUUID, subnetUUID), create)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(routeRoot)
+ resp, err := r.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return root.Route, resp, nil
+}
+
+// UpdateSubnetRoute updates a customer-managed static route for a subnet.
+func (r *RoutesServiceOp) UpdateSubnetRoute(ctx context.Context, vpcUUID, subnetUUID, routeUUID string, update *RouteUpdateRequest) (*Route, *Response, error) {
+ req, err := r.client.NewRequest(ctx, http.MethodPatch, subnetRoutePath(vpcUUID, subnetUUID, routeUUID), update)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ root := new(routeRoot)
+ resp, err := r.client.Do(ctx, req, root)
+ if err != nil {
+ return nil, resp, err
+ }
+
+ return root.Route, resp, nil
+}
+
+// DeleteSubnetRoute deletes a customer-managed static route for a subnet.
+func (r *RoutesServiceOp) DeleteSubnetRoute(ctx context.Context, vpcUUID, subnetUUID, routeUUID string) (*Response, error) {
+ req, err := r.client.NewRequest(ctx, http.MethodDelete, subnetRoutePath(vpcUUID, subnetUUID, routeUUID), nil)
+ if err != nil {
+ return nil, err
+ }
+
+ resp, err := r.client.Do(ctx, req, nil)
+ if err != nil {
+ return resp, err
+ }
+
+ return resp, nil
+}
diff --git a/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go b/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go
index 8547c8dfd..820bf436a 100644
--- a/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go
+++ b/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go
@@ -90,7 +90,7 @@ loop:
s = skipSpace(s[1:])
}
}
- return
+ return specs
}
func skipSpace(s string) (rest string) {
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_go116.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_go116.go
deleted file mode 100644
index effc57840..000000000
--- a/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_go116.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2021 The Prometheus Authors
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//go:build !go1.17
-// +build !go1.17
-
-package collectors
-
-import "github.com/prometheus/client_golang/prometheus"
-
-// NewGoCollector returns a collector that exports metrics about the current Go
-// process. This includes memory stats. To collect those, runtime.ReadMemStats
-// is called. This requires to “stop the world”, which usually only happens for
-// garbage collection (GC). Take the following implications into account when
-// deciding whether to use the Go collector:
-//
-// 1. The performance impact of stopping the world is the more relevant the more
-// frequently metrics are collected. However, with Go1.9 or later the
-// stop-the-world time per metrics collection is very short (~25µs) so that the
-// performance impact will only matter in rare cases. However, with older Go
-// versions, the stop-the-world duration depends on the heap size and can be
-// quite significant (~1.7 ms/GiB as per
-// https://go-review.googlesource.com/c/go/+/34937).
-//
-// 2. During an ongoing GC, nothing else can stop the world. Therefore, if the
-// metrics collection happens to coincide with GC, it will only complete after
-// GC has finished. Usually, GC is fast enough to not cause problems. However,
-// with a very large heap, GC might take multiple seconds, which is enough to
-// cause scrape timeouts in common setups. To avoid this problem, the Go
-// collector will use the memstats from a previous collection if
-// runtime.ReadMemStats takes more than 1s. However, if there are no previously
-// collected memstats, or their collection is more than 5m ago, the collection
-// will block until runtime.ReadMemStats succeeds.
-//
-// NOTE: The problem is solved in Go 1.15, see
-// https://github.com/golang/go/issues/19812 for the related Go issue.
-func NewGoCollector() prometheus.Collector {
- return prometheus.NewGoCollector()
-}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go
index cc4ef1077..d29ade654 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go
@@ -90,13 +90,13 @@ func WithGoCollectorMemStatsMetricsDisabled() func(options *internal.GoCollector
// GoRuntimeMetricsRule allow enabling and configuring particular group of runtime/metrics.
// TODO(bwplotka): Consider adding ability to adjust buckets.
type GoRuntimeMetricsRule struct {
- // Matcher represents RE2 expression will match the runtime/metrics from https://golang.bg/src/runtime/metrics/description.go
+ // Matcher represents RE2 expression will match the runtime/metrics from https://pkg.go.dev/runtime/metrics
// Use `regexp.MustCompile` or `regexp.Compile` to create this field.
Matcher *regexp.Regexp
}
// WithGoCollectorRuntimeMetrics allows enabling and configuring particular group of runtime/metrics.
-// See the list of metrics https://golang.bg/src/runtime/metrics/description.go (pick the Go version you use there!).
+// See the list of metrics https://pkg.go.dev/runtime/metrics (pick the Go version you use there!).
// You can use this option in repeated manner, which will add new rules. The order of rules is important, the last rule
// that matches particular metrics is applied.
func WithGoCollectorRuntimeMetrics(rules ...GoRuntimeMetricsRule) func(options *internal.GoCollectorOptions) {
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go
index 4ce84e7a8..7d963d3af 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/counter.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/counter.go
@@ -85,11 +85,12 @@ type CounterVecOpts struct {
// Both internal tracking values are added up in the Write method. This has to
// be taken into account when it comes to precision and overflow behavior.
func NewCounter(opts CounterOpts) Counter {
- desc := NewDesc(
+ desc := V2.NewDesc(
BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
opts.Help,
- nil,
+ UnconstrainedLabels(nil),
opts.ConstLabels,
+ WithUnit(opts.Unit),
)
if opts.now == nil {
opts.now = time.Now
@@ -205,6 +206,7 @@ func (v2) NewCounterVec(opts CounterVecOpts) *CounterVec {
opts.Help,
opts.VariableLabels,
opts.ConstLabels,
+ WithUnit(opts.Unit),
)
if opts.now == nil {
opts.now = time.Now
@@ -349,10 +351,11 @@ type CounterFunc interface {
//
// Check out the ExampleGaugeFunc examples for the similar GaugeFunc.
func NewCounterFunc(opts CounterOpts, function func() float64) CounterFunc {
- return newValueFunc(NewDesc(
+ return newValueFunc(V2.NewDesc(
BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
opts.Help,
- nil,
+ UnconstrainedLabels(nil),
opts.ConstLabels,
+ WithUnit(opts.Unit),
), CounterValue, function)
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/desc.go b/vendor/github.com/prometheus/client_golang/prometheus/desc.go
index 2331b8b4f..a3c92e7a4 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/desc.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/desc.go
@@ -47,6 +47,8 @@ type Desc struct {
fqName string
// help provides some helpful information about this metric.
help string
+ // unit provides the unit of this metric.
+ unit string
// constLabelPairs contains precalculated DTO label pairs based on
// the constant labels.
constLabelPairs []*dto.LabelPair
@@ -66,6 +68,16 @@ type Desc struct {
err error
}
+// DescOpt allows setting optional fields for NewDesc.
+type DescOpt func(*Desc)
+
+// WithUnit sets the unit for a Desc.
+func WithUnit(unit string) DescOpt {
+ return func(d *Desc) {
+ d.unit = unit
+ }
+}
+
// NewDesc allocates and initializes a new Desc. Errors are recorded in the Desc
// and will be reported on registration time. variableLabels and constLabels can
// be nil if no such labels should be set. fqName must not be empty.
@@ -89,14 +101,17 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) *
//
// For constLabels, the label values are constant. Therefore, they are fully
// specified in the Desc. See the Collector example for a usage pattern.
-func (v2) NewDesc(fqName, help string, variableLabels ConstrainableLabels, constLabels Labels) *Desc {
+func (v2) NewDesc(fqName, help string, variableLabels ConstrainableLabels, constLabels Labels, opts ...DescOpt) *Desc {
d := &Desc{
fqName: fqName,
help: help,
variableLabels: variableLabels.compile(),
}
- //nolint:staticcheck // TODO: Don't use deprecated model.NameValidationScheme.
- if !model.NameValidationScheme.IsValidMetricName(fqName) {
+
+ for _, opt := range opts {
+ opt(d)
+ }
+ if !model.UTF8Validation.IsValidMetricName(fqName) {
d.err = fmt.Errorf("%q is not a valid metric name", fqName)
return d
}
@@ -150,11 +165,13 @@ func (v2) NewDesc(fqName, help string, variableLabels ConstrainableLabels, const
d.id = xxh.Sum64()
// Sort labelNames so that order doesn't matter for the hash.
sort.Strings(labelNames)
- // Now hash together (in this order) the help string and the sorted
+ // Now hash together (in this order) the help string, the unit string and the sorted
// label names.
xxh.Reset()
xxh.WriteString(help)
xxh.Write(separatorByteSlice)
+ xxh.WriteString(d.unit)
+ xxh.Write(separatorByteSlice)
for _, labelName := range labelNames {
xxh.WriteString(labelName)
xxh.Write(separatorByteSlice)
@@ -182,6 +199,15 @@ func NewInvalidDesc(err error) *Desc {
}
}
+// Err returns an error that occurred during construction, if any.
+//
+// Calling this method is optional. It can be used to detect construction
+// errors early, before invoking other methods on the Desc. If an error is
+// present, later operations may not behave as expected.
+func (d *Desc) Err() error {
+ return d.err
+}
+
func (d *Desc) String() string {
lpStrings := make([]string, 0, len(d.constLabelPairs))
for _, lp := range d.constLabelPairs {
@@ -202,9 +228,10 @@ func (d *Desc) String() string {
}
}
return fmt.Sprintf(
- "Desc{fqName: %q, help: %q, constLabels: {%s}, variableLabels: {%s}}",
+ "Desc{fqName: %q, help: %q, unit: %q, constLabels: {%s}, variableLabels: {%s}}",
d.fqName,
d.help,
+ d.unit,
strings.Join(lpStrings, ","),
strings.Join(vlStrings, ","),
)
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go
index de5a85629..327746f43 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go
@@ -47,14 +47,14 @@ func (e *expvarCollector) Collect(ch chan<- Metric) {
if expVar == nil {
continue
}
- var v interface{}
+ var v any
labels := make([]string, len(desc.variableLabels.names))
if err := json.Unmarshal([]byte(expVar.String()), &v); err != nil {
ch <- NewInvalidMetric(desc, err)
continue
}
- var processValue func(v interface{}, i int)
- processValue = func(v interface{}, i int) {
+ var processValue func(v any, i int)
+ processValue = func(v any, i int) {
if i >= len(labels) {
copiedLabels := append(make([]string, 0, len(labels)), labels...)
switch v := v.(type) {
@@ -72,7 +72,7 @@ func (e *expvarCollector) Collect(ch chan<- Metric) {
ch <- m
return
}
- vm, ok := v.(map[string]interface{})
+ vm, ok := v.(map[string]any)
if !ok {
return
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go
index dd2eac940..41e54bf27 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go
@@ -76,11 +76,12 @@ type GaugeVecOpts struct {
// scenarios for Gauges and Counters, where the former tends to be Set-heavy and
// the latter Inc-heavy.
func NewGauge(opts GaugeOpts) Gauge {
- desc := NewDesc(
+ desc := V2.NewDesc(
BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
opts.Help,
- nil,
+ UnconstrainedLabels(nil),
opts.ConstLabels,
+ WithUnit(opts.Unit),
)
result := &gauge{desc: desc, labelPairs: desc.constLabelPairs}
result.init(result) // Init self-collection.
@@ -163,6 +164,7 @@ func (v2) NewGaugeVec(opts GaugeVecOpts) *GaugeVec {
opts.Help,
opts.VariableLabels,
opts.ConstLabels,
+ WithUnit(opts.Unit),
)
return &GaugeVec{
MetricVec: NewMetricVec(desc, func(lvs ...string) Metric {
@@ -302,10 +304,11 @@ type GaugeFunc interface {
// value of 1. Example:
// https://github.com/prometheus/common/blob/8558a5b7db3c84fa38b4766966059a7bd5bfa2ee/version/info.go#L36-L56
func NewGaugeFunc(opts GaugeOpts, function func() float64) GaugeFunc {
- return newValueFunc(NewDesc(
+ return newValueFunc(V2.NewDesc(
BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
opts.Help,
- nil,
+ UnconstrainedLabels(nil),
opts.ConstLabels,
+ WithUnit(opts.Unit),
), GaugeValue, function)
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go
deleted file mode 100644
index 897a6e906..000000000
--- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2021 The Prometheus Authors
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//go:build !go1.17
-// +build !go1.17
-
-package prometheus
-
-import (
- "runtime"
- "sync"
- "time"
-)
-
-type goCollector struct {
- base baseGoCollector
-
- // ms... are memstats related.
- msLast *runtime.MemStats // Previously collected memstats.
- msLastTimestamp time.Time
- msMtx sync.Mutex // Protects msLast and msLastTimestamp.
- msMetrics memStatsMetrics
- msRead func(*runtime.MemStats) // For mocking in tests.
- msMaxWait time.Duration // Wait time for fresh memstats.
- msMaxAge time.Duration // Maximum allowed age of old memstats.
-}
-
-// NewGoCollector is the obsolete version of collectors.NewGoCollector.
-// See there for documentation.
-//
-// Deprecated: Use collectors.NewGoCollector instead.
-func NewGoCollector() Collector {
- msMetrics := goRuntimeMemStats()
- msMetrics = append(msMetrics, struct {
- desc *Desc
- eval func(*runtime.MemStats) float64
- valType ValueType
- }{
- // This metric is omitted in Go1.17+, see https://github.com/prometheus/client_golang/issues/842#issuecomment-861812034
- desc: NewDesc(
- memstatNamespace("gc_cpu_fraction"),
- "The fraction of this program's available CPU time used by the GC since the program started.",
- nil, nil,
- ),
- eval: func(ms *runtime.MemStats) float64 { return ms.GCCPUFraction },
- valType: GaugeValue,
- })
- return &goCollector{
- base: newBaseGoCollector(),
- msLast: &runtime.MemStats{},
- msRead: runtime.ReadMemStats,
- msMaxWait: time.Second,
- msMaxAge: 5 * time.Minute,
- msMetrics: msMetrics,
- }
-}
-
-// Describe returns all descriptions of the collector.
-func (c *goCollector) Describe(ch chan<- *Desc) {
- c.base.Describe(ch)
- for _, i := range c.msMetrics {
- ch <- i.desc
- }
-}
-
-// Collect returns the current state of all metrics of the collector.
-func (c *goCollector) Collect(ch chan<- Metric) {
- var (
- ms = &runtime.MemStats{}
- done = make(chan struct{})
- )
- // Start reading memstats first as it might take a while.
- go func() {
- c.msRead(ms)
- c.msMtx.Lock()
- c.msLast = ms
- c.msLastTimestamp = time.Now()
- c.msMtx.Unlock()
- close(done)
- }()
-
- // Collect base non-memory metrics.
- c.base.Collect(ch)
-
- timer := time.NewTimer(c.msMaxWait)
- select {
- case <-done: // Our own ReadMemStats succeeded in time. Use it.
- timer.Stop() // Important for high collection frequencies to not pile up timers.
- c.msCollect(ch, ms)
- return
- case <-timer.C: // Time out, use last memstats if possible. Continue below.
- }
- c.msMtx.Lock()
- if time.Since(c.msLastTimestamp) < c.msMaxAge {
- // Last memstats are recent enough. Collect from them under the lock.
- c.msCollect(ch, c.msLast)
- c.msMtx.Unlock()
- return
- }
- // If we are here, the last memstats are too old or don't exist. We have
- // to wait until our own ReadMemStats finally completes. For that to
- // happen, we have to release the lock.
- c.msMtx.Unlock()
- <-done
- c.msCollect(ch, ms)
-}
-
-func (c *goCollector) msCollect(ch chan<- Metric, ms *runtime.MemStats) {
- for _, i := range c.msMetrics {
- ch <- MustNewConstMetric(i.desc, i.valType, i.eval(ms))
- }
-}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go
index 6b8684731..1db1c4be0 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go
@@ -98,7 +98,7 @@ type goCollector struct {
// snapshot is always produced by Collect.
mu sync.Mutex
- // Contains all samples that has to retrieved from runtime/metrics (not all of them will be exposed).
+ // Contains all samples that have to be retrieved from runtime/metrics (not all of them will be exposed).
sampleBuf []metrics.Sample
// sampleMap allows lookup for MemStats metrics and runtime/metrics histograms for exact sums.
sampleMap map[string]*metrics.Sample
@@ -210,16 +210,26 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector {
sampleBuf = append(sampleBuf, metrics.Sample{Name: d.Name})
sampleMap[d.Name] = &sampleBuf[len(sampleBuf)-1]
+ // Extract unit from the runtime/metrics name (e.g., "/gc/heap/allocs:bytes" -> "bytes")
+ // and sanitize to match Prometheus naming conventions (e.g., "cpu-seconds" -> "cpu_seconds")
+ var unit string
+ if idx := strings.IndexRune(d.Name, ':'); idx >= 0 {
+ unit = d.Name[idx+1:]
+ unit = strings.ReplaceAll(unit, "-", "_")
+ unit = strings.ReplaceAll(unit, "*", "_")
+ unit = strings.ReplaceAll(unit, "/", "_per_")
+ }
+
var m collectorMetric
if d.Kind == metrics.KindFloat64Histogram {
_, hasSum := opt.RuntimeMetricSumForHist[d.Name]
- unit := d.Name[strings.IndexRune(d.Name, ':')+1:]
m = newBatchHistogram(
- NewDesc(
+ V2.NewDesc(
BuildFQName(namespace, subsystem, name),
help,
+ UnconstrainedLabels(nil),
nil,
- nil,
+ WithUnit(unit),
),
internal.RuntimeMetricsBucketsForUnit(bucketsMap[d.Name], unit),
hasSum,
@@ -230,6 +240,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector {
Subsystem: subsystem,
Name: name,
Help: help,
+ Unit: unit,
},
)
} else {
@@ -238,6 +249,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector {
Subsystem: subsystem,
Name: name,
Help: help,
+ Unit: unit,
})
}
metricSet = append(metricSet, m)
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go
index c453b754a..88bae3b32 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go
@@ -378,6 +378,9 @@ type HistogramOpts struct {
// string.
Help string
+ // Unit provides the unit of this Histogram.
+ Unit string
+
// ConstLabels are used to attach fixed labels to this metric. Metrics
// with the same fully-qualified name must have the same label names in
// their ConstLabels.
@@ -522,11 +525,12 @@ type HistogramVecOpts struct {
// for each bucket.
func NewHistogram(opts HistogramOpts) Histogram {
return newHistogram(
- NewDesc(
+ V2.NewDesc(
BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
opts.Help,
- nil,
+ UnconstrainedLabels(nil),
opts.ConstLabels,
+ WithUnit(opts.Unit),
),
opts,
)
@@ -966,7 +970,7 @@ func (h *histogram) maybeReset(
// We are using the possibly mocked h.now() rather than
// time.Since(h.lastResetTime) to enable testing.
if h.nativeHistogramMinResetDuration == 0 || // No reset configured.
- h.resetScheduled || // Do not interefere if a reset is already scheduled.
+ h.resetScheduled || // Do not interfere if a reset is already scheduled.
h.now().Sub(h.lastResetTime) < h.nativeHistogramMinResetDuration {
return false
}
@@ -1053,8 +1057,8 @@ func (h *histogram) maybeWidenZeroBucket(hot, cold *histogramCounts) bool {
atomic.StoreUint64(&cold.nativeHistogramZeroThresholdBits, math.Float64bits(newZeroThreshold))
// ...and then merge the newly deleted buckets into the wider zero
// bucket.
- mergeAndDeleteOrAddAndReset := func(hotBuckets, coldBuckets *sync.Map) func(k, v interface{}) bool {
- return func(k, v interface{}) bool {
+ mergeAndDeleteOrAddAndReset := func(hotBuckets, coldBuckets *sync.Map) func(k, v any) bool {
+ return func(k, v any) bool {
key := k.(int)
bucket := v.(*int64)
if key == smallestKey {
@@ -1107,8 +1111,8 @@ func (h *histogram) doubleBucketWidth(hot, cold *histogramCounts) {
// ...adjust the schema in the cold counts, too...
atomic.StoreInt32(&cold.nativeHistogramSchema, coldSchema)
// ...and then merge the cold buckets into the wider hot buckets.
- merge := func(hotBuckets *sync.Map) func(k, v interface{}) bool {
- return func(k, v interface{}) bool {
+ merge := func(hotBuckets *sync.Map) func(k, v any) bool {
+ return func(k, v any) bool {
key := k.(int)
bucket := v.(*int64)
// Adjust key to match the bucket to merge into.
@@ -1190,6 +1194,7 @@ func (v2) NewHistogramVec(opts HistogramVecOpts) *HistogramVec {
opts.Help,
opts.VariableLabels,
opts.ConstLabels,
+ WithUnit(opts.Unit),
)
return &HistogramVec{
MetricVec: NewMetricVec(desc, func(lvs ...string) Metric {
@@ -1476,7 +1481,7 @@ func pickSchema(bucketFactor float64) int32 {
func makeBuckets(buckets *sync.Map) ([]*dto.BucketSpan, []int64) {
var ii []int
- buckets.Range(func(k, v interface{}) bool {
+ buckets.Range(func(k, v any) bool {
ii = append(ii, k.(int))
return true
})
@@ -1553,8 +1558,8 @@ func addToBucket(buckets *sync.Map, key int, increment int64) bool {
// according to the buckets ranged through. It then resets all buckets ranged
// through to 0 (but leaves them in place so that they don't need to get
// recreated on the next scrape).
-func addAndReset(hotBuckets *sync.Map, bucketNumber *uint32) func(k, v interface{}) bool {
- return func(k, v interface{}) bool {
+func addAndReset(hotBuckets *sync.Map, bucketNumber *uint32) func(k, v any) bool {
+ return func(k, v any) bool {
bucket := v.(*int64)
if addToBucket(hotBuckets, k.(int), atomic.LoadInt64(bucket)) {
atomic.AddUint32(bucketNumber, 1)
@@ -1565,7 +1570,7 @@ func addAndReset(hotBuckets *sync.Map, bucketNumber *uint32) func(k, v interface
}
func deleteSyncMap(m *sync.Map) {
- m.Range(func(k, v interface{}) bool {
+ m.Range(func(k, v any) bool {
m.Delete(k)
return true
})
@@ -1573,7 +1578,7 @@ func deleteSyncMap(m *sync.Map) {
func findSmallestKey(m *sync.Map) int {
result := math.MaxInt32
- m.Range(func(k, v interface{}) bool {
+ m.Range(func(k, v any) bool {
key := k.(int)
if key < result {
result = key
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go
index 7bac0da33..2db270f21 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go
@@ -78,7 +78,7 @@ type OpCode struct {
// notion, pairing up elements that appear uniquely in each sequence.
// That, and the method here, appear to yield more intuitive difference
// reports than does diff. This method appears to be the least vulnerable
-// to synching up on blocks of "junk lines", though (like blank lines in
+// to syncing up on blocks of "junk lines", though (like blank lines in
// ordinary text files, or maybe "
" lines in HTML files). That may be
// because this is the only method of the 3 that has a *concept* of
// "junk" .
@@ -567,7 +567,7 @@ type UnifiedDiff struct {
func WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error {
buf := bufio.NewWriter(writer)
defer buf.Flush()
- wf := func(format string, args ...interface{}) error {
+ wf := func(format string, args ...any) error {
_, err := fmt.Fprintf(buf, format, args...)
return err
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/labels.go b/vendor/github.com/prometheus/client_golang/prometheus/labels.go
index 5fe8d3b4d..a0285489a 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/labels.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/labels.go
@@ -184,6 +184,5 @@ func validateLabelValues(vals []string, expectedNumberOfValues int) error {
}
func checkLabelName(l string) bool {
- //nolint:staticcheck // TODO: Don't use deprecated model.NameValidationScheme.
- return model.NameValidationScheme.IsValidLabelName(l) && !strings.HasPrefix(l, reservedLabelPrefix)
+ return model.UTF8Validation.IsValidLabelName(l) && !strings.HasPrefix(l, reservedLabelPrefix)
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go
index 76e59f128..c5cb90adf 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/metric.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/metric.go
@@ -81,6 +81,9 @@ type Opts struct {
// string.
Help string
+ // Unit provides the unit of this metric as per https://prometheus.io/docs/specs/om
+ Unit string
+
// ConstLabels are used to attach fixed labels to this metric. Metrics
// with the same fully-qualified name must have the same label names in
// their ConstLabels.
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go
index b32c95fa3..2b16298f4 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go
@@ -72,7 +72,13 @@ func getOpenFileCount() (float64, error) {
}
func (c *processCollector) processCollect(ch chan<- Metric) {
- if procs, err := unix.SysctlKinfoProcSlice("kern.proc.pid", os.Getpid()); err == nil {
+ pid, err := c.pidFn()
+ if err != nil {
+ c.reportError(ch, nil, err)
+ return
+ }
+
+ if procs, err := unix.SysctlKinfoProcSlice("kern.proc.pid", pid); err == nil {
if len(procs) == 1 {
startTime := float64(procs[0].Proc.P_starttime.Nano() / 1e9)
ch <- MustNewConstMetric(c.startTime, GaugeValue, startTime)
@@ -84,6 +90,11 @@ func (c *processCollector) processCollect(ch chan<- Metric) {
c.reportError(ch, c.startTime, err)
}
+ if pid != os.Getpid() {
+ c.reportError(ch, nil, fmt.Errorf("collecting metrics for pid %d is not supported on darwin: process metrics collection is limited to the current process (pid %d)", pid, os.Getpid()))
+ return
+ }
+
// The proc structure returned by kern.proc.pid above has an Rusage member,
// but it is not filled in, so it needs to be fetched by getrusage(2). For
// that call, the UTime, STime, and Maxrss members are filled out, but not
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go
index fa474289e..c08dd05f0 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go
@@ -30,6 +30,10 @@ var (
procGetProcessMemoryInfo = modpsapi.NewProc("GetProcessMemoryInfo")
procGetProcessHandleCount = modkernel32.NewProc("GetProcessHandleCount")
+
+ openProcess = windows.OpenProcess
+ closeHandle = windows.CloseHandle
+ getProcessTimes = windows.GetProcessTimes
)
type processMemoryCounters struct {
@@ -79,10 +83,21 @@ func getProcessHandleCount(handle windows.Handle) (uint32, error) {
}
func (c *processCollector) processCollect(ch chan<- Metric) {
- h := windows.CurrentProcess()
+ pid, err := c.pidFn()
+ if err != nil {
+ c.reportError(ch, nil, err)
+ return
+ }
+
+ h, err := openProcess(windows.PROCESS_QUERY_INFORMATION|windows.PROCESS_VM_READ, false, uint32(pid))
+ if err != nil {
+ c.reportError(ch, nil, err)
+ return
+ }
+ defer closeHandle(h)
var startTime, exitTime, kernelTime, userTime windows.Filetime
- err := windows.GetProcessTimes(h, &startTime, &exitTime, &kernelTime, &userTime)
+ err = getProcessTimes(h, &startTime, &exitTime, &kernelTime, &userTime)
if err != nil {
c.reportError(ch, nil, err)
return
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go
index 763d99e36..c28af5ce2 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go
@@ -37,10 +37,12 @@ import (
"fmt"
"io"
"net/http"
+ "slices"
"strconv"
"sync"
"time"
+ dto "github.com/prometheus/client_model/go"
"github.com/prometheus/common/expfmt"
"github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil"
@@ -74,11 +76,118 @@ func defaultCompressionFormats() []Compression {
}
var gzipPool = sync.Pool{
- New: func() interface{} {
+ New: func() any {
return gzip.NewWriter(nil)
},
}
+// coalescingGatherer wraps a TransactionalGatherer to deduplicate concurrent
+// Gather calls. When a Gather is already in flight, new callers join the
+// existing cycle and receive the same result once it completes. The underlying
+// done function is called exactly once, when the last joined caller releases.
+//
+// This prevents goroutine pile-up when the scrape rate is faster than the
+// time collectors need to produce metrics.
+type coalescingGatherer struct {
+ g prometheus.TransactionalGatherer
+ mu sync.Mutex
+ cycle *gatherCycle
+}
+
+// gatherCycle tracks a single in-flight Gather and all HTTP handlers sharing it.
+type gatherCycle struct {
+ ready chan struct{} // closed when Gather completes; happens-before reads of mfs/err/done
+ mfs []*dto.MetricFamily // canonical result, set before ready is closed; callers get a slices.Clone, the element values stay shared and must not be mutated
+ err error // set before ready is closed
+ done func() // underlying done callback; set before ready is closed
+ refs int // number of handlers using this cycle; protected by coalescingGatherer.mu
+}
+
+var _ prometheus.TransactionalGatherer = (*coalescingGatherer)(nil) // compile-time interface check
+
+// errGatherPanicked is returned to callers that joined an in-flight coalesced
+// Gather whose underlying gatherer panicked. See the panic guard in Gather for
+// why joiners receive this error instead of the panic itself.
+var errGatherPanicked = errors.New("coalesced gather panicked")
+
+func (c *coalescingGatherer) Gather() ([]*dto.MetricFamily, func(), error) {
+ c.mu.Lock()
+ if cy := c.cycle; cy != nil {
+ // c.cycle is non-nil while Gather runs or handlers are still consuming its results.
+ cy.refs++
+ c.mu.Unlock()
+ <-cy.ready
+ // Each caller gets its own slice header so it can filter or reorder
+ // without racing other callers sharing this cycle. The *dto.MetricFamily
+ // values remain shared and must not be mutated in place.
+ return slices.Clone(cy.mfs), c.releaseFunc(cy), cy.err
+ }
+ cy := &gatherCycle{
+ ready: make(chan struct{}),
+ done: func() {},
+ refs: 1,
+ }
+ c.cycle = cy
+ c.mu.Unlock()
+
+ // Guard against a panic in c.g.Gather. The common case, a panicking
+ // Collector, never reaches here: Registry.Gather recovers Collector panics
+ // and returns them as an error. This guard only covers the rare case where
+ // the wrapped gatherer itself panics.
+ //
+ // We deliberately do not recover: the leader's panic propagates and is
+ // handled by net/http exactly as it would be without coalescing. We only
+ // set cy.err before closing cy.ready so joiners waiting on <-cy.ready fail
+ // with that error instead of silently returning an empty, successful
+ // response, and we clear c.cycle so the next Gather starts a fresh cycle.
+ //
+ // The leader never runs its own releaseFunc on this path, so its ref is
+ // not decremented; that is harmless because the cycle is detached (c.cycle
+ // = nil) and cy.done is still the no-op set at construction (c.g.Gather
+ // panicked before assigning a real done). If cy.done is ever made non-nil
+ // before c.g.Gather runs, this path would need to release it.
+ panicked := true
+ defer func() {
+ if panicked {
+ c.mu.Lock()
+ if c.cycle == cy {
+ c.cycle = nil
+ }
+ c.mu.Unlock()
+ cy.err = errGatherPanicked // set before close: happens-before joiners' reads
+ close(cy.ready)
+ }
+ }()
+ cy.mfs, cy.done, cy.err = c.g.Gather()
+ panicked = false
+ close(cy.ready) // happens-before joiners' reads of cy.mfs/err/done
+
+ // Clone here too so cy.mfs stays the write-once canonical slice: joiners
+ // read it concurrently via slices.Clone, so the leader must not hand out
+ // (and potentially reorder) the same backing array.
+ return slices.Clone(cy.mfs), c.releaseFunc(cy), cy.err
+}
+
+// releaseFunc returns the done callback for one caller sharing cy.
+// When the last caller releases, the underlying done is invoked and the
+// cycle is cleared so the next Gather starts fresh.
+func (c *coalescingGatherer) releaseFunc(cy *gatherCycle) func() {
+ return func() {
+ c.mu.Lock()
+ cy.refs--
+ if cy.refs > 0 {
+ c.mu.Unlock()
+ return
+ }
+ // Last caller.
+ if c.cycle == cy {
+ c.cycle = nil
+ }
+ c.mu.Unlock()
+ cy.done() // called outside the lock to avoid holding it during done
+ }
+}
+
// Handler returns an http.Handler for the prometheus.DefaultGatherer, using
// default HandlerOpts, i.e. it reports the first error as an HTTP error, it has
// no error logging, and it applies compression if requested by the client.
@@ -89,6 +198,10 @@ var gzipPool = sync.Pool{
// metrics used for instrumentation will be shared between them, providing
// global scrape counts.
//
+// The handler supports filtering metrics by name using the `name[]` query parameter.
+// Multiple metric names can be specified by providing the parameter multiple times.
+// When no name[] parameters are provided, all metrics are returned.
+//
// This function is meant to cover the bulk of basic use cases. If you are doing
// anything that requires more customization (including using a non-default
// Gatherer, different instrumentation, and non-default HandlerOpts), use the
@@ -105,6 +218,10 @@ func Handler() http.Handler {
// Gatherers, with non-default HandlerOpts, and/or with custom (or no)
// instrumentation. Use the InstrumentMetricHandler function to apply the same
// kind of instrumentation as it is used by the Handler function.
+//
+// The handler supports filtering metrics by name using the `name[]` query parameter.
+// Multiple metric names can be specified by providing the parameter multiple times.
+// When no name[] parameters are provided, all metrics are returned.
func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler {
return HandlerForTransactional(prometheus.ToTransactionalGatherer(reg), opts)
}
@@ -112,7 +229,15 @@ func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler {
// HandlerForTransactional is like HandlerFor, but it uses transactional gather, which
// can safely change in-place returned *dto.MetricFamily before call to `Gather` and after
// call to `done` of that `Gather`.
+//
+// The handler supports filtering metrics by name using the `name[]` query parameter.
+// Multiple metric names can be specified by providing the parameter multiple times.
+// When no name[] parameters are provided, all metrics are returned.
func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerOpts) http.Handler {
+ if opts.CoalesceGather {
+ reg = &coalescingGatherer{g: reg}
+ }
+
var (
inFlightSem chan struct{}
errCnt = prometheus.NewCounterVec(
@@ -214,12 +339,14 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO
rsp.Header().Set(contentEncodingHeader, encodingHeader)
}
- var enc expfmt.Encoder
+ var (
+ enc expfmt.Encoder
+ encOpts []expfmt.EncoderOption
+ )
if opts.EnableOpenMetricsTextCreatedSamples {
- enc = expfmt.NewEncoder(w, contentType, expfmt.WithCreatedLines())
- } else {
- enc = expfmt.NewEncoder(w, contentType)
+ encOpts = append(encOpts, expfmt.WithCreatedLines())
}
+ enc = expfmt.NewEncoder(w, contentType, encOpts...)
// handleError handles the error according to opts.ErrorHandling
// and returns true if we have to abort after the handling.
@@ -245,7 +372,24 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO
return false
}
+ // Build metric name filter set from query params (if any). The URL
+ // can be nil on hand-constructed requests.
+ var metricFilter map[string]struct{}
+ if req.URL != nil {
+ if metricNames := req.URL.Query()["name[]"]; len(metricNames) > 0 {
+ metricFilter = make(map[string]struct{}, len(metricNames))
+ for _, name := range metricNames {
+ metricFilter[name] = struct{}{}
+ }
+ }
+ }
+
for _, mf := range mfs {
+ if metricFilter != nil {
+ if _, ok := metricFilter[mf.GetName()]; !ok {
+ continue
+ }
+ }
if handleError(enc.Encode(mf)) {
return
}
@@ -353,7 +497,7 @@ const (
// log.Logger from the standard library implements this interface, and it is
// easy to implement by custom loggers, if they don't do so already anyway.
type Logger interface {
- Println(v ...interface{})
+ Println(v ...any)
}
// HandlerOpts specifies options how to serve metrics via an http.Handler. The
@@ -400,6 +544,40 @@ type HandlerOpts struct {
// Service Unavailable and a suitable message in the body. If
// MaxRequestsInFlight is 0 or negative, no limit is applied.
MaxRequestsInFlight int
+ // CoalesceGather, if true, deduplicates concurrent Gather calls so that
+ // only one collection runs at a time. Additional requests that arrive
+ // while a Gather is in flight will receive the same result once it
+ // completes. This prevents goroutine pile-up when the scrape rate is
+ // faster than the time collectors need to produce metrics.
+ //
+ // When enabled, concurrent scrapers share a single metric snapshot per
+ // collection cycle. Each request receives its own copy of the returned
+ // slice, so filtering or reordering it (for example via name[] query
+ // parameters) is safe. The pointed-to MetricFamily values are still
+ // shared: the built-in handler only reads them, so this is safe in
+ // practice, but a custom TransactionalGatherer that mutates the returned
+ // families in place after Gather returns must not use this option.
+ //
+ // Because the snapshot is shared, a request that arrives while a cycle is
+ // in flight receives that cycle's result even though collection began
+ // before the request; two scrapers joined to one cycle observe the same
+ // timestamps rather than independently gathered data.
+ //
+ // Consider using CoalesceGather together with Timeout. Timeout bounds the
+ // client-facing response time and keeps at most one collection running at
+ // a time, but it does not cancel the underlying Gather: a joined request
+ // that times out still holds a MaxRequestsInFlight slot until the shared
+ // collection completes.
+ //
+ // Panic handling: a panicking Collector is already turned into an error by
+ // the registry, so joiners receive that error like any other. In the rare
+ // case where the wrapped gatherer itself panics, the panicking request's
+ // panic propagates as usual (handled by net/http), while requests that
+ // joined the same cycle receive an error rather than an empty response.
+ //
+ // NOTE: This option is experimental and may change or be removed in a
+ // future release.
+ CoalesceGather bool
// If handling a request takes longer than Timeout, it is responded to
// with 503 ServiceUnavailable and a suitable Message. No timeout is
// applied if Timeout is 0 or negative. Note that with the current
@@ -407,8 +585,9 @@ type HandlerOpts struct {
// described above (and even that only if sending of the body hasn't
// started yet), while the bulk work of gathering all the metrics keeps
// running in the background (with the eventual result to be thrown
- // away). Until the implementation is improved, it is recommended to
- // implement a separate timeout in potentially slow Collectors.
+ // away). When CoalesceGather is enabled, only one such background Gather
+ // can be in flight at a time. It is also recommended to implement a
+ // separate timeout in potentially slow Collectors.
Timeout time.Duration
// If true, the experimental OpenMetrics encoding is added to the
// possible options during content negotiation. Note that Prometheus
@@ -460,7 +639,7 @@ func httpError(rsp http.ResponseWriter, err error) {
// negotiateEncodingWriter reads the Accept-Encoding header from a request and
// selects the right compression based on an allow-list of supported
-// compressions. It returns a writer implementing the compression and an the
+// compressions. It returns a writer implementing the compression and the
// correct value that the caller can set in the response header.
func negotiateEncodingWriter(r *http.Request, rw io.Writer, compressions []string) (_ io.Writer, encodingHeaderValue string, closeWriter func(), _ error) {
if len(compressions) == 0 {
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go
index d3482c40c..024857974 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go
@@ -75,10 +75,10 @@ func InstrumentRoundTripperCounter(counter *prometheus.CounterVec, next http.Rou
resp, err := next.RoundTrip(r)
if err == nil {
l := labels(code, method, r.Method, resp.StatusCode, rtOpts.extraMethods...)
- for label, resolve := range rtOpts.extraLabelsFromCtx {
- l[label] = resolve(resp.Request.Context())
+ for label, resolve := range rtOpts.extraLabelsFromRequest {
+ l[label] = resolve(resp.Request)
}
- addWithExemplar(counter.With(l), 1, rtOpts.getExemplarFn(r.Context()))
+ addWithExemplar(counter.With(l), 1, rtOpts.getExemplarFn(r))
}
return resp, err
}
@@ -119,10 +119,10 @@ func InstrumentRoundTripperDuration(obs prometheus.ObserverVec, next http.RoundT
resp, err := next.RoundTrip(r)
if err == nil {
l := labels(code, method, r.Method, resp.StatusCode, rtOpts.extraMethods...)
- for label, resolve := range rtOpts.extraLabelsFromCtx {
- l[label] = resolve(resp.Request.Context())
+ for label, resolve := range rtOpts.extraLabelsFromRequest {
+ l[label] = resolve(resp.Request)
}
- observeWithExemplar(obs.With(l), time.Since(start).Seconds(), rtOpts.getExemplarFn(r.Context()))
+ observeWithExemplar(obs.With(l), time.Since(start).Seconds(), rtOpts.getExemplarFn(r))
}
return resp, err
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go
index 9332b0249..9dec091ac 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go
@@ -28,24 +28,36 @@ import (
// magicString is used for the hacky label test in checkLabels. Remove once fixed.
const magicString = "zZgWfBxLqvG8kc8IMv3POi2Bb0tZI3vAnBx+gBaFi9FyPzB/CzKUer1yufDa"
-// observeWithExemplar is a wrapper for [prometheus.ExemplarAdder.ExemplarObserver],
-// which falls back to [prometheus.Observer.Observe] if no labels are provided.
+// observeWithExemplar records val on obs. If labels is non-nil and obs
+// implements [prometheus.ExemplarObserver], the exemplar is attached via
+// ObserveWithExemplar; otherwise the exemplar is dropped and the value is
+// recorded with a plain [prometheus.Observer.Observe]. This mirrors the
+// safe-cast pattern in [prometheus.Timer.ObserveDurationWithExemplar] and
+// ensures we never panic when callers pass an ObserverVec backed by a
+// summary, which cannot carry exemplars in the Prometheus exposition format.
func observeWithExemplar(obs prometheus.Observer, val float64, labels map[string]string) {
- if labels == nil {
- obs.Observe(val)
- return
+ if labels != nil {
+ if eo, ok := obs.(prometheus.ExemplarObserver); ok {
+ eo.ObserveWithExemplar(val, labels)
+ return
+ }
}
- obs.(prometheus.ExemplarObserver).ObserveWithExemplar(val, labels)
+ obs.Observe(val)
}
-// addWithExemplar is a wrapper for [prometheus.ExemplarAdder.AddWithExemplar],
-// which falls back to [prometheus.Counter.Add] if no labels are provided.
-func addWithExemplar(obs prometheus.Counter, val float64, labels map[string]string) {
- if labels == nil {
- obs.Add(val)
- return
+// addWithExemplar records val on c. If labels is non-nil and c implements
+// [prometheus.ExemplarAdder], the exemplar is attached via AddWithExemplar;
+// otherwise the exemplar is dropped and the value is recorded with a plain
+// [prometheus.Counter.Add]. The safe-cast keeps the helper robust against
+// custom Counter implementations that do not advertise exemplar support.
+func addWithExemplar(c prometheus.Counter, val float64, labels map[string]string) {
+ if labels != nil {
+ if ea, ok := c.(prometheus.ExemplarAdder); ok {
+ ea.AddWithExemplar(val, labels)
+ return
+ }
}
- obs.(prometheus.ExemplarAdder).AddWithExemplar(val, labels)
+ c.Add(val)
}
// InstrumentHandlerInFlight is a middleware that wraps the provided
@@ -97,10 +109,10 @@ func InstrumentHandlerDuration(obs prometheus.ObserverVec, next http.Handler, op
next.ServeHTTP(d, r)
l := labels(code, method, r.Method, d.Status(), hOpts.extraMethods...)
- for label, resolve := range hOpts.extraLabelsFromCtx {
- l[label] = resolve(r.Context())
+ for label, resolve := range hOpts.extraLabelsFromRequest {
+ l[label] = resolve(r)
}
- observeWithExemplar(obs.With(l), time.Since(now).Seconds(), hOpts.getExemplarFn(r.Context()))
+ observeWithExemplar(obs.With(l), time.Since(now).Seconds(), hOpts.getExemplarFn(r))
}
}
@@ -108,10 +120,10 @@ func InstrumentHandlerDuration(obs prometheus.ObserverVec, next http.Handler, op
now := time.Now()
next.ServeHTTP(w, r)
l := labels(code, method, r.Method, 0, hOpts.extraMethods...)
- for label, resolve := range hOpts.extraLabelsFromCtx {
- l[label] = resolve(r.Context())
+ for label, resolve := range hOpts.extraLabelsFromRequest {
+ l[label] = resolve(r)
}
- observeWithExemplar(obs.With(l), time.Since(now).Seconds(), hOpts.getExemplarFn(r.Context()))
+ observeWithExemplar(obs.With(l), time.Since(now).Seconds(), hOpts.getExemplarFn(r))
}
}
@@ -147,10 +159,10 @@ func InstrumentHandlerCounter(counter *prometheus.CounterVec, next http.Handler,
next.ServeHTTP(d, r)
l := labels(code, method, r.Method, d.Status(), hOpts.extraMethods...)
- for label, resolve := range hOpts.extraLabelsFromCtx {
- l[label] = resolve(r.Context())
+ for label, resolve := range hOpts.extraLabelsFromRequest {
+ l[label] = resolve(r)
}
- addWithExemplar(counter.With(l), 1, hOpts.getExemplarFn(r.Context()))
+ addWithExemplar(counter.With(l), 1, hOpts.getExemplarFn(r))
}
}
@@ -158,10 +170,10 @@ func InstrumentHandlerCounter(counter *prometheus.CounterVec, next http.Handler,
next.ServeHTTP(w, r)
l := labels(code, method, r.Method, 0, hOpts.extraMethods...)
- for label, resolve := range hOpts.extraLabelsFromCtx {
- l[label] = resolve(r.Context())
+ for label, resolve := range hOpts.extraLabelsFromRequest {
+ l[label] = resolve(r)
}
- addWithExemplar(counter.With(l), 1, hOpts.getExemplarFn(r.Context()))
+ addWithExemplar(counter.With(l), 1, hOpts.getExemplarFn(r))
}
}
@@ -200,10 +212,10 @@ func InstrumentHandlerTimeToWriteHeader(obs prometheus.ObserverVec, next http.Ha
now := time.Now()
d := newDelegator(w, func(status int) {
l := labels(code, method, r.Method, status, hOpts.extraMethods...)
- for label, resolve := range hOpts.extraLabelsFromCtx {
- l[label] = resolve(r.Context())
+ for label, resolve := range hOpts.extraLabelsFromRequest {
+ l[label] = resolve(r)
}
- observeWithExemplar(obs.With(l), time.Since(now).Seconds(), hOpts.getExemplarFn(r.Context()))
+ observeWithExemplar(obs.With(l), time.Since(now).Seconds(), hOpts.getExemplarFn(r))
})
next.ServeHTTP(d, r)
}
@@ -244,10 +256,10 @@ func InstrumentHandlerRequestSize(obs prometheus.ObserverVec, next http.Handler,
size := computeApproximateRequestSize(r)
l := labels(code, method, r.Method, d.Status(), hOpts.extraMethods...)
- for label, resolve := range hOpts.extraLabelsFromCtx {
- l[label] = resolve(r.Context())
+ for label, resolve := range hOpts.extraLabelsFromRequest {
+ l[label] = resolve(r)
}
- observeWithExemplar(obs.With(l), float64(size), hOpts.getExemplarFn(r.Context()))
+ observeWithExemplar(obs.With(l), float64(size), hOpts.getExemplarFn(r))
}
}
@@ -256,10 +268,10 @@ func InstrumentHandlerRequestSize(obs prometheus.ObserverVec, next http.Handler,
size := computeApproximateRequestSize(r)
l := labels(code, method, r.Method, 0, hOpts.extraMethods...)
- for label, resolve := range hOpts.extraLabelsFromCtx {
- l[label] = resolve(r.Context())
+ for label, resolve := range hOpts.extraLabelsFromRequest {
+ l[label] = resolve(r)
}
- observeWithExemplar(obs.With(l), float64(size), hOpts.getExemplarFn(r.Context()))
+ observeWithExemplar(obs.With(l), float64(size), hOpts.getExemplarFn(r))
}
}
@@ -296,10 +308,10 @@ func InstrumentHandlerResponseSize(obs prometheus.ObserverVec, next http.Handler
next.ServeHTTP(d, r)
l := labels(code, method, r.Method, d.Status(), hOpts.extraMethods...)
- for label, resolve := range hOpts.extraLabelsFromCtx {
- l[label] = resolve(r.Context())
+ for label, resolve := range hOpts.extraLabelsFromRequest {
+ l[label] = resolve(r)
}
- observeWithExemplar(obs.With(l), float64(d.Written()), hOpts.getExemplarFn(r.Context()))
+ observeWithExemplar(obs.With(l), float64(d.Written()), hOpts.getExemplarFn(r))
})
}
@@ -366,7 +378,7 @@ func checkLabels(c prometheus.Collector) (code, method bool) {
panic("metric partitioned with non-supported labels")
}
}
- return
+ return code, method
}
func isLabelCurried(c prometheus.Collector, label string) bool {
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go
index 5d4383aa1..d4c0954f3 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go
@@ -15,6 +15,7 @@ package promhttp
import (
"context"
+ "net/http"
"github.com/prometheus/client_golang/prometheus"
)
@@ -24,28 +25,31 @@ type Option interface {
apply(*options)
}
+// LabelValueFromRequest is used to compute the label value from request.
+type LabelValueFromRequest func(request *http.Request) string
+
// LabelValueFromCtx are used to compute the label value from request context.
// Context can be filled with values from request through middleware.
type LabelValueFromCtx func(ctx context.Context) string
// options store options for both a handler or round tripper.
type options struct {
- extraMethods []string
- getExemplarFn func(requestCtx context.Context) prometheus.Labels
- extraLabelsFromCtx map[string]LabelValueFromCtx
+ extraMethods []string
+ getExemplarFn func(req *http.Request) prometheus.Labels
+ extraLabelsFromRequest map[string]LabelValueFromRequest
}
func defaultOptions() *options {
return &options{
- getExemplarFn: func(ctx context.Context) prometheus.Labels { return nil },
- extraLabelsFromCtx: map[string]LabelValueFromCtx{},
+ getExemplarFn: func(req *http.Request) prometheus.Labels { return nil },
+ extraLabelsFromRequest: map[string]LabelValueFromRequest{},
}
}
func (o *options) emptyDynamicLabels() prometheus.Labels {
labels := prometheus.Labels{}
- for label := range o.extraLabelsFromCtx {
+ for label := range o.extraLabelsFromRequest {
labels[label] = ""
}
@@ -66,19 +70,39 @@ func WithExtraMethods(methods ...string) Option {
})
}
-// WithExemplarFromContext allows to inject function that will get exemplar from context that will be put to counter and histogram metrics.
+// WithExemplarFromRequest allows you to inject a function that will get exemplar from request that will be put to counter and histogram metrics.
// If the function returns nil labels or the metric does not support exemplars, no exemplar will be added (noop), but
// metric will continue to observe/increment.
-func WithExemplarFromContext(getExemplarFn func(requestCtx context.Context) prometheus.Labels) Option {
+func WithExemplarFromRequest(getExemplarFn func(req *http.Request) prometheus.Labels) Option {
return optionApplyFunc(func(o *options) {
o.getExemplarFn = getExemplarFn
})
}
+// WithExemplarFromContext allows you to inject a function that will get exemplar from context that will be put to counter and histogram metrics.
+// If the function returns nil labels or the metric does not support exemplars, no exemplar will be added (noop), but
+// metric will continue to observe/increment.
+func WithExemplarFromContext(getExemplarFn func(requestCtx context.Context) prometheus.Labels) Option {
+ return optionApplyFunc(func(o *options) {
+ o.getExemplarFn = func(req *http.Request) prometheus.Labels {
+ return getExemplarFn(req.Context())
+ }
+ })
+}
+
+// WithLabelFromRequest registers a label for dynamic resolution with access to the request.
+func WithLabelFromRequest(name string, valueFn LabelValueFromRequest) Option {
+ return optionApplyFunc(func(o *options) {
+ o.extraLabelsFromRequest[name] = valueFn
+ })
+}
+
// WithLabelFromCtx registers a label for dynamic resolution with access to context.
// See the example for ExampleInstrumentHandlerWithLabelResolver for example usage
func WithLabelFromCtx(name string, valueFn LabelValueFromCtx) Option {
return optionApplyFunc(func(o *options) {
- o.extraLabelsFromCtx[name] = valueFn
+ o.extraLabelsFromRequest[name] = func(req *http.Request) string {
+ return valueFn(req.Context())
+ }
})
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go
index c6fd2f58b..ed0681c8b 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/registry.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/registry.go
@@ -214,6 +214,19 @@ func (err AlreadyRegisteredError) Error() string {
// by a Gatherer to report multiple errors during MetricFamily gathering.
type MultiError []error
+// SafeMultiError is a thread-safe wrapper around MultiError using a mutex.
+type SafeMultiError struct {
+ mu sync.Mutex
+ errs MultiError
+}
+
+// Appends the provided error to the contained MultiError in a thread-safe way.
+func (s *SafeMultiError) Append(err error) {
+ s.mu.Lock()
+ s.errs.Append(err)
+ s.mu.Unlock()
+}
+
// Error formats the contained errors as a bullet point list, preceded by the
// total number of errors. Note that this results in a multi-line string.
func (errs MultiError) Error() string {
@@ -408,6 +421,16 @@ func (r *Registry) MustRegister(cs ...Collector) {
}
}
+// MustGather implements Gatherer.
+// Wraps around Gather and panics if Gather fails for any reason.
+func (r *Registry) MustGather() []*dto.MetricFamily {
+ mfs, err := r.Gather()
+ if err != nil {
+ panic(err)
+ }
+ return mfs
+}
+
// Gather implements Gatherer.
func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
r.mtx.RLock()
@@ -423,7 +446,7 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
uncheckedMetricChan = make(chan Metric, capMetricChan)
metricHashes = map[uint64]struct{}{}
wg sync.WaitGroup
- errs MultiError // The collected errors to return in the end.
+ safeErrs = &SafeMultiError{} // To collect errors in a threadsafe way
registeredDescIDs map[uint64]struct{} // Only used for pedantic checks
)
@@ -453,9 +476,9 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
for {
select {
case collector := <-checkedCollectors:
- collector.Collect(checkedMetricChan)
+ safeErrs.Append((safeCollect(collector, checkedMetricChan)))
case collector := <-uncheckedCollectors:
- collector.Collect(uncheckedMetricChan)
+ safeErrs.Append(safeCollect(collector, uncheckedMetricChan))
default:
return
}
@@ -499,7 +522,7 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
cmc = nil
break
}
- errs.Append(processMetric(
+ safeErrs.Append(processMetric(
metric, metricFamiliesByName,
metricHashes,
registeredDescIDs,
@@ -509,7 +532,7 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
umc = nil
break
}
- errs.Append(processMetric(
+ safeErrs.Append(processMetric(
metric, metricFamiliesByName,
metricHashes,
nil,
@@ -526,7 +549,7 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
cmc = nil
break
}
- errs.Append(processMetric(
+ safeErrs.Append(processMetric(
metric, metricFamiliesByName,
metricHashes,
registeredDescIDs,
@@ -536,7 +559,7 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
umc = nil
break
}
- errs.Append(processMetric(
+ safeErrs.Append(processMetric(
metric, metricFamiliesByName,
metricHashes,
nil,
@@ -556,7 +579,8 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
break
}
}
- return internal.NormalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap()
+
+ return internal.NormalizeMetricFamilies(metricFamiliesByName), safeErrs.errs.MaybeUnwrap()
}
// Describe implements Collector.
@@ -571,6 +595,24 @@ func (r *Registry) Describe(ch chan<- *Desc) {
}
}
+// Helper wrapper around Collector.Collect.
+// It tries to collect from the channel, recovers on panic and
+// if it has recovered from a panic, then it sends an InvalidMetric into
+// the channel with an InvalidDesc, and an error that includes a stack trace.
+func safeCollect(c Collector, ch chan<- Metric) (err error) {
+ defer func() {
+ if r := recover(); r != nil {
+ buf := make([]byte, 64<<10) // 64 KB
+ n := runtime.Stack(buf, false)
+ err = fmt.Errorf("prometheus collector panic recovered: type=%T: error=%v\nstack trace=%s", c, r, buf[:n])
+ ch <- NewInvalidMetric(NewInvalidDesc(err), err)
+ }
+ }()
+ c.Collect(ch)
+
+ return err
+}
+
// Collect implements Collector.
func (r *Registry) Collect(ch chan<- Metric) {
r.mtx.RLock()
@@ -599,10 +641,12 @@ func WriteToTextfile(filename string, g Gatherer) error {
mfs, err := g.Gather()
if err != nil {
+ tmp.Close()
return err
}
for _, mf := range mfs {
if _, err := expfmt.MetricFamilyToText(tmp, mf); err != nil {
+ tmp.Close()
return err
}
}
@@ -685,6 +729,9 @@ func processMetric(
metricFamily = &dto.MetricFamily{}
metricFamily.Name = proto.String(desc.fqName)
metricFamily.Help = proto.String(desc.help)
+ if desc.unit != "" {
+ metricFamily.Unit = proto.String(desc.unit)
+ }
// TODO(beorn7): Simplify switch once Desc has type.
switch {
case dtoMetric.Gauge != nil:
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go
index ac5203c6f..c12b8d13d 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go
@@ -101,6 +101,9 @@ type SummaryOpts struct {
// string.
Help string
+ // Unit provides the unit of this Summary.
+ Unit string
+
// ConstLabels are used to attach fixed labels to this metric. Metrics
// with the same fully-qualified name must have the same label names in
// their ConstLabels.
@@ -181,11 +184,12 @@ type SummaryVecOpts struct {
// NewSummary creates a new Summary based on the provided SummaryOpts.
func NewSummary(opts SummaryOpts) Summary {
return newSummary(
- NewDesc(
+ V2.NewDesc(
BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
opts.Help,
- nil,
+ UnconstrainedLabels(nil),
opts.ConstLabels,
+ WithUnit(opts.Unit),
),
opts,
)
@@ -578,6 +582,7 @@ func (v2) NewSummaryVec(opts SummaryVecOpts) *SummaryVec {
opts.Help,
opts.VariableLabels,
opts.ConstLabels,
+ WithUnit(opts.Unit),
)
return &SummaryVec{
MetricVec: NewMetricVec(desc, func(lvs ...string) Metric {
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/timer.go b/vendor/github.com/prometheus/client_golang/prometheus/timer.go
index 52344fef5..c1318ffb5 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/timer.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/timer.go
@@ -37,10 +37,10 @@ type Timer struct {
// or
//
// func TimeMeWithExemplar() {
-// timer := NewTimer(myHistogram)
-// defer timer.ObserveDurationWithExemplar(exemplar)
-// // Do actual work.
-// }
+// timer := NewTimer(myHistogram)
+// defer timer.ObserveDurationWithExemplar(exemplar)
+// // Do actual work.
+// }
func NewTimer(o Observer) *Timer {
return &Timer{
begin: time.Now(),
@@ -66,7 +66,7 @@ func (t *Timer) ObserveDuration() time.Duration {
// ObserveDurationWithExemplar is like ObserveDuration, but it will also
// observe exemplar with the duration unless exemplar is nil or provided Observer can't
-// be casted to ExemplarObserver.
+// be cast to ExemplarObserver.
func (t *Timer) ObserveDurationWithExemplar(exemplar Labels) time.Duration {
d := time.Since(t.begin)
eo, ok := t.observer.(ExemplarObserver)
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go
index 487b46656..121d2a963 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/vec.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/vec.go
@@ -193,9 +193,11 @@ func (m *MetricVec) CurryWith(labels Labels) (*MetricVec, error) {
//
// Keeping the Metric for later use is possible (and should be considered if
// performance is critical), but keep in mind that Reset, DeleteLabelValues and
-// Delete can be used to delete the Metric from the MetricVec. In that case, the
-// Metric will still exist, but it will not be exported anymore, even if a
-// Metric with the same label values is created later.
+// Delete can be used to delete the Metric from the MetricVec. In that case, if
+// you have previously kept a reference to that Metric, the Metric object still
+// exists and can be used, but it will not be exported anymore. If a Metric with
+// the same label values is created later, updates to the old Metric reference
+// will not be exported.
//
// An error is returned if the number of label values is not the same as the
// number of variable labels in Desc (minus any curried labels).
@@ -657,7 +659,7 @@ func inlineLabelValues(lvs []string, curry []curriedLabelValue) []string {
}
var labelsPool = &sync.Pool{
- New: func() interface{} {
+ New: func() any {
return make(Labels)
},
}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/wrap.go b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go
index 2ed128506..697f55558 100644
--- a/vendor/github.com/prometheus/client_golang/prometheus/wrap.go
+++ b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go
@@ -230,6 +230,7 @@ func wrapDesc(desc *Desc, prefix string, labels Labels) *Desc {
return &Desc{
fqName: desc.fqName,
help: desc.help,
+ unit: desc.unit,
variableLabels: desc.variableLabels,
constLabelPairs: desc.constLabelPairs,
err: fmt.Errorf("attempted wrapping with already existing label name %q", ln),
@@ -238,8 +239,8 @@ func wrapDesc(desc *Desc, prefix string, labels Labels) *Desc {
constLabels[ln] = lv
}
// NewDesc will do remaining validations.
- newDesc := V2.NewDesc(prefix+desc.fqName, desc.help, desc.variableLabels, constLabels)
- // Propagate errors if there was any. This will override any errer
+ newDesc := V2.NewDesc(prefix+desc.fqName, desc.help, desc.variableLabels, constLabels, WithUnit(desc.unit))
+ // Propagate errors if there was any. This will override any error
// created by NewDesc above, i.e. earlier errors get precedence.
if desc.err != nil {
newDesc.err = desc.err
diff --git a/vendor/golang.org/x/crypto/argon2/argon2.go b/vendor/golang.org/x/crypto/argon2/argon2.go
index 2b65ec91a..57ab8371c 100644
--- a/vendor/golang.org/x/crypto/argon2/argon2.go
+++ b/vendor/golang.org/x/crypto/argon2/argon2.go
@@ -17,8 +17,8 @@
// It uses data-independent memory access, which is preferred for password
// hashing and password-based key derivation. Argon2i requires more passes over
// memory than Argon2id to protect from trade-off attacks. The recommended
-// parameters (taken from [RFC 9106 Section 7.3]) for non-interactive operations are time=3 and to
-// use the maximum available memory.
+// parameters (taken from [RFC 9106 Section 7.3]) for non-interactive
+// operations are time=3 and to use the maximum available memory.
//
// # Argon2id
//
@@ -26,11 +26,14 @@
// Argon2i and Argon2d. It uses data-independent memory access for the first
// half of the first iteration over the memory and data-dependent memory access
// for the rest. Argon2id is side-channel resistant and provides better brute-
-// force cost savings due to time-memory tradeoffs than Argon2i. The recommended
-// parameters for non-interactive operations (taken from [RFC 9106 Section 7.3]) are time=1 and to
-// use the maximum available memory.
+// force cost savings due to time-memory tradeoffs than Argon2i. [RFC 9106
+// Section 4] recommends time=1, memory=2*1024*1024 KiB (2 GiB), and threads=4
+// as the first recommended option. If much less memory is available, it
+// recommends time=3, memory=64*1024 KiB (64 MiB), and threads=4 as the second
+// recommended option.
//
// [argon2-specs.pdf]: https://github.com/P-H-C/phc-winner-argon2/blob/master/argon2-specs.pdf
+// [RFC 9106 Section 4]: https://www.rfc-editor.org/rfc/rfc9106.html#section-4
// [RFC 9106 Section 7.3]: https://www.rfc-editor.org/rfc/rfc9106.html#section-7.3
package argon2
@@ -59,9 +62,9 @@ const (
//
// key := argon2.Key([]byte("some password"), salt, 3, 32*1024, 4, 32)
//
-// [RFC 9106 Section 7.3] recommends time=3, and memory=32*1024 as a sensible number.
-// If using that amount of memory (32 MB) is not possible in some contexts then
-// the time parameter can be increased to compensate.
+// The example above uses time=3 and memory=32*1024. Argon2i generally
+// requires more passes over memory than Argon2id. If in doubt, prefer IDKey
+// and its Argon2id parameter recommendations.
//
// The time parameter specifies the number of passes over the memory and the
// memory parameter specifies the size of the memory in KiB. For example
@@ -69,8 +72,6 @@ const (
// adjusted to the number of available CPUs. The cost parameters should be
// increased as memory latency and CPU parallelism increases. Remember to get a
// good random salt.
-//
-// [RFC 9106 Section 7.3]: https://www.rfc-editor.org/rfc/rfc9106.html#section-7.3
func Key(password, salt []byte, time, memory uint32, threads uint8, keyLen uint32) []byte {
return deriveKey(argon2i, password, salt, nil, nil, time, memory, threads, keyLen)
}
@@ -83,20 +84,20 @@ func Key(password, salt []byte, time, memory uint32, threads uint8, keyLen uint3
// For example, you can get a derived key for e.g. AES-256 (which needs a
// 32-byte key) by doing:
//
-// key := argon2.IDKey([]byte("some password"), salt, 1, 64*1024, 4, 32)
+// key := argon2.IDKey([]byte("some password"), salt, 1, 2*1024*1024, 4, 32)
//
-// [RFC 9106 Section 7.3] recommends time=1, and memory=64*1024 as a sensible number.
-// If using that amount of memory (64 MB) is not possible in some contexts then
-// the time parameter can be increased to compensate.
+// The example above uses the first [RFC 9106 Section 4] recommended option.
+// If much less memory is available, the second recommended option is time=3,
+// memory=64*1024 KiB (64 MiB), and threads=4.
//
// The time parameter specifies the number of passes over the memory and the
// memory parameter specifies the size of the memory in KiB. For example
-// memory=64*1024 sets the memory cost to ~64 MB. The number of threads can be
-// adjusted to the numbers of available CPUs. The cost parameters should be
+// memory=2*1024*1024 sets the memory cost to ~2 GiB. The number of threads can
+// be adjusted to the numbers of available CPUs. The cost parameters should be
// increased as memory latency and CPU parallelism increases. Remember to get a
// good random salt.
//
-// [RFC 9106 Section 7.3]: https://www.rfc-editor.org/rfc/rfc9106.html#section-7.3
+// [RFC 9106 Section 4]: https://www.rfc-editor.org/rfc/rfc9106.html#section-4
func IDKey(password, salt []byte, time, memory uint32, threads uint8, keyLen uint32) []byte {
return deriveKey(argon2id, password, salt, nil, nil, time, memory, threads, keyLen)
}
diff --git a/vendor/golang.org/x/net/http2/transport_wrap.go b/vendor/golang.org/x/net/http2/transport_wrap.go
index eab2e6b07..534e77ab9 100644
--- a/vendor/golang.org/x/net/http2/transport_wrap.go
+++ b/vendor/golang.org/x/net/http2/transport_wrap.go
@@ -55,7 +55,7 @@ type transportConfig struct {
// Registered is called by net/http.Transport.RegisterProtocol,
// to let us know that it understands the registration mechanism we're using.
func (t transportConfig) Registered(t1 *http.Transport) {
- t.t.t1 = t1
+ t.t.lazyt1 = t1
}
func (t transportConfig) DisableCompression() bool {
@@ -145,29 +145,30 @@ func (t transportConfig) DialFromContext(ctx context.Context, network, address s
type transportInternal struct {
initOnce sync.Once
- t1 *http.Transport
+ lazyt1 *http.Transport
}
-func (t *Transport) init() {
+func (t *Transport) init() *http.Transport {
t.initOnce.Do(func() {
- if t.t1 != nil {
+ if t.lazyt1 != nil {
return
}
t1 := &http.Transport{}
t.configure(t1)
})
+ return t.lazyt1
}
func (t *Transport) configure(t1 *http.Transport) {
t1.RegisterProtocol("http/2", transportConfig{t})
- // tr2.t1 is set by transportConfig.Registered.
- if t.t1 != t1 {
+ // tr2.lazyt1 is set by transportConfig.Registered.
+ if t.lazyt1 != t1 {
panic("http2: net/http does not support this version of x/net/http2")
}
}
func (t *Transport) roundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
- t.init()
+ t1 := t.init()
if req.URL.Scheme == "http" && !t.AllowHTTP {
return nil, errors.New("http2: unencrypted HTTP/2 not enabled")
@@ -188,22 +189,23 @@ func (t *Transport) roundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
ctx := context.WithValue(req.Context(), http2TransportContextKey{}, t)
req = req.WithContext(ctx)
- return t.t1.RoundTrip(req)
+ return t1.RoundTrip(req)
}
func (t *Transport) closeIdleConnections() {
- t.init()
- t.t1.CloseIdleConnections()
+ t1 := t.init()
+ t1.CloseIdleConnections()
}
func (t *Transport) newUserClientConn(c net.Conn) (*ClientConn, error) {
+ t1 := t.init()
// http.Transport's NewClientConn doesn't provide a supported way to create
// a connection from a net.Conn. (This might be useful to add in the future?)
// We're going to craftily sneak one in via the context key, with the
// scheme of "http/2" telling NewClientConn to look for it.
ctx := context.WithValue(context.Background(), netConnContextKey{}, c)
- nhcc, err := t.t1.NewClientConn(ctx, "http/2", "")
+ nhcc, err := t1.NewClientConn(ctx, "http/2", "")
if err != nil {
return nil, err
}
diff --git a/vendor/golang.org/x/net/idna/idna.go b/vendor/golang.org/x/net/idna/idna.go
index 22767125b..e2f28fed4 100644
--- a/vendor/golang.org/x/net/idna/idna.go
+++ b/vendor/golang.org/x/net/idna/idna.go
@@ -400,7 +400,11 @@ func (p *Profile) process(s string, toASCII bool) (string, error) {
// Spec says keep the old label.
continue
}
- if unicode16 && err == nil && len(u) > 0 && isASCII(u) {
+ if err == nil && len(u) > 0 && isASCII(u) {
+ // UTS 43 pre-revision 33 doesn't classify a xn-- label
+ // which contains only ASCII characters as an error,
+ // but that's a specification bug and a security issue.
+ // Always return an error in this case.
err = punyError(enc)
}
isBidi = isBidi || bidirule.DirectionString(u) != bidi.LeftToRight
diff --git a/vendor/golang.org/x/sys/cpu/parse.go b/vendor/golang.org/x/sys/cpu/parse.go
index 56a7e1a17..12a99af5c 100644
--- a/vendor/golang.org/x/sys/cpu/parse.go
+++ b/vendor/golang.org/x/sys/cpu/parse.go
@@ -6,38 +6,50 @@ package cpu
import "strconv"
-// parseRelease parses a dot-separated version number. It follows the semver
-// syntax, but allows the minor and patch versions to be elided.
+// parseRelease parses a dot-separated version number from the prefix
+// of rel. It returns ok=true only if at least the major and minor
+// components were successfully parsed; the patch component is
+// best-effort. Trailing vendor or build suffixes such as
+// "-generic", "+", "_hi3535", or "-rc1" are ignored.
//
// This is a copy of the Go runtime's parseRelease from
-// https://golang.org/cl/209597.
+// https://golang.org/cl/209597, updated in https://golang.org/cl/781800.
func parseRelease(rel string) (major, minor, patch int, ok bool) {
- // Strip anything after a dash or plus.
- for i := range len(rel) {
- if rel[i] == '-' || rel[i] == '+' {
- rel = rel[:i]
- break
+ // next consumes a run of decimal digits from the front of rel,
+ // returning the parsed value. If the digits are followed by a
+ // '.', it is consumed and more is set so the caller knows to
+ // parse another component; otherwise scanning terminates and
+ // the rest of rel is discarded.
+ next := func() (n int, more, ok bool) {
+ i := 0
+ for i < len(rel) && rel[i] >= '0' && rel[i] <= '9' {
+ i++
}
- }
-
- next := func() (int, bool) {
- for i := range len(rel) {
- if rel[i] == '.' {
- ver, err := strconv.Atoi(rel[:i])
- rel = rel[i+1:]
- return ver, err == nil
- }
+ if i == 0 {
+ return 0, false, false
+ }
+ n, err := strconv.Atoi(rel[:i])
+ if err != nil {
+ return 0, false, false
+ }
+ if i < len(rel) && rel[i] == '.' {
+ rel = rel[i+1:]
+ return n, true, true
}
- ver, err := strconv.Atoi(rel)
rel = ""
- return ver, err == nil
+ return n, false, true
+ }
+
+ var more bool
+ if major, more, ok = next(); !ok || !more {
+ return 0, 0, 0, false
}
- if major, ok = next(); !ok || rel == "" {
- return
+ if minor, more, ok = next(); !ok {
+ return 0, 0, 0, false
}
- if minor, ok = next(); !ok || rel == "" {
- return
+ if !more {
+ return major, minor, 0, true
}
- patch, ok = next()
- return
+ patch, _, _ = next()
+ return major, minor, patch, true
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index ce4d7ab1e..21e2bfa39 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -1874,6 +1874,7 @@ func Dup2(oldfd, newfd int) error {
//sys Dup3(oldfd int, newfd int, flags int) (err error)
//sysnb EpollCreate1(flag int) (fd int, err error)
//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)
+//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2
//sys Exit(code int) = SYS_EXIT_GROUP
//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go
index 506dafa7b..210d545c9 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go
@@ -20,7 +20,6 @@ func setTimeval(sec, usec int64) Timeval {
// 64-bit file system and 32-bit uid calls
// (386 default is 32-bit file system and 16-bit uid).
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64
//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
index d557cf8de..a9a52f231 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
@@ -6,7 +6,6 @@
package unix
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
index ecf92bfa2..54474c20f 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
@@ -44,7 +44,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
// 64-bit file system and 32-bit uid calls
// (16-bit uid calls are not always supported in newer kernels)
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
index 173738077..e9f30db97 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
@@ -8,7 +8,6 @@ package unix
import "unsafe"
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go
index a3fd1d0b8..6f09ca200 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go
@@ -8,7 +8,6 @@ package unix
import "unsafe"
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
index 70963a95a..ca3b56597 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
@@ -6,7 +6,6 @@
package unix
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
index c218ebd28..54ba667b1 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
@@ -13,7 +13,6 @@ import (
func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
index e6c48500c..ce4628590 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
@@ -11,7 +11,6 @@ import (
"unsafe"
)
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
index 7286a9aa8..33f7af380 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
@@ -6,7 +6,6 @@
package unix
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
index fc5543c5f..c658871e3 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
@@ -8,7 +8,6 @@ package unix
import "unsafe"
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
index 66f31210d..2c8587691 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
@@ -10,7 +10,6 @@ import (
"unsafe"
)
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
index 11d1f1698..4964119af 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
@@ -6,7 +6,6 @@
package unix
-//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go
index 9d72a6b73..5bb51d7ae 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go
@@ -1359,6 +1359,7 @@ const (
FAN_UNLIMITED_MARKS = 0x20
FAN_UNLIMITED_QUEUE = 0x10
FD_CLOEXEC = 0x1
+ FD_PIDFS_ROOT = -0x2712
FD_SETSIZE = 0x400
FF0 = 0x0
FIB_RULE_DEV_DETACHED = 0x8
@@ -1970,6 +1971,8 @@ const (
MADV_DONTNEED = 0x4
MADV_DONTNEED_LOCKED = 0x18
MADV_FREE = 0x8
+ MADV_GUARD_INSTALL = 0x66
+ MADV_GUARD_REMOVE = 0x67
MADV_HUGEPAGE = 0xe
MADV_HWPOISON = 0x64
MADV_KEEPONFORK = 0x13
@@ -2114,7 +2117,7 @@ const (
MS_NOSEC = 0x10000000
MS_NOSUID = 0x2
MS_NOSYMFOLLOW = 0x100
- MS_NOUSER = -0x80000000
+ MS_NOUSER = 0x80000000
MS_POSIXACL = 0x10000
MS_PRIVATE = 0x40000
MS_RDONLY = 0x1
@@ -3786,6 +3789,9 @@ const (
TCPOPT_TIMESTAMP = 0x8
TCPOPT_TSTAMP_HDR = 0x101080a
TCPOPT_WINDOW = 0x3
+ TCP_AO_KEYF_EXCLUDE_OPT = 0x2
+ TCP_AO_KEYF_IFINDEX = 0x1
+ TCP_AO_MAXKEYLEN = 0x50
TCP_CC_INFO = 0x1a
TCP_CM_INQ = 0x24
TCP_CONGESTION = 0xd
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
index 80f40e401..5788c2a58 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
@@ -700,6 +700,23 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(events) > 0 {
+ _p0 = unsafe.Pointer(&events[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Eventfd(initval uint, flags int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
fd = int(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
index 4def3e9fc..254f33988 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
index fef2bc8ba..27c05db1a 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
index a9fd76a88..840d85bfc 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
@@ -213,23 +213,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fchown(fd int, uid int, gid int) (err error) {
_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
index 460065028..fe414498b 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go
index c8987d264..eb358ce05 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
index 921f43061..c437622f1 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
index 44f067829..bc4ca2558 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
index e7fa0abf0..5051435ce 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
index 8c5125675..33aa5418a 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
index 7392fd45e..3bef8ef1d 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fchown(fd int, uid int, gid int) (err error) {
_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
index 41180434e..fc1bd4e2c 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
index 40c6ce7ae..d78fe7dab 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
index 2cfe34adb..76dcf87d0 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
index 61e6f0709..2cf020f2b 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
index 834b84204..527637623 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
@@ -45,23 +45,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(events) > 0 {
- _p0 = unsafe.Pointer(&events[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go
index 6c955cea1..783621561 100644
--- a/vendor/golang.org/x/sys/windows/security_windows.go
+++ b/vendor/golang.org/x/sys/windows/security_windows.go
@@ -1109,17 +1109,53 @@ const (
)
// This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions.
+//
+// Go pointers stored in a TrusteeValue must be pinned using [runtime.Pinner]
+// for the lifetime of the TrusteeValue.
type TrusteeValue uintptr
+// TrusteeValueFromString is unsafe and should not be used.
+//
+// It returns a uintptr containing a reference to newly-allocated memory
+// which will be freed by the garbage collector.
+// There is no way for the caller to safely reference this memory.
+//
+// To create a [TrusteeValue] from a string, use:
+//
+// p, err := windows.UTF16PtrFromString(s)
+// if err != nil {
+// // handle error
+// }
+//
+// // Pin the string for as long as it is used.
+// var pinner runtime.Pinner
+// pinner.Pin(p)
+// defer pinner.Unpin()
+//
+// tv := TrusteeValue(unsafe.Pointer(p))
+//
+// Deprecated: TrusteeValueFromString is unsafe and should not be used.
func TrusteeValueFromString(str string) TrusteeValue {
return TrusteeValue(unsafe.Pointer(StringToUTF16Ptr(str)))
}
+
+// TrusteeValueFromSID returns a [TrusteeValue] referencing sid.
+//
+// The caller must pin sid using a [runtime.Pinner] for the lifetime of the TrusteeValue.
func TrusteeValueFromSID(sid *SID) TrusteeValue {
return TrusteeValue(unsafe.Pointer(sid))
}
+
+// TrusteeValueFromObjectsAndSid returns a [TrusteeValue] referencing objectsAndSid.
+//
+// The caller must pin objectsAndSid using a [runtime.Pinner] for the lifetime of the TrusteeValue.
func TrusteeValueFromObjectsAndSid(objectsAndSid *OBJECTS_AND_SID) TrusteeValue {
return TrusteeValue(unsafe.Pointer(objectsAndSid))
}
+
+// TrusteeValueFromObjectsAndName returns a [TrusteeValue] referencing objectsAndName.
+//
+// The caller must pin objectsAndName using a [runtime.Pinner] for the lifetime of the TrusteeValue.
func TrusteeValueFromObjectsAndName(objectsAndName *OBJECTS_AND_NAME) TrusteeValue {
return TrusteeValue(unsafe.Pointer(objectsAndName))
}
diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go
index 9755bca9f..e6966b4c3 100644
--- a/vendor/golang.org/x/sys/windows/syscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/syscall_windows.go
@@ -1728,11 +1728,15 @@ func (s *NTUnicodeString) String() string {
// the more common *uint16 string type.
func NewNTString(s string) (*NTString, error) {
var nts NTString
- s8, err := BytePtrFromString(s)
+ s8, err := ByteSliceFromString(s)
if err != nil {
return nil, err
}
- RtlInitString(&nts, s8)
+ // The source string plus its terminating NUL must fit within MAX_USHORT.
+ if len(s8) > MAX_USHORT {
+ return nil, syscall.EINVAL
+ }
+ RtlInitString(&nts, &s8[0])
return &nts, nil
}
diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go
index d2574a73e..75a50b316 100644
--- a/vendor/golang.org/x/sys/windows/types_windows.go
+++ b/vendor/golang.org/x/sys/windows/types_windows.go
@@ -169,6 +169,7 @@ const (
FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192
FORMAT_MESSAGE_MAX_WIDTH_MASK = 255
+ MAX_USHORT = 0xffff
MAX_PATH = 260
MAX_LONG_PATH = 32768
diff --git a/vendor/golang.org/x/text/cases/context.go b/vendor/golang.org/x/text/cases/context.go
index e9aa9e193..a28f45d7b 100644
--- a/vendor/golang.org/x/text/cases/context.go
+++ b/vendor/golang.org/x/text/cases/context.go
@@ -249,7 +249,7 @@ func upper(c *context) bool {
return c.copy()
}
-// isUpper writes the isUppercase version of the current rune to dst.
+// isUpper reports whether the current rune is in upper case.
func isUpper(c *context) bool {
ct := c.caseType()
if c.info&hasMappingMask == 0 || ct == cUpper {
diff --git a/vendor/golang.org/x/text/cases/map.go b/vendor/golang.org/x/text/cases/map.go
index 0f7c6a14b..51a683092 100644
--- a/vendor/golang.org/x/text/cases/map.go
+++ b/vendor/golang.org/x/text/cases/map.go
@@ -774,7 +774,7 @@ func nlTitle(c *context) bool {
// From CLDR:
// # Special titlecasing for Dutch initial "ij".
// ::Any-Title();
- // # Fix up Ij at the beginning of a "word" (per Any-Title, notUAX #29)
+ // # Fix up Ij at the beginning of a "word" (per Any-Title, not UAX #29)
// [:^WB=ALetter:] [:WB=Extend:]* [[:WB=MidLetter:][:WB=MidNumLet:]]? { Ij } → IJ ;
if c.src[c.pSrc] != 'I' && c.src[c.pSrc] != 'i' {
return title(c)
@@ -794,7 +794,7 @@ func nlTitleSpan(c *context) bool {
// From CLDR:
// # Special titlecasing for Dutch initial "ij".
// ::Any-Title();
- // # Fix up Ij at the beginning of a "word" (per Any-Title, notUAX #29)
+ // # Fix up Ij at the beginning of a "word" (per Any-Title, not UAX #29)
// [:^WB=ALetter:] [:WB=Extend:]* [[:WB=MidLetter:][:WB=MidNumLet:]]? { Ij } → IJ ;
if c.src[c.pSrc] != 'I' {
return isTitle(c)
diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo.go b/vendor/golang.org/x/text/unicode/norm/forminfo.go
index f3a234e5f..b3cf5d9bd 100644
--- a/vendor/golang.org/x/text/unicode/norm/forminfo.go
+++ b/vendor/golang.org/x/text/unicode/norm/forminfo.go
@@ -121,8 +121,12 @@ func (p Properties) BoundaryAfter() bool {
//
// When all 6 bits are zero, the character is inert, meaning it is never
// influenced by normalization.
+//
+// We set flags to 0x80 (high bit 7 unused in quick check data) to indicate an invalid rune.
type qcInfo uint8
+func (p Properties) isInvalid() bool { return p.flags == 0x80 }
+
func (p Properties) isYesC() bool { return p.flags&0x10 == 0 }
func (p Properties) isYesD() bool { return p.flags&0x4 == 0 }
@@ -247,6 +251,9 @@ func (f Form) PropertiesString(s string) Properties {
// to a Properties. See the comment at the top of the file
// for more information on the format.
func compInfo(v uint16, sz int) Properties {
+ if sz == 0 {
+ return Properties{flags: 0x80, size: 1}
+ }
if v == 0 {
return Properties{size: uint8(sz)}
} else if v >= 0x8000 {
@@ -254,7 +261,7 @@ func compInfo(v uint16, sz int) Properties {
size: uint8(sz),
ccc: uint8(v),
tccc: uint8(v),
- flags: qcInfo(v >> 8),
+ flags: qcInfo(v>>8) & 0x3f,
}
if p.ccc > 0 || p.combinesBackward() {
p.nLead = uint8(p.flags & 0x3)
diff --git a/vendor/golang.org/x/text/unicode/norm/iter.go b/vendor/golang.org/x/text/unicode/norm/iter.go
index 417c6b268..3cc059224 100644
--- a/vendor/golang.org/x/text/unicode/norm/iter.go
+++ b/vendor/golang.org/x/text/unicode/norm/iter.go
@@ -376,16 +376,12 @@ func nextComposed(i *Iter) []byte {
goto doNorm
}
prevCC = i.info.tccc
- sz := int(i.info.size)
- if sz == 0 {
- sz = 1 // illegal rune: copy byte-by-byte
- }
- p := outp + sz
+ p := outp + int(i.info.size)
if p > len(i.buf) {
break
}
outp = p
- i.p += sz
+ i.p += int(i.info.size)
if i.p >= i.rb.nsrc {
i.setDone()
break
diff --git a/vendor/golang.org/x/text/unicode/norm/normalize.go b/vendor/golang.org/x/text/unicode/norm/normalize.go
index 4747ad07a..60b1511ca 100644
--- a/vendor/golang.org/x/text/unicode/norm/normalize.go
+++ b/vendor/golang.org/x/text/unicode/norm/normalize.go
@@ -148,7 +148,7 @@ func (f Form) IsNormalString(s string) bool {
// patched buffer and whether the decomposition is still in progress.
func patchTail(rb *reorderBuffer) bool {
info, p := lastRuneStart(&rb.f, rb.out)
- if p == -1 || info.size == 0 {
+ if p == -1 || info.isInvalid() {
return true
}
end := p + int(info.size)
@@ -225,7 +225,7 @@ func doAppend(rb *reorderBuffer, out []byte, p int) []byte {
}
fd := &rb.f
if doMerge {
- var info Properties
+ info := Properties{flags: 0x80, size: 1} // invalid rune
if p < n {
info = fd.info(src, p)
if !info.BoundaryBefore() || info.nLeadingNonStarters() > 0 {
@@ -235,7 +235,7 @@ func doAppend(rb *reorderBuffer, out []byte, p int) []byte {
p = decomposeSegment(rb, p, true)
}
}
- if info.size == 0 {
+ if info.isInvalid() {
rb.doFlush()
// Append incomplete UTF-8 encoding.
return src.appendSlice(rb.out, p, n)
@@ -314,7 +314,7 @@ func (f *formInfo) quickSpan(src input, i, end int, atEOF bool) (n int, ok bool)
continue
}
info := f.info(src, i)
- if info.size == 0 {
+ if info.isInvalid() {
if atEOF {
// include incomplete runes
return n, true
@@ -379,7 +379,7 @@ func (f Form) firstBoundary(src input, nsrc int) int {
// CGJ insertion points correctly. Luckily it doesn't have to.
for {
info := fd.info(src, i)
- if info.size == 0 {
+ if info.isInvalid() {
return -1
}
if s := ss.next(info); s != ssSuccess {
@@ -424,7 +424,7 @@ func (f Form) nextBoundary(src input, nsrc int, atEOF bool) int {
}
fd := formTable[f]
info := fd.info(src, 0)
- if info.size == 0 {
+ if info.isInvalid() {
if atEOF {
return 1
}
@@ -435,7 +435,7 @@ func (f Form) nextBoundary(src input, nsrc int, atEOF bool) int {
for i := int(info.size); i < nsrc; i += int(info.size) {
info = fd.info(src, i)
- if info.size == 0 {
+ if info.isInvalid() {
if atEOF {
return i
}
@@ -465,7 +465,7 @@ func lastBoundary(fd *formInfo, b []byte) int {
if p == -1 {
return -1
}
- if info.size == 0 { // ends with incomplete rune
+ if info.isInvalid() { // ends with incomplete rune
if p == 0 { // starts with incomplete rune
return -1
}
@@ -504,7 +504,7 @@ func lastBoundary(fd *formInfo, b []byte) int {
func decomposeSegment(rb *reorderBuffer, sp int, atEOF bool) int {
// Force one character to be consumed.
info := rb.f.info(rb.src, sp)
- if info.size == 0 {
+ if info.isInvalid() {
return 0
}
if s := rb.ss.next(info); s == ssStarter {
@@ -528,7 +528,7 @@ func decomposeSegment(rb *reorderBuffer, sp int, atEOF bool) int {
break
}
info = rb.f.info(rb.src, sp)
- if info.size == 0 {
+ if info.isInvalid() {
if !atEOF {
return int(iShortSrc)
}
diff --git a/vendor/golang.org/x/tools/internal/stdlib/deps.go b/vendor/golang.org/x/tools/internal/stdlib/deps.go
index dacfc1dff..0f73c719c 100644
--- a/vendor/golang.org/x/tools/internal/stdlib/deps.go
+++ b/vendor/golang.org/x/tools/internal/stdlib/deps.go
@@ -12,366 +12,386 @@ type pkginfo struct {
}
var deps = [...]pkginfo{
- {"archive/tar", "\x03q\x03F=\x01\n\x01$\x01\x01\x02\x05\b\x02\x01\x02\x02\r"},
- {"archive/zip", "\x02\x04g\a\x03\x13\x021=\x01+\x05\x01\x0f\x03\x02\x0f\x04"},
- {"bufio", "\x03q\x86\x01D\x15"},
- {"bytes", "t+[\x03\fH\x02\x02"},
+ {"archive/tar", "\x03{\x03F>\x01\n\x01&\x01\x01\x02\x05\b\x02\x01\x02\x02\r"},
+ {"archive/zip", "\x02\x04j\x0e\x03\x12\x022>\x01-\x05\x01\x0f\x03\x02\x0f\x04"},
+ {"bufio", "\x03{\x87\x01F\x15"},
+ {"bytes", "~*]\x03\fJ\x02\x02"},
{"cmp", ""},
- {"compress/bzip2", "\x02\x02\xf6\x01A"},
- {"compress/flate", "\x02r\x03\x83\x01\f\x033\x01\x03"},
- {"compress/gzip", "\x02\x04g\a\x03\x15nU"},
- {"compress/lzw", "\x02r\x03\x83\x01"},
- {"compress/zlib", "\x02\x04g\a\x03\x13\x01o"},
- {"container/heap", "\xbc\x02"},
+ {"compress/bzip2", "\x02\x02\x81\x02C"},
+ {"compress/flate", "\x02|\x03\x84\x01\f\x034\x02\x03"},
+ {"compress/gzip", "\x02\x04j\x0e\x03\x14pW"},
+ {"compress/lzw", "\x02|\x03\x84\x01"},
+ {"compress/zlib", "\x02\x04j\x0e\x03\x12\x01q"},
+ {"container/heap", "\xc9\x02"},
{"container/list", ""},
{"container/ring", ""},
- {"context", "t\\p\x01\x0e"},
- {"crypto", "\x8a\x01pC"},
- {"crypto/aes", "\x10\v\t\x99\x02"},
- {"crypto/cipher", "\x03!\x01\x01 \x12\x1c,Z"},
- {"crypto/des", "\x10\x16 .,\x9d\x01\x03"},
- {"crypto/dsa", "F\x03+\x86\x01\r"},
- {"crypto/ecdh", "\x03\v\r\x10\x04\x17\x03\x0f\x1c\x86\x01"},
- {"crypto/ecdsa", "\x0e\x05\x03\x05\x01\x10\b\v\x06\x01\x03\x0e\x01\x1c\x86\x01\r\x05L\x01"},
- {"crypto/ed25519", "\x0e\x1f\x12\a\x03\b\a\x1cI=C"},
- {"crypto/elliptic", "4@\x86\x01\r9"},
- {"crypto/fips140", "#\x05\x95\x01\x98\x01"},
- {"crypto/hkdf", "0\x15\x01.\x16"},
- {"crypto/hmac", "\x1b\x16\x14\x01\x122"},
- {"crypto/hpke", "\x03\v\x02\x03\x04\x01\f\x01\x05\x1f\x05\a\x01\x01\x1d\x03\x13\x16\x9b\x01\x1c"},
- {"crypto/internal/boring", "\x0e\x02\x0el"},
- {"crypto/internal/boring/bbig", "\x1b\xec\x01N"},
- {"crypto/internal/boring/bcache", "\xc1\x02\x14"},
+ {"context", "~]r\x01\x0e"},
+ {"crypto", "\x93\x01rE"},
+ {"crypto/aes", "\x10\v\n\xa5\x02"},
+ {"crypto/cipher", "\x03\"\x01\x01 \x13$+\\"},
+ {"crypto/des", "\x10\x17 7+\xa1\x01\x03"},
+ {"crypto/dsa", "G\x034\x87\x01\r"},
+ {"crypto/ecdh", "\x03\v\r\x11\x04\x17\x03\x10$\x87\x01"},
+ {"crypto/ecdsa", "\x0e\x05\x03\x05\x01\x11\b\v\x06\x01\x03\x0f\x01$\x87\x01\r\x05O\x01"},
+ {"crypto/ed25519", "\x0e \x12\a\x03\t\a$I>E"},
+ {"crypto/elliptic", "5I\x87\x01\r;"},
+ {"crypto/fips140", "$\x05\x9e\x01\x9b\x01"},
+ {"crypto/hkdf", "1\x15\x017\x15"},
+ {"crypto/hmac", "\x1b\x17\x14\x01\x139"},
+ {"crypto/hpke", "\x03\v\x02\x03\x04\x01\r\x01\x05\x1f\x06\a\x01\x01%\x03\x12\x16\x9f\x01\x1d"},
+ {"crypto/internal/boring", "\x0e\x02\x0eu"},
+ {"crypto/internal/boring/bbig", "\x1b\xf7\x01P"},
+ {"crypto/internal/boring/bcache", "\xce\x02\x14"},
{"crypto/internal/boring/sig", ""},
{"crypto/internal/constanttime", ""},
- {"crypto/internal/cryptotest", "\x03\r\v\b%\x10\x19\x06\x13\x12 \x04\x06\t\x19\x01\x11\x11\x1b\x01\a\x05\b\x03\x05\f"},
- {"crypto/internal/entropy", "K"},
- {"crypto/internal/entropy/v1.0.0", "D0\x95\x018\x14"},
- {"crypto/internal/fips140", "C1\xbf\x01\v\x17"},
- {"crypto/internal/fips140/aes", "\x03 \x03\x02\x14\x05\x01\x01\x05,\x95\x014"},
- {"crypto/internal/fips140/aes/gcm", "#\x01\x02\x02\x02\x12\x05\x01\x06,\x92\x01"},
- {"crypto/internal/fips140/alias", "\xd5\x02"},
- {"crypto/internal/fips140/bigmod", "(\x19\x01\x06,\x95\x01"},
- {"crypto/internal/fips140/check", "#\x0e\a\t\x02\xb7\x01["},
- {"crypto/internal/fips140/check/checktest", "(\x8b\x02\""},
- {"crypto/internal/fips140/drbg", "\x03\x1f\x01\x01\x04\x14\x05\n)\x86\x01\x0f7\x01"},
- {"crypto/internal/fips140/ecdh", "\x03 \x05\x02\n\r3\x86\x01\x0f7"},
- {"crypto/internal/fips140/ecdsa", "\x03 \x04\x01\x02\a\x03\x06:\x16pF"},
- {"crypto/internal/fips140/ed25519", "\x03 \x05\x02\x04\f:\xc9\x01\x03"},
- {"crypto/internal/fips140/edwards25519", "\x1f\t\a\x123\x95\x017"},
- {"crypto/internal/fips140/edwards25519/field", "(\x14\x053\x95\x01"},
- {"crypto/internal/fips140/hkdf", "\x03 \x05\t\a<\x16"},
- {"crypto/internal/fips140/hmac", "\x03 \x15\x01\x01:\x16"},
- {"crypto/internal/fips140/mldsa", "\x03\x1c\x04\x05\x02\x0e\x01\x03\x053\x95\x017"},
- {"crypto/internal/fips140/mlkem", "\x03 \x05\x02\x0f\x03\x053\xcc\x01"},
- {"crypto/internal/fips140/nistec", "\x1f\t\r\f3\x95\x01*\r\x15"},
- {"crypto/internal/fips140/nistec/fiat", "(\x148\x95\x01"},
- {"crypto/internal/fips140/pbkdf2", "\x03 \x05\t\a<\x16"},
- {"crypto/internal/fips140/rsa", "\x03\x1c\x04\x04\x01\x02\x0e\x01\x01\x028\x16pF"},
- {"crypto/internal/fips140/sha256", "\x03 \x1e\x01\x06,\x16\x7f"},
- {"crypto/internal/fips140/sha3", "\x03 \x19\x05\x012\x95\x01L"},
- {"crypto/internal/fips140/sha512", "\x03 \x1e\x01\x06,\x16\x7f"},
- {"crypto/internal/fips140/ssh", "(b"},
- {"crypto/internal/fips140/subtle", "\x1f\a\x1b\xc8\x01"},
- {"crypto/internal/fips140/tls12", "\x03 \x05\t\a\x02:\x16"},
- {"crypto/internal/fips140/tls13", "\x03 \x05\b\b\t3\x16"},
- {"crypto/internal/fips140cache", "\xb3\x02\r'"},
+ {"crypto/internal/cryptotest", "\x03\r\v\t%\x11\x1a\r\x12\x12!\x04\x06\n\x19\x01\x11\x11\x1d\x01\a\x03\x02\b\x02\x01\x05\f"},
+ {"crypto/internal/cryptotest/wycheproof", "\x0e\x12S\x01\f\x01r@\x05\x03\x15\x10"},
+ {"crypto/internal/entropy", "L"},
+ {"crypto/internal/entropy/v1.0.0", "E9\x96\x01:\x14"},
+ {"crypto/internal/fips140", "D:\xc2\x01\v\x17"},
+ {"crypto/internal/fips140/aes", "\x03!\x03\x02\x14\x05\x01\x01\x055\x96\x016"},
+ {"crypto/internal/fips140/aes/gcm", "$\x01\x02\x02\x02\x12\x05\x01\x065\x93\x01"},
+ {"crypto/internal/fips140/alias", "\xe2\x02"},
+ {"crypto/internal/fips140/bigmod", ")\x19\x01\x065\x96\x01"},
+ {"crypto/internal/fips140/check", "$\x0e\a\t\x02\xc1\x01]"},
+ {"crypto/internal/fips140/check/checktest", ")\x97\x02\""},
+ {"crypto/internal/fips140/drbg", "\x03 \x01\x01\x04\x14\x05\n2\x87\x01\x0f9\x01"},
+ {"crypto/internal/fips140/ecdh", "\x03!\x05\x02\n\r<\x87\x01\x0f9"},
+ {"crypto/internal/fips140/ecdsa", "\x03!\x04\x01\x02\a\x03\x06C\x15r\x0f9"},
+ {"crypto/internal/fips140/ed25519", "\x03!\x05\x02\x04\fC\xcc\x01\x03"},
+ {"crypto/internal/fips140/edwards25519", "\x1f\n\a\x12<\x96\x019"},
+ {"crypto/internal/fips140/edwards25519/field", ")\x14\x05<\x96\x01"},
+ {"crypto/internal/fips140/hkdf", "\x03!\x05\t\aE\x15"},
+ {"crypto/internal/fips140/hmac", "\x03!\x15\x01\x01C\x15"},
+ {"crypto/internal/fips140/mldsa", "\x03\x1c\x05\x05\x02\x0e\x01\x03\x05<\x96\x019"},
+ {"crypto/internal/fips140/mlkem", "\x03!\x05\x02\x0f\x03\x05<\xcf\x01"},
+ {"crypto/internal/fips140/nistec", "\x1f\n\r\f<\x96\x01,\r\x15"},
+ {"crypto/internal/fips140/nistec/fiat", ")\x14A\x96\x01"},
+ {"crypto/internal/fips140/pbkdf2", "\x03!\x05\t\aE\x15"},
+ {"crypto/internal/fips140/rsa", "\x03\x1c\x05\x04\x01\x02\x0e\x01\x01\x02A\x15rH"},
+ {"crypto/internal/fips140/sha256", "\x03!\x1e\x01\x065\x15\x81\x01"},
+ {"crypto/internal/fips140/sha3", "\x03!\x19\x05\x01;\x96\x01N"},
+ {"crypto/internal/fips140/sha512", "\x03!\x1e\x01\x065\x15\x81\x01"},
+ {"crypto/internal/fips140/ssh", ")j"},
+ {"crypto/internal/fips140/subtle", "\x1f\b\x1b\xd2\x01"},
+ {"crypto/internal/fips140/tls12", "\x03!\x05\t\a\x02C\x15"},
+ {"crypto/internal/fips140/tls13", "\x03!\x05\b\b\t<\x15"},
+ {"crypto/internal/fips140cache", "\xc0\x02\r."},
{"crypto/internal/fips140deps", ""},
- {"crypto/internal/fips140deps/byteorder", "\xa0\x01"},
- {"crypto/internal/fips140deps/cpu", "\xb5\x01\a"},
- {"crypto/internal/fips140deps/godebug", "\xbd\x01"},
- {"crypto/internal/fips140deps/time", "\xcf\x02"},
- {"crypto/internal/fips140hash", "9\x1d4\xcb\x01"},
- {"crypto/internal/fips140only", "\x17\x13\x0e\x01\x01Pp"},
+ {"crypto/internal/fips140deps/byteorder", "\xa9\x01"},
+ {"crypto/internal/fips140deps/cpu", "\xbe\x01\b"},
+ {"crypto/internal/fips140deps/godebug", "\xc7\x01"},
+ {"crypto/internal/fips140deps/time", "\xe2\x02"},
+ {"crypto/internal/fips140hash", ":\x1e;\xcf\x01"},
+ {"crypto/internal/fips140only", "\x17\x14\x0e\x01\x01Xr"},
{"crypto/internal/fips140test", ""},
- {"crypto/internal/impl", "\xbe\x02"},
- {"crypto/internal/rand", "\x1b\x0f s=["},
- {"crypto/internal/randutil", "\xfa\x01\x12"},
- {"crypto/internal/sysrand", "tq! \r\r\x01\x01\r\x06"},
- {"crypto/internal/sysrand/internal/seccomp", "t"},
- {"crypto/md5", "\x0e8.\x16\x16i"},
- {"crypto/mlkem", "\x0e%"},
- {"crypto/mlkem/mlkemtest", "3\x13\b&"},
- {"crypto/pbkdf2", "6\x0f\x01.\x16"},
- {"crypto/rand", "\x1b\x0f\x1c\x03+\x86\x01\rN"},
- {"crypto/rc4", "& .\xc9\x01"},
- {"crypto/rsa", "\x0e\r\x01\v\x10\x0e\x01\x03\b\a\x1c\x03\x133=\f\x01"},
- {"crypto/sha1", "\x0e\r+\x02,\x16\x16\x15T"},
- {"crypto/sha256", "\x0e\r\x1dR"},
- {"crypto/sha3", "\x0e+Q\xcb\x01"},
- {"crypto/sha512", "\x0e\r\x1fP"},
- {"crypto/subtle", "\x1f\x1d\x9f\x01z"},
- {"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x02\x01\x01\x01\t\x01\x18\x01\x0f\x01\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x13\x16\x15\b=\x16\x16\r\b\x01\x01\x01\x02\x01\x0e\x06\x02\x01\x0f"},
- {"crypto/tls/internal/fips140tls", "\x17\xaa\x02"},
- {"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x017\x06\x01\x01\x02\x05\x0e\x06\x02\x02\x03F\x03:\x01\x02\b\x01\x01\x02\a\x10\x05\x01\x06\a\b\x02\x01\x02\x0f\x02\x01\x01\x02\x03\x01"},
- {"crypto/x509/pkix", "j\x06\a\x90\x01H"},
- {"database/sql", "\x03\nQ\x16\x03\x83\x01\v\a\"\x05\b\x02\x03\x01\x0e\x02\x02\x02"},
- {"database/sql/driver", "\rg\x03\xb7\x01\x0f\x12"},
- {"debug/buildinfo", "\x03^\x02\x01\x01\b\a\x03g\x1a\x02\x01+\x0f "},
- {"debug/dwarf", "\x03j\a\x03\x83\x011\x11\x01\x01"},
- {"debug/elf", "\x03\x06W\r\a\x03g\x1b\x01\f \x17\x01\x17"},
- {"debug/gosym", "\x03j\n$\xa1\x01\x01\x01\x02"},
- {"debug/macho", "\x03\x06W\r\ng\x1c,\x17\x01"},
- {"debug/pe", "\x03\x06W\r\a\x03g\x1c,\x17\x01\x17"},
- {"debug/plan9obj", "m\a\x03g\x1c,"},
- {"embed", "t+B\x19\x01T"},
+ {"crypto/internal/impl", "\xcb\x02"},
+ {"crypto/internal/rand", "\x1b\x10 |>]"},
+ {"crypto/internal/randutil", "\x85\x02\x12"},
+ {"crypto/internal/sysrand", "~r!\"\r\r\x01\x01\r\x06"},
+ {"crypto/internal/sysrand/internal/seccomp", "~"},
+ {"crypto/md5", "\x0e97\x15\x16k"},
+ {"crypto/mldsa", "\x0e%K\x87\x01"},
+ {"crypto/mlkem", "\x0e&"},
+ {"crypto/mlkem/mlkemtest", "4\x13\t."},
+ {"crypto/pbkdf2", "7\x0f\x017\x15"},
+ {"crypto/rand", "\x1b\x10\x1c\x034\x87\x01\rP"},
+ {"crypto/rc4", "' 7\xcc\x01"},
+ {"crypto/rsa", "\x0e\r\x01\f\x10\x0e\x01\x03\t\a$\x03\x124>\f\x01"},
+ {"crypto/sha1", "\x0e\r,\x025\x15\x16\x15V"},
+ {"crypto/sha256", "\x0e\r\x1eZ"},
+ {"crypto/sha3", "\x0e,Y\xcf\x01"},
+ {"crypto/sha512", "\x0e\r X"},
+ {"crypto/subtle", "\x1f\x1e\xa9\x01|"},
+ {"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x01\x01\x01\x01\x01\n\x01\x18\x01\x0f\x01\x01\x03\x01\x01\x01\x01\x02\x01\x02\x01\x1f\x02\x03\x12\x16\x15\t>\x16\x18\r\b\x01\x01\x01\x02\x01\x0e\x06\x03\x01\x15"},
+ {"crypto/tls/internal/fips140tls", "\x17\xb7\x02"},
+ {"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x01\x017\x01\x06\x01\x01\x02\x05\x0f\x06\t\x02\x03F\x03;\x01\x02\b\x01\x01\x02\a\x12\x05\x01\x06\a\b\x02\x01\x02\x0f\x02\x01\x01\x02\x04\x01"},
+ {"crypto/x509/pkix", "m\x06\x0e\x91\x019\x11"},
+ {"database/sql", "\x03\nS\x01\x1d\x03\x84\x01\v\a$\x05\b\x02\x03\x01\x0e\x02\x02\x02\x01"},
+ {"database/sql/driver", "\rT\x1d\x03\xba\x01\x0f\x12\a"},
+ {"database/sql/internal", ""},
+ {"debug/buildinfo", "\x03a\x02\x01\x01\b\x0e\x03h\x1a\x02\x01-\x0f "},
+ {"debug/dwarf", "\x03m\x0e\x03\x84\x013\x11\x01\x01"},
+ {"debug/elf", "\x03\x06Z\r\x0e\x03h\x1b\x01\f\"\x17\x01\x17"},
+ {"debug/gosym", "\x03m\x11#\xa5\x01\x01\x01\x02"},
+ {"debug/macho", "\x03\x06Z\r\x11h\x1c.\x17\x01"},
+ {"debug/pe", "\x03\x06Z\r\x0e\x03h\x1c.\x17\x01\x17"},
+ {"debug/plan9obj", "p\x0e\x03h\x1c."},
+ {"embed", "~*D\x19\x01V"},
{"embed/internal/embedtest", ""},
{"encoding", ""},
- {"encoding/ascii85", "\xfa\x01C"},
- {"encoding/asn1", "\x03q\x03g(\x01'\r\x02\x01\x11\x03\x01"},
- {"encoding/base32", "\xfa\x01A\x02"},
- {"encoding/base64", "\xa0\x01ZA\x02"},
- {"encoding/binary", "t\x86\x01\f(\r\x05"},
- {"encoding/csv", "\x02\x01q\x03\x83\x01D\x13\x02"},
- {"encoding/gob", "\x02f\x05\a\x03g\x1c\v\x01\x03\x1d\b\x12\x01\x10\x02"},
- {"encoding/hex", "t\x03\x83\x01A\x03"},
- {"encoding/json", "\x03\x01d\x04\b\x03\x83\x01\f(\r\x02\x01\x02\x11\x01\x01\x02"},
- {"encoding/pem", "\x03i\b\x86\x01A\x03"},
- {"encoding/xml", "\x02\x01e\f\x03\x83\x014\x05\n\x01\x02\x11\x02"},
- {"errors", "\xd0\x01\x85\x01"},
- {"expvar", "qLA\b\v\x15\r\b\x02\x03\x01\x12"},
- {"flag", "h\f\x03\x83\x01,\b\x05\b\x02\x01\x11"},
- {"fmt", "tF'\x19\f \b\r\x02\x03\x13"},
- {"go/ast", "\x03\x01s\x0f\x01s\x03)\b\r\x02\x01\x13\x02"},
- {"go/build", "\x02\x01q\x03\x01\x02\x02\b\x02\x01\x17\x1f\x04\x02\b\x1c\x13\x01+\x01\x04\x01\a\b\x02\x01\x13\x02\x02"},
- {"go/build/constraint", "t\xc9\x01\x01\x13\x02"},
- {"go/constant", "w\x10\x7f\x01\x024\x01\x02\x13"},
- {"go/doc", "\x04s\x01\x05\n=61\x10\x02\x01\x13\x02"},
- {"go/doc/comment", "\x03t\xc4\x01\x01\x01\x01\x13\x02"},
- {"go/format", "\x03t\x01\f\x01\x02sD"},
- {"go/importer", "y\a\x01\x02\x04\x01r9"},
- {"go/internal/gccgoimporter", "\x02\x01^\x13\x03\x04\f\x01p\x02,\x01\x05\x11\x01\r\b"},
- {"go/internal/gcimporter", "\x02u\x10\x010\x05\r0,\x15\x03\x02"},
- {"go/internal/scannerhooks", "\x87\x01"},
- {"go/internal/srcimporter", "w\x01\x01\v\x03\x01r,\x01\x05\x12\x02\x15"},
- {"go/parser", "\x03q\x03\x01\x02\b\x04\x01s\x01+\x06\x12"},
- {"go/printer", "w\x01\x02\x03\ns\f \x15\x02\x01\x02\f\x05\x02"},
- {"go/scanner", "\x03t\v\x05s2\x10\x01\x14\x02"},
- {"go/token", "\x04s\x86\x01>\x02\x03\x01\x10\x02"},
- {"go/types", "\x03\x01\x06j\x03\x01\x03\t\x03\x024\x063\x04\x03\t \x06\a\b\x01\x01\x01\x02\x01\x10\x02\x02"},
- {"go/version", "\xc2\x01|"},
- {"hash", "\xfa\x01"},
- {"hash/adler32", "t\x16\x16"},
- {"hash/crc32", "t\x16\x16\x15\x8b\x01\x01\x14"},
- {"hash/crc64", "t\x16\x16\xa0\x01"},
- {"hash/fnv", "t\x16\x16i"},
- {"hash/maphash", "\x8a\x01\x11<~"},
- {"html", "\xbe\x02\x02\x13"},
- {"html/template", "\x03n\x06\x19-=\x01\n!\x05\x01\x02\x03\f\x01\x02\r\x01\x03\x02"},
- {"image", "\x02r\x1fg\x0f4\x03\x01"},
+ {"encoding/ascii85", "\x85\x02E"},
+ {"encoding/asn1", "\x03{\x03h(\x01)\r\x02\x01\x11\x03\x01"},
+ {"encoding/base32", "\x85\x02C\x02"},
+ {"encoding/base64", "\xa9\x01\\C\x02"},
+ {"encoding/binary", "~\x87\x01\f*\r\x05"},
+ {"encoding/csv", "\x02\x01{\x03\x84\x01F\x13\x02"},
+ {"encoding/gob", "\x02i\x05\x0e\x03h\x1c\v\x01\x03\x1f\b\x12\x01\x10\x02"},
+ {"encoding/hex", "~\x03\x84\x01C\x03"},
+ {"encoding/json", "\x03\x01g\n\x01\x01\x02\x01\x01\x03\x03\x84\x016\x0f\x01"},
+ {"encoding/json/internal", "~"},
+ {"encoding/json/internal/jsonflags", "u"},
+ {"encoding/json/internal/jsonopts", "u\x01"},
+ {"encoding/json/internal/jsontest", "\x03f\x15\x03\x83\x01\x01\x012\b\b\x03\x02\x0f"},
+ {"encoding/json/internal/jsonwire", "\x04r\b\x87\x01\f7\x02\x01\x13\x01\x01"},
+ {"encoding/json/jsontext", "\x03r\x01\x01\x02\x05\x87\x01\x03\t\x034\x02\x01\x02\x13"},
+ {"encoding/json/v2", "\x03\x01g\x03\x01\x01\x03\x02\x01\x01\x02\x01\x04\x03\x84\x01\f\x03'\r\x02\x01\x02\x0f\x02\x02"},
+ {"encoding/pem", "\x03l\x0f\x87\x01C\x03"},
+ {"encoding/xml", "\x02\x01h\x13\x03\x84\x016\x05\n\x01\x02\x11\x02"},
+ {"errors", "\xdb\x01\x87\x01"},
+ {"expvar", "tSB\b\v\x17\r\b\x02\x03\x01\x12"},
+ {"flag", "k\x13\x03\x84\x01.\b\x05\b\x02\x01\x11"},
+ {"fmt", "~E)\x19\f\"\b\r\x02\x03\x13"},
+ {"go/ast", "\x03\x01}\x0e\x01u\x03+\b\r\x02\x01\x13\x02"},
+ {"go/build", "\x02\x01{\x03\x01\x02\x02\a\x02\x01\x17 \x04\x02\t\x1c\x13\x01-\x01\x04\x01\a\b\x02\x01\x13\x02\x02"},
+ {"go/build/constraint", "~\xcc\x01\x01\x13\x02"},
+ {"go/constant", "\x81\x01\x0f\x81\x01\x01\x026\x01\x02\x13"},
+ {"go/doc", "\x04}\x01\x05\t>73\x10\x02\x01\x13\x02"},
+ {"go/doc/comment", "\x03~\xc7\x01\x01\x01\x01\x13\x02"},
+ {"go/format", "\x03~\x01\v\x01\x02uF"},
+ {"go/importer", "\x83\x01\a\x01\x01\x04\x01t;"},
+ {"go/internal/gccgoimporter", "\x02\x01a\x1a\x03\x04\v\x01r\x02.\x01\x05\x11\x01\r\b"},
+ {"go/internal/gcimporter", "\x02\x7f\x0f\x010\x140.\x15\x03\x02"},
+ {"go/internal/srcimporter", "\x81\x01\x01\x01\n\x03\x01t.\x01\x05\x12\x02\x15"},
+ {"go/parser", "\x03{\x03\x01\x02\v\x01u\x01-\x06\x12"},
+ {"go/printer", "\x81\x01\x01\x02\x03\tu\f\"\x15\x02\x01\x02\f\x05\x02"},
+ {"go/scanner", "\x03~\x0fu4\x10\x01\x14\x02"},
+ {"go/token", "\x04}\x87\x01@\x02\x03\x01\x10\x02"},
+ {"go/types", "\x03\x01\x06t\x03\x01\x03\b\x03\x02\x0654\x04\x03\t\"\x06\a\b\x01\x01\x01\x02\x01\x10\x02\x02"},
+ {"go/version", "\xcc\x01\x7f"},
+ {"hash", "\x85\x02"},
+ {"hash/adler32", "~\x15\x16"},
+ {"hash/crc32", "~\x15\x16\x15\x8f\x01\x01\x14"},
+ {"hash/crc64", "~\x15\x16\xa4\x01"},
+ {"hash/fnv", "~\x15\x16k"},
+ {"hash/maphash", "\x93\x01\x11>\x80\x01"},
+ {"html", "\xcb\x02\x02\x13"},
+ {"html/template", "\x03q\r\x18.>\x01\n#\x05\x01\x02\x03\n\x02\x01\x02\r\x01\x03\x02"},
+ {"image", "\x02|\x1ei\x0f6\x03\x01"},
{"image/color", ""},
- {"image/color/palette", "\x93\x01"},
- {"image/draw", "\x92\x01\x01\x04"},
- {"image/gif", "\x02\x01\x05l\x03\x1b\x01\x01\x01\vZ\x0f"},
- {"image/internal/imageutil", "\x92\x01"},
- {"image/jpeg", "\x02r\x1e\x01\x04c"},
- {"image/png", "\x02\ad\n\x13\x02\x06\x01gC"},
- {"index/suffixarray", "\x03j\a\x86\x01\f+\n\x01"},
- {"internal/abi", "\xbc\x01\x99\x01"},
- {"internal/asan", "\xd5\x02"},
- {"internal/bisect", "\xb3\x02\r\x01"},
- {"internal/buildcfg", "wHg\x06\x02\x05\n\x01"},
- {"internal/bytealg", "\xb5\x01\xa0\x01"},
+ {"image/color/palette", "\x9c\x01"},
+ {"image/draw", "\x9b\x01\x01\x04"},
+ {"image/gif", "\x02\x01\x05v\x03\x1a\x01\x01\x01\v\\\x0f"},
+ {"image/internal/imageutil", "\x9b\x01"},
+ {"image/jpeg", "\x02|\x1d\x01\x04e"},
+ {"image/png", "\x02\ag\x11\x12\x02\x06\x01iE"},
+ {"index/suffixarray", "\x03m\x0e\x87\x01\f-\n\x01"},
+ {"internal/abi", "\xc6\x01\x9c\x01"},
+ {"internal/asan", "\xe2\x02"},
+ {"internal/bisect", "\xc0\x02\r\x01"},
+ {"internal/buildcfg", "\x81\x01Hj\x06\x02\x05\n\x01"},
+ {"internal/bytealg", "\xbe\x01\xa4\x01"},
{"internal/byteorder", ""},
{"internal/cfg", ""},
- {"internal/cgrouptest", "w[T\x06\x0f\x02\x01\x04\x01"},
- {"internal/chacha8rand", "\xa0\x01\x15\a\x99\x01"},
+ {"internal/cgrouptest", "\x81\x01\\V\x06\x0f\x02\x01\x04\x01"},
+ {"internal/chacha8rand", "\xa9\x01\x15\b\x9c\x01"},
{"internal/copyright", ""},
{"internal/coverage", ""},
{"internal/coverage/calloc", ""},
- {"internal/coverage/cfile", "q\x06\x17\x17\x01\x02\x01\x01\x01\x01\x01\x01\x01\"\x02',\x06\a\n\x01\x03\x0e\x06"},
- {"internal/coverage/cformat", "\x04s.\x04Q\v6\x01\x02\x0e"},
- {"internal/coverage/cmerge", "w.a"},
- {"internal/coverage/decodecounter", "m\n.\v\x02H,\x17\x18"},
- {"internal/coverage/decodemeta", "\x02k\n\x17\x17\v\x02H,"},
- {"internal/coverage/encodecounter", "\x02k\n.\f\x01\x02F\v!\x15"},
- {"internal/coverage/encodemeta", "\x02\x01j\n\x13\x04\x17\r\x02F,/"},
- {"internal/coverage/pods", "\x04s.\x81\x01\x06\x05\n\x02\x01"},
- {"internal/coverage/rtcov", "\xd5\x02"},
- {"internal/coverage/slicereader", "m\n\x83\x01["},
- {"internal/coverage/slicewriter", "w\x83\x01"},
- {"internal/coverage/stringtab", "w9\x04F"},
+ {"internal/coverage/cfile", "t\r\x16\x17\x01\x02\x01\x01\x01\x01\x01\x01\x01$\x02'.\x06\a\n\x01\x03\x0e\x06"},
+ {"internal/coverage/cformat", "\x04}-\x04S\v8\x01\x02\x0e"},
+ {"internal/coverage/cmerge", "\x81\x01-c"},
+ {"internal/coverage/decodecounter", "p\x11-\v\x02J.\x17\x18"},
+ {"internal/coverage/decodemeta", "\x02n\x11\x16\x17\v\x02J."},
+ {"internal/coverage/encodecounter", "\x02n\x11-\f\x01\x02H\v#\x15"},
+ {"internal/coverage/encodemeta", "\x02\x01m\x11\x12\x04\x17\r\x02H./"},
+ {"internal/coverage/pods", "\x04}-\x85\x01\x06\x05\n\x02\x01"},
+ {"internal/coverage/rtcov", "\xe2\x02"},
+ {"internal/coverage/slicereader", "p\x11\x84\x01]"},
+ {"internal/coverage/slicewriter", "\x81\x01\x84\x01"},
+ {"internal/coverage/stringtab", "\x81\x018\x04H"},
{"internal/coverage/test", ""},
{"internal/coverage/uleb128", ""},
- {"internal/cpu", "\xd5\x02"},
- {"internal/dag", "\x04s\xc4\x01\x03"},
- {"internal/diff", "\x03t\xc5\x01\x02"},
- {"internal/exportdata", "\x02\x01q\x03\x02e\x1c,\x01\x05\x11\x01\x02"},
- {"internal/filepathlite", "t+B\x1a@"},
- {"internal/fmtsort", "\x04\xaa\x02\r"},
- {"internal/fuzz", "\x03\nH\x18\x04\x03\x03\x01\f\x036=\f\x03\x1d\x01\x05\x02\x05\n\x01\x02\x01\x01\r\x04\x02"},
+ {"internal/cpu", "\xe2\x02"},
+ {"internal/dag", "\x04}\xc7\x01\x03"},
+ {"internal/diff", "\x03~\xc8\x01\x02"},
+ {"internal/exportdata", "\x02\x01{\x03\x02f\x1c.\x01\x05\x11\x01\x02"},
+ {"internal/filepathlite", "~*D\x1aB"},
+ {"internal/fmtsort", "\x04\xb7\x02\r"},
+ {"internal/fuzz", "\x03\nJ\x19\x04\n\x03\x01\v\x037>\f\x03\x1f\x01\x05\x02\x05\n\x01\x02\x01\x01\r\x04\x02"},
+ {"internal/gate", "\r"},
{"internal/goarch", ""},
- {"internal/godebug", "\x9d\x01!\x82\x01\x01\x14"},
+ {"internal/godebug", "\xa6\x01\"\x85\x01\x01\x14"},
{"internal/godebugs", ""},
{"internal/goexperiment", ""},
{"internal/goos", ""},
- {"internal/goroot", "\xa6\x02\x01\x05\x12\x02"},
+ {"internal/goroot", "\xb3\x02\x01\x05\x12\x02"},
{"internal/gover", "\x04"},
{"internal/goversion", ""},
- {"internal/lazyregexp", "\xa6\x02\v\r\x02"},
- {"internal/lazytemplate", "\xfa\x01,\x18\x02\r"},
- {"internal/msan", "\xd5\x02"},
+ {"internal/lazyregexp", "\xb3\x02\v\r\x02"},
+ {"internal/lazytemplate", "\x85\x02.\x18\x02\r"},
+ {"internal/msan", "\xe2\x02"},
+ {"internal/nettest", "\x03\nqG@\f\n\x12\x06\x15\x05\x0f"},
{"internal/nettrace", ""},
- {"internal/obscuretestdata", "l\x8e\x01,"},
- {"internal/oserror", "t"},
- {"internal/pkgbits", "\x03R\x18\a\x03\x04\fs\r\x1f\r\n\x01"},
+ {"internal/obscuretestdata", "o\x96\x01."},
+ {"internal/oserror", "~"},
+ {"internal/pkgbits", "\x03T\x19\x0e\x03\x04\vu\r!\r\n\x01"},
{"internal/platform", ""},
- {"internal/poll", "tl\x05\x159\r\x01\x01\r\x06"},
- {"internal/profile", "\x03\x04m\x03\x83\x017\n\x01\x01\x01\x11"},
+ {"internal/poll", "~m\x05\x15;\r\x01\x01\r\x06"},
+ {"internal/profile", "\x03\x04w\x03\x84\x019\n\x01\x01\x01\x11"},
{"internal/profilerecord", ""},
- {"internal/race", "\x9b\x01\xba\x01"},
- {"internal/reflectlite", "\x9b\x01!;<\""},
- {"internal/runtime/atomic", "\xbc\x01\x99\x01"},
- {"internal/runtime/cgroup", "\x9f\x01=\x04u"},
- {"internal/runtime/exithook", "\xd1\x01\x84\x01"},
- {"internal/runtime/gc", "\xbc\x01"},
- {"internal/runtime/gc/internal/gen", "\nc\n\x18k\x04\v\x1d\b\x10\x02"},
- {"internal/runtime/gc/scan", "\xb5\x01\a\x18\az"},
- {"internal/runtime/maps", "\x9b\x01\x01 \n\t\t\x03z"},
- {"internal/runtime/math", "\xbc\x01"},
+ {"internal/race", "\xa4\x01\xbe\x01"},
+ {"internal/reflectlite", "\xa4\x01\"<>\""},
+ {"internal/runtime/atomic", "\xc6\x01\x9c\x01"},
+ {"internal/runtime/cgroup", "\xa8\x01?\x04w"},
+ {"internal/runtime/exithook", "\xdc\x01\x86\x01"},
+ {"internal/runtime/gc", "\xc6\x01"},
+ {"internal/runtime/gc/internal/gen", "\nf\x11\x17m\x04\v\x1f\b\x10\x02"},
+ {"internal/runtime/gc/scan", "\xbe\x01\b\x19\a|"},
+ {"internal/runtime/maps", "\xa4\x01\x01\x04\x15\b\x03\a\n\t\x03.N"},
+ {"internal/runtime/math", "\xc6\x01"},
{"internal/runtime/pprof/label", ""},
{"internal/runtime/startlinetest", ""},
- {"internal/runtime/sys", "\xbc\x01\x04"},
- {"internal/runtime/syscall/linux", "\xbc\x01\x99\x01"},
+ {"internal/runtime/sys", "\xc6\x01\x04"},
+ {"internal/runtime/syscall/linux", "\xc6\x01\x9c\x01"},
{"internal/runtime/wasitest", ""},
- {"internal/saferio", "\xfa\x01["},
- {"internal/singleflight", "\xc0\x02"},
- {"internal/strconv", "\x89\x02L"},
- {"internal/stringslite", "\x9f\x01\xb6\x01"},
- {"internal/sync", "\x9b\x01!\x13r\x14"},
- {"internal/synctest", "\x9b\x01\xba\x01"},
- {"internal/syscall/execenv", "\xc2\x02"},
- {"internal/syscall/unix", "\xb3\x02\x0e\x01\x13"},
- {"internal/sysinfo", "\x02\x01\xb2\x01E,\x18\x02"},
+ {"internal/saferio", "\x85\x02]"},
+ {"internal/singleflight", "\xcd\x02"},
+ {"internal/strconv", "\x94\x02N"},
+ {"internal/stringslite", "\xa8\x01\xba\x01"},
+ {"internal/sync", "\xa4\x01\"\x14t\x14"},
+ {"internal/synctest", "\xa4\x01\xbe\x01"},
+ {"internal/syscall/execenv", "\xcf\x02"},
+ {"internal/syscall/unix", "\xeb\x01U\x0e\x01\x13"},
+ {"internal/sysinfo", "\x02\x01\xbb\x01G.\x18\x02"},
{"internal/syslist", ""},
- {"internal/testenv", "\x03\ng\x02\x01*\x1b\x0f0+\x01\x05\a\n\x01\x02\x02\x01\f"},
- {"internal/testhash", "\x03\x87\x01p\x118\f"},
- {"internal/testlog", "\xc0\x02\x01\x14"},
- {"internal/testpty", "t\x03\xaf\x01"},
- {"internal/trace", "\x02\x01\x01\x06c\a\x03w\x03\x03\x06\x03\t+\n\x01\x01\x01\x11\x06"},
- {"internal/trace/internal/testgen", "\x03j\nu\x03\x02\x03\x011\v\r\x11"},
- {"internal/trace/internal/tracev1", "\x03\x01i\a\x03}\x06\f5\x01"},
- {"internal/trace/raw", "\x02k\nz\x03\x06C\x01\x13"},
- {"internal/trace/testtrace", "\x02\x01q\x03q\x04\x03\x05\x01\x05,\v\x02\b\x02\x01\x05"},
+ {"internal/testenv", "\x03\nq\x02\x01)\x1c\x100-\x01\x05\a\n\x01\x02\x02\x01\f"},
+ {"internal/testhash", "\x03\x90\x01r\x11:\f"},
+ {"internal/testlog", "\xcd\x02\x01\x14"},
+ {"internal/testpty", "~\x03\xb2\x01"},
+ {"internal/trace", "\x02\x01\x01\x06f\x0e\x03x\x03\x03\x06\x03\t-\n\x01\x01\x01\x11\x06"},
+ {"internal/trace/internal/testgen", "\x03m\x11v\x03\x02\x03\x013\v\r\x11"},
+ {"internal/trace/internal/tracev1", "\x03\x01l\x0e\x03~\x06\f7\x01"},
+ {"internal/trace/raw", "\x02n\x11{\x03\x06E\x01\x13"},
+ {"internal/trace/testtrace", "\x02\x01{\x03r\x04\x03\x05\x01\x05.\v\x02\b\x02\x01\x05"},
{"internal/trace/tracev2", ""},
- {"internal/trace/traceviewer", "\x02d\v\x06\x1a<\x1f\a\a\x04\b\v\x15\x01\x05\a\n\x01\x02\x0f"},
+ {"internal/trace/traceviewer", "\x02g\v\r\x19>\x1f\a\a\x04\b\v\x17\x01\x05\a\n\x01\x02\x0f"},
{"internal/trace/traceviewer/format", ""},
- {"internal/trace/version", "wz\t"},
- {"internal/txtar", "\x03t\xaf\x01\x18"},
- {"internal/types/errors", "\xbd\x02"},
- {"internal/unsafeheader", "\xd5\x02"},
- {"internal/xcoff", "`\r\a\x03g\x1c,\x17\x01"},
- {"internal/zstd", "m\a\x03\x83\x01\x0f"},
- {"io", "t\xcc\x01"},
- {"io/fs", "t+*11\x10\x14\x04"},
- {"io/ioutil", "\xfa\x01\x01+\x15\x03"},
- {"iter", "\xcf\x01d\""},
- {"log", "w\x83\x01\x05'\r\r\x01\x0e"},
+ {"internal/trace/version", "\x81\x01{\t"},
+ {"internal/txtar", "\x03~\xb2\x01\x18"},
+ {"internal/types/errors", "\xca\x02"},
+ {"internal/unsafeheader", "\xe2\x02"},
+ {"internal/xcoff", "c\r\x0e\x03h\x1c.\x17\x01"},
+ {"internal/zstd", "p\x0e\x03\x84\x01\x0f"},
+ {"io", "~\xcf\x01"},
+ {"io/fs", "~*,13\x10\x14\x04"},
+ {"io/ioutil", "\x85\x02\x01-\x15\x03"},
+ {"iter", "\xda\x01f\""},
+ {"log", "\x81\x01\x84\x01\x05)\r\r\x01\x0e"},
{"log/internal", ""},
- {"log/slog", "\x03\n[\t\x03\x03\x83\x01\x04\x01\x02\x02\x03(\x05\b\x02\x01\x02\x01\x0e\x02\x02\x02"},
+ {"log/slog", "\x03\n^\t\n\x03H<\x04\x01\x02\x02\x03*\x05\b\x02\x01\x02\x01\x0e\x02\x02\x02"},
{"log/slog/internal", ""},
- {"log/slog/internal/benchmarks", "\rg\x03\x83\x01\x06\x03:\x12"},
- {"log/slog/internal/buffer", "\xc0\x02"},
- {"log/syslog", "t\x03\x87\x01\x12\x16\x18\x02\x0f"},
- {"maps", "\xfd\x01X"},
- {"math", "\xb5\x01TL"},
- {"math/big", "\x03q\x03)\x15E\f\x03\x020\x02\x01\x02\x15"},
- {"math/big/internal/asmgen", "\x03\x01s\x92\x012\x03"},
- {"math/bits", "\xd5\x02"},
- {"math/cmplx", "\x86\x02\x03"},
- {"math/rand", "\xbd\x01I:\x01\x14"},
- {"math/rand/v2", "t,\x03c\x03L"},
- {"mime", "\x02\x01i\b\x03\x83\x01\v!\x15\x03\x02\x11\x02"},
- {"mime/multipart", "\x02\x01N#\x03F=\v\x01\a\x02\x15\x02\x06\x0f\x02\x01\x17"},
- {"mime/quotedprintable", "\x02\x01t\x83\x01"},
- {"net", "\x04\tg+\x1e\n\x05\x13\x01\x01\x04\x15\x01%\x06\r\b\x05\x01\x01\r\x06\a"},
- {"net/http", "\x02\x01\x03\x01\x04\x02D\b\x13\x01\a\x03F=\x01\x03\a\x01\x03\x02\x02\x01\x02\x06\x02\x01\x01\n\x01\x01\x05\x01\x02\x05\b\x01\x01\x01\x02\x01\x0e\x02\x02\x02\b\x01\x01\x01"},
- {"net/http/cgi", "\x02W\x1b\x03\x83\x01\x04\a\v\x01\x13\x01\x01\x01\x04\x01\x05\x02\b\x02\x01\x11\x0e"},
- {"net/http/cookiejar", "\x04p\x03\x99\x01\x01\b\a\x05\x16\x03\x02\x0f\x04"},
- {"net/http/fcgi", "\x02\x01\n`\a\x03\x83\x01\x16\x01\x01\x14\x18\x02\x0f"},
- {"net/http/httptest", "\x02\x01\nL\x02\x1b\x01\x83\x01\x04\x12\x01\n\t\x02\x17\x01\x02\x0f\x0e"},
- {"net/http/httptrace", "\rLnI\x14\n!"},
- {"net/http/httputil", "\x02\x01\ng\x03\x83\x01\x04\x0f\x03\x01\x05\x02\x01\v\x01\x19\x02\x01\x0e\x0e"},
- {"net/http/internal", "\x02\x01q\x03\x83\x01"},
- {"net/http/internal/ascii", "\xbe\x02\x13"},
- {"net/http/internal/httpcommon", "\rg\x03\x9f\x01\x0e\x01\x17\x01\x01\x02\x1d\x02"},
- {"net/http/internal/testcert", "\xbe\x02"},
- {"net/http/pprof", "\x02\x01\nj\x19-\x02\x0e-\x04\x13\x14\x01\r\x04\x03\x01\x02\x01\x11"},
+ {"log/slog/internal/benchmarks", "\rq\x03\x84\x01\x06\x03<\x12"},
+ {"log/slog/internal/buffer", "\xcd\x02"},
+ {"log/syslog", "~\x03\x88\x01\x12\x18\x18\x02\x0f"},
+ {"maps", "\x88\x02Z"},
+ {"math", "\xbe\x01VN"},
+ {"math/big", "\x03{\x03(\x15G\f\x03\x022\x02\x01\x02\x15"},
+ {"math/big/internal/asmgen", "\x03\x01}\x93\x014\x03"},
+ {"math/bits", "\xe2\x02"},
+ {"math/cmplx", "\x91\x02\x03"},
+ {"math/rand", "\xc7\x01J<\x01\x14"},
+ {"math/rand/v2", "~+\x03e\x03N"},
+ {"mime", "\x02\x01l\x0f\x03\x84\x01\v#\x15\x03\x02\x11\x02"},
+ {"mime/multipart", "\x02\x01P+\x03F>\v\x01\a\x02\x17\x02\x06\x0f\x02\x01\x17"},
+ {"mime/quotedprintable", "\x02\x01~\x84\x01"},
+ {"net", "\x04\tq*\x1f\v\x05\x13\x01\x01\x04\x15\x01'\x06\r\b\x05\x01\x01\r\x06\t"},
+ {"net/http", "\x02\x01\x03\x01\x04\x02N\x14\x0f\x03F>\x01\x03\a\x01\x06\x01\x01\x02\x06\x02\x01\x01\f\x01\x01\x05\x01\x02\x05\b\x01\x01\x01\x02\x01\x0e\x02\x02\x02\n\x01\x03"},
+ {"net/http/cgi", "\x02Y#\x03\x84\x01\x04\a\v\x01\x15\x01\x01\x01\x04\x01\x05\x02\b\x02\x01\x11\x10"},
+ {"net/http/cookiejar", "\x04z\x03\x9a\x01\x01\b\t\x05\x16\x03\x02\x0f\x04"},
+ {"net/http/fcgi", "\x02\x01\nc\x0e\x03\x84\x01\x16\x01\x01\x16\x18\x02\x0f"},
+ {"net/http/httptest", "\x02\x01\nN\x02#\x01P4\x04\x12\x01\f\t\x02\r\n\x01\x02\x03\f\x06\n"},
+ {"net/http/httptrace", "\rNwI\x16+"},
+ {"net/http/httputil", "\x02\x01\nq\x03F>\x04\x0f\x03\x01\x05\x02\x01\r\x01\x19\x02\x01\x0e\x10"},
+ {"net/http/internal", "\x02\x01m\x0e\x03\x84\x01"},
+ {"net/http/internal/ascii", "\xcb\x02\x13"},
+ {"net/http/internal/http2", "\x02\x01\x03\x01\x06F\b\x15\x0e\x03\x84\x01\x01\x03\b\x03\x02\x03\x02\x06\x02\x03\x01\n\x01\x01\b\x05\b\x02\x01\x02\x01\x0e\x10\x02\x02"},
+ {"net/http/internal/httpcommon", "\rq\x03\xa0\x01\x10\x01\x17\x01\x01\x02\x1f\x02"},
+ {"net/http/internal/httpsfv", "\xc8\x02\x02\x01\x11\x04"},
+ {"net/http/internal/testcert", "\xcb\x02"},
+ {"net/http/pprof", "\x02\x01\nt\x18.\x11-\x04\x13\x16\x01\r\x04\x03\x01\x02\x01\x11"},
{"net/internal/cgotest", ""},
- {"net/internal/socktest", "w\xc9\x01\x02"},
- {"net/mail", "\x02r\x03\x83\x01\x04\x0f\x03\x14\x1a\x02\x0f\x04"},
- {"net/netip", "\x04p+\x01f\x034\x17"},
- {"net/rpc", "\x02m\x05\x03\x10\ni\x04\x12\x01\x1d\r\x03\x02"},
- {"net/rpc/jsonrpc", "q\x03\x03\x83\x01\x16\x11\x1f"},
- {"net/smtp", "\x194\f\x13\b\x03\x83\x01\x16\x14\x1a"},
- {"net/textproto", "\x02\x01q\x03\x83\x01\f\n-\x01\x02\x15"},
- {"net/url", "t\x03Fc\v\x10\x02\x01\x17"},
- {"os", "t+\x01\x19\x03\x10\x14\x01\x03\x01\x05\x10\x018\b\x05\x01\x01\r\x06"},
- {"os/exec", "\x03\ngI'\x01\x15\x01+\x06\a\n\x01\x03\x01\r"},
- {"os/exec/internal/fdtest", "\xc2\x02"},
- {"os/signal", "\r\x99\x02\x15\x05\x02"},
- {"os/user", "\x02\x01q\x03\x83\x01,\r\n\x01\x02"},
- {"path", "t+\xb4\x01"},
- {"path/filepath", "t+\x1aB+\r\b\x03\x04\x11"},
- {"plugin", "t"},
- {"reflect", "t'\x04\x1d\x13\b\x04\x05\x17\x06\t-\n\x03\x11\x02\x02"},
+ {"net/internal/socktest", "\x81\x01\xcc\x01\x02"},
+ {"net/mail", "\x02|\x03\x84\x01\x04\x0f\x03\x16\x1a\x02\x0f\x04"},
+ {"net/netip", "\x04z*\x01h\x036\x17"},
+ {"net/rpc", "\x02p\f\x03\x0f\nk\x04\x12\x01\x1f\r\x03\x02"},
+ {"net/rpc/jsonrpc", "t\n\x03\x84\x01\x16\x13\x1f"},
+ {"net/smtp", "\x195\r\x14\x0f\x03\x84\x01\x16\x16\x1a"},
+ {"net/textproto", "\x02\x01{\x03\x84\x01\f\n/\x01\x02\x15"},
+ {"net/url", "~\x03Ff\v\x10\x02\x01\x17"},
+ {"os", "~*\x01\x19\x04\x11\x14\x01\x03\x01\x05\x10\x01:\b\x05\x01\x01\r\x06"},
+ {"os/exec", "\x03\nqI(\x01\x15\x01-\x06\a\n\x01\x03\x01\r"},
+ {"os/exec/internal/fdtest", "\xcf\x02"},
+ {"os/signal", "\r\xa6\x02\x15\x05\x02"},
+ {"os/user", "\x02\x01{\x03\x84\x01.\r\n\x01\x02"},
+ {"path", "~*\xb8\x01"},
+ {"path/filepath", "~*\x1aD-\r\b\x03\x04\x11"},
+ {"plugin", "~"},
+ {"reflect", "~&\x04\x1e\x03\x11\b\x04\x05\x17\x06\t/\n\x03\x11\x02\x02"},
{"reflect/internal/example1", ""},
{"reflect/internal/example2", ""},
- {"regexp", "\x03\xf7\x018\t\x02\x01\x02\x11\x02"},
- {"regexp/syntax", "\xbb\x02\x01\x01\x01\x02\x11\x02"},
- {"runtime", "\x9b\x01\x04\x01\x03\f\x06\a\x02\x01\x01\x0e\x03\x01\x01\x01\x02\x01\x01\x01\x02\x01\x04\x01\x10\x18L"},
- {"runtime/coverage", "\xa7\x01S"},
- {"runtime/debug", "wUZ\r\b\x02\x01\x11\x06"},
- {"runtime/metrics", "\xbe\x01H-\""},
- {"runtime/pprof", "\x02\x01\x01\x03\x06`\a\x03$$\x0f\v!\f \r\b\x01\x01\x01\x02\x02\n\x03\x06"},
- {"runtime/race", "\xb9\x02"},
+ {"regexp", "\x03\x82\x02\x037\t\x02\x01\x02\x11\x02"},
+ {"regexp/syntax", "\xc8\x02\x01\x01\x01\x02\x11\x02"},
+ {"runtime", "\xa4\x01\x04\x01\x03\f\x06\b\x02\x01\x01\x0f\x03\x01\x01\x01\x02\x01\x01\x01\x02\x01\x04\x01\x10\x18N"},
+ {"runtime/coverage", "\xb0\x01U"},
+ {"runtime/debug", "\x81\x01V\\\r\b\x02\x01\x11\x06"},
+ {"runtime/metrics", "\xc8\x01I/\""},
+ {"runtime/pprof", "\x02\x01\x01\x03\x06c\x0e\x03#5\v!\f\"\r\b\x01\x01\x01\x02\x02\n\x03\x06"},
+ {"runtime/race", "\xc6\x02"},
{"runtime/race/internal/amd64v1", ""},
- {"runtime/trace", "\rg\x03z\t9\b\x05\x01\x0e\x06"},
- {"slices", "\x04\xf9\x01\fL"},
- {"sort", "\xd0\x0192"},
- {"strconv", "t+A\x01r"},
- {"strings", "t'\x04B\x19\x03\f7\x11\x02\x02"},
+ {"runtime/trace", "\rq\x03{\t;\b\x05\x01\x0e\x06"},
+ {"slices", "\x04\x84\x02\fN"},
+ {"sort", "\xdb\x0194"},
+ {"strconv", "~*C\x01t"},
+ {"strings", "~&\x04D\x19\x03\f9\x11\x02\x02"},
{"structs", ""},
- {"sync", "\xcf\x01\x13\x01P\x0e\x14"},
- {"sync/atomic", "\xd5\x02"},
- {"syscall", "t(\x03\x01\x1c\n\x03\x06\r\x04S\b\x05\x01\x14"},
- {"testing", "\x03\ng\x02\x01X\x17\x14\f\x05\x1b\x06\x02\x05\x02\x05\x01\x02\x01\x02\x01\x0e\x02\x04"},
- {"testing/cryptotest", "QOZ\x124\x03\x12"},
- {"testing/fstest", "t\x03\x83\x01\x01\n&\x10\x03\t\b"},
- {"testing/internal/testdeps", "\x02\v\xae\x01/\x10,\x03\x05\x03\x06\a\x02\x0f"},
- {"testing/iotest", "\x03q\x03\x83\x01\x04"},
- {"testing/quick", "v\x01\x8f\x01\x05#\x10\x11"},
- {"testing/slogtest", "\rg\x03\x89\x01.\x05\x10\f"},
- {"testing/synctest", "\xe3\x01`\x12"},
- {"text/scanner", "\x03t\x83\x01,+\x02"},
- {"text/tabwriter", "w\x83\x01Y"},
- {"text/template", "t\x03C@\x01\n \x01\x05\x01\x02\x05\v\x02\x0e\x03\x02"},
- {"text/template/parse", "\x03t\xbc\x01\n\x01\x13\x02"},
- {"time", "t+\x1e$(*\r\x02\x13"},
- {"time/tzdata", "t\xce\x01\x13"},
+ {"sync", "\xda\x01\x02\x11\x01R\x0e\x14"},
+ {"sync/atomic", "\xe2\x02"},
+ {"syscall", "~'\x03\x01\x1d\n\x04\x06\r\x04U\b\x05\x01\x14"},
+ {"testing", "\x03\nq\x02\x01Y\x17\x14\f\x05\x1d\x06\x02\x05\x02\x05\x01\x02\x01\x02\x01\x0e\x02\x04"},
+ {"testing/cryptotest", "SV\\\x126\x03\x12"},
+ {"testing/fstest", "~\x03\x84\x01\x01\n(\x10\x03\t\b"},
+ {"testing/internal/testdeps", "\x02\v\xb7\x011\x10.\x03\x05\x03\x06\a\x02\x0f"},
+ {"testing/iotest", "\x03{\x03\x84\x01\x04"},
+ {"testing/quick", "\x80\x01\x01\x90\x01\x05%\x10\x11"},
+ {"testing/slogtest", "\rq\x03\x8a\x010\x05\x10\f"},
+ {"testing/synctest", "\xee\x01b\f\x06"},
+ {"text/scanner", "\x03~\x84\x01.+\x02"},
+ {"text/tabwriter", "\x81\x01\x84\x01["},
+ {"text/template", "~\x03BB\x01\n\"\x01\x05\x01\x02\x05\v\x02\x0e\x03\x02"},
+ {"text/template/parse", "\x03~\xbf\x01\n\x01\x13\x02"},
+ {"time", "~*D(,\r\x02\x13"},
+ {"time/tzdata", "~\xd1\x01\x13"},
{"unicode", ""},
{"unicode/utf16", ""},
{"unicode/utf8", ""},
- {"unique", "\x9b\x01!%\x01Q\r\x01\x14\x12"},
+ {"unique", "\xa4\x01\"&\x01S\r\x01\x14\x19"},
{"unsafe", ""},
- {"vendor/golang.org/x/crypto/chacha20", "\x10]\a\x95\x01*'"},
- {"vendor/golang.org/x/crypto/chacha20poly1305", "\x10\aV\a\xe2\x01\x04\x01\a"},
- {"vendor/golang.org/x/crypto/cryptobyte", "j\n\x03\x90\x01'!\n"},
+ {"uuid", "\x03\x01O\x1d\x03\v\xcf\x01\x0f"},
+ {"vendor/golang.org/x/crypto/chacha20", "\x10`\x0e\x96\x01,)"},
+ {"vendor/golang.org/x/crypto/chacha20poly1305", "\x10\aY\x0e\xe6\x01\x05\x01\f"},
+ {"vendor/golang.org/x/crypto/cryptobyte", "m\x11\x03\x91\x01)!\v"},
{"vendor/golang.org/x/crypto/cryptobyte/asn1", ""},
- {"vendor/golang.org/x/crypto/internal/alias", "\xd5\x02"},
- {"vendor/golang.org/x/crypto/internal/poly1305", "X\x15\x9c\x01"},
- {"vendor/golang.org/x/net/dns/dnsmessage", "t\xc7\x01"},
- {"vendor/golang.org/x/net/http/httpguts", "\x90\x02\x14\x1a\x15\r"},
- {"vendor/golang.org/x/net/http/httpproxy", "t\x03\x99\x01\x10\x05\x01\x18\x15\r"},
- {"vendor/golang.org/x/net/http2/hpack", "\x03q\x03\x83\x01F"},
- {"vendor/golang.org/x/net/idna", "w\x8f\x018\x15\x10\x02\x01"},
- {"vendor/golang.org/x/net/nettest", "\x03j\a\x03\x83\x01\x11\x05\x16\x01\f\n\x01\x02\x02\x01\f"},
- {"vendor/golang.org/x/sys/cpu", "\xa6\x02\r\n\x01\x17"},
- {"vendor/golang.org/x/text/secure/bidirule", "t\xdf\x01\x11\x01"},
- {"vendor/golang.org/x/text/transform", "\x03q\x86\x01Y"},
- {"vendor/golang.org/x/text/unicode/bidi", "\x03\bl\x87\x01>\x17"},
- {"vendor/golang.org/x/text/unicode/norm", "m\n\x83\x01F\x13\x11"},
- {"weak", "\x9b\x01\x98\x01\""},
+ {"vendor/golang.org/x/crypto/hkdf", "\x18\x01e\x15r"},
+ {"vendor/golang.org/x/crypto/internal/alias", "\xe2\x02"},
+ {"vendor/golang.org/x/crypto/internal/poly1305", "Z\x16\xa4\x01"},
+ {"vendor/golang.org/x/net/dns/dnsmessage", "~\xca\x01"},
+ {"vendor/golang.org/x/net/http/httpguts", "\x9b\x02\x16\x1a\x15\x10"},
+ {"vendor/golang.org/x/net/http/httpproxy", "~\x03\x9a\x01\x12\x05\x01\x18\x15\x10"},
+ {"vendor/golang.org/x/net/http2/hpack", "\x03{\x03\x84\x01H"},
+ {"vendor/golang.org/x/net/http3", "\x9c\x02@\x06\x0f\x04"},
+ {"vendor/golang.org/x/net/idna", "\x81\x01\x90\x01:\x13\x02\x17\x02\x01"},
+ {"vendor/golang.org/x/net/internal/http3", "\rN#\x03\x84\x01\v\x04\a\x01\x05\x10\x01\x16\x02\x01\x02\x0f\x10\x02\x04\x03"},
+ {"vendor/golang.org/x/net/internal/httpcommon", "\rq\x03\xa0\x01\x10\x01\x17\x01\x01\x02\x1f\x02"},
+ {"vendor/golang.org/x/net/internal/quic/quicwire", "p"},
+ {"vendor/golang.org/x/net/nettest", "\x03m\x0e\x03\x84\x01\x11\x05\x18\x01\f\n\x01\x02\x02\x01\f"},
+ {"vendor/golang.org/x/net/quic", "\x03\n\x01\x01\x01\t:\x04\x04\x15\x03\v\x03\x12r\x06\x06\x06\x04\x12\x06\x15\x02\x01\x02\x01\x01\r\x06\x02\x01\x01\x02\v"},
+ {"vendor/golang.org/x/sys/cpu", "\xb3\x02\r\n\x01\x17"},
+ {"vendor/golang.org/x/text/secure/bidirule", "~\xe2\x01\x18\x01"},
+ {"vendor/golang.org/x/text/transform", "\x03{\x87\x01["},
+ {"vendor/golang.org/x/text/unicode/bidi", "\x03\bv\x88\x01@\x17"},
+ {"vendor/golang.org/x/text/unicode/norm", "p\x11\x84\x01H\x13\x18"},
+ {"weak", "\xa4\x01\x9c\x01\""},
}
// bootstrap is the list of bootstrap packages extracted from cmd/dist.
@@ -408,6 +428,7 @@ var bootstrap = map[string]bool{
"cmd/compile/internal/logopt": true,
"cmd/compile/internal/loong64": true,
"cmd/compile/internal/loopvar": true,
+ "cmd/compile/internal/midway": true,
"cmd/compile/internal/mips": true,
"cmd/compile/internal/mips64": true,
"cmd/compile/internal/noder": true,
@@ -512,6 +533,7 @@ var bootstrap = map[string]bool{
"internal/race": true,
"internal/runtime/gc": true,
"internal/saferio": true,
+ "internal/strconv": true,
"internal/syscall/unix": true,
"internal/types/errors": true,
"internal/unsafeheader": true,
diff --git a/vendor/golang.org/x/tools/internal/stdlib/manifest.go b/vendor/golang.org/x/tools/internal/stdlib/manifest.go
index 33e4f505f..2180c296e 100644
--- a/vendor/golang.org/x/tools/internal/stdlib/manifest.go
+++ b/vendor/golang.org/x/tools/internal/stdlib/manifest.go
@@ -270,6 +270,7 @@ var PackageSymbols = map[string][]Symbol{
{"ContainsRune", Func, 7, "func(b []byte, r rune) bool"},
{"Count", Func, 0, "func(s []byte, sep []byte) int"},
{"Cut", Func, 18, "func(s []byte, sep []byte) (before []byte, after []byte, found bool)"},
+ {"CutLast", Func, 27, "func(s []byte, sep []byte) (before []byte, after []byte, found bool)"},
{"CutPrefix", Func, 20, "func(s []byte, prefix []byte) (after []byte, found bool)"},
{"CutSuffix", Func, 20, "func(s []byte, suffix []byte) (before []byte, found bool)"},
{"Equal", Func, 0, "func(a []byte, b []byte) bool"},
@@ -538,6 +539,7 @@ var PackageSymbols = map[string][]Symbol{
{"MD4", Const, 0, ""},
{"MD5", Const, 0, ""},
{"MD5SHA1", Const, 0, ""},
+ {"MLDSAMu", Const, 27, ""},
{"MessageSigner", Type, 25, ""},
{"PrivateKey", Type, 0, ""},
{"PublicKey", Type, 2, ""},
@@ -812,6 +814,40 @@ var PackageSymbols = map[string][]Symbol{
{"Size", Const, 0, ""},
{"Sum", Func, 2, "func(data []byte) [16]byte"},
},
+ "crypto/mldsa": {
+ {"(*Options).HashFunc", Method, 27, ""},
+ {"(*PrivateKey).Bytes", Method, 27, ""},
+ {"(*PrivateKey).Equal", Method, 27, ""},
+ {"(*PrivateKey).Public", Method, 27, ""},
+ {"(*PrivateKey).PublicKey", Method, 27, ""},
+ {"(*PrivateKey).Sign", Method, 27, ""},
+ {"(*PrivateKey).SignDeterministic", Method, 27, ""},
+ {"(*PublicKey).Bytes", Method, 27, ""},
+ {"(*PublicKey).Equal", Method, 27, ""},
+ {"(*PublicKey).Parameters", Method, 27, ""},
+ {"(Parameters).PublicKeySize", Method, 27, ""},
+ {"(Parameters).SignatureSize", Method, 27, ""},
+ {"(Parameters).String", Method, 27, ""},
+ {"GenerateKey", Func, 27, "func(params Parameters) (*PrivateKey, error)"},
+ {"MLDSA44", Func, 27, "func() Parameters"},
+ {"MLDSA44PublicKeySize", Const, 27, ""},
+ {"MLDSA44SignatureSize", Const, 27, ""},
+ {"MLDSA65", Func, 27, "func() Parameters"},
+ {"MLDSA65PublicKeySize", Const, 27, ""},
+ {"MLDSA65SignatureSize", Const, 27, ""},
+ {"MLDSA87", Func, 27, "func() Parameters"},
+ {"MLDSA87PublicKeySize", Const, 27, ""},
+ {"MLDSA87SignatureSize", Const, 27, ""},
+ {"NewPrivateKey", Func, 27, "func(params Parameters, seed []byte) (*PrivateKey, error)"},
+ {"NewPublicKey", Func, 27, "func(params Parameters, encoding []byte) (*PublicKey, error)"},
+ {"Options", Type, 27, ""},
+ {"Options.Context", Field, 27, ""},
+ {"Parameters", Type, 27, ""},
+ {"PrivateKey", Type, 27, ""},
+ {"PrivateKeySize", Const, 27, ""},
+ {"PublicKey", Type, 27, ""},
+ {"Verify", Func, 27, "func(pk *PublicKey, message []byte, signature []byte, opts *Options) error"},
+ },
"crypto/mlkem": {
{"(*DecapsulationKey1024).Bytes", Method, 24, ""},
{"(*DecapsulationKey1024).Decapsulate", Method, 24, ""},
@@ -1120,6 +1156,7 @@ var PackageSymbols = map[string][]Symbol{
{"ConnectionState.ECHAccepted", Field, 23, ""},
{"ConnectionState.HandshakeComplete", Field, 0, ""},
{"ConnectionState.HelloRetryRequest", Field, 26, ""},
+ {"ConnectionState.LocalCertificate", Field, 27, ""},
{"ConnectionState.NegotiatedProtocol", Field, 0, ""},
{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0, ""},
{"ConnectionState.OCSPResponse", Field, 5, ""},
@@ -1152,6 +1189,10 @@ var PackageSymbols = map[string][]Symbol{
{"InsecureCipherSuites", Func, 14, "func() []*CipherSuite"},
{"Listen", Func, 0, "func(network string, laddr string, config *Config) (net.Listener, error)"},
{"LoadX509KeyPair", Func, 0, "func(certFile string, keyFile string) (Certificate, error)"},
+ {"MLDSA44", Const, 27, ""},
+ {"MLDSA65", Const, 27, ""},
+ {"MLDSA87", Const, 27, ""},
+ {"MLKEM1024", Const, 27, ""},
{"NewLRUClientSessionCache", Func, 3, "func(capacity int) ClientSessionCache"},
{"NewListener", Func, 0, "func(inner net.Listener, config *Config) net.Listener"},
{"NewResumptionState", Func, 21, "func(ticket []byte, state *SessionState) (*ClientSessionState, error)"},
@@ -1166,6 +1207,7 @@ var PackageSymbols = map[string][]Symbol{
{"ParseSessionState", Func, 21, "func(data []byte) (*SessionState, error)"},
{"QUICClient", Func, 21, "func(config *QUICConfig) *QUICConn"},
{"QUICConfig", Type, 21, ""},
+ {"QUICConfig.ClientHelloInfoConn", Field, 27, ""},
{"QUICConfig.EnableSessionEvents", Field, 23, ""},
{"QUICConfig.TLSConfig", Field, 21, ""},
{"QUICConn", Type, 21, ""},
@@ -1334,6 +1376,7 @@ var PackageSymbols = map[string][]Symbol{
{"Certificate.PublicKeyAlgorithm", Field, 0, ""},
{"Certificate.Raw", Field, 0, ""},
{"Certificate.RawIssuer", Field, 0, ""},
+ {"Certificate.RawSignatureAlgorithm", Field, 27, ""},
{"Certificate.RawSubject", Field, 0, ""},
{"Certificate.RawSubjectPublicKeyInfo", Field, 0, ""},
{"Certificate.RawTBSCertificate", Field, 0, ""},
@@ -1362,6 +1405,7 @@ var PackageSymbols = map[string][]Symbol{
{"CertificateRequest.PublicKey", Field, 3, ""},
{"CertificateRequest.PublicKeyAlgorithm", Field, 3, ""},
{"CertificateRequest.Raw", Field, 3, ""},
+ {"CertificateRequest.RawSignatureAlgorithm", Field, 27, ""},
{"CertificateRequest.RawSubject", Field, 3, ""},
{"CertificateRequest.RawSubjectPublicKeyInfo", Field, 3, ""},
{"CertificateRequest.RawTBSCertificateRequest", Field, 3, ""},
@@ -1422,6 +1466,10 @@ var PackageSymbols = map[string][]Symbol{
{"KeyUsageKeyEncipherment", Const, 0, ""},
{"MD2WithRSA", Const, 0, ""},
{"MD5WithRSA", Const, 0, ""},
+ {"MLDSA", Const, 27, ""},
+ {"MLDSA44", Const, 27, ""},
+ {"MLDSA65", Const, 27, ""},
+ {"MLDSA87", Const, 27, ""},
{"MarshalECPrivateKey", Func, 2, "func(key *ecdsa.PrivateKey) ([]byte, error)"},
{"MarshalPKCS1PrivateKey", Func, 0, "func(key *rsa.PrivateKey) []byte"},
{"MarshalPKCS1PublicKey", Func, 10, "func(key *rsa.PublicKey) []byte"},
@@ -1468,6 +1516,7 @@ var PackageSymbols = map[string][]Symbol{
{"RevocationList.Number", Field, 15, ""},
{"RevocationList.Raw", Field, 19, ""},
{"RevocationList.RawIssuer", Field, 19, ""},
+ {"RevocationList.RawSignatureAlgorithm", Field, 27, ""},
{"RevocationList.RawTBSRevocationList", Field, 19, ""},
{"RevocationList.RevokedCertificateEntries", Field, 21, ""},
{"RevocationList.RevokedCertificates", Field, 15, ""},
@@ -1648,6 +1697,7 @@ var PackageSymbols = map[string][]Symbol{
{"(Scanner).Scan", Method, 0, ""},
{"ColumnType", Type, 8, ""},
{"Conn", Type, 9, ""},
+ {"ConvertAssign", Func, 27, "func(scanCtx driver.ScanContext, dest any, src driver.Value) error"},
{"DB", Type, 0, ""},
{"DBStats", Type, 5, ""},
{"DBStats.Idle", Field, 11, ""},
@@ -1744,6 +1794,11 @@ var PackageSymbols = map[string][]Symbol{
{"(Rows).Next", Method, 0, ""},
{"(RowsAffected).LastInsertId", Method, 0, ""},
{"(RowsAffected).RowsAffected", Method, 0, ""},
+ {"(RowsColumnScanner).Close", Method, 27, ""},
+ {"(RowsColumnScanner).Columns", Method, 27, ""},
+ {"(RowsColumnScanner).Next", Method, 27, ""},
+ {"(RowsColumnScanner).NextRow", Method, 27, ""},
+ {"(RowsColumnScanner).ScanColumn", Method, 27, ""},
{"(RowsColumnTypeDatabaseTypeName).Close", Method, 8, ""},
{"(RowsColumnTypeDatabaseTypeName).ColumnTypeDatabaseTypeName", Method, 8, ""},
{"(RowsColumnTypeDatabaseTypeName).Columns", Method, 8, ""},
@@ -1815,12 +1870,14 @@ var PackageSymbols = map[string][]Symbol{
{"ResultNoRows", Var, 0, ""},
{"Rows", Type, 0, ""},
{"RowsAffected", Type, 0, ""},
+ {"RowsColumnScanner", Type, 27, ""},
{"RowsColumnTypeDatabaseTypeName", Type, 8, ""},
{"RowsColumnTypeLength", Type, 8, ""},
{"RowsColumnTypeNullable", Type, 8, ""},
{"RowsColumnTypePrecisionScale", Type, 8, ""},
{"RowsColumnTypeScanType", Type, 8, ""},
{"RowsNextResultSet", Type, 8, ""},
+ {"ScanContext", Type, 27, ""},
{"SessionResetter", Type, 10, ""},
{"Stmt", Type, 0, ""},
{"StmtExecContext", Type, 8, ""},
@@ -5038,24 +5095,32 @@ var PackageSymbols = map[string][]Symbol{
{"(*InvalidUnmarshalError).Error", Method, 0, ""},
{"(*MarshalerError).Error", Method, 0, ""},
{"(*MarshalerError).Unwrap", Method, 13, ""},
+ {"(*Number).UnmarshalJSONFrom", Method, 27, ""},
{"(*RawMessage).MarshalJSON", Method, 0, ""},
{"(*RawMessage).UnmarshalJSON", Method, 0, ""},
{"(*SyntaxError).Error", Method, 0, ""},
{"(*UnmarshalFieldError).Error", Method, 0, ""},
{"(*UnmarshalTypeError).Error", Method, 0, ""},
+ {"(*UnmarshalTypeError).Unwrap", Method, 27, ""},
{"(*UnsupportedTypeError).Error", Method, 0, ""},
{"(*UnsupportedValueError).Error", Method, 0, ""},
{"(Delim).String", Method, 5, ""},
{"(Marshaler).MarshalJSON", Method, 0, ""},
{"(Number).Float64", Method, 1, ""},
{"(Number).Int64", Method, 1, ""},
+ {"(Number).MarshalJSONTo", Method, 27, ""},
{"(Number).String", Method, 1, ""},
{"(RawMessage).MarshalJSON", Method, 8, ""},
{"(Unmarshaler).UnmarshalJSON", Method, 0, ""},
+ {"CallMethodsWithLegacySemantics", Func, 27, "func(v bool) Options"},
{"Compact", Func, 0, "func(dst *bytes.Buffer, src []byte) error"},
{"Decoder", Type, 0, ""},
+ {"DefaultOptionsV1", Func, 27, "func() Options"},
{"Delim", Type, 5, ""},
{"Encoder", Type, 0, ""},
+ {"FormatByteArrayAsArray", Func, 27, "func(v bool) Options"},
+ {"FormatBytesWithLegacySemantics", Func, 27, "func(v bool) Options"},
+ {"FormatDurationAsNano", Func, 27, "func(v bool) Options"},
{"HTMLEscape", Func, 0, "func(dst *bytes.Buffer, src []byte)"},
{"Indent", Func, 0, "func(dst *bytes.Buffer, src []byte, prefix string, indent string) error"},
{"InvalidUTF8Error", Type, 0, ""},
@@ -5068,19 +5133,29 @@ var PackageSymbols = map[string][]Symbol{
{"MarshalerError", Type, 0, ""},
{"MarshalerError.Err", Field, 0, ""},
{"MarshalerError.Type", Field, 0, ""},
+ {"MatchCaseSensitiveDelimiter", Func, 27, "func(v bool) Options"},
+ {"MergeWithLegacySemantics", Func, 27, "func(v bool) Options"},
{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
{"Number", Type, 1, ""},
+ {"OmitEmptyWithLegacySemantics", Func, 27, "func(v bool) Options"},
+ {"Options", Type, 27, ""},
+ {"ParseBytesWithLooseRFC4648", Func, 27, "func(v bool) Options"},
+ {"ParseTimeWithLooseRFC3339", Func, 27, "func(v bool) Options"},
{"RawMessage", Type, 0, ""},
+ {"ReportErrorsWithLegacySemantics", Func, 27, "func(v bool) Options"},
+ {"StringifyWithLegacySemantics", Func, 27, "func(v bool) Options"},
{"SyntaxError", Type, 0, ""},
{"SyntaxError.Offset", Field, 0, ""},
{"Token", Type, 5, ""},
{"Unmarshal", Func, 0, "func(data []byte, v any) error"},
+ {"UnmarshalArrayFromAnyLength", Func, 27, "func(v bool) Options"},
{"UnmarshalFieldError", Type, 0, ""},
{"UnmarshalFieldError.Field", Field, 0, ""},
{"UnmarshalFieldError.Key", Field, 0, ""},
{"UnmarshalFieldError.Type", Field, 0, ""},
{"UnmarshalTypeError", Type, 0, ""},
+ {"UnmarshalTypeError.Err", Field, 27, ""},
{"UnmarshalTypeError.Field", Field, 8, ""},
{"UnmarshalTypeError.Offset", Field, 5, ""},
{"UnmarshalTypeError.Struct", Field, 8, ""},
@@ -5094,6 +5169,158 @@ var PackageSymbols = map[string][]Symbol{
{"UnsupportedValueError.Value", Field, 0, ""},
{"Valid", Func, 9, "func(data []byte) bool"},
},
+ "encoding/json/jsontext": {
+ {"(*Decoder).InputOffset", Method, 27, ""},
+ {"(*Decoder).Options", Method, 27, ""},
+ {"(*Decoder).PeekKind", Method, 27, ""},
+ {"(*Decoder).ReadToken", Method, 27, ""},
+ {"(*Decoder).ReadValue", Method, 27, ""},
+ {"(*Decoder).Reset", Method, 27, ""},
+ {"(*Decoder).SkipValue", Method, 27, ""},
+ {"(*Decoder).StackDepth", Method, 27, ""},
+ {"(*Decoder).StackIndex", Method, 27, ""},
+ {"(*Decoder).StackPointer", Method, 27, ""},
+ {"(*Decoder).UnreadBuffer", Method, 27, ""},
+ {"(*Encoder).AvailableBuffer", Method, 27, ""},
+ {"(*Encoder).Options", Method, 27, ""},
+ {"(*Encoder).OutputOffset", Method, 27, ""},
+ {"(*Encoder).Reset", Method, 27, ""},
+ {"(*Encoder).StackDepth", Method, 27, ""},
+ {"(*Encoder).StackIndex", Method, 27, ""},
+ {"(*Encoder).StackPointer", Method, 27, ""},
+ {"(*Encoder).WriteToken", Method, 27, ""},
+ {"(*Encoder).WriteValue", Method, 27, ""},
+ {"(*SyntacticError).Error", Method, 27, ""},
+ {"(*SyntacticError).Unwrap", Method, 27, ""},
+ {"(*Value).Canonicalize", Method, 27, ""},
+ {"(*Value).Compact", Method, 27, ""},
+ {"(*Value).Format", Method, 27, ""},
+ {"(*Value).Indent", Method, 27, ""},
+ {"(*Value).UnmarshalJSON", Method, 27, ""},
+ {"(Kind).String", Method, 27, ""},
+ {"(Pointer).AppendToken", Method, 27, ""},
+ {"(Pointer).Contains", Method, 27, ""},
+ {"(Pointer).IsValid", Method, 27, ""},
+ {"(Pointer).LastToken", Method, 27, ""},
+ {"(Pointer).Parent", Method, 27, ""},
+ {"(Pointer).Tokens", Method, 27, ""},
+ {"(Token).Bool", Method, 27, ""},
+ {"(Token).Clone", Method, 27, ""},
+ {"(Token).Float", Method, 27, ""},
+ {"(Token).Float32", Method, 27, ""},
+ {"(Token).Int", Method, 27, ""},
+ {"(Token).Kind", Method, 27, ""},
+ {"(Token).String", Method, 27, ""},
+ {"(Token).Uint", Method, 27, ""},
+ {"(Value).Clone", Method, 27, ""},
+ {"(Value).IsValid", Method, 27, ""},
+ {"(Value).Kind", Method, 27, ""},
+ {"(Value).MarshalJSON", Method, 27, ""},
+ {"(Value).String", Method, 27, ""},
+ {"AllowDuplicateNames", Func, 27, "func(v bool) Options"},
+ {"AllowInvalidUTF8", Func, 27, "func(v bool) Options"},
+ {"AppendFloat", Func, 27, "func(dst []byte, src float64, bits int) []byte"},
+ {"AppendFormat", Func, 27, "func[Bytes ~[]byte | ~string](dst []byte, src Bytes, opts ...Options) ([]byte, error)"},
+ {"AppendQuote", Func, 27, "func[Bytes ~[]byte | ~string](dst []byte, src Bytes) ([]byte, error)"},
+ {"AppendUnquote", Func, 27, "func[Bytes ~[]byte | ~string](dst []byte, src Bytes) ([]byte, error)"},
+ {"BeginArray", Var, 27, ""},
+ {"BeginObject", Var, 27, ""},
+ {"Bool", Func, 27, "func(b bool) Token"},
+ {"CanonicalizeRawFloats", Func, 27, "func(v bool) Options"},
+ {"CanonicalizeRawInts", Func, 27, "func(v bool) Options"},
+ {"Decoder", Type, 27, ""},
+ {"Encoder", Type, 27, ""},
+ {"EndArray", Var, 27, ""},
+ {"EndObject", Var, 27, ""},
+ {"ErrDuplicateName", Var, 27, ""},
+ {"ErrNonStringName", Var, 27, ""},
+ {"EscapeForHTML", Func, 27, "func(v bool) Options"},
+ {"EscapeForJS", Func, 27, "func(v bool) Options"},
+ {"False", Var, 27, ""},
+ {"Float", Func, 27, "func(n float64) Token"},
+ {"Float32", Func, 27, "func(n float32) Token"},
+ {"Int", Func, 27, "func(n int64) Token"},
+ {"Internal", Var, 27, ""},
+ {"Kind", Type, 27, ""},
+ {"KindBeginArray", Const, 27, ""},
+ {"KindBeginObject", Const, 27, ""},
+ {"KindEndArray", Const, 27, ""},
+ {"KindEndObject", Const, 27, ""},
+ {"KindFalse", Const, 27, ""},
+ {"KindInvalid", Const, 27, ""},
+ {"KindNull", Const, 27, ""},
+ {"KindNumber", Const, 27, ""},
+ {"KindString", Const, 27, ""},
+ {"KindTrue", Const, 27, ""},
+ {"Multiline", Func, 27, "func(v bool) Options"},
+ {"NewDecoder", Func, 27, "func(r io.Reader, opts ...Options) *Decoder"},
+ {"NewEncoder", Func, 27, "func(w io.Writer, opts ...Options) *Encoder"},
+ {"Null", Var, 27, ""},
+ {"Options", Type, 27, ""},
+ {"Pointer", Type, 27, ""},
+ {"PreserveRawStrings", Func, 27, "func(v bool) Options"},
+ {"ReorderRawObjects", Func, 27, "func(v bool) Options"},
+ {"SpaceAfterColon", Func, 27, "func(v bool) Options"},
+ {"SpaceAfterComma", Func, 27, "func(v bool) Options"},
+ {"String", Func, 27, "func(s string) Token"},
+ {"SyntacticError", Type, 27, ""},
+ {"SyntacticError.ByteOffset", Field, 27, ""},
+ {"SyntacticError.Err", Field, 27, ""},
+ {"SyntacticError.JSONPointer", Field, 27, ""},
+ {"Token", Type, 27, ""},
+ {"True", Var, 27, ""},
+ {"Uint", Func, 27, "func(n uint64) Token"},
+ {"Value", Type, 27, ""},
+ {"WithIndent", Func, 27, "func(indent string) Options"},
+ {"WithIndentPrefix", Func, 27, "func(prefix string) Options"},
+ },
+ "encoding/json/v2": {
+ {"(*SemanticError).Error", Method, 27, ""},
+ {"(*SemanticError).Unwrap", Method, 27, ""},
+ {"(Marshaler).MarshalJSON", Method, 27, ""},
+ {"(MarshalerTo).MarshalJSONTo", Method, 27, ""},
+ {"(Unmarshaler).UnmarshalJSON", Method, 27, ""},
+ {"(UnmarshalerFrom).UnmarshalJSONFrom", Method, 27, ""},
+ {"DefaultOptionsV2", Func, 27, "func() Options"},
+ {"Deterministic", Func, 27, "func(v bool) Options"},
+ {"ErrUnknownName", Var, 27, ""},
+ {"FormatNilMapAsNull", Func, 27, "func(v bool) Options"},
+ {"FormatNilSliceAsNull", Func, 27, "func(v bool) Options"},
+ {"GetOption", Func, 27, "func[T any](opts Options, setter func(T) Options) (T, bool)"},
+ {"JoinMarshalers", Func, 27, "func(ms ...*Marshalers) *Marshalers"},
+ {"JoinOptions", Func, 27, "func(srcs ...Options) Options"},
+ {"JoinUnmarshalers", Func, 27, "func(us ...*Unmarshalers) *Unmarshalers"},
+ {"Marshal", Func, 27, "func(in any, opts ...Options) (out []byte, err error)"},
+ {"MarshalEncode", Func, 27, "func(out *jsontext.Encoder, in any, opts ...Options) (err error)"},
+ {"MarshalFunc", Func, 27, "func[T any](fn func(T) ([]byte, error)) *Marshalers"},
+ {"MarshalToFunc", Func, 27, "func[T any](fn func(*jsontext.Encoder, T) error) *Marshalers"},
+ {"MarshalWrite", Func, 27, "func(out io.Writer, in any, opts ...Options) (err error)"},
+ {"Marshaler", Type, 27, ""},
+ {"MarshalerTo", Type, 27, ""},
+ {"Marshalers", Type, 27, ""},
+ {"MatchCaseInsensitiveNames", Func, 27, "func(v bool) Options"},
+ {"OmitZeroStructFields", Func, 27, "func(v bool) Options"},
+ {"Options", Type, 27, ""},
+ {"RejectUnknownMembers", Func, 27, "func(v bool) Options"},
+ {"SemanticError", Type, 27, ""},
+ {"SemanticError.ByteOffset", Field, 27, ""},
+ {"SemanticError.Err", Field, 27, ""},
+ {"SemanticError.GoType", Field, 27, ""},
+ {"SemanticError.JSONKind", Field, 27, ""},
+ {"SemanticError.JSONPointer", Field, 27, ""},
+ {"SemanticError.JSONValue", Field, 27, ""},
+ {"StringifyNumbers", Func, 27, "func(v bool) Options"},
+ {"Unmarshal", Func, 27, "func(in []byte, out any, opts ...Options) (err error)"},
+ {"UnmarshalDecode", Func, 27, "func(in *jsontext.Decoder, out any, opts ...Options) (err error)"},
+ {"UnmarshalFromFunc", Func, 27, "func[T any](fn func(*jsontext.Decoder, T) error) *Unmarshalers"},
+ {"UnmarshalFunc", Func, 27, "func[T any](fn func([]byte, T) error) *Unmarshalers"},
+ {"UnmarshalRead", Func, 27, "func(in io.Reader, out any, opts ...Options) (err error)"},
+ {"Unmarshaler", Type, 27, ""},
+ {"UnmarshalerFrom", Type, 27, ""},
+ {"Unmarshalers", Type, 27, ""},
+ {"WithMarshalers", Func, 27, "func(v *Marshalers) Options"},
+ {"WithUnmarshalers", Func, 27, "func(v *Unmarshalers) Options"},
+ },
"encoding/pem": {
{"Block", Type, 0, ""},
{"Block.Bytes", Field, 0, ""},
@@ -6002,6 +6229,7 @@ var PackageSymbols = map[string][]Symbol{
{"Shift", Func, 5, "func(x Value, op token.Token, s uint) Value"},
{"Sign", Func, 5, "func(x Value) int"},
{"String", Const, 5, ""},
+ {"StringLen", Func, 27, "func(x Value) int64"},
{"StringVal", Func, 5, "func(x Value) string"},
{"ToComplex", Func, 6, "func(x Value) Value"},
{"ToFloat", Func, 6, "func(x Value) Value"},
@@ -6183,6 +6411,7 @@ var PackageSymbols = map[string][]Symbol{
{"(*ErrorList).Add", Method, 0, ""},
{"(*ErrorList).RemoveMultiples", Method, 0, ""},
{"(*ErrorList).Reset", Method, 0, ""},
+ {"(*Scanner).End", Method, 27, ""},
{"(*Scanner).Init", Method, 0, ""},
{"(*Scanner).Scan", Method, 0, ""},
{"(Error).Error", Method, 0, ""},
@@ -6222,6 +6451,7 @@ var PackageSymbols = map[string][]Symbol{
{"(*File).SetLines", Method, 0, ""},
{"(*File).SetLinesForContent", Method, 0, ""},
{"(*File).Size", Method, 0, ""},
+ {"(*File).String", Method, 27, ""},
{"(*FileSet).AddExistingFiles", Method, 25, ""},
{"(*FileSet).AddFile", Method, 0, ""},
{"(*FileSet).Base", Method, 0, ""},
@@ -6529,6 +6759,7 @@ var PackageSymbols = map[string][]Symbol{
{"(*Tuple).Variables", Method, 24, ""},
{"(*TypeList).At", Method, 18, ""},
{"(*TypeList).Len", Method, 18, ""},
+ {"(*TypeList).String", Method, 27, ""},
{"(*TypeList).Types", Method, 24, ""},
{"(*TypeName).Exported", Method, 5, ""},
{"(*TypeName).Id", Method, 5, ""},
@@ -6547,6 +6778,7 @@ var PackageSymbols = map[string][]Symbol{
{"(*TypeParam).Underlying", Method, 18, ""},
{"(*TypeParamList).At", Method, 18, ""},
{"(*TypeParamList).Len", Method, 18, ""},
+ {"(*TypeParamList).String", Method, 27, ""},
{"(*TypeParamList).TypeParams", Method, 24, ""},
{"(*Union).Len", Method, 18, ""},
{"(*Union).String", Method, 18, ""},
@@ -6571,9 +6803,14 @@ var PackageSymbols = map[string][]Symbol{
{"(Checker).PkgNameOf", Method, 22, ""},
{"(Checker).TypeOf", Method, 5, ""},
{"(Error).Error", Method, 5, ""},
+ {"(Hasher).Equal", Method, 27, ""},
+ {"(Hasher).Hash", Method, 27, ""},
+ {"(HasherIgnoreTags).Equal", Method, 27, ""},
+ {"(HasherIgnoreTags).Hash", Method, 27, ""},
{"(Importer).Import", Method, 5, ""},
{"(ImporterFrom).Import", Method, 6, ""},
{"(ImporterFrom).ImportFrom", Method, 6, ""},
+ {"(Instance).String", Method, 27, ""},
{"(Object).Exported", Method, 5, ""},
{"(Object).Id", Method, 5, ""},
{"(Object).Name", Method, 5, ""},
@@ -6643,6 +6880,8 @@ var PackageSymbols = map[string][]Symbol{
{"Float32", Const, 5, ""},
{"Float64", Const, 5, ""},
{"Func", Type, 5, ""},
+ {"Hasher", Type, 27, ""},
+ {"HasherIgnoreTags", Type, 27, ""},
{"Id", Func, 5, "func(pkg *Package, name string) string"},
{"Identical", Func, 5, "func(x Type, y Type) bool"},
{"IdenticalIgnoreTags", Func, 8, "func(x Type, y Type) bool"},
@@ -6877,9 +7116,13 @@ var PackageSymbols = map[string][]Symbol{
{"(*Hash).Write", Method, 14, ""},
{"(*Hash).WriteByte", Method, 14, ""},
{"(*Hash).WriteString", Method, 14, ""},
+ {"(ComparableHasher).Equal", Method, 27, ""},
+ {"(ComparableHasher).Hash", Method, 27, ""},
{"Bytes", Func, 19, "func(seed Seed, b []byte) uint64"},
{"Comparable", Func, 24, "func[T comparable](seed Seed, v T) uint64"},
+ {"ComparableHasher", Type, 27, ""},
{"Hash", Type, 14, ""},
+ {"Hasher", Type, 27, ""},
{"MakeSeed", Func, 14, "func() Seed"},
{"Seed", Type, 14, ""},
{"String", Func, 19, "func(seed Seed, s string) uint64"},
@@ -8035,6 +8278,7 @@ var PackageSymbols = map[string][]Symbol{
{"(*Int).CmpAbs", Method, 10, ""},
{"(*Int).Div", Method, 0, ""},
{"(*Int).DivMod", Method, 0, ""},
+ {"(*Int).Divide", Method, 27, ""},
{"(*Int).Exp", Method, 0, ""},
{"(*Int).FillBytes", Method, 15, ""},
{"(*Int).Float64", Method, 21, ""},
@@ -8119,9 +8363,11 @@ var PackageSymbols = map[string][]Symbol{
{"Accuracy", Type, 5, ""},
{"AwayFromZero", Const, 5, ""},
{"Below", Const, 5, ""},
+ {"Ceil", Const, 27, ""},
{"ErrNaN", Type, 5, ""},
{"Exact", Const, 5, ""},
{"Float", Type, 5, ""},
+ {"Floor", Const, 27, ""},
{"Int", Type, 0, ""},
{"Jacobi", Func, 5, "func(x *Int, y *Int) int"},
{"MaxBase", Const, 0, ""},
@@ -8133,12 +8379,14 @@ var PackageSymbols = map[string][]Symbol{
{"NewRat", Func, 0, "func(a int64, b int64) *Rat"},
{"ParseFloat", Func, 5, "func(s string, base int, prec uint, mode RoundingMode) (f *Float, b int, err error)"},
{"Rat", Type, 0, ""},
+ {"Round", Const, 27, ""},
{"RoundingMode", Type, 5, ""},
{"ToNearestAway", Const, 5, ""},
{"ToNearestEven", Const, 5, ""},
{"ToNegativeInf", Const, 5, ""},
{"ToPositiveInf", Const, 5, ""},
{"ToZero", Const, 5, ""},
+ {"Trunc", Const, 27, ""},
{"Word", Type, 0, ""},
},
"math/bits": {
@@ -8290,6 +8538,7 @@ var PackageSymbols = map[string][]Symbol{
{"(*Rand).Int64", Method, 22, ""},
{"(*Rand).Int64N", Method, 22, ""},
{"(*Rand).IntN", Method, 22, ""},
+ {"(*Rand).N", Method, 27, ""},
{"(*Rand).NormFloat64", Method, 22, ""},
{"(*Rand).Perm", Method, 22, ""},
{"(*Rand).Shuffle", Method, 22, ""},
@@ -8985,7 +9234,7 @@ var PackageSymbols = map[string][]Symbol{
{"NoBody", Var, 8, ""},
{"NotFound", Func, 0, "func(w ResponseWriter, r *Request)"},
{"NotFoundHandler", Func, 0, "func() Handler"},
- {"ParseCookie", Func, 23, "func(line string) ([]*Cookie, error)"},
+ {"ParseCookie", Func, 23, "func(line string) (#rv1 []*Cookie, #rv2 error)"},
{"ParseHTTPVersion", Func, 0, "func(vers string) (major int, minor int, ok bool)"},
{"ParseSetCookie", Func, 23, "func(line string) (*Cookie, error)"},
{"ParseTime", Func, 1, "func(text string) (t time.Time, err error)"},
@@ -9061,6 +9310,7 @@ var PackageSymbols = map[string][]Symbol{
{"Server.BaseContext", Field, 13, ""},
{"Server.ConnContext", Field, 13, ""},
{"Server.ConnState", Field, 3, ""},
+ {"Server.DisableClientPriority", Field, 27, ""},
{"Server.DisableGeneralOptionsHandler", Field, 20, ""},
{"Server.ErrorLog", Field, 3, ""},
{"Server.HTTP2", Field, 24, ""},
@@ -9226,6 +9476,7 @@ var PackageSymbols = map[string][]Symbol{
{"NewRequestWithContext", Func, 23, "func(ctx context.Context, method string, target string, body io.Reader) *http.Request"},
{"NewServer", Func, 0, "func(handler http.Handler) *Server"},
{"NewTLSServer", Func, 0, "func(handler http.Handler) *Server"},
+ {"NewTestServer", Func, 27, "func(t testing.TB, handler http.Handler) *Server"},
{"NewUnstartedServer", Func, 0, "func(handler http.Handler) *Server"},
{"ResponseRecorder", Type, 0, ""},
{"ResponseRecorder.Body", Field, 0, ""},
@@ -9596,6 +9847,7 @@ var PackageSymbols = map[string][]Symbol{
{"(*Error).Timeout", Method, 6, ""},
{"(*Error).Unwrap", Method, 13, ""},
{"(*URL).AppendBinary", Method, 24, ""},
+ {"(*URL).Clone", Method, 27, ""},
{"(*URL).EscapedFragment", Method, 15, ""},
{"(*URL).EscapedPath", Method, 5, ""},
{"(*URL).Hostname", Method, 8, ""},
@@ -9616,6 +9868,7 @@ var PackageSymbols = map[string][]Symbol{
{"(EscapeError).Error", Method, 0, ""},
{"(InvalidHostError).Error", Method, 6, ""},
{"(Values).Add", Method, 0, ""},
+ {"(Values).Clone", Method, 27, ""},
{"(Values).Del", Method, 0, ""},
{"(Values).Encode", Method, 0, ""},
{"(Values).Get", Method, 0, ""},
@@ -10793,6 +11046,7 @@ var PackageSymbols = map[string][]Symbol{
{"ContainsRune", Func, 0, "func(s string, r rune) bool"},
{"Count", Func, 0, "func(s string, substr string) int"},
{"Cut", Func, 18, "func(s string, sep string) (before string, after string, found bool)"},
+ {"CutLast", Func, 27, "func(s string, sep string) (before string, after string, found bool)"},
{"CutPrefix", Func, 20, "func(s string, prefix string) (after string, found bool)"},
{"CutSuffix", Func, 20, "func(s string, suffix string) (before string, found bool)"},
{"EqualFold", Func, 0, "func(s string, t string) bool"},
@@ -17476,6 +17730,7 @@ var PackageSymbols = map[string][]Symbol{
{"TestHandler", Func, 21, "func(h slog.Handler, results func() []map[string]any) error"},
},
"testing/synctest": {
+ {"Sleep", Func, 27, "func(d time.Duration)"},
{"Test", Func, 25, "func(t *testing.T, f func(*testing.T))"},
{"Wait", Func, 25, "func()"},
},
@@ -17980,6 +18235,7 @@ var PackageSymbols = map[string][]Symbol{
{"Bassa_Vah", Var, 4, ""},
{"Batak", Var, 0, ""},
{"Bengali", Var, 0, ""},
+ {"Beria_Erfe", Var, 27, ""},
{"Bhaiksuki", Var, 7, ""},
{"Bidi_Control", Var, 0, ""},
{"Bopomofo", Var, 0, ""},
@@ -18029,6 +18285,7 @@ var PackageSymbols = map[string][]Symbol{
{"Extender", Var, 0, ""},
{"FoldCategory", Var, 0, ""},
{"FoldScript", Var, 0, ""},
+ {"Garay", Var, 27, ""},
{"Georgian", Var, 0, ""},
{"Glagolitic", Var, 0, ""},
{"Gothic", Var, 0, ""},
@@ -18038,6 +18295,7 @@ var PackageSymbols = map[string][]Symbol{
{"Gujarati", Var, 0, ""},
{"Gunjala_Gondi", Var, 13, ""},
{"Gurmukhi", Var, 0, ""},
+ {"Gurung_Khema", Var, 27, ""},
{"Han", Var, 0, ""},
{"Hangul", Var, 0, ""},
{"Hanifi_Rohingya", Var, 13, ""},
@@ -18049,6 +18307,9 @@ var PackageSymbols = map[string][]Symbol{
{"Hyphen", Var, 0, ""},
{"IDS_Binary_Operator", Var, 0, ""},
{"IDS_Trinary_Operator", Var, 0, ""},
+ {"IDS_Unary_Operator", Var, 27, ""},
+ {"ID_Compat_Math_Continue", Var, 27, ""},
+ {"ID_Compat_Math_Start", Var, 27, ""},
{"Ideographic", Var, 0, ""},
{"Imperial_Aramaic", Var, 0, ""},
{"In", Func, 2, "func(r rune, ranges ...*RangeTable) bool"},
@@ -18082,6 +18343,7 @@ var PackageSymbols = map[string][]Symbol{
{"Khmer", Var, 0, ""},
{"Khojki", Var, 4, ""},
{"Khudawadi", Var, 4, ""},
+ {"Kirat_Rai", Var, 27, ""},
{"L", Var, 0, ""},
{"LC", Var, 25, ""},
{"Lao", Var, 0, ""},
@@ -18125,6 +18387,7 @@ var PackageSymbols = map[string][]Symbol{
{"Miao", Var, 1, ""},
{"Mn", Var, 0, ""},
{"Modi", Var, 4, ""},
+ {"Modifier_Combining_Mark", Var, 27, ""},
{"Mongolian", Var, 0, ""},
{"Mro", Var, 4, ""},
{"Multani", Var, 5, ""},
@@ -18145,6 +18408,7 @@ var PackageSymbols = map[string][]Symbol{
{"Nyiakeng_Puachue_Hmong", Var, 14, ""},
{"Ogham", Var, 0, ""},
{"Ol_Chiki", Var, 0, ""},
+ {"Ol_Onal", Var, 27, ""},
{"Old_Hungarian", Var, 5, ""},
{"Old_Italic", Var, 0, ""},
{"Old_North_Arabian", Var, 4, ""},
@@ -18214,6 +18478,7 @@ var PackageSymbols = map[string][]Symbol{
{"Sharada", Var, 1, ""},
{"Shavian", Var, 0, ""},
{"Siddham", Var, 4, ""},
+ {"Sidetic", Var, 27, ""},
{"SignWriting", Var, 5, ""},
{"SimpleFold", Func, 0, "func(r rune) rune"},
{"Sinhala", Var, 0, ""},
@@ -18227,6 +18492,7 @@ var PackageSymbols = map[string][]Symbol{
{"Space", Var, 0, ""},
{"SpecialCase", Type, 0, ""},
{"Sundanese", Var, 0, ""},
+ {"Sunuwar", Var, 27, ""},
{"Syloti_Nagri", Var, 0, ""},
{"Symbol", Var, 0, ""},
{"Syriac", Var, 0, ""},
@@ -18235,6 +18501,7 @@ var PackageSymbols = map[string][]Symbol{
{"Tai_Le", Var, 0, ""},
{"Tai_Tham", Var, 0, ""},
{"Tai_Viet", Var, 0, ""},
+ {"Tai_Yo", Var, 27, ""},
{"Takri", Var, 1, ""},
{"Tamil", Var, 0, ""},
{"Tangsa", Var, 21, ""},
@@ -18252,7 +18519,10 @@ var PackageSymbols = map[string][]Symbol{
{"ToLower", Func, 0, "func(r rune) rune"},
{"ToTitle", Func, 0, "func(r rune) rune"},
{"ToUpper", Func, 0, "func(r rune) rune"},
+ {"Todhri", Var, 27, ""},
+ {"Tolong_Siki", Var, 27, ""},
{"Toto", Var, 21, ""},
+ {"Tulu_Tigalari", Var, 27, ""},
{"TurkishCase", Var, 0, ""},
{"Ugaritic", Var, 0, ""},
{"Unified_Ideograph", Var, 0, ""},
@@ -18320,6 +18590,21 @@ var PackageSymbols = map[string][]Symbol{
{"String", Func, 0, ""},
{"StringData", Func, 0, ""},
},
+ "uuid": {
+ {"(*UUID).UnmarshalText", Method, 27, ""},
+ {"(UUID).AppendText", Method, 27, ""},
+ {"(UUID).Compare", Method, 27, ""},
+ {"(UUID).MarshalText", Method, 27, ""},
+ {"(UUID).String", Method, 27, ""},
+ {"Max", Func, 27, "func() UUID"},
+ {"MustParse", Func, 27, "func(s string) UUID"},
+ {"New", Func, 27, "func() UUID"},
+ {"NewV4", Func, 27, "func() UUID"},
+ {"NewV7", Func, 27, "func() UUID"},
+ {"Nil", Func, 27, "func() UUID"},
+ {"Parse", Func, 27, "func(s string) (UUID, error)"},
+ {"UUID", Type, 27, ""},
+ },
"weak": {
{"(Pointer).Value", Method, 24, ""},
{"Make", Func, 24, "func[T any](ptr *T) Pointer[T]"},
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go b/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go
index d612a7102..706ad33ef 100644
--- a/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go
+++ b/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go
@@ -259,13 +259,13 @@ func TypeExpr(t types.Type, qual types.Qualifier) ast.Expr {
case *types.Signature:
var params []*ast.Field
for v := range t.Params().Variables() {
+ var names []*ast.Ident
+ if v.Name() != "" {
+ names = []*ast.Ident{ast.NewIdent(v.Name())}
+ }
params = append(params, &ast.Field{
- Type: TypeExpr(v.Type(), qual),
- Names: []*ast.Ident{
- {
- Name: v.Name(),
- },
- },
+ Type: TypeExpr(v.Type(), qual),
+ Names: names,
})
}
if t.Variadic() {
@@ -328,10 +328,10 @@ func TypeExpr(t types.Type, qual types.Qualifier) ast.Expr {
return expr
case *types.Struct:
- return ast.NewIdent(t.String())
+ return ast.NewIdent(types.TypeString(t, qual))
case *types.Interface:
- return ast.NewIdent(t.String())
+ return ast.NewIdent(types.TypeString(t, qual))
case *types.Union:
if t.Len() == 0 {
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 0fa5ac500..c149cc2db 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -33,7 +33,7 @@ github.com/coreos/go-systemd/v22/journal
# github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
## explicit
github.com/davecgh/go-spew/spew
-# github.com/digitalocean/godo v1.204.0
+# github.com/digitalocean/godo v1.206.0
## explicit; go 1.23.0
github.com/digitalocean/godo
github.com/digitalocean/godo/metrics
@@ -232,8 +232,8 @@ github.com/pkg/errors
# github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
## explicit
github.com/pmezard/go-difflib/difflib
-# github.com/prometheus/client_golang v1.23.2
-## explicit; go 1.23.0
+# github.com/prometheus/client_golang v1.24.1
+## explicit; go 1.25.0
github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil
github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header
github.com/prometheus/client_golang/prometheus
@@ -247,7 +247,7 @@ github.com/prometheus/client_golang/prometheus/testutil/promlint/validations
# github.com/prometheus/client_model v0.6.2
## explicit; go 1.22.0
github.com/prometheus/client_model/go
-# github.com/prometheus/common v0.69.0
+# github.com/prometheus/common v0.70.1
## explicit; go 1.25.0
github.com/prometheus/common/expfmt
github.com/prometheus/common/model
@@ -385,7 +385,7 @@ go.yaml.in/yaml/v2
# go.yaml.in/yaml/v3 v3.0.4
## explicit; go 1.16
go.yaml.in/yaml/v3
-# golang.org/x/crypto v0.53.0
+# golang.org/x/crypto v0.54.0
## explicit; go 1.25.0
golang.org/x/crypto/argon2
golang.org/x/crypto/blake2b
@@ -403,7 +403,7 @@ golang.org/x/exp/slices
## explicit; go 1.11
golang.org/x/lint
golang.org/x/lint/golint
-# golang.org/x/net v0.56.0
+# golang.org/x/net v0.57.0
## explicit; go 1.25.0
golang.org/x/net/http/httpguts
golang.org/x/net/http2
@@ -415,25 +415,25 @@ golang.org/x/net/internal/timeseries
golang.org/x/net/publicsuffix
golang.org/x/net/trace
golang.org/x/net/websocket
-# golang.org/x/oauth2 v0.36.0
-## explicit; go 1.25.0
+# golang.org/x/oauth2 v0.37.0
+## explicit; go 1.26.0
golang.org/x/oauth2
golang.org/x/oauth2/internal
# golang.org/x/sync v0.22.0
## explicit; go 1.25.0
golang.org/x/sync/errgroup
golang.org/x/sync/singleflight
-# golang.org/x/sys v0.46.0
+# golang.org/x/sys v0.47.0
## explicit; go 1.25.0
golang.org/x/sys/cpu
golang.org/x/sys/plan9
golang.org/x/sys/unix
golang.org/x/sys/windows
golang.org/x/sys/windows/registry
-# golang.org/x/term v0.44.0
+# golang.org/x/term v0.45.0
## explicit; go 1.25.0
golang.org/x/term
-# golang.org/x/text v0.38.0
+# golang.org/x/text v0.40.0
## explicit; go 1.25.0
golang.org/x/text/cases
golang.org/x/text/feature/plural
@@ -455,7 +455,7 @@ golang.org/x/text/unicode/norm
# golang.org/x/time v0.15.0
## explicit; go 1.25.0
golang.org/x/time/rate
-# golang.org/x/tools v0.46.0
+# golang.org/x/tools v0.47.0
## explicit; go 1.25.0
golang.org/x/tools/go/ast/astutil
golang.org/x/tools/go/ast/edge