From df2d1bc168134dc226d7a42bad07a0adfb681c4e Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Mon, 15 Jun 2026 03:57:20 +0000 Subject: [PATCH 1/2] ## Typescript SDK Changes: * `glean.agents.createAgent()`: **Added** * `glean.client.announcements.create()`: * `request.createAnnouncementRequest.body.structuredList[].document.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `response.body.structuredList[].document.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `glean.client.announcements.update()`: * `request.updateAnnouncementRequest.body.structuredList[].document.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `response.body.structuredList[].document.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `glean.client.answers.create()`: * `request.createAnswerRequest.data.addedRoles[].group.type.enum(collectionAudience)` **Added** * `response.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.answers.update()`: * `request.editAnswerRequest.addedRoles[].group.type.enum(collectionAudience)` **Added** * `response.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.answers.retrieve()`: `response.answerResult.answer.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.answers.list()`: `response.answerResults[].answer.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.chat.create()`: * `request.chatRequest.messages[].citations[].sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `response.messages[].citations[].sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `glean.client.chat.retrieve()`: `response.chatResult.chat.createdBy.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.chat.list()`: `response.chatResults[].chat.createdBy.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.chat.createStream()`: * `request.chatRequest.messages[].citations[].sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `glean.client.collections.addItems()`: `response.collection.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.collections.create()`: * `request.createCollectionRequest.addedRoles[].group.type.enum(collectionAudience)` **Added** * `response.union(class (0)).collection.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.collections.deleteItem()`: `response.collection.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.collections.update()`: * `request.editCollectionRequest.addedRoles[].group.type.enum(collectionAudience)` **Added** * `response.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.collections.updateItem()`: `response.collection.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.collections.retrieve()`: `response.collection.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.collections.list()`: `response.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.documents.retrieve()`: `response.documents.Map.union(Document).metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `glean.client.documents.retrieveByFacets()`: `response.documents[].metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `glean.client.insights.retrieve()`: `response.gleanAssist.activityInsights[].user.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.messages.retrieve()`: `response.searchResponse.results[].structuredResults[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.pins.update()`: `response.attribution.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.pins.retrieve()`: `response.pin.attribution.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.pins.list()`: `response.pins[].attribution.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.pins.create()`: `response.attribution.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.search.queryAsAdmin()`: * `request.searchRequest.sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `response.results[].structuredResults[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.search.autocomplete()`: `response.results[].document.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `glean.client.search.retrieveFeed()`: `response.results[]` **Changed** * `glean.client.search.recommendations()`: * `request.recommendationsRequest.sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `response.results[].structuredResults[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.search.query()`: * `request.searchRequest.sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].customEntity.roles[].group.type.enum(collectionAudience)` **Added** * `response.results[].structuredResults[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.entities.list()`: `response.results[].relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.entities.readPeople()`: `response.results[].relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.shortcuts.create()`: * `request.createShortcutRequest.data.addedRoles[].group.type.enum(collectionAudience)` **Added** * `response.shortcut.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.shortcuts.retrieve()`: `response.shortcut.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.shortcuts.list()`: `response.shortcuts[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.shortcuts.update()`: * `request.updateShortcutRequest.addedRoles[].group.type.enum(collectionAudience)` **Added** * `response.shortcut.addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.verification.addReminder()`: `response.metadata.lastVerifier.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.verification.list()`: `response.documents[].metadata.lastVerifier.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** * `glean.client.verification.verify()`: `response.metadata.lastVerifier.relatedDocuments[].querySuggestion.ranges[].document.metadata.collections[].addedRoles[].group.type.enum(collectionAudience)` **Added** --- .speakeasy/gen.lock | 180 ++++++++++------- .speakeasy/gen.yaml | 5 +- .speakeasy/glean-merged-spec.yaml | 183 +++++++++++------ .speakeasy/tests.arazzo.yaml | 16 ++ .speakeasy/workflow.lock | 12 +- README.md | 3 + RELEASES.md | 12 +- .../components/createworkflowrequest.md | 17 ++ docs/models/components/feedresult.md | 13 +- docs/models/components/group.md | 2 +- docs/models/components/grouptype.md | 4 +- docs/models/components/placementreason.md | 19 ++ docs/models/operations/createagentrequest.md | 19 ++ docs/sdks/agents/README.md | 89 +++++++++ examples/package-lock.json | 2 +- jsr.json | 2 +- package-lock.json | 4 +- package.json | 2 +- src/__tests__/agents.test.ts | 13 ++ src/__tests__/messages.test.ts | 2 +- .../internal/handler/generated_handlers.go | 1 + .../handler/pathpostrestapiv1agents.go | 83 ++++++++ .../pathpostrestapiv1createcollection.go | 20 +- .../components/createworkflowrequest.go | 34 ++++ .../sdk/models/components/feedresult.go | 36 ++++ .../sdk/models/components/grouptype.go | 19 +- .../sdk/models/operations/createagent.go | 57 ++++++ src/__tests__/summarize.test.ts | 7 +- src/funcs/agentsCreateAgent.ts | 184 ++++++++++++++++++ src/hooks/types.ts | 1 + src/lib/config.ts | 6 +- src/lib/dlv.ts | 54 ----- src/lib/encodings.ts | 2 +- src/lib/env.ts | 10 +- src/lib/is-plain-object.ts | 44 ----- src/lib/matchers.ts | 2 +- src/lib/primitives.ts | 16 ++ src/lib/sdks.ts | 71 +++++-- .../components/createworkflowrequest.ts | 47 +++++ src/models/components/feedresult.ts | 24 +++ src/models/components/grouptype.ts | 4 + src/models/components/index.ts | 1 + src/models/operations/createagent.ts | 50 +++++ src/models/operations/index.ts | 1 + src/react-query/agentsCreateAgent.ts | 115 +++++++++++ src/react-query/index.ts | 1 + src/sdk/agents.ts | 22 +++ 47 files changed, 1212 insertions(+), 299 deletions(-) create mode 100644 docs/models/components/createworkflowrequest.md create mode 100644 docs/models/components/placementreason.md create mode 100644 docs/models/operations/createagentrequest.md create mode 100644 src/__tests__/mockserver/internal/handler/pathpostrestapiv1agents.go create mode 100644 src/__tests__/mockserver/internal/sdk/models/components/createworkflowrequest.go create mode 100644 src/__tests__/mockserver/internal/sdk/models/operations/createagent.go create mode 100644 src/funcs/agentsCreateAgent.ts delete mode 100644 src/lib/dlv.ts delete mode 100644 src/lib/is-plain-object.ts create mode 100644 src/models/components/createworkflowrequest.ts create mode 100644 src/models/operations/createagent.ts create mode 100644 src/react-query/agentsCreateAgent.ts diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 2ecb4879..45929d6b 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,26 +1,26 @@ lockVersion: 2.0.0 id: 664aaca5-a41f-4434-8f2a-642dba92fe68 management: - docChecksum: f945598f65bd3d18fa64e0f4961a6114 + docChecksum: 512989817bbae5d578853c01870c22ce docVersion: 0.9.0 - speakeasyVersion: 1.771.0 - generationVersion: 2.893.0 - releaseVersion: 0.15.0 - configChecksum: d7aeaaf80f7cfb76de17ba8320320385 + speakeasyVersion: 1.778.0 + generationVersion: 2.904.2 + releaseVersion: 0.16.0 + configChecksum: beab47f1c79b84efeccc9b5ba7409ada repoURL: https://github.com/gleanwork/api-client-typescript.git installationURL: https://github.com/gleanwork/api-client-typescript published: true persistentEdits: - generation_id: a293fd51-7eb7-4acc-86d2-7d8d1ea6d862 - pristine_commit_hash: 14db97134d14e5430f6384479e8f27c56cb268bb - pristine_tree_hash: 4c0bb7318bf88151716ab3469dca9fdf534f5b99 + generation_id: 4dc05dea-08f2-45fa-9788-e5a8591d30ff + pristine_commit_hash: b2b619e10b8d124ef960d4fa888620876e5de08e + pristine_tree_hash: ce495527adc842605731696a8719a302dda5e170 features: typescript: acceptHeaders: 2.81.2 additionalDependencies: 0.1.0 additionalProperties: 0.1.3 constsAndDefaults: 0.1.14 - core: 3.27.0 + core: 3.31.1 defaultEnabledRetries: 0.1.0 deprecations: 2.81.1 devContainers: 2.90.1 @@ -621,6 +621,10 @@ trackedFiles: id: f21a858b0ee3 last_write_checksum: sha1:defea7f884bde1acb2a3dba1cf4219d98d7a3c70 pristine_git_object: 9ea17fd569159aaf08baeb47260290867b081c38 + docs/models/components/createworkflowrequest.md: + id: 83322c7324ff + last_write_checksum: sha1:4769be0c7086e1e550c0ca59d356e6e6211bb5b3 + pristine_git_object: f1d329e1dde4c50074905845f46dc8e19b2c59da docs/models/components/currentactiveusers.md: id: 94cb04038236 last_write_checksum: sha1:09a9c0128d594f0ee3def404ed327da7c385e5df @@ -1223,8 +1227,8 @@ trackedFiles: pristine_git_object: e33494edd59868c7580682b2e04cb2fd8d46126e docs/models/components/feedresult.md: id: c3084f56c0cc - last_write_checksum: sha1:5e80f8e5953bc206319e2c6fdfe919541401986b - pristine_git_object: a1891dca525d39a7ec1e7da485a2b37af9db2928 + last_write_checksum: sha1:2216e0c50fa9c23389a67c3085922065001ccb93 + pristine_git_object: d85147addc98b39be088ffb4d4e936c5999d1963 docs/models/components/feedresultcategory.md: id: 94c0249352b4 last_write_checksum: sha1:c790d45d892d55462e99b90ff87f04b94450a841 @@ -1415,12 +1419,12 @@ trackedFiles: pristine_git_object: 54e4ab90af7b2819197aee7ec057ffef72f364dd docs/models/components/group.md: id: f89a5bb77672 - last_write_checksum: sha1:6986dfb90b8ef8d48c47937bc5b5f5b65252ef94 - pristine_git_object: 18f64c7fbafc4af42cc99e27716fec6c402bdbf0 + last_write_checksum: sha1:bd0ca50c854bc9b6fb20651359039803c6e71e70 + pristine_git_object: 1beeb6586e2af3a35c4e991fe703609b6f76afba docs/models/components/grouptype.md: id: e2545abf3697 - last_write_checksum: sha1:07f317ad35201b920f36299a861c807f5cb1ee9f - pristine_git_object: 874d4ba57802b326703b0109bb6cac34bd44b5eb + last_write_checksum: sha1:d7aa8f964b58aebfa04d4f3d3f5054e406773d7b + pristine_git_object: 225de22e48b8d5c39486f3d082fa070da25ac59e docs/models/components/hidebuiltinfacet.md: id: 9466769b23b0 last_write_checksum: sha1:3644e00f0679122b8990851ec383eed6d65b5b4a @@ -1817,6 +1821,10 @@ trackedFiles: id: 13144145289b last_write_checksum: sha1:e5b05817aae9ac5835f0602c71242c4ca6e06494 pristine_git_object: ae27eac7dfd55251b07c82582cf66f4e3674d7ad + docs/models/components/placementreason.md: + id: 4aca343a58b8 + last_write_checksum: sha1:31cfe4cb23b1ad813abe043e5f8d9d8d15740ba7 + pristine_git_object: 041fac880aca7c8fd71516bc473c54f43302f6a8 docs/models/components/possiblevalue.md: id: 77671a7accb8 last_write_checksum: sha1:59a61ea5b060cb0a6f7debd975eb7167cfc16631 @@ -2513,6 +2521,10 @@ trackedFiles: id: 9ef1dc15a871 last_write_checksum: sha1:b29ac6513686dbe8391360b0aaf73e2e0d962953 pristine_git_object: a7f3afd0436d8128a45adae24671ce8956cbef64 + docs/models/operations/createagentrequest.md: + id: ef82cb982427 + last_write_checksum: sha1:4ac17027603bdc47cb73061468349b991adc5eb8 + pristine_git_object: 9754e52707c3063543c75d9302bc49b2cffda4c6 docs/models/operations/createannouncementrequest.md: id: 81c6a0fc912a last_write_checksum: sha1:bb1595544ff2ced7d40a298168ebcf288fc9935f @@ -2851,8 +2863,8 @@ trackedFiles: pristine_git_object: d660077d81220a7f0b093725c504fc9ed2db65ac docs/sdks/agents/README.md: id: 5965d8232fd8 - last_write_checksum: sha1:b9477381550cbf7e9cc5b727a324e78860c2f26c - pristine_git_object: 8600601e2061684fa33aa64f0e462d9555526461 + last_write_checksum: sha1:bd0d4ab68c59a784d39a64b9c94c6fcd23372a88 + pristine_git_object: f09256dedfcec8062b91a20447cb726f1c3aaf73 docs/sdks/announcements/README.md: id: 3d2e130a217c last_write_checksum: sha1:9955e9b871a2deaa2c17cd1c92fb4d34f7e05138 @@ -3011,20 +3023,20 @@ trackedFiles: pristine_git_object: 5a2797590d4be351d62915017d5b2a0f853537c8 jsr.json: id: 7f6ab7767282 - last_write_checksum: sha1:014b49ffae1d7ac5a340c18a5b6f43439cc3525b - pristine_git_object: a7a506e544f3ca249813877bb15728b6b3e6ff50 + last_write_checksum: sha1:5dc780d76edf1d053a36a88e2940b9aac1e81902 + pristine_git_object: 95d99feee8ffb6c8eaf44789444c5d7a15b149c0 package.json: id: 7030d0b2f71b - last_write_checksum: sha1:d268e47fa7ab495abbf7c8101716d76c4d0e5ee5 - pristine_git_object: adc877451cc22a768bae7be429484ee50f66f0df + last_write_checksum: sha1:dba380f37ead9b3db0f5caa895547aa65b3a811c + pristine_git_object: bf37df47256e71c297fad401c2d5fc32ad8b3380 src/__tests__/activities.test.ts: id: 65fa859b8f59 last_write_checksum: sha1:756bc40095f4495bbf62739b8218bb4a559a24f2 pristine_git_object: b35dd997cba626160e8f3d19dde1b1a151e6ad85 src/__tests__/agents.test.ts: id: 3cec9af43334 - last_write_checksum: sha1:dc7b20c4642f9a8a4865e4ba88905fe864588775 - pristine_git_object: a6b2dabfb4d72d71ff416da77d4d5b37328fb5a6 + last_write_checksum: sha1:322ebbdacb5ae43f808b56157a41829290e67064 + pristine_git_object: aa86b438333058efd56afeab2f821f5a61f6b727 src/__tests__/announcements.test.ts: id: 1fbbe739ff78 last_write_checksum: sha1:775233d320d0d015e40c78c7b6634e45c634d033 @@ -3123,8 +3135,8 @@ trackedFiles: pristine_git_object: d252821b825c62856886e3ab9287181d7ef7f9de src/__tests__/messages.test.ts: id: 39e293f09219 - last_write_checksum: sha1:17d923a23384341a26ce4774612e47a9bcfc8dc6 - pristine_git_object: 41c0b3c93454418989eac9a34b10c888541e3e2e + last_write_checksum: sha1:c78b09c09e64da0655a3e0ecbadabe82980ef7d1 + pristine_git_object: f390543460d7bd3c678c17579e755b9e06faac16 src/__tests__/mockserver/.gitignore: id: 4a7fc421b6b6 last_write_checksum: sha1:228e1b05712a973948fd771323a2140a3b355ff4 @@ -3179,8 +3191,8 @@ trackedFiles: pristine_git_object: af3a6d136d837850b34ed893a8faf800ea114721 src/__tests__/mockserver/internal/handler/generated_handlers.go: id: e6f590a8ce11 - last_write_checksum: sha1:1eb9d0e6e8fbc63374ae4fb971a191d2c68c86d0 - pristine_git_object: c4e300272b8d1f868e6d3b7188edcf6400c5e3b4 + last_write_checksum: sha1:f4e030afb44de8829fdc399f5e28b3023fc9775e + pristine_git_object: 97b57be32da124d39370ee1ee595fa12902ef4ba src/__tests__/mockserver/internal/handler/pathdeleterestapiindexcustommetadataschemagroupname.go: id: ef047f0e0f32 last_write_checksum: sha1:187ff16d05efa1c937632f61dd3f49e49691d5ff @@ -3361,6 +3373,10 @@ trackedFiles: id: 51fc76547f21 last_write_checksum: sha1:421f518475cf90a9c54d2e41d55ee249e9f56021 pristine_git_object: 5acf2b137d89d1ff391e8be56e0274fcd90f048e + src/__tests__/mockserver/internal/handler/pathpostrestapiv1agents.go: + id: 85f398739bf6 + last_write_checksum: sha1:6e348f8adc1b44a83b5be0b832f382a48cd6f2c5 + pristine_git_object: e77ee87e3a1cdc9bf8b18222cd8625304178155d src/__tests__/mockserver/internal/handler/pathpostrestapiv1autocomplete.go: id: d32f1906549a last_write_checksum: sha1:cc84ffd65ee53dca5807744a43698b1765f13e22 @@ -3387,8 +3403,8 @@ trackedFiles: pristine_git_object: 759610d9e14b656b2a8671c25618d94bd6dd13fb src/__tests__/mockserver/internal/handler/pathpostrestapiv1createcollection.go: id: a5a57be97594 - last_write_checksum: sha1:13cf640e79e5bf7989c31be9fa077662ef739a0d - pristine_git_object: c1c2a7152e65e91197ff9fc00f026b13d0d2b0c8 + last_write_checksum: sha1:748ef83883f0e5b80f0485e58338083412d8c37f + pristine_git_object: 5ff0665a4ef2a89c4ca46444ede954ccd7dba426 src/__tests__/mockserver/internal/handler/pathpostrestapiv1createshortcut.go: id: 440deca160f6 last_write_checksum: sha1:e2bba9884dd04f8d9b158c88fb32ff9f06687846 @@ -4037,6 +4053,10 @@ trackedFiles: id: 59bd2b7cc7be last_write_checksum: sha1:ec901959c231bd39aa7063257084b003da7ebedb pristine_git_object: 273744b9f8e6411bb38b40948742b26e254f5b87 + src/__tests__/mockserver/internal/sdk/models/components/createworkflowrequest.go: + id: dc7457146951 + last_write_checksum: sha1:3a0e02f2af14e940449f7a4c06a07395da7f1634 + pristine_git_object: 4622cd8647344580bd31564471b8b9915d32bc3c src/__tests__/mockserver/internal/sdk/models/components/currentactiveusers.go: id: c8daf25c6435 last_write_checksum: sha1:304f59048743349b27ecd9faf9f3cfc3a13e3e1f @@ -4515,8 +4535,8 @@ trackedFiles: pristine_git_object: c92a344643e978700da31b2f24afaf9d14fd8d69 src/__tests__/mockserver/internal/sdk/models/components/feedresult.go: id: 90772ce61c8a - last_write_checksum: sha1:243892cf45f659af919f14ed0a44b9284403be0f - pristine_git_object: a6784e34c5a3ca7fda9952163e08c96e424d2801 + last_write_checksum: sha1:b9ad7be8c5f4ae40f11e8fd9966a4e6f2e7d6d6a + pristine_git_object: a9eb79789d8b314275ec0a7fa5f5cff30a3184a8 src/__tests__/mockserver/internal/sdk/models/components/followupaction.go: id: b87db474fc6a last_write_checksum: sha1:94c11e6ccb0d238213354241dff0baa101808b64 @@ -4675,8 +4695,8 @@ trackedFiles: pristine_git_object: 9649c6dd75a6c4ec4b4af7fbd65fe9eda7201944 src/__tests__/mockserver/internal/sdk/models/components/grouptype.go: id: 505fcb5dcdbe - last_write_checksum: sha1:f0b30f772c774164bf00f434d14f62ec10394165 - pristine_git_object: d57e2d04addb72b4ac2015a1990d01fd7dec3886 + last_write_checksum: sha1:fdb3ca1f10d0bf29e517232685192db5d4534948 + pristine_git_object: 14c7a2d24bc7b745cb23e14020c38aa06de71c24 src/__tests__/mockserver/internal/sdk/models/components/hotword.go: id: 335d40d15f4d last_write_checksum: sha1:2546d99bb6546aeb334a26b203686f7e61905810 @@ -5501,6 +5521,10 @@ trackedFiles: id: e0a908b08e1a last_write_checksum: sha1:ecebe8b6fa59641db9cd9063683aaa0af1f66796 pristine_git_object: 9be599dd91f1af4df19623b571b94b06b9f9943e + src/__tests__/mockserver/internal/sdk/models/operations/createagent.go: + id: a5aa85133e31 + last_write_checksum: sha1:2f797ddac7a89d4f54ee825c9d6089d71673b0b5 + pristine_git_object: 4b21cd1fa56cd7e983ce047cd94b1e2f6e9b4b26 src/__tests__/mockserver/internal/sdk/models/operations/createandstreamrun.go: id: c5efccd6c1a6 last_write_checksum: sha1:2c1676483660c4839ec1d280adeea41859ab8dc7 @@ -6103,8 +6127,8 @@ trackedFiles: pristine_git_object: c747483d172c06689dc66e150b2fbf704b483842 src/__tests__/summarize.test.ts: id: 3105d6ebc7eb - last_write_checksum: sha1:dfb185c744196a1c04135d609d44ccdaa541d5d4 - pristine_git_object: a1e80406504d94388ad5335968a981e0cc471443 + last_write_checksum: sha1:1e95e1b90340a78c75fff0ad8c359e2bb6aa63a9 + pristine_git_object: 05ec6a88629b5f9b55c270e74c4158318d3a5334 src/__tests__/testclient.ts: id: f142c080bff8 last_write_checksum: sha1:3a38647391f52221c009a9273eebf90793b3d430 @@ -6125,6 +6149,10 @@ trackedFiles: id: f431fdbcd144 last_write_checksum: sha1:1807da249710bc365f5fe3425640b246d714f3ec pristine_git_object: 98cadc8fe5496bfbf22b46cf0c81ff4daad6f2c9 + src/funcs/agentsCreateAgent.ts: + id: 51073dbdf0f4 + last_write_checksum: sha1:2b12fc1b4b1afb1b6a105fdfd11a0af5521095d7 + pristine_git_object: 5535825e15a675cf56593853fd56fa381b7eecda src/funcs/agentsEditAgent.ts: id: 973833b5affd last_write_checksum: sha1:4c530644720339d3f71c365617d8d54291a48203 @@ -6651,8 +6679,8 @@ trackedFiles: pristine_git_object: 9345e1adf171233bc43038c328fdce155725936a src/hooks/types.ts: id: 2a02d86ec24f - last_write_checksum: sha1:0d1ce704507f473de71231fb9829977f5b485152 - pristine_git_object: de447b53379c8f68756cd3e6ac9af0d63b5a362a + last_write_checksum: sha1:bd37543762738993a7de7873c7f11acb9da2f007 + pristine_git_object: cbb35a6c9bb1d3a47635da839c5f2a22924237c7 src/index.ts: id: c5fb850250c7 last_write_checksum: sha1:7ed2a5fa061eff70d4a20f33fc3269c60a5b1821 @@ -6663,20 +6691,16 @@ trackedFiles: pristine_git_object: 42d9739ab67c2fec0689f83777ffa5e1f875e5d5 src/lib/config.ts: id: 320761608fb3 - last_write_checksum: sha1:8988c4cac3c99d23edb16f1ca20c93582464ba54 - pristine_git_object: b6d1061419da5009e38109619ee90b671ed33256 - src/lib/dlv.ts: - id: b1988214835a - last_write_checksum: sha1:eaac763b22717206a6199104e0403ed17a4e2711 - pristine_git_object: f4c75aca30d4e0610454c7836af262a5a0cf7623 + last_write_checksum: sha1:aeaed294ba5f0d31bb4fd7c20be11b6abc946798 + pristine_git_object: 8a31b4f801f995c93eeca7b4be3a6701ea4e3852 src/lib/encodings.ts: id: 3bd8ead98afd - last_write_checksum: sha1:2d858f2b359dc728c16796bca82be93a20526397 - pristine_git_object: f98d2a761e1f125dd896dc776660e06b69cb215c + last_write_checksum: sha1:a74725064d06b6994b95873c037975d2f2e63467 + pristine_git_object: 49f15904923362434dfcdd02476c0487210d2f1a src/lib/env.ts: id: c52972a3b198 - last_write_checksum: sha1:673e69645f2811c605fc32311d0d9c308bc0ce92 - pristine_git_object: 09808457c87095a6bd182cc21513c7c1de71da03 + last_write_checksum: sha1:02e4ab0da51816bc062d2a91440dc0fe6c3f5f5b + pristine_git_object: e870c7c3f1b1be519f11fc3ddfb5e019b7fd9f07 src/lib/files.ts: id: e5efa54fcb95 last_write_checksum: sha1:eca69f15b691e2fbe6d5b15e9b84add4c730c3d7 @@ -6685,22 +6709,18 @@ trackedFiles: id: 63a80782d37e last_write_checksum: sha1:e60a1f9c9ffffd11bcf7fd47e51ac93f4ec1ba2d pristine_git_object: 326ee1a058794d1388fbb80359df9cb21e58566e - src/lib/is-plain-object.ts: - id: b9862591096a - last_write_checksum: sha1:7d043eeb4ab74f94b84076f2cd455e589ad0d7c5 - pristine_git_object: 096b49bf45db19c025e039486f55c6acfb021e81 src/lib/logger.ts: id: 7ee7741a02bf last_write_checksum: sha1:6615bc573f4a3922bb6c8cf8080142d9d8afd1ef pristine_git_object: 323f1895a0266be873f16a924dd58fa500dc97e5 src/lib/matchers.ts: id: d54b2253b719 - last_write_checksum: sha1:98c9ab25299e993cf2334193dcd2ade0703ae664 - pristine_git_object: 5fda5dc2d12ec1e1490aa584f91587b6b6fee9ff + last_write_checksum: sha1:960467ff4b090df2993571e38e87838c3488c254 + pristine_git_object: cb6c673ecd99bb96255af6e2b8c03b5c733b5e6e src/lib/primitives.ts: id: 74859f750b28 - last_write_checksum: sha1:ec6e7e036c52880b3dc5aab709d3b0395085e3a8 - pristine_git_object: bdff1670cd1cb5c37b39df43d8573616e7a568a7 + last_write_checksum: sha1:96ddf40b245c7dc6bd19b8909ee45811f1cebe67 + pristine_git_object: f7ad60198d532112e8c6532e2a82a73b877d2ba8 src/lib/retries.ts: id: b24a69d15639 last_write_checksum: sha1:016edbbc4d9ac3b0be7760e034334e7bd7283a77 @@ -6711,8 +6731,8 @@ trackedFiles: pristine_git_object: 094499f7b29dae06a9ba30b925ab332d8b8ed924 src/lib/sdks.ts: id: 8a6d91f1218d - last_write_checksum: sha1:63e16a3d04be01819aaf5ca3a290432df37cd1f1 - pristine_git_object: 83fd9f2f3b4fce21cf7061d7e17f64a4623531f9 + last_write_checksum: sha1:fcb2dc35a95517a163f31e40492448e58d3cda02 + pristine_git_object: b4e992028cf5f8236520157092202a96efc8d3d9 src/lib/security.ts: id: 0502afa7922e last_write_checksum: sha1:ce5bbb9ead63d46dd17af6d34b8aeee5dc31c445 @@ -7145,6 +7165,10 @@ trackedFiles: id: 9b54d94f2354 last_write_checksum: sha1:0ca59c07954eb36619123c49e2cffe4103abdbdc pristine_git_object: 4a6f523321261378ff973b5f7c87f4416497f331 + src/models/components/createworkflowrequest.ts: + id: eafdae82580f + last_write_checksum: sha1:e8c2826df0be18fced297f6fae25c16f783cfb55 + pristine_git_object: 87dbb0968b30dfdb07fa8271e6520d72e2a85df1 src/models/components/currentactiveusers.ts: id: eccca3ab8d0a last_write_checksum: sha1:143ed170b408021d369aaa1ff50fb3e9421f76f8 @@ -7623,8 +7647,8 @@ trackedFiles: pristine_git_object: ec512af99670430c927b57b2fcb360c620f56cf7 src/models/components/feedresult.ts: id: 94d90ce484f6 - last_write_checksum: sha1:9c59068e3f8c8051e4bdb24b4898076bd43a28f5 - pristine_git_object: 715a3be990b6ff27c6bde3f9b6cef0ff9fc091b8 + last_write_checksum: sha1:7da058d7021571ef8bf02c7e56e5a243c195e7dd + pristine_git_object: 08ce7675107279057ad617fc98fc21e27277559f src/models/components/followupaction.ts: id: 0b8a71fb6ea2 last_write_checksum: sha1:ea9d1e5a53384164dc8d63d3ff831a332a5f2fed @@ -7783,8 +7807,8 @@ trackedFiles: pristine_git_object: baba2b6b24544687173903b56f54dba284edc06e src/models/components/grouptype.ts: id: 1f9bb7d3a232 - last_write_checksum: sha1:a03cc109813e9af7c0710441afb9fc1a54103dec - pristine_git_object: 9573c93d9582c1ff17f507fb7974254c01a0fbef + last_write_checksum: sha1:68fca18ff239d772d839e3e5245eaf518ac2ed34 + pristine_git_object: 07b88ca173c14504cbc87d2da757e7bec16fa22d src/models/components/hotword.ts: id: de738accaf24 last_write_checksum: sha1:f36867c5db942196a9e8d26d3992f496b6f3e1f6 @@ -7799,8 +7823,8 @@ trackedFiles: pristine_git_object: c1b51fb164e5fddc23f344a60899933a91902f4c src/models/components/index.ts: id: 0aa842dce54d - last_write_checksum: sha1:cd74b2d7a599d681b13654cff6ea12d680caf834 - pristine_git_object: 39c3bbf7fbb3b79161f892f52f9e5454be73c26c + last_write_checksum: sha1:4c909842ebcbe551c41567bfb930ce16a97f3b72 + pristine_git_object: 8db1417532830736bc9af061d595a065b0ef83bc src/models/components/indexdocumentrequest.ts: id: deb13e2cdc65 last_write_checksum: sha1:33e2093c7fcdd3c90ef45c48e7b79c4cb2aea6e5 @@ -8641,6 +8665,10 @@ trackedFiles: id: 6165e1b3f420 last_write_checksum: sha1:59d4604c2924d071747641651e7782eee515a388 pristine_git_object: 893a6744dc7f30645fa566b5dfb31b8b1990d5d0 + src/models/operations/createagent.ts: + id: 282f2dd97fa5 + last_write_checksum: sha1:abdc3a721692d13e201d4ffc291a8ee7de3ac8cc + pristine_git_object: cbb67b8ff5c79a5a3f5ba9c2c86797a9694f2302 src/models/operations/createannouncement.ts: id: 054e96d3f08d last_write_checksum: sha1:93235605b6e55b9e07e603b3c128ab7b11a869bb @@ -8831,8 +8859,8 @@ trackedFiles: pristine_git_object: 1b3cfa0bc2cf2bbaee395c614cfc4b84e4de23e7 src/models/operations/index.ts: id: 0d9ffaf774d2 - last_write_checksum: sha1:7f57611b0e9d685336d47715ac330a3c813b6747 - pristine_git_object: 21dec9abaa9c5d4f8aef07a83318eb9d1cc2a4d0 + last_write_checksum: sha1:e4dc353643957b25075f522fdb6bad0a9153b23e + pristine_git_object: ce2c6548073c23d47199510971cf2cf5d3782776 src/models/operations/insights.ts: id: 7bef0edaab32 last_write_checksum: sha1:37db16bc7603defd715210dfd8c12de88bde8b72 @@ -8961,6 +8989,10 @@ trackedFiles: id: 8d58d2bd1914 last_write_checksum: sha1:68662ac01bb2a3810328c1c1b5c9523ca5e47698 pristine_git_object: 01b38b63d6e5cf3d4fa51c0758d0b4b242d08bb2 + src/react-query/agentsCreateAgent.ts: + id: f764965707fa + last_write_checksum: sha1:d5162dff5591bb581812cac8b09e45b94b03a3c7 + pristine_git_object: 3e1e379c2582a6cf43f207ee536704ec648e222d src/react-query/agentsEditAgent.ts: id: 3b25e9fb1e70 last_write_checksum: sha1:fd63f501a94613596c4cbcac0712e0072664b8fb @@ -9359,8 +9391,8 @@ trackedFiles: pristine_git_object: ddfc71ec2819c805181157d90577dd8cdca02cd9 src/react-query/index.ts: id: 9e975471aa65 - last_write_checksum: sha1:36f57a340e68a513f44c2e39be08255529f88138 - pristine_git_object: a72f35ae7fbb48ac09058cf421dfa0e730a662d7 + last_write_checksum: sha1:de22c83ffe4c2bd2b37be9746fb4582ef91148d9 + pristine_git_object: 6eefb55049a95499d65ce6606dc8f5f92349a1ae src/react-query/indexingAuthenticationRotateToken.ts: id: e56c0845e38e last_write_checksum: sha1:035d7baae9a7fd7c32f69211cfe85b0f6ccbbf8c @@ -9555,8 +9587,8 @@ trackedFiles: pristine_git_object: 22d7e4d2d9a50eed24ca462edf35cc26d5cb2d7c src/sdk/agents.ts: id: a103cd018c9b - last_write_checksum: sha1:4b42e56025a0b9f6742b5b6d275233004870e31a - pristine_git_object: a0853ebf3b0aa4bcbbe0cd1264b2460052ec74d8 + last_write_checksum: sha1:0b0c01fc18004a1167858b0bf8ffb1d77df1f101 + pristine_git_object: 3649e25707e6cacffe03953eafb7b7103d90f442 src/sdk/announcements.ts: id: bab6954d6fdf last_write_checksum: sha1:93294e5724028d07a0f9796519179222808b89a9 @@ -10677,6 +10709,13 @@ examples: application/json: {"status": "MISSING"} "400": application/json: {} + createAgent: + speakeasy-default-create-agent: + requestBody: + application/json: {} + responses: + "200": + application/json: {"workflow": {"author": {"name": "George Clooney", "obfuscatedId": "abc123"}, "lastDraftSavedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "lastUpdatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}}} examplesVersion: 1.0.2 generatedTests: activity: "2025-05-05T15:08:35-05:00" @@ -10836,7 +10875,8 @@ generatedTests: delete_/rest/api/index/custom-metadata/schema/{groupName}: "2026-06-05T17:32:08Z" getDatasourceCredentialStatus: "2026-06-05T17:32:08Z" rotateDatasourceCredentials: "2026-06-05T17:32:08Z" -releaseNotes: "## Typescript SDK Changes:\n* `glean.client.chat.create()`: \n * `request.chatRequest.messages[].citations[].sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n * `response` **Changed** (Breaking ⚠️)\n* `glean.client.collections.addItems()`: `response` **Changed** (Breaking ⚠️)\n* `glean.chat.getChatFile()`: **Added**\n* `glean.agents.editAgent()`: **Added**\n* `glean.entities.getPersonPhoto()`: **Added**\n* `glean.tools.getActionPackAuthStatus()`: **Added**\n* `glean.tools.authorizeActionPack()`: **Added**\n* `glean.indexing.customMetadata.upsert()`: **Added**\n* `glean.indexing.customMetadata.delete()`: **Added**\n* `glean.indexing.customMetadata.getSchema()`: **Added**\n* `glean.indexing.customMetadata.upsertSchema()`: **Added**\n* `glean.indexing.customMetadata.deleteSchema()`: **Added**\n* `glean.troubleshooting.post/api/index/v1/debug/{datasource}/document/events()`: **Added**\n* `glean.datasources.getDatasourceCredentialStatus()`: **Added**\n* `glean.datasources.rotateDatasourceCredentials()`: **Added**\n* `glean.client.activity.feedback()`: \n * `request.feedback1.category` **Changed**\n* `glean.client.announcements.create()`: \n * `request.createAnnouncementRequest.body.structuredList[].document.metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n * `response` **Changed**\n* `glean.client.announcements.update()`: \n * `request.updateAnnouncementRequest.body.structuredList[].document.metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n * `response` **Changed**\n* `glean.client.answers.create()`: \n * `request.createAnswerRequest.data.addedRoles[].person.relatedDocuments[]` **Changed**\n * `response` **Changed**\n* `glean.client.answers.update()`: \n * `request.editAnswerRequest.addedRoles[].person.relatedDocuments[]` **Changed**\n * `response` **Changed**\n* `glean.client.answers.retrieve()`: `response.answerResult.answer` **Changed**\n* `glean.client.answers.list()`: `response.answerResults[].answer` **Changed**\n* `glean.client.chat.retrieve()`: `response.chatResult.chat.createdBy.relatedDocuments[]` **Changed**\n* `glean.client.chat.list()`: `response.chatResults[].chat.createdBy.relatedDocuments[]` **Changed**\n* `glean.client.chat.createStream()`: \n * `request.chatRequest.messages[].citations[].sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n* `glean.client.collections.create()`: \n * `request.createCollectionRequest.addedRoles[].person.relatedDocuments[]` **Changed**\n * `response.union(class (0))` **Changed**\n * `errorCode.enum(corruptItem)` **Added**\n* `glean.client.collections.delete()`: `errorCode.enum(corruptItem)` **Added**\n* `glean.client.collections.deleteItem()`: `response.collection` **Changed**\n* `glean.client.collections.update()`: \n * `request.editCollectionRequest.addedRoles[].person.relatedDocuments[]` **Changed**\n * `response` **Changed**\n * `errorCode.enum(corruptItem)` **Added**\n* `glean.client.collections.updateItem()`: `response.collection` **Changed**\n* `glean.client.collections.retrieve()`: `response` **Changed**\n* `glean.client.collections.list()`: `response.collections[]` **Changed**\n* `glean.client.documents.retrieve()`: `response.documents.Map.union(Document).metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n* `glean.client.documents.retrieveByFacets()`: `response.documents[].metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n* `glean.client.insights.retrieve()`: \n * `request.insightsRequest` **Changed**\n * `response` **Changed**\n* `glean.client.messages.retrieve()`: `response.searchResponse.results[].structuredResults[]` **Changed**\n* `glean.client.pins.update()`: `response.attribution.relatedDocuments[]` **Changed**\n* `glean.client.pins.retrieve()`: `response.pin.attribution.relatedDocuments[]` **Changed**\n* `glean.client.pins.list()`: `response.pins[].attribution.relatedDocuments[]` **Changed**\n* `glean.client.pins.create()`: `response.attribution.relatedDocuments[]` **Changed**\n* `glean.client.search.queryAsAdmin()`: \n * `request.searchRequest.sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n * `response.results[].structuredResults[]` **Changed**\n* `glean.client.search.autocomplete()`: `response.results[].document.metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n* `glean.client.search.retrieveFeed()`: \n * `request.feedRequest.categories[]` **Changed**\n * `response.results[]` **Changed**\n* `glean.client.search.recommendations()`: \n * `request.recommendationsRequest.sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n * `response.results[].structuredResults[]` **Changed**\n* `glean.client.search.query()`: \n * `request.searchRequest.sourceDocument.metadata.author.relatedDocuments[].results[].structuredResults[].answer` **Changed**\n * `response.results[].structuredResults[]` **Changed**\n* `glean.client.entities.list()`: `response.results[].relatedDocuments[]` **Changed**\n* `glean.client.entities.readPeople()`: `response.results[].relatedDocuments[]` **Changed**\n* `glean.client.shortcuts.create()`: \n * `request.createShortcutRequest.data.addedRoles[].person.relatedDocuments[]` **Changed**\n * `response.shortcut.addedRoles[].person.relatedDocuments[]` **Changed**\n* `glean.client.shortcuts.retrieve()`: `response.shortcut.addedRoles[].person.relatedDocuments[]` **Changed**\n* `glean.client.shortcuts.list()`: `response.shortcuts[].addedRoles[].person.relatedDocuments[]` **Changed**\n* `glean.client.shortcuts.update()`: \n * `request.updateShortcutRequest.addedRoles[].person.relatedDocuments[]` **Changed**\n * `response.shortcut.addedRoles[].person.relatedDocuments[]` **Changed**\n* `glean.client.verification.addReminder()`: `response.metadata.lastVerifier.relatedDocuments[]` **Changed**\n* `glean.client.verification.list()`: `response.documents[].metadata.lastVerifier.relatedDocuments[]` **Changed**\n* `glean.client.verification.verify()`: `response.metadata.lastVerifier.relatedDocuments[]` **Changed**\n" + createAgent: "2026-06-15T03:54:22Z" +releaseNotes: "## Typescript 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.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()`: `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" generatedFiles: - .devcontainer/README.md - .devcontainer/devcontainer.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index de35f901..96f14f07 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -35,7 +35,7 @@ generation: generateNewTests: true skipResponseBodyAssertions: true typescript: - version: 0.15.0 + version: 0.16.0 acceptHeaderEnum: true additionalDependencies: dependencies: {} @@ -74,6 +74,7 @@ typescript: ./hooks/*.js: ./src/hooks/*.ts additionalScripts: {} alwaysIncludeInboundAndOutbound: false + apiPromiseHelpers: false author: Speakeasy baseErrorName: GleanBaseError clientServerStatusCodesAsErrors: true @@ -84,6 +85,7 @@ typescript: enableReactQuery: true enumFormat: union envVarPrefix: GLEAN + eventStreamClassName: EventStream exportZodModelNamespace: false fixEnumNameSanitization: false flatAdditionalProperties: false @@ -116,6 +118,7 @@ typescript: preApplyUnionDiscriminators: true preserveModelFieldNames: false privateIdentifierPrefix: '#' + requestExtras: false responseFormat: flat sseFlatResponse: false templateVersion: v2 diff --git a/.speakeasy/glean-merged-spec.yaml b/.speakeasy/glean-merged-spec.yaml index 78ed030c..64d15ae6 100644 --- a/.speakeasy/glean-merged-spec.yaml +++ b/.speakeasy/glean-merged-spec.yaml @@ -2,7 +2,7 @@ openapi: 3.0.0 info: version: 0.9.0 title: Glean API - x-source-commit-sha: 8041c7f73ed7b1a8bb52c21b4736355b3d3ac705 + x-source-commit-sha: cf15fd506176731ed4902240d191c4b188abe40b 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. @@ -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: bcfb45a263878a9d08bcb4117a44e970b498dc10 + x-open-api-commit-sha: 17892576626fe616bf9f0ca9da2fce86a173abc3 x-speakeasy-name: 'Glean API' servers: - url: https://{instance}-be.glean.com @@ -910,6 +910,40 @@ paths: description: Internal server error. security: - APIToken: [] + /rest/api/v1/agents: + post: + tags: + - Agents + summary: Create an agent + description: Create an agent. + operationId: createAgent + x-visibility: Preview + parameters: + - $ref: "#/components/parameters/locale" + - $ref: "#/components/parameters/timezoneOffset" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateWorkflowRequest" + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/CreateWorkflowResponse" + "400": + description: Bad request + "401": + description: Not Authorized + "403": + description: Forbidden + "500": + description: Internal server error + security: + - APIToken: [] /rest/api/v1/agents/{agent_id}: get: tags: @@ -6019,6 +6053,8 @@ components: GroupType: type: string description: The type of user group + x-enumDescriptions: + COLLECTION_AUDIENCE: Refers to any viewers of the Collection. enum: - DEPARTMENT - ALL @@ -6028,6 +6064,9 @@ components: - LOCATION - REGION - EXTERNAL_GROUP + - COLLECTION_AUDIENCE + x-speakeasy-enum-descriptions: + COLLECTION_AUDIENCE: Refers to any viewers of the Collection. Group: required: - type @@ -8990,6 +9029,80 @@ components: items: type: string description: IDs of files to delete. + WorkflowDraftableProperties: + properties: + name: + type: string + description: The name of the workflow. + WorkflowMutableProperties: + type: object + allOf: + - $ref: "#/components/schemas/WorkflowDraftableProperties" + - type: object + CreateWorkflowRequest: + allOf: + - $ref: "#/components/schemas/WorkflowMutableProperties" + - type: object + properties: + transient: + type: boolean + description: Used to create a transient workflow. + parentWorkflowId: + type: string + description: id of the parent workflow for transient workflows + WorkflowMetadata: + allOf: + - type: object + properties: + author: + $ref: "#/components/schemas/Person" + createTimestamp: + type: integer + description: Server Unix timestamp of the creation time. + lastUpdateTimestamp: + type: integer + description: Server Unix timestamp of the last update time. + lastDraftSavedAt: + type: integer + description: Server Unix timestamp of the last time the draft was saved. + lastDraftSavedBy: + description: The person who last saved the draft. + $ref: "#/components/schemas/Person" + lastDraftGitAuthorId: + type: string + description: ID of the VCS user (e.g. GitHub username) who last saved the draft. Set only by the draft save path via the external Git integration API. + lastUpdatedBy: + $ref: "#/components/schemas/Person" + AttributionProperties: {} + Workflow: + allOf: + - $ref: "#/components/schemas/PermissionedObject" + - $ref: "#/components/schemas/WorkflowMutableProperties" + - $ref: "#/components/schemas/WorkflowMetadata" + - $ref: "#/components/schemas/AttributionProperties" + - type: object + properties: + id: + type: string + description: The ID of the workflow. + verified: + type: boolean + readOnly: true + description: When present, indicates this workflow is admin-verified. Set via the dedicated admin settings endpoint, not by regular edits. + showOrganizationAsAuthor: + type: boolean + readOnly: true + description: When true, displays organization name instead of author name in agent card. Set via the dedicated admin settings endpoint, not by regular edits. + WorkflowResult: + type: object + required: + - workflow + properties: + workflow: + $ref: "#/components/schemas/Workflow" + CreateWorkflowResponse: + allOf: + - $ref: "#/components/schemas/WorkflowResult" Agent: title: Agent type: object @@ -9042,16 +9155,6 @@ components: message: type: string description: Client-facing error message describing what went wrong - WorkflowDraftableProperties: - properties: - name: - type: string - description: The name of the workflow. - WorkflowMutableProperties: - type: object - allOf: - - $ref: "#/components/schemas/WorkflowDraftableProperties" - - type: object EditWorkflowRequest: allOf: - $ref: "#/components/schemas/WorkflowMutableProperties" @@ -11310,7 +11413,6 @@ components: description: A list of removed user roles for the Workflow. items: $ref: "#/components/schemas/UserRoleSpecification" - AttributionProperties: {} PromptTemplate: allOf: - $ref: "#/components/schemas/PromptTemplateMutableProperties" @@ -11386,55 +11488,6 @@ components: runCount: $ref: "#/components/schemas/CountInfo" description: This tracks how many times this prompt template was run. If user runs a prompt template after modifying the original one, it still counts as a run for the original template. - WorkflowMetadata: - allOf: - - type: object - properties: - author: - $ref: "#/components/schemas/Person" - createTimestamp: - type: integer - description: Server Unix timestamp of the creation time. - lastUpdateTimestamp: - type: integer - description: Server Unix timestamp of the last update time. - lastDraftSavedAt: - type: integer - description: Server Unix timestamp of the last time the draft was saved. - lastDraftSavedBy: - description: The person who last saved the draft. - $ref: "#/components/schemas/Person" - lastDraftGitAuthorId: - type: string - description: ID of the VCS user (e.g. GitHub username) who last saved the draft. Set only by the draft save path via the external Git integration API. - lastUpdatedBy: - $ref: "#/components/schemas/Person" - Workflow: - allOf: - - $ref: "#/components/schemas/PermissionedObject" - - $ref: "#/components/schemas/WorkflowMutableProperties" - - $ref: "#/components/schemas/WorkflowMetadata" - - $ref: "#/components/schemas/AttributionProperties" - - type: object - properties: - id: - type: string - description: The ID of the workflow. - verified: - type: boolean - readOnly: true - description: When present, indicates this workflow is admin-verified. Set via the dedicated admin settings endpoint, not by regular edits. - showOrganizationAsAuthor: - type: boolean - readOnly: true - description: When true, displays organization name instead of author name in agent card. Set via the dedicated admin settings endpoint, not by regular edits. - WorkflowResult: - type: object - required: - - workflow - properties: - workflow: - $ref: "#/components/schemas/Workflow" UserActivity: properties: actor: @@ -11639,6 +11692,12 @@ components: rank: type: integer description: Rank of the result. Rank is suggested by server. Client side rank may differ. + placementReason: + type: string + enum: + - ORGANIC + - PROMO + description: Placement source for ranked feed results. ORGANIC means the card was emitted by normal feed ranking. PROMO means the card was inserted by the homepage cards promo framework. FeedResponse: required: - serverTimestamp diff --git a/.speakeasy/tests.arazzo.yaml b/.speakeasy/tests.arazzo.yaml index de460d26..6b035185 100644 --- a/.speakeasy/tests.arazzo.yaml +++ b/.speakeasy/tests.arazzo.yaml @@ -164589,3 +164589,19 @@ workflows: type: simple x-speakeasy-test-group: Datasources x-speakeasy-test-rebuild: true + - workflowId: createAgent + steps: + - stepId: test + operationId: createAgent + requestBody: + contentType: application/json + payload: {} + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"workflow":{"author":{"name":"George Clooney","obfuscatedId":"abc123"},"lastDraftSavedBy":{"name":"George Clooney","obfuscatedId":"abc123"},"lastUpdatedBy":{"name":"George Clooney","obfuscatedId":"abc123"}}} + type: simple + x-speakeasy-test-group: Agents + x-speakeasy-test-rebuild: true diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 02708a10..9f472c23 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.771.0 +speakeasyVersion: 1.778.0 sources: Glean API: sourceNamespace: glean-api-specs - sourceRevisionDigest: sha256:847b1f126f78c86bb63c1c27b6053ba6a9afe8855aab3e82d1f7f71501a5e840 - sourceBlobDigest: sha256:b685acc261c79f1c7579b236eaff1ea63982eb1f4be4c318bd6c9a24998c6132 + sourceRevisionDigest: sha256:480b2df77c4b26eed2339eb9d3a2ad6614664268a99605cb246c959e030c5fe5 + sourceBlobDigest: sha256:d18d0e969d05e3582691328db06528a6ce3273c5c03f221a1d6c095ef6a7b1e7 tags: - latest Glean Client API: @@ -17,10 +17,10 @@ targets: glean: source: Glean API sourceNamespace: glean-api-specs - sourceRevisionDigest: sha256:847b1f126f78c86bb63c1c27b6053ba6a9afe8855aab3e82d1f7f71501a5e840 - sourceBlobDigest: sha256:b685acc261c79f1c7579b236eaff1ea63982eb1f4be4c318bd6c9a24998c6132 + sourceRevisionDigest: sha256:480b2df77c4b26eed2339eb9d3a2ad6614664268a99605cb246c959e030c5fe5 + sourceBlobDigest: sha256:d18d0e969d05e3582691328db06528a6ce3273c5c03f221a1d6c095ef6a7b1e7 codeSamplesNamespace: glean-api-specs-typescript-code-samples - codeSamplesRevisionDigest: sha256:b5791cfb1d37e9b90281cd3010643044add839fc460327b5789a1e216e4c5538 + codeSamplesRevisionDigest: sha256:02a92d9a9841dfb2b044ff55dda34078d6ca1a9b0dd6db833fb9c084b04dfa8b workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index d17b562d..528f7023 100644 --- a/README.md +++ b/README.md @@ -282,6 +282,7 @@ For more information on obtaining the appropriate token type, please contact you ### [Agents](docs/sdks/agents/README.md) +* [createAgent](docs/sdks/agents/README.md#createagent) - Create an agent * [editAgent](docs/sdks/agents/README.md#editagent) - Edit an agent ### [Authentication](docs/sdks/authentication/README.md) @@ -537,6 +538,7 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). Available standalone functions +- [`agentsCreateAgent`](docs/sdks/agents/README.md#createagent) - Create an agent - [`agentsEditAgent`](docs/sdks/agents/README.md#editagent) - Edit an agent - [`authenticationCheckdatasourceauth`](docs/sdks/authentication/README.md#checkdatasourceauth) - Check datasource authorization - [`chatGetChatFile`](docs/sdks/chat/README.md#getchatfile) - Download a chat file @@ -697,6 +699,7 @@ To learn about this feature and how to get started, check Available React hooks +- [`useAgentsCreateAgentMutation`](docs/sdks/agents/README.md#createagent) - Create an agent - [`useAgentsEditAgentMutation`](docs/sdks/agents/README.md#editagent) - Edit an agent - [`useAuthenticationCheckdatasourceauthMutation`](docs/sdks/authentication/README.md#checkdatasourceauth) - Check datasource authorization - [`useChatGetChatFile`](docs/sdks/chat/README.md#getchatfile) - Download a chat file diff --git a/RELEASES.md b/RELEASES.md index a876108a..788d8fdf 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -768,4 +768,14 @@ Based on: ### Generated - [typescript v0.15.0] . ### Releases -- [NPM v0.15.0] https://www.npmjs.com/package/@gleanwork/api-client/v/0.15.0 - . \ No newline at end of file +- [NPM v0.15.0] https://www.npmjs.com/package/@gleanwork/api-client/v/0.15.0 - . + +## 2026-06-15 03:51:38 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.778.0 (2.904.2) https://github.com/speakeasy-api/speakeasy +### Generated +- [typescript v0.16.0] . +### Releases +- [NPM v0.16.0] https://www.npmjs.com/package/@gleanwork/api-client/v/0.16.0 - . \ No newline at end of file diff --git a/docs/models/components/createworkflowrequest.md b/docs/models/components/createworkflowrequest.md new file mode 100644 index 00000000..f1d329e1 --- /dev/null +++ b/docs/models/components/createworkflowrequest.md @@ -0,0 +1,17 @@ +# CreateWorkflowRequest + +## Example Usage + +```typescript +import { CreateWorkflowRequest } from "@gleanwork/api-client/models/components"; + +let value: CreateWorkflowRequest = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `name` | *string* | :heavy_minus_sign: | The name of the workflow. | +| `transient` | *boolean* | :heavy_minus_sign: | Used to create a transient workflow. | +| `parentWorkflowId` | *string* | :heavy_minus_sign: | id of the parent workflow for transient workflows | \ No newline at end of file diff --git a/docs/models/components/feedresult.md b/docs/models/components/feedresult.md index a1891dca..d85147ad 100644 --- a/docs/models/components/feedresult.md +++ b/docs/models/components/feedresult.md @@ -1180,9 +1180,10 @@ let value: FeedResult = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `category` | [components.FeedResultCategory](../../models/components/feedresultcategory.md) | :heavy_check_mark: | Category of the result, one of the requested categories in incoming request. | -| `primaryEntry` | [components.FeedEntry](../../models/components/feedentry.md) | :heavy_check_mark: | N/A | -| `secondaryEntries` | [components.FeedEntry](../../models/components/feedentry.md)[] | :heavy_minus_sign: | Secondary entries for the result e.g. suggested docs for the calendar, carousel. | -| `rank` | *number* | :heavy_minus_sign: | Rank of the result. Rank is suggested by server. Client side rank may differ. | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `category` | [components.FeedResultCategory](../../models/components/feedresultcategory.md) | :heavy_check_mark: | Category of the result, one of the requested categories in incoming request. | +| `primaryEntry` | [components.FeedEntry](../../models/components/feedentry.md) | :heavy_check_mark: | N/A | +| `secondaryEntries` | [components.FeedEntry](../../models/components/feedentry.md)[] | :heavy_minus_sign: | Secondary entries for the result e.g. suggested docs for the calendar, carousel. | +| `rank` | *number* | :heavy_minus_sign: | Rank of the result. Rank is suggested by server. Client side rank may differ. | +| `placementReason` | [components.PlacementReason](../../models/components/placementreason.md) | :heavy_minus_sign: | Placement source for ranked feed results. ORGANIC means the card was emitted by normal feed ranking. PROMO means the card was inserted by the homepage cards promo framework. | \ No newline at end of file diff --git a/docs/models/components/group.md b/docs/models/components/group.md index 18f64c7f..1beeb658 100644 --- a/docs/models/components/group.md +++ b/docs/models/components/group.md @@ -6,7 +6,7 @@ import { Group } from "@gleanwork/api-client/models/components"; let value: Group = { - type: "JOB_TITLE", + type: "ROLE_TYPE", id: "", }; ``` diff --git a/docs/models/components/grouptype.md b/docs/models/components/grouptype.md index 874d4ba5..225de22e 100644 --- a/docs/models/components/grouptype.md +++ b/docs/models/components/grouptype.md @@ -7,7 +7,7 @@ The type of user group ```typescript import { GroupType } from "@gleanwork/api-client/models/components"; -let value: GroupType = "REGION"; +let value: GroupType = "EXTERNAL_GROUP"; // Open enum: unrecognized values are captured as Unrecognized ``` @@ -15,5 +15,5 @@ let value: GroupType = "REGION"; ## Values ```typescript -"DEPARTMENT" | "ALL" | "TEAM" | "JOB_TITLE" | "ROLE_TYPE" | "LOCATION" | "REGION" | "EXTERNAL_GROUP" | Unrecognized +"DEPARTMENT" | "ALL" | "TEAM" | "JOB_TITLE" | "ROLE_TYPE" | "LOCATION" | "REGION" | "EXTERNAL_GROUP" | "COLLECTION_AUDIENCE" | Unrecognized ``` \ No newline at end of file diff --git a/docs/models/components/placementreason.md b/docs/models/components/placementreason.md new file mode 100644 index 00000000..041fac88 --- /dev/null +++ b/docs/models/components/placementreason.md @@ -0,0 +1,19 @@ +# PlacementReason + +Placement source for ranked feed results. ORGANIC means the card was emitted by normal feed ranking. PROMO means the card was inserted by the homepage cards promo framework. + +## Example Usage + +```typescript +import { PlacementReason } from "@gleanwork/api-client/models/components"; + +let value: PlacementReason = "PROMO"; + +// Open enum: unrecognized values are captured as Unrecognized +``` + +## Values + +```typescript +"ORGANIC" | "PROMO" | Unrecognized +``` \ No newline at end of file diff --git a/docs/models/operations/createagentrequest.md b/docs/models/operations/createagentrequest.md new file mode 100644 index 00000000..9754e527 --- /dev/null +++ b/docs/models/operations/createagentrequest.md @@ -0,0 +1,19 @@ +# CreateAgentRequest + +## Example Usage + +```typescript +import { CreateAgentRequest } from "@gleanwork/api-client/models/operations"; + +let value: CreateAgentRequest = { + createWorkflowRequest: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `locale` | *string* | :heavy_minus_sign: | The client's preferred locale in rfc5646 format (e.g. `en`, `ja`, `pt-BR`). If omitted, the `Accept-Language` will be used. If not present or not supported, defaults to the closest match or `en`. | +| `timezoneOffset` | *number* | :heavy_minus_sign: | The offset of the client's timezone in minutes from UTC. e.g. PDT is -420 because it's 7 hours behind UTC. | +| `createWorkflowRequest` | [components.CreateWorkflowRequest](../../models/components/createworkflowrequest.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/sdks/agents/README.md b/docs/sdks/agents/README.md index 8600601e..f09256de 100644 --- a/docs/sdks/agents/README.md +++ b/docs/sdks/agents/README.md @@ -4,8 +4,97 @@ ### Available Operations +* [createAgent](#createagent) - Create an agent * [editAgent](#editagent) - Edit an agent +## createAgent + +Create an agent. + +### Example Usage + + +```typescript +import { Glean } from "@gleanwork/api-client"; + +const glean = new Glean({ + apiToken: process.env["GLEAN_API_TOKEN"] ?? "", +}); + +async function run() { + const result = await glean.agents.createAgent({}); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { GleanCore } from "@gleanwork/api-client/core.js"; +import { agentsCreateAgent } from "@gleanwork/api-client/funcs/agentsCreateAgent.js"; + +// Use `GleanCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const glean = new GleanCore({ + apiToken: process.env["GLEAN_API_TOKEN"] ?? "", +}); + +async function run() { + const res = await agentsCreateAgent(glean, {}); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("agentsCreateAgent failed:", res.error); + } +} + +run(); +``` + +### React hooks and utilities + +This method can be used in React components through the following hooks and +associated utilities. + +> Check out [this guide][hook-guide] for information about each of the utilities +> below and how to get started using React hooks. + +[hook-guide]: ../../../REACT_QUERY.md + +```tsx +import { + // Mutation hook for triggering the API call. + useAgentsCreateAgentMutation +} from "@gleanwork/api-client/react-query/agentsCreateAgent.js"; +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `createWorkflowRequest` | [components.CreateWorkflowRequest](../../models/components/createworkflowrequest.md) | :heavy_check_mark: | N/A | +| `locale` | *string* | :heavy_minus_sign: | The client's preferred locale in rfc5646 format (e.g. `en`, `ja`, `pt-BR`). If omitted, the `Accept-Language` will be used. If not present or not supported, defaults to the closest match or `en`. | +| `timezoneOffset` | *number* | :heavy_minus_sign: | The offset of the client's timezone in minutes from UTC. e.g. PDT is -420 because it's 7 hours behind UTC. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[components.WorkflowResult](../../models/components/workflowresult.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ----------------- | ----------------- | ----------------- | +| errors.GleanError | 4XX, 5XX | \*/\* | + ## editAgent Creates a draft or publishes an [agent](https://developers.glean.com/agents/agents-api). Use `isDraft=true` to save a draft, or `isDraft=false` (or omit) to publish immediately. Only draft and publish modes are supported. diff --git a/examples/package-lock.json b/examples/package-lock.json index 9d55e45f..300d77ef 100644 --- a/examples/package-lock.json +++ b/examples/package-lock.json @@ -18,7 +18,7 @@ }, "..": { "name": "@gleanwork/api-client", - "version": "0.15.0", + "version": "0.16.0", "dependencies": { "zod": "^3.25.0 || ^4.0.0" }, diff --git a/jsr.json b/jsr.json index a7a506e5..95d99fee 100644 --- a/jsr.json +++ b/jsr.json @@ -2,7 +2,7 @@ { "name": "@gleanwork/api-client", - "version": "0.15.0", + "version": "0.16.0", "exports": { ".": "./src/index.ts", "./models/errors": "./src/models/errors/index.ts", diff --git a/package-lock.json b/package-lock.json index 119ad6cf..bb3003cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@gleanwork/api-client", - "version": "0.15.0", + "version": "0.16.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@gleanwork/api-client", - "version": "0.15.0", + "version": "0.16.0", "dependencies": { "zod": "^3.25.0 || ^4.0.0" }, diff --git a/package.json b/package.json index adc87745..bf37df47 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gleanwork/api-client", - "version": "0.15.0", + "version": "0.16.0", "author": "Speakeasy", "tshy": { "sourceDialects": [ diff --git a/src/__tests__/agents.test.ts b/src/__tests__/agents.test.ts index a6b2dabf..aa86b438 100644 --- a/src/__tests__/agents.test.ts +++ b/src/__tests__/agents.test.ts @@ -68,3 +68,16 @@ it.skip("Agents Create And Wait Run", async () => { "incomplete test found please make sure to address the following errors: [`workflow step createAndWaitRun.test referencing operation createAndWaitRun is missing required request body`]", ); }); + +test("Agents Create Agent", async () => { + const testHttpClient = createTestHTTPClient("createAgent"); + + const glean = new Glean({ + serverURL: process.env["TEST_SERVER_URL"] ?? "http://localhost:18080", + httpClient: testHttpClient, + apiToken: process.env["GLEAN_API_TOKEN"] ?? "value", + }); + + const result = await glean.agents.createAgent({}); + expect(result).toBeDefined(); +}); diff --git a/src/__tests__/messages.test.ts b/src/__tests__/messages.test.ts index 41c0b3c9..f3905434 100644 --- a/src/__tests__/messages.test.ts +++ b/src/__tests__/messages.test.ts @@ -20,7 +20,7 @@ test("Messages Messages", async () => { idType: "CONVERSATION_ID", id: "", timestampMillis: 558834, - datasource: "GCHAT", + datasource: "FACEBOOKWORKPLACE", }); expect(result).toBeDefined(); }); diff --git a/src/__tests__/mockserver/internal/handler/generated_handlers.go b/src/__tests__/mockserver/internal/handler/generated_handlers.go index c4e30027..97b57be3 100644 --- a/src/__tests__/mockserver/internal/handler/generated_handlers.go +++ b/src/__tests__/mockserver/internal/handler/generated_handlers.go @@ -58,6 +58,7 @@ func GeneratedHandlers(ctx context.Context, dir *logging.HTTPFileDirectory, rt * NewGeneratedHandler(ctx, http.MethodPost, "/rest/api/v1/addcollectionitems", pathPostRestAPIV1Addcollectionitems(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/rest/api/v1/addverificationreminder", pathPostRestAPIV1Addverificationreminder(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/rest/api/v1/adminsearch", pathPostRestAPIV1Adminsearch(dir, rt)), + NewGeneratedHandler(ctx, http.MethodPost, "/rest/api/v1/agents", pathPostRestAPIV1Agents(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/rest/api/v1/autocomplete", pathPostRestAPIV1Autocomplete(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/rest/api/v1/chat", pathPostRestAPIV1Chat(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/rest/api/v1/checkdatasourceauth", pathPostRestAPIV1Checkdatasourceauth(dir, rt)), diff --git a/src/__tests__/mockserver/internal/handler/pathpostrestapiv1agents.go b/src/__tests__/mockserver/internal/handler/pathpostrestapiv1agents.go new file mode 100644 index 00000000..e77ee87e --- /dev/null +++ b/src/__tests__/mockserver/internal/handler/pathpostrestapiv1agents.go @@ -0,0 +1,83 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// @generated-id: 85f398739bf6 + +package handler + +import ( + "fmt" + "log" + "mockserver/internal/handler/assert" + "mockserver/internal/logging" + "mockserver/internal/sdk/models/components" + "mockserver/internal/sdk/utils" + "mockserver/internal/tracking" + "net/http" +) + +func pathPostRestAPIV1Agents(dir *logging.HTTPFileDirectory, rt *tracking.RequestTracker) http.HandlerFunc { + return func(w http.ResponseWriter, req *http.Request) { + test := req.Header.Get("x-speakeasy-test-name") + instanceID := req.Header.Get("x-speakeasy-test-instance-id") + + count := rt.GetRequestCount(test, instanceID) + + switch fmt.Sprintf("%s[%d]", test, count) { + case "createAgent[0]": + dir.HandlerFunc("createAgent", testCreateAgentCreateAgent0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testCreateAgentCreateAgent0(w http.ResponseWriter, req *http.Request) { + if err := assert.SecurityAuthorizationHeader(req, false, "Bearer"); err != nil { + log.Printf("assertion error: %s\n", err) + http.Error(w, err.Error(), http.StatusUnauthorized) + return + } + if err := assert.ContentType(req, "application/json", true); err != nil { + log.Printf("assertion error: %s\n", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := assert.AcceptHeader(req, []string{"application/json"}); err != nil { + log.Printf("assertion error: %s\n", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := assert.HeaderExists(req, "User-Agent"); err != nil { + log.Printf("assertion error: %s\n", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + var respBody *components.WorkflowResult = &components.WorkflowResult{ + Workflow: components.Workflow{ + Author: &components.Person{ + Name: "George Clooney", + ObfuscatedID: "abc123", + }, + LastDraftSavedBy: &components.Person{ + Name: "George Clooney", + ObfuscatedID: "abc123", + }, + LastUpdatedBy: &components.Person{ + Name: "George Clooney", + ObfuscatedID: "abc123", + }, + }, + } + respBodyBytes, err := utils.MarshalJSON(respBody, "", true) + + if err != nil { + http.Error( + w, + "Unable to encode response body as JSON: "+err.Error(), + http.StatusInternalServerError, + ) + return + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, _ = w.Write(respBodyBytes) +} diff --git a/src/__tests__/mockserver/internal/handler/pathpostrestapiv1createcollection.go b/src/__tests__/mockserver/internal/handler/pathpostrestapiv1createcollection.go index c1c2a715..5ff0665a 100644 --- a/src/__tests__/mockserver/internal/handler/pathpostrestapiv1createcollection.go +++ b/src/__tests__/mockserver/internal/handler/pathpostrestapiv1createcollection.go @@ -57,14 +57,14 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ operations.ResponseBody2{ Collection: &components.Collection{ Name: "", - 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{ @@ -91,7 +91,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ }, }, }, - ID: 158969, + ID: 363711, Creator: &components.Person{ Name: "George Clooney", ObfuscatedID: "abc123", @@ -102,7 +102,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", @@ -267,13 +267,13 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ Name: "George Clooney", ObfuscatedID: "abc123", }, - Role: components.UserRoleEditor, + Role: components.UserRoleAnswerModerator, }, }, }, Collection: &components.Collection{ Name: "", - 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"), @@ -289,7 +289,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ }, }, }, - ID: 131797, + ID: 643990, Creator: &components.Person{ Name: "George Clooney", ObfuscatedID: "abc123", @@ -301,7 +301,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ Children: []components.Collection{ components.Collection{ Name: "", - 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"), @@ -317,7 +317,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ }, }, }, - ID: 149448, + ID: 359978, Creator: &components.Person{ Name: "George Clooney", ObfuscatedID: "abc123", @@ -329,7 +329,7 @@ func testCreatecollectionCreatecollection0(w http.ResponseWriter, req *http.Requ }, }, }, - ItemType: components.CollectionItemItemTypeCollection, + ItemType: components.CollectionItemItemTypeURL, }, }, }, diff --git a/src/__tests__/mockserver/internal/sdk/models/components/createworkflowrequest.go b/src/__tests__/mockserver/internal/sdk/models/components/createworkflowrequest.go new file mode 100644 index 00000000..4622cd86 --- /dev/null +++ b/src/__tests__/mockserver/internal/sdk/models/components/createworkflowrequest.go @@ -0,0 +1,34 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// @generated-id: dc7457146951 + +package components + +type CreateWorkflowRequest struct { + // The name of the workflow. + Name *string `json:"name,omitempty"` + // Used to create a transient workflow. + Transient *bool `json:"transient,omitempty"` + // id of the parent workflow for transient workflows + ParentWorkflowID *string `json:"parentWorkflowId,omitempty"` +} + +func (o *CreateWorkflowRequest) GetName() *string { + if o == nil { + return nil + } + return o.Name +} + +func (o *CreateWorkflowRequest) GetTransient() *bool { + if o == nil { + return nil + } + return o.Transient +} + +func (o *CreateWorkflowRequest) GetParentWorkflowID() *string { + if o == nil { + return nil + } + return o.ParentWorkflowID +} diff --git a/src/__tests__/mockserver/internal/sdk/models/components/feedresult.go b/src/__tests__/mockserver/internal/sdk/models/components/feedresult.go index a6784e34..a9eb7978 100644 --- a/src/__tests__/mockserver/internal/sdk/models/components/feedresult.go +++ b/src/__tests__/mockserver/internal/sdk/models/components/feedresult.go @@ -152,6 +152,33 @@ func (e *FeedResultCategory) UnmarshalJSON(data []byte) error { } } +// PlacementReason - Placement source for ranked feed results. ORGANIC means the card was emitted by normal feed ranking. PROMO means the card was inserted by the homepage cards promo framework. +type PlacementReason string + +const ( + PlacementReasonOrganic PlacementReason = "ORGANIC" + PlacementReasonPromo PlacementReason = "PROMO" +) + +func (e PlacementReason) ToPointer() *PlacementReason { + return &e +} +func (e *PlacementReason) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "ORGANIC": + fallthrough + case "PROMO": + *e = PlacementReason(v) + return nil + default: + return fmt.Errorf("invalid value for PlacementReason: %v", v) + } +} + type FeedResult struct { // Category of the result, one of the requested categories in incoming request. Category FeedResultCategory `json:"category"` @@ -160,6 +187,8 @@ type FeedResult struct { SecondaryEntries []FeedEntry `json:"secondaryEntries,omitempty"` // Rank of the result. Rank is suggested by server. Client side rank may differ. Rank *int64 `json:"rank,omitempty"` + // Placement source for ranked feed results. ORGANIC means the card was emitted by normal feed ranking. PROMO means the card was inserted by the homepage cards promo framework. + PlacementReason *PlacementReason `json:"placementReason,omitempty"` } func (o *FeedResult) GetCategory() FeedResultCategory { @@ -189,3 +218,10 @@ func (o *FeedResult) GetRank() *int64 { } return o.Rank } + +func (o *FeedResult) GetPlacementReason() *PlacementReason { + if o == nil { + return nil + } + return o.PlacementReason +} diff --git a/src/__tests__/mockserver/internal/sdk/models/components/grouptype.go b/src/__tests__/mockserver/internal/sdk/models/components/grouptype.go index d57e2d04..14c7a2d2 100644 --- a/src/__tests__/mockserver/internal/sdk/models/components/grouptype.go +++ b/src/__tests__/mockserver/internal/sdk/models/components/grouptype.go @@ -12,14 +12,15 @@ import ( type GroupType string const ( - GroupTypeDepartment GroupType = "DEPARTMENT" - GroupTypeAll GroupType = "ALL" - GroupTypeTeam GroupType = "TEAM" - GroupTypeJobTitle GroupType = "JOB_TITLE" - GroupTypeRoleType GroupType = "ROLE_TYPE" - GroupTypeLocation GroupType = "LOCATION" - GroupTypeRegion GroupType = "REGION" - GroupTypeExternalGroup GroupType = "EXTERNAL_GROUP" + GroupTypeDepartment GroupType = "DEPARTMENT" + GroupTypeAll GroupType = "ALL" + GroupTypeTeam GroupType = "TEAM" + GroupTypeJobTitle GroupType = "JOB_TITLE" + GroupTypeRoleType GroupType = "ROLE_TYPE" + GroupTypeLocation GroupType = "LOCATION" + GroupTypeRegion GroupType = "REGION" + GroupTypeExternalGroup GroupType = "EXTERNAL_GROUP" + GroupTypeCollectionAudience GroupType = "COLLECTION_AUDIENCE" ) func (e GroupType) ToPointer() *GroupType { @@ -46,6 +47,8 @@ func (e *GroupType) UnmarshalJSON(data []byte) error { case "REGION": fallthrough case "EXTERNAL_GROUP": + fallthrough + case "COLLECTION_AUDIENCE": *e = GroupType(v) return nil default: diff --git a/src/__tests__/mockserver/internal/sdk/models/operations/createagent.go b/src/__tests__/mockserver/internal/sdk/models/operations/createagent.go new file mode 100644 index 00000000..4b21cd1f --- /dev/null +++ b/src/__tests__/mockserver/internal/sdk/models/operations/createagent.go @@ -0,0 +1,57 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// @generated-id: a5aa85133e31 + +package operations + +import ( + "mockserver/internal/sdk/models/components" +) + +type CreateAgentRequest struct { + // The client's preferred locale in rfc5646 format (e.g. `en`, `ja`, `pt-BR`). If omitted, the `Accept-Language` will be used. If not present or not supported, defaults to the closest match or `en`. + Locale *string `queryParam:"style=form,explode=true,name=locale"` + // The offset of the client's timezone in minutes from UTC. e.g. PDT is -420 because it's 7 hours behind UTC. + TimezoneOffset *int64 `queryParam:"style=form,explode=true,name=timezoneOffset"` + Body components.CreateWorkflowRequest `request:"mediaType=application/json"` +} + +func (o *CreateAgentRequest) GetLocale() *string { + if o == nil { + return nil + } + return o.Locale +} + +func (o *CreateAgentRequest) GetTimezoneOffset() *int64 { + if o == nil { + return nil + } + return o.TimezoneOffset +} + +func (o *CreateAgentRequest) GetBody() components.CreateWorkflowRequest { + if o == nil { + return components.CreateWorkflowRequest{} + } + return o.Body +} + +type CreateAgentResponse struct { + HTTPMeta components.HTTPMetadata `json:"-"` + // Success + WorkflowResult *components.WorkflowResult +} + +func (o *CreateAgentResponse) GetHTTPMeta() components.HTTPMetadata { + if o == nil { + return components.HTTPMetadata{} + } + return o.HTTPMeta +} + +func (o *CreateAgentResponse) GetWorkflowResult() *components.WorkflowResult { + if o == nil { + return nil + } + return o.WorkflowResult +} diff --git a/src/__tests__/summarize.test.ts b/src/__tests__/summarize.test.ts index a1e80406..05ec6a88 100644 --- a/src/__tests__/summarize.test.ts +++ b/src/__tests__/summarize.test.ts @@ -19,11 +19,12 @@ test("Summarize Summarize", async () => { const result = await glean.client.documents.summarize({ documentSpecs: [ { - ugcType: "ARTIFACTS", - ugcId: "", + ugcType: "SHORTCUTS", + contentId: 602763, }, { - id: "", + ugcType: "SHORTCUTS", + contentId: 602763, }, ], }); diff --git a/src/funcs/agentsCreateAgent.ts b/src/funcs/agentsCreateAgent.ts new file mode 100644 index 00000000..5535825e --- /dev/null +++ b/src/funcs/agentsCreateAgent.ts @@ -0,0 +1,184 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: 51073dbdf0f4 + */ + +import { GleanCore } from "../core.js"; +import { encodeFormQuery, encodeJSON } from "../lib/encodings.js"; +import { matchStatusCode } from "../lib/http.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import * as components from "../models/components/index.js"; +import { GleanBaseError } from "../models/errors/gleanbaseerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Create an agent + * + * @remarks + * Create an agent. + */ +export function agentsCreateAgent( + client: GleanCore, + createWorkflowRequest: components.CreateWorkflowRequest, + locale?: string | undefined, + timezoneOffset?: number | undefined, + options?: RequestOptions, +): APIPromise< + Result< + components.WorkflowResult, + | GleanBaseError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + createWorkflowRequest, + locale, + timezoneOffset, + options, + )); +} + +async function $do( + client: GleanCore, + createWorkflowRequest: components.CreateWorkflowRequest, + locale?: string | undefined, + timezoneOffset?: number | undefined, + options?: RequestOptions, +): Promise< + [ + Result< + components.WorkflowResult, + | GleanBaseError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const input: operations.CreateAgentRequest = { + createWorkflowRequest: createWorkflowRequest, + locale: locale, + timezoneOffset: timezoneOffset, + }; + + const parsed = safeParse( + input, + (value) => operations.CreateAgentRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload.CreateWorkflowRequest, { + explode: true, + }); + + const path = pathToFunc("/rest/api/v1/agents")(); + + const query = encodeFormQuery({ + "locale": payload.locale, + "timezoneOffset": payload.timezoneOffset, + }); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiToken); + const securityInput = secConfig == null ? {} : { apiToken: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "createAgent", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiToken, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + isErrorStatusCode: (statusCode: number) => + matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]), + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const [result] = await M.match< + components.WorkflowResult, + | GleanBaseError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, components.WorkflowResult$inboundSchema), + M.fail([400, 401, 403, "4XX"]), + M.fail([500, "5XX"]), + )(response, req); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/src/hooks/types.ts b/src/hooks/types.ts index de447b53..cbb35a6c 100644 --- a/src/hooks/types.ts +++ b/src/hooks/types.ts @@ -16,6 +16,7 @@ export type HookContext = { retryConfig: RetryConfig; resolvedSecurity: SecurityState | null; options: SDKOptions; + timeoutMs?: number; }; export type Awaitable = T | Promise; diff --git a/src/lib/config.ts b/src/lib/config.ts index 121d8e2a..316b69bd 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -73,8 +73,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null { export const SDK_METADATA = { language: "typescript", openapiDocVersion: "0.9.0", - sdkVersion: "0.15.0", - genVersion: "2.893.0", + sdkVersion: "0.16.0", + genVersion: "2.904.2", userAgent: - "speakeasy-sdk/typescript 0.15.0 2.893.0 0.9.0 @gleanwork/api-client", + "speakeasy-sdk/typescript 0.16.0 2.904.2 0.9.0 @gleanwork/api-client", } as const; diff --git a/src/lib/dlv.ts b/src/lib/dlv.ts deleted file mode 100644 index f4c75aca..00000000 --- a/src/lib/dlv.ts +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - * @generated-id: b1988214835a - */ - -/* -MIT License - -Copyright (c) 2024 Jason Miller (http://jasonformat.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -/** - * @param obj The object to walk - * @param key The key path to walk the object with - * @param def A default value to return if the result is undefined - * - * @example - * dlv(obj, "a.b.c.d") - * @example - * dlv(object, ["a", "b", "c", "d"]) - * @example - * dlv(object, "foo.bar.baz", "Hello, default value!") - */ -export function dlv( - obj: any, - key: string | string[], - def?: T, - p?: number, - undef?: never, -): T | undefined { - key = Array.isArray(key) ? key : key.split("."); - for (p = 0; p < key.length; p++) { - const k = key[p]; - obj = k != null && obj ? obj[k] : undef; - } - return obj === undef ? def : obj; -} diff --git a/src/lib/encodings.ts b/src/lib/encodings.ts index f98d2a76..49f15904 100644 --- a/src/lib/encodings.ts +++ b/src/lib/encodings.ts @@ -4,7 +4,7 @@ */ import { bytesToBase64 } from "./base64.js"; -import { isPlainObject } from "./is-plain-object.js"; +import { isPlainObject } from "./primitives.js"; export class EncodingError extends Error { constructor(message: string) { diff --git a/src/lib/env.ts b/src/lib/env.ts index 09808457..e870c7c3 100644 --- a/src/lib/env.ts +++ b/src/lib/env.ts @@ -4,7 +4,6 @@ */ import * as z from "zod/v3"; -import { dlv } from "./dlv.js"; export interface Env { GLEAN_API_TOKEN?: string | undefined; @@ -39,11 +38,16 @@ export function env(): Env { return envMemo; } + const globals = globalThis as { + Deno?: { env?: { toObject?: () => Record } }; + process?: { env?: Record }; + }; + let envObject: Record = {}; if (isDeno()) { - envObject = (globalThis as any).Deno?.env?.toObject?.() ?? {}; + envObject = globals.Deno?.env?.toObject?.() ?? {}; } else { - envObject = dlv(globalThis, "process.env") ?? {}; + envObject = globals.process?.env ?? {}; } envMemo = envSchema.parse(envObject); diff --git a/src/lib/is-plain-object.ts b/src/lib/is-plain-object.ts deleted file mode 100644 index 096b49bf..00000000 --- a/src/lib/is-plain-object.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - * @generated-id: b9862591096a - */ - -/* -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -// Taken from https://github.com/sindresorhus/is-plain-obj/blob/97f38e8836f86a642cce98fc6ab3058bc36df181/index.js - -export function isPlainObject(value: unknown): value is object { - if (typeof value !== "object" || value === null) { - return false; - } - - const prototype = Object.getPrototypeOf(value); - return ( - (prototype === null || - prototype === Object.prototype || - Object.getPrototypeOf(prototype) === null) && - !(Symbol.toStringTag in value) && - !(Symbol.iterator in value) - ); -} diff --git a/src/lib/matchers.ts b/src/lib/matchers.ts index 5fda5dc2..cb6c673e 100644 --- a/src/lib/matchers.ts +++ b/src/lib/matchers.ts @@ -7,7 +7,7 @@ import { GleanError } from "../models/errors/gleanerror.js"; import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; import { ERR, OK, Result } from "../types/fp.js"; import { matchResponse, matchStatusCode, StatusCodePredicate } from "./http.js"; -import { isPlainObject } from "./is-plain-object.js"; +import { isPlainObject } from "./primitives.js"; export type Encoding = | "jsonl" diff --git a/src/lib/primitives.ts b/src/lib/primitives.ts index bdff1670..f7ad6019 100644 --- a/src/lib/primitives.ts +++ b/src/lib/primitives.ts @@ -149,3 +149,19 @@ export function allRequired>( return v as ReturnType>; } + +export function isPlainObject( + value: unknown, +): value is Record { + if (value === null || typeof value !== "object") return false; + if (Object.prototype.toString.call(value) !== "[object Object]") return false; + const proto = Object.getPrototypeOf(value); + if (proto === null || proto === Object.prototype) return true; + // cross-realm plain objects (vm contexts, iframes) inherit from a + // different realm's Object.prototype, which itself has a null prototype + try { + return Object.getPrototypeOf(proto) === null; + } catch { + return false; + } +} diff --git a/src/lib/sdks.ts b/src/lib/sdks.ts index 83fd9f2f..b4e99202 100644 --- a/src/lib/sdks.ts +++ b/src/lib/sdks.ts @@ -25,6 +25,7 @@ import { matchContentType, } from "./http.js"; import { Logger } from "./logger.js"; +import { combineSignals } from "./primitives.js"; import { retry, RetryConfig } from "./retries.js"; import { SecurityState } from "./security.js"; @@ -133,27 +134,55 @@ export class ClientSDK { if (path) { baseURL.pathname = baseURL.pathname.replace(/\/+$/, "") + "/"; reqURL = new URL(path, baseURL); + if (!reqURL.search && baseURL.search) { + reqURL.search = baseURL.search; + } } else { reqURL = baseURL; } reqURL.hash = ""; - let finalQuery = query || ""; - - const secQuery: string[] = []; - for (const [k, v] of Object.entries(security?.queryParams || {})) { - const q = encodeForm(k, v, { charEncoding: "percent" }); - if (typeof q !== "undefined") { - secQuery.push(q); + // Appends already-encoded query pairs to a query string, replacing any + // existing pairs with the same key so later sources take precedence. + const mergeQuery = (current: string, additions: string): string => { + if (!additions) { + return current; } - } - if (secQuery.length) { - finalQuery += `&${secQuery.join("&")}`; - } + const additionKeys = new Set( + additions + .split("&") + .filter((pair) => pair !== "") + .map((pair) => pair.split("=")[0] ?? ""), + ); + const kept = current.split("&").filter((pair) => { + return pair !== "" && !additionKeys.has(pair.split("=")[0] ?? ""); + }); + return [...kept, additions].join("&"); + }; + + const encodeQueryRecord = (record: Record): string => { + return Object.entries(record) + .map(([k, v]) => { + if (v == null) { + return undefined; + } + const value = v; + return encodeForm(k, value, { + explode: Array.isArray(value), + charEncoding: "percent", + }); + }) + .filter((pair): pair is string => typeof pair !== "undefined") + .join("&"); + }; + + const finalQuery = [ + query || "", + encodeQueryRecord(security?.queryParams || {}), + ].reduce(mergeQuery, reqURL.search.slice(1)); if (finalQuery) { - const q = finalQuery.startsWith("&") ? finalQuery.slice(1) : finalQuery; - reqURL.search = `?${q}`; + reqURL.search = `?${finalQuery}`; } const headers = new Headers(opHeaders); @@ -199,9 +228,8 @@ export class ClientSDK { ...options?.fetchOptions, ...options, }; - if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) { - const timeoutSignal = AbortSignal.timeout(conf.timeoutMs); - fetchOptions.signal = timeoutSignal; + if (!fetchOptions?.signal && conf.timeoutMs != null && conf.timeoutMs > 0) { + context.timeoutMs = conf.timeoutMs; } if (conf.body instanceof ReadableStream) { @@ -248,10 +276,19 @@ export class ClientSDK { > > { const { context, isErrorStatusCode } = options; + const timeoutMs = context.timeoutMs; return retry( async () => { - const req = await this.#hooks.beforeRequest(context, request.clone()); + const cloned = request.clone(); + let attempt = cloned; + if (timeoutMs != null && timeoutMs > 0) { + const timeoutSignal = AbortSignal.timeout(timeoutMs); + const combined = combineSignals(cloned.signal, timeoutSignal) + ?? timeoutSignal; + attempt = new Request(cloned, { signal: combined }); + } + const req = await this.#hooks.beforeRequest(context, attempt); await logRequest(this.#logger, req).catch((e) => this.#logger?.log("Failed to log request:", e) ); diff --git a/src/models/components/createworkflowrequest.ts b/src/models/components/createworkflowrequest.ts new file mode 100644 index 00000000..87dbb096 --- /dev/null +++ b/src/models/components/createworkflowrequest.ts @@ -0,0 +1,47 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: eafdae82580f + */ + +import * as z from "zod/v3"; + +export type CreateWorkflowRequest = { + /** + * The name of the workflow. + */ + name?: string | undefined; + /** + * Used to create a transient workflow. + */ + transient?: boolean | undefined; + /** + * id of the parent workflow for transient workflows + */ + parentWorkflowId?: string | undefined; +}; + +/** @internal */ +export type CreateWorkflowRequest$Outbound = { + name?: string | undefined; + transient?: boolean | undefined; + parentWorkflowId?: string | undefined; +}; + +/** @internal */ +export const CreateWorkflowRequest$outboundSchema: z.ZodType< + CreateWorkflowRequest$Outbound, + z.ZodTypeDef, + CreateWorkflowRequest +> = z.object({ + name: z.string().optional(), + transient: z.boolean().optional(), + parentWorkflowId: z.string().optional(), +}); + +export function createWorkflowRequestToJSON( + createWorkflowRequest: CreateWorkflowRequest, +): string { + return JSON.stringify( + CreateWorkflowRequest$outboundSchema.parse(createWorkflowRequest), + ); +} diff --git a/src/models/components/feedresult.ts b/src/models/components/feedresult.ts index 715a3be9..08ce7675 100644 --- a/src/models/components/feedresult.ts +++ b/src/models/components/feedresult.ts @@ -62,6 +62,18 @@ export const FeedResultCategory = { */ export type FeedResultCategory = OpenEnum; +/** + * Placement source for ranked feed results. ORGANIC means the card was emitted by normal feed ranking. PROMO means the card was inserted by the homepage cards promo framework. + */ +export const PlacementReason = { + Organic: "ORGANIC", + Promo: "PROMO", +} as const; +/** + * Placement source for ranked feed results. ORGANIC means the card was emitted by normal feed ranking. PROMO means the card was inserted by the homepage cards promo framework. + */ +export type PlacementReason = OpenEnum; + export type FeedResult = { /** * Category of the result, one of the requested categories in incoming request. @@ -76,6 +88,10 @@ export type FeedResult = { * Rank of the result. Rank is suggested by server. Client side rank may differ. */ rank?: number | undefined; + /** + * Placement source for ranked feed results. ORGANIC means the card was emitted by normal feed ranking. PROMO means the card was inserted by the homepage cards promo framework. + */ + placementReason?: PlacementReason | undefined; }; /** @internal */ @@ -85,6 +101,13 @@ export const FeedResultCategory$inboundSchema: z.ZodType< unknown > = openEnums.inboundSchema(FeedResultCategory); +/** @internal */ +export const PlacementReason$inboundSchema: z.ZodType< + PlacementReason, + z.ZodTypeDef, + unknown +> = openEnums.inboundSchema(PlacementReason); + /** @internal */ export const FeedResult$inboundSchema: z.ZodType< FeedResult, @@ -95,6 +118,7 @@ export const FeedResult$inboundSchema: z.ZodType< primaryEntry: FeedEntry$inboundSchema, secondaryEntries: z.array(FeedEntry$inboundSchema).optional(), rank: z.number().int().optional(), + placementReason: PlacementReason$inboundSchema.optional(), }); export function feedResultFromJSON( diff --git a/src/models/components/grouptype.ts b/src/models/components/grouptype.ts index 9573c93d..07b88ca1 100644 --- a/src/models/components/grouptype.ts +++ b/src/models/components/grouptype.ts @@ -19,6 +19,10 @@ export const GroupType = { Location: "LOCATION", Region: "REGION", ExternalGroup: "EXTERNAL_GROUP", + /** + * Refers to any viewers of the Collection. + */ + CollectionAudience: "COLLECTION_AUDIENCE", } as const; /** * The type of user group diff --git a/src/models/components/index.ts b/src/models/components/index.ts index 39c3bbf7..8db14175 100644 --- a/src/models/components/index.ts +++ b/src/models/components/index.ts @@ -109,6 +109,7 @@ export * from "./createdlpreportrequest.js"; export * from "./createdlpreportresponse.js"; export * from "./createshortcutrequest.js"; export * from "./createshortcutresponse.js"; +export * from "./createworkflowrequest.js"; export * from "./currentactiveusers.js"; export * from "./customdatasourceconfig.js"; export * from "./customdatavalue.js"; diff --git a/src/models/operations/createagent.ts b/src/models/operations/createagent.ts new file mode 100644 index 00000000..cbb67b8f --- /dev/null +++ b/src/models/operations/createagent.ts @@ -0,0 +1,50 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: 282f2dd97fa5 + */ + +import * as z from "zod/v3"; +import { remap as remap$ } from "../../lib/primitives.js"; +import * as components from "../components/index.js"; + +export type CreateAgentRequest = { + /** + * The client's preferred locale in rfc5646 format (e.g. `en`, `ja`, `pt-BR`). If omitted, the `Accept-Language` will be used. If not present or not supported, defaults to the closest match or `en`. + */ + locale?: string | undefined; + /** + * The offset of the client's timezone in minutes from UTC. e.g. PDT is -420 because it's 7 hours behind UTC. + */ + timezoneOffset?: number | undefined; + createWorkflowRequest: components.CreateWorkflowRequest; +}; + +/** @internal */ +export type CreateAgentRequest$Outbound = { + locale?: string | undefined; + timezoneOffset?: number | undefined; + CreateWorkflowRequest: components.CreateWorkflowRequest$Outbound; +}; + +/** @internal */ +export const CreateAgentRequest$outboundSchema: z.ZodType< + CreateAgentRequest$Outbound, + z.ZodTypeDef, + CreateAgentRequest +> = z.object({ + locale: z.string().optional(), + timezoneOffset: z.number().int().optional(), + createWorkflowRequest: components.CreateWorkflowRequest$outboundSchema, +}).transform((v) => { + return remap$(v, { + createWorkflowRequest: "CreateWorkflowRequest", + }); +}); + +export function createAgentRequestToJSON( + createAgentRequest: CreateAgentRequest, +): string { + return JSON.stringify( + CreateAgentRequest$outboundSchema.parse(createAgentRequest), + ); +} diff --git a/src/models/operations/index.ts b/src/models/operations/index.ts index 21dec9ab..ce2c6548 100644 --- a/src/models/operations/index.ts +++ b/src/models/operations/index.ts @@ -10,6 +10,7 @@ export * from "./authorizeactionpack.js"; export * from "./autocomplete.js"; export * from "./chat.js"; export * from "./chatstream.js"; +export * from "./createagent.js"; export * from "./createannouncement.js"; export * from "./createanswer.js"; export * from "./createcollection.js"; diff --git a/src/react-query/agentsCreateAgent.ts b/src/react-query/agentsCreateAgent.ts new file mode 100644 index 00000000..3e1e379c --- /dev/null +++ b/src/react-query/agentsCreateAgent.ts @@ -0,0 +1,115 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: f764965707fa + */ + +import { + MutationKey, + useMutation, + UseMutationResult, +} from "@tanstack/react-query"; +import { GleanCore } from "../core.js"; +import { agentsCreateAgent } from "../funcs/agentsCreateAgent.js"; +import { combineSignals } from "../lib/primitives.js"; +import { RequestOptions } from "../lib/sdks.js"; +import * as components from "../models/components/index.js"; +import { GleanBaseError } from "../models/errors/gleanbaseerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import { unwrapAsync } from "../types/fp.js"; +import { useGleanContext } from "./_context.js"; +import { MutationHookOptions } from "./_types.js"; + +export type AgentsCreateAgentMutationVariables = { + createWorkflowRequest: components.CreateWorkflowRequest; + locale?: string | undefined; + timezoneOffset?: number | undefined; + options?: RequestOptions; +}; + +export type AgentsCreateAgentMutationData = components.WorkflowResult; + +export type AgentsCreateAgentMutationError = + | GleanBaseError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError; + +/** + * Create an agent + * + * @remarks + * Create an agent. + */ +export function useAgentsCreateAgentMutation( + options?: MutationHookOptions< + AgentsCreateAgentMutationData, + AgentsCreateAgentMutationError, + AgentsCreateAgentMutationVariables + >, +): UseMutationResult< + AgentsCreateAgentMutationData, + AgentsCreateAgentMutationError, + AgentsCreateAgentMutationVariables +> { + const client = useGleanContext(); + return useMutation({ + ...buildAgentsCreateAgentMutation(client, options), + ...options, + }); +} + +export function mutationKeyAgentsCreateAgent(): MutationKey { + return ["@gleanwork/api-client", "Agents", "createAgent"]; +} + +export function buildAgentsCreateAgentMutation( + client$: GleanCore, + hookOptions?: RequestOptions, +): { + mutationKey: MutationKey; + mutationFn: ( + variables: AgentsCreateAgentMutationVariables, + ) => Promise; +} { + return { + mutationKey: mutationKeyAgentsCreateAgent(), + mutationFn: function agentsCreateAgentMutationFn({ + createWorkflowRequest, + locale, + timezoneOffset, + options, + }): Promise { + const mergedOptions = { + ...hookOptions, + ...options, + fetchOptions: { + ...hookOptions?.fetchOptions, + ...options?.fetchOptions, + signal: combineSignals( + hookOptions?.fetchOptions?.signal, + options?.fetchOptions?.signal, + ), + }, + }; + return unwrapAsync(agentsCreateAgent( + client$, + createWorkflowRequest, + locale, + timezoneOffset, + mergedOptions, + )); + }, + }; +} diff --git a/src/react-query/index.ts b/src/react-query/index.ts index a72f35ae..6eefb550 100644 --- a/src/react-query/index.ts +++ b/src/react-query/index.ts @@ -6,6 +6,7 @@ export { GleanProvider, useGleanContext } from "./_context.js"; export * from "./_types.js"; +export * from "./agentsCreateAgent.js"; export * from "./agentsEditAgent.js"; export * from "./authenticationCheckdatasourceauth.js"; export * from "./chatGetChatFile.js"; diff --git a/src/sdk/agents.ts b/src/sdk/agents.ts index a0853ebf..3649e257 100644 --- a/src/sdk/agents.ts +++ b/src/sdk/agents.ts @@ -3,12 +3,34 @@ * @generated-id: a103cd018c9b */ +import { agentsCreateAgent } from "../funcs/agentsCreateAgent.js"; import { agentsEditAgent } from "../funcs/agentsEditAgent.js"; import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import { unwrapAsync } from "../types/fp.js"; export class Agents extends ClientSDK { + /** + * Create an agent + * + * @remarks + * Create an agent. + */ + async createAgent( + createWorkflowRequest: components.CreateWorkflowRequest, + locale?: string | undefined, + timezoneOffset?: number | undefined, + options?: RequestOptions, + ): Promise { + return unwrapAsync(agentsCreateAgent( + this, + createWorkflowRequest, + locale, + timezoneOffset, + options, + )); + } + /** * Edit an agent * From 9625c4b1954189ff288e16695b2c68c54a9cccec Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 03:57:52 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow