Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 12 additions & 13 deletions .speakeasy/gen.lock
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
lockVersion: 2.0.0
id: 9d90eb9e-33f8-4170-8944-988f4000aad0
management:
docChecksum: 939d2f12fecf92a82326fb98be3b67dc
docChecksum: db466f76a01e1cd7113bb9028f77a91f
docVersion: 0.9.0
speakeasyVersion: 1.786.1
generationVersion: 2.913.3
releaseVersion: 0.12.1
configChecksum: 7b73ab5d36bcb2d2a4fa03e5e988aad3
releaseVersion: 0.12.2
configChecksum: 8dc38ac308c531da283a42a7921a1055
repoURL: https://github.com/gleanwork/api-client-go.git
installationURL: https://github.com/gleanwork/api-client-go
persistentEdits:
generation_id: 8638f6e8-47cf-4726-9445-2bf2562f6d6b
pristine_commit_hash: 642488bbf5fd9cdb70ce00859e06bd02a417a15c
pristine_tree_hash: 559bfcd8bbcdb5bbcba33c6d9cbded7ca4dfba16
generation_id: ffac2388-2424-4297-bcdf-daf37acdc66e
pristine_commit_hash: 3f2a27e044b90b6b2ad3030568ef471748390f39
pristine_tree_hash: a45c223e57ea262e697e3ccabe88b9f2079619fb
features:
go:
acceptHeaders: 2.81.2
Expand Down Expand Up @@ -3585,8 +3585,8 @@ trackedFiles:
pristine_git_object: 117e015a2b8fce0cb8a931963503e7ab1c7066d5
glean.go:
id: f5ed099b8e85
last_write_checksum: sha1:11e37fda6b480e2601b3c8919af1fcb037148f38
pristine_git_object: 80c28f541c815ccf936bbf82122611a7b8963c45
last_write_checksum: sha1:d225a4f1ce2d1afe1304bb5541f1534fd8846460
pristine_git_object: 97d4707096df6d90070c08f5bc4a04602b30aa73
go.mod:
id: c47645c391ad
last_write_checksum: sha1:cf65a2c96e303858d4cf70e07d4c44d3f1c1db38
Expand Down Expand Up @@ -6493,8 +6493,8 @@ trackedFiles:
pristine_git_object: ab9263d43404e8e6f07af222a3e785aca2fbf35f
tests/mockserver/internal/handler/pathpostrestapiv1createcollection.go:
id: 3fb93a419933
last_write_checksum: sha1:14b4a1d98dd55ce2b487ae1aaab4a7dece08df25
pristine_git_object: 371b90231fcd7bd77fd6d9566156605af1712d9a
last_write_checksum: sha1:f9f4c718408bddadbdf826194f07970bb111e57e
pristine_git_object: 5c99a0ada5302c8f64c0e5da5683fa8bd9e9975d
tests/mockserver/internal/handler/pathpostrestapiv1createshortcut.go:
id: 8d9d3abb0c34
last_write_checksum: sha1:2f9468a50936c4cb0fb2101d97c1425cb36ba2d4
Expand Down Expand Up @@ -9217,8 +9217,8 @@ trackedFiles:
pristine_git_object: 8276fc3a8313ccbdb884ac378657dea8e7a24776
tests/summarize_test.go:
id: 1b63b0a16e69
last_write_checksum: sha1:ae9ff96ebb891d67df9ac3693604872472d962dd
pristine_git_object: 495a0106a9f12fb2e6eb0cde8146b2e6bbd4c40e
last_write_checksum: sha1:f4293c9d4f23fd82897dc1aa42464acbcf7c3ab0
pristine_git_object: 0584f2ffb97eaa2926a3599ec50475a23623e992
tests/testclient.go:
id: 78d36c6e169c
last_write_checksum: sha1:507c44e437934fbff8d295201c1327e18bd00df8
Expand Down Expand Up @@ -10350,7 +10350,6 @@ generatedTests:
getDatasourceCredentialStatus: "2026-06-05T17:32:19Z"
rotateDatasourceCredentials: "2026-06-05T17:32:19Z"
createAgent: "2026-06-29T03:02:56Z"
releaseNotes: "## Go SDK Changes:\n* `Glean.Agents.CreateAgent()`: **Added**\n* `Glean.Client.Announcements.Create()`: \n * `request.CreateAnnouncementRequest.Body.StructuredList[].Document.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.Body.StructuredList[].Document.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Announcements.Update()`: \n * `request.UpdateAnnouncementRequest.Body.StructuredList[].Document.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.Body.StructuredList[].Document.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Answers.Create()`: \n * `request.CreateAnswerRequest.Data.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Answers.Update()`: \n * `request.EditAnswerRequest.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Answers.Retrieve()`: `response.AnswerResult.Answer.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Answers.List()`: `response.AnswerResults[].Answer.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Chat.Create()`: \n * `request.ChatRequest.Messages[].Citations[].SourceDocument.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.Messages[].Citations[].SourceDocument.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Chat.Retrieve()`: `response.ChatResult.Chat.CreatedBy.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Chat.List()`: `response.ChatResults[].Chat.CreatedBy.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Chat.CreateStream()`: \n * `request.ChatRequest.Messages[].Citations[].SourceDocument.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Collections.AddItems()`: `response.Collection.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Collections.Create()`: \n * `request.CreateCollectionRequest.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.union(class (0)).Collection.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Collections.DeleteItem()`: `response.Collection.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Collections.Update()`: \n * `request.EditCollectionRequest.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Collections.UpdateItem()`: `response.Collection.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Collections.Retrieve()`: `response.Collection.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Collections.List()`: `response.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Documents.Retrieve()`: `response.Documents.Map<DocumentOrError>.union(Document).Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Documents.RetrieveByFacets()`: `response.Documents[].Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Insights.Retrieve()`: `response.GleanAssist.ActivityInsights[].User.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Messages.Retrieve()`: `response.SearchResponse.Results[].StructuredResults[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Pins.Update()`: `response.Attribution.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Pins.Retrieve()`: `response.Pin.Attribution.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Pins.List()`: `response.Pins[].Attribution.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Pins.Create()`: `response.Attribution.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Search.QueryAsAdmin()`: \n * `request.SearchRequest.SourceDocument.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.Results[].StructuredResults[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Search.Autocomplete()`: `response.Results[].Document.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Search.RetrieveFeed()`: \n * `request.FeedRequest.Categories[].Enum(cardStackPromo)` **Added**\n * `response.Results[]` **Changed**\n* `Glean.Client.Search.Recommendations()`: \n * `request.RecommendationsRequest.SourceDocument.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.Results[].StructuredResults[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Search.Query()`: \n * `request.SearchRequest.SourceDocument.Metadata.Author.RelatedDocuments[].Results[].StructuredResults[].CustomEntity.Roles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.Results[].StructuredResults[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Entities.List()`: `response.Results[].RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Entities.ReadPeople()`: `response.Results[].RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Shortcuts.Create()`: \n * `request.CreateShortcutRequest.Data.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.Shortcut.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Shortcuts.Retrieve()`: `response.Shortcut.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Shortcuts.List()`: `response.Shortcuts[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Shortcuts.Update()`: \n * `request.UpdateShortcutRequest.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n * `response.Shortcut.AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Verification.AddReminder()`: `response.Metadata.LastVerifier.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Verification.List()`: `response.Documents[].Metadata.LastVerifier.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Verification.Verify()`: `response.Metadata.LastVerifier.RelatedDocuments[].QuerySuggestion.Ranges[].Document.Metadata.Collections[].AddedRoles[].Group.Type.Enum(collectionAudience)` **Added**\n* `Glean.Client.Governance.Data.Policies.Retrieve()`: `response.Report.Config.AllowlistOptions.Regexes` **Added**\n* `Glean.Client.Governance.Data.Policies.Update()`: \n * `request.UpdateDlpReportRequest.Config.AllowlistOptions.Regexes` **Added**\n* `Glean.Client.Governance.Data.Policies.List()`: `response.Reports[].Config.AllowlistOptions.Regexes` **Added**\n* `Glean.Client.Governance.Data.Policies.Create()`: \n * `request.Request.Config.AllowlistOptions.Regexes` **Added**\n * `response.Report.Config.AllowlistOptions.Regexes` **Added**\n* `Glean.Client.Governance.Data.Reports.Create()`: \n * `request.Request.Config.AllowlistOptions.Regexes` **Added**\n"
generatedFiles:
- .devcontainer/README.md
- .devcontainer/devcontainer.json
Expand Down
2 changes: 1 addition & 1 deletion .speakeasy/gen.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ generation:
generateNewTests: true
skipResponseBodyAssertions: true
go:
version: 0.12.1
version: 0.12.2
additionalDependencies: {}
allowUnknownFieldsInWeakUnions: false
baseErrorName: GleanError
Expand Down
4 changes: 2 additions & 2 deletions .speakeasy/glean-merged-spec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ openapi: 3.0.0
info:
version: 0.9.0
title: Glean API
x-source-commit-sha: 52a3263df71e58b10c98865e6b4a6f9a29f293db
x-source-commit-sha: 0f65187cbe415aa9bbd8d5cda75fe609e3538f6e
description: |
# Introduction
In addition to the data sources that Glean has built-in support for, Glean also provides a REST API that enables customers to put arbitrary content in the search index. This is useful, for example, for doing permissions-aware search over content in internal tools that reside on-prem as well as for searching over applications that Glean does not currently support first class. In addition these APIs allow the customer to push organization data (people info, organization structure etc) into Glean.
Expand All @@ -22,7 +22,7 @@ info:
These API clients provide type-safe, idiomatic interfaces for working with Glean IndexingAPIs in your language of choice.
x-logo:
url: https://app.glean.com/images/glean-text2.svg
x-open-api-commit-sha: d3cdeccde1b5f13944a9e3958f651e8f61c667d6
x-open-api-commit-sha: 477252bebd9081325eba09b458b4a0a39904620b
x-speakeasy-name: 'Glean API'
servers:
- url: https://{instance}-be.glean.com
Expand Down
10 changes: 5 additions & 5 deletions .speakeasy/workflow.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ speakeasyVersion: 1.786.1
sources:
Glean API:
sourceNamespace: glean-api-specs
sourceRevisionDigest: sha256:979b3f1b9f64bbb58a59297a1984e17b9a8e6c7eed1d56fc712f5ffc3376c23d
sourceBlobDigest: sha256:d0cf8a3fb62165cb2a1797291d7213dbfab4e80a9d8435d2ac732046c9effb28
sourceRevisionDigest: sha256:10ff2c394d0c379a03a9a7639042b533868d0755cd10b0984279fb4dd054771d
sourceBlobDigest: sha256:d93dccf8902b2edf32a6fa5b1fca74676f22ad7c1c5d246c54b4394d3598d8f6
tags:
- latest
petstore-oas:
Expand All @@ -17,10 +17,10 @@ targets:
glean:
source: Glean API
sourceNamespace: glean-api-specs
sourceRevisionDigest: sha256:979b3f1b9f64bbb58a59297a1984e17b9a8e6c7eed1d56fc712f5ffc3376c23d
sourceBlobDigest: sha256:d0cf8a3fb62165cb2a1797291d7213dbfab4e80a9d8435d2ac732046c9effb28
sourceRevisionDigest: sha256:10ff2c394d0c379a03a9a7639042b533868d0755cd10b0984279fb4dd054771d
sourceBlobDigest: sha256:d93dccf8902b2edf32a6fa5b1fca74676f22ad7c1c5d246c54b4394d3598d8f6
codeSamplesNamespace: glean-api-specs-go-code-samples
codeSamplesRevisionDigest: sha256:be74c082657fbea40f18b707ef4a7d6d829b1c10ac2d8854c553726572f8ad4c
codeSamplesRevisionDigest: sha256:58141b009b2fde12061934da0353cf916e86b678a9464754c67dc678a401cdd0
petstore:
source: petstore-oas
sourceNamespace: petstore-oas
Expand Down
12 changes: 11 additions & 1 deletion RELEASES.md
Original file line number Diff line number Diff line change
Expand Up @@ -748,4 +748,14 @@ Based on:
### Generated
- [go v0.12.1] .
### Releases
- [Go v0.12.1] https://github.com/gleanwork/api-client-go/releases/tag/v0.12.1 - .
- [Go v0.12.1] https://github.com/gleanwork/api-client-go/releases/tag/v0.12.1 - .

## 2026-06-30 15:26:04
### Changes
Based on:
- OpenAPI Doc
- Speakeasy CLI 1.786.1 (2.913.3) https://github.com/speakeasy-api/speakeasy
### Generated
- [go v0.12.2] .
### Releases
- [Go v0.12.2] https://github.com/gleanwork/api-client-go/releases/tag/v0.12.2 - .
4 changes: 2 additions & 2 deletions glean.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,9 +166,9 @@ func WithTimeout(timeout time.Duration) SDKOption {
// New creates a new instance of the SDK with the provided options
func New(opts ...SDKOption) *Glean {
sdk := &Glean{
SDKVersion: "0.12.1",
SDKVersion: "0.12.2",
sdkConfiguration: config.SDKConfiguration{
UserAgent: "speakeasy-sdk/go 0.12.1 2.913.3 0.9.0 github.com/gleanwork/api-client-go",
UserAgent: "speakeasy-sdk/go 0.12.2 2.913.3 0.9.0 github.com/gleanwork/api-client-go",
ServerList: ServerList,
ServerVariables: []map[string]string{
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,14 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ
operations.ResponseBody2{
Collection: &components.Collection{
Name: "<value>",
Description: "whole busily jive hawk gee basic minus hence",
Description: "motionless whenever paintwork import over cuckoo",
AddedRoles: []components.UserRoleSpecification{
components.UserRoleSpecification{
Person: &components.Person{
Name: "George Clooney",
ObfuscatedID: "abc123",
},
Role: components.UserRoleAnswerModerator,
Role: components.UserRoleOwner,
},
},
RemovedRoles: []components.UserRoleSpecification{
Expand All @@ -90,7 +90,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ
},
},
},
ID: 158969,
ID: 363711,
Creator: &components.Person{
Name: "George Clooney",
ObfuscatedID: "abc123",
Expand All @@ -101,7 +101,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ
},
Items: []components.CollectionItem{
components.CollectionItem{
CollectionID: 110375,
CollectionID: 570197,
CreatedBy: &components.Person{
Name: "George Clooney",
ObfuscatedID: "abc123",
Expand Down Expand Up @@ -266,13 +266,13 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ
Name: "George Clooney",
ObfuscatedID: "abc123",
},
Role: components.UserRoleEditor,
Role: components.UserRoleAnswerModerator,
},
},
},
Collection: &components.Collection{
Name: "<value>",
Description: "wedge colorfully orientate rally",
Description: "athwart skateboard newsstand farm bourgeoisie ah how elliptical aha well-to-do",
AudienceFilters: []components.FacetFilter{
components.FacetFilter{
FieldName: types.String("type"),
Expand All @@ -288,7 +288,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ
},
},
},
ID: 131797,
ID: 643990,
Creator: &components.Person{
Name: "George Clooney",
ObfuscatedID: "abc123",
Expand All @@ -300,7 +300,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ
Children: []components.Collection{
components.Collection{
Name: "<value>",
Description: "outside yippee sidetrack mature regularly mouser inject worth",
Description: "woot purse salty even as advanced",
AudienceFilters: []components.FacetFilter{
components.FacetFilter{
FieldName: types.String("type"),
Expand All @@ -316,7 +316,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ
},
},
},
ID: 149448,
ID: 359978,
Creator: &components.Person{
Name: "George Clooney",
ObfuscatedID: "abc123",
Expand All @@ -328,7 +328,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ
},
},
},
ItemType: components.CollectionItemItemTypeCollection,
ItemType: components.CollectionItemItemTypeURL,
},
},
},
Expand Down
12 changes: 6 additions & 6 deletions tests/summarize_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,17 @@ func TestSummarize_Summarize(t *testing.T) {

res, err := s.Client.Documents.Summarize(ctx, components.SummarizeRequest{
DocumentSpecs: []components.DocumentSpecUnion{
components.CreateDocumentSpecUnionDocumentSpec2(
components.DocumentSpec2{
ID: "<id>",
},
),
components.CreateDocumentSpecUnionDocumentSpec4(
components.DocumentSpec4{
UgcType: components.DocumentSpecUgcType2Shortcuts,
UgcType: components.DocumentSpecUgcType2Artifacts,
UgcID: "<id>",
},
),
components.CreateDocumentSpecUnionDocumentSpec2(
components.DocumentSpec2{
ID: "<id>",
},
),
},
}, nil)
require.NoError(t, err)
Expand Down
Loading