From 8d8bbab40ae2945106b8ec252a8826ffc481066a Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Thu, 6 Aug 2026 02:40:03 +0000 Subject: [PATCH 1/2] =?UTF-8?q?##=20Python=20SDK=20Changes:=20*=20`glean.s?= =?UTF-8?q?earch.query()`:=20=20=20*=20=20`request.datasource=5Finstances`?= =?UTF-8?q?=20**Removed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20*=20?= =?UTF-8?q?=20`response`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)?= =?UTF-8?q?=20=20=20*=20=20`error`=20**Changed**=20*=20`glean.indexing.doc?= =?UTF-8?q?uments.debug()`:=20=20`response.status[200]`=20**Changed**=20(B?= =?UTF-8?q?reaking=20=E2=9A=A0=EF=B8=8F)=20*=20`glean.indexing.documents.d?= =?UTF-8?q?ebug=5Fmany()`:=20=20`response.status[200]`=20**Changed**=20(Br?= =?UTF-8?q?eaking=20=E2=9A=A0=EF=B8=8F)=20*=20`glean.indexing.documents.de?= =?UTF-8?q?bug=5Fevents()`:=20=20`response.status[200]`=20**Changed**=20(B?= =?UTF-8?q?reaking=20=E2=9A=A0=EF=B8=8F)=20*=20`glean.indexing.datasource.?= =?UTF-8?q?status()`:=20=20`response.status[200]`=20**Changed**=20(Breakin?= =?UTF-8?q?g=20=E2=9A=A0=EF=B8=8F)=20*=20`glean.indexing.people.debug()`:?= =?UTF-8?q?=20=20`response.status[200]`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`glean.client.chat.create=5Fstream()`?= =?UTF-8?q?:=20=20=20*=20=20`request.messages[]`=20**Changed**=20*=20`glea?= =?UTF-8?q?n.client.collections.create()`:=20=20=20*=20=20`request.added?= =?UTF-8?q?=5Froles[].person.metadata.job=5Ffunction`=20**Added**=20=20=20?= =?UTF-8?q?*=20=20`response.union(class=20(0)).collection.added=5Froles[].?= =?UTF-8?q?person.metadata.job=5Ffunction`=20**Added**=20*=20`glean.search?= =?UTF-8?q?.list=5Ffilters()`:=20**Added**=20*=20`glean.client.agents.impo?= =?UTF-8?q?rt()`:=20**Added**=20*=20`glean.client.tools.get=5Ftool=5Fserve?= =?UTF-8?q?r=5Ftools()`:=20**Added**=20*=20`glean.agents.search()`:=20=20`?= =?UTF-8?q?error.code.enum(tools=5Funauthorized)`=20**Added**=20*=20`glean?= =?UTF-8?q?.agents.get()`:=20=20`error.code.enum(tools=5Funauthorized)`=20?= =?UTF-8?q?**Added**=20*=20`glean.agents.get=5Fschemas()`:=20=20`error.cod?= =?UTF-8?q?e.enum(tools=5Funauthorized)`=20**Added**=20*=20`glean.agents.c?= =?UTF-8?q?reate=5Frun()`:=20=20`error`=20**Changed**=20*=20`glean.skills.?= =?UTF-8?q?create()`:=20=20`error.code.enum(tools=5Funauthorized)`=20**Add?= =?UTF-8?q?ed**=20*=20`glean.skills.list()`:=20=20`error.code.enum(tools?= =?UTF-8?q?=5Funauthorized)`=20**Added**=20*=20`glean.skills.validate()`:?= =?UTF-8?q?=20=20`error.code.enum(tools=5Funauthorized)`=20**Added**=20*?= =?UTF-8?q?=20`glean.skills.retrieve()`:=20=20`error.code.enum(tools=5Funa?= =?UTF-8?q?uthorized)`=20**Added**=20*=20`glean.skills.retrieve=5Fcontent(?= =?UTF-8?q?)`:=20=20`error.code.enum(tools=5Funauthorized)`=20**Added**=20?= =?UTF-8?q?*=20`glean.skills.create=5Fversion()`:=20=20`error.code.enum(to?= =?UTF-8?q?ols=5Funauthorized)`=20**Added**=20*=20`glean.skills.list=5Fver?= =?UTF-8?q?sions()`:=20=20`error.code.enum(tools=5Funauthorized)`=20**Adde?= =?UTF-8?q?d**=20*=20`glean.skills.retrieve=5Fversion()`:=20=20`error.code?= =?UTF-8?q?.enum(tools=5Funauthorized)`=20**Added**=20*=20`glean.skills.re?= =?UTF-8?q?trieve=5Fversion=5Fcontent()`:=20=20`error.code.enum(tools=5Fun?= =?UTF-8?q?authorized)`=20**Added**=20*=20`glean.client.activity.feedback(?= =?UTF-8?q?)`:=20=20=20*=20=20`request.feedback1.manual=5Ffeedback=5Finfo.?= =?UTF-8?q?issues[]`=20**Changed**=20*=20`glean.client.announcements.creat?= =?UTF-8?q?e()`:=20=20=20*=20=20`request.body.structured=5Flist[].document?= =?UTF-8?q?.metadata.author.metadata.job=5Ffunction`=20**Added**=20=20=20*?= =?UTF-8?q?=20=20`response.body.structured=5Flist[].document.metadata.auth?= =?UTF-8?q?or.metadata.job=5Ffunction`=20**Added**=20*=20`glean.client.ann?= =?UTF-8?q?ouncements.update()`:=20=20=20*=20=20`request.body.structured?= =?UTF-8?q?=5Flist[].document.metadata.author.metadata.job=5Ffunction`=20*?= =?UTF-8?q?*Added**=20=20=20*=20=20`response.body.structured=5Flist[].docu?= =?UTF-8?q?ment.metadata.author.metadata.job=5Ffunction`=20**Added**=20*?= =?UTF-8?q?=20`glean.client.answers.create()`:=20=20=20*=20=20`request.dat?= =?UTF-8?q?a.added=5Froles[].person.metadata.job=5Ffunction`=20**Added**?= =?UTF-8?q?=20=20=20*=20=20`response.added=5Froles[].person.metadata.job?= =?UTF-8?q?=5Ffunction`=20**Added**=20*=20`glean.client.answers.update()`:?= =?UTF-8?q?=20=20=20*=20=20`request.added=5Froles[].person.metadata.job=5F?= =?UTF-8?q?function`=20**Added**=20=20=20*=20=20`response.added=5Froles[].?= =?UTF-8?q?person.metadata.job=5Ffunction`=20**Added**=20*=20`glean.client?= =?UTF-8?q?.answers.retrieve()`:=20=20`response.answer=5Fresult.answer.add?= =?UTF-8?q?ed=5Froles[].person.metadata.job=5Ffunction`=20**Added**=20*=20?= =?UTF-8?q?`glean.client.answers.list()`:=20=20`response.answer=5Fresults[?= =?UTF-8?q?].answer.added=5Froles[].person.metadata.job=5Ffunction`=20**Ad?= =?UTF-8?q?ded**=20*=20`glean.client.chat.create()`:=20=20=20*=20=20`reque?= =?UTF-8?q?st.messages[]`=20**Changed**=20=20=20*=20=20`response.messages[?= =?UTF-8?q?]`=20**Changed**=20*=20`glean.client.chat.retrieve()`:=20=20=20?= =?UTF-8?q?*=20=20`response.chat=5Fresult.chat`=20**Changed**=20=20=20*=20?= =?UTF-8?q?=20`error.status[403]`=20**Added**=20*=20`glean.client.chat.lis?= =?UTF-8?q?t()`:=20=20`response.chat=5Fresults[].chat.created=5Fby.metadat?= =?UTF-8?q?a.job=5Ffunction`=20**Added**=20*=20`glean.skills.preview=5Fsou?= =?UTF-8?q?rce()`:=20**Added**=20*=20`glean.client.agents.create()`:=20=20?= =?UTF-8?q?`response.workflow.author.metadata.job=5Ffunction`=20**Added**?= =?UTF-8?q?=20*=20`glean.skills.update()`:=20**Added**=20*=20`glean.client?= =?UTF-8?q?.agents.run=5Fstream()`:=20=20`error`=20**Changed**=20*=20`glea?= =?UTF-8?q?n.client.documents.retrieve=5Fby=5Ffacets()`:=20=20`response.do?= =?UTF-8?q?cuments[].metadata.author.metadata.job=5Ffunction`=20**Added**?= =?UTF-8?q?=20*=20`glean.client.agents.run()`:=20=20`error.status[422]`=20?= =?UTF-8?q?**Added**=20*=20`glean.client.collections.delete=5Fitem()`:=20?= =?UTF-8?q?=20`response.collection.added=5Froles[].person.metadata.job=5Ff?= =?UTF-8?q?unction`=20**Added**=20*=20`glean.client.collections.update()`:?= =?UTF-8?q?=20=20=20*=20=20`request.added=5Froles[].person.metadata.job=5F?= =?UTF-8?q?function`=20**Added**=20=20=20*=20=20`response.added=5Froles[].?= =?UTF-8?q?person.metadata.job=5Ffunction`=20**Added**=20*=20`glean.client?= =?UTF-8?q?.collections.update=5Fitem()`:=20=20`response.collection.added?= =?UTF-8?q?=5Froles[].person.metadata.job=5Ffunction`=20**Added**=20*=20`g?= =?UTF-8?q?lean.client.collections.retrieve()`:=20=20`response.collection.?= =?UTF-8?q?added=5Froles[].person.metadata.job=5Ffunction`=20**Added**=20*?= =?UTF-8?q?=20`glean.client.collections.list()`:=20=20`response.collection?= =?UTF-8?q?s[].added=5Froles[].person.metadata.job=5Ffunction`=20**Added**?= =?UTF-8?q?=20*=20`glean.client.documents.retrieve()`:=20=20`response.docu?= =?UTF-8?q?ments.Map.union(Document).metadata.author.meta?= =?UTF-8?q?data.job=5Ffunction`=20**Added**=20*=20`glean.client.collection?= =?UTF-8?q?s.add=5Fitems()`:=20=20`response.collection.added=5Froles[].per?= =?UTF-8?q?son.metadata.job=5Ffunction`=20**Added**=20*=20`glean.client.in?= =?UTF-8?q?sights.retrieve()`:=20=20`response.glean=5Fassist.activity=5Fin?= =?UTF-8?q?sights[].user.metadata.job=5Ffunction`=20**Added**=20*=20`glean?= =?UTF-8?q?.client.messages.retrieve()`:=20=20`response.search=5Fresponse.?= =?UTF-8?q?results[].structured=5Fresults[].document.metadata.author.metad?= =?UTF-8?q?ata.job=5Ffunction`=20**Added**=20*=20`glean.client.pins.update?= =?UTF-8?q?()`:=20=20`response.attribution.metadata.job=5Ffunction`=20**Ad?= =?UTF-8?q?ded**=20*=20`glean.client.pins.retrieve()`:=20=20`response.pin.?= =?UTF-8?q?attribution.metadata.job=5Ffunction`=20**Added**=20*=20`glean.c?= =?UTF-8?q?lient.pins.list()`:=20=20`response.pins[].attribution.metadata.?= =?UTF-8?q?job=5Ffunction`=20**Added**=20*=20`glean.client.pins.create()`:?= =?UTF-8?q?=20=20`response.attribution.metadata.job=5Ffunction`=20**Added*?= =?UTF-8?q?*=20*=20`glean.client.search.query=5Fas=5Fadmin()`:=20=20=20*?= =?UTF-8?q?=20=20`request.source=5Fdocument.metadata.author.metadata.job?= =?UTF-8?q?=5Ffunction`=20**Added**=20=20=20*=20=20`response.results[].str?= =?UTF-8?q?uctured=5Fresults[].document.metadata.author.metadata.job=5Ffun?= =?UTF-8?q?ction`=20**Added**=20*=20`glean.client.search.autocomplete()`:?= =?UTF-8?q?=20=20`response.results[].document.metadata.author.metadata.job?= =?UTF-8?q?=5Ffunction`=20**Added**=20*=20`glean.client.search.retrieve=5F?= =?UTF-8?q?feed()`:=20=20=20*=20=20`request.categories[].enum(meeting=5Fpr?= =?UTF-8?q?ep=5Fautomation)`=20**Added**=20=20=20*=20=20`response.results[?= =?UTF-8?q?]`=20**Changed**=20*=20`glean.client.search.recommendations()`:?= =?UTF-8?q?=20=20=20*=20=20`request.source=5Fdocument.metadata.author.meta?= =?UTF-8?q?data.job=5Ffunction`=20**Added**=20=20=20*=20=20`response.resul?= =?UTF-8?q?ts[].structured=5Fresults[].document.metadata.author.metadata.j?= =?UTF-8?q?ob=5Ffunction`=20**Added**=20*=20`glean.client.search.query()`:?= =?UTF-8?q?=20=20=20*=20=20`request.source=5Fdocument.metadata.author.meta?= =?UTF-8?q?data.job=5Ffunction`=20**Added**=20=20=20*=20=20`response.resul?= =?UTF-8?q?ts[].structured=5Fresults[].document.metadata.author.metadata.j?= =?UTF-8?q?ob=5Ffunction`=20**Added**=20*=20`glean.client.entities.list()`?= =?UTF-8?q?:=20=20`response.results[].metadata.job=5Ffunction`=20**Added**?= =?UTF-8?q?=20*=20`glean.client.entities.read=5Fpeople()`:=20=20`response.?= =?UTF-8?q?results[].metadata.job=5Ffunction`=20**Added**=20*=20`glean.cli?= =?UTF-8?q?ent.shortcuts.create()`:=20=20=20*=20=20`request.data.added=5Fr?= =?UTF-8?q?oles[].person.metadata.job=5Ffunction`=20**Added**=20=20=20*=20?= =?UTF-8?q?=20`response.shortcut.added=5Froles[].person.metadata.job=5Ffun?= =?UTF-8?q?ction`=20**Added**=20*=20`glean.client.shortcuts.retrieve()`:?= =?UTF-8?q?=20=20`response.shortcut.added=5Froles[].person.metadata.job=5F?= =?UTF-8?q?function`=20**Added**=20*=20`glean.client.shortcuts.list()`:=20?= =?UTF-8?q?=20`response.shortcuts[].added=5Froles[].person.metadata.job=5F?= =?UTF-8?q?function`=20**Added**=20*=20`glean.chat.create()`:=20**Added**?= =?UTF-8?q?=20*=20`glean.client.shortcuts.update()`:=20=20=20*=20=20`reque?= =?UTF-8?q?st.added=5Froles[].person.metadata.job=5Ffunction`=20**Added**?= =?UTF-8?q?=20=20=20*=20=20`response.shortcut.added=5Froles[].person.metad?= =?UTF-8?q?ata.job=5Ffunction`=20**Added**=20*=20`glean.client.verificatio?= =?UTF-8?q?n.add=5Freminder()`:=20=20`response.metadata.last=5Fverifier.me?= =?UTF-8?q?tadata.job=5Ffunction`=20**Added**=20*=20`glean.client.verifica?= =?UTF-8?q?tion.list()`:=20=20`response.documents[].metadata.last=5Fverifi?= =?UTF-8?q?er.metadata.job=5Ffunction`=20**Added**=20*=20`glean.client.ver?= =?UTF-8?q?ification.verify()`:=20=20`response.metadata.last=5Fverifier.me?= =?UTF-8?q?tadata.job=5Ffunction`=20**Added**=20*=20`glean.indexing.dataso?= =?UTF-8?q?urces.add()`:=20=20`request`=20**Changed**=20*=20`glean.indexin?= =?UTF-8?q?g.datasources.retrieve=5Fconfig()`:=20=20`response`=20**Changed?= =?UTF-8?q?**?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .speakeasy/gen.lock | 1100 +++++++++++--- .speakeasy/gen.yaml | 2 +- .speakeasy/glean-merged-spec.yaml | 1258 +++++++++++++++-- .speakeasy/tests.arazzo.yaml | 205 ++- .speakeasy/workflow.lock | 12 +- README.md | 9 + RELEASES.md | 12 +- ...essrequestpermissiondeniedresponseerror.md | 11 + ...tformunauthorizedagenttoolsproblemerror.md | 18 + docs/errors/unauthorizedagenttoolserror.md | 11 + ...equestpermissiondeniedresponseerrortype.md | 16 + docs/models/authconfig.md | 29 +- docs/models/authheadertype.md | 23 + docs/models/bundle.md | 10 + docs/models/datasourcecategory.md | 4 +- docs/models/doccategory.md | 4 +- docs/models/feedrequestcategory.md | 1 + docs/models/feedresultcategory.md | 1 + docs/models/gettoolservertoolsrequest.md | 9 + docs/models/importagentrequest.md | 13 + docs/models/importagentrequestrequest.md | 11 + docs/models/importagentresponse.md | 9 + docs/models/importagentstatus.md | 22 + docs/models/importagentsyncmode.md | 20 + docs/models/input.md | 20 + docs/models/issue.md | 4 +- docs/models/justificationtype.md | 1 + docs/models/object.md | 16 + docs/models/personmetadata.md | 1 + .../platformauthenticationsuggestion.md | 11 + docs/models/platformchatcitationannotation.md | 12 + .../platformchatcitationannotationtype.md | 16 + docs/models/platformchatcitationsnippet.md | 9 + docs/models/platformchatcitationsource.md | 31 + docs/models/platformchatcompletedresponse.md | 15 + .../platformchatcompletedresponsestatus.md | 16 + docs/models/platformchatcreaterequest.md | 11 + docs/models/platformchatcreateresponse.md | 17 + docs/models/platformchatcustomentitysource.md | 13 + .../platformchatcustomentitysourcetype.md | 16 + docs/models/platformchatdocumentsource.md | 17 + .../platformchatdocumentsourcedocument1.md | 12 + .../platformchatdocumentsourcedocument2.md | 12 + .../models/platformchatdocumentsourcetype1.md | 16 + .../models/platformchatdocumentsourcetype2.md | 16 + docs/models/platformchatfilesource.md | 12 + docs/models/platformchatfilesourcetype.md | 16 + docs/models/platformchatinputmessage.md | 9 + docs/models/platformchatinputmessagerole.md | 17 + docs/models/platformchatoutputmessage.md | 10 + docs/models/platformchatoutputmessagerole.md | 16 + docs/models/platformchatoutputmessagetype.md | 16 + docs/models/platformchatoutputtextcontent.md | 10 + .../platformchatoutputtextcontenttype.md | 16 + docs/models/platformchatpersonsource.md | 11 + docs/models/platformchatpersonsourcetype.md | 16 + docs/models/platformdatasourcefilterinfo.md | 9 + docs/models/platformfilter.md | 12 +- docs/models/platformfilterfieldinfo.md | 11 + docs/models/platformfilteroperator.md | 2 + docs/models/platformproblemdetailcode.md | 1 + docs/models/platformresult.md | 1 - docs/models/platformsearchfiltersrequest.md | 9 + docs/models/platformsearchfiltersresponse.md | 9 + .../platformsearchfiltersresponseresponse.md | 9 + docs/models/platformsearchrequest.md | 17 +- docs/models/platformsearchresponse.md | 13 +- docs/models/platformskillsourcepreview.md | 14 + .../platformskillsourcepreviewfailure.md | 10 + .../platformskillsourcepreviewfailurecode.md | 21 + docs/models/platformskillsourcepreviewfile.md | 9 + .../platformskillsourcepreviewrequest.md | 9 + .../platformskillsourcepreviewresponse.md | 10 + .../platformskillspreviewsourceresponse.md | 17 + docs/models/platformskillsupdaterequest.md | 9 + docs/models/platformskillupdaterequest.md | 8 + docs/models/platformskillupdateresponse.md | 9 + docs/models/platformskillupdatestatus.md | 19 + .../models/platformskillvalidationresponse.md | 12 +- docs/models/platformskillvalidationwarning.md | 9 - docs/models/platformwarning.md | 11 + docs/models/tokenendpointauthmethod.md | 5 +- docs/models/toolannotations.md | 20 + docs/models/tooldefinition.md | 13 + docs/models/tooldefinitionsresponse.md | 9 + docs/models/viewerinfo.md | 2 +- docs/models/{role.md => viewerinforole.md} | 6 +- docs/sdks/agents/README.md | 11 +- docs/sdks/chatsdk/README.md | 53 + docs/sdks/clientagents/README.md | 69 +- docs/sdks/clientchat/README.md | 7 +- docs/sdks/search/README.md | 70 +- docs/sdks/skills/README.md | 90 ++ docs/sdks/tools/README.md | 55 + poetry.lock | 2 +- pyproject.toml | 4 +- src/glean/api_client/_version.py | 6 +- src/glean/api_client/agents.py | 62 +- src/glean/api_client/chat_sdk.py | 283 ++++ src/glean/api_client/client_agents.py | 286 +++- src/glean/api_client/client_chat.py | 22 +- src/glean/api_client/errors/__init__.py | 24 + ...ssrequestpermissiondeniedresponse_error.py | 42 + ...formunauthorizedagenttoolsproblem_error.py | 55 + .../errors/unauthorizedagenttoolserror.py | 39 + src/glean/api_client/indexing_datasource.py | 8 +- src/glean/api_client/indexing_documents.py | 24 +- src/glean/api_client/models/__init__.py | 370 ++++- ...ssrequestpermissiondeniedresponse_error.py | 8 + src/glean/api_client/models/authconfig.py | 41 +- .../models/customdatasourceconfig.py | 2 + src/glean/api_client/models/feedentry.py | 1 + src/glean/api_client/models/feedrequest.py | 1 + src/glean/api_client/models/feedresult.py | 1 + .../api_client/models/gettoolservertoolsop.py | 31 + src/glean/api_client/models/importagentop.py | 66 + .../api_client/models/importagentrequest.py | 134 ++ .../api_client/models/importagentresponse.py | 57 + .../api_client/models/importagentstatus.py | 13 + .../api_client/models/importagentsyncmode.py | 11 + .../api_client/models/manualfeedbackinfo.py | 2 + .../api_client/models/objectdefinition.py | 2 + src/glean/api_client/models/personmetadata.py | 6 + .../models/platform_chat_createop.py | 20 + .../models/platform_search_filtersop.py | 68 + .../platform_skills_preview_sourceop.py | 21 + .../models/platform_skills_updateop.py | 28 + .../platformauthenticationsuggestion.py | 42 + .../models/platformchatcitationannotation.py | 71 + .../models/platformchatcitationsnippet.py | 48 + .../models/platformchatcitationsource.py | 45 + .../models/platformchatcompletedresponse.py | 91 ++ .../models/platformchatcreaterequest.py | 82 ++ .../models/platformchatcustomentitysource.py | 51 + .../models/platformchatdocumentsource.py | 103 ++ .../models/platformchatfilesource.py | 48 + .../models/platformchatinputmessage.py | 22 + .../models/platformchatoutputmessage.py | 33 + .../models/platformchatoutputtextcontent.py | 46 + .../models/platformchatpersonsource.py | 45 + .../models/platformdatasourcefilterinfo.py | 33 + src/glean/api_client/models/platformfilter.py | 32 +- .../models/platformfilterfieldinfo.py | 61 + .../models/platformfilteroperator.py | 3 +- .../models/platformproblemdetailcode.py | 1 + src/glean/api_client/models/platformresult.py | 10 +- .../models/platformsearchfiltersresponse.py | 29 + .../models/platformsearchrequest.py | 26 +- .../models/platformsearchresponse.py | 18 +- .../models/platformskillsourcepreview.py | 50 + .../platformskillsourcepreviewfailure.py | 37 + .../platformskillsourcepreviewfailurecode.py | 12 + .../models/platformskillsourcepreviewfile.py | 20 + .../platformskillsourcepreviewrequest.py | 38 + .../platformskillsourcepreviewresponse.py | 34 + .../models/platformskillupdaterequest.py | 16 + .../models/platformskillupdateresponse.py | 19 + .../models/platformskillupdatestatus.py | 11 + .../models/platformskillvalidationresponse.py | 9 +- .../models/platformskillvalidationwarning.py | 20 - .../api_client/models/platformwarning.py | 28 + .../api_client/models/toolannotations.py | 137 ++ src/glean/api_client/models/tooldefinition.py | 84 ++ .../models/tooldefinitionsresponse.py | 46 + src/glean/api_client/models/viewerinfo.py | 8 +- src/glean/api_client/people.py | 8 +- src/glean/api_client/sdk.py | 3 + src/glean/api_client/search.py | 268 +++- src/glean/api_client/skills.py | 492 +++++++ src/glean/api_client/tools.py | 208 +++ .../internal/handler/generated_handlers.go | 10 + .../handler/pathgetapisearchfilters.go | 65 + ...athgetrestapiv1toolserversserveridtools.go | 69 + .../handler/pathpatchapiskillsskillid.go | 84 ++ .../internal/handler/pathpostapichat.go | 87 ++ ...thpostapiindexv1debugdatasourcedocument.go | 76 + ...apiindexv1debugdatasourcedocumentevents.go | 75 + ...hpostapiindexv1debugdatasourcedocuments.go | 82 ++ .../pathpostapiindexv1debugdatasourceuser.go | 74 + .../internal/handler/pathpostapisearch.go | 1 + .../pathpostapiskillssourcespreview.go | 77 + .../handler/pathpostapiskillsvalidation.go | 2 +- .../pathpostrestapiv1agentsagentidimport.go | 84 ++ ...essrequestpermissiondeniedresponseerror.go | 31 + .../sdk/models/components/authconfig.go | 49 +- .../components/customdatasourceconfig.go | 6 + .../sdk/models/components/feedentry.go | 3 + .../sdk/models/components/feedrequest.go | 3 + .../sdk/models/components/feedresult.go | 3 + .../models/components/importagentrequest.go | 86 ++ .../models/components/importagentresponse.go | 23 + .../models/components/importagentstatus.go | 38 + .../models/components/importagentsyncmode.go | 35 + .../models/components/manualfeedbackinfo.go | 6 + .../sdk/models/components/objectdefinition.go | 6 + .../sdk/models/components/personmetadata.go | 9 + .../platformauthenticationsuggestion.go | 25 + .../platformchatcitationannotation.go | 75 + .../components/platformchatcitationsnippet.go | 26 + .../components/platformchatcitationsource.go | 117 ++ .../platformchatcompletedresponse.go | 139 ++ .../components/platformchatcreaterequest.go | 127 ++ .../platformchatcustomentitysource.go | 94 ++ .../components/platformchatdocumentsource.go | 227 +++ .../components/platformchatfilesource.go | 86 ++ .../components/platformchatinputmessage.go | 65 + .../components/platformchatoutputmessage.go | 81 ++ .../platformchatoutputtextcontent.go | 58 + .../components/platformchatpersonsource.go | 78 + .../platformdatasourcefilterinfo.go | 26 + .../sdk/models/components/platformfilter.go | 9 +- .../components/platformfilterfieldinfo.go | 45 + .../components/platformproblemdetailcode.go | 3 + .../sdk/models/components/platformresult.go | 9 - .../platformsearchfiltersresponse.go | 25 + .../components/platformsearchrequest.go | 14 +- .../components/platformsearchresponse.go | 13 +- .../components/platformskillsourcepreview.go | 69 + .../platformskillsourcepreviewfailure.go | 33 + .../platformskillsourcepreviewfailurecode.go | 35 + .../platformskillsourcepreviewfile.go | 24 + .../platformskillsourcepreviewrequest.go | 39 + .../platformskillsourcepreviewresponse.go | 33 + .../components/platformskillupdaterequest.go | 15 + .../components/platformskillupdateresponse.go | 23 + .../components/platformskillupdatestatus.go | 35 + .../platformskillvalidationresponse.go | 6 +- .../platformskillvalidationwarning.go | 24 - .../sdk/models/components/platformwarning.go | 26 + .../sdk/models/components/toolannotations.go | 71 + .../sdk/models/components/tooldefinition.go | 66 + .../components/tooldefinitionsresponse.go | 24 + .../sdk/models/components/viewerinfo.go | 24 +- .../models/operations/gettoolservertools.go | 48 + .../sdk/models/operations/importagent.go | 65 + .../models/operations/platformchatcreate.go | 36 + .../sdk/models/operations/platformsearch.go | 2 +- .../operations/platformsearchfilters.go | 58 + .../operations/platformskillspreviewsource.go | 36 + .../models/operations/platformskillsupdate.go | 47 + ...essrequestpermissiondeniedresponseerror.go | 23 + ...tformunauthorizedagenttoolsproblemerror.go | 38 + .../sdkerrors/unauthorizedagenttoolserror.go | 24 + tests/test_chat_sdk.py | 19 + tests/test_client_agents.py | 20 + tests/test_indexing_documents.py | 58 + tests/test_messages.py | 2 +- tests/test_people.py | 16 + tests/test_search.py | 14 + tests/test_skills.py | 34 +- tests/test_summarize.py | 7 +- tests/test_tools.py | 21 + 252 files changed, 11055 insertions(+), 625 deletions(-) create mode 100644 docs/errors/accessrequestpermissiondeniedresponseerror.md create mode 100644 docs/errors/platformunauthorizedagenttoolsproblemerror.md create mode 100644 docs/errors/unauthorizedagenttoolserror.md create mode 100644 docs/models/accessrequestpermissiondeniedresponseerrortype.md create mode 100644 docs/models/authheadertype.md create mode 100644 docs/models/bundle.md create mode 100644 docs/models/gettoolservertoolsrequest.md create mode 100644 docs/models/importagentrequest.md create mode 100644 docs/models/importagentrequestrequest.md create mode 100644 docs/models/importagentresponse.md create mode 100644 docs/models/importagentstatus.md create mode 100644 docs/models/importagentsyncmode.md create mode 100644 docs/models/input.md create mode 100644 docs/models/object.md create mode 100644 docs/models/platformauthenticationsuggestion.md create mode 100644 docs/models/platformchatcitationannotation.md create mode 100644 docs/models/platformchatcitationannotationtype.md create mode 100644 docs/models/platformchatcitationsnippet.md create mode 100644 docs/models/platformchatcitationsource.md create mode 100644 docs/models/platformchatcompletedresponse.md create mode 100644 docs/models/platformchatcompletedresponsestatus.md create mode 100644 docs/models/platformchatcreaterequest.md create mode 100644 docs/models/platformchatcreateresponse.md create mode 100644 docs/models/platformchatcustomentitysource.md create mode 100644 docs/models/platformchatcustomentitysourcetype.md create mode 100644 docs/models/platformchatdocumentsource.md create mode 100644 docs/models/platformchatdocumentsourcedocument1.md create mode 100644 docs/models/platformchatdocumentsourcedocument2.md create mode 100644 docs/models/platformchatdocumentsourcetype1.md create mode 100644 docs/models/platformchatdocumentsourcetype2.md create mode 100644 docs/models/platformchatfilesource.md create mode 100644 docs/models/platformchatfilesourcetype.md create mode 100644 docs/models/platformchatinputmessage.md create mode 100644 docs/models/platformchatinputmessagerole.md create mode 100644 docs/models/platformchatoutputmessage.md create mode 100644 docs/models/platformchatoutputmessagerole.md create mode 100644 docs/models/platformchatoutputmessagetype.md create mode 100644 docs/models/platformchatoutputtextcontent.md create mode 100644 docs/models/platformchatoutputtextcontenttype.md create mode 100644 docs/models/platformchatpersonsource.md create mode 100644 docs/models/platformchatpersonsourcetype.md create mode 100644 docs/models/platformdatasourcefilterinfo.md create mode 100644 docs/models/platformfilterfieldinfo.md create mode 100644 docs/models/platformsearchfiltersrequest.md create mode 100644 docs/models/platformsearchfiltersresponse.md create mode 100644 docs/models/platformsearchfiltersresponseresponse.md create mode 100644 docs/models/platformskillsourcepreview.md create mode 100644 docs/models/platformskillsourcepreviewfailure.md create mode 100644 docs/models/platformskillsourcepreviewfailurecode.md create mode 100644 docs/models/platformskillsourcepreviewfile.md create mode 100644 docs/models/platformskillsourcepreviewrequest.md create mode 100644 docs/models/platformskillsourcepreviewresponse.md create mode 100644 docs/models/platformskillspreviewsourceresponse.md create mode 100644 docs/models/platformskillsupdaterequest.md create mode 100644 docs/models/platformskillupdaterequest.md create mode 100644 docs/models/platformskillupdateresponse.md create mode 100644 docs/models/platformskillupdatestatus.md delete mode 100644 docs/models/platformskillvalidationwarning.md create mode 100644 docs/models/platformwarning.md create mode 100644 docs/models/toolannotations.md create mode 100644 docs/models/tooldefinition.md create mode 100644 docs/models/tooldefinitionsresponse.md rename docs/models/{role.md => viewerinforole.md} (82%) create mode 100644 docs/sdks/chatsdk/README.md create mode 100644 src/glean/api_client/chat_sdk.py create mode 100644 src/glean/api_client/errors/accessrequestpermissiondeniedresponse_error.py create mode 100644 src/glean/api_client/errors/platformunauthorizedagenttoolsproblem_error.py create mode 100644 src/glean/api_client/errors/unauthorizedagenttoolserror.py create mode 100644 src/glean/api_client/models/accessrequestpermissiondeniedresponse_error.py create mode 100644 src/glean/api_client/models/gettoolservertoolsop.py create mode 100644 src/glean/api_client/models/importagentop.py create mode 100644 src/glean/api_client/models/importagentrequest.py create mode 100644 src/glean/api_client/models/importagentresponse.py create mode 100644 src/glean/api_client/models/importagentstatus.py create mode 100644 src/glean/api_client/models/importagentsyncmode.py create mode 100644 src/glean/api_client/models/platform_chat_createop.py create mode 100644 src/glean/api_client/models/platform_search_filtersop.py create mode 100644 src/glean/api_client/models/platform_skills_preview_sourceop.py create mode 100644 src/glean/api_client/models/platform_skills_updateop.py create mode 100644 src/glean/api_client/models/platformauthenticationsuggestion.py create mode 100644 src/glean/api_client/models/platformchatcitationannotation.py create mode 100644 src/glean/api_client/models/platformchatcitationsnippet.py create mode 100644 src/glean/api_client/models/platformchatcitationsource.py create mode 100644 src/glean/api_client/models/platformchatcompletedresponse.py create mode 100644 src/glean/api_client/models/platformchatcreaterequest.py create mode 100644 src/glean/api_client/models/platformchatcustomentitysource.py create mode 100644 src/glean/api_client/models/platformchatdocumentsource.py create mode 100644 src/glean/api_client/models/platformchatfilesource.py create mode 100644 src/glean/api_client/models/platformchatinputmessage.py create mode 100644 src/glean/api_client/models/platformchatoutputmessage.py create mode 100644 src/glean/api_client/models/platformchatoutputtextcontent.py create mode 100644 src/glean/api_client/models/platformchatpersonsource.py create mode 100644 src/glean/api_client/models/platformdatasourcefilterinfo.py create mode 100644 src/glean/api_client/models/platformfilterfieldinfo.py create mode 100644 src/glean/api_client/models/platformsearchfiltersresponse.py create mode 100644 src/glean/api_client/models/platformskillsourcepreview.py create mode 100644 src/glean/api_client/models/platformskillsourcepreviewfailure.py create mode 100644 src/glean/api_client/models/platformskillsourcepreviewfailurecode.py create mode 100644 src/glean/api_client/models/platformskillsourcepreviewfile.py create mode 100644 src/glean/api_client/models/platformskillsourcepreviewrequest.py create mode 100644 src/glean/api_client/models/platformskillsourcepreviewresponse.py create mode 100644 src/glean/api_client/models/platformskillupdaterequest.py create mode 100644 src/glean/api_client/models/platformskillupdateresponse.py create mode 100644 src/glean/api_client/models/platformskillupdatestatus.py delete mode 100644 src/glean/api_client/models/platformskillvalidationwarning.py create mode 100644 src/glean/api_client/models/platformwarning.py create mode 100644 src/glean/api_client/models/toolannotations.py create mode 100644 src/glean/api_client/models/tooldefinition.py create mode 100644 src/glean/api_client/models/tooldefinitionsresponse.py create mode 100644 tests/mockserver/internal/handler/pathgetapisearchfilters.go create mode 100644 tests/mockserver/internal/handler/pathgetrestapiv1toolserversserveridtools.go create mode 100644 tests/mockserver/internal/handler/pathpatchapiskillsskillid.go create mode 100644 tests/mockserver/internal/handler/pathpostapichat.go create mode 100644 tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocument.go create mode 100644 tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocumentevents.go create mode 100644 tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocuments.go create mode 100644 tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourceuser.go create mode 100644 tests/mockserver/internal/handler/pathpostapiskillssourcespreview.go create mode 100644 tests/mockserver/internal/handler/pathpostrestapiv1agentsagentidimport.go create mode 100644 tests/mockserver/internal/sdk/models/components/accessrequestpermissiondeniedresponseerror.go create mode 100644 tests/mockserver/internal/sdk/models/components/importagentrequest.go create mode 100644 tests/mockserver/internal/sdk/models/components/importagentresponse.go create mode 100644 tests/mockserver/internal/sdk/models/components/importagentstatus.go create mode 100644 tests/mockserver/internal/sdk/models/components/importagentsyncmode.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformauthenticationsuggestion.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatcitationannotation.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatcitationsnippet.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatcitationsource.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatcompletedresponse.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatcreaterequest.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatcustomentitysource.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatdocumentsource.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatfilesource.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatinputmessage.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatoutputmessage.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatoutputtextcontent.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformchatpersonsource.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformdatasourcefilterinfo.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformfilterfieldinfo.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformsearchfiltersresponse.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillsourcepreview.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailure.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailurecode.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfile.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewrequest.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewresponse.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillupdaterequest.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillupdateresponse.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformskillupdatestatus.go delete mode 100644 tests/mockserver/internal/sdk/models/components/platformskillvalidationwarning.go create mode 100644 tests/mockserver/internal/sdk/models/components/platformwarning.go create mode 100644 tests/mockserver/internal/sdk/models/components/toolannotations.go create mode 100644 tests/mockserver/internal/sdk/models/components/tooldefinition.go create mode 100644 tests/mockserver/internal/sdk/models/components/tooldefinitionsresponse.go create mode 100644 tests/mockserver/internal/sdk/models/operations/gettoolservertools.go create mode 100644 tests/mockserver/internal/sdk/models/operations/importagent.go create mode 100644 tests/mockserver/internal/sdk/models/operations/platformchatcreate.go create mode 100644 tests/mockserver/internal/sdk/models/operations/platformsearchfilters.go create mode 100644 tests/mockserver/internal/sdk/models/operations/platformskillspreviewsource.go create mode 100644 tests/mockserver/internal/sdk/models/operations/platformskillsupdate.go create mode 100644 tests/mockserver/internal/sdk/models/sdkerrors/accessrequestpermissiondeniedresponseerror.go create mode 100644 tests/mockserver/internal/sdk/models/sdkerrors/platformunauthorizedagenttoolsproblemerror.go create mode 100644 tests/mockserver/internal/sdk/models/sdkerrors/unauthorizedagenttoolserror.go create mode 100644 tests/test_chat_sdk.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index cbd7ac0d..654ef3f2 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: 3e3290ca-0ee8-4981-b1bc-14536048fa63 management: - docChecksum: 586f40e432b9bb469fad89ebabfbc480 + docChecksum: 86049549156fcad147eadc05b1b681b5 docVersion: 0.9.0 - speakeasyVersion: 1.790.3 - generationVersion: 2.918.4 - releaseVersion: 0.15.4 - configChecksum: 0f7f272cfbc1986b8c5a32550c674049 + speakeasyVersion: 1.791.4 + generationVersion: 2.926.8 + releaseVersion: 0.15.5 + configChecksum: 2d7eb6b1e296b48ffc7d66cf6e6b21cd repoURL: https://github.com/gleanwork/api-client-python.git installationURL: https://github.com/gleanwork/api-client-python.git published: true persistentEdits: - generation_id: f115e84c-5118-4c26-a87b-9d23d8f7c5d0 - pristine_commit_hash: 570840404722046c131de65886065b4f1a47b4a6 - pristine_tree_hash: 0bcc83861a2d536b8c3b107a001e5201fabac01a + generation_id: 09bb55a5-64b7-4df8-b3cf-61e3d822908a + pristine_commit_hash: 56d206a0bacd1e2ee76be7858d34dc761506f993 + pristine_tree_hash: d4986fa0e69b37f8aea1c845e7db91c5232d247b features: python: acceptHeaders: 3.0.0 @@ -21,7 +21,7 @@ features: additionalProperties: 1.0.2 configurableModuleName: 0.2.0 constsAndDefaults: 1.0.7 - core: 6.0.34 + core: 6.0.35 defaultEnabledRetries: 0.2.0 deprecations: 3.0.2 devContainers: 3.0.0 @@ -46,7 +46,7 @@ features: retries: 3.0.7 sdkHooks: 1.3.0 tests: 1.19.10 - unions: 3.1.7 + unions: 3.1.8 uploadStreams: 1.0.3 trackedFiles: .devcontainer/README.md: @@ -73,6 +73,10 @@ trackedFiles: id: 3aed33ce6e6f last_write_checksum: sha1:8e83346b5645b6bef8a2423f0dbc9a6365b5bd46 pristine_git_object: 13f153fada6e805e20d596947edc7b0bc9351317 + docs/errors/accessrequestpermissiondeniedresponseerror.md: + id: ef4760b1057f + last_write_checksum: sha1:bc4a2392e4e46ce5b32fdbd3f70121cb0598e803 + pristine_git_object: 057362704954f0b059084ef5cf8b5451e0310d0d docs/errors/collectionerror.md: id: 3d0bc04308fd last_write_checksum: sha1:b0c6864817dbdc3bde8fee4a1e142d51e89f781c @@ -93,6 +97,18 @@ trackedFiles: id: e92c15ace3bc last_write_checksum: sha1:5208ac53c3ccef42decf04d32f2e415299bc7ac6 pristine_git_object: d5a6d0abd3cce2307eafb570c8d03387a73f809f + docs/errors/platformunauthorizedagenttoolsproblemerror.md: + id: 57383742ed65 + last_write_checksum: sha1:6e11cf16bb180a3bd8864274e4a370f86b6e2e4d + pristine_git_object: 38c45b09fb348198d5e0f6ea6efc607ae9d3a0c1 + docs/errors/unauthorizedagenttoolserror.md: + id: fc7c77695467 + last_write_checksum: sha1:896287bfaf412afdb356d2af882513c8aab460f0 + pristine_git_object: 38819b2d63ff688e0ee9b2eb9062262f860609fb + docs/models/accessrequestpermissiondeniedresponseerrortype.md: + id: cf10b3c05fce + last_write_checksum: sha1:f7cd44ff9d027f0aca17dfbf6e52360b16ae38f6 + pristine_git_object: 2c42a6041e901e954535b0b33fb856d255695bf0 docs/models/actionauthtype.md: id: f6c3ce39f190 last_write_checksum: sha1:6fe1004cc273d5e15dff5ba82f42bd218774a83b @@ -299,8 +315,8 @@ trackedFiles: pristine_git_object: d5cc0973f8bced08083dc8ad0ce7ff501668cedb docs/models/authconfig.md: id: fbdae66f0362 - last_write_checksum: sha1:c565685e22f3411d4c4e50f089be513b3ba98187 - pristine_git_object: e28f87707e1a35b32887f571b7fe43c2903a4d9d + last_write_checksum: sha1:89c2f69de007d535563bb9b7a594e066f71ffac5 + pristine_git_object: deafc0eaddc9dc2a95369251b9148853a1a3e304 docs/models/authconfigstatus.md: id: faed76680e4f last_write_checksum: sha1:b4337cf080b32707bf4d897552f3433ecd409f5b @@ -313,6 +329,10 @@ trackedFiles: id: 458c8700cfa0 last_write_checksum: sha1:068e18a2377e9c1de199140f034eef0132458431 pristine_git_object: e861d79b68d3c689bca4f94af16572b105a0108e + docs/models/authheadertype.md: + id: 9c85b12e5bef + last_write_checksum: sha1:941d66cac49a6eb0e98de411562895c79e9e2520 + pristine_git_object: 8a6b33facdaf965e571a30378e5c3654410ba0af docs/models/author.md: id: b4139065dbed last_write_checksum: sha1:015462f693083cc40f7c88d90621ec5613fcd98a @@ -425,6 +445,10 @@ trackedFiles: id: 19182dacc064 last_write_checksum: sha1:81aad9b978d55bd5e4bb6b0b78736ae51c96a2a4 pristine_git_object: dcc8036722980aeadd202cacc8343f4c40fcca0d + docs/models/bundle.md: + id: 7d8688a5dbf6 + last_write_checksum: sha1:70739badd105665d19482017bc8f7386fe454837 + pristine_git_object: be38317813e3a9f663bffa698617775fd3a41d49 docs/models/calendarattendee.md: id: 65658df6d5ed last_write_checksum: sha1:95c9c7713d8dd0387c417133e10f3e8fc015738e @@ -807,8 +831,8 @@ trackedFiles: pristine_git_object: 8445ecad49bc3bbd7b064649b72e824713db1ae7 docs/models/datasourcecategory.md: id: 0480a1f35070 - last_write_checksum: sha1:015d56c41be98ea2c521890e16153d81d293e77a - pristine_git_object: eccdbdeb57567caebb4ae64d7f8a263ed38a989a + last_write_checksum: sha1:221e5a4f881063f398b9881d36d622747d3ede52 + pristine_git_object: c7a5d3c3182c0a7820f14cd6395fc9a7690aa4fb docs/models/datasourceconfigurationresponse.md: id: 7c6f38290f96 last_write_checksum: sha1:10c0068be581150ab5915785029e610bdf472ab5 @@ -1083,8 +1107,8 @@ trackedFiles: pristine_git_object: 52a18a1148721667dfc7a24e9858cfba774d5c78 docs/models/doccategory.md: id: 821ad62d2df6 - last_write_checksum: sha1:dde799e6eb1d7b4b1515d636c07939219b3cfa0f - pristine_git_object: 3560e89449148b672eebef4ff2dbd84ca47d7b25 + last_write_checksum: sha1:1ec7a9915ac0698a53f2f01edb122cb6e14b76ef + pristine_git_object: 0e883592d7c11977a24a16657452e4a11b53c2a1 docs/models/document.md: id: cd1d2a444370 last_write_checksum: sha1:3c58b1bee296890b3ad00d72b32647ab4ae67bd4 @@ -1379,8 +1403,8 @@ trackedFiles: pristine_git_object: a851a7f13eb25d515fa9b9244c5dfdc98fa14e2c docs/models/feedrequestcategory.md: id: 31a02f3064c7 - last_write_checksum: sha1:1e711eadbe44031143a3fceccf87c16f5c4b57fa - pristine_git_object: c3cd02f12ff93953e0bc4b3c8fccc75126b7eb77 + last_write_checksum: sha1:63f6abf5e4f5048535b7767274c8a18176020427 + pristine_git_object: c3eab96e8f64c7ed1323eaf2c292c044db933f71 docs/models/feedrequestoptions.md: id: 58eb26b19e77 last_write_checksum: sha1:fd2ab08736cef8156169b0cfee8c52e7aed1accf @@ -1399,8 +1423,8 @@ trackedFiles: pristine_git_object: f14153ca4fc73e08d620714d4ed5ef2c0bad05c5 docs/models/feedresultcategory.md: id: a5f77f38d0a7 - last_write_checksum: sha1:560b6764d385f7fdc407d5c060df2ab1f36dfb26 - pristine_git_object: 1e183ef4398672f0489ebeb7b2ea622063c36331 + last_write_checksum: sha1:2bfa3af25a938fbbc55b12b94d555f4b95517986 + pristine_git_object: c27f4b3b80f6c54cb0fe407dc9151821aad91a2e docs/models/fieldscope.md: id: e6b52bcb22a6 last_write_checksum: sha1:13a1492ce39d2f89a01d626996a345a1339a1873 @@ -1653,6 +1677,10 @@ trackedFiles: id: 8d5b6b8336ff last_write_checksum: sha1:9fe6a4ff332c3de18ceadcd6d52ca582321a6885 pristine_git_object: a0ca5b754fcdd8a68325df5c82d24a0985d93043 + docs/models/gettoolservertoolsrequest.md: + id: 3a10aec5bd64 + last_write_checksum: sha1:e12fa4414e3dbbbc80f2849e6672754ebf1d2aae + pristine_git_object: 2de105627536d111849b13b052b704306066eded docs/models/getusercountrequest.md: id: b0cf45ad2c01 last_write_checksum: sha1:47972cc017eec42ff9e6572c938cccd1fa047471 @@ -1721,6 +1749,26 @@ trackedFiles: id: d998108e5ea8 last_write_checksum: sha1:691f92007f621c3190dd8e17e293be0852457d96 pristine_git_object: 4f71310b6864d240adb6739549f5f8fee4807538 + docs/models/importagentrequest.md: + id: c6a418248afc + last_write_checksum: sha1:cfaaea16e4b54ec0c3d0e4a7ccd4161c0a1d9ba1 + pristine_git_object: d9f9e2a477b577b5129c6693aafe52245d086670 + docs/models/importagentrequestrequest.md: + id: d39e542ebba0 + last_write_checksum: sha1:e47ad7854090e0542b6793a94800b40290268dc4 + pristine_git_object: 1eae67877178a11d032f5853f7a189b96b00b914 + docs/models/importagentresponse.md: + id: 77b0ee805342 + last_write_checksum: sha1:26562c048b4ab28020a941c3adb9f77c032cd74d + pristine_git_object: 5b5e932259d8cb91a32d2b9503a7c416b806720d + docs/models/importagentstatus.md: + id: 5776b72122bf + last_write_checksum: sha1:c74ae8af6193e9765f0591169e1df187c875486d + pristine_git_object: 2b83dfea4f720a7b662dc1ac83175c176abd87a7 + docs/models/importagentsyncmode.md: + id: d91c452ec994 + last_write_checksum: sha1:c78f3f443d1527edd4a960e10686ea725a31c269 + pristine_git_object: c0af50c56227264f36d4346cb6d4d4952d48fa1d docs/models/includetype.md: id: c81f8e97e293 last_write_checksum: sha1:060845bfb32df30df1f8d9927c4cd550aca16c37 @@ -1761,6 +1809,10 @@ trackedFiles: id: 1db1dc7ee526 last_write_checksum: sha1:c5fcecc026e19e338aa6f14b49e177eeeffea606 pristine_git_object: 92e666de5f7156588d4dbaa09b36fec6e8f2403e + docs/models/input.md: + id: 5cbc446a3956 + last_write_checksum: sha1:21bbe04c0f6ee4212e9cb7a56a4697391d0b8800 + pristine_git_object: 3df083089f7f6f344f710748aae75582955e7e71 docs/models/inputoptions.md: id: 138e423f4a10 last_write_checksum: sha1:35aa8de6835bef5a294ef685f6480529f55f26f6 @@ -1815,12 +1867,12 @@ trackedFiles: pristine_git_object: 627329922765aae3e91345adcf21351b2877ebc1 docs/models/issue.md: id: 44d611a73cb7 - last_write_checksum: sha1:a2fe883d6ac0b6dd923b35fd743e7026bf2332d0 - pristine_git_object: 4203309096512cab077b45bc77906df389c01421 + last_write_checksum: sha1:6b426db4192279db0ccd71ff22e9133072ca1c6a + pristine_git_object: 647f9bb67a6af30d7fd71c8ddb3c5e1bf40bb938 docs/models/justificationtype.md: id: 8286affacee4 - last_write_checksum: sha1:b109c7106199ccbc7e24c15618efb4d624602465 - pristine_git_object: ebf3754e99ca28d158a721d0c9eeed4fbe726071 + last_write_checksum: sha1:02dcd2b35c40d2f4c5435e0724cb13efabbe9a9e + pristine_git_object: cff9e6dd34fd05679bdc9629b86bb9b4d9577436 docs/models/knowledgetype.md: id: 1e0c90679228 last_write_checksum: sha1:0030a7539b9362bbb59e0bbd36580676058b3540 @@ -2029,6 +2081,10 @@ trackedFiles: id: 568581cb28bc last_write_checksum: sha1:263515c9f97885b91b6cd5844222320658442b07 pristine_git_object: b1cd1e56279e4db030fc140598c10231ff311137 + docs/models/object.md: + id: 7ffe67d0b83f + last_write_checksum: sha1:cfed269f495144bd4a6de8da4b0bef46f7911d72 + pristine_git_object: fedbfbb5b542f5d5c91327b32225a0c18d3eca68 docs/models/objectdefinition.md: id: 11daa0bec25f last_write_checksum: sha1:6990618d91fdb10bba60313d1b94e1f1be0dcc24 @@ -2099,8 +2155,8 @@ trackedFiles: pristine_git_object: a7a45c74dea5b256e3fcb318e570639113612000 docs/models/personmetadata.md: id: 15c9858b351f - last_write_checksum: sha1:67000efaad8be89c4edada9aa12fc8cd824cbe7b - pristine_git_object: 3bf2f1247f4a2fe0fd8c0c93f776df93057cb7ad + last_write_checksum: sha1:e9111e24294ce2fccdb2868f896dadcbd9ec0096 + pristine_git_object: 6bfd50db2debd6e3b2070e202efc1efd505c5361 docs/models/personmetadatatype.md: id: b6d1cc2d332e last_write_checksum: sha1:fe678a00b3e162b7cf80a2ef0c718bf4e6bbe741 @@ -2209,18 +2265,134 @@ trackedFiles: id: e2656d1b178b last_write_checksum: sha1:11cfb0f78ed223bdc13cb93b7ec8fded52db7f99 pristine_git_object: 1c961815688a6cbd9b0e3a298ea0641fcff045fe + docs/models/platformauthenticationsuggestion.md: + id: d3263acb33dc + last_write_checksum: sha1:0cf4d355db967c070866a43cc7cf8bfb00dabf8b + pristine_git_object: 02de0e92825452546bca7837adbc6706def585e5 + docs/models/platformchatcitationannotation.md: + id: 0c7305e6dabf + last_write_checksum: sha1:6a567d3ea92b8bc2d1a142510b1b34ae87fd5f11 + pristine_git_object: e15e66b29879dd3b3686d9faf64bce2bf40367b5 + docs/models/platformchatcitationannotationtype.md: + id: 5a3d664a4de0 + last_write_checksum: sha1:fa9bf18e32084d55a086f56c361162903b9d7eb0 + pristine_git_object: e3bd53ef1230ec9539fae60f8dbcfd7137be015f + docs/models/platformchatcitationsnippet.md: + id: c06b44710f50 + last_write_checksum: sha1:23d5a1e3a551da8805c66df5f1f5854edd42f997 + pristine_git_object: f4dcb28cc4b61f8719dfb716d5d26db6056f0604 + docs/models/platformchatcitationsource.md: + id: 54f318bcb2f4 + last_write_checksum: sha1:b085442e228cb1682aba41af8c54f2381dc35e25 + pristine_git_object: bb688733d0a00e09f8b9d2c613f34976b41d5735 + docs/models/platformchatcompletedresponse.md: + id: c274bca3fa55 + last_write_checksum: sha1:38a1582c5266e7c2365e700008ebe1c70461d918 + pristine_git_object: 34af8ff1c4add0e01b27c73bb654ba7c32433860 + docs/models/platformchatcompletedresponsestatus.md: + id: f52ac98c71f7 + last_write_checksum: sha1:d86828d0116f982a35bbbad563f5f536a176257b + pristine_git_object: 904a9c8af84b218e1531be2907087fefdb0fb516 + docs/models/platformchatcreaterequest.md: + id: cd33a9dfda85 + last_write_checksum: sha1:e7b60df8a893f94b2c4e91d8c48ca634e6ee3965 + pristine_git_object: 6b00a961af3ae11b028ef12e4dcb5d66f059987d + docs/models/platformchatcreateresponse.md: + id: d07ae96f238d + last_write_checksum: sha1:2e27d36585ba58fc31cff8823ea1b6ba5203dd57 + pristine_git_object: 8cf9edc158c04e0a5828d33191b6ecc849257b58 + docs/models/platformchatcustomentitysource.md: + id: 6e12deaeb23d + last_write_checksum: sha1:b8ef7e1c92d45a3a3329a88b57361ba9553f28b3 + pristine_git_object: 8631370028a7c5005205ac7f2a6deb35691bde9e + docs/models/platformchatcustomentitysourcetype.md: + id: 4a2f676cfbbf + last_write_checksum: sha1:f9d3d784b8345805e7da76d170aad7ae1a2ce565 + pristine_git_object: 67daadbc2301f12e55042279884712c6dce55aff + docs/models/platformchatdocumentsource.md: + id: 953dce7a7ae9 + last_write_checksum: sha1:db9abd75c816fff5a3726568415a64b6024336a9 + pristine_git_object: a8bd094eb25aeb63284dd1822a644be919f67173 + docs/models/platformchatdocumentsourcedocument1.md: + id: 3617a3ed0354 + last_write_checksum: sha1:d75343e04fe71a9c16383c1c3a8383f30ff3ea9f + pristine_git_object: 2b388ba918325d1843ca68af759b22567df35334 + docs/models/platformchatdocumentsourcedocument2.md: + id: 88f03c86a066 + last_write_checksum: sha1:ba841b422d33031b05ee502a49f6efe29929f8b8 + pristine_git_object: 1b8f64e4c598febb186b9a5552ca6827daf09b60 + docs/models/platformchatdocumentsourcetype1.md: + id: 47c9b6b27f95 + last_write_checksum: sha1:d63b162e3b63e3a835d8fc35c8bf25cdfc806acf + pristine_git_object: 60cb54d7cbc72e463642a8f7897741b5d9a85dc4 + docs/models/platformchatdocumentsourcetype2.md: + id: 4bd893a73267 + last_write_checksum: sha1:418c77b0474def8a736d26b49d0abb6aa24dbc77 + pristine_git_object: 1fd2304902ee5390e7b2194481d599f640884139 + docs/models/platformchatfilesource.md: + id: b64eca888132 + last_write_checksum: sha1:88e87ca14737f8d3166da647fbb1313fdacad945 + pristine_git_object: f18a6c67730ad51ee22272a20c75e9be0a5e3745 + docs/models/platformchatfilesourcetype.md: + id: 5d5aa5197a97 + last_write_checksum: sha1:b77d67df65d98faa83f7685ff7a52d53490113e7 + pristine_git_object: 156db8e2059f401f7452bcb57453ea18c26b01ab + docs/models/platformchatinputmessage.md: + id: c9769df9aff9 + last_write_checksum: sha1:bf167f7b171a561dfc3713b0d524135d05229809 + pristine_git_object: d69e40b0db035b7e3f05be03d64a5149324d8261 + docs/models/platformchatinputmessagerole.md: + id: 0b46bce28b93 + last_write_checksum: sha1:6afb0dadbd6de522e699f2005572a6755f4cbde6 + pristine_git_object: b756fc9543f34a0104eb9c3f1f9ab2901a23a4a8 + docs/models/platformchatoutputmessage.md: + id: d236a3fe09a2 + last_write_checksum: sha1:be7029860368e4db9a914916e2e2617f233f24aa + pristine_git_object: a931e573200b0863e0902d8fef8bf77032a13643 + docs/models/platformchatoutputmessagerole.md: + id: 50ec5e5c605b + last_write_checksum: sha1:2c85de61ff192dfdb6252747be2a367cfd8cc1ea + pristine_git_object: 7f8dc49418efa328521e2f64cb622279b81511be + docs/models/platformchatoutputmessagetype.md: + id: f19e88fb1997 + last_write_checksum: sha1:0db13db8e85a17ffbf000e5984548b5ebb93f09c + pristine_git_object: 8e2d0020a502eef1249ce19d1dcdcc4f696e571d + docs/models/platformchatoutputtextcontent.md: + id: fd2f6a03da55 + last_write_checksum: sha1:c72902588f7531a39f1783e29433709cfe157a7a + pristine_git_object: 1ea074b5e646042d60c921c8d3351e31bc0ccde2 + docs/models/platformchatoutputtextcontenttype.md: + id: 2eca715382a5 + last_write_checksum: sha1:0fc8d0cde4553b138b2e2c9f131faaa478faeb09 + pristine_git_object: 05886daacc0a2814c0d1609ebb4d6eaf2f40f5d9 + docs/models/platformchatpersonsource.md: + id: 779c60aeabfb + last_write_checksum: sha1:bbb6d30600c5b18a2b6e286f878fc721a8e81d94 + pristine_git_object: c42d99e3556e5c16dbf32d1b37677dd04305c15a + docs/models/platformchatpersonsourcetype.md: + id: e514ca59ade7 + last_write_checksum: sha1:56015a25be5c0c7f8c345250cb3d1c90760fc0c7 + pristine_git_object: 3c36b121d3dff43a7665ca2a1ff1dcc6d3682789 docs/models/platformcontenttype.md: id: a9175ad4799d last_write_checksum: sha1:abb012a639cead86824ed11e596bda3632e2fddb pristine_git_object: 1b46526d54ef25a1d018d2cfd3bbafde48fba72a + docs/models/platformdatasourcefilterinfo.md: + id: 61ae1a6d6454 + last_write_checksum: sha1:41734266d612f710490590c79d1104b15e165291 + pristine_git_object: 8119fc5d60b5afc43b6fa6c91205061bbd9a9b3b docs/models/platformfilter.md: id: 4e97760ae8b9 - last_write_checksum: sha1:d78122b73a8014e7103935402b9167728bcaec34 - pristine_git_object: b3e8b651de43912c7092a7cb624cda0b3f9ea48a + last_write_checksum: sha1:c331962f750f8e583ea3f50d70027a2a23225ad3 + pristine_git_object: b13127363cc92f9425c6af95318b53ce2e398c41 + docs/models/platformfilterfieldinfo.md: + id: 9a7fa851c702 + last_write_checksum: sha1:e3712cf98275e049b47ab544eb8e8c2a28c05c5b + pristine_git_object: 8908111829612f9a67a7da3c9f18dc524d785ca8 docs/models/platformfilteroperator.md: id: 459d8f60cd58 - last_write_checksum: sha1:909a73760255616436ed2c71e3aeb5895e03dd68 - pristine_git_object: f814671e353534b461511918a4b553733635b691 + last_write_checksum: sha1:98575b0dfa32c14f341fc95490c0e2c5cace9fe8 + pristine_git_object: d97b6753e2056405bec741b206680b230891c331 docs/models/platformmessage.md: id: ea30c4fdad14 last_write_checksum: sha1:890468283cb6b47c68edf4b7b241dec096699d95 @@ -2239,24 +2411,36 @@ trackedFiles: pristine_git_object: 9602adac9af14a6a401eaf90a16cdc7e7a96c954 docs/models/platformproblemdetailcode.md: id: fd61a3fb0333 - last_write_checksum: sha1:69e97bb1c31c6b0ca044c48e8d608ef2845aafcb - pristine_git_object: 642e2c5cb16ddc62d92698157f0a2511a9b4ccae + last_write_checksum: sha1:3131edfc9f3fe21b7b7384426a0a478590effb3b + pristine_git_object: 9f7f4f25b11bac9a82e502a5ef78d70cd3b0c595 docs/models/platformproblemdetailerror.md: id: 2e752ca0f45d last_write_checksum: sha1:250c20189f7d3163d46e0036b2a7d8867f12f788 pristine_git_object: 169944d5c3ce0c14a23f82a9c5ac30efdec24533 docs/models/platformresult.md: id: 0fe3fed8d508 - last_write_checksum: sha1:3a4ba99a8923e7504e9f1606eca7a2ab7277e746 - pristine_git_object: e9b2cd6a291372feb2023cc2896f9aad75c400a6 + last_write_checksum: sha1:00c06fea69f19c8deedd7c27aa8fa735d1b04612 + pristine_git_object: 330039872116266288ec6bb54841328449f04759 + docs/models/platformsearchfiltersrequest.md: + id: 8bbc53cc30ee + last_write_checksum: sha1:e72c60e81d9b005abde6716e7036d8937aad2615 + pristine_git_object: 001723a502745d7ff5f80201dd8b432453e56ee3 + docs/models/platformsearchfiltersresponse.md: + id: 9ea2f0a45c78 + last_write_checksum: sha1:6a9d79d2ce163618620bc33f94b7409290195a66 + pristine_git_object: ee35d03324d6180936e9f0851d7516c641255b29 + docs/models/platformsearchfiltersresponseresponse.md: + id: 6296f0269b3a + last_write_checksum: sha1:fa863a1edcde689e9ce84e803c024f0db6ed4ff4 + pristine_git_object: dc35339f57048b4a4f944d31159cae21f09d4f32 docs/models/platformsearchrequest.md: id: 9f3be4029289 - last_write_checksum: sha1:5a163a68ccc04dd0a7f8fb8e75c41e39eceef100 - pristine_git_object: 30ff66c03c2b88bb2ec72e7a7f4dfa135d21d8f6 + last_write_checksum: sha1:b690be7d344311de3865bb4e19c32de3c2e1e470 + pristine_git_object: 1972bc5104d040207fa34c6e87b6346b707c9c2f docs/models/platformsearchresponse.md: id: b20c8f7128fc - last_write_checksum: sha1:958639d5fa5b446156df39fd5f69b6c57265f13a - pristine_git_object: 219a923e48c2a8cb9333d211f51a87df045a8002 + last_write_checksum: sha1:2a830bd20b46e9d3079e7445a39122c9a2457320 + pristine_git_object: 74045b8a6ae5e046bacdfb861ababddb3d770f5c docs/models/platformskill.md: id: 83c575f92901 last_write_checksum: sha1:6b749a33dc64251968dac815aec5189373449b3e @@ -2321,18 +2505,62 @@ trackedFiles: id: 47bd785d0b34 last_write_checksum: sha1:efd9f5c6044944bff237d1cc11d6e6756dd4840c pristine_git_object: d97b7012a65b644ccdcfaa8cdc64a6258a0f0fae + docs/models/platformskillsourcepreview.md: + id: a20f898498fd + last_write_checksum: sha1:989f9420ee121202fec25562c5fc30ccdf14d953 + pristine_git_object: d41ccf21d006531de0c22fa9ca19139123bd3b92 + docs/models/platformskillsourcepreviewfailure.md: + id: d799da41e580 + last_write_checksum: sha1:822758dd06b0ee0c44e12fee54d93345b29df9c4 + pristine_git_object: c21fc25d86b8b5d53a9c38abda6baf742d166f08 + docs/models/platformskillsourcepreviewfailurecode.md: + id: 4c8692afdaab + last_write_checksum: sha1:e38e1e927bc1aac91ef8ff70fdd2982beb369397 + pristine_git_object: d0449869cd0e07e5714d428c24bdab5c4ebf09c0 + docs/models/platformskillsourcepreviewfile.md: + id: 80920192692e + last_write_checksum: sha1:ab96df0544d94fda5d111d61cc9b4579a3039df0 + pristine_git_object: 6f4626cb6098e3e52101516801035c098c0cdbe5 + docs/models/platformskillsourcepreviewrequest.md: + id: d7467b60160c + last_write_checksum: sha1:7771e2da7324d59d224a9e561721c2ff40209164 + pristine_git_object: 8d0b03a4ac2bc72a3059f1410f7e8f6bbbf0a537 + docs/models/platformskillsourcepreviewresponse.md: + id: 9f9048fa09fe + last_write_checksum: sha1:7b55521b8f0031aeacb1bce804bf0975ba7ae809 + pristine_git_object: 0c2df151a3683fcc39d966ca90cabfb9525316c1 docs/models/platformskillsourceprovenance.md: id: 259c50c9c90f last_write_checksum: sha1:d59dbc5d8d6a5e0a6da71f5a1bb3be1e0b2c8274 pristine_git_object: e7728f1bfc51509dc05d0b9e293eb08ad68c445c + docs/models/platformskillspreviewsourceresponse.md: + id: be33b627842c + last_write_checksum: sha1:8d5442369d04fcd70f652a28c6258b06cd62b0da + pristine_git_object: 2eabd1c452141c977bdd9e331b859694a4fc2ee6 docs/models/platformskillstatus.md: id: 33c93e7414d6 last_write_checksum: sha1:7012661e93710994b8dc2a827b82bdb7da8bbb5f pristine_git_object: 566f1092589cad8787c57dd7042e2f2c71ea49b4 + docs/models/platformskillsupdaterequest.md: + id: f8592c4371a6 + last_write_checksum: sha1:32c122889d11396f07aef39f80135d7c15880d70 + pristine_git_object: 3ea30e833501442e500b5572098b632d97d0f7ab docs/models/platformskillsyncstatus.md: id: c12e6da882a8 last_write_checksum: sha1:ddca3bc0c472815cbf35240dc3ce2f17c6fc87e2 pristine_git_object: 36b3ddd907f7ed42f42bfb7983afdb9f4dfb2b42 + docs/models/platformskillupdaterequest.md: + id: 6203e2a98d33 + last_write_checksum: sha1:593dd3b031c30c8fae572763aae685c552f22f03 + pristine_git_object: 1d94bb0a434f77403b9f6c4109e6beb9c71fa6a4 + docs/models/platformskillupdateresponse.md: + id: de4f570e9a3d + last_write_checksum: sha1:da13ed5450b210d4064056c72a712b270e6fe718 + pristine_git_object: ae42e1d6a8e34603f2e157126f6eb8e733f6c3ff + docs/models/platformskillupdatestatus.md: + id: bbf036925440 + last_write_checksum: sha1:21c6edca9d3ba5ae257ae975d4fe66dfd707f6f6 + pristine_git_object: 898c434f2864d96532b529d80076e2b5cb20d68a docs/models/platformskillvalidationfile.md: id: ec82528a1836 last_write_checksum: sha1:f4f4f45aeabf5eb63cf40ce57edc939fe13a8d17 @@ -2351,12 +2579,8 @@ trackedFiles: pristine_git_object: 6802ab6379b6bd6cca97269c82fd78e88d29973a docs/models/platformskillvalidationresponse.md: id: 0c84081113d2 - last_write_checksum: sha1:24738d3981badb8640a6d34cc45c19ae7262aa87 - pristine_git_object: e1b24bc3160837a6f0dbed3b0f0bc6b843c51c22 - docs/models/platformskillvalidationwarning.md: - id: 7bf3eccb6607 - last_write_checksum: sha1:8cf24326d5c8bd98dd20bb1ef79141536a7511d8 - pristine_git_object: 128a3f9f17c6636717f4293ce9e0b08b74665b4d + last_write_checksum: sha1:5c2e270d4d9137ac55be2caeb0a2fb16de8bce23 + pristine_git_object: 9f8ab67f1fb03205ea3c9ef3ddc0002fe2622a1f docs/models/platformskillversion.md: id: b42042487614 last_write_checksum: sha1:e137b5b43e787f547287317e56776c0375a21c5d @@ -2385,6 +2609,10 @@ trackedFiles: id: c37b2e815a8d last_write_checksum: sha1:31db2f83dba4ccb6d0a5e7b80edbeff356529101 pristine_git_object: ff19123b19a2dd81301974a38d793afff935e9aa + docs/models/platformwarning.md: + id: 458ffec7aa61 + last_write_checksum: sha1:b70d5a767413fd7559601eb8e1e9728ad8b15773 + pristine_git_object: f0a2b5fa43037837c25040988cf8135560a30bb1 docs/models/possiblevalue.md: id: 630387aebbc5 last_write_checksum: sha1:490f03fc39621ae0f816bb16d2922e1a8042cdb1 @@ -2589,10 +2817,6 @@ trackedFiles: id: c27ee1a4b407 last_write_checksum: sha1:5e3c17cc69a66fb79a9d4935bfad8e2d2312ec7f pristine_git_object: fcc597abd3b5095bef1a5bdd9fd2bb372b2785b8 - docs/models/role.md: - id: b694540a5b1e - last_write_checksum: sha1:9f88b67c2e11ff6d70d769beff80158190c7d5c8 - pristine_git_object: f039c916bddf57012d6733253a30f781d61d9716 docs/models/rotatedatasourcecredentialsrequest.md: id: 426db1e134f1 last_write_checksum: sha1:7046726cc6e2da03528c6df07f69dbd9c711f61c @@ -2863,12 +3087,24 @@ trackedFiles: pristine_git_object: 64f1bba3aefec45ea846c103a9c666f9149e868e docs/models/tokenendpointauthmethod.md: id: ecc9be73734a - last_write_checksum: sha1:e4f508af54804043c21b96405f33cf17c1186b67 - pristine_git_object: 292a955adca4baebcc7fec90e4cd745ed26489da + last_write_checksum: sha1:4a3327a0c551fdc77663e6ba16ac9f801e221bbf + pristine_git_object: 94b2406d36fc7ddf7986184885dfe7acff2690df docs/models/tool.md: id: 8966139dbeed last_write_checksum: sha1:e49814f5bc36e497d901a65b3a4aa64261f8a1a6 pristine_git_object: 55b6b74e41bc39f70f0a784802401c8c8d9281be + docs/models/toolannotations.md: + id: ac541d142ff4 + last_write_checksum: sha1:e9a5464d908995e8886a54ec7276eb437d60b957 + pristine_git_object: 32d40f7666108402339f42d00b39d8d3feb50d59 + docs/models/tooldefinition.md: + id: c509cbbe5c45 + last_write_checksum: sha1:c6bffc3661f8d7e8cf4a934433f71fa9bd2b2c6e + pristine_git_object: 1470fe61a6426e25cc637a352bc41d12a1b4d311 + docs/models/tooldefinitionsresponse.md: + id: 1b1fb4e63f76 + last_write_checksum: sha1:5448ebf0a281b0c6e764f50cd524c2c5aeae90a1 + pristine_git_object: 42c552a1928d3fc06d5ff3a871b0f74c3ec0a569 docs/models/toolinfo.md: id: 9cbb352cf0f7 last_write_checksum: sha1:9bd54f773231ec20950e3603d5001e05c9930451 @@ -3115,8 +3351,12 @@ trackedFiles: pristine_git_object: 8f87704c8059174c4b82314e393da7476d80b6a1 docs/models/viewerinfo.md: id: ac723e0773ae - last_write_checksum: sha1:1124c51f4946d09c751638c54eba5c4d90dd9ee0 - pristine_git_object: 13f5dde99980decbd4182124f1f033f58308d933 + last_write_checksum: sha1:85640b3e704418562baf941ab0aba03ee579dd5b + pristine_git_object: e1cf0404fdefea6db9ebf3ac9f56709ea97edf0f + docs/models/viewerinforole.md: + id: 7218f11f313e + last_write_checksum: sha1:548816cf5c2bc230ba908f425a660539547c92e6 + pristine_git_object: 89ddc588279eaa229952b8e560f84ab08c0abe0d docs/models/warningtype.md: id: 0b9df591f487 last_write_checksum: sha1:d13bf7d08b648f318befe58fcedb3628001d67fb @@ -3155,8 +3395,8 @@ trackedFiles: pristine_git_object: 61dd41f0319201cc105e29174ab1cc0018cecbce docs/sdks/agents/README.md: id: 5965d8232fd8 - last_write_checksum: sha1:f3ef668bbf0f6cfb070b8a9e75a30546230f8f8a - pristine_git_object: c95089469ee6876384d0d0d7812c59c636213125 + last_write_checksum: sha1:578b795ea5a1511d0f0540a8d975eb93ca34366f + pristine_git_object: c3384d9d05bd776a0500f2b128218024b22a00da docs/sdks/announcements/README.md: id: 3d2e130a217c last_write_checksum: sha1:ecfa655bb27dee6890656542cfafda0aa6ed1ab9 @@ -3165,22 +3405,26 @@ trackedFiles: id: d1b7559999eb last_write_checksum: sha1:9bb496400435a160bbef383369eb1c2ae233b671 pristine_git_object: 85153af7ec594c2dbd1e4a8c2eba5ce713796265 + docs/sdks/chatsdk/README.md: + id: 83b4ee321663 + last_write_checksum: sha1:62f9a8c011ac90c694906d130778fc9e085e53d8 + pristine_git_object: 36fdb267cc1fede165adb54e68b0369f6c091d0e docs/sdks/clientactivity/README.md: id: a309613986a5 last_write_checksum: sha1:d9737458d891593ba2fb3372ab6e60ea728fe9a5 pristine_git_object: 456e90e3a787c1e62f09a17d297f1cf756c94d49 docs/sdks/clientagents/README.md: id: 8e00e6d6b64e - last_write_checksum: sha1:feba3228c12652e3bb4891ef4ff530d425161d74 - pristine_git_object: 78fe4036b016feef99db7e52ea5362c2159ba03c + last_write_checksum: sha1:43ebb3e3cf6d1b6fa0db0b18d6329f5fd5e34d39 + pristine_git_object: e54900d95d497bbd20dc36b1924093114a35cc99 docs/sdks/clientauthentication/README.md: id: 463bffe80b61 last_write_checksum: sha1:406e18430be9d365f6427c804b3992c880c39498 pristine_git_object: 7d4827b24625995a7f7a98ae5e4c8342f3b91737 docs/sdks/clientchat/README.md: id: baf998e3d238 - last_write_checksum: sha1:91ab649827afc96a3f2267b2036cf2c479cd4927 - pristine_git_object: 03c5db9223b2ab55d2ce09df519ceeb6d2f6a861 + last_write_checksum: sha1:c0231ad351e101ad0f74e70c3b19e474eb510183 + pristine_git_object: dae29ba811afe3aa3d17759779e0542e88048754 docs/sdks/clientdatasources/README.md: id: 0d629dc3ac5b last_write_checksum: sha1:05eb42287569bb139f48e0908139d6cde0c04dad @@ -3267,16 +3511,16 @@ trackedFiles: pristine_git_object: 5dd26e03b79389a3e71e90f9a3ce29b7fa384dd9 docs/sdks/search/README.md: id: 5c534716244c - last_write_checksum: sha1:4d8def390ef8fa9ed86c89d16d54283263f18849 - pristine_git_object: 04d61f7683d46497cb5eb0c511aa5c31f524a95d + last_write_checksum: sha1:4e2148cb7fce20b3afd277cd417a1711eb4299c9 + pristine_git_object: e8db7383c463ca50b1521dbe4ce637697dba67de docs/sdks/skills/README.md: id: 3a14a5c90791 - last_write_checksum: sha1:3cb350a1e984cde5decdeb8ede7517e879d5859d - pristine_git_object: 600669451fee894dc9ed8e129fb68d6aaa0b4c5e + last_write_checksum: sha1:b32dca582325ab11ac69577b90b1f8e9a39aee52 + pristine_git_object: 21ba2bac3aacfafc885674657deda6a7929b75b8 docs/sdks/tools/README.md: id: 044286549bac - last_write_checksum: sha1:a4916d6065377693c59cfbe6ff5072e83f204965 - pristine_git_object: 991a44e9177387acbfde88764b4aff351180edac + last_write_checksum: sha1:692aff6a75b65e73bad2742d68cfd78be6bf6f6d + pristine_git_object: 5481f3f8b06a25d77b856f3e42a989d9f4914c90 docs/sdks/visibilityoverrides/README.md: id: c7d003d6a68f last_write_checksum: sha1:738c52c3b0964cfb441542710e10c51ca226f177 @@ -3295,8 +3539,8 @@ trackedFiles: pristine_git_object: 79e388be87446ab6a4064b372bad0e8376d0cb5e pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:b617fe03b7f525d4c97e00541628a66356f87480 - pristine_git_object: 932a174501a63a80b6e36b4a4f632bfabf71ab6e + last_write_checksum: sha1:45e124f939485287d52a21c3cef63a7f0d6b7c47 + pristine_git_object: 0a9c335a9a31ec8fdae149276535421a5ea9865a scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:c2c83f71dea61eb50c9e05da83b16d18b4da8794 @@ -3323,12 +3567,12 @@ trackedFiles: pristine_git_object: 55f23c1feabfedeb7e8cd5bea8b910f0ae0b77d9 src/glean/api_client/_version.py: id: 0ce22b26136b - last_write_checksum: sha1:47ebac8e1284fcf058927aabaf133ae74192f2cc - pristine_git_object: 97481002c2cb88d9f0c3e363f7008bd1d15c041a + last_write_checksum: sha1:2374c6eb9520dbe1b88e06849c8b5daa79659ef8 + pristine_git_object: 19f794cdc035c5690d775b01b85ace6e3c5df6f2 src/glean/api_client/agents.py: id: b925701a9217 - last_write_checksum: sha1:d80196ac5b252a938055308b99efa4830a763ea6 - pristine_git_object: 47882b7b786d4d98281ad78b6426ea76114ff568 + last_write_checksum: sha1:1d4b152d9d9260d1c97d4983f521f30b5cfa1085 + pristine_git_object: 2b4bb4f6ad1fedc85b9b0a1722d1e67f5a56ac65 src/glean/api_client/announcements.py: id: 452f3d593912 last_write_checksum: sha1:4b9f4ff97fb9754b5da3a36c1cc8edb02318ed7a @@ -3341,6 +3585,10 @@ trackedFiles: id: a9eeecf7fa49 last_write_checksum: sha1:fb3d2fafa4944b79b38e8ba30e92e0d42079688c pristine_git_object: bf7b1b3b25ce6530403b0dd9f60599d236c780ce + src/glean/api_client/chat_sdk.py: + id: f2f30e13ca42 + last_write_checksum: sha1:85cacb2d7e0ab9a89daf48159d3b19680cc3425e + pristine_git_object: 4275af06711244c4e56b62c34e78bb5c7b37f8c1 src/glean/api_client/client.py: id: c0c188098f10 last_write_checksum: sha1:bfadba5dfdc64280fd9c7bdbf96a0651e5db429f @@ -3351,16 +3599,16 @@ trackedFiles: pristine_git_object: 42aa2ffce8105a293a0a02353f41f083136fdc5f src/glean/api_client/client_agents.py: id: 61b53ccd2b3b - last_write_checksum: sha1:86717590a1f791c70c3ecc6fe4d5ff18b8f15e93 - pristine_git_object: 0d5dc4229d7dcb364c42457e9e4c51973cad184b + last_write_checksum: sha1:fe9820c6802f3a7fc2bd2e7076a2eec27f900622 + pristine_git_object: 814240564355d980d80b74995f8fb124679d033d src/glean/api_client/client_authentication.py: id: 0b237b7c1b11 last_write_checksum: sha1:4217581430cfa2131471291a6ce36854af64dcb7 pristine_git_object: 9cd4f878de6dc1a2e29fe9456824cb66fc6a3c4b src/glean/api_client/client_chat.py: id: 42cbb9b5acf3 - last_write_checksum: sha1:e52cc7941cf114197baf25b9b3318f489c26bcea - pristine_git_object: afc4f4ebd64176258e264b8cb615b5a4bca1f723 + last_write_checksum: sha1:7449407ee74f9c6b86f1858622805b4ebe235ac2 + pristine_git_object: 1095d5f14af723e97da53e1f1de33d8f6322ad6b src/glean/api_client/client_datasources.py: id: 75635d40099f last_write_checksum: sha1:c07b4e9aecede3c49184b2929475c05d675430ea @@ -3399,8 +3647,12 @@ trackedFiles: pristine_git_object: adc08d2771a312d55750096248b0f1a82d0432d0 src/glean/api_client/errors/__init__.py: id: 88bbd5450191 - last_write_checksum: sha1:14e809dc56f3433b9234d42efe82ade97f2b59de - pristine_git_object: 56e241a90910d510b0f3e6723840d5b27af43f2d + last_write_checksum: sha1:1efa888eacd97dfa261f42013ae3690ab348346d + pristine_git_object: 5e260b86f2b4826576ae507b3940399bad35960b + src/glean/api_client/errors/accessrequestpermissiondeniedresponse_error.py: + id: 9cefe206b2ef + last_write_checksum: sha1:20d1fd5c5ed1fc0eaf5d9d1238a3df4dea0f2d50 + pristine_git_object: 45d07ad01c29719a13c35083a5d4049e19439b93 src/glean/api_client/errors/collectionerror.py: id: c0932ce3ae9f last_write_checksum: sha1:0b5f08e5372726fe70cd721719c386d0e21d0dcc @@ -3433,10 +3685,18 @@ trackedFiles: id: 63827377850c last_write_checksum: sha1:20529aaf172850e5451660610daf7a7ee92e82ee pristine_git_object: 2bd60f32a150ba565402966f54d93e2929a1f153 + src/glean/api_client/errors/platformunauthorizedagenttoolsproblem_error.py: + id: 84af4fc5b4a1 + last_write_checksum: sha1:eb59d47d062080e4928b2222164bca8c3c73c2c4 + pristine_git_object: 52de3843d7539c47afc9e6f88c9270947448799b src/glean/api_client/errors/responsevalidationerror.py: id: 70cd17f93ab7 last_write_checksum: sha1:56b679b1845b634fad48074398e87e164af0fd70 pristine_git_object: 3e029c12197bb87be06e01323afbc495968a6eaa + src/glean/api_client/errors/unauthorizedagenttoolserror.py: + id: 2cd17aac8050 + last_write_checksum: sha1:b3b9313382ff863c5201faf5e5c32ecc11f28129 + pristine_git_object: 0207c42cc0c67e421eaee7b77f95c2ad4c036028 src/glean/api_client/findings.py: id: 50243a1bf5e8 last_write_checksum: sha1:7a092ae43055ff81b49ec86df36d5b8e11b7c618 @@ -3463,16 +3723,16 @@ trackedFiles: pristine_git_object: 98f3a192728363595124514b94bc66b85d331921 src/glean/api_client/indexing_datasource.py: id: 97727f0727c1 - last_write_checksum: sha1:7aa6de1171deba576fffa1be6a70714a59bd2d4b - pristine_git_object: 988896285fa0a79fcf9f2f328eaf7debf5726ee5 + last_write_checksum: sha1:7b5200116b841c618a62b749926023083b189a8e + pristine_git_object: a0e769b23bdc4eab40a84fc690922d9cc4e933a2 src/glean/api_client/indexing_datasources.py: id: 9520e2db8686 last_write_checksum: sha1:0f3af675c4a30dcfc314d299af9381ed8120c7ac pristine_git_object: cdf0f4dbd0b9b08d84f409bb788cf3bc4b614406 src/glean/api_client/indexing_documents.py: id: b5c2b64ee1fa - last_write_checksum: sha1:a65d60eba819c2ffc4b3661479c0dd493df55358 - pristine_git_object: e296949fcd94f3e8d538b44b4557ebcefe953f3d + last_write_checksum: sha1:d0745f11fb8ebf34c8c8b0462887e258060e41ce + pristine_git_object: 6f044b6cfb0485acc8f0e86e9670a240d3751b63 src/glean/api_client/indexing_permissions.py: id: 86fd3f14396c last_write_checksum: sha1:1562435993344c7a69c49e3beb36634486f2f2c7 @@ -3491,8 +3751,12 @@ trackedFiles: pristine_git_object: 77016bfff6209866592fd8b42f2f3527f900992b src/glean/api_client/models/__init__.py: id: d5f6ea5efcbe - last_write_checksum: sha1:6af0f67725b1b578fb9ef172e24132d5f0545721 - pristine_git_object: 029adafef7bdd43fd2244cfe2d899ff71ae63f47 + last_write_checksum: sha1:024194f4376249e317104ce0b9a4bd95963e3344 + pristine_git_object: c67a916779c51cf060625336b8c5e3987d27ca10 + src/glean/api_client/models/accessrequestpermissiondeniedresponse_error.py: + id: 22a2fa0d5899 + last_write_checksum: sha1:f7dd6f906a4dd7433992f77395f9fb491fa5ac5c + pristine_git_object: 52b5d073dba6f0af5579253ca43171617c89a36c src/glean/api_client/models/actionauthtype.py: id: c7402f35092d last_write_checksum: sha1:7aaa5d1c11b105d0d7265e2a83cb005aafa89645 @@ -3647,8 +3911,8 @@ trackedFiles: pristine_git_object: 47e9bf2fa2edbe605d30359bca3dbfebda8ed27b src/glean/api_client/models/authconfig.py: id: 9e88a246ee36 - last_write_checksum: sha1:e25f69a5ddae03308bdbc2391ce3449de236b4ed - pristine_git_object: f01e07f8513fdb529c333b6bccf6d5114ee80cc0 + last_write_checksum: sha1:6092109d1ecce4dfb01dc3fa1168642d18c96da2 + pristine_git_object: f085390a589f3bd4d3c799fb65dfea1f478cd3c7 src/glean/api_client/models/authcontext.py: id: e5ed1f25d2ff last_write_checksum: sha1:666912fbc5907c277024f56996d0b1e7511299f1 @@ -3995,8 +4259,8 @@ trackedFiles: pristine_git_object: 1236b65335edafb09cc59136ce8049c614a1a289 src/glean/api_client/models/customdatasourceconfig.py: id: fb9b6a1441c1 - last_write_checksum: sha1:61fd17497a8f0eb3a2eeccd8eec68a2a30cc548a - pristine_git_object: 635c888a5958270b094a87b594bc345964b09f20 + last_write_checksum: sha1:61cefdb4a183e04e426c1166056354a466c6380d + pristine_git_object: 0b728d6fc411a1f8d83643b518af6e5502ee51d0 src/glean/api_client/models/customdatavalue.py: id: 956eba94ae1a last_write_checksum: sha1:76c80857d8b125cc75d3da0da1d2f489dc9847e4 @@ -4531,16 +4795,16 @@ trackedFiles: pristine_git_object: 44041cb376d89949c815ea1e7813505940605855 src/glean/api_client/models/feedentry.py: id: 023eb6c10ae1 - last_write_checksum: sha1:97d930a5b3aa989715b02d0823c58aeb2bd466b1 - pristine_git_object: 0c7309ee58376ec34729438fd688a1aab61805ec + last_write_checksum: sha1:baa7d04a5ae830282e82b19e870788c2b90da464 + pristine_git_object: 03dd978e2940f2d93f5b9393c84d60c0e36f10b6 src/glean/api_client/models/feedop.py: id: b8067ac0a127 last_write_checksum: sha1:c58cb0a3a01925eb14d84176c5c6e9d8f4d84cf1 pristine_git_object: f39626285f84630e5a9233736d652914b759d44b src/glean/api_client/models/feedrequest.py: id: 33496b6a5bab - last_write_checksum: sha1:28ef772d89ffd87ffe654fa49550534be70dad35 - pristine_git_object: 00be41500f9eac0bcae31b08d20bfc9eb66c4e4b + last_write_checksum: sha1:e67128cc0d6e17f4bf4f5a33717cd0ef53e68560 + pristine_git_object: 69d85fb78ee67fc423208f0cb864b5416c5d38f4 src/glean/api_client/models/feedrequestoptions.py: id: b99003fbf522 last_write_checksum: sha1:d5ffee29242075cbe6d2dd5ec916b0c3d40acf54 @@ -4551,8 +4815,8 @@ trackedFiles: pristine_git_object: 683438c837601f483526ec18756fadc7222edb24 src/glean/api_client/models/feedresult.py: id: ae187332b37a - last_write_checksum: sha1:ea65cfa99f0db35dc30bf81348571ee81ffb4363 - pristine_git_object: de49202bb74a185d54462e46aa0d7b1999018999 + last_write_checksum: sha1:fd675d08d2aa02216a2c20748560bf9273e35347 + pristine_git_object: f5bc568a98732c157152a822c5009544bd4275eb src/glean/api_client/models/followupaction.py: id: e2de5c4c8524 last_write_checksum: sha1:49e1a826449081fecfcd828c940604db949a8533 @@ -4773,6 +5037,10 @@ trackedFiles: id: caa449cca979 last_write_checksum: sha1:bf1850bce3e5468612e5e067cd8c6098b7a9d5ff pristine_git_object: 91b8c13d4ebf6f1fc2e1f5eda73490db39906025 + src/glean/api_client/models/gettoolservertoolsop.py: + id: a9350950f7e5 + last_write_checksum: sha1:9c0f9999cdd5d32332a9abd7da148e2ccb2b29c5 + pristine_git_object: afb417b0df172039b755c2e887324adeeb2e28fb src/glean/api_client/models/getusercountrequest.py: id: f313059beab2 last_write_checksum: sha1:f2a54a902e9dfa08b5ed7ccf4e542b9b8b24e4a5 @@ -4817,6 +5085,26 @@ trackedFiles: id: fec761319e41 last_write_checksum: sha1:40a570ee41fa86918ceb63a79b5b358d70ce07f8 pristine_git_object: b7109f6b54dd975c977f0a13e3221c036c9c4cdf + src/glean/api_client/models/importagentop.py: + id: c36a782fb6f7 + last_write_checksum: sha1:0238245a8e38883796f8b4a6ae079d1447a7cefb + pristine_git_object: d30f537ead3a77557adbd3b857cf4b2fbc9a4bf3 + src/glean/api_client/models/importagentrequest.py: + id: e548b6034e1c + last_write_checksum: sha1:9fd1a71f0c294cffa3edf687d5d668f4974b065c + pristine_git_object: 92ac1ff0289fba3af470ec676a2f357ee651795f + src/glean/api_client/models/importagentresponse.py: + id: 22a3fa434b8b + last_write_checksum: sha1:a3e9cc2d8684fe175adf720d8094ad1a0759cca8 + pristine_git_object: 19b134efa10635ae8e18763c90b8e602eb5e009c + src/glean/api_client/models/importagentstatus.py: + id: 11d6671e6bc2 + last_write_checksum: sha1:4aa73c9e6bc9877cc8655bf9ca02007bf9e3ec1b + pristine_git_object: fb11e89e6fd7cec6e3c8a964a4e7869174399940 + src/glean/api_client/models/importagentsyncmode.py: + id: 822430a8259c + last_write_checksum: sha1:5f1a113d047fb9bf53cd80408aa1282d91453e04 + pristine_git_object: 3f93c95cf3b3537fef05ec3ce5a2f7588231ad69 src/glean/api_client/models/indexdocumentrequest.py: id: 39de79505ed8 last_write_checksum: sha1:f1e607bb1939b44c99540a787ca0d10fec8d62b6 @@ -4987,8 +5275,8 @@ trackedFiles: pristine_git_object: 16e9645ac5ecfebe78e1d640f885c2ac6ed0c8e3 src/glean/api_client/models/manualfeedbackinfo.py: id: b7e93f70592f - last_write_checksum: sha1:da567fbb693ae1e791a2fb159fc68a7a7f92fd00 - pristine_git_object: dc8463af968402f19d118edd7425df56261f5fef + last_write_checksum: sha1:7c25693c56f51c4a9789fed37caa77874f3c8a19 + pristine_git_object: 5d4bb51527f08455c22de97a0b6b23ab1bd466ee src/glean/api_client/models/manualfeedbacksidebysideinfo.py: id: 5cd6cc3b46ca last_write_checksum: sha1:b2717bc4112725c29f9d41376e51fc1212ab844f @@ -5047,8 +5335,8 @@ trackedFiles: pristine_git_object: d68228bc28c443824b2b73ff1c899053769a56b9 src/glean/api_client/models/objectdefinition.py: id: 96d425234754 - last_write_checksum: sha1:bbf4d288df6ccc0bed076dbbc0f6a0ee6dba9d3f - pristine_git_object: f9c359d3f7be386a2e9b6a7d9af5fed1613c4c1a + last_write_checksum: sha1:b63817fa6c300a10905043a49f23466ff583ff98 + pristine_git_object: 65f80f05226193a90eda813741acac28ba772f90 src/glean/api_client/models/objectpermissions.py: id: 6a2561118579 last_write_checksum: sha1:e3d51c6afdf467afe6559222130ac627a2331625 @@ -5099,8 +5387,8 @@ trackedFiles: pristine_git_object: e9511127696034578efc1cc3b778b87564be531e src/glean/api_client/models/personmetadata.py: id: c3af6f3d50a4 - last_write_checksum: sha1:39f3e43e7c45854d4ddb3ac0a97cf0a08ccaa874 - pristine_git_object: 4cddfb2ea40f6d2d3679d244614c83f494a538f2 + last_write_checksum: sha1:6a87a924b1f4c0b27b9d4f502fd339d407212da7 + pristine_git_object: 5290ba806f6e199b07b5e24ec9d8a6f88e92bc58 src/glean/api_client/models/personobject.py: id: 59af9c1e1c5f last_write_checksum: sha1:8e37069549deee32a725de213e86c704bf1352ab @@ -5145,6 +5433,14 @@ trackedFiles: id: 606568a4c8fc last_write_checksum: sha1:58370e345df87a242670e2cfdb26800caa6a00ce pristine_git_object: 880c65c1e74dd49543d650516f29141c6cdd486d + src/glean/api_client/models/platform_chat_createop.py: + id: 6f911817c878 + last_write_checksum: sha1:77624faa54aaec5c18eba3d8cbe2a1f71bfa0b1c + pristine_git_object: 03ee7209ccbcf73a99bdc0123f0b86b0488df9a2 + src/glean/api_client/models/platform_search_filtersop.py: + id: 3876ec8f6e5b + last_write_checksum: sha1:0551a1836339a7b0f5dea4cf8946e001384d3146 + pristine_git_object: 2120898eda5b77bff898692d2bff7c90a74513ae src/glean/api_client/models/platform_skills_create_versionop.py: id: c107217b99a3 last_write_checksum: sha1:03372f5d66b5644281f59d46b1e34f414ba75da9 @@ -5173,6 +5469,14 @@ trackedFiles: id: 2172706b6858 last_write_checksum: sha1:7e9d92bd23b8072d38fc787c08d2c1d11afee1dd pristine_git_object: 3f77419309047da04a558921ae77b447bf465d40 + src/glean/api_client/models/platform_skills_preview_sourceop.py: + id: b7afa7764cef + last_write_checksum: sha1:cc21b3ead6075cb3db6426c2329b070648cdf32b + pristine_git_object: 30dcdd72bccb0fbfafd8c74a556654fd98da0b04 + src/glean/api_client/models/platform_skills_updateop.py: + id: 48967688f399 + last_write_checksum: sha1:f68e7c13d27210e6b53530e94b24408540d4314c + pristine_git_object: 42e0aca116a2efe4c5677df642857a6d87ea33b8 src/glean/api_client/models/platformactionsummary.py: id: 00069b22d246 last_write_checksum: sha1:f714e076c3e0c86ded17dd732ba304dfc7d5526e @@ -5217,18 +5521,78 @@ trackedFiles: id: 2c3bddef7679 last_write_checksum: sha1:23dd758cffab6db76a051eb029776a64613a38f6 pristine_git_object: c9f820b8a8edc25853156cf3f9a6c0b43feb1865 + src/glean/api_client/models/platformauthenticationsuggestion.py: + id: e99ec01300d2 + last_write_checksum: sha1:bac4d353a350bfed0361d6668c56efca232bd782 + pristine_git_object: 04be56b8972f39419fc27c325e9f4824a09f96f2 + src/glean/api_client/models/platformchatcitationannotation.py: + id: 50f8f46928e1 + last_write_checksum: sha1:ab8c8b10f62850297db51063e09bb29479c12e12 + pristine_git_object: e100f70c8bcd8303c5fd51b63c733faa479420db + src/glean/api_client/models/platformchatcitationsnippet.py: + id: 99f1e0941ff0 + last_write_checksum: sha1:97c26e2f2d9196f5bb6514b90248c920278eb9b0 + pristine_git_object: c679f40a98eeeaf640d6aad4584c7f48dd4f1e7d + src/glean/api_client/models/platformchatcitationsource.py: + id: c6040b8a28ad + last_write_checksum: sha1:5f97ea24bd7e252fdd8f2b9d50c1b89d27ba3b50 + pristine_git_object: 790d1678e2ca7151021a18bcd5f48344fbfb6b77 + src/glean/api_client/models/platformchatcompletedresponse.py: + id: ed59f46e73df + last_write_checksum: sha1:751f90005564470d001894b717276fc8079445c4 + pristine_git_object: 946d487c21beaecdb8b8b23e411aca25d44fb4e0 + src/glean/api_client/models/platformchatcreaterequest.py: + id: d6d4fc59e049 + last_write_checksum: sha1:134f060233ff4ec9858ef2b0709a7bcd54f43ef6 + pristine_git_object: 252f07c14d7c123424d9b17b5d2c2802ae6ad642 + src/glean/api_client/models/platformchatcustomentitysource.py: + id: 385a56c07858 + last_write_checksum: sha1:94736d2559fc829455e00b865f787e97b5b6d7a9 + pristine_git_object: 768037684869993e6de63e7457072716d2cc6149 + src/glean/api_client/models/platformchatdocumentsource.py: + id: 1cd8111e3b4c + last_write_checksum: sha1:9381db0a65890243ff595a663ee7b78621f85880 + pristine_git_object: 0fa4f61a2bbcfc246569e597192574f429c3e3e2 + src/glean/api_client/models/platformchatfilesource.py: + id: 1a9d4653c065 + last_write_checksum: sha1:b335a3fe30a805eaf7fe831e82231edc0f280c9b + pristine_git_object: bde933e7ef7312398aafb3622337ac3867f77e70 + src/glean/api_client/models/platformchatinputmessage.py: + id: e32871fda394 + last_write_checksum: sha1:44856f2b0747bd3dee0ba7dea3f63d1c7b871b41 + pristine_git_object: 1031b46478635c863692e2ca0d32644bd0977c66 + src/glean/api_client/models/platformchatoutputmessage.py: + id: 15c8512d3810 + last_write_checksum: sha1:58607803b4c6067d91792378356cc1af3d769309 + pristine_git_object: 686a0c29b38fc9796d4454ffe88d0e3bb7ddfed6 + src/glean/api_client/models/platformchatoutputtextcontent.py: + id: 91b9987e8b98 + last_write_checksum: sha1:936d1dad8ef1421b171c6b02006b9b66e6fab3da + pristine_git_object: 0d076b64bd1876e63763f043398f508e47146b16 + src/glean/api_client/models/platformchatpersonsource.py: + id: 617b816c747b + last_write_checksum: sha1:83261124006375eaa486bc3703beb10271e39450 + pristine_git_object: d25484864c73797b854d25188747a07815195aa0 src/glean/api_client/models/platformcontenttype.py: id: 87e6bc168e08 last_write_checksum: sha1:97548628abf68b0b2727ba126ce363000e8d2882 pristine_git_object: c327d0ce5243c8fce910468c09d681a8d254ae1a + src/glean/api_client/models/platformdatasourcefilterinfo.py: + id: 30d2d116afc7 + last_write_checksum: sha1:fe1bb6ad44d39ce794c56869d659333ac4fe5ade + pristine_git_object: cd2ba67fa39dab5eb8b2490daa3872fcff56719e src/glean/api_client/models/platformfilter.py: id: e0719ea40cc5 - last_write_checksum: sha1:cdedb8731ce215c98444464e4e852b60e519e669 - pristine_git_object: 40c1e357d26b23063b2d1d71062c5c67eb12a330 + last_write_checksum: sha1:a56bda496c9eb473d9aaa08426e077e2694216d9 + pristine_git_object: 2243c5535a3e7a8a76c0e7845a496dea1d97ad81 + src/glean/api_client/models/platformfilterfieldinfo.py: + id: 5be6062efbd8 + last_write_checksum: sha1:ad8f52a53b9839f63ac0f4eabc4e3cffcd6a5790 + pristine_git_object: 755b03c792d7ef713fb86ef6d119e19c8b27f116 src/glean/api_client/models/platformfilteroperator.py: id: f7d7bf136596 - last_write_checksum: sha1:843173c8116781c6b5eba46db3896f3cd55126ce - pristine_git_object: 1ac40ef8de6ff847c54ade940beb6ea97704999c + last_write_checksum: sha1:542dab71eb37501311f1457ef804f2486cc12d69 + pristine_git_object: f0185fb9ecc077306220bae51217c1eb86018aec src/glean/api_client/models/platformmessage.py: id: 5124dae40c5d last_write_checksum: sha1:e86beb4e210ed500ab72011ef90bb97b909a39e8 @@ -5247,24 +5611,28 @@ trackedFiles: pristine_git_object: 3f68797935412add6a9cbe28335641064352c8c5 src/glean/api_client/models/platformproblemdetailcode.py: id: 3aa0b8193255 - last_write_checksum: sha1:741d5141df71f703ec00f6e34977220f8b2b3510 - pristine_git_object: af54ad68a9b3aae79d83f8f196b93144c532a8a2 + last_write_checksum: sha1:bd5e5b46ad4ab13b8ff4ccdc54dfa5f388f6a513 + pristine_git_object: 35cd1982cee75b48066040707a4c2b1f4e02cbf8 src/glean/api_client/models/platformproblemdetailerror.py: id: ea67cf68f170 last_write_checksum: sha1:c2f31d78abfaf8e63bd7ab62ff9e0fb281caa5a6 pristine_git_object: 336efdc33bfb762c3b0ddfc706b8d089da3cc23f src/glean/api_client/models/platformresult.py: id: 65de4ed5c1b3 - last_write_checksum: sha1:d4635567744c3c488806d4a1ba5235d2d9e6ca40 - pristine_git_object: 08c36e88c8f88d7b63173530501d35326bd32de1 + last_write_checksum: sha1:b4b820992eaa454f9ac072e152204c6289e2a314 + pristine_git_object: 167efcae3bc5bd648b92288a284109f367803d2d + src/glean/api_client/models/platformsearchfiltersresponse.py: + id: 743edd99f7aa + last_write_checksum: sha1:9c6e81390c3f1665bc2d26c2e3c5face283f759d + pristine_git_object: 1d8aa68908c3e182cbc926542d39bfc45d585be3 src/glean/api_client/models/platformsearchrequest.py: id: f2376466383f - last_write_checksum: sha1:30d48da0462fead00d34a7ad3cb5687b4fbeb8ba - pristine_git_object: 8f37fa7d2d319a465a977c83718f6e7e10fab908 + last_write_checksum: sha1:0255eb2414fa128be1d2369af61a6f9b9aa0fa53 + pristine_git_object: 8a3cd9bc7053b60f71b536f9f8e3593355bf5579 src/glean/api_client/models/platformsearchresponse.py: id: 7ee9ec06e00c - last_write_checksum: sha1:9ed8c951be31629e50f797c8e4bd59a1ef494eef - pristine_git_object: d98c78d622564a3fc35ed6d5d543866f64f76704 + last_write_checksum: sha1:ffcd075eb5fc0308760c1ac2065ad4915cc94642 + pristine_git_object: ff13d204ece88b150c32fb69c65e266c7756b1af src/glean/api_client/models/platformskill.py: id: 10e1f311015c last_write_checksum: sha1:c0225f37738625dbb6cab763be77cf5e40beafeb @@ -5289,6 +5657,30 @@ trackedFiles: id: b031da1d2783 last_write_checksum: sha1:45e8d141fb11032f3fd143d1818845a7eb750c3c pristine_git_object: 7303b0519deea755bd54b5f5a42e5e0908c5c92f + src/glean/api_client/models/platformskillsourcepreview.py: + id: aeb8f137962d + last_write_checksum: sha1:2e2fd40151aff7cd3f0cb08997d66ffce8bfc314 + pristine_git_object: 084954d9baf77f4d2fe897342c116773259cee52 + src/glean/api_client/models/platformskillsourcepreviewfailure.py: + id: d825f0e64417 + last_write_checksum: sha1:89a2754dc66b98cf4e0de90cf4086d68ac014abd + pristine_git_object: e190c122137826427ae594e10c99b3bef7406e77 + src/glean/api_client/models/platformskillsourcepreviewfailurecode.py: + id: d067d38bf000 + last_write_checksum: sha1:6aa3352b520fc7e758dd238ead52f56d18facf75 + pristine_git_object: 627495d306bdf1a7cbcd446551c37a894bdd9a4e + src/glean/api_client/models/platformskillsourcepreviewfile.py: + id: d7594e3706a8 + last_write_checksum: sha1:8111240b45e77e5605be4d2993df8cbb0d1fe89b + pristine_git_object: 71aee5339cc6d9c46394bd7c34b50cd51cde5a40 + src/glean/api_client/models/platformskillsourcepreviewrequest.py: + id: 521e672126c6 + last_write_checksum: sha1:987c57fe9b2db03d39cac8dc58750e7dfdacf7b3 + pristine_git_object: 92057490d80383015b2b175b7cd1b07845f46a24 + src/glean/api_client/models/platformskillsourcepreviewresponse.py: + id: 41861007f222 + last_write_checksum: sha1:9eb2f08cf3b4ed7924286cc6c0233868ca1168c2 + pristine_git_object: 37cf8bc1466c6482fd43c53d3ac2b54759d7d9b8 src/glean/api_client/models/platformskillsourceprovenance.py: id: 9d34177a5499 last_write_checksum: sha1:f1e2f0b74c65cd83e452b6e1cb0e33f0921c1085 @@ -5301,6 +5693,18 @@ trackedFiles: id: 4603ae41cbb9 last_write_checksum: sha1:911e9731ed66a257df85158125499d212a37f995 pristine_git_object: 13fb6bcf5a11934ae1c8e1cd100715fd8aaaedf6 + src/glean/api_client/models/platformskillupdaterequest.py: + id: 02dbc059a73d + last_write_checksum: sha1:84dd229a9a3f9cf61b6be86a544bece3187b5c22 + pristine_git_object: 0d87a591d2b5c92c347c166731dced9c89da0330 + src/glean/api_client/models/platformskillupdateresponse.py: + id: 4a7d3fa0c78f + last_write_checksum: sha1:ea15b9e50758327fe3bb81eeae59c81f226dcc6f + pristine_git_object: b508a52fe52301ac4c371126c3ea8f09d411b6a8 + src/glean/api_client/models/platformskillupdatestatus.py: + id: a1d6763af4bf + last_write_checksum: sha1:3655d3529f2bad31a7424a908deaa69afc46782b + pristine_git_object: ede7b308d849e5253a989fd75bd3485b16bed70e src/glean/api_client/models/platformskillvalidationfile.py: id: 840ce4c25e59 last_write_checksum: sha1:a179e1a787bba71733234145ad88e9dd3350cd5a @@ -5315,12 +5719,8 @@ trackedFiles: pristine_git_object: d0a3a2b4d53d722ee63fde843f4e83b695f0ba62 src/glean/api_client/models/platformskillvalidationresponse.py: id: 9ce3b88a9cc1 - last_write_checksum: sha1:efe29e74dba840e7eca2d0219face8eaaab14793 - pristine_git_object: 70624e36ac8b7651e9873d3e5273fad7c8caf11e - src/glean/api_client/models/platformskillvalidationwarning.py: - id: f5af64c67dfd - last_write_checksum: sha1:b90b0e91caa4d9d375d4f602f245a717bdae2870 - pristine_git_object: dfd939ef42d4c30171ae289be5b78192d36980a3 + last_write_checksum: sha1:40595cbd0cb6e9e4ea8621266432b8a99967e865 + pristine_git_object: 76af15759b1cf333367ba3f25496adae56ab0fdc src/glean/api_client/models/platformskillversion.py: id: a9b3f54c0ef8 last_write_checksum: sha1:507ac67246f4d360aef9c77bc6eed79d11d82e9a @@ -5345,6 +5745,10 @@ trackedFiles: id: bf2b03e84949 last_write_checksum: sha1:645217a3827cd2a7455b88277f1ba2dcd4a5daf1 pristine_git_object: 0a5acb2a9110e33b96db4e36aa09c1bf36ab1cbf + src/glean/api_client/models/platformwarning.py: + id: b99ca6ee1c74 + last_write_checksum: sha1:4e82a608e924c72338481e61b2e51fec9e447605 + pristine_git_object: 3f5ea79c0debd518f17935277fe3e3bd3e6870b1 src/glean/api_client/models/possiblevalue.py: id: 6046129b9c7d last_write_checksum: sha1:4495a1288f312de877f9bcaa547f35178119ca59 @@ -5721,6 +6125,18 @@ trackedFiles: id: acaa76f0ab87 last_write_checksum: sha1:d6eefafc0dbe06ada923be3af630ca6c40cbd45d pristine_git_object: 86839d1b3a9942ee9890d1bbcb29d4326ea63685 + src/glean/api_client/models/toolannotations.py: + id: 2b8a8339730f + last_write_checksum: sha1:7bedaba236594e70feb3f20d902be83d725dd978 + pristine_git_object: fa00357c76e2d4458aa23bf45175d6f354a6b18d + src/glean/api_client/models/tooldefinition.py: + id: be1be88fb89c + last_write_checksum: sha1:53fa688bf149f3eae975894ce765fd098cd00875 + pristine_git_object: 805617b1ffc5776af15895148c0c9c841fa6299a + src/glean/api_client/models/tooldefinitionsresponse.py: + id: 40fc72a511c0 + last_write_checksum: sha1:4a42b7cccfb3522ca62cd8072c18929ebf085365 + pristine_git_object: a0fa1e092f2587591c0143ac67c6443217a7d31a src/glean/api_client/models/toolinfo.py: id: f210c6276023 last_write_checksum: sha1:0fb5a9601b9e8ecd9cd71c2f82624fbac8a592f7 @@ -5919,8 +6335,8 @@ trackedFiles: pristine_git_object: 7c93b46f83ad101dd6862f42f7bda2e7e8e12399 src/glean/api_client/models/viewerinfo.py: id: dc44fac102b9 - last_write_checksum: sha1:894263c20c3dd83f12fee778e389ff8b363d91a3 - pristine_git_object: c85d80b8e9da0b2f99777352408e26947e014e7a + last_write_checksum: sha1:837324bbcbbbe04f23eb9ff4f895d168e333fb4f + pristine_git_object: 32b116e774f59bbb14e607ce7ed523e98b9dfa35 src/glean/api_client/models/workflow.py: id: e59e0fe5f663 last_write_checksum: sha1:9c517b8d64b88fc358e3d2f6efd36e0e3ddee2ff @@ -5943,8 +6359,8 @@ trackedFiles: pristine_git_object: 85e816dc7cea2c95b4e067d756e428be2696d0a4 src/glean/api_client/people.py: id: e32c03723ded - last_write_checksum: sha1:b82a2331deefc96d298fe6c377a220986fe15dd3 - pristine_git_object: 5e0a722f4e8a9e75246072acb8ca5786bdf8634b + last_write_checksum: sha1:0bd6e6c6688847e26416f740fe2ab6712038d0b8 + pristine_git_object: a1cca36e4375ef148cff9448fce1ca8e73ed5f89 src/glean/api_client/pins.py: id: 4a37ead65f8a last_write_checksum: sha1:127d0abf8b7631fa2cd9ed20e4f3a8c93f082e77 @@ -5963,24 +6379,24 @@ trackedFiles: pristine_git_object: 3a4c3e6eee14c25616dbc8cbec206d9a74070d80 src/glean/api_client/sdk.py: id: e2de37b3ce92 - last_write_checksum: sha1:182ea8d87afce454aba892f8466ddc2ae06aefbe - pristine_git_object: b2c9f79e4c758de1eb8f9a377229bd9be12b301d + last_write_checksum: sha1:1cea83604fe25c207935e67219047e719405c46c + pristine_git_object: 484c68fff8ddecaa06dceeb457186ddcde7a16de src/glean/api_client/sdkconfiguration.py: id: f356ce00b5b7 last_write_checksum: sha1:1ae43e08ae57ae277b3ab5e66b52d020149ebe00 pristine_git_object: 22e0a4eab0ef8e54dcfd986084d01c14a56f47a6 src/glean/api_client/search.py: id: a3b404a8b402 - last_write_checksum: sha1:d89f2b24da1d3355e321bf802841bc17cdde30a4 - pristine_git_object: 571fc8909a3c8be6c852a995894ac61c9d743a6f + last_write_checksum: sha1:a46e1a0aca2fcf75971fdb1f6eb3b72529394c25 + pristine_git_object: 91ea57d2012c5dda71fb1a4b5d420173d7c357b5 src/glean/api_client/skills.py: id: 79f3c37e1b5a - last_write_checksum: sha1:48b915741fc9f81623772efe099a5a83c70c9ccc - pristine_git_object: 094194c4dfde7aa5a6a4895635f568b6b045c404 + last_write_checksum: sha1:15ab0297746ba32089071cc83af62d5c626970d8 + pristine_git_object: 9ced0d8e34716e5942de4cf57a4372920c5cf169 src/glean/api_client/tools.py: id: 3ea40147c1cc - last_write_checksum: sha1:9c353defdddf1c89f58a4b7d7cb8b22e4cb0be1d - pristine_git_object: 9c0699260ef8c6836ff9fbadca8c59a2393ff8e6 + last_write_checksum: sha1:255ffc640ebbd6a9f0c6486a78f1e7d3eb9f4645 + pristine_git_object: aa8b10a3ab803a126388d5221b8b65cf44c647cf src/glean/api_client/types/__init__.py: id: f63c790831ee last_write_checksum: sha1:f9ad14217f832e74f594285960125add50324be9 @@ -6131,8 +6547,8 @@ trackedFiles: pristine_git_object: 929558ef2e1165f7e09da6d0a64f016c90971655 tests/mockserver/internal/handler/generated_handlers.go: id: 61ac4f7cce9e - last_write_checksum: sha1:b5ecf7362e796b0cd3a2a23be481325a311469df - pristine_git_object: f24dcff889d5e223019b522e6bc725bf20c21bea + last_write_checksum: sha1:9d606274826f3a73adec3e888e2a315e72241741 + pristine_git_object: 690005ed0b6415a4c96f01fc5b86c295c556af56 tests/mockserver/internal/handler/pathdeleterestapiindexcustommetadataschemagroupname.go: id: 979e4583765b last_write_checksum: sha1:b1d4edb259d907c7a88b634bf16f0cf152321693 @@ -6149,6 +6565,10 @@ trackedFiles: id: a3a921765081 last_write_checksum: sha1:41dfbc3d70153e24cc2a898336d7d2a9c6e3d3df pristine_git_object: a9212f1d5de9d8b40e73ea4b410feb26921c35cb + tests/mockserver/internal/handler/pathgetapisearchfilters.go: + id: 2a805587fc23 + last_write_checksum: sha1:9579545a91c3b5e5a204ede2f630f1e0e738b872 + pristine_git_object: 61dfb292ca694340fd9796a891113cfb07aa8a32 tests/mockserver/internal/handler/pathgetapiskills.go: id: a1697453079c last_write_checksum: sha1:1608120c2f9ce748fdd2d373e576b6a0758092c1 @@ -6221,10 +6641,18 @@ trackedFiles: id: 6c9f22f1b9d6 last_write_checksum: sha1:abe99a9d9076d3c0d944630fa94f3a83fdc10ceb pristine_git_object: 53c86d01a47aa5d7802b7b20da09d44ab1ce0907 + tests/mockserver/internal/handler/pathgetrestapiv1toolserversserveridtools.go: + id: 1aef0e7406ac + last_write_checksum: sha1:91c52f9cda63058c8cac1992d7e3223c96dd7a2b + pristine_git_object: 71a41e80d04ea48366004b7babbf02aace219794 tests/mockserver/internal/handler/pathgetrestapiv1toolslist.go: id: 1598fa297cf6 last_write_checksum: sha1:8b0d26cd221009e78396ed0c573e78c0ac719e36 pristine_git_object: 163466cb44aa1a16439b3bd65ab52f00aeeff427 + tests/mockserver/internal/handler/pathpatchapiskillsskillid.go: + id: e09721a8879b + last_write_checksum: sha1:90c425f15814afd0ac42817b7ad6a056b6efc278 + pristine_git_object: 2b4d9db548fd58503a768732db17aca59d354d25 tests/mockserver/internal/handler/pathpatchrestapiv1configuredatasourcesdatasourceidinstancesinstanceid.go: id: 24dd79d2c474 last_write_checksum: sha1:14d3e93a3f37b61145188a9e6544398fcfc200e4 @@ -6237,6 +6665,10 @@ trackedFiles: id: 7e4a6cf9ab84 last_write_checksum: sha1:e0dffbdb295b7d71a0c9b405839947fabb50b9d6 pristine_git_object: da7d08b0de7af705b535b8c40d172a3db3ba05cf + tests/mockserver/internal/handler/pathpostapichat.go: + id: 87a434352b0b + last_write_checksum: sha1:b09ce4ea80663c0fbf6e93e6abf9e0aa50bb28f0 + pristine_git_object: 7a5ec745c7b1c58e41225f7a280774e6ade6c017 tests/mockserver/internal/handler/pathpostapiindexv1adddatasource.go: id: 549adf61c832 last_write_checksum: sha1:f1c92a8b8e4db16ee9334d7e28f8abec8c52d50e @@ -6265,6 +6697,22 @@ trackedFiles: id: f5c15e5c9550 last_write_checksum: sha1:083cc0fd184fe85e11732efeaf655a94766e485e pristine_git_object: 694a298e6520dec7101952083a840cd6433ae820 + tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocument.go: + id: e5fb3b0fe485 + last_write_checksum: sha1:3f823b5f20928a736835fb83712b243098ad921c + pristine_git_object: bc55c2aa0f57b571836275d8e32b9f5cf80656a6 + tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocumentevents.go: + id: d2751178eb71 + last_write_checksum: sha1:a300a1332a8b26c5f6fb87be09622312f77cab05 + pristine_git_object: 84c2b224b67e65bd2ea3d2efe4870db51d0056eb + tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocuments.go: + id: f2052430806a + last_write_checksum: sha1:7b9c63438bf45771a923e3e6a9f4d188316a42f0 + pristine_git_object: 93cd18807f5be62334087cb3847684631367bf2b + tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourceuser.go: + id: 19bb77874107 + last_write_checksum: sha1:bb85cced5df50d507ee123275a0f7d3e50e10a05 + pristine_git_object: d7b771b1eb8cfd407170382c51cebe37f9fecf61 tests/mockserver/internal/handler/pathpostapiindexv1deletedocument.go: id: fae713eb6713 last_write_checksum: sha1:f89b4868c7de24296485b340a550c1bccfe2d2b8 @@ -6339,8 +6787,8 @@ trackedFiles: pristine_git_object: 9bb5d5769dfb3a4e78676950e8a2706f119bfc5c tests/mockserver/internal/handler/pathpostapisearch.go: id: 53e6a34b5b4b - last_write_checksum: sha1:503df322e00b6cb1cb9cc80d7aa30d63c96df86f - pristine_git_object: 1575aab3ac4539db059de358acc56ecc7f90ff07 + last_write_checksum: sha1:5c878b42ee0ffe08f9ad98c3e1f1c9c20ce4d21a + pristine_git_object: 1e3fe6a9bed655ba32d7c59fe577f41beac69da8 tests/mockserver/internal/handler/pathpostapiskills.go: id: 8ed490cc6d95 last_write_checksum: sha1:5749c3cbb8d3cc90c75ead5cd6547775e97d1ef4 @@ -6349,10 +6797,14 @@ trackedFiles: id: f6e6dcee5ffa last_write_checksum: sha1:5a244bc3c1b083e78d22e3358ac4691ece188428 pristine_git_object: 1f3d1fde1c6e5db9a85a116b88255e61a451fab4 + tests/mockserver/internal/handler/pathpostapiskillssourcespreview.go: + id: 58d10f72cfe6 + last_write_checksum: sha1:f648c8848f17daa6b1777d48cddfa881ff0a6d2f + pristine_git_object: 11e0efcabee999d01568917c5497ea70e3804e62 tests/mockserver/internal/handler/pathpostapiskillsvalidation.go: id: eaa6c1478b34 - last_write_checksum: sha1:af5dfe71ae16b04fb1b676f82b0c0ba99016103d - pristine_git_object: 0fee34fc2b49e9120fcb4bdd12158e350b392dd3 + last_write_checksum: sha1:cc8f959924866fdf5febe729b5d5819ff7e53173 + pristine_git_object: 2048ae91e6f81a6ecb4bb9281ef60ce287330724 tests/mockserver/internal/handler/pathpostrestapiindexsubmissionsdatasourceinstancetype.go: id: 1a5daf7874ce last_write_checksum: sha1:b5b37f0b5a7b4d9a4c69ab523e831f1702301118 @@ -6381,6 +6833,10 @@ trackedFiles: id: b5d188f39094 last_write_checksum: sha1:b625a3bbaf0748388febcf87d2b92782167c2c63 pristine_git_object: 6c1367d61758e68e6cb415247e7473355d17c03a + tests/mockserver/internal/handler/pathpostrestapiv1agentsagentidimport.go: + id: 952368aa0826 + last_write_checksum: sha1:57809e3bcbb89a39aad40c468f93cf1a94d18c4a + pristine_git_object: 1b96791e00ada54d8f07f36a7e743718687287b2 tests/mockserver/internal/handler/pathpostrestapiv1autocomplete.go: id: 9830ef01b25b last_write_checksum: sha1:094d64ddc73a91d38e64e3be18690ebb9d4ef3d3 @@ -6637,6 +7093,10 @@ trackedFiles: id: f49866e79383 last_write_checksum: sha1:1ec2244b5fc171dfe7e4e339420b2b17f0df48c9 pristine_git_object: beb05908cf58a7b8b46d739ee51a5aba54c5bf7c + tests/mockserver/internal/sdk/models/components/accessrequestpermissiondeniedresponseerror.go: + id: bfda76349972 + last_write_checksum: sha1:e32d7171635a47a47a09980f63a968d8d3c67499 + pristine_git_object: bd5d24e4229ac2c9b013cdcc1124b4cbe6c5f82a tests/mockserver/internal/sdk/models/components/actionauthtype.go: id: 4ff9feaab0f7 last_write_checksum: sha1:bd904943895ea34005f594e13f12481f96c11286 @@ -6779,8 +7239,8 @@ trackedFiles: pristine_git_object: 34f0d2d2c20aafadf823810520d67558e3ccb386 tests/mockserver/internal/sdk/models/components/authconfig.go: id: 450c27df20a3 - last_write_checksum: sha1:e9e386e4a0c3ea918f1a2b332f91a129d77ac307 - pristine_git_object: 483958ea708faa6e36081ef83b4c528441313815 + last_write_checksum: sha1:693162a9107db4ad3f6cee81f339345cda19002d + pristine_git_object: 6e47ddcab12850bddfa43ea2a4358c5ffd8666d3 tests/mockserver/internal/sdk/models/components/authcontext.go: id: 563a8dbb8e8c last_write_checksum: sha1:72fc3805afb81247d0f04899dcec35e9e3710803 @@ -7087,8 +7547,8 @@ trackedFiles: pristine_git_object: c1398b9642555e881ef73a4fa8fe66d01ee9e8d1 tests/mockserver/internal/sdk/models/components/customdatasourceconfig.go: id: 67f505cc5524 - last_write_checksum: sha1:5cb7123d955c9782fec8f8c70570d77a0712d08d - pristine_git_object: 070e9e3590a58bb245c0569f512f2298abbbcf3b + last_write_checksum: sha1:4885800f11a0bed0b0d97459193fe50aed95cdb2 + pristine_git_object: 4316d060b299a480cc59608a812458defd2b0229 tests/mockserver/internal/sdk/models/components/customdatavalue.go: id: 37ac657fead8 last_write_checksum: sha1:e2d63d9372dd1858f8d3524ca247d0f5a0e5db3a @@ -7543,12 +8003,12 @@ trackedFiles: pristine_git_object: 04cc3a93272ac70933b0485bee31b335e05ab623 tests/mockserver/internal/sdk/models/components/feedentry.go: id: d25fd66fcf7a - last_write_checksum: sha1:024e9f5995f171ffcf2a54189669a79dadf9da7b - pristine_git_object: 3786e358703d09f737b4c2f43f1db79b3ca13e68 + last_write_checksum: sha1:7c8546042939c356feeb9846070c23a04edd1a13 + pristine_git_object: 75c2030f1bf29bd59360b09c62df32f9efee0517 tests/mockserver/internal/sdk/models/components/feedrequest.go: id: b06bc4cef0cf - last_write_checksum: sha1:7e7ef66203861889ad3ae7f7a668809b2abedc14 - pristine_git_object: 2eff19ff52109057e7dc57092172bb81beb74ecb + last_write_checksum: sha1:ca761301495e36eaf10fc4fa9086380498e6491a + pristine_git_object: 854c8390fa48c1647f0f3c04d19d89f6aae43d6f tests/mockserver/internal/sdk/models/components/feedrequestoptions.go: id: fd9245fe1bf2 last_write_checksum: sha1:fa30b7fd6ee3e45896d7bbe36e33e7c0cb9000ba @@ -7559,8 +8019,8 @@ trackedFiles: pristine_git_object: 54f9d1a8997983156c84e69f888c59a80d06c2b1 tests/mockserver/internal/sdk/models/components/feedresult.go: id: 47411573e67a - last_write_checksum: sha1:0aecb808064634d971c60a6aa4a0e6c256dc93ff - pristine_git_object: 8e2124ebb433fadd413196d7f35dd227c85f3423 + last_write_checksum: sha1:1980e5be5848c3aa1e732c680f7472899c9eb19c + pristine_git_object: 158c74284653d58bdffbab15a8f23188e092875d tests/mockserver/internal/sdk/models/components/followupaction.go: id: 38179fec19b1 last_write_checksum: sha1:32a31f7af77a58ce6f3284e8550d01fcf0d3bddd @@ -7737,6 +8197,22 @@ trackedFiles: id: 56fe47f5306f last_write_checksum: sha1:61063c36128117a731eddf86d9f30666c22e7891 pristine_git_object: 537d53a4d6235b3f67a08a6b3c08f88a6782f8ec + tests/mockserver/internal/sdk/models/components/importagentrequest.go: + id: e32c8cfe1620 + last_write_checksum: sha1:75b76342950aac00545d4ea1d5b276b44441d765 + pristine_git_object: f4d77d24a94bc7b21ea6f064c917c24b2a7c7af7 + tests/mockserver/internal/sdk/models/components/importagentresponse.go: + id: f99e9c9fe605 + last_write_checksum: sha1:bf26c40925bea852b8a302a4c3c585707a1b1622 + pristine_git_object: 711f70bd800827d0da12d8bf8f1b46effe0fab14 + tests/mockserver/internal/sdk/models/components/importagentstatus.go: + id: 4ec15b2eb351 + last_write_checksum: sha1:10fffd431a042d6032a5af90b8cee46f0b91765e + pristine_git_object: 9098ec1e48023a6ec1e19d166909000890dda807 + tests/mockserver/internal/sdk/models/components/importagentsyncmode.go: + id: 4fb849e9d196 + last_write_checksum: sha1:9995d0f6680f21783280ac90c04d661d1e775d2e + pristine_git_object: 993ad1431a85cfd608526d91513c22134ccf5c21 tests/mockserver/internal/sdk/models/components/indexdocumentrequest.go: id: 3f357e41b670 last_write_checksum: sha1:51488e52d8f6cae4ccb957ffa67b009f1620ce58 @@ -7871,8 +8347,8 @@ trackedFiles: pristine_git_object: 4994496601e911bc0d2894857d0a079f3e467a9e tests/mockserver/internal/sdk/models/components/manualfeedbackinfo.go: id: ec8878d0c324 - last_write_checksum: sha1:354a117e44a667479f91bd5969a6caa22a948e95 - pristine_git_object: ae25ff90cb7a8f879c626e05fc4ddd32dd6a40d4 + last_write_checksum: sha1:5c47725e2979dbf05bc3c609ea9dbe37bd03c5fe + pristine_git_object: a6091270ee84a1f4c81d64e369d249a82f1382af tests/mockserver/internal/sdk/models/components/manualfeedbacksidebysideinfo.go: id: ca109f859575 last_write_checksum: sha1:9c066d47590c5ee9823f57a51466268e2893a13b @@ -7927,8 +8403,8 @@ trackedFiles: pristine_git_object: 6d8bb0637e98328c014db61a92fcb9f65f378d1c tests/mockserver/internal/sdk/models/components/objectdefinition.go: id: b31a249b0ab6 - last_write_checksum: sha1:bb870ed291515df1134057b714064b863884817f - pristine_git_object: 9a9c55c638ac132d7ebe9f06b13a49c80be29fd0 + last_write_checksum: sha1:4fb46c6216a0cfcc06a2eba090a8a54565eab685 + pristine_git_object: 32a3df40aae636faa61ffef31c606bc1e5e44ed6 tests/mockserver/internal/sdk/models/components/objectpermissions.go: id: ccc6831e9a89 last_write_checksum: sha1:a182302021d92910af1f940b60a5fd78f0288bac @@ -7975,8 +8451,8 @@ trackedFiles: pristine_git_object: 234db0e2f35f0717bf6949b3d600dc1b5043f9ec tests/mockserver/internal/sdk/models/components/personmetadata.go: id: ae4a57f895bd - last_write_checksum: sha1:14372a801821a619f0523d898f933f55ac34cb19 - pristine_git_object: da09ade4c3e2dfe9de5529843ee44a8ce16b4208 + last_write_checksum: sha1:6e3e721cb51a3fd06da8b266435122f0a0dcaed3 + pristine_git_object: 7813a6fbe9f9a1cb8a4bde86ec2d76cf1efd468f tests/mockserver/internal/sdk/models/components/personobject.go: id: 793511d31751 last_write_checksum: sha1:d7b6865c46ed5f590011f698163bb0c6d4fd3cb0 @@ -8049,14 +8525,74 @@ trackedFiles: id: f299b36c97da last_write_checksum: sha1:2e0f29320158b7f1b204af2adbc462bdefa34c1f pristine_git_object: ba08e943e4a74ac111304125d6085f642a522085 + tests/mockserver/internal/sdk/models/components/platformauthenticationsuggestion.go: + id: 48f115d1756f + last_write_checksum: sha1:1a05a8e9c2ce9f6db1c96831eb05f6dd2cc0abc8 + pristine_git_object: 58281ae6e982ccb6e585a3299a3893a5850cfb3d + tests/mockserver/internal/sdk/models/components/platformchatcitationannotation.go: + id: f4acfb6b571a + last_write_checksum: sha1:a07b63c29342dbc8760451a07748ecc5a795dd2a + pristine_git_object: eb920c4166fc2bc302a641531f1c92c946847124 + tests/mockserver/internal/sdk/models/components/platformchatcitationsnippet.go: + id: 19303510f847 + last_write_checksum: sha1:521a16886f1f96d692e7dfc60c68ed16195f9db9 + pristine_git_object: def727555354501498b0e5757236ced49f597ba2 + tests/mockserver/internal/sdk/models/components/platformchatcitationsource.go: + id: f4e0cc1911d7 + last_write_checksum: sha1:cce2e6cebdf91f8cdf855fb7456d00241b90c2bb + pristine_git_object: c4c149d7a1856c60ae47b1f2e9b524d4d8458459 + tests/mockserver/internal/sdk/models/components/platformchatcompletedresponse.go: + id: dfc6d86d9ca2 + last_write_checksum: sha1:b6cfe25cea6372862c6cb89c31f0a27f32768b48 + pristine_git_object: 3626477733c9d6b8350ce69c4b0c114e6d12ecee + tests/mockserver/internal/sdk/models/components/platformchatcreaterequest.go: + id: b024a90db5cf + last_write_checksum: sha1:a5d728f3340cd89d08c5cb4c45ca2495bf063099 + pristine_git_object: ff12189e8a27b80e6ebd875b23d3ab15415afc9b + tests/mockserver/internal/sdk/models/components/platformchatcustomentitysource.go: + id: 19335eec1f0c + last_write_checksum: sha1:782fd0be48c718f3748c4f0a49dc82cface4d644 + pristine_git_object: a935970d4dccc9196d4c34855dc24db23f0f2a44 + tests/mockserver/internal/sdk/models/components/platformchatdocumentsource.go: + id: 50d8ddf827c8 + last_write_checksum: sha1:c172280641caf057547c11ec1fa16e539a11fcdb + pristine_git_object: 9dd42aa5e0abcb1b41e68d833f349779f7fa90b1 + tests/mockserver/internal/sdk/models/components/platformchatfilesource.go: + id: f717724c0acb + last_write_checksum: sha1:572e86750f5f0a9d3a1d7bb4fe6507d47d9d11a1 + pristine_git_object: ad39a1dedf884498db229569f975d07cbfceda37 + tests/mockserver/internal/sdk/models/components/platformchatinputmessage.go: + id: 56818bc51e4c + last_write_checksum: sha1:70c4b032b5066633b8cd34d0c49c28df2387bf75 + pristine_git_object: 5989ab25d09e93f7dda37735c4756dd941e76b14 + tests/mockserver/internal/sdk/models/components/platformchatoutputmessage.go: + id: 7ca1fc5cc683 + last_write_checksum: sha1:9da219f4f8004153d64d9ec89365dd92ba0b99f7 + pristine_git_object: c7ccd4be66bf0f4e6a931a470d244774d3ca256d + tests/mockserver/internal/sdk/models/components/platformchatoutputtextcontent.go: + id: b5d5f31f9886 + last_write_checksum: sha1:7b83b7cadf85b852949b765447c7c165acf49021 + pristine_git_object: fedd3f2853557a146f561b333d30dfe6799bf274 + tests/mockserver/internal/sdk/models/components/platformchatpersonsource.go: + id: b44852860bd9 + last_write_checksum: sha1:baa4c11fc983d682b8f66d282ef55955bfd3bf99 + pristine_git_object: 1e969fb91bd34be3dcd9e2e2e242565eb97b15fd tests/mockserver/internal/sdk/models/components/platformcontenttype.go: id: d1a02baa3621 last_write_checksum: sha1:b552f26421544664b54a4423c8335c90b09480c6 pristine_git_object: e96a7c7850d7a0c456dd61d706232dd7c06cd0db + tests/mockserver/internal/sdk/models/components/platformdatasourcefilterinfo.go: + id: a1eb3b7148bf + last_write_checksum: sha1:094bff06100193f57b6766f2f42139c2e5bcd8b8 + pristine_git_object: e577fb7f7b9c911e698ec560181abbe596be0416 tests/mockserver/internal/sdk/models/components/platformfilter.go: id: 1762bf95c464 - last_write_checksum: sha1:4dc71d2576cddd00f93dfda6c2f584f9bff9ebcb - pristine_git_object: b8a9ea1a0663c345fd2a4bc04f3343c17409b868 + last_write_checksum: sha1:9a4357e8b4ccf75dd97072960321efb36dcf13a1 + pristine_git_object: c1ab5360ebdb5dda06e190b31faaca26b4d054f7 + tests/mockserver/internal/sdk/models/components/platformfilterfieldinfo.go: + id: c22bd1d66163 + last_write_checksum: sha1:be6276937481e3ff27ea4339a888496edbc85fc9 + pristine_git_object: 5b3272e0dd3464f9ee2f480dac80127bcdd499c4 tests/mockserver/internal/sdk/models/components/platformfilteroperator.go: id: 7daac12f5ae7 last_write_checksum: sha1:49fd1240cf9eb9d2259465f79e0c481d711ec37d @@ -8079,24 +8615,28 @@ trackedFiles: pristine_git_object: dca6a6f855816c3598a9a1fa69c72f131eefa1c6 tests/mockserver/internal/sdk/models/components/platformproblemdetailcode.go: id: bc7ce56d1a6c - last_write_checksum: sha1:05d5123ae104b91347338a7e394a3b9fda2ad97b - pristine_git_object: cbbd7173754b97a6f890edad88fa3c41f0f9d205 + last_write_checksum: sha1:ef5675a4c8b74402171d982509cf7e48d5717c37 + pristine_git_object: f4d4eeb9e7056241a051f9a88c7fa474c41f95f2 tests/mockserver/internal/sdk/models/components/platformproblemdetailerror.go: id: 045ae4dc7a98 last_write_checksum: sha1:4d135d9e4dc5967a64bab866df79f2fd689caae5 pristine_git_object: 058f5e62bda5173fed3b24fff078d7540a1378f7 tests/mockserver/internal/sdk/models/components/platformresult.go: id: dd777258615b - last_write_checksum: sha1:d3e76064cc9fa1c7431e3ecb6bb07b47b08a08c7 - pristine_git_object: 441ea968bfe1ee6d8c9eecac245f9ad48621f02c + last_write_checksum: sha1:4343640607d8d0421164c0dc16daf5718d65e848 + pristine_git_object: f09289f87429f1cb7b7aced37ac349ebbd88e746 + tests/mockserver/internal/sdk/models/components/platformsearchfiltersresponse.go: + id: c6e01fb5cff1 + last_write_checksum: sha1:94caa146dcfafb521d396d19e5358da8c598faab + pristine_git_object: 51409a03c73a593fdad3d7b479a4e0c95d3b91a3 tests/mockserver/internal/sdk/models/components/platformsearchrequest.go: id: 4da7625f1c35 - last_write_checksum: sha1:33a8686e5aa62e2e090685ba89dae0bd0d4af5b9 - pristine_git_object: 108bab415b41d89047fba91239b362d2abba960d + last_write_checksum: sha1:1ca1f5c466206edca83b513db2e1179229e2f8cb + pristine_git_object: 83c3c79dedae573f3ee3185856fd12360918ce9b tests/mockserver/internal/sdk/models/components/platformsearchresponse.go: id: a58f32052764 - last_write_checksum: sha1:6db9bd73c6fd7cc1c8bf28c2b1ee96cc77d7236a - pristine_git_object: e8243de2c4e8582ed42736e75e4aa715a6a376bc + last_write_checksum: sha1:c2aea70c85fe71f160f527055a91f378caf3e6f9 + pristine_git_object: 3eed4668d26f9212f864b7e486d75dbbf920b68d tests/mockserver/internal/sdk/models/components/platformskill.go: id: a97a51039ff5 last_write_checksum: sha1:8871b58924c180a5565b43c91b58ed79212739bb @@ -8121,6 +8661,30 @@ trackedFiles: id: 61695a856d41 last_write_checksum: sha1:718c3f3013007de52b02444e4a12d43a10fce37d pristine_git_object: 566d53518ac6a45dc5ae0ec8e5e55df0433f8ae1 + tests/mockserver/internal/sdk/models/components/platformskillsourcepreview.go: + id: "760613548093" + last_write_checksum: sha1:3deb2829d40e4656a75ad550dc52dd3a97a3d8e6 + pristine_git_object: f7a467f1f1802a1a56314879c7666620ca9d714e + tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailure.go: + id: e2897ced2da1 + last_write_checksum: sha1:6255f8ffe6c9d895d71f4eac788dc31a131b6038 + pristine_git_object: 5a6c6fe802defd21d7d69908b67a24d9b75c50ce + tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailurecode.go: + id: c9d600e5e25f + last_write_checksum: sha1:7cd531f5e341ae1078991bf91345f4a6e32f35c8 + pristine_git_object: 0096a29687b3f1e393cb76f6a8f794a20e860eb2 + tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfile.go: + id: 7b0601c7fda7 + last_write_checksum: sha1:290db2107fb5e9f550e18a4f13542f391ad04cbd + pristine_git_object: 43503cfb38dcef06b555785d2edce1fe6ec3357e + tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewrequest.go: + id: 292b42c0c32f + last_write_checksum: sha1:f03a4a7dcadb91d7b31ba3a1ddd24bc5b612a7a6 + pristine_git_object: 506e0c0928373629b10db3240532b678e8fe6c42 + tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewresponse.go: + id: d14b15a2dcc9 + last_write_checksum: sha1:3fb833b7b4a3bb0b15ca4bba00a74a2de33dcad3 + pristine_git_object: 0607598d7d2a3539a2b4ad5ca38b9baba4402f32 tests/mockserver/internal/sdk/models/components/platformskillsourceprovenance.go: id: 3a0b70781266 last_write_checksum: sha1:f64c669b34f9bc8e21d5620001620e8c8a66756f @@ -8133,6 +8697,18 @@ trackedFiles: id: a172da0d9d4d last_write_checksum: sha1:66e29681184c77fbbff593cc30e33023a3b39c81 pristine_git_object: 0582664c1c7451d505bc18ea138e299db160c5a6 + tests/mockserver/internal/sdk/models/components/platformskillupdaterequest.go: + id: 77853bf3d285 + last_write_checksum: sha1:b327107396570bb07844005756dcbcc502c99030 + pristine_git_object: 16b5b62569411c6e73675a6e4322a5ad993994d6 + tests/mockserver/internal/sdk/models/components/platformskillupdateresponse.go: + id: 505fbacea4bd + last_write_checksum: sha1:2ef06dfd496e4209ccbdcf6bf246a31b97c23e46 + pristine_git_object: 99256154b7dc79f111888a4dff8e90127090bd1f + tests/mockserver/internal/sdk/models/components/platformskillupdatestatus.go: + id: "511258017192" + last_write_checksum: sha1:b430910b34dda5f1fa8b12d36ad9d40681664464 + pristine_git_object: d40a5b9ff289b22e47722564782e863c1ad983db tests/mockserver/internal/sdk/models/components/platformskillvalidationfile.go: id: 4c3718b26406 last_write_checksum: sha1:fda63f0276f5a36dca1e5b81fdc3e7b1e7766034 @@ -8147,12 +8723,8 @@ trackedFiles: pristine_git_object: 2f644ff648b531896643d65ebdc1122058f87527 tests/mockserver/internal/sdk/models/components/platformskillvalidationresponse.go: id: a886263018af - last_write_checksum: sha1:bd007dfb6d327b66b84f82206a4d92408db1aa55 - pristine_git_object: 55c51a4089110bf60bf88afcc4bce7c41704a11c - tests/mockserver/internal/sdk/models/components/platformskillvalidationwarning.go: - id: 43a47d51c9dc - last_write_checksum: sha1:d89836327a8138f2649f2610322c391088b71491 - pristine_git_object: 10a5ba75853164b246fbc7f2b7b41ac42ba05f4b + last_write_checksum: sha1:2dfde216c6f86cb10dc8514d7bdcdefa86eb404d + pristine_git_object: f8bd1eaedf0df29c529f9e641ea5fe59eb1479cf tests/mockserver/internal/sdk/models/components/platformskillversion.go: id: a742ffff90ef last_write_checksum: sha1:9d8ca19699faae865387810ce6eb941be4596cc3 @@ -8177,6 +8749,10 @@ trackedFiles: id: cf2540151ce1 last_write_checksum: sha1:3a0ec2ca473681b89ff97606f648fc15fcdae38e pristine_git_object: b88a152d5940b3e49fb73807c476607374d9d01e + tests/mockserver/internal/sdk/models/components/platformwarning.go: + id: bf3a0578fb90 + last_write_checksum: sha1:4f58e985f8592a928bb3d605f1a8538a5e611d2a + pristine_git_object: c96ef7a9b39cb05eac61f11511b5066c860cb411 tests/mockserver/internal/sdk/models/components/possiblevalue.go: id: bf71542de5f4 last_write_checksum: sha1:5c25db519b896499621e67c6245893d26afa30e4 @@ -8505,6 +9081,18 @@ trackedFiles: id: 0c0984074ced last_write_checksum: sha1:95ee27c43bc6e01b322d32330b2645ea53bb4f08 pristine_git_object: ed0eadfe146a86176e07d217fac3e032b7a65d12 + tests/mockserver/internal/sdk/models/components/toolannotations.go: + id: 1d68a6a1d0ed + last_write_checksum: sha1:2578873399ad76af4205a145b31a0dd8932ab613 + pristine_git_object: 68923329cf1d8a986f5f6ca49c8fc3984ba91f33 + tests/mockserver/internal/sdk/models/components/tooldefinition.go: + id: 4b277c3fac72 + last_write_checksum: sha1:b74fcc52d4fa886afc560d14d20bd69e6137d5b5 + pristine_git_object: 918fecce9c070e7ed2579f51fd4f4504b15a193f + tests/mockserver/internal/sdk/models/components/tooldefinitionsresponse.go: + id: fc79ddcfadb2 + last_write_checksum: sha1:3ca9d0dbc6ab565bf4462b9a255c828006164c43 + pristine_git_object: ab96ce3277c8b3ad51451e72c25c10ad2d786444 tests/mockserver/internal/sdk/models/components/toolinfo.go: id: e2175889a2bd last_write_checksum: sha1:244266dd3f84d49224725ef35603df9fc80d14ef @@ -8675,8 +9263,8 @@ trackedFiles: pristine_git_object: 18059e0b87042c6a2796c4986159826588a3c7ce tests/mockserver/internal/sdk/models/components/viewerinfo.go: id: 35ffe4bbefe0 - last_write_checksum: sha1:bf5d4b48cfa2e68cc2b2b7c47d1f0668d18e1b56 - pristine_git_object: 5abdc47f9b8f109ea08ac7b1dc963379d880bef2 + last_write_checksum: sha1:f810379c0be8f940bcfdc6bd34fb5548aea7611d + pristine_git_object: f893b058a14ea9c1b4bb238ada3ed9d1cefac5f1 tests/mockserver/internal/sdk/models/components/workflow.go: id: 229cbc0e7f6f last_write_checksum: sha1:d341832b97426683942df2564e76029d6f53db8d @@ -8957,6 +9545,14 @@ trackedFiles: id: 47caf49ab6ed last_write_checksum: sha1:ca3e16bedf97f0f8606d6d9c82b6a7a886c071a3 pristine_git_object: 26d8a0ccfca2b2e6585958cacc77a7a359f88749 + tests/mockserver/internal/sdk/models/operations/gettoolservertools.go: + id: 2b77225b512b + last_write_checksum: sha1:07e378cbba3813c8846acc6fe34b523532dace30 + pristine_git_object: 7a3bfa4e700fecab05247d9306b39cc1403a612f + tests/mockserver/internal/sdk/models/operations/importagent.go: + id: a0622c6cb9f9 + last_write_checksum: sha1:50e8a99d7aa1035f10994126d158fe0dd9808f5b + pristine_git_object: ddb85ab63c76deff368d2c85c9187a71f3e66852 tests/mockserver/internal/sdk/models/operations/insights.go: id: 9bf374c79662 last_write_checksum: sha1:3091cfd7f0f9ad34caa7ba644bd79bfcbf009f6b @@ -9025,10 +9621,18 @@ trackedFiles: id: 1bfa86240c50 last_write_checksum: sha1:3851c6668a7c007efe9ff4ccbd038cb5d2429713 pristine_git_object: cdbc9f550e7d2339b0946fe4783a3b79a851f39d + tests/mockserver/internal/sdk/models/operations/platformchatcreate.go: + id: 38da4ead08a1 + last_write_checksum: sha1:816aea1bfc29aa670152cf53137d3d8b5bcbcde4 + pristine_git_object: 1676f6436514b8104a1784f6ad3e6b3d4303befb tests/mockserver/internal/sdk/models/operations/platformsearch.go: id: d990791ac101 - last_write_checksum: sha1:995d47533ef63c7518c50398593671059d6ccc07 - pristine_git_object: 16b6e86fe62e1e0ec43293439e9fba7995a72a80 + last_write_checksum: sha1:9da9b49850375b74bf6296fcec336ba9ad1e1eea + pristine_git_object: 381c8530dfb959419e47dee10c46cfdd5846f611 + tests/mockserver/internal/sdk/models/operations/platformsearchfilters.go: + id: 3f6c4119e4bd + last_write_checksum: sha1:e0836460229365773a66a5b310ba886d5fbdf202 + pristine_git_object: 8e578bcdd052389777bf51d0140176d523d4a976 tests/mockserver/internal/sdk/models/operations/platformskillscreate.go: id: cd743025fd37 last_write_checksum: sha1:af1e6384914f9cd0cc653f0492e99ec648168391 @@ -9061,6 +9665,14 @@ trackedFiles: id: ef57d1f31c39 last_write_checksum: sha1:60e17abc357b220cb752d85a411402a118b6fde7 pristine_git_object: 3853971fc3d394241809e862a204df0821c4e368 + tests/mockserver/internal/sdk/models/operations/platformskillspreviewsource.go: + id: 9228f6ef6a79 + last_write_checksum: sha1:7f93cbe4b5fa4ddafbe7b3e5d7782d48c4290ce7 + pristine_git_object: a32c6102b4d886eb573006e516e5f1047cd5ac2c + tests/mockserver/internal/sdk/models/operations/platformskillsupdate.go: + id: a42134c7c823 + last_write_checksum: sha1:f570a0ea531945ee8ae803f4d8c582f7e9c86a79 + pristine_git_object: ec45cac3446e6c7ceef4a3e2d96da621bfcc1cc8 tests/mockserver/internal/sdk/models/operations/platformskillsvalidate.go: id: c98dd1ece70f last_write_checksum: sha1:2449140437acabcd61691b30b730c1edcec089f5 @@ -9285,6 +9897,10 @@ trackedFiles: id: 3c481ba80f28 last_write_checksum: sha1:f20f8fd1bbf3169e0e4516595d7971e5cae03951 pristine_git_object: 502b190f8e59bcc4ebb0c0efdb317c641b845f93 + tests/mockserver/internal/sdk/models/sdkerrors/accessrequestpermissiondeniedresponseerror.go: + id: f244f160d8da + last_write_checksum: sha1:9b0a14a93bc595e225d8c6f06caf7391f6a33dd7 + pristine_git_object: 5f5014935454bd9afcfdbea2ba6c153fc1508fd6 tests/mockserver/internal/sdk/models/sdkerrors/collectionerror.go: id: 60537b88bdfe last_write_checksum: sha1:a8ce08145cf00a84487714f875ba1d3a8d84be1d @@ -9305,6 +9921,14 @@ trackedFiles: id: cdcf3c6fd1e3 last_write_checksum: sha1:277bd1fcc00faa488f46f2bd2f40cf4360c3fa7c pristine_git_object: 2910d0bd964e88e265060c18c4e99a1f5f45dc62 + tests/mockserver/internal/sdk/models/sdkerrors/platformunauthorizedagenttoolsproblemerror.go: + id: b971e82e74ab + last_write_checksum: sha1:15e25fba5d4a2d4485b7182985b26843213e5aa1 + pristine_git_object: 45b9087af2856cc4c2702c26d855d1c35c63eb3b + tests/mockserver/internal/sdk/models/sdkerrors/unauthorizedagenttoolserror.go: + id: e8f79a87d789 + last_write_checksum: sha1:8a59fb748ae785c760ee3e4a0431f0ee516ff9cf + pristine_git_object: 0f579e13784795d08fe8f2562fc5007cd43babd6 tests/mockserver/internal/sdk/optionalnullable/optionalnullable.go: id: 49a8c2638f49 last_write_checksum: sha1:aa5ff815f31a3657487ad5e0c3f023f573b1fcab @@ -9409,6 +10033,10 @@ trackedFiles: id: 255e2a2c77ee last_write_checksum: sha1:933ca9c7da1cfab204f0acc1005c29118b08162a pristine_git_object: d2b02f269ac418b9a9240772f28ab1bd3cfa4997 + tests/test_chat_sdk.py: + id: d6e6d5c5a1b2 + last_write_checksum: sha1:72cb3066bc3db6fba04a615d4a8f4505de1de29c + pristine_git_object: 41b3a54c70ea6fa17f921c13ad06a07899fe0f51 tests/test_client.py: id: 6b61d4b06ccc last_write_checksum: sha1:df970d19cdb9f9e057722699dc73965b6f9b1758 @@ -9419,8 +10047,8 @@ trackedFiles: pristine_git_object: 200e3ceebf0fb52248b717e6cb20b105611c41ec tests/test_client_agents.py: id: 5ac5a5b220c8 - last_write_checksum: sha1:f73280ce1b3f1d67f05346912cc0d1ced2381ee8 - pristine_git_object: 93354a8429a52463d2e65822a45300f424ccf61d + last_write_checksum: sha1:7a239203a9848e8f05fab59d7d0df262e0ec20b5 + pristine_git_object: 154665a2de0bd7f01ac5f44fdf547c25fdcee9d7 tests/test_client_authentication.py: id: 7cf5a14528ec last_write_checksum: sha1:3ac1ca0753590620676a8bcc6a06e2aa6375ab71 @@ -9483,8 +10111,8 @@ trackedFiles: pristine_git_object: 538b6fe427c2f0931149031917c7ac5dd63a1a34 tests/test_indexing_documents.py: id: 5445d048eccd - last_write_checksum: sha1:03eda0aceb8904f9974260374b1092d3e1e1db17 - pristine_git_object: 53c2f4b1345be2f73bcb05aa54f44a287ed11c59 + last_write_checksum: sha1:9fb64bf5103cd434d5cddf39aa4400188e25a51e + pristine_git_object: c7ffe7626a381406ae75558e9af65ed584f31b6a tests/test_indexing_permissions.py: id: a6c5e41932fb last_write_checksum: sha1:ce73ba9de3f1e0b28725112cb250c61ff83ebd33 @@ -9495,12 +10123,12 @@ trackedFiles: pristine_git_object: 6cc8aeec3c52329d389081db0a27f10f53f214b9 tests/test_messages.py: id: be23089b1f8b - last_write_checksum: sha1:a91c985cd1d11560059dc448b10e0c7b75ed60e5 - pristine_git_object: dfdc18641f0d6c38d84b4603ad2da71f75f2e13c + last_write_checksum: sha1:2404e23964ef6a1f5ddc900402b34e597d2d9617 + pristine_git_object: 132005ec7d1e35f805b6a8c28e07e043bce22f0a tests/test_people.py: id: 37c243940039 - last_write_checksum: sha1:7c7268ffeebe48d81ed25e9b1cfc3a395abf5c1f - pristine_git_object: c64882efb749dec916454d169b905964076b39e7 + last_write_checksum: sha1:2b78b1c5ea17f267895188b1b48ff9fe2bc19f17 + pristine_git_object: a1febc58b891b933f4d5527506dc931082c7bd38 tests/test_pins.py: id: ca3f94cca4af last_write_checksum: sha1:4d9eb94936fb2e8431c731f9b2179d32ae7a7c46 @@ -9515,20 +10143,20 @@ trackedFiles: pristine_git_object: 3fa82f944c8693f534f71d96c489225c3f65cb5d tests/test_search.py: id: dd86606b335f - last_write_checksum: sha1:b7c2a96a3d765d1498f9fe08dffc59cc4c8822ac - pristine_git_object: 3925a6e0f49d8e0b1b35ec08c38283a5643ed307 + last_write_checksum: sha1:aa49beadf59d0c27cd6d0d568968a21d3be76fc0 + pristine_git_object: 0761637adb8f1f7b236fcb7d04d9e3fecccc2b52 tests/test_skills.py: id: ac5db26bd6b1 - last_write_checksum: sha1:a9b45f5b6ff56bf6f3335435d5f757738192e1b5 - pristine_git_object: de32443a28cf8437b0df7879831978412172574f + last_write_checksum: sha1:38cc7886bf4ac07c5e2e8f7bb5a6baee4d533395 + pristine_git_object: 3b8e1c5105bb59614221ca3257501e81fdaf757b tests/test_summarize.py: id: a255d8a6f627 - last_write_checksum: sha1:37185416149f9acbd3383f6c279692aa31e2344a - pristine_git_object: 449a89669c90568cbef8fb81ea72eb5e5034bd39 + last_write_checksum: sha1:6244d4da1522f443776e78aeb31dd83ebdc90c42 + pristine_git_object: 2b5d1f38b094214933fc3b8da79ff8ed979c5122 tests/test_tools.py: id: 70889bdf7321 - last_write_checksum: sha1:d26d83639f731281bb518886f10571c7b0dbf935 - pristine_git_object: e4d534d43d9f638318985c8cb91d54f8c501a053 + last_write_checksum: sha1:e9e37efd6a65d805c02d70d548df9c87dd062b0e + pristine_git_object: 626f9c2c92cff302bac5dd4340d7b962551b5c8f tests/test_troubleshooting.py: id: 784c409f631e last_write_checksum: sha1:5af30befb8fffd54210e313bf98c24a64a685c50 @@ -9644,6 +10272,8 @@ examples: responses: "200": application/json: {"chatResult": {"chat": {"createdBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "icon": {"color": "#343CED", "key": "person_icon", "iconType": "GLYPH", "name": "user"}, "messages": [{"author": "USER", "citations": [{"sourceDocument": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "sourceFile": {"id": "FILE_1234", "url": "www.google.com", "name": "sample.pdf"}, "sourcePerson": {"name": "George Clooney", "obfuscatedId": "abc123"}, "referenceRanges": [{"textRange": {"startIndex": 641568, "document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}}, "snippets": [{"mimeType": "mimeType", "snippet": "snippet"}]}]}], "fragments": [{"structuredResults": [{"document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "customer": {"id": "", "company": {"name": "", "location": "New York City", "industry": "Finances", "about": "Financial, software, data, and media company headquartered in Midtown Manhattan, New York City"}, "poc": [{"name": "George Clooney", "obfuscatedId": "abc123"}], "mergedCustomers": [{"id": "", "company": {"name": "", "location": "New York City", "industry": "Finances", "about": "Financial, software, data, and media company headquartered in Midtown Manhattan, New York City"}, "notes": "CIO is interested in trying out the product."}], "notes": "CIO is interested in trying out the product."}, "team": {"id": "", "name": "", "members": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "relationship": "MEMBER"}], "customFields": [{"label": "", "values": [{}], "displayable": true}], "datasourceProfiles": [{"datasource": "github", "handle": ""}], "status": "PROCESSED", "canBeDeleted": true}, "customEntity": {"roles": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "role": "VIEWER"}]}, "answer": {"id": 3, "docId": "ANSWERS_answer_3", "question": "Why is the sky blue?", "bodyText": "From https://en.wikipedia.org/wiki/Diffuse_sky_radiation, the sky is blue because blue light is more strongly scattered than longer-wavelength light.", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "addedRoles": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "role": "EDITOR"}], "removedRoles": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "role": "VERIFIER"}], "combinedAnswerText": {"text": "From https://en.wikipedia.org/wiki/Diffuse_sky_radiation, the sky is blue because blue light is more strongly scattered than longer-wavelength light.", "structuredList": [{"link": "https://en.wikipedia.org/wiki/Diffuse_sky_radiation", "document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "text": "Because its wavelengths are shorter, blue light is more strongly scattered than the longer-wavelength lights, red or green. Hence the result that when looking at the sky away from the direct incident sunlight, the human eye perceives the sky to be blue.", "structuredResult": {"document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "customer": {"id": "", "company": {"name": "", "location": "New York City", "industry": "Finances", "about": "Financial, software, data, and media company headquartered in Midtown Manhattan, New York City"}, "poc": [{"name": "George Clooney", "obfuscatedId": "abc123"}], "mergedCustomers": [{"id": "", "company": {"name": "", "location": "New York City", "industry": "Finances", "about": "Financial, software, data, and media company headquartered in Midtown Manhattan, New York City"}, "notes": "CIO is interested in trying out the product."}], "notes": "CIO is interested in trying out the product."}, "team": {"id": "", "name": "", "members": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "relationship": "MEMBER"}], "customFields": [{"label": "", "values": [{}], "displayable": true}], "datasourceProfiles": [{"datasource": "github", "handle": ""}], "status": "PROCESSED", "canBeDeleted": true}, "customEntity": {"roles": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "role": "VIEWER"}]}, "answer": {"id": 3, "docId": "ANSWERS_answer_3", "question": "Why is the sky blue?", "bodyText": "From https://en.wikipedia.org/wiki/Diffuse_sky_radiation, the sky is blue because blue light is more strongly scattered than longer-wavelength light.", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "combinedAnswerText": {"text": "From https://en.wikipedia.org/wiki/Diffuse_sky_radiation, the sky is blue because blue light is more strongly scattered than longer-wavelength light."}, "likes": {"likedBy": [{"user": {"name": "George Clooney", "obfuscatedId": "abc123"}}], "likedByUser": true, "numLikes": 548232}, "author": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "verification": {"state": "DEPRECATED", "metadata": {"lastVerifier": {"name": "George Clooney", "obfuscatedId": "abc123"}, "document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "reminders": [{"assignee": {"name": "George Clooney", "obfuscatedId": "abc123"}, "requestor": {"name": "George Clooney", "obfuscatedId": "abc123"}, "remindAt": 728034}], "lastReminder": {"assignee": {"name": "George Clooney", "obfuscatedId": "abc123"}, "requestor": {"name": "George Clooney", "obfuscatedId": "abc123"}, "remindAt": 546319}, "candidateVerifiers": [{"name": "George Clooney", "obfuscatedId": "abc123"}]}}, "collections": [{"name": "", "description": "until nifty warmly nicely furthermore howl at", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "id": 427851, "creator": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "items": [{"collectionId": 864473, "createdBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "shortcut": {"inputAlias": "", "createdBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "destinationDocument": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}}, "collection": {"name": "", "description": "scarification upon ack sometimes arrange contractor courageous tributary worthwhile jell", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "id": 623437, "creator": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "children": [{"name": "", "description": "bustling needily enroll", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "id": 491436, "creator": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}}]}, "itemType": "DOCUMENT"}]}], "sourceDocument": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}}, "extractedQnA": {"questionResult": {"title": "title", "url": "https://example.com/foo/bar", "nativeAppUrl": "slack://foo/bar", "snippets": [{"mimeType": "mimeType", "snippet": "snippet"}], "mustIncludeSuggestions": {"suggestions": [{"query": "app:github type:pull author:mortimer", "label": "Mortimer's PRs", "datasource": "github"}], "person": {"name": "George Clooney", "obfuscatedId": "abc123"}}}}, "meeting": {"attendees": {"people": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "groupAttendees": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}}]}]}}, "collection": {"name": "", "description": "scarification upon ack sometimes arrange contractor courageous tributary worthwhile jell", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "id": 623437, "creator": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "children": [{"name": "", "description": "bustling needily enroll", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "id": 491436, "creator": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}}]}, "code": {"repoName": "scio", "fileName": "README.md"}, "shortcut": {"inputAlias": "", "createdBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "destinationDocument": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}}, "querySuggestions": {"person": {"name": "George Clooney", "obfuscatedId": "abc123"}}, "relatedDocuments": [{"querySuggestion": {"query": "app:github type:pull author:mortimer", "label": "Mortimer's PRs", "datasource": "github"}, "results": [{"title": "title", "url": "https://example.com/foo/bar", "nativeAppUrl": "slack://foo/bar", "snippets": [{"mimeType": "mimeType", "snippet": "snippet"}], "mustIncludeSuggestions": {"person": {"name": "George Clooney", "obfuscatedId": "abc123"}}}]}], "relatedQuestion": {"ranges": [{"startIndex": 853389, "document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}}]}}}]}, "likes": {"likedBy": [{"user": {"name": "George Clooney", "obfuscatedId": "abc123"}}], "likedByUser": true, "numLikes": 548232}, "author": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "verification": {"state": "DEPRECATED", "metadata": {"lastVerifier": {"name": "George Clooney", "obfuscatedId": "abc123"}, "document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "reminders": [{"assignee": {"name": "George Clooney", "obfuscatedId": "abc123"}, "requestor": {"name": "George Clooney", "obfuscatedId": "abc123"}, "remindAt": 728034}], "lastReminder": {"assignee": {"name": "George Clooney", "obfuscatedId": "abc123"}, "requestor": {"name": "George Clooney", "obfuscatedId": "abc123"}, "remindAt": 546319}, "candidateVerifiers": [{"name": "George Clooney", "obfuscatedId": "abc123"}]}}, "sourceDocument": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}}, "extractedQnA": {"questionResult": {"title": "title", "url": "https://example.com/foo/bar", "nativeAppUrl": "slack://foo/bar", "snippets": [{"mimeType": "mimeType", "snippet": "snippet"}], "mustIncludeSuggestions": {"suggestions": [{"query": "app:github type:pull author:mortimer", "label": "Mortimer's PRs", "datasource": "github"}], "person": {"name": "George Clooney", "obfuscatedId": "abc123"}}}}, "meeting": {"attendees": {"people": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "groupAttendees": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}}]}]}}, "collection": {"name": "", "description": "scarification upon ack sometimes arrange contractor courageous tributary worthwhile jell", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "id": 623437, "creator": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "children": [{"name": "", "description": "bustling needily enroll", "audienceFilters": [{"fieldName": "type", "values": [{"value": "Spreadsheet", "relationType": "EQUALS"}, {"value": "Presentation", "relationType": "EQUALS"}]}], "id": 491436, "creator": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}}]}, "code": {"repoName": "scio", "fileName": "README.md"}, "shortcut": {"inputAlias": "", "createdBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "updatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "destinationDocument": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}}, "querySuggestions": {"person": {"name": "George Clooney", "obfuscatedId": "abc123"}}, "relatedQuestion": {"ranges": [{"startIndex": 853389, "document": {"containerDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "parentDocument": {"metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}, "metadata": {"datasource": "datasource", "objectType": "Feature Request", "container": "container", "parentId": "JIRA_EN-1337", "mimeType": "mimeType", "documentId": "documentId", "createTime": "2000-01-23T04:56:07.000Z", "updateTime": "2000-01-23T04:56:07.000Z", "author": {"name": "name", "obfuscatedId": ""}, "components": ["Backend", "Networking"], "status": "[\"Done\"]", "customData": {"someCustomField": {}}}}}]}}], "querySuggestion": {"query": "app:github type:pull author:mortimer", "label": "Mortimer's PRs", "datasource": "github"}, "file": {"id": "FILE_1234", "url": "www.google.com", "name": "sample.pdf"}, "action": {"metadata": {"type": "RETRIEVAL", "name": "", "displayName": "Stanford30", "displayDescription": "", "objectName": "[\"HR ticket\",\"Email\",\"Chat message\"]"}}}], "messageType": "CONTENT"}], "roles": [{"person": {"name": "George Clooney", "obfuscatedId": "abc123"}, "role": "EDITOR"}]}}} + "403": + application/json: {"errorType": "PERMISSION_DENIED", "createdBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "requestableRoles": ["VERIFIER"], "hasPendingRequest": true} listchats: speakeasy-default-listchats: responses: @@ -9743,6 +10373,8 @@ examples: text/event-stream: "" "404": application/json: {} + "422": + application/json: {"message": "", "authenticationSuggestions": [{"requestType": "EXECUTION", "requestId": ""}]} createAndWaitRun: speakeasy-default-create-and-wait-run: requestBody: @@ -9750,6 +10382,8 @@ examples: responses: "200": application/json: {"run": {"agent_id": "", "messages": [{"role": "USER"}]}, "messages": [{"role": "USER"}]} + "422": + application/json: {"message": "", "authenticationSuggestions": []} addcollectionitems: speakeasy-default-addcollectionitems: requestBody: @@ -10095,9 +10729,11 @@ examples: datasource: "" requestBody: application/json; charset=UTF-8: {"objectType": "Article", "docId": "art123"} + application/json: {"objectType": "Article", "docId": "art123"} responses: "200": application/json; charset=UTF-8: {"status": {"uploadStatus": "UPLOADED", "lastUploadedAt": "2021-08-06T17:58:01.000Z", "indexingStatus": "INDEXED", "lastIndexedAt": "2021-08-06T17:58:01.000Z", "permissionIdentityStatus": "UPLOADED"}} + application/json: {"status": {"uploadStatus": "UPLOADED", "lastUploadedAt": "2021-08-06T17:58:01.000Z", "indexingStatus": "INDEXED", "lastIndexedAt": "2021-08-06T17:58:01.000Z", "permissionIdentityStatus": "UPLOADED"}} post_/api/index/v1/debug/{datasource}/documents: speakeasy-default-post-/api/index/v1-/debug/{datasource}/documents: parameters: @@ -10105,9 +10741,11 @@ examples: datasource: "" requestBody: application/json; charset=UTF-8: {"debugDocuments": []} + application/json: {"debugDocuments": []} responses: "200": application/json; charset=UTF-8: {"documentStatuses": [{"debugInfo": {"status": {"uploadStatus": "UPLOADED", "lastUploadedAt": "2021-08-06T17:58:01.000Z", "indexingStatus": "INDEXED", "lastIndexedAt": "2021-08-06T17:58:01.000Z", "permissionIdentityStatus": "UPLOADED"}}}]} + application/json: {"documentStatuses": [{"debugInfo": {"status": {"uploadStatus": "UPLOADED", "lastUploadedAt": "2021-08-06T17:58:01.000Z", "indexingStatus": "INDEXED", "lastIndexedAt": "2021-08-06T17:58:01.000Z", "permissionIdentityStatus": "UPLOADED"}}}]} post_/api/index/v1/checkdocumentaccess: speakeasy-default-post-/api/index/v1-/checkdocumentaccess: requestBody: @@ -10182,6 +10820,7 @@ examples: responses: "200": application/json; charset=UTF-8: {"documents": {"bulkUploadHistory": [{"uploadId": "upload-id-content-1707403081", "startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z", "status": "SUCCESSFUL", "processingState": "UPLOAD COMPLETED"}], "counts": {"uploaded": [{"objectType": "Article", "count": 15}], "indexed": [{"objectType": "Article", "count": 15}]}, "processingHistory": [{"startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z"}]}, "identity": {"processingHistory": [{"startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z"}], "users": {"bulkUploadHistory": [{"uploadId": "upload-id-content-1707403081", "startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z", "status": "SUCCESSFUL", "processingState": "UPLOAD COMPLETED"}], "counts": {"uploaded": 15}}, "groups": {"bulkUploadHistory": [{"uploadId": "upload-id-content-1707403081", "startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z", "status": "SUCCESSFUL", "processingState": "UPLOAD COMPLETED"}], "counts": {"uploaded": 15}}, "memberships": {"bulkUploadHistory": [{"uploadId": "upload-id-content-1707403081", "startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z", "status": "SUCCESSFUL", "processingState": "UPLOAD COMPLETED"}], "counts": {"uploaded": 15}}}, "datasourceVisibility": "ENABLED_FOR_ALL"} + application/json: {"documents": {"bulkUploadHistory": [{"uploadId": "upload-id-content-1707403081", "startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z", "status": "SUCCESSFUL", "processingState": "UPLOAD COMPLETED"}], "counts": {"uploaded": [{"objectType": "Article", "count": 15}], "indexed": [{"objectType": "Article", "count": 15}]}, "processingHistory": [{"startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z"}]}, "identity": {"processingHistory": [{"startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z"}], "users": {"bulkUploadHistory": [{"uploadId": "upload-id-content-1707403081", "startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z", "status": "SUCCESSFUL", "processingState": "UPLOAD COMPLETED"}], "counts": {"uploaded": 15}}, "groups": {"bulkUploadHistory": [{"uploadId": "upload-id-content-1707403081", "startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z", "status": "SUCCESSFUL", "processingState": "UPLOAD COMPLETED"}], "counts": {"uploaded": 15}}, "memberships": {"bulkUploadHistory": [{"uploadId": "upload-id-content-1707403081", "startTime": "2021-08-06T17:58:01.000Z", "endTime": "2021-08-06T18:58:01.000Z", "status": "SUCCESSFUL", "processingState": "UPLOAD COMPLETED"}], "counts": {"uploaded": 15}}}, "datasourceVisibility": "ENABLED_FOR_ALL"} post_/api/index/v1/debug/{datasource}/user: speakeasy-default-post-/api/index/v1-/debug/{datasource}/user: parameters: @@ -10189,9 +10828,11 @@ examples: datasource: "" requestBody: application/json; charset=UTF-8: {"email": "u1@foo.com"} + application/json: {"email": "u1@foo.com"} responses: "200": application/json; charset=UTF-8: {"status": {"isActiveUser": true, "uploadStatus": "UPLOADED", "lastUploadedAt": "2021-08-06T17:58:01.000Z"}} + application/json: {"status": {"isActiveUser": true, "uploadStatus": "UPLOADED", "lastUploadedAt": "2021-08-06T17:58:01.000Z"}} post_/api/index/v1/getusercount: speakeasy-default-post-/api/index/v1-/getusercount: requestBody: @@ -10420,9 +11061,11 @@ examples: datasource: "" requestBody: application/json; charset=UTF-8: {"objectType": "Article", "docId": "art123", "startDate": "2025-05-01", "maxEvents": 50} + application/json: {"objectType": "Article", "docId": "art123", "startDate": "2025-05-01", "maxEvents": 50} responses: "200": application/json; charset=UTF-8: {"lifeCycleEvents": [{"event": "INDEXED", "timestamp": "2021-08-06T17:58:01.000Z"}]} + application/json: {"lifeCycleEvents": [{"event": "INDEXED", "timestamp": "2021-08-06T17:58:01.000Z"}]} getDatasourceCredentialStatus: speakeasy-default-get-datasource-credential-status: parameters: @@ -10504,13 +11147,15 @@ examples: application/problem+json: {"type": "https://developer.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developer.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} "500": application/problem+json: {"type": "https://developer.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developer.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + "422": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}], "authentication_suggestions": []} platform-search: speakeasy-default-platform-search: requestBody: application/json: {"query": "quarterly planning 2026", "page_size": 10, "datasources": ["confluence", "google_drive"], "filters": [{"field": "type", "values": ["spreadsheet", "presentation"]}]} responses: "200": - application/json: {"results": [], "has_more": false, "next_cursor": "", "request_id": ""} + application/json: {"results": [], "has_more": false, "next_cursor": "", "request_id": "", "warnings": []} "400": application/problem+json: {"type": "https://developer.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developer.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} "500": @@ -10655,6 +11300,75 @@ examples: application/json: {"error": ""} "500": application/json: {"error": ""} + platform-chat-create: + speakeasy-default-platform-chat-create: + requestBody: + application/json: {"input": "", "stream": false, "store": true} + responses: + "200": + application/json: {"id": "", "object": "response", "created_at": "2026-05-19T05:32:52.505Z", "status": "completed", "output": [{"type": "message", "role": "assistant", "content": [{"type": "output_text", "text": ""}]}], "store": false, "request_id": ""} + text/event-stream: "" + "400": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + "500": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + platform-skills-preview-source: + speakeasy-default-platform-skills-preview-source: + requestBody: + application/json: {"source_url": "https://ugly-information.name/", "stream": false} + responses: + "200": + application/json: {"skills": [], "failures": [{"source_url": "https://slimy-availability.org", "code": "SKILL_FETCH_FAILED", "detail": ""}], "request_id": ""} + text/event-stream: "" + "400": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + "500": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + platform-skills-update: + speakeasy-default-platform-skills-update: + parameters: + path: + skill_id: "" + requestBody: + application/json: {"status": "DISABLED"} + responses: + "200": + application/json: {"skill": {"id": "", "display_name": "Afton14", "description": "taut netsuke duh sonata boastfully elegantly management come", "latest_version": 425795, "latest_minor_version": 741364, "status": "DISABLED", "origin": "CUSTOM", "owner": {"name": ""}, "created_at": "2024-12-20T01:31:39.364Z", "updated_at": "2025-12-04T02:59:37.124Z"}, "request_id": ""} + "400": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + "500": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + platform-search-filters: + speakeasy-default-platform-search-filters: + responses: + "200": + application/json: {"datasources": [], "request_id": ""} + "400": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + "500": + application/problem+json: {"type": "https://developers.glean.com/errors/invalid-cursor", "title": "Invalid Pagination Cursor", "status": 400, "detail": "The provided cursor has expired. Start a new search to get a fresh cursor.\n", "code": "invalid_cursor", "documentation_url": "https://developers.glean.com/errors/invalid-cursor", "request_id": "req_7f8a9b0c1d2e", "errors": [{"pointer": "/messages/0/role", "detail": "Must be one of: USER, GLEAN_AI.", "code": "invalid_cursor"}]} + importAgent: + speakeasy-default-import-agent: + parameters: + path: + agent_id: "" + requestBody: + multipart/form-data: {"bundle": "x-file: example.file"} + responses: + "200": + application/json: {"workflowResult": {"workflow": {"author": {"name": "George Clooney", "obfuscatedId": "abc123"}, "lastDraftSavedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}, "lastUpdatedBy": {"name": "George Clooney", "obfuscatedId": "abc123"}}}} + "404": + application/json: {} + getToolServerTools: + speakeasy-default-get-tool-server-tools: + parameters: + path: + serverId: "" + query: + toolNames: ["", "", ""] + responses: + "200": + application/json: {"tools": [{"serverId": "", "name": ""}]} examplesVersion: 1.0.2 generatedTests: activity: "2025-04-28T22:05:12+01:00" @@ -10834,7 +11548,17 @@ generatedTests: platform-skills-get-version: "2026-07-21T08:59:49Z" platform-skills-get-version-content: "2026-07-21T08:59:49Z" post_/rest/api/index/submissions/{datasourceInstance}/{type}: "2026-07-21T08:59:49Z" -releaseNotes: "## Python SDK Changes:\n* `glean.skills.create()`: **Added**\n* `glean.skills.list()`: **Added**\n* `glean.skills.validate()`: **Added**\n* `glean.skills.retrieve()`: **Added**\n* `glean.skills.retrieve_content()`: **Added**\n* `glean.skills.create_version()`: **Added**\n* `glean.skills.list_versions()`: **Added**\n* `glean.skills.retrieve_version()`: **Added**\n* `glean.skills.retrieve_version_content()`: **Added**\n* `glean.indexing.datasources.submit()`: **Added**\n* `glean.client.chat.create()`: \n * `request.messages[].fragments[].action.metadata.action_type_source` **Added**\n * `response.messages[].fragments[].action.metadata.action_type_source` **Added**\n* `glean.client.chat.retrieve()`: `response.chat_result.chat.messages[].fragments[].action.metadata.action_type_source` **Added**\n* `glean.client.chat.create_stream()`: \n * `request.messages[].fragments[].action.metadata.action_type_source` **Added**\n* `glean.client.agents.create()`: `response.workflow.webhook_url` **Added**\n* `glean.client.search.retrieve_feed()`: `response.results[].primary_entry.workflow.workflow.webhook_url` **Added**\n* `glean.client.governance.data.findings.create()`: \n * `request` **Changed**\n * `response` **Changed**\n* `glean.client.governance.data.findings.list()`: `response.exports[]` **Changed**\n" + platform-chat-create: "2026-08-06T02:37:19Z" + platform-skills-preview-source: "2026-08-06T02:37:19Z" + platform-skills-update: "2026-08-06T02:37:19Z" + platform-search-filters: "2026-08-06T02:37:19Z" + importAgent: "2026-08-06T02:37:19Z" + getToolServerTools: "2026-08-06T02:37:19Z" + post_/api/index/v1/debug/{datasource}/document: "2026-08-06T02:37:19Z" + post_/api/index/v1/debug/{datasource}/documents: "2026-08-06T02:37:19Z" + post_/api/index/v1/debug/{datasource}/document/events: "2026-08-06T02:37:19Z" + post_/api/index/v1/debug/{datasource}/user: "2026-08-06T02:37:19Z" +releaseNotes: "## Python SDK Changes:\n* `glean.search.query()`: \n * `request.datasource_instances` **Removed** (Breaking ⚠️)\n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed**\n* `glean.indexing.documents.debug()`: `response.status[200]` **Changed** (Breaking ⚠️)\n* `glean.indexing.documents.debug_many()`: `response.status[200]` **Changed** (Breaking ⚠️)\n* `glean.indexing.documents.debug_events()`: `response.status[200]` **Changed** (Breaking ⚠️)\n* `glean.indexing.datasource.status()`: `response.status[200]` **Changed** (Breaking ⚠️)\n* `glean.indexing.people.debug()`: `response.status[200]` **Changed** (Breaking ⚠️)\n* `glean.client.chat.create_stream()`: \n * `request.messages[]` **Changed**\n* `glean.client.collections.create()`: \n * `request.added_roles[].person.metadata.job_function` **Added**\n * `response.union(class (0)).collection.added_roles[].person.metadata.job_function` **Added**\n* `glean.search.list_filters()`: **Added**\n* `glean.client.agents.import()`: **Added**\n* `glean.client.tools.get_tool_server_tools()`: **Added**\n* `glean.agents.search()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.agents.get()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.agents.get_schemas()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.agents.create_run()`: `error` **Changed**\n* `glean.skills.create()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.skills.list()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.skills.validate()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.skills.retrieve()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.skills.retrieve_content()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.skills.create_version()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.skills.list_versions()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.skills.retrieve_version()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.skills.retrieve_version_content()`: `error.code.enum(tools_unauthorized)` **Added**\n* `glean.client.activity.feedback()`: \n * `request.feedback1.manual_feedback_info.issues[]` **Changed**\n* `glean.client.announcements.create()`: \n * `request.body.structured_list[].document.metadata.author.metadata.job_function` **Added**\n * `response.body.structured_list[].document.metadata.author.metadata.job_function` **Added**\n* `glean.client.announcements.update()`: \n * `request.body.structured_list[].document.metadata.author.metadata.job_function` **Added**\n * `response.body.structured_list[].document.metadata.author.metadata.job_function` **Added**\n* `glean.client.answers.create()`: \n * `request.data.added_roles[].person.metadata.job_function` **Added**\n * `response.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.answers.update()`: \n * `request.added_roles[].person.metadata.job_function` **Added**\n * `response.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.answers.retrieve()`: `response.answer_result.answer.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.answers.list()`: `response.answer_results[].answer.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.chat.create()`: \n * `request.messages[]` **Changed**\n * `response.messages[]` **Changed**\n* `glean.client.chat.retrieve()`: \n * `response.chat_result.chat` **Changed**\n * `error.status[403]` **Added**\n* `glean.client.chat.list()`: `response.chat_results[].chat.created_by.metadata.job_function` **Added**\n* `glean.skills.preview_source()`: **Added**\n* `glean.client.agents.create()`: `response.workflow.author.metadata.job_function` **Added**\n* `glean.skills.update()`: **Added**\n* `glean.client.agents.run_stream()`: `error` **Changed**\n* `glean.client.documents.retrieve_by_facets()`: `response.documents[].metadata.author.metadata.job_function` **Added**\n* `glean.client.agents.run()`: `error.status[422]` **Added**\n* `glean.client.collections.delete_item()`: `response.collection.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.collections.update()`: \n * `request.added_roles[].person.metadata.job_function` **Added**\n * `response.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.collections.update_item()`: `response.collection.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.collections.retrieve()`: `response.collection.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.collections.list()`: `response.collections[].added_roles[].person.metadata.job_function` **Added**\n* `glean.client.documents.retrieve()`: `response.documents.Map.union(Document).metadata.author.metadata.job_function` **Added**\n* `glean.client.collections.add_items()`: `response.collection.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.insights.retrieve()`: `response.glean_assist.activity_insights[].user.metadata.job_function` **Added**\n* `glean.client.messages.retrieve()`: `response.search_response.results[].structured_results[].document.metadata.author.metadata.job_function` **Added**\n* `glean.client.pins.update()`: `response.attribution.metadata.job_function` **Added**\n* `glean.client.pins.retrieve()`: `response.pin.attribution.metadata.job_function` **Added**\n* `glean.client.pins.list()`: `response.pins[].attribution.metadata.job_function` **Added**\n* `glean.client.pins.create()`: `response.attribution.metadata.job_function` **Added**\n* `glean.client.search.query_as_admin()`: \n * `request.source_document.metadata.author.metadata.job_function` **Added**\n * `response.results[].structured_results[].document.metadata.author.metadata.job_function` **Added**\n* `glean.client.search.autocomplete()`: `response.results[].document.metadata.author.metadata.job_function` **Added**\n* `glean.client.search.retrieve_feed()`: \n * `request.categories[].enum(meeting_prep_automation)` **Added**\n * `response.results[]` **Changed**\n* `glean.client.search.recommendations()`: \n * `request.source_document.metadata.author.metadata.job_function` **Added**\n * `response.results[].structured_results[].document.metadata.author.metadata.job_function` **Added**\n* `glean.client.search.query()`: \n * `request.source_document.metadata.author.metadata.job_function` **Added**\n * `response.results[].structured_results[].document.metadata.author.metadata.job_function` **Added**\n* `glean.client.entities.list()`: `response.results[].metadata.job_function` **Added**\n* `glean.client.entities.read_people()`: `response.results[].metadata.job_function` **Added**\n* `glean.client.shortcuts.create()`: \n * `request.data.added_roles[].person.metadata.job_function` **Added**\n * `response.shortcut.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.shortcuts.retrieve()`: `response.shortcut.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.shortcuts.list()`: `response.shortcuts[].added_roles[].person.metadata.job_function` **Added**\n* `glean.chat.create()`: **Added**\n* `glean.client.shortcuts.update()`: \n * `request.added_roles[].person.metadata.job_function` **Added**\n * `response.shortcut.added_roles[].person.metadata.job_function` **Added**\n* `glean.client.verification.add_reminder()`: `response.metadata.last_verifier.metadata.job_function` **Added**\n* `glean.client.verification.list()`: `response.documents[].metadata.last_verifier.metadata.job_function` **Added**\n* `glean.client.verification.verify()`: `response.metadata.last_verifier.metadata.job_function` **Added**\n* `glean.indexing.datasources.add()`: `request` **Changed**\n* `glean.indexing.datasources.retrieve_config()`: `response` **Changed**\n" generatedFiles: - .devcontainer/README.md - .devcontainer/devcontainer.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index b00f8adc..e610108f 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -34,7 +34,7 @@ generation: generateNewTests: true skipResponseBodyAssertions: true python: - version: 0.15.4 + version: 0.15.5 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/glean-merged-spec.yaml b/.speakeasy/glean-merged-spec.yaml index 9b00266d..6dc66bdd 100644 --- a/.speakeasy/glean-merged-spec.yaml +++ b/.speakeasy/glean-merged-spec.yaml @@ -2,8 +2,8 @@ openapi: 3.0.0 info: version: "0.9.0" title: Glean API - x-source-commit-sha: 2822daae55430107c738db822cbeeb5a6bef463b - x-open-api-commit-sha: 0bdefe83a21f917592624e6f1dbaa180e89d5224 + x-source-commit-sha: eb7da84baeb510a4e3b72b13ce7326d0d74694db + x-open-api-commit-sha: 0895da2a0ff6d90be848e04325209b5c0a588208 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. @@ -40,9 +40,6 @@ paths: Search agents available to the authenticated user by agent name. operationId: platform-agents-search x-visibility: Public - x-glean-experimental: - id: 4abc1e17-8e06-490b-99a7-e8f97592405a - introduced: "2026-05-12" x-codegen-request-body-name: payload requestBody: required: true @@ -88,9 +85,6 @@ paths: Retrieve details for an agent available to the authenticated user. operationId: platform-agents-get x-visibility: Public - x-glean-experimental: - id: 009b3e94-694b-4deb-b80a-c67011173715 - introduced: "2026-05-12" parameters: - in: path name: agent_id @@ -135,9 +129,6 @@ paths: Retrieve an agent's input and output JSON schemas. operationId: platform-agents-get-schemas x-visibility: Public - x-glean-experimental: - id: b40b4dd3-3839-48e6-9e45-7e63e8148b49 - introduced: "2026-05-12" parameters: - in: path name: agent_id @@ -189,9 +180,6 @@ paths: Execute an agent run. Set `stream` to true to receive server-sent events; otherwise the response contains the final agent messages. operationId: platform-agents-create-run x-visibility: Public - x-glean-experimental: - id: 26bba669-2e92-4e5d-9798-6a532fae4e9f - introduced: "2026-05-12" x-codegen-request-body-name: payload parameters: - in: path @@ -240,6 +228,12 @@ paths: $ref: "#/components/responses/PlatformConflict" "413": $ref: "#/components/responses/PlatformRequestTooLarge" + "422": + description: Returned when the agent has tools the caller must authorize before the run can start. `authentication_suggestions` names each such tool; POST its `server_id` to the Client API's `/tool-servers/{serverId}/auth` with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to, then retry the run once OAuth completes. + content: + application/problem+json: + schema: + $ref: "#/components/schemas/PlatformUnauthorizedAgentToolsProblem" "429": $ref: "#/components/responses/PlatformTooManyRequests" "500": @@ -250,6 +244,77 @@ paths: x-speakeasy-name-override: createRun security: - APIToken: [] + /api/chat: + post: + tags: + - Chat + summary: Create a chat response + description: | + Run an assistant turn. Set `stream` to true to receive server-sent events; otherwise the response is a typed JSON response object. + operationId: platform-chat-create + x-visibility: Public + x-glean-experimental: + id: e65a0a77-97a2-4c91-be60-eae7f6238015 + introduced: "2026-07-14" + x-codegen-request-body-name: payload + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PlatformChatCreateRequest" + responses: + "200": + description: Successful response. + content: + application/json: + schema: + $ref: "#/components/schemas/PlatformChatCompletedResponse" + text/event-stream: + schema: + type: string + description: | + Server-sent events for a streaming chat run. Event payloads are documented under ChatStream* schemas. + example: | + id: 1 + event: response.created + data: {"type":"response.created","response_id":"resp_e65a0a77-97a2-4c91-be60-eae7f6238015"} + + id: 2 + event: response.output_text.delta + data: {"type":"response.output_text.delta","response_id":"resp_e65a0a77-97a2-4c91-be60-eae7f6238015","delta":"Hello"} + + id: 3 + event: response.output_text.done + data: {"type":"response.output_text.done","response_id":"resp_e65a0a77-97a2-4c91-be60-eae7f6238015","text":"Hello"} + + id: 4 + event: response.completed + data: {"type":"response.completed","response_id":"resp_e65a0a77-97a2-4c91-be60-eae7f6238015","response":{"id":"resp_e65a0a77-97a2-4c91-be60-eae7f6238015","object":"response","status":"completed","output":[{"type":"message","role":"assistant","content":[{"type":"output_text","text":"Hello"}]}],"store":true,"request_id":"req_123","created_at":"2026-07-14T20:00:00Z"}} + "400": + $ref: "#/components/responses/PlatformBadRequest" + "401": + $ref: "#/components/responses/PlatformUnauthorized" + "403": + $ref: "#/components/responses/PlatformForbidden" + "404": + $ref: "#/components/responses/PlatformNotFound" + "408": + $ref: "#/components/responses/PlatformRequestTimeout" + "413": + $ref: "#/components/responses/PlatformRequestTooLarge" + "422": + $ref: "#/components/responses/PlatformUnprocessableEntity" + "429": + $ref: "#/components/responses/PlatformTooManyRequests" + "500": + $ref: "#/components/responses/PlatformInternalServerError" + "503": + $ref: "#/components/responses/PlatformServiceUnavailable" + x-speakeasy-group: chat + x-speakeasy-name-override: create + security: + - APIToken: [] /api/skills: post: tags: @@ -400,7 +465,127 @@ paths: x-speakeasy-name-override: validate security: - APIToken: [] + /api/skills/sources/preview: + post: + tags: + - Skills + summary: Preview a GitHub skill source + description: | + Inspect a GitHub URL without persisting a source or any discovered skills. Set stream to true to receive repository scan progress as server-sent events; otherwise the response contains the completed preview. + operationId: platform-skills-preview-source + x-visibility: Public + x-glean-experimental: + id: 1629009b-244a-400a-bf55-c441dfbc586c + introduced: "2026-07-23" + x-codegen-request-body-name: request + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PlatformSkillSourcePreviewRequest" + responses: + "200": + description: Successful response. + content: + application/json: + schema: + $ref: "#/components/schemas/PlatformSkillSourcePreviewResponse" + text/event-stream: + schema: + type: string + description: | + Server-sent scan, progress, skill, and result events. A failed stream + emits `data: {"type":"error","code":"service_unavailable","message":"GitHub is temporarily unavailable."}` + followed by `data: [DONE]` instead of a result event. + example: | + data: {"type":"scan","total":1,"skill_paths":["https://github.com/acme/skills/tree/main/skills/example"]} + + data: {"type":"progress","completed":1,"total":1,"current_skill":"skills/example/SKILL.md"} + + data: {"type":"skill","skill":{"display_name":"Example","description":"Example skill","source_url":"https://github.com/acme/skills/tree/main/skills/example","commit_sha":"abc123","main_content":"---\nname: Example\n---","files":[],"file_tree":["SKILL.md"]}} + + data: {"type":"result","response":{"skills":[{"display_name":"Example","description":"Example skill","source_url":"https://github.com/acme/skills/tree/main/skills/example","commit_sha":"abc123","main_content":"---\nname: Example\n---","files":[],"file_tree":["SKILL.md"]}],"failures":[],"request_id":"req-123"}} + + data: [DONE] + "400": + $ref: "#/components/responses/PlatformBadRequest" + "401": + $ref: "#/components/responses/PlatformUnauthorized" + "403": + $ref: "#/components/responses/PlatformForbidden" + "408": + $ref: "#/components/responses/PlatformRequestTimeout" + "413": + $ref: "#/components/responses/PlatformRequestTooLarge" + "429": + $ref: "#/components/responses/PlatformTooManyRequests" + "500": + $ref: "#/components/responses/PlatformInternalServerError" + "503": + $ref: "#/components/responses/PlatformServiceUnavailable" + x-speakeasy-group: skills + x-speakeasy-name-override: previewSource + security: + - APIToken: [] /api/skills/{skill_id}: + patch: + tags: + - Skills + summary: Update skill + description: | + Update mutable metadata for a skill. V1 supports enabling or disabling a skill without changing its content. + operationId: platform-skills-update + x-visibility: Public + x-glean-experimental: + id: 262e1f6b-6c2d-4d6d-943b-fc251d2fb38b + introduced: "2026-07-20" + parameters: + - name: skill_id + in: path + required: true + description: Glean skill ID. + schema: + type: string + minLength: 1 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PlatformSkillUpdateRequest" + x-codegen-request-body-name: request + responses: + "200": + description: Successful response. + content: + application/json: + schema: + $ref: "#/components/schemas/PlatformSkillUpdateResponse" + "400": + $ref: "#/components/responses/PlatformBadRequest" + "401": + $ref: "#/components/responses/PlatformUnauthorized" + "403": + $ref: "#/components/responses/PlatformForbidden" + "404": + $ref: "#/components/responses/PlatformNotFound" + "408": + $ref: "#/components/responses/PlatformRequestTimeout" + "409": + $ref: "#/components/responses/PlatformConflict" + "413": + $ref: "#/components/responses/PlatformRequestTooLarge" + "429": + $ref: "#/components/responses/PlatformTooManyRequests" + "500": + $ref: "#/components/responses/PlatformInternalServerError" + "503": + $ref: "#/components/responses/PlatformServiceUnavailable" + x-speakeasy-group: skills + x-speakeasy-name-override: update + security: + - APIToken: [] get: tags: - Skills @@ -739,7 +924,8 @@ paths: - Search summary: Search description: | - Execute a search query and retrieve ranked results. This is the data retrieval variant of the search API and returns only results and pagination state. + Search your organization's connected content and return ranked document results with cursor pagination. Use `GET /api/search/filters` to discover datasource identifiers and common filter fields. Built-in filter names are validated; other field names are accepted as custom filters and behavior depends on your Glean configuration and connected sources. + Errors: HTTP 422 `unprocessable_query` returns no `results` or `next_cursor`. See `warnings` on the response for non-blocking issues such as partially available results. Not every query issue produces a warning or error. operationId: platform-search x-visibility: Public x-glean-experimental: @@ -754,7 +940,7 @@ paths: $ref: "#/components/schemas/PlatformSearchRequest" responses: "200": - description: Successful search. + description: Successful response. content: application/json: schema: @@ -771,6 +957,8 @@ paths: $ref: "#/components/responses/PlatformRequestTimeout" "413": $ref: "#/components/responses/PlatformRequestTooLarge" + "422": + $ref: "#/components/responses/PlatformUnprocessableEntity" "429": $ref: "#/components/responses/PlatformTooManyRequests" "500": @@ -781,6 +969,73 @@ paths: x-speakeasy-name-override: query security: - APIToken: [] + /api/search/filters: + get: + tags: + - Search + summary: List search filters + description: | + List datasources and common built-in filter fields visible to the authenticated user. This is a best-effort catalog, not an exhaustive list of every filter search accepts. + Without `query`, returns field metadata only and does not run a search. With a nonblank `query`, provide exactly one `datasources` value to request suggested filter values for that query; no documents are returned and this endpoint does not include warning objects. See `FilterFieldInfo.values` for limitations on suggested values. Rate-limited requests return HTTP 429 with `Retry-After`; temporary backend unavailability returns HTTP 503. + operationId: platform-search-filters + x-visibility: Public + x-glean-experimental: + id: 0b585621-13fb-4544-bf20-5e1c99452735 + introduced: "2026-05-12" + parameters: + - in: query + name: datasources + description: | + Restrict metadata to one or more datasource identifiers as returned by this endpoint (for example, `jira`). With a nonblank `query`, exactly one datasource is required. Unknown or inaccessible identifiers return `invalid_datasource`. + required: false + schema: + type: array + minItems: 1 + items: + type: string + minLength: 1 + - in: query + name: query + description: | + Optional search query that requests suggested filter values for the selected datasource. Must be nonblank when present. Triggers a search for facet values only; does not return documents. + required: false + schema: + type: string + minLength: 1 + responses: + "200": + description: Successful response. + headers: + Cache-Control: + description: | + Present as `no-store` for query-backed discovery responses. Catalog-only responses omit this endpoint-specific override. + schema: + type: string + example: no-store + content: + application/json: + schema: + $ref: "#/components/schemas/PlatformSearchFiltersResponse" + "400": + $ref: "#/components/responses/PlatformBadRequest" + "401": + $ref: "#/components/responses/PlatformUnauthorized" + "403": + $ref: "#/components/responses/PlatformForbidden" + "404": + $ref: "#/components/responses/PlatformNotFound" + "408": + $ref: "#/components/responses/PlatformRequestTimeout" + "429": + $ref: "#/components/responses/PlatformTooManyRequests" + "500": + $ref: "#/components/responses/PlatformInternalServerError" + "503": + $ref: "#/components/responses/PlatformServiceUnavailable" + x-speakeasy-group: search + x-speakeasy-name-override: listFilters + security: + - APIToken: [] /rest/api/v1/activity: post: operationId: activity @@ -1442,6 +1697,10 @@ paths: description: Not Authorized "403": description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/AccessRequestPermissionDeniedResponse' "429": description: Too Many Requests x-visibility: Public @@ -1835,6 +2094,56 @@ paths: x-visibility: Preview x-speakeasy-group: client.agents x-speakeasy-name-override: retrieveSchemas + /rest/api/v1/agents/{agent_id}/import: + post: + operationId: importAgent + summary: Import an agent + description: 'Imports an [agent](https://developers.glean.com/agents/agents-api) from its on-disk folder representation (spec.yaml, instructions.md, skills/, subagents/) packaged as a zip, and creates or updates the agent. Inverse of the export flow: the folder-to-schema conversion runs server-side. The bundle must contain only regular files; symlinks are resolved by the caller at packaging time.' + tags: + - Agents + security: + - APIToken: [] + parameters: + - $ref: '#/components/parameters/locale' + - $ref: '#/components/parameters/timezoneOffset' + - name: agent_id + in: path + description: The ID of the agent to create or update. + required: true + schema: + type: string + title: Agent ID + description: The ID of the agent to create or update. + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/ImportAgentRequest' + required: true + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ImportAgentResponse' + "400": + description: Bad request + "401": + description: Not Authorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + "500": + description: Internal server error + x-visibility: Preview + x-speakeasy-group: client.agents + x-speakeasy-name-override: import /rest/api/v1/agents/search: post: operationId: searchAgents @@ -1934,11 +2243,11 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' "422": - description: Validation Error + description: Returned when the agent has tools the caller has not authorized. The response body enumerates the tools that need connecting. content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/UnauthorizedAgentToolsError' "500": description: Internal server error x-visibility: Preview @@ -1975,7 +2284,11 @@ paths: "409": description: Conflict "422": - description: Validation Error + description: Returned when the agent has tools the caller has not authorized. The response body enumerates the tools that need connecting. + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedAgentToolsError' "500": description: Internal server error x-visibility: Preview @@ -3492,45 +3805,104 @@ paths: operationId: authorizeToolServer summary: Start the OAuth authorization flow for a tool server. description: | - Initiates the third-party OAuth flow for the specified tool server and returns the - authorization URL that the client should navigate the end user to. After the OAuth - callback completes, the user's browser is redirected back to `returnUrl` with query - parameters indicating the result. + Initiates the third-party OAuth flow for the specified tool server and returns the + authorization URL that the client should navigate the end user to. After the OAuth + callback completes, the user's browser is redirected back to `returnUrl` with query + parameters indicating the result. + + `returnUrl` must match the tenant's configured return URL allowlist; otherwise the + request is rejected with 400. + tags: + - Tools + security: + - APIToken: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AuthorizeToolServerRequest' + required: true + responses: + "200": + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/AuthorizeToolServerResponse' + "400": + description: Invalid request (e.g. returnUrl not in allowlist, unsupported auth type) + "401": + description: Unauthorized + "403": + description: User not entitled to the tool server + "404": + description: Tool server not found + "429": + description: Too Many Requests + x-visibility: Preview + x-glean-experimental: + id: 1935476e-ecaf-4c1f-a9fd-1e768cf68f30 + introduced: "2026-07-02" + x-speakeasy-name-override: authorizeToolServer + x-speakeasy-group: client.tools + parameters: + - name: serverId + in: path + description: Unique identifier of the tool server. + required: true + schema: + type: string + /rest/api/v1/tool-servers/{serverId}/tools: + get: + operationId: getToolServerTools + summary: Get tool definitions from a tool server. + description: | + Returns the name, description and JSON input schema for the named tools on the + specified tool server. Works for both action packs and MCP servers. - `returnUrl` must match the tenant's configured return URL allowlist; otherwise the - request is rejected with 400. + `toolNames` is required. Names that do not exist on the server are returned in + `notFound` rather than failing the request, so a single bad name does not force + callers into one-at-a-time retries. Matching is case-insensitive and treats `-` + and `_` as equivalent. + + Native tools are not served; `serverId=native` returns 404. tags: - Tools security: - APIToken: [] - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AuthorizeToolServerRequest' - required: true + parameters: + - name: toolNames + in: query + description: Tool names to look up on this server. Maximum 100. + required: true + style: form + explode: false + schema: + type: array + items: + type: string responses: "200": description: Successful operation content: application/json: schema: - $ref: '#/components/schemas/AuthorizeToolServerResponse' + $ref: '#/components/schemas/ToolDefinitionsResponse' "400": - description: Invalid request (e.g. returnUrl not in allowlist, unsupported auth type) + description: Invalid request (e.g. missing toolNames, or more than 100 names) "401": description: Unauthorized - "403": - description: User not entitled to the tool server "404": description: Tool server not found "429": description: Too Many Requests + "503": + description: Tool schemas could not be resolved from the server x-visibility: Preview x-glean-experimental: - id: 1935476e-ecaf-4c1f-a9fd-1e768cf68f30 - introduced: "2026-07-02" - x-speakeasy-name-override: authorizeToolServer + id: 332eb38f-1b5d-4896-88e3-59db5e96e4e1 + introduced: "2026-07-30" + x-speakeasy-name-override: getToolServerTools x-speakeasy-group: client.tools parameters: - name: serverId @@ -4000,7 +4372,7 @@ paths: "200": description: OK content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugDatasourceStatusResponse' "400": @@ -4031,7 +4403,7 @@ paths: type: string requestBody: content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugDocumentRequest' required: true @@ -4040,7 +4412,7 @@ paths: "200": description: OK content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugDocumentResponse' "400": @@ -4071,7 +4443,7 @@ paths: type: string requestBody: content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugDocumentsRequest' required: true @@ -4080,7 +4452,7 @@ paths: "200": description: OK content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugDocumentsResponse' "400": @@ -4111,7 +4483,7 @@ paths: type: string requestBody: content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugUserRequest' required: true @@ -4120,7 +4492,7 @@ paths: "200": description: OK content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugUserResponse' "400": @@ -4639,7 +5011,7 @@ paths: type: string requestBody: content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugDocumentLifecycleRequest' required: true @@ -4648,7 +5020,7 @@ paths: "200": description: OK content: - application/json; charset=UTF-8: + application/json: schema: $ref: '#/components/schemas/DebugDocumentLifecycleResponse' "400": @@ -5640,6 +6012,24 @@ components: description: >- HTTP bearer token. Accepts a Glean-issued API token, an OAuth access token from the Glean OAuth Authorization Server (including Dynamic Client Registration clients), or an OAuth access token issued by an external identity provider. External-IdP OAuth tokens must also include the `X-Glean-Auth-Type: OAUTH` request header. OAuth is supported on the Client API only; the Indexing API requires a Glean-issued token. schemas: + PlatformWarning: + type: object + additionalProperties: false + required: + - code + - message + description: Non-blocking warning attached to a successful Platform response. + properties: + code: + type: string + minLength: 1 + description: | + Open snake_case warning code. Clients must tolerate unknown values; the set of codes is not a closed enum. + example: results_incomplete + message: + type: string + minLength: 1 + description: Human-readable warning message. PlatformAgentsSearchRequest: type: object additionalProperties: false @@ -5717,6 +6107,7 @@ components: - conflict - gone - unprocessable_query + - tools_unauthorized - rate_limit_exceeded - internal_error - service_unavailable @@ -5772,6 +6163,9 @@ components: unprocessable_query: status: 422 title: Unprocessable Query + tools_unauthorized: + status: 422 + title: Tools Unauthorized rate_limit_exceeded: status: 429 title: Rate Limit Exceeded @@ -6025,6 +6419,304 @@ components: request_id: type: string description: Platform-generated request ID for support correlation. + PlatformAuthenticationSuggestion: + type: object + description: One tool the caller must authorize before the agent can run. + required: + - server_id + properties: + tool_name: + type: string + description: Human-readable tool name. + server_id: + type: string + description: Identifier to POST to `/tool-servers/{serverId}/auth` (Client API) with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to. + PlatformUnauthorizedAgentToolsProblem: + description: Problem detail extended with `authentication_suggestions` naming each tool the caller must authorize. + allOf: + - $ref: "#/components/schemas/PlatformProblemDetail" + - type: object + required: + - authentication_suggestions + properties: + authentication_suggestions: + type: array + description: One entry per tool the caller must authorize. + items: + $ref: "#/components/schemas/PlatformAuthenticationSuggestion" + PlatformChatInputMessage: + type: object + additionalProperties: false + required: + - role + - content + properties: + role: + type: string + enum: + - user + - assistant + content: + type: string + minLength: 1 + PlatformChatCreateRequest: + type: object + additionalProperties: false + required: + - input + properties: + input: + description: | + Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + oneOf: + - type: string + minLength: 1 + - type: array + minItems: 1 + items: + $ref: "#/components/schemas/PlatformChatInputMessage" + stream: + type: boolean + description: | + When true, respond with `text/event-stream`. When false or omitted, respond with `application/json`. + default: false + store: + type: boolean + description: | + When true (default), persist the interaction and return a `conversation_id`. When false, run ephemerally with no persistence. + default: true + conversation_id: + type: string + minLength: 1 + description: | + Continue an existing stored conversation. Incompatible with message-array `input` and with `store: false`. + PlatformChatStreamResponseId: + type: string + minLength: 1 + pattern: ^resp_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$ + description: | + Platform-owned, non-persisted response envelope identifier in `resp_` form. The same identifier is used for every event in one streamed response. + PlatformChatDocumentSource: + type: object + additionalProperties: false + required: + - type + properties: + type: + type: string + enum: + - document + document_id: + type: string + minLength: 1 + url: + type: string + minLength: 1 + title: + type: string + datasource: + type: string + anyOf: + - required: + - document_id + - required: + - url + PlatformChatPersonSource: + type: object + additionalProperties: false + required: + - type + - person_id + properties: + type: + type: string + enum: + - person + person_id: + type: string + minLength: 1 + name: + type: string + url: + type: string + PlatformChatFileSource: + type: object + additionalProperties: false + required: + - type + - file_id + properties: + type: + type: string + enum: + - file + file_id: + type: string + minLength: 1 + title: + type: string + url: + type: string + datasource: + type: string + PlatformChatCustomEntitySource: + type: object + additionalProperties: false + required: + - type + - entity_id + properties: + type: + type: string + enum: + - custom_entity + entity_id: + type: string + minLength: 1 + name: + type: string + title: + type: string + url: + type: string + datasource: + type: string + PlatformChatCitationSource: + description: Four-variant citation source union. + oneOf: + - $ref: "#/components/schemas/PlatformChatDocumentSource" + - $ref: "#/components/schemas/PlatformChatPersonSource" + - $ref: "#/components/schemas/PlatformChatFileSource" + - $ref: "#/components/schemas/PlatformChatCustomEntitySource" + discriminator: + propertyName: type + mapping: + document: "#/components/schemas/ChatDocumentSource" + person: "#/components/schemas/ChatPersonSource" + file: "#/components/schemas/ChatFileSource" + custom_entity: "#/components/schemas/ChatCustomEntitySource" + PlatformChatCitationSnippet: + type: object + additionalProperties: false + required: + - text + properties: + text: + type: string + minLength: 1 + page_number: + type: integer + nullable: true + PlatformChatCitationAnnotation: + type: object + additionalProperties: false + required: + - type + - sources + properties: + type: + type: string + enum: + - citation + sources: + type: array + minItems: 1 + items: + $ref: "#/components/schemas/PlatformChatCitationSource" + start_index: + type: integer + minimum: 0 + nullable: true + end_index: + type: integer + minimum: 0 + nullable: true + snippets: + type: array + nullable: true + items: + $ref: "#/components/schemas/PlatformChatCitationSnippet" + PlatformChatOutputTextContent: + type: object + additionalProperties: false + required: + - type + - text + properties: + type: + type: string + enum: + - output_text + text: + type: string + annotations: + type: array + items: + $ref: "#/components/schemas/PlatformChatCitationAnnotation" + PlatformChatOutputMessage: + type: object + additionalProperties: false + required: + - type + - role + - content + properties: + type: + type: string + enum: + - message + role: + type: string + enum: + - assistant + content: + type: array + minItems: 1 + maxItems: 1 + items: + $ref: "#/components/schemas/PlatformChatOutputTextContent" + PlatformChatCompletedResponse: + type: object + additionalProperties: false + required: + - id + - object + - created_at + - status + - output + - store + - request_id + properties: + id: + $ref: "#/components/schemas/PlatformChatStreamResponseId" + object: + type: string + enum: + - response + created_at: + type: string + format: date-time + description: RFC 3339 UTC timestamp when the response was created. + status: + type: string + enum: + - completed + output: + type: array + minItems: 1 + maxItems: 1 + items: + $ref: "#/components/schemas/PlatformChatOutputMessage" + store: + type: boolean + conversation_id: + type: string + minLength: 1 + nullable: true + description: Present when the interaction was persisted. + request_id: + type: string + minLength: 1 PlatformSkillStatus: type: string enum: @@ -6205,18 +6897,6 @@ components: is_manifest: type: boolean description: Whether this file is the skill manifest. - PlatformSkillValidationWarning: - type: object - required: - - code - - message - properties: - code: - type: string - description: Stable warning code. - message: - type: string - description: Human-readable warning message. PlatformSkillValidationResponse: type: object required: @@ -6236,7 +6916,112 @@ components: type: array description: Non-blocking validation warnings. items: - $ref: "#/components/schemas/PlatformSkillValidationWarning" + $ref: "#/components/schemas/PlatformWarning" + request_id: + type: string + description: Platform-generated request ID for support correlation. + PlatformSkillSourcePreviewRequest: + type: object + additionalProperties: false + required: + - source_url + properties: + source_url: + type: string + minLength: 1 + maxLength: 2048 + description: GitHub URL for a skill directory, SKILL.md file, or repository to inspect. + stream: + type: boolean + default: false + description: Whether to stream repository scan progress using server-sent events. + PlatformSkillSourcePreviewFile: + type: object + required: + - path + - content + properties: + path: + type: string + description: Relative path within the skill bundle. + content: + type: string + description: UTF-8 file content. + PlatformSkillSourcePreview: + type: object + required: + - display_name + - description + - source_url + - commit_sha + - main_content + - files + - file_tree + properties: + display_name: + type: string + description: Skill name parsed from SKILL.md frontmatter. + description: + type: string + description: Skill description parsed from SKILL.md frontmatter. + source_url: + type: string + description: Resolved URL for this skill within the source. + commit_sha: + type: string + description: Commit SHA used to produce the preview. + main_content: + type: string + description: SKILL.md content fetched as part of the preview. + files: + type: array + description: Supporting files fetched with the skill. + items: + $ref: "#/components/schemas/PlatformSkillSourcePreviewFile" + file_tree: + type: array + description: Relative paths discovered for the skill. + items: + type: string + PlatformSkillSourcePreviewFailureCode: + type: string + enum: + - INVALID_SKILL + - SKILL_FETCH_FAILED + description: Stable machine-readable reason a discovered entry was excluded. + PlatformSkillSourcePreviewFailure: + type: object + required: + - source_url + - code + - detail + properties: + source_url: + type: string + description: Resolved URL for the entry that could not be previewed. + code: + $ref: "#/components/schemas/PlatformSkillSourcePreviewFailureCode" + detail: + type: string + description: Safe explanation of why the entry was excluded. + PlatformSkillSourcePreviewResponse: + type: object + required: + - skills + - failures + - request_id + properties: + skills: + type: array + minItems: 1 + description: Valid skills discovered at the source URL. + items: + $ref: "#/components/schemas/PlatformSkillSourcePreview" + failures: + type: array + description: Discovered entries that could not be included in the preview. + items: + $ref: "#/components/schemas/PlatformSkillSourcePreviewFailure" request_id: type: string description: Platform-generated request ID for support correlation. @@ -6251,6 +7036,31 @@ components: request_id: type: string description: Platform-generated request ID for support correlation. + PlatformSkillUpdateStatus: + type: string + enum: + - ENABLED + - DISABLED + description: New status for the skill. + PlatformSkillUpdateRequest: + type: object + additionalProperties: false + required: + - status + properties: + status: + $ref: "#/components/schemas/PlatformSkillUpdateStatus" + PlatformSkillUpdateResponse: + type: object + required: + - skill + - request_id + properties: + skill: + $ref: "#/components/schemas/PlatformSkill" + request_id: + type: string + description: Platform-generated request ID for support correlation. PlatformSkillVersion: type: object required: @@ -6353,23 +7163,27 @@ components: - LTE PlatformFilter: type: object + additionalProperties: false required: - field - values description: | - A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd. For `NOT_EQUALS`, multiple values exclude all listed values. Filters are AND'd with each other and with any inline query operators. + A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd; for `NOT_EQUALS`, listed values are excluded. Separate filters are AND'd with each other and with inline operators in `query`. Repeated same-field `EQUALS` filters are rejected. properties: field: type: string + minLength: 1 description: | - The field to filter on. Accepts built-in filter field names such as `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`, plus custom datasource property names. + Filter field name. Built-in names (case-sensitive, lowercase only): `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`. Built-ins accept only `EQUALS` and `NOT_EQUALS`. Any other nonblank name is accepted as a custom filter without spelling, existence, or type checks; behavior depends on your connected sources. example: type values: type: array minItems: 1 items: type: string - description: One or more values to match. + minLength: 1 + description: | + One or more values to match. Prefer values returned by filter discovery unchanged. For people (`USER`) fields, values may be email addresses or display names. example: - spreadsheet - presentation @@ -6377,9 +7191,10 @@ components: allOf: - $ref: "#/components/schemas/PlatformFilterOperator" description: | - Comparison operator to apply to this filter. Defaults to `EQUALS`. `GT`, `GTE`, `LT`, and `LTE` range operators require exactly one value; express bounded ranges with multiple filters on the same field. + Comparison operator. Defaults to `EQUALS`. Built-in fields support only `EQUALS` and `NOT_EQUALS`. Range operators (`GT`, `GTE`, `LT`, `LTE`) require exactly one value; express ranges with multiple filters on the same field. Custom fields may support different operators depending on the data source. PlatformTimeRange: type: object + additionalProperties: false description: Filter results to those last updated within this range. properties: start: @@ -6408,6 +7223,7 @@ components: properties: query: type: string + minLength: 1 description: | The search query string. Supports inline operators such as `from:jane type:document app:confluence`. Inline operators are AND'd with structured `filters`. page_size: @@ -6423,26 +7239,24 @@ components: Opaque pagination token from a previous response's `next_cursor` field. Omit on the first request. datasources: type: array + minItems: 1 items: type: string + minLength: 1 description: | - Restrict results to specific datasources. Requests must not specify both `datasources` and `datasource_instances`. - datasource_instances: - type: array - items: - type: string - description: | - Restrict results to specific datasource instances. Values are datasource instance identifiers returned by `GET /api/search/filters`. Requests must not specify both `datasources` and `datasource_instances`. + Restrict results to specific datasource identifiers returned by `GET /api/search/filters`. Scopes by datasource type and may include results from multiple instances of that type. filters: type: array + minItems: 1 items: $ref: "#/components/schemas/PlatformFilter" description: | - Structured filters applied to search results. Equality operators OR multiple values within a filter. Multiple filters are AND'd together, including range filters on the same field. Filters are AND'd with any inline operators in `query`. Note that conflicting constraints on the same field (e.g., `type:document` in the query and `type: spreadsheet` in a filter) produce an empty result set. + Structured filters applied to search results. Multiple values within a filter with `EQUALS` are OR'd; separate filters are AND'd. Conflicting constraints on the same field (for example, `type:document` in `query` and `type:spreadsheet` in a filter) return an empty result set. See `Filter.field` for built-in field names and operators. Other nonblank field names are accepted as custom filters without validation; behavior depends on your connected sources. time_range: $ref: "#/components/schemas/PlatformTimeRange" PlatformResult: type: object + additionalProperties: false required: - url - title @@ -6451,31 +7265,31 @@ components: url: type: string format: uri + minLength: 1 description: Canonical URL of the result. example: https://company.atlassian.net/wiki/spaces/ENG/pages/12345 title: type: string + minLength: 1 description: Result title. example: Q2 2026 Platform Roadmap snippets: type: array items: type: string + minLength: 1 description: Query-relevant plain-text excerpts from the result body. example: - The platform team will focus on API stability and... datasource: type: string + minLength: 1 description: The datasource this result originates from. example: confluence - datasource_instance: - type: string - nullable: true - description: The datasource instance this result originates from, if known. - example: confluence_acme document_type: type: string nullable: true + minLength: 1 description: The document type within the datasource. example: page creator: @@ -6494,17 +7308,20 @@ components: description: When the result was created. PlatformSearchResponse: type: object + additionalProperties: false required: - results - has_more - next_cursor - request_id + - warnings properties: results: type: array items: $ref: "#/components/schemas/PlatformResult" - description: Ordered list of search results. + description: | + Ordered list of ranked document results. People cards, Q&A blocks, and other UI-only result types are not included. has_more: type: boolean description: Indicates whether additional pages of results are available. @@ -6514,6 +7331,82 @@ components: description: Opaque token to pass as `cursor` in the next request. request_id: type: string + minLength: 1 + description: Platform-generated request ID for support correlation. + warnings: + type: array + description: | + Non-blocking warnings for this response. Required; use `[]` when there are none. Clients must tolerate unknown warning codes. `results_incomplete` means some results may be unavailable for the requested datasource scope while `results`, `has_more`, and `next_cursor` remain present. Warning messages are generic and do not include query text or internal identifiers. + items: + $ref: "#/components/schemas/PlatformWarning" + PlatformFilterFieldInfo: + type: object + additionalProperties: false + required: + - field + - type + - operators + properties: + field: + type: string + minLength: 1 + description: Field name usable in the `filters` array for `POST /api/search`. + example: status + type: + type: string + minLength: 1 + description: | + Open field-type string. Current values are `STRING` for text and keyword fields and `USER` for people fields (`owner`, `from`, `author`, `assignee`, `reporter`, `mentions`). Clients must tolerate unknown values. + example: STRING + operators: + type: array + minItems: 1 + description: | + Comparison operators supported for this field. Built-in fields expose `EQUALS` and `NOT_EQUALS`. + items: + $ref: "#/components/schemas/PlatformFilterOperator" + values: + type: array + description: | + Suggested filter values observed for the supplied `query`. Omitted in catalog-only responses. Present as an array, including `[]`, when `query` is provided. Values are a bounded, non-exhaustive sample in search-provider order and may include duplicates; blank values are omitted. No additional endpoint-specific truncation is applied. Grouping in the search UI is not preserved; each value applies to the field broadly. An empty array does not mean no valid value exists. Availability varies by data source; federated and MCP integrations may return page-derived values or none at all. Reusing a suggested value in `POST /api/search` does not guarantee matching results or identical filter behavior. For `USER` fields, values may be email addresses or display names. + items: + type: string + minLength: 1 + PlatformDatasourceFilterInfo: + type: object + additionalProperties: false + required: + - datasource + - filters + properties: + datasource: + type: string + minLength: 1 + description: | + Datasource identifier usable in `POST /api/search` `datasources`. + example: jira + filters: + type: array + description: | + Common built-in filter fields for this datasource. May be empty. A built-in omitted here can still be valid in `POST /api/search`; see `Filter.field` for the full built-in name list. + items: + $ref: "#/components/schemas/PlatformFilterFieldInfo" + PlatformSearchFiltersResponse: + type: object + additionalProperties: false + required: + - datasources + - request_id + properties: + datasources: + type: array + description: | + Datasources visible to the authenticated user. Each `datasource` is an identifier you can pass to `POST /api/search` `datasources`. An empty array means no visible datasources. + items: + $ref: "#/components/schemas/PlatformDatasourceFilterInfo" + request_id: + type: string + minLength: 1 description: Platform-generated request ID for support correlation. ActivityEventParams: properties: @@ -6719,6 +7612,8 @@ components: - RESULTS_HELPFUL - RESULTS_POOR_ORDER - TOO_MUCH_ONE_KIND + - NOT_A_QUESTION + - UNSURE_IF_CORRECT description: The issue(s) the user indicated in the feedback. imageUrls: type: array @@ -9493,6 +10388,9 @@ components: department: type: string description: An organizational unit where everyone has a similar task, e.g. `Engineering`. + jobFunction: + type: string + description: Normalized job-function category assigned by Entity Builder from the source department and, when available, job title. Unlike `department`, which preserves the company-specific organizational unit, this field groups departments into configured categories such as `Engineering`, `Sales`, or `IT`; it may be `Unknown` when the mapping is inconclusive. teams: type: array items: @@ -10430,7 +11328,36 @@ components: - client_secret_post - client_secret_basic - none - description: The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. client_secret_post sends credentials as form fields, client_secret_basic sends them via Authorization header, none omits client secret and relies on PKCE only. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). + - private_key_jwt + description: The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). + x-enumDescriptions: + client_secret_post: Send client_id and client_secret as form fields in the token request body. + client_secret_basic: Send client_id and client_secret via the HTTP Basic Authorization header. + none: Public client - omit the client secret and authenticate with the PKCE code_verifier only. + private_key_jwt: Authenticate with a JWT client assertion signed by the client's private key (RFC 7523 Section 2.2 / OIDC Core Section 9). Requires a key pair pre-registered with the authorization server. + x-speakeasy-enum-descriptions: + client_secret_post: Send client_id and client_secret as form fields in the token request body. + client_secret_basic: Send client_id and client_secret via the HTTP Basic Authorization header. + none: Public client - omit the client secret and authenticate with the PKCE code_verifier only. + private_key_jwt: Authenticate with a JWT client assertion signed by the client's private key (RFC 7523 Section 2.2 / OIDC Core Section 9). Requires a key pair pre-registered with the authorization server. + authHeaderType: + type: string + enum: + - AUTHORIZATION_BEARER + - AUTHORIZATION_TOKEN + - AUTHORIZATION_API_KEY + - X_API_KEY + description: Defines the header structure for sending the API key or token to the server. Defaults to AUTHORIZATION_BEARER. Select the specific header format the server expects for transmitting the key. + x-enumDescriptions: + AUTHORIZATION_BEARER: "Sends \"Authorization: Bearer \"." + AUTHORIZATION_TOKEN: "Sends \"Authorization: Token \"." + AUTHORIZATION_API_KEY: "Sends \"Authorization: ApiKey \"." + X_API_KEY: "Sends \"X-API-Key: \". No Authorization header is sent." + x-speakeasy-enum-descriptions: + AUTHORIZATION_BEARER: "Sends \"Authorization: Bearer \"." + AUTHORIZATION_TOKEN: "Sends \"Authorization: Token \"." + AUTHORIZATION_API_KEY: "Sends \"Authorization: ApiKey \"." + X_API_KEY: "Sends \"X-API-Key: \". No Authorization header is sent." lastAuthorizedAt: type: string format: date-time @@ -10954,6 +11881,26 @@ components: properties: chatResult: $ref: '#/components/schemas/ChatResult' + AccessRequestPermissionDeniedResponse: + type: object + properties: + errorType: + type: string + enum: + - PERMISSION_DENIED + createdBy: + $ref: '#/components/schemas/Person' + requestableRoles: + type: array + items: + $ref: '#/components/schemas/UserRole' + hasPendingRequest: + type: boolean + required: + - errorType + - createdBy + - requestableRoles + - hasPendingRequest ChatMetadataResult: properties: chat: @@ -11235,6 +12182,52 @@ components: - input_schema - output_schema description: Defines the structure and properties of an agent. + ImportAgentSyncMode: + type: string + enum: + - STAGED + - PUBLISHED + description: | + Whether the imported version is staged (saved without updating the live version) or published directly to the live version. + ImportAgentRequest: + type: object + properties: + bundle: + type: string + format: binary + description: | + Zip of the agent folder (spec.yaml, instructions.md, skills/, subagents/) with symlinks dereferenced. + gitCommitSha: + type: string + description: Optional Git commit SHA to associate with this import. + gitAuthorId: + type: string + description: Optional VCS commit author ID to associate with this import. + commitMessage: + type: string + description: Optional commit message for the imported version. + syncMode: + $ref: '#/components/schemas/ImportAgentSyncMode' + isDraft: + type: boolean + description: | + When true, validates and stores a draft preview without publishing (used for PR preview links). Takes precedence over `syncMode`: when `isDraft` is true, `syncMode` is ignored. + required: + - bundle + ImportAgentStatus: + type: string + enum: + - CREATED + - UPDATED + - DRAFT_PREVIEW + description: Outcome of the import for the target agent. + ImportAgentResponse: + type: object + properties: + workflowResult: + $ref: '#/components/schemas/WorkflowResult' + status: + $ref: '#/components/schemas/ImportAgentStatus' SearchAgentsRequest: type: object properties: @@ -11303,6 +12296,22 @@ components: required: - agent_id description: 'Payload for creating a run. **Important**: If the agent uses an input form trigger, the `input` field is required and must include all fields defined in the form schema. Even fields marked as optional in the UI must be included in the request—use an empty string (`""`) for optional fields without values. Omitting required form fields will result in a 500 error.' + UnauthorizedAgentToolsError: + type: object + properties: + message: + type: string + description: Human-readable description of the failure. + authenticationSuggestions: + type: array + items: + $ref: '#/components/schemas/ServerToolRequest' + description: One entry per tool the caller must authorize. + title: UnauthorizedAgentToolsError + required: + - message + - authenticationSuggestions + description: Returned when the agent has tools the caller must authorize before the run can start. Each entry in `authenticationSuggestions` names one such tool; POST its `serverId` to `/tool-servers/{serverId}/auth` with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to, then retry the run once OAuth completes. AgentExecutionStatus: type: string title: AgentExecutionStatus @@ -13102,6 +14111,7 @@ components: - PLAN_MY_DAY - END_MY_DAY - STARTER_KIT + - MEETING_PREP_AUTOMATION - MID_DAY_CATCH_UP - QUERY_SUGGESTION - COWORK_CUJ_PROMO @@ -13545,6 +14555,7 @@ components: - STARTER_KIT_ORG_CHART - STARTER_KIT_ADD_DOC - MEETING_RECAP + - MEETING_PREP_AUTOMATION - ACTIVE_DISCUSSION - MID_DAY_CATCH_UP - QUERY_SUGGESTION @@ -13636,6 +14647,7 @@ components: - PLAN_MY_DAY - END_MY_DAY - STARTER_KIT + - MEETING_PREP_AUTOMATION - MID_DAY_CATCH_UP - QUERY_SUGGESTION - COWORK_CUJ_PROMO @@ -14328,6 +15340,84 @@ components: After the user consents, control returns to `returnUrl` from the request. required: - authorizationUrl + ToolAnnotations: + type: object + properties: + title: + type: string + readOnlyHint: + type: boolean + description: | + True if the tool does not modify its environment. Always present. MCP + defines no distinction between an undeclared value and `false` here, so + `false` means "not declared read-only" rather than "declared mutating". + x-includeEmpty: true + destructiveHint: + type: boolean + description: | + True if the tool may perform destructive updates. **Absent means the server + did not declare it**, for which the MCP default is `true`. Only meaningful + when `readOnlyHint` is `false`. + nullable: true + idempotentHint: + type: boolean + description: | + True if repeated calls with the same arguments have no additional effect. + Always present; as with `readOnlyHint`, `false` means "not declared + idempotent". Only meaningful when `readOnlyHint` is `false`. + x-includeEmpty: true + openWorldHint: + type: boolean + description: | + True if the tool interacts with an open world of external entities. **Absent + means the server did not declare it**, for which the MCP default is `true`. + nullable: true + description: | + Behavioural hints for the tool, exactly as declared by the tool server. No + defaults are filled in — see the per-field notes for what an absent value means. + + Per the MCP specification, clients MUST treat these hints as untrusted unless + the tool server is itself trusted. They are advisory metadata, not an + authorization signal, and must not be the sole basis of a security decision. + ToolDefinition: + type: object + properties: + serverId: + type: string + description: Tool server this tool belongs to. + name: + type: string + description: Name to invoke the tool by. + displayName: + type: string + description: Human-readable name of the tool. + description: + type: string + description: What the tool does, as surfaced to a model. + inputSchema: + type: object + additionalProperties: true + description: JSON Schema for the tool's input parameters. + annotations: + $ref: '#/components/schemas/ToolAnnotations' + required: + - serverId + - name + ToolDefinitionsResponse: + type: object + properties: + tools: + type: array + items: + $ref: '#/components/schemas/ToolDefinition' + description: Definitions for the requested tools that exist on this server. + notFound: + type: array + items: + type: string + description: Requested names that do not exist on this server. + required: + - tools IndexDocumentRequest: type: object properties: @@ -15845,6 +16935,8 @@ components: - ENTITY - CALENDAR - AGENTS + - AI_CONVERSATION + - AI_ARTIFACT description: The document category of this object type. propertyDefinitions: type: array @@ -15898,6 +16990,8 @@ components: - ENTITY - CALENDAR - AGENTS + - AI_CONVERSATION + - AI_ARTIFACT description: The type of this datasource. It is an important signal for relevance and must be specified and cannot be UNCATEGORIZED. Please refer to [this](https://developers.glean.com/docs/indexing_api_datasource_category/) for more details. default: UNCATEGORIZED urlRegex: @@ -17028,6 +18122,12 @@ components: application/problem+json: schema: $ref: "#/components/schemas/PlatformProblemDetail" + PlatformUnprocessableEntity: + description: Syntactically valid but semantically incorrect request. + content: + application/problem+json: + schema: + $ref: "#/components/schemas/PlatformProblemDetail" SuccessResponse: description: OK content: diff --git a/.speakeasy/tests.arazzo.yaml b/.speakeasy/tests.arazzo.yaml index 1d05c2de..a0f79b8e 100644 --- a/.speakeasy/tests.arazzo.yaml +++ b/.speakeasy/tests.arazzo.yaml @@ -158821,7 +158821,7 @@ workflows: - condition: $response.header.Content-Type == application/json - context: $response.body condition: | - {"results":[],"has_more":false,"next_cursor":"","request_id":""} + {"results":[],"has_more":false,"next_cursor":"","request_id":"","warnings":[]} type: simple x-speakeasy-test-group: search x-speakeasy-test-rebuild: true @@ -159048,3 +159048,206 @@ workflows: type: simple x-speakeasy-test-group: indexing_datasources x-speakeasy-test-rebuild: true + - workflowId: platform-chat-create + steps: + - stepId: test + operationId: platform-chat-create + requestBody: + contentType: application/json + payload: + input: + store: true + stream: false + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"id":"","object":"response","created_at":"2026-05-19T05:32:52.505Z","status":"completed","output":[{"type":"message","role":"assistant","content":[{"type":"output_text","text":""}]}],"store":false,"request_id":""} + type: simple + x-speakeasy-test-group: chat_SDK + x-speakeasy-test-rebuild: true + - workflowId: platform-skills-preview-source + steps: + - stepId: test + operationId: platform-skills-preview-source + requestBody: + contentType: application/json + payload: + source_url: https://ugly-information.name/ + stream: false + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"skills":[],"failures":[{"source_url":"https://slimy-availability.org","code":"SKILL_FETCH_FAILED","detail":""}],"request_id":""} + type: simple + x-speakeasy-test-group: skills + x-speakeasy-test-rebuild: true + - workflowId: platform-skills-update + steps: + - stepId: test + operationId: platform-skills-update + parameters: + - name: skill_id + in: path + value: + requestBody: + contentType: application/json + payload: + status: DISABLED + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"skill":{"id":"","display_name":"Afton14","description":"taut netsuke duh sonata boastfully elegantly management come","latest_version":425795,"latest_minor_version":741364,"status":"DISABLED","origin":"CUSTOM","owner":{"name":""},"created_at":"2024-12-20T01:31:39.364Z","updated_at":"2025-12-04T02:59:37.124Z"},"request_id":""} + type: simple + x-speakeasy-test-group: skills + x-speakeasy-test-rebuild: true + - workflowId: platform-search-filters + steps: + - stepId: test + operationId: platform-search-filters + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"datasources":[],"request_id":""} + type: simple + x-speakeasy-test-group: search + x-speakeasy-test-rebuild: true + - workflowId: importAgent + steps: + - stepId: test + operationId: importAgent + parameters: + - name: agent_id + in: path + value: + requestBody: + contentType: multipart/form-data + payload: + bundle: 'x-file: example.file' + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"workflowResult":{"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: client_agents + x-speakeasy-test-rebuild: true + - workflowId: getToolServerTools + steps: + - stepId: test + operationId: getToolServerTools + parameters: + - name: serverId + in: path + value: + - name: toolNames + in: query + value: + - + - + - + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"tools":[{"serverId":"","name":""}]} + type: simple + x-speakeasy-test-group: tools + x-speakeasy-test-rebuild: true + - workflowId: post_/api/index/v1/debug/{datasource}/document + steps: + - stepId: test + operationId: post_/api/index/v1/debug/{datasource}/document + parameters: + - name: datasource + in: path + value: + requestBody: + contentType: application/json + payload: + docId: art123 + objectType: Article + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"status":{"uploadStatus":"UPLOADED","lastUploadedAt":"2021-08-06T17:58:01.000Z","indexingStatus":"INDEXED","lastIndexedAt":"2021-08-06T17:58:01.000Z","permissionIdentityStatus":"UPLOADED"}} + type: simple + x-speakeasy-test-group: indexing_documents + x-speakeasy-test-rebuild: true + - workflowId: post_/api/index/v1/debug/{datasource}/documents + steps: + - stepId: test + operationId: post_/api/index/v1/debug/{datasource}/documents + parameters: + - name: datasource + in: path + value: + requestBody: + contentType: application/json + payload: + debugDocuments: [] + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"documentStatuses":[{"debugInfo":{"status":{"uploadStatus":"UPLOADED","lastUploadedAt":"2021-08-06T17:58:01.000Z","indexingStatus":"INDEXED","lastIndexedAt":"2021-08-06T17:58:01.000Z","permissionIdentityStatus":"UPLOADED"}}}]} + type: simple + x-speakeasy-test-group: indexing_documents + x-speakeasy-test-rebuild: true + - workflowId: post_/api/index/v1/debug/{datasource}/document/events + steps: + - stepId: test + operationId: post_/api/index/v1/debug/{datasource}/document/events + parameters: + - name: datasource + in: path + value: + requestBody: + contentType: application/json + payload: + docId: art123 + maxEvents: 50 + objectType: Article + startDate: "2025-05-01" + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"lifeCycleEvents":[{"event":"INDEXED","timestamp":"2021-08-06T17:58:01.000Z"}]} + type: simple + x-speakeasy-test-group: indexing_documents + x-speakeasy-test-rebuild: true + - workflowId: post_/api/index/v1/debug/{datasource}/user + steps: + - stepId: test + operationId: post_/api/index/v1/debug/{datasource}/user + parameters: + - name: datasource + in: path + value: + requestBody: + contentType: application/json + payload: + email: u1@foo.com + successCriteria: + - condition: $statusCode == 200 + - condition: $response.header.Content-Type == application/json + - context: $response.body + condition: | + {"status":{"isActiveUser":true,"uploadStatus":"UPLOADED","lastUploadedAt":"2021-08-06T17:58:01.000Z"}} + type: simple + x-speakeasy-test-group: people + x-speakeasy-test-rebuild: true diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 466397aa..c246f5a3 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.790.3 +speakeasyVersion: 1.791.4 sources: Glean API: sourceNamespace: glean-api-specs - sourceRevisionDigest: sha256:bb3bada7cfd1fef35eb00e096010fcd9238a6dde135ee387c782bba65dfa45fb - sourceBlobDigest: sha256:5552ea5e20187c775de44c60abbd112a31cf189b9486aafe2e303b5f71e76f0b + sourceRevisionDigest: sha256:4d19dfbc7913eabdd15138c6c4b9df5a80cd7eb3460ae2ff1af4cc065e76d9ef + sourceBlobDigest: sha256:721b9be4d93803929f0102ff8df294cbd094661ebeb8f464b5ec341365b76f74 tags: - latest Glean Client API: @@ -16,10 +16,10 @@ targets: glean: source: Glean API sourceNamespace: glean-api-specs - sourceRevisionDigest: sha256:bb3bada7cfd1fef35eb00e096010fcd9238a6dde135ee387c782bba65dfa45fb - sourceBlobDigest: sha256:5552ea5e20187c775de44c60abbd112a31cf189b9486aafe2e303b5f71e76f0b + sourceRevisionDigest: sha256:4d19dfbc7913eabdd15138c6c4b9df5a80cd7eb3460ae2ff1af4cc065e76d9ef + sourceBlobDigest: sha256:721b9be4d93803929f0102ff8df294cbd094661ebeb8f464b5ec341365b76f74 codeSamplesNamespace: glean-api-specs-python-code-samples - codeSamplesRevisionDigest: sha256:943570f36dd3410a28a56036049c09ace110d13bee2075f5f335acc143463cee + codeSamplesRevisionDigest: sha256:e5d1d9766ec89745925c3dbe5efd7b9f446bfe3737efa2332f5fd6931c986f28 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index b63a8978..c0b22c5e 100644 --- a/README.md +++ b/README.md @@ -321,6 +321,10 @@ For more information on obtaining the appropriate token type, please contact you * [get_schemas](docs/sdks/agents/README.md#get_schemas) - Get agent schemas * [create_run](docs/sdks/agents/README.md#create_run) - Create agent run +### [Chat](docs/sdks/chatsdk/README.md) + +* [create](docs/sdks/chatsdk/README.md#create) - Create a chat response + ### [Client.Activity](docs/sdks/clientactivity/README.md) * [report](docs/sdks/clientactivity/README.md#report) - Report document activity @@ -332,6 +336,7 @@ For more information on obtaining the appropriate token type, please contact you * [retrieve](docs/sdks/clientagents/README.md#retrieve) - Retrieve an agent * [update](docs/sdks/clientagents/README.md#update) - Edit an agent * [retrieve_schemas](docs/sdks/clientagents/README.md#retrieve_schemas) - List an agent's schemas +* [import_](docs/sdks/clientagents/README.md#import_) - Import an agent * [list](docs/sdks/clientagents/README.md#list) - Search agents * [run_stream](docs/sdks/clientagents/README.md#run_stream) - Create an agent run and stream the response * [run](docs/sdks/clientagents/README.md#run) - Create an agent run and wait for the response @@ -466,6 +471,7 @@ For more information on obtaining the appropriate token type, please contact you * [authorize_action_pack](docs/sdks/tools/README.md#authorize_action_pack) - Start the OAuth authorization flow for an action pack. * [retrieve_tool_server_auth_status](docs/sdks/tools/README.md#retrieve_tool_server_auth_status) - Get end-user authentication status for a tool server. * [authorize_tool_server](docs/sdks/tools/README.md#authorize_tool_server) - Start the OAuth authorization flow for a tool server. +* [get_tool_server_tools](docs/sdks/tools/README.md#get_tool_server_tools) - Get tool definitions from a tool server. ### [Client.Verification](docs/sdks/clientverification/README.md) @@ -549,12 +555,15 @@ For more information on obtaining the appropriate token type, please contact you ### [Search](docs/sdks/search/README.md) * [query](docs/sdks/search/README.md#query) - Search +* [list_filters](docs/sdks/search/README.md#list_filters) - List search filters ### [Skills](docs/sdks/skills/README.md) * [create](docs/sdks/skills/README.md#create) - Create skill * [list](docs/sdks/skills/README.md#list) - List skills * [validate](docs/sdks/skills/README.md#validate) - Validate skill bundle +* [preview_source](docs/sdks/skills/README.md#preview_source) - Preview a GitHub skill source +* [update](docs/sdks/skills/README.md#update) - Update skill * [retrieve](docs/sdks/skills/README.md#retrieve) - Retrieve skill * [retrieve_content](docs/sdks/skills/README.md#retrieve_content) - Download skill content * [create_version](docs/sdks/skills/README.md#create_version) - Create skill version diff --git a/RELEASES.md b/RELEASES.md index 67386a1f..36320d42 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -808,4 +808,14 @@ Based on: ### Generated - [python v0.15.4] . ### Releases -- [PyPI v0.15.4] https://pypi.org/project/glean-api-client/0.15.4 - . \ No newline at end of file +- [PyPI v0.15.4] https://pypi.org/project/glean-api-client/0.15.4 - . + +## 2026-08-06 02:36:25 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.791.4 (2.926.8) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.15.5] . +### Releases +- [PyPI v0.15.5] https://pypi.org/project/glean-api-client/0.15.5 - . \ No newline at end of file diff --git a/docs/errors/accessrequestpermissiondeniedresponseerror.md b/docs/errors/accessrequestpermissiondeniedresponseerror.md new file mode 100644 index 00000000..05736270 --- /dev/null +++ b/docs/errors/accessrequestpermissiondeniedresponseerror.md @@ -0,0 +1,11 @@ +# AccessRequestPermissionDeniedResponseError + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `error_type` | [models.AccessRequestPermissionDeniedResponseErrorType](../models/accessrequestpermissiondeniedresponseerrortype.md) | :heavy_check_mark: | N/A | | +| `created_by` | [models.Person](../models/person.md) | :heavy_check_mark: | N/A | {
"name": "George Clooney",
"obfuscatedId": "abc123"
} | +| `requestable_roles` | List[[models.UserRole](../models/userrole.md)] | :heavy_check_mark: | N/A | | +| `has_pending_request` | *bool* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/errors/platformunauthorizedagenttoolsproblemerror.md b/docs/errors/platformunauthorizedagenttoolsproblemerror.md new file mode 100644 index 00000000..38c45b09 --- /dev/null +++ b/docs/errors/platformunauthorizedagenttoolsproblemerror.md @@ -0,0 +1,18 @@ +# PlatformUnauthorizedAgentToolsProblemError + +Problem detail extended with `authentication_suggestions` naming each tool the caller must authorize. + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `type` | *str* | :heavy_check_mark: | URI identifying the error type. | https://developers.glean.com/errors/invalid-cursor | +| `title` | *str* | :heavy_check_mark: | Short, human-readable summary of the error. | Invalid Pagination Cursor | +| `status` | *int* | :heavy_check_mark: | HTTP status code mirrored from the response. | 400 | +| `detail` | *str* | :heavy_check_mark: | Human-readable explanation specific to this occurrence. | The provided cursor has expired. Start a new search to get a fresh cursor.
| +| `code` | [models.PlatformProblemDetailCode](../models/platformproblemdetailcode.md) | :heavy_check_mark: | Stable machine-readable error code. | invalid_cursor | +| `documentation_url` | *Optional[str]* | :heavy_minus_sign: | Direct URL to documentation for this error code. | https://developers.glean.com/errors/invalid-cursor | +| `request_id` | *str* | :heavy_check_mark: | Platform-generated request ID for support correlation. | req_7f8a9b0c1d2e | +| `errors` | List[[models.PlatformProblemDetailError](../models/platformproblemdetailerror.md)] | :heavy_minus_sign: | Field-level validation problems, one entry per offending field. | | +| `authentication_suggestions` | List[[models.PlatformAuthenticationSuggestion](../models/platformauthenticationsuggestion.md)] | :heavy_check_mark: | One entry per tool the caller must authorize. | | \ No newline at end of file diff --git a/docs/errors/unauthorizedagenttoolserror.md b/docs/errors/unauthorizedagenttoolserror.md new file mode 100644 index 00000000..38819b2d --- /dev/null +++ b/docs/errors/unauthorizedagenttoolserror.md @@ -0,0 +1,11 @@ +# UnauthorizedAgentToolsError + +Returned when the agent has tools the caller must authorize before the run can start. Each entry in `authenticationSuggestions` names one such tool; POST its `serverId` to `/tool-servers/{serverId}/auth` with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to, then retry the run once OAuth completes. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `message` | *str* | :heavy_check_mark: | Human-readable description of the failure. | +| `authentication_suggestions` | List[[models.ServerToolRequest](../models/servertoolrequest.md)] | :heavy_check_mark: | One entry per tool the caller must authorize. | \ No newline at end of file diff --git a/docs/models/accessrequestpermissiondeniedresponseerrortype.md b/docs/models/accessrequestpermissiondeniedresponseerrortype.md new file mode 100644 index 00000000..2c42a604 --- /dev/null +++ b/docs/models/accessrequestpermissiondeniedresponseerrortype.md @@ -0,0 +1,16 @@ +# AccessRequestPermissionDeniedResponseErrorType + +## Example Usage + +```python +from glean.api_client.models import AccessRequestPermissionDeniedResponseErrorType + +value = AccessRequestPermissionDeniedResponseErrorType.PERMISSION_DENIED +``` + + +## Values + +| Name | Value | +| ------------------- | ------------------- | +| `PERMISSION_DENIED` | PERMISSION_DENIED | \ No newline at end of file diff --git a/docs/models/authconfig.md b/docs/models/authconfig.md index e28f8770..deafc0ea 100644 --- a/docs/models/authconfig.md +++ b/docs/models/authconfig.md @@ -5,17 +5,18 @@ Config for tool's authentication method. ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `is_on_prem` | *Optional[bool]* | :heavy_minus_sign: | Whether or not this tool is hosted on-premise. | -| `uses_central_auth` | *Optional[bool]* | :heavy_minus_sign: | Whether or not this uses central auth. | -| `type` | [Optional[models.AuthConfigType]](../models/authconfigtype.md) | :heavy_minus_sign: | The type of authentication being used.
Use 'OAUTH_*' when Glean calls an external API (e.g., Jira) on behalf of a user to obtain an OAuth token.
'OAUTH_ADMIN' utilizes an admin token for external API calls on behalf all users.
'OAUTH_USER' uses individual user tokens for external API calls.
'DWD' refers to domain wide delegation.
| -| `grant_type` | [Optional[models.GrantType]](../models/granttype.md) | :heavy_minus_sign: | The type of grant type being used. | -| `status` | [Optional[models.AuthConfigStatus]](../models/authconfigstatus.md) | :heavy_minus_sign: | Auth status of the tool. | -| `client_url` | *Optional[str]* | :heavy_minus_sign: | The URL where users will be directed to start the OAuth flow. | -| `scopes` | List[*str*] | :heavy_minus_sign: | A list of strings denoting the different scopes or access levels required by the tool. | -| `audiences` | List[*str*] | :heavy_minus_sign: | A list of strings denoting the different audience which can access the tool. | -| `authorization_url` | *Optional[str]* | :heavy_minus_sign: | The OAuth provider's endpoint, where access tokens are requested. | -| `resource` | *Optional[str]* | :heavy_minus_sign: | The OAuth 2.0 Resource Indicator (RFC 8707) for the protected resource. Discovered from Protected Resource Metadata (RFC 9728) during DCR. Included in authorization and token exchange requests when present. | -| `token_endpoint_auth_method` | [Optional[models.TokenEndpointAuthMethod]](../models/tokenendpointauthmethod.md) | :heavy_minus_sign: | The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. client_secret_post sends credentials as form fields, client_secret_basic sends them via Authorization header, none omits client secret and relies on PKCE only. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). | -| `last_authorized_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | The time the tool was last authorized in ISO format (ISO 8601). | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `is_on_prem` | *Optional[bool]* | :heavy_minus_sign: | Whether or not this tool is hosted on-premise. | +| `uses_central_auth` | *Optional[bool]* | :heavy_minus_sign: | Whether or not this uses central auth. | +| `type` | [Optional[models.AuthConfigType]](../models/authconfigtype.md) | :heavy_minus_sign: | The type of authentication being used.
Use 'OAUTH_*' when Glean calls an external API (e.g., Jira) on behalf of a user to obtain an OAuth token.
'OAUTH_ADMIN' utilizes an admin token for external API calls on behalf all users.
'OAUTH_USER' uses individual user tokens for external API calls.
'DWD' refers to domain wide delegation.
| +| `grant_type` | [Optional[models.GrantType]](../models/granttype.md) | :heavy_minus_sign: | The type of grant type being used. | +| `status` | [Optional[models.AuthConfigStatus]](../models/authconfigstatus.md) | :heavy_minus_sign: | Auth status of the tool. | +| `client_url` | *Optional[str]* | :heavy_minus_sign: | The URL where users will be directed to start the OAuth flow. | +| `scopes` | List[*str*] | :heavy_minus_sign: | A list of strings denoting the different scopes or access levels required by the tool. | +| `audiences` | List[*str*] | :heavy_minus_sign: | A list of strings denoting the different audience which can access the tool. | +| `authorization_url` | *Optional[str]* | :heavy_minus_sign: | The OAuth provider's endpoint, where access tokens are requested. | +| `resource` | *Optional[str]* | :heavy_minus_sign: | The OAuth 2.0 Resource Indicator (RFC 8707) for the protected resource. Discovered from Protected Resource Metadata (RFC 9728) during DCR. Included in authorization and token exchange requests when present. | +| `token_endpoint_auth_method` | [Optional[models.TokenEndpointAuthMethod]](../models/tokenendpointauthmethod.md) | :heavy_minus_sign: | The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). | +| `auth_header_type` | [Optional[models.AuthHeaderType]](../models/authheadertype.md) | :heavy_minus_sign: | Defines the header structure for sending the API key or token to the server. Defaults to AUTHORIZATION_BEARER. Select the specific header format the server expects for transmitting the key. | +| `last_authorized_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | The time the tool was last authorized in ISO format (ISO 8601). | \ No newline at end of file diff --git a/docs/models/authheadertype.md b/docs/models/authheadertype.md new file mode 100644 index 00000000..8a6b33fa --- /dev/null +++ b/docs/models/authheadertype.md @@ -0,0 +1,23 @@ +# AuthHeaderType + +Defines the header structure for sending the API key or token to the server. Defaults to AUTHORIZATION_BEARER. Select the specific header format the server expects for transmitting the key. + +## Example Usage + +```python +from glean.api_client.models import AuthHeaderType + +value = AuthHeaderType.AUTHORIZATION_BEARER + +# Open enum: unrecognized values are captured as UnrecognizedStr +``` + + +## Values + +| Name | Value | +| ----------------------- | ----------------------- | +| `AUTHORIZATION_BEARER` | AUTHORIZATION_BEARER | +| `AUTHORIZATION_TOKEN` | AUTHORIZATION_TOKEN | +| `AUTHORIZATION_API_KEY` | AUTHORIZATION_API_KEY | +| `X_API_KEY` | X_API_KEY | \ No newline at end of file diff --git a/docs/models/bundle.md b/docs/models/bundle.md new file mode 100644 index 00000000..be383178 --- /dev/null +++ b/docs/models/bundle.md @@ -0,0 +1,10 @@ +# Bundle + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `file_name` | *str* | :heavy_check_mark: | N/A | +| `content` | *Union[bytes, IO[bytes], io.IOBase]* | :heavy_check_mark: | N/A | +| `content_type` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/datasourcecategory.md b/docs/models/datasourcecategory.md index eccdbdeb..c7a5d3c3 100644 --- a/docs/models/datasourcecategory.md +++ b/docs/models/datasourcecategory.md @@ -34,4 +34,6 @@ value = DatasourceCategory.UNCATEGORIZED | `EXTERNAL_SHORTCUT` | EXTERNAL_SHORTCUT | | `ENTITY` | ENTITY | | `CALENDAR` | CALENDAR | -| `AGENTS` | AGENTS | \ No newline at end of file +| `AGENTS` | AGENTS | +| `AI_CONVERSATION` | AI_CONVERSATION | +| `AI_ARTIFACT` | AI_ARTIFACT | \ No newline at end of file diff --git a/docs/models/doccategory.md b/docs/models/doccategory.md index 3560e894..0e883592 100644 --- a/docs/models/doccategory.md +++ b/docs/models/doccategory.md @@ -34,4 +34,6 @@ value = DocCategory.UNCATEGORIZED | `EXTERNAL_SHORTCUT` | EXTERNAL_SHORTCUT | | `ENTITY` | ENTITY | | `CALENDAR` | CALENDAR | -| `AGENTS` | AGENTS | \ No newline at end of file +| `AGENTS` | AGENTS | +| `AI_CONVERSATION` | AI_CONVERSATION | +| `AI_ARTIFACT` | AI_ARTIFACT | \ No newline at end of file diff --git a/docs/models/feedrequestcategory.md b/docs/models/feedrequestcategory.md index c3cd02f1..c3eab96e 100644 --- a/docs/models/feedrequestcategory.md +++ b/docs/models/feedrequestcategory.md @@ -43,6 +43,7 @@ value = FeedRequestCategory.DOCUMENT_SUGGESTION | `PLAN_MY_DAY` | PLAN_MY_DAY | | `END_MY_DAY` | END_MY_DAY | | `STARTER_KIT` | STARTER_KIT | +| `MEETING_PREP_AUTOMATION` | MEETING_PREP_AUTOMATION | | `MID_DAY_CATCH_UP` | MID_DAY_CATCH_UP | | `QUERY_SUGGESTION` | QUERY_SUGGESTION | | `COWORK_CUJ_PROMO` | COWORK_CUJ_PROMO | diff --git a/docs/models/feedresultcategory.md b/docs/models/feedresultcategory.md index 1e183ef4..c27f4b3b 100644 --- a/docs/models/feedresultcategory.md +++ b/docs/models/feedresultcategory.md @@ -47,6 +47,7 @@ value = FeedResultCategory.DOCUMENT_SUGGESTION | `PLAN_MY_DAY` | PLAN_MY_DAY | | `END_MY_DAY` | END_MY_DAY | | `STARTER_KIT` | STARTER_KIT | +| `MEETING_PREP_AUTOMATION` | MEETING_PREP_AUTOMATION | | `MID_DAY_CATCH_UP` | MID_DAY_CATCH_UP | | `QUERY_SUGGESTION` | QUERY_SUGGESTION | | `COWORK_CUJ_PROMO` | COWORK_CUJ_PROMO | diff --git a/docs/models/gettoolservertoolsrequest.md b/docs/models/gettoolservertoolsrequest.md new file mode 100644 index 00000000..2de10562 --- /dev/null +++ b/docs/models/gettoolservertoolsrequest.md @@ -0,0 +1,9 @@ +# GetToolServerToolsRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `server_id` | *str* | :heavy_check_mark: | Unique identifier of the tool server. | +| `tool_names` | List[*str*] | :heavy_check_mark: | Tool names to look up on this server. Maximum 100. | \ No newline at end of file diff --git a/docs/models/importagentrequest.md b/docs/models/importagentrequest.md new file mode 100644 index 00000000..d9f9e2a4 --- /dev/null +++ b/docs/models/importagentrequest.md @@ -0,0 +1,13 @@ +# ImportAgentRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `bundle` | [models.Bundle](../models/bundle.md) | :heavy_check_mark: | Zip of the agent folder (spec.yaml, instructions.md, skills/, subagents/) with symlinks dereferenced.
| +| `git_commit_sha` | *Optional[str]* | :heavy_minus_sign: | Optional Git commit SHA to associate with this import. | +| `git_author_id` | *Optional[str]* | :heavy_minus_sign: | Optional VCS commit author ID to associate with this import. | +| `commit_message` | *Optional[str]* | :heavy_minus_sign: | Optional commit message for the imported version. | +| `sync_mode` | [Optional[models.ImportAgentSyncMode]](../models/importagentsyncmode.md) | :heavy_minus_sign: | Whether the imported version is staged (saved without updating the live version) or published directly to the live version.
| +| `is_draft` | *Optional[bool]* | :heavy_minus_sign: | When true, validates and stores a draft preview without publishing (used for PR preview links). Takes precedence over `syncMode`: when `isDraft` is true, `syncMode` is ignored.
| \ No newline at end of file diff --git a/docs/models/importagentrequestrequest.md b/docs/models/importagentrequestrequest.md new file mode 100644 index 00000000..1eae6787 --- /dev/null +++ b/docs/models/importagentrequestrequest.md @@ -0,0 +1,11 @@ +# ImportAgentRequestRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `locale` | *Optional[str]* | :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`. | +| `timezone_offset` | *Optional[int]* | :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. | +| `agent_id` | *str* | :heavy_check_mark: | The ID of the agent to create or update. | +| `import_agent_request` | [models.ImportAgentRequest](../models/importagentrequest.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/importagentresponse.md b/docs/models/importagentresponse.md new file mode 100644 index 00000000..5b5e9322 --- /dev/null +++ b/docs/models/importagentresponse.md @@ -0,0 +1,9 @@ +# ImportAgentResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `workflow_result` | [Optional[models.WorkflowResult]](../models/workflowresult.md) | :heavy_minus_sign: | N/A | +| `status` | [Optional[models.ImportAgentStatus]](../models/importagentstatus.md) | :heavy_minus_sign: | Outcome of the import for the target agent. | \ No newline at end of file diff --git a/docs/models/importagentstatus.md b/docs/models/importagentstatus.md new file mode 100644 index 00000000..2b83dfea --- /dev/null +++ b/docs/models/importagentstatus.md @@ -0,0 +1,22 @@ +# ImportAgentStatus + +Outcome of the import for the target agent. + +## Example Usage + +```python +from glean.api_client.models import ImportAgentStatus + +value = ImportAgentStatus.CREATED + +# Open enum: unrecognized values are captured as UnrecognizedStr +``` + + +## Values + +| Name | Value | +| --------------- | --------------- | +| `CREATED` | CREATED | +| `UPDATED` | UPDATED | +| `DRAFT_PREVIEW` | DRAFT_PREVIEW | \ No newline at end of file diff --git a/docs/models/importagentsyncmode.md b/docs/models/importagentsyncmode.md new file mode 100644 index 00000000..c0af50c5 --- /dev/null +++ b/docs/models/importagentsyncmode.md @@ -0,0 +1,20 @@ +# ImportAgentSyncMode + +Whether the imported version is staged (saved without updating the live version) or published directly to the live version. + + +## Example Usage + +```python +from glean.api_client.models import ImportAgentSyncMode + +value = ImportAgentSyncMode.STAGED +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `STAGED` | STAGED | +| `PUBLISHED` | PUBLISHED | \ No newline at end of file diff --git a/docs/models/input.md b/docs/models/input.md new file mode 100644 index 00000000..3df08308 --- /dev/null +++ b/docs/models/input.md @@ -0,0 +1,20 @@ +# Input + +Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + + + +## Supported Types + +### `str` + +```python +value: str = /* values here */ +``` + +### `List[models.PlatformChatInputMessage]` + +```python +value: List[models.PlatformChatInputMessage] = /* values here */ +``` + diff --git a/docs/models/issue.md b/docs/models/issue.md index 42033090..647f9bb6 100644 --- a/docs/models/issue.md +++ b/docs/models/issue.md @@ -27,4 +27,6 @@ value = Issue.AGENT_CANVAS_FAILED | `RESULT_SHOULD_NOT_APPEAR` | RESULT_SHOULD_NOT_APPEAR | | `RESULTS_HELPFUL` | RESULTS_HELPFUL | | `RESULTS_POOR_ORDER` | RESULTS_POOR_ORDER | -| `TOO_MUCH_ONE_KIND` | TOO_MUCH_ONE_KIND | \ No newline at end of file +| `TOO_MUCH_ONE_KIND` | TOO_MUCH_ONE_KIND | +| `NOT_A_QUESTION` | NOT_A_QUESTION | +| `UNSURE_IF_CORRECT` | UNSURE_IF_CORRECT | \ No newline at end of file diff --git a/docs/models/justificationtype.md b/docs/models/justificationtype.md index ebf3754e..cff9e6dd 100644 --- a/docs/models/justificationtype.md +++ b/docs/models/justificationtype.md @@ -59,6 +59,7 @@ value = JustificationType.FREQUENTLY_ACCESSED | `STARTER_KIT_ORG_CHART` | STARTER_KIT_ORG_CHART | | `STARTER_KIT_ADD_DOC` | STARTER_KIT_ADD_DOC | | `MEETING_RECAP` | MEETING_RECAP | +| `MEETING_PREP_AUTOMATION` | MEETING_PREP_AUTOMATION | | `ACTIVE_DISCUSSION` | ACTIVE_DISCUSSION | | `MID_DAY_CATCH_UP` | MID_DAY_CATCH_UP | | `QUERY_SUGGESTION` | QUERY_SUGGESTION | diff --git a/docs/models/object.md b/docs/models/object.md new file mode 100644 index 00000000..fedbfbb5 --- /dev/null +++ b/docs/models/object.md @@ -0,0 +1,16 @@ +# Object + +## Example Usage + +```python +from glean.api_client.models import Object + +value = Object.RESPONSE +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `RESPONSE` | response | \ No newline at end of file diff --git a/docs/models/personmetadata.md b/docs/models/personmetadata.md index 3bf2f124..6bfd50db 100644 --- a/docs/models/personmetadata.md +++ b/docs/models/personmetadata.md @@ -11,6 +11,7 @@ | `title` | *Optional[str]* | :heavy_minus_sign: | Job title. | | | `business_unit` | *Optional[str]* | :heavy_minus_sign: | Typically the highest level organizational unit; generally applies to bigger companies with multiple distinct businesses. | | | `department` | *Optional[str]* | :heavy_minus_sign: | An organizational unit where everyone has a similar task, e.g. `Engineering`. | | +| `job_function` | *Optional[str]* | :heavy_minus_sign: | Normalized job-function category assigned by Entity Builder from the source department and, when available, job title. Unlike `department`, which preserves the company-specific organizational unit, this field groups departments into configured categories such as `Engineering`, `Sales`, or `IT`; it may be `Unknown` when the mapping is inconclusive. | | | `teams` | List[[models.PersonTeam](../models/personteam.md)] | :heavy_minus_sign: | Info about the employee's team(s). | | | `department_count` | *Optional[int]* | :heavy_minus_sign: | The number of people in this person's department. | | | `email` | *Optional[str]* | :heavy_minus_sign: | The user's primary email address | | diff --git a/docs/models/platformauthenticationsuggestion.md b/docs/models/platformauthenticationsuggestion.md new file mode 100644 index 00000000..02de0e92 --- /dev/null +++ b/docs/models/platformauthenticationsuggestion.md @@ -0,0 +1,11 @@ +# PlatformAuthenticationSuggestion + +One tool the caller must authorize before the agent can run. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tool_name` | *Optional[str]* | :heavy_minus_sign: | Human-readable tool name. | +| `server_id` | *str* | :heavy_check_mark: | Identifier to POST to `/tool-servers/{serverId}/auth` (Client API) with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to. | \ No newline at end of file diff --git a/docs/models/platformchatcitationannotation.md b/docs/models/platformchatcitationannotation.md new file mode 100644 index 00000000..e15e66b2 --- /dev/null +++ b/docs/models/platformchatcitationannotation.md @@ -0,0 +1,12 @@ +# PlatformChatCitationAnnotation + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `type` | [models.PlatformChatCitationAnnotationType](../models/platformchatcitationannotationtype.md) | :heavy_check_mark: | N/A | +| `sources` | List[[models.PlatformChatCitationSource](../models/platformchatcitationsource.md)] | :heavy_check_mark: | N/A | +| `start_index` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | +| `end_index` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | +| `snippets` | List[[models.PlatformChatCitationSnippet](../models/platformchatcitationsnippet.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatcitationannotationtype.md b/docs/models/platformchatcitationannotationtype.md new file mode 100644 index 00000000..e3bd53ef --- /dev/null +++ b/docs/models/platformchatcitationannotationtype.md @@ -0,0 +1,16 @@ +# PlatformChatCitationAnnotationType + +## Example Usage + +```python +from glean.api_client.models import PlatformChatCitationAnnotationType + +value = PlatformChatCitationAnnotationType.CITATION +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `CITATION` | citation | \ No newline at end of file diff --git a/docs/models/platformchatcitationsnippet.md b/docs/models/platformchatcitationsnippet.md new file mode 100644 index 00000000..f4dcb28c --- /dev/null +++ b/docs/models/platformchatcitationsnippet.md @@ -0,0 +1,9 @@ +# PlatformChatCitationSnippet + + +## Fields + +| Field | Type | Required | Description | +| ----------------------- | ----------------------- | ----------------------- | ----------------------- | +| `text` | *str* | :heavy_check_mark: | N/A | +| `page_number` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatcitationsource.md b/docs/models/platformchatcitationsource.md new file mode 100644 index 00000000..bb688733 --- /dev/null +++ b/docs/models/platformchatcitationsource.md @@ -0,0 +1,31 @@ +# PlatformChatCitationSource + +Four-variant citation source union. + + +## Supported Types + +### `models.PlatformChatDocumentSource` + +```python +value: models.PlatformChatDocumentSource = /* values here */ +``` + +### `models.PlatformChatPersonSource` + +```python +value: models.PlatformChatPersonSource = /* values here */ +``` + +### `models.PlatformChatFileSource` + +```python +value: models.PlatformChatFileSource = /* values here */ +``` + +### `models.PlatformChatCustomEntitySource` + +```python +value: models.PlatformChatCustomEntitySource = /* values here */ +``` + diff --git a/docs/models/platformchatcompletedresponse.md b/docs/models/platformchatcompletedresponse.md new file mode 100644 index 00000000..34af8ff1 --- /dev/null +++ b/docs/models/platformchatcompletedresponse.md @@ -0,0 +1,15 @@ +# PlatformChatCompletedResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | Platform-owned, non-persisted response envelope identifier in `resp_` form. The same identifier is used for every event in one streamed response.
| +| `object` | [models.Object](../models/object.md) | :heavy_check_mark: | N/A | +| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | RFC 3339 UTC timestamp when the response was created. | +| `status` | [models.PlatformChatCompletedResponseStatus](../models/platformchatcompletedresponsestatus.md) | :heavy_check_mark: | N/A | +| `output` | List[[models.PlatformChatOutputMessage](../models/platformchatoutputmessage.md)] | :heavy_check_mark: | N/A | +| `store` | *bool* | :heavy_check_mark: | N/A | +| `conversation_id` | *OptionalNullable[str]* | :heavy_minus_sign: | Present when the interaction was persisted. | +| `request_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatcompletedresponsestatus.md b/docs/models/platformchatcompletedresponsestatus.md new file mode 100644 index 00000000..904a9c8a --- /dev/null +++ b/docs/models/platformchatcompletedresponsestatus.md @@ -0,0 +1,16 @@ +# PlatformChatCompletedResponseStatus + +## Example Usage + +```python +from glean.api_client.models import PlatformChatCompletedResponseStatus + +value = PlatformChatCompletedResponseStatus.COMPLETED +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `COMPLETED` | completed | \ No newline at end of file diff --git a/docs/models/platformchatcreaterequest.md b/docs/models/platformchatcreaterequest.md new file mode 100644 index 00000000..6b00a961 --- /dev/null +++ b/docs/models/platformchatcreaterequest.md @@ -0,0 +1,11 @@ +# PlatformChatCreateRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `input` | [models.Input](../models/input.md) | :heavy_check_mark: | Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`.
| +| `stream` | *Optional[bool]* | :heavy_minus_sign: | When true, respond with `text/event-stream`. When false or omitted, respond with `application/json`.
| +| `store` | *Optional[bool]* | :heavy_minus_sign: | When true (default), persist the interaction and return a `conversation_id`. When false, run ephemerally with no persistence.
| +| `conversation_id` | *Optional[str]* | :heavy_minus_sign: | Continue an existing stored conversation. Incompatible with message-array `input` and with `store: false`.
| \ No newline at end of file diff --git a/docs/models/platformchatcreateresponse.md b/docs/models/platformchatcreateresponse.md new file mode 100644 index 00000000..8cf9edc1 --- /dev/null +++ b/docs/models/platformchatcreateresponse.md @@ -0,0 +1,17 @@ +# PlatformChatCreateResponse + + +## Supported Types + +### `models.PlatformChatCompletedResponse` + +```python +value: models.PlatformChatCompletedResponse = /* values here */ +``` + +### `str` + +```python +value: str = /* values here */ +``` + diff --git a/docs/models/platformchatcustomentitysource.md b/docs/models/platformchatcustomentitysource.md new file mode 100644 index 00000000..86313700 --- /dev/null +++ b/docs/models/platformchatcustomentitysource.md @@ -0,0 +1,13 @@ +# PlatformChatCustomEntitySource + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `type` | [models.PlatformChatCustomEntitySourceType](../models/platformchatcustomentitysourcetype.md) | :heavy_check_mark: | N/A | +| `entity_id` | *str* | :heavy_check_mark: | N/A | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `url` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `datasource` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatcustomentitysourcetype.md b/docs/models/platformchatcustomentitysourcetype.md new file mode 100644 index 00000000..67daadbc --- /dev/null +++ b/docs/models/platformchatcustomentitysourcetype.md @@ -0,0 +1,16 @@ +# PlatformChatCustomEntitySourceType + +## Example Usage + +```python +from glean.api_client.models import PlatformChatCustomEntitySourceType + +value = PlatformChatCustomEntitySourceType.CUSTOM_ENTITY +``` + + +## Values + +| Name | Value | +| --------------- | --------------- | +| `CUSTOM_ENTITY` | custom_entity | \ No newline at end of file diff --git a/docs/models/platformchatdocumentsource.md b/docs/models/platformchatdocumentsource.md new file mode 100644 index 00000000..a8bd094e --- /dev/null +++ b/docs/models/platformchatdocumentsource.md @@ -0,0 +1,17 @@ +# PlatformChatDocumentSource + + +## Supported Types + +### `models.PlatformChatDocumentSourceDocument1` + +```python +value: models.PlatformChatDocumentSourceDocument1 = /* values here */ +``` + +### `models.PlatformChatDocumentSourceDocument2` + +```python +value: models.PlatformChatDocumentSourceDocument2 = /* values here */ +``` + diff --git a/docs/models/platformchatdocumentsourcedocument1.md b/docs/models/platformchatdocumentsourcedocument1.md new file mode 100644 index 00000000..2b388ba9 --- /dev/null +++ b/docs/models/platformchatdocumentsourcedocument1.md @@ -0,0 +1,12 @@ +# PlatformChatDocumentSourceDocument1 + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `type` | [models.PlatformChatDocumentSourceType1](../models/platformchatdocumentsourcetype1.md) | :heavy_check_mark: | N/A | +| `document_id` | *str* | :heavy_check_mark: | N/A | +| `url` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `datasource` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatdocumentsourcedocument2.md b/docs/models/platformchatdocumentsourcedocument2.md new file mode 100644 index 00000000..1b8f64e4 --- /dev/null +++ b/docs/models/platformchatdocumentsourcedocument2.md @@ -0,0 +1,12 @@ +# PlatformChatDocumentSourceDocument2 + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `type` | [models.PlatformChatDocumentSourceType2](../models/platformchatdocumentsourcetype2.md) | :heavy_check_mark: | N/A | +| `document_id` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `url` | *str* | :heavy_check_mark: | N/A | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `datasource` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatdocumentsourcetype1.md b/docs/models/platformchatdocumentsourcetype1.md new file mode 100644 index 00000000..60cb54d7 --- /dev/null +++ b/docs/models/platformchatdocumentsourcetype1.md @@ -0,0 +1,16 @@ +# PlatformChatDocumentSourceType1 + +## Example Usage + +```python +from glean.api_client.models import PlatformChatDocumentSourceType1 + +value = PlatformChatDocumentSourceType1.DOCUMENT +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `DOCUMENT` | document | \ No newline at end of file diff --git a/docs/models/platformchatdocumentsourcetype2.md b/docs/models/platformchatdocumentsourcetype2.md new file mode 100644 index 00000000..1fd23049 --- /dev/null +++ b/docs/models/platformchatdocumentsourcetype2.md @@ -0,0 +1,16 @@ +# PlatformChatDocumentSourceType2 + +## Example Usage + +```python +from glean.api_client.models import PlatformChatDocumentSourceType2 + +value = PlatformChatDocumentSourceType2.DOCUMENT +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `DOCUMENT` | document | \ No newline at end of file diff --git a/docs/models/platformchatfilesource.md b/docs/models/platformchatfilesource.md new file mode 100644 index 00000000..f18a6c67 --- /dev/null +++ b/docs/models/platformchatfilesource.md @@ -0,0 +1,12 @@ +# PlatformChatFileSource + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `type` | [models.PlatformChatFileSourceType](../models/platformchatfilesourcetype.md) | :heavy_check_mark: | N/A | +| `file_id` | *str* | :heavy_check_mark: | N/A | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `url` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `datasource` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatfilesourcetype.md b/docs/models/platformchatfilesourcetype.md new file mode 100644 index 00000000..156db8e2 --- /dev/null +++ b/docs/models/platformchatfilesourcetype.md @@ -0,0 +1,16 @@ +# PlatformChatFileSourceType + +## Example Usage + +```python +from glean.api_client.models import PlatformChatFileSourceType + +value = PlatformChatFileSourceType.FILE +``` + + +## Values + +| Name | Value | +| ------ | ------ | +| `FILE` | file | \ No newline at end of file diff --git a/docs/models/platformchatinputmessage.md b/docs/models/platformchatinputmessage.md new file mode 100644 index 00000000..d69e40b0 --- /dev/null +++ b/docs/models/platformchatinputmessage.md @@ -0,0 +1,9 @@ +# PlatformChatInputMessage + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `role` | [models.PlatformChatInputMessageRole](../models/platformchatinputmessagerole.md) | :heavy_check_mark: | N/A | +| `content` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatinputmessagerole.md b/docs/models/platformchatinputmessagerole.md new file mode 100644 index 00000000..b756fc95 --- /dev/null +++ b/docs/models/platformchatinputmessagerole.md @@ -0,0 +1,17 @@ +# PlatformChatInputMessageRole + +## Example Usage + +```python +from glean.api_client.models import PlatformChatInputMessageRole + +value = PlatformChatInputMessageRole.USER +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `USER` | user | +| `ASSISTANT` | assistant | \ No newline at end of file diff --git a/docs/models/platformchatoutputmessage.md b/docs/models/platformchatoutputmessage.md new file mode 100644 index 00000000..a931e573 --- /dev/null +++ b/docs/models/platformchatoutputmessage.md @@ -0,0 +1,10 @@ +# PlatformChatOutputMessage + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `type` | [models.PlatformChatOutputMessageType](../models/platformchatoutputmessagetype.md) | :heavy_check_mark: | N/A | +| `role` | [models.PlatformChatOutputMessageRole](../models/platformchatoutputmessagerole.md) | :heavy_check_mark: | N/A | +| `content` | List[[models.PlatformChatOutputTextContent](../models/platformchatoutputtextcontent.md)] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatoutputmessagerole.md b/docs/models/platformchatoutputmessagerole.md new file mode 100644 index 00000000..7f8dc494 --- /dev/null +++ b/docs/models/platformchatoutputmessagerole.md @@ -0,0 +1,16 @@ +# PlatformChatOutputMessageRole + +## Example Usage + +```python +from glean.api_client.models import PlatformChatOutputMessageRole + +value = PlatformChatOutputMessageRole.ASSISTANT +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `ASSISTANT` | assistant | \ No newline at end of file diff --git a/docs/models/platformchatoutputmessagetype.md b/docs/models/platformchatoutputmessagetype.md new file mode 100644 index 00000000..8e2d0020 --- /dev/null +++ b/docs/models/platformchatoutputmessagetype.md @@ -0,0 +1,16 @@ +# PlatformChatOutputMessageType + +## Example Usage + +```python +from glean.api_client.models import PlatformChatOutputMessageType + +value = PlatformChatOutputMessageType.MESSAGE +``` + + +## Values + +| Name | Value | +| --------- | --------- | +| `MESSAGE` | message | \ No newline at end of file diff --git a/docs/models/platformchatoutputtextcontent.md b/docs/models/platformchatoutputtextcontent.md new file mode 100644 index 00000000..1ea074b5 --- /dev/null +++ b/docs/models/platformchatoutputtextcontent.md @@ -0,0 +1,10 @@ +# PlatformChatOutputTextContent + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `type` | [models.PlatformChatOutputTextContentType](../models/platformchatoutputtextcontenttype.md) | :heavy_check_mark: | N/A | +| `text` | *str* | :heavy_check_mark: | N/A | +| `annotations` | List[[models.PlatformChatCitationAnnotation](../models/platformchatcitationannotation.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatoutputtextcontenttype.md b/docs/models/platformchatoutputtextcontenttype.md new file mode 100644 index 00000000..05886daa --- /dev/null +++ b/docs/models/platformchatoutputtextcontenttype.md @@ -0,0 +1,16 @@ +# PlatformChatOutputTextContentType + +## Example Usage + +```python +from glean.api_client.models import PlatformChatOutputTextContentType + +value = PlatformChatOutputTextContentType.OUTPUT_TEXT +``` + + +## Values + +| Name | Value | +| ------------- | ------------- | +| `OUTPUT_TEXT` | output_text | \ No newline at end of file diff --git a/docs/models/platformchatpersonsource.md b/docs/models/platformchatpersonsource.md new file mode 100644 index 00000000..c42d99e3 --- /dev/null +++ b/docs/models/platformchatpersonsource.md @@ -0,0 +1,11 @@ +# PlatformChatPersonSource + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `type` | [models.PlatformChatPersonSourceType](../models/platformchatpersonsourcetype.md) | :heavy_check_mark: | N/A | +| `person_id` | *str* | :heavy_check_mark: | N/A | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `url` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/platformchatpersonsourcetype.md b/docs/models/platformchatpersonsourcetype.md new file mode 100644 index 00000000..3c36b121 --- /dev/null +++ b/docs/models/platformchatpersonsourcetype.md @@ -0,0 +1,16 @@ +# PlatformChatPersonSourceType + +## Example Usage + +```python +from glean.api_client.models import PlatformChatPersonSourceType + +value = PlatformChatPersonSourceType.PERSON +``` + + +## Values + +| Name | Value | +| -------- | -------- | +| `PERSON` | person | \ No newline at end of file diff --git a/docs/models/platformdatasourcefilterinfo.md b/docs/models/platformdatasourcefilterinfo.md new file mode 100644 index 00000000..8119fc5d --- /dev/null +++ b/docs/models/platformdatasourcefilterinfo.md @@ -0,0 +1,9 @@ +# PlatformDatasourceFilterInfo + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `datasource` | *str* | :heavy_check_mark: | Datasource identifier usable in `POST /api/search` `datasources`.
| jira | +| `filters` | List[[models.PlatformFilterFieldInfo](../models/platformfilterfieldinfo.md)] | :heavy_check_mark: | Common built-in filter fields for this datasource. May be empty. A built-in omitted here can still be valid in `POST /api/search`; see `Filter.field` for the full built-in name list.
| | \ No newline at end of file diff --git a/docs/models/platformfilter.md b/docs/models/platformfilter.md index b3e8b651..b1312736 100644 --- a/docs/models/platformfilter.md +++ b/docs/models/platformfilter.md @@ -1,13 +1,13 @@ # PlatformFilter -A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd. For `NOT_EQUALS`, multiple values exclude all listed values. Filters are AND'd with each other and with any inline query operators. +A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd; for `NOT_EQUALS`, listed values are excluded. Separate filters are AND'd with each other and with inline operators in `query`. Repeated same-field `EQUALS` filters are rejected. ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `field` | *str* | :heavy_check_mark: | The field to filter on. Accepts built-in filter field names such as `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`, plus custom datasource property names.
| type | -| `values` | List[*str*] | :heavy_check_mark: | One or more values to match. | [
"spreadsheet",
"presentation"
] | -| `operator` | [Optional[models.PlatformFilterOperator]](../models/platformfilteroperator.md) | :heavy_minus_sign: | Comparison operator to apply to this filter. Defaults to `EQUALS`. `GT`, `GTE`, `LT`, and `LTE` range operators require exactly one value; express bounded ranges with multiple filters on the same field.
| | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `field` | *str* | :heavy_check_mark: | Filter field name. Built-in names (case-sensitive, lowercase only): `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`. Built-ins accept only `EQUALS` and `NOT_EQUALS`. Any other nonblank name is accepted as a custom filter without spelling, existence, or type checks; behavior depends on your connected sources.
| type | +| `values` | List[*str*] | :heavy_check_mark: | One or more values to match. Prefer values returned by filter discovery unchanged. For people (`USER`) fields, values may be email addresses or display names.
| [
"spreadsheet",
"presentation"
] | +| `operator` | [Optional[models.PlatformFilterOperator]](../models/platformfilteroperator.md) | :heavy_minus_sign: | Comparison operator. Defaults to `EQUALS`. Built-in fields support only `EQUALS` and `NOT_EQUALS`. Range operators (`GT`, `GTE`, `LT`, `LTE`) require exactly one value; express ranges with multiple filters on the same field. Custom fields may support different operators depending on the data source.
| | \ No newline at end of file diff --git a/docs/models/platformfilterfieldinfo.md b/docs/models/platformfilterfieldinfo.md new file mode 100644 index 00000000..89081118 --- /dev/null +++ b/docs/models/platformfilterfieldinfo.md @@ -0,0 +1,11 @@ +# PlatformFilterFieldInfo + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `field` | *str* | :heavy_check_mark: | Field name usable in the `filters` array for `POST /api/search`. | status | +| `type` | *str* | :heavy_check_mark: | Open field-type string. Current values are `STRING` for text and keyword fields and `USER` for people fields (`owner`, `from`, `author`, `assignee`, `reporter`, `mentions`). Clients must tolerate unknown values.
| STRING | +| `operators` | List[[models.PlatformFilterOperator](../models/platformfilteroperator.md)] | :heavy_check_mark: | Comparison operators supported for this field. Built-in fields expose `EQUALS` and `NOT_EQUALS`.
| | +| `values` | List[*str*] | :heavy_minus_sign: | Suggested filter values observed for the supplied `query`. Omitted in catalog-only responses. Present as an array, including `[]`, when `query` is provided. Values are a bounded, non-exhaustive sample in search-provider order and may include duplicates; blank values are omitted. No additional endpoint-specific truncation is applied. Grouping in the search UI is not preserved; each value applies to the field broadly. An empty array does not mean no valid value exists. Availability varies by data source; federated and MCP integrations may return page-derived values or none at all. Reusing a suggested value in `POST /api/search` does not guarantee matching results or identical filter behavior. For `USER` fields, values may be email addresses or display names.
| | \ No newline at end of file diff --git a/docs/models/platformfilteroperator.md b/docs/models/platformfilteroperator.md index f814671e..d97b6753 100644 --- a/docs/models/platformfilteroperator.md +++ b/docs/models/platformfilteroperator.md @@ -8,6 +8,8 @@ Supported filter operator. from glean.api_client.models import PlatformFilterOperator value = PlatformFilterOperator.EQUALS + +# Open enum: unrecognized values are captured as UnrecognizedStr ``` diff --git a/docs/models/platformproblemdetailcode.md b/docs/models/platformproblemdetailcode.md index 642e2c5c..9f7f4f25 100644 --- a/docs/models/platformproblemdetailcode.md +++ b/docs/models/platformproblemdetailcode.md @@ -34,6 +34,7 @@ value = PlatformProblemDetailCode.INVALID_REQUEST | `CONFLICT` | conflict | | `GONE` | gone | | `UNPROCESSABLE_QUERY` | unprocessable_query | +| `TOOLS_UNAUTHORIZED` | tools_unauthorized | | `RATE_LIMIT_EXCEEDED` | rate_limit_exceeded | | `INTERNAL_ERROR` | internal_error | | `SERVICE_UNAVAILABLE` | service_unavailable | \ No newline at end of file diff --git a/docs/models/platformresult.md b/docs/models/platformresult.md index e9b2cd6a..33003987 100644 --- a/docs/models/platformresult.md +++ b/docs/models/platformresult.md @@ -9,7 +9,6 @@ | `title` | *str* | :heavy_check_mark: | Result title. | Q2 2026 Platform Roadmap | | `snippets` | List[*str*] | :heavy_minus_sign: | Query-relevant plain-text excerpts from the result body. | [
"The platform team will focus on API stability and..."
] | | `datasource` | *str* | :heavy_check_mark: | The datasource this result originates from. | confluence | -| `datasource_instance` | *OptionalNullable[str]* | :heavy_minus_sign: | The datasource instance this result originates from, if known. | confluence_acme | | `document_type` | *OptionalNullable[str]* | :heavy_minus_sign: | The document type within the datasource. | page | | `creator` | [Optional[models.PlatformPersonReference]](../models/platformpersonreference.md) | :heavy_minus_sign: | A lightweight reference to a person, used where a payload merely points at someone. | | | `owner` | [Optional[models.PlatformPersonReference]](../models/platformpersonreference.md) | :heavy_minus_sign: | A lightweight reference to a person, used where a payload merely points at someone. | | diff --git a/docs/models/platformsearchfiltersrequest.md b/docs/models/platformsearchfiltersrequest.md new file mode 100644 index 00000000..001723a5 --- /dev/null +++ b/docs/models/platformsearchfiltersrequest.md @@ -0,0 +1,9 @@ +# PlatformSearchFiltersRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `datasources` | List[*str*] | :heavy_minus_sign: | Restrict metadata to one or more datasource identifiers as returned by this endpoint (for example, `jira`). With a nonblank `query`, exactly one datasource is required. Unknown or inaccessible identifiers return `invalid_datasource`.
| +| `query` | *Optional[str]* | :heavy_minus_sign: | Optional search query that requests suggested filter values for the selected datasource. Must be nonblank when present. Triggers a search for facet values only; does not return documents.
| \ No newline at end of file diff --git a/docs/models/platformsearchfiltersresponse.md b/docs/models/platformsearchfiltersresponse.md new file mode 100644 index 00000000..ee35d033 --- /dev/null +++ b/docs/models/platformsearchfiltersresponse.md @@ -0,0 +1,9 @@ +# PlatformSearchFiltersResponse + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `datasources` | List[[models.PlatformDatasourceFilterInfo](../models/platformdatasourcefilterinfo.md)] | :heavy_check_mark: | Datasources visible to the authenticated user. Each `datasource` is an identifier you can pass to `POST /api/search` `datasources`. An empty array means no visible datasources.
| +| `request_id` | *str* | :heavy_check_mark: | Platform-generated request ID for support correlation. | \ No newline at end of file diff --git a/docs/models/platformsearchfiltersresponseresponse.md b/docs/models/platformsearchfiltersresponseresponse.md new file mode 100644 index 00000000..dc35339f --- /dev/null +++ b/docs/models/platformsearchfiltersresponseresponse.md @@ -0,0 +1,9 @@ +# PlatformSearchFiltersResponseResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.PlatformSearchFiltersResponse](../models/platformsearchfiltersresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/platformsearchrequest.md b/docs/models/platformsearchrequest.md index 30ff66c0..1972bc51 100644 --- a/docs/models/platformsearchrequest.md +++ b/docs/models/platformsearchrequest.md @@ -3,12 +3,11 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `query` | *str* | :heavy_check_mark: | The search query string. Supports inline operators such as `from:jane type:document app:confluence`. Inline operators are AND'd with structured `filters`.
| -| `page_size` | *Optional[int]* | :heavy_minus_sign: | Number of results to return per page. | -| `cursor` | *OptionalNullable[str]* | :heavy_minus_sign: | Opaque pagination token from a previous response's `next_cursor` field. Omit on the first request.
| -| `datasources` | List[*str*] | :heavy_minus_sign: | Restrict results to specific datasources. Requests must not specify both `datasources` and `datasource_instances`.
| -| `datasource_instances` | List[*str*] | :heavy_minus_sign: | Restrict results to specific datasource instances. Values are datasource instance identifiers returned by `GET /api/search/filters`. Requests must not specify both `datasources` and `datasource_instances`.
| -| `filters` | List[[models.PlatformFilter](../models/platformfilter.md)] | :heavy_minus_sign: | Structured filters applied to search results. Equality operators OR multiple values within a filter. Multiple filters are AND'd together, including range filters on the same field. Filters are AND'd with any inline operators in `query`. Note that conflicting constraints on the same field (e.g., `type:document` in the query and `type: spreadsheet` in a filter) produce an empty result set.
| -| `time_range` | [Optional[models.PlatformTimeRange]](../models/platformtimerange.md) | :heavy_minus_sign: | Filter results to those last updated within this range. | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `query` | *str* | :heavy_check_mark: | The search query string. Supports inline operators such as `from:jane type:document app:confluence`. Inline operators are AND'd with structured `filters`.
| +| `page_size` | *Optional[int]* | :heavy_minus_sign: | Number of results to return per page. | +| `cursor` | *OptionalNullable[str]* | :heavy_minus_sign: | Opaque pagination token from a previous response's `next_cursor` field. Omit on the first request.
| +| `datasources` | List[*str*] | :heavy_minus_sign: | Restrict results to specific datasource identifiers returned by `GET /api/search/filters`. Scopes by datasource type and may include results from multiple instances of that type.
| +| `filters` | List[[models.PlatformFilter](../models/platformfilter.md)] | :heavy_minus_sign: | Structured filters applied to search results. Multiple values within a filter with `EQUALS` are OR'd; separate filters are AND'd. Conflicting constraints on the same field (for example, `type:document` in `query` and `type:spreadsheet` in a filter) return an empty result set. See `Filter.field` for built-in field names and operators. Other nonblank field names are accepted as custom filters without validation; behavior depends on your connected sources.
| +| `time_range` | [Optional[models.PlatformTimeRange]](../models/platformtimerange.md) | :heavy_minus_sign: | Filter results to those last updated within this range. | \ No newline at end of file diff --git a/docs/models/platformsearchresponse.md b/docs/models/platformsearchresponse.md index 219a923e..74045b8a 100644 --- a/docs/models/platformsearchresponse.md +++ b/docs/models/platformsearchresponse.md @@ -3,9 +3,10 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| `results` | List[[models.PlatformResult](../models/platformresult.md)] | :heavy_check_mark: | Ordered list of search results. | -| `has_more` | *bool* | :heavy_check_mark: | Indicates whether additional pages of results are available. | -| `next_cursor` | *Nullable[str]* | :heavy_check_mark: | Opaque token to pass as `cursor` in the next request. | -| `request_id` | *str* | :heavy_check_mark: | Platform-generated request ID for support correlation. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `results` | List[[models.PlatformResult](../models/platformresult.md)] | :heavy_check_mark: | Ordered list of ranked document results. People cards, Q&A blocks, and other UI-only result types are not included.
| +| `has_more` | *bool* | :heavy_check_mark: | Indicates whether additional pages of results are available. | +| `next_cursor` | *Nullable[str]* | :heavy_check_mark: | Opaque token to pass as `cursor` in the next request. | +| `request_id` | *str* | :heavy_check_mark: | Platform-generated request ID for support correlation. | +| `warnings` | List[[models.PlatformWarning](../models/platformwarning.md)] | :heavy_check_mark: | Non-blocking warnings for this response. Required; use `[]` when there are none. Clients must tolerate unknown warning codes. `results_incomplete` means some results may be unavailable for the requested datasource scope while `results`, `has_more`, and `next_cursor` remain present. Warning messages are generic and do not include query text or internal identifiers.
| \ No newline at end of file diff --git a/docs/models/platformskillsourcepreview.md b/docs/models/platformskillsourcepreview.md new file mode 100644 index 00000000..d41ccf21 --- /dev/null +++ b/docs/models/platformskillsourcepreview.md @@ -0,0 +1,14 @@ +# PlatformSkillSourcePreview + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `display_name` | *str* | :heavy_check_mark: | Skill name parsed from SKILL.md frontmatter. | +| `description` | *str* | :heavy_check_mark: | Skill description parsed from SKILL.md frontmatter. | +| `source_url` | *str* | :heavy_check_mark: | Resolved URL for this skill within the source. | +| `commit_sha` | *str* | :heavy_check_mark: | Commit SHA used to produce the preview. | +| `main_content` | *str* | :heavy_check_mark: | SKILL.md content fetched as part of the preview. | +| `files` | List[[models.PlatformSkillSourcePreviewFile](../models/platformskillsourcepreviewfile.md)] | :heavy_check_mark: | Supporting files fetched with the skill. | +| `file_tree` | List[*str*] | :heavy_check_mark: | Relative paths discovered for the skill. | \ No newline at end of file diff --git a/docs/models/platformskillsourcepreviewfailure.md b/docs/models/platformskillsourcepreviewfailure.md new file mode 100644 index 00000000..c21fc25d --- /dev/null +++ b/docs/models/platformskillsourcepreviewfailure.md @@ -0,0 +1,10 @@ +# PlatformSkillSourcePreviewFailure + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `source_url` | *str* | :heavy_check_mark: | Resolved URL for the entry that could not be previewed. | +| `code` | [models.PlatformSkillSourcePreviewFailureCode](../models/platformskillsourcepreviewfailurecode.md) | :heavy_check_mark: | Stable machine-readable reason a discovered entry was excluded. | +| `detail` | *str* | :heavy_check_mark: | Safe explanation of why the entry was excluded. | \ No newline at end of file diff --git a/docs/models/platformskillsourcepreviewfailurecode.md b/docs/models/platformskillsourcepreviewfailurecode.md new file mode 100644 index 00000000..d0449869 --- /dev/null +++ b/docs/models/platformskillsourcepreviewfailurecode.md @@ -0,0 +1,21 @@ +# PlatformSkillSourcePreviewFailureCode + +Stable machine-readable reason a discovered entry was excluded. + +## Example Usage + +```python +from glean.api_client.models import PlatformSkillSourcePreviewFailureCode + +value = PlatformSkillSourcePreviewFailureCode.INVALID_SKILL + +# Open enum: unrecognized values are captured as UnrecognizedStr +``` + + +## Values + +| Name | Value | +| -------------------- | -------------------- | +| `INVALID_SKILL` | INVALID_SKILL | +| `SKILL_FETCH_FAILED` | SKILL_FETCH_FAILED | \ No newline at end of file diff --git a/docs/models/platformskillsourcepreviewfile.md b/docs/models/platformskillsourcepreviewfile.md new file mode 100644 index 00000000..6f4626cb --- /dev/null +++ b/docs/models/platformskillsourcepreviewfile.md @@ -0,0 +1,9 @@ +# PlatformSkillSourcePreviewFile + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | -------------------------------------- | +| `path` | *str* | :heavy_check_mark: | Relative path within the skill bundle. | +| `content` | *str* | :heavy_check_mark: | UTF-8 file content. | \ No newline at end of file diff --git a/docs/models/platformskillsourcepreviewrequest.md b/docs/models/platformskillsourcepreviewrequest.md new file mode 100644 index 00000000..8d0b03a4 --- /dev/null +++ b/docs/models/platformskillsourcepreviewrequest.md @@ -0,0 +1,9 @@ +# PlatformSkillSourcePreviewRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `source_url` | *str* | :heavy_check_mark: | GitHub URL for a skill directory, SKILL.md file, or repository to inspect. | +| `stream` | *Optional[bool]* | :heavy_minus_sign: | Whether to stream repository scan progress using server-sent events. | \ No newline at end of file diff --git a/docs/models/platformskillsourcepreviewresponse.md b/docs/models/platformskillsourcepreviewresponse.md new file mode 100644 index 00000000..0c2df151 --- /dev/null +++ b/docs/models/platformskillsourcepreviewresponse.md @@ -0,0 +1,10 @@ +# PlatformSkillSourcePreviewResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `skills` | List[[models.PlatformSkillSourcePreview](../models/platformskillsourcepreview.md)] | :heavy_check_mark: | Valid skills discovered at the source URL. | +| `failures` | List[[models.PlatformSkillSourcePreviewFailure](../models/platformskillsourcepreviewfailure.md)] | :heavy_check_mark: | Discovered entries that could not be included in the preview. | +| `request_id` | *str* | :heavy_check_mark: | Platform-generated request ID for support correlation. | \ No newline at end of file diff --git a/docs/models/platformskillspreviewsourceresponse.md b/docs/models/platformskillspreviewsourceresponse.md new file mode 100644 index 00000000..2eabd1c4 --- /dev/null +++ b/docs/models/platformskillspreviewsourceresponse.md @@ -0,0 +1,17 @@ +# PlatformSkillsPreviewSourceResponse + + +## Supported Types + +### `models.PlatformSkillSourcePreviewResponse` + +```python +value: models.PlatformSkillSourcePreviewResponse = /* values here */ +``` + +### `str` + +```python +value: str = /* values here */ +``` + diff --git a/docs/models/platformskillsupdaterequest.md b/docs/models/platformskillsupdaterequest.md new file mode 100644 index 00000000..3ea30e83 --- /dev/null +++ b/docs/models/platformskillsupdaterequest.md @@ -0,0 +1,9 @@ +# PlatformSkillsUpdateRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `skill_id` | *str* | :heavy_check_mark: | Glean skill ID. | +| `platform_skill_update_request` | [models.PlatformSkillUpdateRequest](../models/platformskillupdaterequest.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/platformskillupdaterequest.md b/docs/models/platformskillupdaterequest.md new file mode 100644 index 00000000..1d94bb0a --- /dev/null +++ b/docs/models/platformskillupdaterequest.md @@ -0,0 +1,8 @@ +# PlatformSkillUpdateRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `status` | [models.PlatformSkillUpdateStatus](../models/platformskillupdatestatus.md) | :heavy_check_mark: | New status for the skill. | \ No newline at end of file diff --git a/docs/models/platformskillupdateresponse.md b/docs/models/platformskillupdateresponse.md new file mode 100644 index 00000000..ae42e1d6 --- /dev/null +++ b/docs/models/platformskillupdateresponse.md @@ -0,0 +1,9 @@ +# PlatformSkillUpdateResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `skill` | [models.PlatformSkill](../models/platformskill.md) | :heavy_check_mark: | N/A | +| `request_id` | *str* | :heavy_check_mark: | Platform-generated request ID for support correlation. | \ No newline at end of file diff --git a/docs/models/platformskillupdatestatus.md b/docs/models/platformskillupdatestatus.md new file mode 100644 index 00000000..898c434f --- /dev/null +++ b/docs/models/platformskillupdatestatus.md @@ -0,0 +1,19 @@ +# PlatformSkillUpdateStatus + +New status for the skill. + +## Example Usage + +```python +from glean.api_client.models import PlatformSkillUpdateStatus + +value = PlatformSkillUpdateStatus.ENABLED +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `ENABLED` | ENABLED | +| `DISABLED` | DISABLED | \ No newline at end of file diff --git a/docs/models/platformskillvalidationresponse.md b/docs/models/platformskillvalidationresponse.md index e1b24bc3..9f8ab67f 100644 --- a/docs/models/platformskillvalidationresponse.md +++ b/docs/models/platformskillvalidationresponse.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `metadata` | [models.PlatformSkillValidationMetadata](../models/platformskillvalidationmetadata.md) | :heavy_check_mark: | N/A | -| `files` | List[[models.PlatformSkillValidationFile](../models/platformskillvalidationfile.md)] | :heavy_check_mark: | Normalized files in the bundle after stripping an optional single root folder. | -| `warnings` | List[[models.PlatformSkillValidationWarning](../models/platformskillvalidationwarning.md)] | :heavy_check_mark: | Non-blocking validation warnings. | -| `request_id` | *str* | :heavy_check_mark: | Platform-generated request ID for support correlation. | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `metadata` | [models.PlatformSkillValidationMetadata](../models/platformskillvalidationmetadata.md) | :heavy_check_mark: | N/A | +| `files` | List[[models.PlatformSkillValidationFile](../models/platformskillvalidationfile.md)] | :heavy_check_mark: | Normalized files in the bundle after stripping an optional single root folder. | +| `warnings` | List[[models.PlatformWarning](../models/platformwarning.md)] | :heavy_check_mark: | Non-blocking validation warnings. | +| `request_id` | *str* | :heavy_check_mark: | Platform-generated request ID for support correlation. | \ No newline at end of file diff --git a/docs/models/platformskillvalidationwarning.md b/docs/models/platformskillvalidationwarning.md deleted file mode 100644 index 128a3f9f..00000000 --- a/docs/models/platformskillvalidationwarning.md +++ /dev/null @@ -1,9 +0,0 @@ -# PlatformSkillValidationWarning - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | -| `code` | *str* | :heavy_check_mark: | Stable warning code. | -| `message` | *str* | :heavy_check_mark: | Human-readable warning message. | \ No newline at end of file diff --git a/docs/models/platformwarning.md b/docs/models/platformwarning.md new file mode 100644 index 00000000..f0a2b5fa --- /dev/null +++ b/docs/models/platformwarning.md @@ -0,0 +1,11 @@ +# PlatformWarning + +Non-blocking warning attached to a successful Platform response. + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `code` | *str* | :heavy_check_mark: | Open snake_case warning code. Clients must tolerate unknown values; the set of codes is not a closed enum.
| results_incomplete | +| `message` | *str* | :heavy_check_mark: | Human-readable warning message. | | \ No newline at end of file diff --git a/docs/models/tokenendpointauthmethod.md b/docs/models/tokenendpointauthmethod.md index 292a955a..94b2406d 100644 --- a/docs/models/tokenendpointauthmethod.md +++ b/docs/models/tokenendpointauthmethod.md @@ -1,6 +1,6 @@ # TokenEndpointAuthMethod -The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. client_secret_post sends credentials as form fields, client_secret_basic sends them via Authorization header, none omits client secret and relies on PKCE only. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). +The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). ## Example Usage @@ -19,4 +19,5 @@ value = TokenEndpointAuthMethod.CLIENT_SECRET_POST | --------------------- | --------------------- | | `CLIENT_SECRET_POST` | client_secret_post | | `CLIENT_SECRET_BASIC` | client_secret_basic | -| `NONE` | none | \ No newline at end of file +| `NONE` | none | +| `PRIVATE_KEY_JWT` | private_key_jwt | \ No newline at end of file diff --git a/docs/models/toolannotations.md b/docs/models/toolannotations.md new file mode 100644 index 00000000..32d40f76 --- /dev/null +++ b/docs/models/toolannotations.md @@ -0,0 +1,20 @@ +# ToolAnnotations + +Behavioural hints for the tool, exactly as declared by the tool server. No +defaults are filled in — see the per-field notes for what an absent value means. + +Per the MCP specification, clients MUST treat these hints as untrusted unless +the tool server is itself trusted. They are advisory metadata, not an +authorization signal, and must not be the sole basis of a security decision. + + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `read_only_hint` | *Optional[bool]* | :heavy_minus_sign: | True if the tool does not modify its environment. Always present. MCP
defines no distinction between an undeclared value and `false` here, so
`false` means "not declared read-only" rather than "declared mutating".
| +| `destructive_hint` | *OptionalNullable[bool]* | :heavy_minus_sign: | True if the tool may perform destructive updates. **Absent means the server
did not declare it**, for which the MCP default is `true`. Only meaningful
when `readOnlyHint` is `false`.
| +| `idempotent_hint` | *Optional[bool]* | :heavy_minus_sign: | True if repeated calls with the same arguments have no additional effect.
Always present; as with `readOnlyHint`, `false` means "not declared
idempotent". Only meaningful when `readOnlyHint` is `false`.
| +| `open_world_hint` | *OptionalNullable[bool]* | :heavy_minus_sign: | True if the tool interacts with an open world of external entities. **Absent
means the server did not declare it**, for which the MCP default is `true`.
| \ No newline at end of file diff --git a/docs/models/tooldefinition.md b/docs/models/tooldefinition.md new file mode 100644 index 00000000..1470fe61 --- /dev/null +++ b/docs/models/tooldefinition.md @@ -0,0 +1,13 @@ +# ToolDefinition + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `server_id` | *str* | :heavy_check_mark: | Tool server this tool belongs to. | +| `name` | *str* | :heavy_check_mark: | Name to invoke the tool by. | +| `display_name` | *Optional[str]* | :heavy_minus_sign: | Human-readable name of the tool. | +| `description` | *Optional[str]* | :heavy_minus_sign: | What the tool does, as surfaced to a model. | +| `input_schema` | Dict[str, *Any*] | :heavy_minus_sign: | JSON Schema for the tool's input parameters. | +| `annotations` | [Optional[models.ToolAnnotations]](../models/toolannotations.md) | :heavy_minus_sign: | Behavioural hints for the tool, exactly as declared by the tool server. No
defaults are filled in — see the per-field notes for what an absent value means.

Per the MCP specification, clients MUST treat these hints as untrusted unless
the tool server is itself trusted. They are advisory metadata, not an
authorization signal, and must not be the sole basis of a security decision.
| \ No newline at end of file diff --git a/docs/models/tooldefinitionsresponse.md b/docs/models/tooldefinitionsresponse.md new file mode 100644 index 00000000..42c552a1 --- /dev/null +++ b/docs/models/tooldefinitionsresponse.md @@ -0,0 +1,9 @@ +# ToolDefinitionsResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `tools` | List[[models.ToolDefinition](../models/tooldefinition.md)] | :heavy_check_mark: | Definitions for the requested tools that exist on this server. | +| `not_found` | List[*str*] | :heavy_minus_sign: | Requested names that do not exist on this server. | \ No newline at end of file diff --git a/docs/models/viewerinfo.md b/docs/models/viewerinfo.md index 13f5dde9..e1cf0404 100644 --- a/docs/models/viewerinfo.md +++ b/docs/models/viewerinfo.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| ~~`role`~~ | [Optional[models.Role]](../models/role.md) | :heavy_minus_sign: | : warning: ** DEPRECATED **: Deprecated on 2026-02-05, removal scheduled for 2026-10-15: Use permissions instead.

DEPRECATED - use permissions instead. Viewer's role on the specific document. | +| ~~`role`~~ | [Optional[models.ViewerInfoRole]](../models/viewerinforole.md) | :heavy_minus_sign: | : warning: ** DEPRECATED **: Deprecated on 2026-02-05, removal scheduled for 2026-10-15: Use permissions instead.

DEPRECATED - use permissions instead. Viewer's role on the specific document. | | `last_viewed_time` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/role.md b/docs/models/viewerinforole.md similarity index 82% rename from docs/models/role.md rename to docs/models/viewerinforole.md index f039c916..89ddc588 100644 --- a/docs/models/role.md +++ b/docs/models/viewerinforole.md @@ -1,4 +1,4 @@ -# ~~Role~~ +# ~~ViewerInfoRole~~ DEPRECATED - use permissions instead. Viewer's role on the specific document. @@ -7,9 +7,9 @@ DEPRECATED - use permissions instead. Viewer's role on the specific document. ## Example Usage ```python -from glean.api_client.models import Role +from glean.api_client.models import ViewerInfoRole -value = Role.ANSWER_MODERATOR +value = ViewerInfoRole.ANSWER_MODERATOR # Open enum: unrecognized values are captured as UnrecognizedStr ``` diff --git a/docs/sdks/agents/README.md b/docs/sdks/agents/README.md index c9508946..c3384d9d 100644 --- a/docs/sdks/agents/README.md +++ b/docs/sdks/agents/README.md @@ -185,8 +185,9 @@ with Glean( ### Errors -| Error Type | Status Code | Content Type | -| -------------------------------------- | -------------------------------------- | -------------------------------------- | -| errors.PlatformProblemDetailError | 400, 401, 403, 404, 408, 409, 413, 429 | application/problem+json | -| errors.PlatformProblemDetailError | 500, 503 | application/problem+json | -| errors.GleanError | 4XX, 5XX | \*/\* | \ No newline at end of file +| Error Type | Status Code | Content Type | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| errors.PlatformUnauthorizedAgentToolsProblemError | 422 | application/problem+json | +| errors.PlatformProblemDetailError | 400, 401, 403, 404, 408, 409, 413, 429 | application/problem+json | +| errors.PlatformProblemDetailError | 500, 503 | application/problem+json | +| errors.GleanError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/chatsdk/README.md b/docs/sdks/chatsdk/README.md new file mode 100644 index 00000000..36fdb267 --- /dev/null +++ b/docs/sdks/chatsdk/README.md @@ -0,0 +1,53 @@ +# Chat + +## Overview + +### Available Operations + +* [create](#create) - Create a chat response + +## create + +Run an assistant turn. Set `stream` to true to receive server-sent events; otherwise the response is a typed JSON response object. + + +### Example Usage + + +```python +from glean.api_client import Glean +import os + + +with Glean( + api_token=os.getenv("GLEAN_API_TOKEN", ""), +) as glean: + + res = glean.chat.create(input="", stream=False, store=True) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `input` | [models.Input](../../models/input.md) | :heavy_check_mark: | Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`.
| +| `stream` | *Optional[bool]* | :heavy_minus_sign: | When true, respond with `text/event-stream`. When false or omitted, respond with `application/json`.
| +| `store` | *Optional[bool]* | :heavy_minus_sign: | When true (default), persist the interaction and return a `conversation_id`. When false, run ephemerally with no persistence.
| +| `conversation_id` | *Optional[str]* | :heavy_minus_sign: | Continue an existing stored conversation. Incompatible with message-array `input` and with `store: false`.
| +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.PlatformChatCreateResponse](../../models/platformchatcreateresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.PlatformProblemDetailError | 400, 401, 403, 404, 408, 413, 422, 429 | application/problem+json | +| errors.PlatformProblemDetailError | 500, 503 | application/problem+json | +| errors.GleanError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/clientagents/README.md b/docs/sdks/clientagents/README.md index 78fe4036..e54900d9 100644 --- a/docs/sdks/clientagents/README.md +++ b/docs/sdks/clientagents/README.md @@ -8,6 +8,7 @@ * [retrieve](#retrieve) - Retrieve an agent * [update](#update) - Edit an agent * [retrieve_schemas](#retrieve_schemas) - List an agent's schemas +* [import_](#import_) - Import an agent * [list](#list) - Search agents * [run_stream](#run_stream) - Create an agent run and stream the response * [run](#run) - Create an agent run and wait for the response @@ -182,6 +183,58 @@ with Glean( | errors.ErrorResponse | 404, 422 | application/json | | errors.GleanError | 4XX, 5XX | \*/\* | +## import_ + +Imports an [agent](https://developers.glean.com/agents/agents-api) from its on-disk folder representation (spec.yaml, instructions.md, skills/, subagents/) packaged as a zip, and creates or updates the agent. Inverse of the export flow: the folder-to-schema conversion runs server-side. The bundle must contain only regular files; symlinks are resolved by the caller at packaging time. + +### Example Usage + + +```python +from glean.api_client import Glean +import os + + +with Glean( + api_token=os.getenv("GLEAN_API_TOKEN", ""), +) as glean: + + res = glean.client.agents.import_(agent_id="", bundle={ + "file_name": "example.file", + "content": open("example.file", "rb"), + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `agent_id` | *str* | :heavy_check_mark: | The ID of the agent to create or update. | +| `bundle` | [models.Bundle](../../models/bundle.md) | :heavy_check_mark: | Zip of the agent folder (spec.yaml, instructions.md, skills/, subagents/) with symlinks dereferenced.
| +| `locale` | *Optional[str]* | :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`. | +| `timezone_offset` | *Optional[int]* | :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. | +| `git_commit_sha` | *Optional[str]* | :heavy_minus_sign: | Optional Git commit SHA to associate with this import. | +| `git_author_id` | *Optional[str]* | :heavy_minus_sign: | Optional VCS commit author ID to associate with this import. | +| `commit_message` | *Optional[str]* | :heavy_minus_sign: | Optional commit message for the imported version. | +| `sync_mode` | [Optional[models.ImportAgentSyncMode]](../../models/importagentsyncmode.md) | :heavy_minus_sign: | Whether the imported version is staged (saved without updating the live version) or published directly to the live version.
| +| `is_draft` | *Optional[bool]* | :heavy_minus_sign: | When true, validates and stores a draft preview without publishing (used for PR preview links). Takes precedence over `syncMode`: when `isDraft` is true, `syncMode` is ignored.
| +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.ImportAgentResponse](../../models/importagentresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------- | -------------------- | -------------------- | +| errors.ErrorResponse | 404 | application/json | +| errors.GleanError | 4XX, 5XX | \*/\* | + ## list Search for [agents](https://developers.glean.com/agents/agents-api) by agent name. @@ -266,10 +319,11 @@ with Glean( ### Errors -| Error Type | Status Code | Content Type | -| -------------------- | -------------------- | -------------------- | -| errors.ErrorResponse | 404, 409, 422 | application/json | -| errors.GleanError | 4XX, 5XX | \*/\* | +| Error Type | Status Code | Content Type | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | +| errors.ErrorResponse | 404, 409 | application/json | +| errors.UnauthorizedAgentToolsError | 422 | application/json | +| errors.GleanError | 4XX, 5XX | \*/\* | ## run @@ -314,6 +368,7 @@ with Glean( ### Errors -| Error Type | Status Code | Content Type | -| ----------------- | ----------------- | ----------------- | -| errors.GleanError | 4XX, 5XX | \*/\* | \ No newline at end of file +| Error Type | Status Code | Content Type | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | +| errors.UnauthorizedAgentToolsError | 422 | application/json | +| errors.GleanError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/clientchat/README.md b/docs/sdks/clientchat/README.md index 03c5db92..dae29ba8 100644 --- a/docs/sdks/clientchat/README.md +++ b/docs/sdks/clientchat/README.md @@ -269,9 +269,10 @@ with Glean( ### Errors -| Error Type | Status Code | Content Type | -| ----------------- | ----------------- | ----------------- | -| errors.GleanError | 4XX, 5XX | \*/\* | +| Error Type | Status Code | Content Type | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| errors.AccessRequestPermissionDeniedResponseError | 403 | application/json | +| errors.GleanError | 4XX, 5XX | \*/\* | ## list diff --git a/docs/sdks/search/README.md b/docs/sdks/search/README.md index 04d61f76..e8db7383 100644 --- a/docs/sdks/search/README.md +++ b/docs/sdks/search/README.md @@ -5,10 +5,12 @@ ### Available Operations * [query](#query) - Search +* [list_filters](#list_filters) - List search filters ## query -Execute a search query and retrieve ranked results. This is the data retrieval variant of the search API and returns only results and pagination state. +Search your organization's connected content and return ranked document results with cursor pagination. Use `GET /api/search/filters` to discover datasource identifiers and common filter fields. Built-in filter names are validated; other field names are accepted as custom filters and behavior depends on your Glean configuration and connected sources. +Errors: HTTP 422 `unprocessable_query` returns no `results` or `next_cursor`. See `warnings` on the response for non-blocking issues such as partially available results. Not every query issue produces a warning or error. ### Example Usage @@ -43,16 +45,15 @@ with Glean( ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `query` | *str* | :heavy_check_mark: | The search query string. Supports inline operators such as `from:jane type:document app:confluence`. Inline operators are AND'd with structured `filters`.
| -| `page_size` | *Optional[int]* | :heavy_minus_sign: | Number of results to return per page. | -| `cursor` | *OptionalNullable[str]* | :heavy_minus_sign: | Opaque pagination token from a previous response's `next_cursor` field. Omit on the first request.
| -| `datasources` | List[*str*] | :heavy_minus_sign: | Restrict results to specific datasources. Requests must not specify both `datasources` and `datasource_instances`.
| -| `datasource_instances` | List[*str*] | :heavy_minus_sign: | Restrict results to specific datasource instances. Values are datasource instance identifiers returned by `GET /api/search/filters`. Requests must not specify both `datasources` and `datasource_instances`.
| -| `filters` | List[[models.PlatformFilter](../../models/platformfilter.md)] | :heavy_minus_sign: | Structured filters applied to search results. Equality operators OR multiple values within a filter. Multiple filters are AND'd together, including range filters on the same field. Filters are AND'd with any inline operators in `query`. Note that conflicting constraints on the same field (e.g., `type:document` in the query and `type: spreadsheet` in a filter) produce an empty result set.
| -| `time_range` | [Optional[models.PlatformTimeRange]](../../models/platformtimerange.md) | :heavy_minus_sign: | Filter results to those last updated within this range. | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `query` | *str* | :heavy_check_mark: | The search query string. Supports inline operators such as `from:jane type:document app:confluence`. Inline operators are AND'd with structured `filters`.
| +| `page_size` | *Optional[int]* | :heavy_minus_sign: | Number of results to return per page. | +| `cursor` | *OptionalNullable[str]* | :heavy_minus_sign: | Opaque pagination token from a previous response's `next_cursor` field. Omit on the first request.
| +| `datasources` | List[*str*] | :heavy_minus_sign: | Restrict results to specific datasource identifiers returned by `GET /api/search/filters`. Scopes by datasource type and may include results from multiple instances of that type.
| +| `filters` | List[[models.PlatformFilter](../../models/platformfilter.md)] | :heavy_minus_sign: | Structured filters applied to search results. Multiple values within a filter with `EQUALS` are OR'd; separate filters are AND'd. Conflicting constraints on the same field (for example, `type:document` in `query` and `type:spreadsheet` in a filter) return an empty result set. See `Filter.field` for built-in field names and operators. Other nonblank field names are accepted as custom filters without validation; behavior depends on your connected sources.
| +| `time_range` | [Optional[models.PlatformTimeRange]](../../models/platformtimerange.md) | :heavy_minus_sign: | Filter results to those last updated within this range. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -60,8 +61,53 @@ with Glean( ### Errors +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.PlatformProblemDetailError | 400, 401, 403, 404, 408, 413, 422, 429 | application/problem+json | +| errors.PlatformProblemDetailError | 500, 503 | application/problem+json | +| errors.GleanError | 4XX, 5XX | \*/\* | + +## list_filters + +List datasources and common built-in filter fields visible to the authenticated user. This is a best-effort catalog, not an exhaustive list of every filter search accepts. +Without `query`, returns field metadata only and does not run a search. With a nonblank `query`, provide exactly one `datasources` value to request suggested filter values for that query; no documents are returned and this endpoint does not include warning objects. See `FilterFieldInfo.values` for limitations on suggested values. Rate-limited requests return HTTP 429 with `Retry-After`; temporary backend unavailability returns HTTP 503. + + +### Example Usage + + +```python +from glean.api_client import Glean +import os + + +with Glean( + api_token=os.getenv("GLEAN_API_TOKEN", ""), +) as glean: + + res = glean.search.list_filters() + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `datasources` | List[*str*] | :heavy_minus_sign: | Restrict metadata to one or more datasource identifiers as returned by this endpoint (for example, `jira`). With a nonblank `query`, exactly one datasource is required. Unknown or inaccessible identifiers return `invalid_datasource`.
| +| `query` | *Optional[str]* | :heavy_minus_sign: | Optional search query that requests suggested filter values for the selected datasource. Must be nonblank when present. Triggers a search for facet values only; does not return documents.
| +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.PlatformSearchFiltersResponseResponse](../../models/platformsearchfiltersresponseresponse.md)** + +### Errors + | Error Type | Status Code | Content Type | | --------------------------------- | --------------------------------- | --------------------------------- | -| errors.PlatformProblemDetailError | 400, 401, 403, 404, 408, 413, 429 | application/problem+json | +| errors.PlatformProblemDetailError | 400, 401, 403, 404, 408, 429 | application/problem+json | | errors.PlatformProblemDetailError | 500, 503 | application/problem+json | | errors.GleanError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/skills/README.md b/docs/sdks/skills/README.md index 60066945..21ba2bac 100644 --- a/docs/sdks/skills/README.md +++ b/docs/sdks/skills/README.md @@ -7,6 +7,8 @@ * [create](#create) - Create skill * [list](#list) - List skills * [validate](#validate) - Validate skill bundle +* [preview_source](#preview_source) - Preview a GitHub skill source +* [update](#update) - Update skill * [retrieve](#retrieve) - Retrieve skill * [retrieve_content](#retrieve_content) - Download skill content * [create_version](#create_version) - Create skill version @@ -150,6 +152,94 @@ with Glean( | errors.PlatformProblemDetailError | 500, 503 | application/problem+json | | errors.GleanError | 4XX, 5XX | \*/\* | +## preview_source + +Inspect a GitHub URL without persisting a source or any discovered skills. Set stream to true to receive repository scan progress as server-sent events; otherwise the response contains the completed preview. + + +### Example Usage + + +```python +from glean.api_client import Glean +import os + + +with Glean( + api_token=os.getenv("GLEAN_API_TOKEN", ""), +) as glean: + + res = glean.skills.preview_source(source_url="https://ugly-information.name/", stream=False) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `source_url` | *str* | :heavy_check_mark: | GitHub URL for a skill directory, SKILL.md file, or repository to inspect. | +| `stream` | *Optional[bool]* | :heavy_minus_sign: | Whether to stream repository scan progress using server-sent events. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.PlatformSkillsPreviewSourceResponse](../../models/platformskillspreviewsourceresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.PlatformProblemDetailError | 400, 401, 403, 408, 413, 429 | application/problem+json | +| errors.PlatformProblemDetailError | 500, 503 | application/problem+json | +| errors.GleanError | 4XX, 5XX | \*/\* | + +## update + +Update mutable metadata for a skill. V1 supports enabling or disabling a skill without changing its content. + + +### Example Usage + + +```python +from glean.api_client import Glean, models +import os + + +with Glean( + api_token=os.getenv("GLEAN_API_TOKEN", ""), +) as glean: + + res = glean.skills.update(skill_id="", status=models.PlatformSkillUpdateStatus.DISABLED) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `skill_id` | *str* | :heavy_check_mark: | Glean skill ID. | +| `status` | [models.PlatformSkillUpdateStatus](../../models/platformskillupdatestatus.md) | :heavy_check_mark: | New status for the skill. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.PlatformSkillUpdateResponse](../../models/platformskillupdateresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.PlatformProblemDetailError | 400, 401, 403, 404, 408, 409, 413, 429 | application/problem+json | +| errors.PlatformProblemDetailError | 500, 503 | application/problem+json | +| errors.GleanError | 4XX, 5XX | \*/\* | + ## retrieve Retrieve metadata for a skill available to the authenticated user. diff --git a/docs/sdks/tools/README.md b/docs/sdks/tools/README.md index 991a44e9..5481f3f8 100644 --- a/docs/sdks/tools/README.md +++ b/docs/sdks/tools/README.md @@ -10,6 +10,7 @@ * [authorize_action_pack](#authorize_action_pack) - Start the OAuth authorization flow for an action pack. * [retrieve_tool_server_auth_status](#retrieve_tool_server_auth_status) - Get end-user authentication status for a tool server. * [authorize_tool_server](#authorize_tool_server) - Start the OAuth authorization flow for a tool server. +* [get_tool_server_tools](#get_tool_server_tools) - Get tool definitions from a tool server. ## list @@ -271,6 +272,60 @@ with Glean( ### Errors +| Error Type | Status Code | Content Type | +| ----------------- | ----------------- | ----------------- | +| errors.GleanError | 4XX, 5XX | \*/\* | + +## get_tool_server_tools + +Returns the name, description and JSON input schema for the named tools on the +specified tool server. Works for both action packs and MCP servers. + +`toolNames` is required. Names that do not exist on the server are returned in +`notFound` rather than failing the request, so a single bad name does not force +callers into one-at-a-time retries. Matching is case-insensitive and treats `-` +and `_` as equivalent. + +Native tools are not served; `serverId=native` returns 404. + + +### Example Usage + + +```python +from glean.api_client import Glean +import os + + +with Glean( + api_token=os.getenv("GLEAN_API_TOKEN", ""), +) as glean: + + res = glean.client.tools.get_tool_server_tools(server_id="", tool_names=[ + "", + "", + "", + ]) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `server_id` | *str* | :heavy_check_mark: | Unique identifier of the tool server. | +| `tool_names` | List[*str*] | :heavy_check_mark: | Tool names to look up on this server. Maximum 100. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.ToolDefinitionsResponse](../../models/tooldefinitionsresponse.md)** + +### Errors + | Error Type | Status Code | Content Type | | ----------------- | ----------------- | ----------------- | | errors.GleanError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index c851f21c..137b6f44 100644 --- a/poetry.lock +++ b/poetry.lock @@ -734,4 +734,4 @@ typing-extensions = ">=4.12.0" [metadata] lock-version = "2.1" python-versions = ">=3.10" -content-hash = "95606e43a093e9473529c06d35ada64b8804a9615f05f59a5b32c0e186ea237d" +content-hash = "d50d58a1b0400168082c4ae9f6171e1c0ab180a81af0a12e56dcee80f55aecce" diff --git a/pyproject.toml b/pyproject.toml index 932a1745..0a9c335a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "glean-api-client" -version = "0.15.4" +version = "0.15.5" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Glean Technologies, Inc." },] readme = "README-PYPI.md" @@ -9,7 +9,7 @@ requires-python = ">=3.10" dependencies = [ "httpcore >=1.0.9", "httpx >=0.28.1", - "pydantic >=2.11.2,<2.13", + "pydantic >=2.11.2", ] [tool.poetry] diff --git a/src/glean/api_client/_version.py b/src/glean/api_client/_version.py index 97481002..19f794cd 100644 --- a/src/glean/api_client/_version.py +++ b/src/glean/api_client/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "glean-api-client" -__version__: str = "0.15.4" +__version__: str = "0.15.5" __openapi_doc_version__: str = "0.9.0" -__gen_version__: str = "2.918.4" -__user_agent__: str = "speakeasy-sdk/python 0.15.4 2.918.4 0.9.0 glean-api-client" +__gen_version__: str = "2.926.8" +__user_agent__: str = "speakeasy-sdk/python 0.15.5 2.926.8 0.9.0 glean-api-client" try: if __package__ is not None: diff --git a/src/glean/api_client/agents.py b/src/glean/api_client/agents.py index 47882b7b..2b4bb4f6 100644 --- a/src/glean/api_client/agents.py +++ b/src/glean/api_client/agents.py @@ -90,10 +90,6 @@ def search( tags=["Agents"], extensions={ "x-codegen-request-body-name": "payload", - "x-glean-experimental": { - "id": "4abc1e17-8e06-490b-99a7-e8f97592405a", - "introduced": "2026-05-12", - }, "x-visibility": "Public", }, ), @@ -204,10 +200,6 @@ async def search_async( tags=["Agents"], extensions={ "x-codegen-request-body-name": "payload", - "x-glean-experimental": { - "id": "4abc1e17-8e06-490b-99a7-e8f97592405a", - "introduced": "2026-05-12", - }, "x-visibility": "Public", }, ), @@ -313,13 +305,7 @@ def get( self.sdk_configuration.security, models.Security ), tags=["Agents"], - extensions={ - "x-glean-experimental": { - "id": "009b3e94-694b-4deb-b80a-c67011173715", - "introduced": "2026-05-12", - }, - "x-visibility": "Public", - }, + extensions={"x-visibility": "Public"}, ), request=req, is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), @@ -421,13 +407,7 @@ async def get_async( self.sdk_configuration.security, models.Security ), tags=["Agents"], - extensions={ - "x-glean-experimental": { - "id": "009b3e94-694b-4deb-b80a-c67011173715", - "introduced": "2026-05-12", - }, - "x-visibility": "Public", - }, + extensions={"x-visibility": "Public"}, ), request=req, is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), @@ -532,13 +512,7 @@ def get_schemas( self.sdk_configuration.security, models.Security ), tags=["Agents"], - extensions={ - "x-glean-experimental": { - "id": "b40b4dd3-3839-48e6-9e45-7e63e8148b49", - "introduced": "2026-05-12", - }, - "x-visibility": "Public", - }, + extensions={"x-visibility": "Public"}, ), request=req, is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), @@ -645,13 +619,7 @@ async def get_schemas_async( self.sdk_configuration.security, models.Security ), tags=["Agents"], - extensions={ - "x-glean-experimental": { - "id": "b40b4dd3-3839-48e6-9e45-7e63e8148b49", - "introduced": "2026-05-12", - }, - "x-visibility": "Public", - }, + extensions={"x-visibility": "Public"}, ), request=req, is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), @@ -790,10 +758,6 @@ def create_run( tags=["Agents"], extensions={ "x-codegen-request-body-name": "payload", - "x-glean-experimental": { - "id": "26bba669-2e92-4e5d-9798-6a532fae4e9f", - "introduced": "2026-05-12", - }, "x-visibility": "Public", }, ), @@ -809,6 +773,13 @@ def create_run( ) if utils.match_response(http_res, "200", "text/event-stream"): return http_res.text + if utils.match_response(http_res, "422", "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformUnauthorizedAgentToolsProblemErrorData, http_res + ) + raise errors.PlatformUnauthorizedAgentToolsProblemError( + response_data, http_res + ) if utils.match_response( http_res, ["400", "401", "403", "404", "408", "409", "413", "429"], @@ -936,10 +907,6 @@ async def create_run_async( tags=["Agents"], extensions={ "x-codegen-request-body-name": "payload", - "x-glean-experimental": { - "id": "26bba669-2e92-4e5d-9798-6a532fae4e9f", - "introduced": "2026-05-12", - }, "x-visibility": "Public", }, ), @@ -955,6 +922,13 @@ async def create_run_async( ) if utils.match_response(http_res, "200", "text/event-stream"): return http_res.text + if utils.match_response(http_res, "422", "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformUnauthorizedAgentToolsProblemErrorData, http_res + ) + raise errors.PlatformUnauthorizedAgentToolsProblemError( + response_data, http_res + ) if utils.match_response( http_res, ["400", "401", "403", "404", "408", "409", "413", "429"], diff --git a/src/glean/api_client/chat_sdk.py b/src/glean/api_client/chat_sdk.py new file mode 100644 index 00000000..4275af06 --- /dev/null +++ b/src/glean/api_client/chat_sdk.py @@ -0,0 +1,283 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from .basesdk import BaseSDK +from enum import Enum +from glean.api_client import errors, models, utils +from glean.api_client._hooks import HookContext +from glean.api_client.types import OptionalNullable, UNSET +from glean.api_client.utils import get_security_from_env +from glean.api_client.utils.unmarshal_json_response import unmarshal_json_response +from typing import Any, Mapping, Optional, Union + + +class CreateAcceptEnum(str, Enum): + APPLICATION_JSON = "application/json" + TEXT_EVENT_STREAM = "text/event-stream" + + +class ChatSDK(BaseSDK): + def create( + self, + *, + input: Union[models.Input, models.InputTypedDict], + stream: Optional[bool] = False, + store: Optional[bool] = True, + conversation_id: Optional[str] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + accept_header_override: Optional[CreateAcceptEnum] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.PlatformChatCreateResponse: + r"""Create a chat response + + Run an assistant turn. Set `stream` to true to receive server-sent events; otherwise the response is a typed JSON response object. + + + :param input: Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + + :param stream: When true, respond with `text/event-stream`. When false or omitted, respond with `application/json`. + + :param store: When true (default), persist the interaction and return a `conversation_id`. When false, run ephemerally with no persistence. + + :param conversation_id: Continue an existing stored conversation. Incompatible with message-array `input` and with `store: false`. + + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param accept_header_override: Override the default accept header for this method + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PlatformChatCreateRequest( + input=utils.get_pydantic_model(input, models.Input), + stream=stream, + store=store, + conversation_id=conversation_id, + ) + + req = self._build_request( + method="POST", + path="/api/chat", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value=accept_header_override.value + if accept_header_override is not None + else "application/json;q=1, text/event-stream;q=0", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.PlatformChatCreateRequest + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="platform-chat-create", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Chat"], + extensions={ + "x-codegen-request-body-name": "payload", + "x-glean-experimental": { + "id": "e65a0a77-97a2-4c91-be60-eae7f6238015", + "introduced": "2026-07-14", + }, + "x-visibility": "Public", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.PlatformChatCompletedResponse, http_res + ) + if utils.match_response(http_res, "200", "text/event-stream"): + return http_res.text + if utils.match_response( + http_res, + ["400", "401", "403", "404", "408", "413", "422", "429"], + "application/problem+json", + ): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, ["500", "503"], "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + + async def create_async( + self, + *, + input: Union[models.Input, models.InputTypedDict], + stream: Optional[bool] = False, + store: Optional[bool] = True, + conversation_id: Optional[str] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + accept_header_override: Optional[CreateAcceptEnum] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.PlatformChatCreateResponse: + r"""Create a chat response + + Run an assistant turn. Set `stream` to true to receive server-sent events; otherwise the response is a typed JSON response object. + + + :param input: Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + + :param stream: When true, respond with `text/event-stream`. When false or omitted, respond with `application/json`. + + :param store: When true (default), persist the interaction and return a `conversation_id`. When false, run ephemerally with no persistence. + + :param conversation_id: Continue an existing stored conversation. Incompatible with message-array `input` and with `store: false`. + + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param accept_header_override: Override the default accept header for this method + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PlatformChatCreateRequest( + input=utils.get_pydantic_model(input, models.Input), + stream=stream, + store=store, + conversation_id=conversation_id, + ) + + req = self._build_request_async( + method="POST", + path="/api/chat", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value=accept_header_override.value + if accept_header_override is not None + else "application/json;q=1, text/event-stream;q=0", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.PlatformChatCreateRequest + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="platform-chat-create", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Chat"], + extensions={ + "x-codegen-request-body-name": "payload", + "x-glean-experimental": { + "id": "e65a0a77-97a2-4c91-be60-eae7f6238015", + "introduced": "2026-07-14", + }, + "x-visibility": "Public", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.PlatformChatCompletedResponse, http_res + ) + if utils.match_response(http_res, "200", "text/event-stream"): + return http_res.text + if utils.match_response( + http_res, + ["400", "401", "403", "404", "408", "413", "422", "429"], + "application/problem+json", + ): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, ["500", "503"], "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) diff --git a/src/glean/api_client/client_agents.py b/src/glean/api_client/client_agents.py index 0d5dc422..81424056 100644 --- a/src/glean/api_client/client_agents.py +++ b/src/glean/api_client/client_agents.py @@ -830,6 +830,258 @@ async def retrieve_schemas_async( raise errors.GleanError("Unexpected response received", http_res) + def import_( + self, + *, + agent_id: str, + bundle: Union[models.Bundle, models.BundleTypedDict], + locale: Optional[str] = None, + timezone_offset: Optional[int] = None, + git_commit_sha: Optional[str] = None, + git_author_id: Optional[str] = None, + commit_message: Optional[str] = None, + sync_mode: Optional[models.ImportAgentSyncMode] = None, + is_draft: Optional[bool] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.ImportAgentResponse: + r"""Import an agent + + Imports an [agent](https://developers.glean.com/agents/agents-api) from its on-disk folder representation (spec.yaml, instructions.md, skills/, subagents/) packaged as a zip, and creates or updates the agent. Inverse of the export flow: the folder-to-schema conversion runs server-side. The bundle must contain only regular files; symlinks are resolved by the caller at packaging time. + + :param agent_id: The ID of the agent to create or update. + :param bundle: Zip of the agent folder (spec.yaml, instructions.md, skills/, subagents/) with symlinks dereferenced. + + :param locale: 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`. + :param timezone_offset: The offset of the client's timezone in minutes from UTC. e.g. PDT is -420 because it's 7 hours behind UTC. + :param git_commit_sha: Optional Git commit SHA to associate with this import. + :param git_author_id: Optional VCS commit author ID to associate with this import. + :param commit_message: Optional commit message for the imported version. + :param sync_mode: Whether the imported version is staged (saved without updating the live version) or published directly to the live version. + + :param is_draft: When true, validates and stores a draft preview without publishing (used for PR preview links). Takes precedence over `syncMode`: when `isDraft` is true, `syncMode` is ignored. + + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ImportAgentRequestRequest( + locale=locale, + timezone_offset=timezone_offset, + agent_id=agent_id, + import_agent_request=models.ImportAgentRequest( + bundle=utils.get_pydantic_model(bundle, models.Bundle), + git_commit_sha=git_commit_sha, + git_author_id=git_author_id, + commit_message=commit_message, + sync_mode=sync_mode, + is_draft=is_draft, + ), + ) + + req = self._build_request( + method="POST", + path="/rest/api/v1/agents/{agent_id}/import", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.import_agent_request, + False, + False, + "multipart", + models.ImportAgentRequest, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="importAgent", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Agents"], + extensions={"x-visibility": "Preview"}, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.ImportAgentResponse, http_res) + if utils.match_response(http_res, "404", "application/json"): + response_data = unmarshal_json_response(errors.ErrorResponseData, http_res) + raise errors.ErrorResponse(response_data, http_res) + if utils.match_response(http_res, ["400", "401", "403", "4XX"], "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, ["500", "5XX"], "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + + async def import__async( + self, + *, + agent_id: str, + bundle: Union[models.Bundle, models.BundleTypedDict], + locale: Optional[str] = None, + timezone_offset: Optional[int] = None, + git_commit_sha: Optional[str] = None, + git_author_id: Optional[str] = None, + commit_message: Optional[str] = None, + sync_mode: Optional[models.ImportAgentSyncMode] = None, + is_draft: Optional[bool] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.ImportAgentResponse: + r"""Import an agent + + Imports an [agent](https://developers.glean.com/agents/agents-api) from its on-disk folder representation (spec.yaml, instructions.md, skills/, subagents/) packaged as a zip, and creates or updates the agent. Inverse of the export flow: the folder-to-schema conversion runs server-side. The bundle must contain only regular files; symlinks are resolved by the caller at packaging time. + + :param agent_id: The ID of the agent to create or update. + :param bundle: Zip of the agent folder (spec.yaml, instructions.md, skills/, subagents/) with symlinks dereferenced. + + :param locale: 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`. + :param timezone_offset: The offset of the client's timezone in minutes from UTC. e.g. PDT is -420 because it's 7 hours behind UTC. + :param git_commit_sha: Optional Git commit SHA to associate with this import. + :param git_author_id: Optional VCS commit author ID to associate with this import. + :param commit_message: Optional commit message for the imported version. + :param sync_mode: Whether the imported version is staged (saved without updating the live version) or published directly to the live version. + + :param is_draft: When true, validates and stores a draft preview without publishing (used for PR preview links). Takes precedence over `syncMode`: when `isDraft` is true, `syncMode` is ignored. + + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ImportAgentRequestRequest( + locale=locale, + timezone_offset=timezone_offset, + agent_id=agent_id, + import_agent_request=models.ImportAgentRequest( + bundle=utils.get_pydantic_model(bundle, models.Bundle), + git_commit_sha=git_commit_sha, + git_author_id=git_author_id, + commit_message=commit_message, + sync_mode=sync_mode, + is_draft=is_draft, + ), + ) + + req = self._build_request_async( + method="POST", + path="/rest/api/v1/agents/{agent_id}/import", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.import_agent_request, + False, + False, + "multipart", + models.ImportAgentRequest, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="importAgent", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Agents"], + extensions={"x-visibility": "Preview"}, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.ImportAgentResponse, http_res) + if utils.match_response(http_res, "404", "application/json"): + response_data = unmarshal_json_response(errors.ErrorResponseData, http_res) + raise errors.ErrorResponse(response_data, http_res) + if utils.match_response(http_res, ["400", "401", "403", "4XX"], "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, ["500", "5XX"], "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + def list( self, *, @@ -1108,9 +1360,14 @@ def run_stream( response_data: Any = None if utils.match_response(http_res, "200", "text/event-stream"): return http_res.text - if utils.match_response(http_res, ["404", "409", "422"], "application/json"): + if utils.match_response(http_res, ["404", "409"], "application/json"): response_data = unmarshal_json_response(errors.ErrorResponseData, http_res) raise errors.ErrorResponse(response_data, http_res) + if utils.match_response(http_res, "422", "application/json"): + response_data = unmarshal_json_response( + errors.UnauthorizedAgentToolsErrorData, http_res + ) + raise errors.UnauthorizedAgentToolsError(response_data, http_res) if utils.match_response(http_res, ["400", "403", "4XX"], "*"): http_res_text = utils.stream_to_text(http_res) raise errors.GleanError("API error occurred", http_res, http_res_text) @@ -1212,9 +1469,14 @@ async def run_stream_async( response_data: Any = None if utils.match_response(http_res, "200", "text/event-stream"): return http_res.text - if utils.match_response(http_res, ["404", "409", "422"], "application/json"): + if utils.match_response(http_res, ["404", "409"], "application/json"): response_data = unmarshal_json_response(errors.ErrorResponseData, http_res) raise errors.ErrorResponse(response_data, http_res) + if utils.match_response(http_res, "422", "application/json"): + response_data = unmarshal_json_response( + errors.UnauthorizedAgentToolsErrorData, http_res + ) + raise errors.UnauthorizedAgentToolsError(response_data, http_res) if utils.match_response(http_res, ["400", "403", "4XX"], "*"): http_res_text = await utils.stream_to_text_async(http_res) raise errors.GleanError("API error occurred", http_res, http_res_text) @@ -1313,11 +1575,15 @@ def run( retry_config=retry_config, ) + response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.AgentRunWaitResponse, http_res) - if utils.match_response( - http_res, ["400", "403", "404", "409", "422", "4XX"], "*" - ): + if utils.match_response(http_res, "422", "application/json"): + response_data = unmarshal_json_response( + errors.UnauthorizedAgentToolsErrorData, http_res + ) + raise errors.UnauthorizedAgentToolsError(response_data, http_res) + if utils.match_response(http_res, ["400", "403", "404", "409", "4XX"], "*"): http_res_text = utils.stream_to_text(http_res) raise errors.GleanError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, ["500", "5XX"], "*"): @@ -1415,11 +1681,15 @@ async def run_async( retry_config=retry_config, ) + response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.AgentRunWaitResponse, http_res) - if utils.match_response( - http_res, ["400", "403", "404", "409", "422", "4XX"], "*" - ): + if utils.match_response(http_res, "422", "application/json"): + response_data = unmarshal_json_response( + errors.UnauthorizedAgentToolsErrorData, http_res + ) + raise errors.UnauthorizedAgentToolsError(response_data, http_res) + if utils.match_response(http_res, ["400", "403", "404", "409", "4XX"], "*"): http_res_text = await utils.stream_to_text_async(http_res) raise errors.GleanError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, ["500", "5XX"], "*"): diff --git a/src/glean/api_client/client_chat.py b/src/glean/api_client/client_chat.py index afc4f4eb..1095d5f1 100644 --- a/src/glean/api_client/client_chat.py +++ b/src/glean/api_client/client_chat.py @@ -7,7 +7,7 @@ from glean.api_client.utils import get_security_from_env from glean.api_client.utils.unmarshal_json_response import unmarshal_json_response import httpx -from typing import Iterable, List, Mapping, Optional, Union +from typing import Any, Iterable, List, Mapping, Optional, Union class ClientChat(BaseSDK): @@ -788,9 +788,17 @@ def retrieve( retry_config=retry_config, ) + response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.GetChatResponse, http_res) - if utils.match_response(http_res, ["400", "401", "403", "429", "4XX"], "*"): + if utils.match_response(http_res, "403", "application/json"): + response_data = unmarshal_json_response( + errors.AccessRequestPermissionDeniedResponseErrorData, http_res + ) + raise errors.AccessRequestPermissionDeniedResponseError( + response_data, http_res + ) + if utils.match_response(http_res, ["400", "401", "429", "4XX"], "*"): http_res_text = utils.stream_to_text(http_res) raise errors.GleanError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): @@ -888,9 +896,17 @@ async def retrieve_async( retry_config=retry_config, ) + response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.GetChatResponse, http_res) - if utils.match_response(http_res, ["400", "401", "403", "429", "4XX"], "*"): + if utils.match_response(http_res, "403", "application/json"): + response_data = unmarshal_json_response( + errors.AccessRequestPermissionDeniedResponseErrorData, http_res + ) + raise errors.AccessRequestPermissionDeniedResponseError( + response_data, http_res + ) + if utils.match_response(http_res, ["400", "401", "429", "4XX"], "*"): http_res_text = await utils.stream_to_text_async(http_res) raise errors.GleanError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): diff --git a/src/glean/api_client/errors/__init__.py b/src/glean/api_client/errors/__init__.py index 56e241a9..5e260b86 100644 --- a/src/glean/api_client/errors/__init__.py +++ b/src/glean/api_client/errors/__init__.py @@ -6,6 +6,10 @@ from glean.api_client.utils.dynamic_imports import lazy_getattr, lazy_dir if TYPE_CHECKING: + from .accessrequestpermissiondeniedresponse_error import ( + AccessRequestPermissionDeniedResponseError, + AccessRequestPermissionDeniedResponseErrorData, + ) from .collectionerror import CollectionError, CollectionErrorData from .errorinforesponse import ErrorInfoResponse, ErrorInfoResponseData from .errorresponse import ErrorResponse, ErrorResponseData @@ -16,9 +20,19 @@ PlatformProblemDetailError, PlatformProblemDetailErrorData, ) + from .platformunauthorizedagenttoolsproblem_error import ( + PlatformUnauthorizedAgentToolsProblemError, + PlatformUnauthorizedAgentToolsProblemErrorData, + ) from .responsevalidationerror import ResponseValidationError + from .unauthorizedagenttoolserror import ( + UnauthorizedAgentToolsError, + UnauthorizedAgentToolsErrorData, + ) __all__ = [ + "AccessRequestPermissionDeniedResponseError", + "AccessRequestPermissionDeniedResponseErrorData", "CollectionError", "CollectionErrorData", "ErrorInfoResponse", @@ -32,10 +46,16 @@ "NoResponseError", "PlatformProblemDetailError", "PlatformProblemDetailErrorData", + "PlatformUnauthorizedAgentToolsProblemError", + "PlatformUnauthorizedAgentToolsProblemErrorData", "ResponseValidationError", + "UnauthorizedAgentToolsError", + "UnauthorizedAgentToolsErrorData", ] _dynamic_imports: dict[str, str] = { + "AccessRequestPermissionDeniedResponseError": ".accessrequestpermissiondeniedresponse_error", + "AccessRequestPermissionDeniedResponseErrorData": ".accessrequestpermissiondeniedresponse_error", "CollectionError": ".collectionerror", "CollectionErrorData": ".collectionerror", "ErrorInfoResponse": ".errorinforesponse", @@ -48,7 +68,11 @@ "NoResponseError": ".no_response_error", "PlatformProblemDetailError": ".platformproblemdetail_error", "PlatformProblemDetailErrorData": ".platformproblemdetail_error", + "PlatformUnauthorizedAgentToolsProblemError": ".platformunauthorizedagenttoolsproblem_error", + "PlatformUnauthorizedAgentToolsProblemErrorData": ".platformunauthorizedagenttoolsproblem_error", "ResponseValidationError": ".responsevalidationerror", + "UnauthorizedAgentToolsError": ".unauthorizedagenttoolserror", + "UnauthorizedAgentToolsErrorData": ".unauthorizedagenttoolserror", } diff --git a/src/glean/api_client/errors/accessrequestpermissiondeniedresponse_error.py b/src/glean/api_client/errors/accessrequestpermissiondeniedresponse_error.py new file mode 100644 index 00000000..45d07ad0 --- /dev/null +++ b/src/glean/api_client/errors/accessrequestpermissiondeniedresponse_error.py @@ -0,0 +1,42 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from dataclasses import dataclass, field +from glean.api_client.errors import GleanBaseError +from glean.api_client.models import ( + accessrequestpermissiondeniedresponse_error as models_accessrequestpermissiondeniedresponse_error, + person as models_person, + userrole as models_userrole, +) +from glean.api_client.types import BaseModel +import httpx +import pydantic +from typing import List, Optional +from typing_extensions import Annotated + + +class AccessRequestPermissionDeniedResponseErrorData(BaseModel): + error_type: Annotated[ + models_accessrequestpermissiondeniedresponse_error.AccessRequestPermissionDeniedResponseErrorType, + pydantic.Field(alias="errorType"), + ] + created_by: Annotated[models_person.Person, pydantic.Field(alias="createdBy")] + requestable_roles: Annotated[ + List[models_userrole.UserRole], pydantic.Field(alias="requestableRoles") + ] + has_pending_request: Annotated[bool, pydantic.Field(alias="hasPendingRequest")] + + +@dataclass(unsafe_hash=True) +class AccessRequestPermissionDeniedResponseError(GleanBaseError): + data: AccessRequestPermissionDeniedResponseErrorData = field(hash=False) + + def __init__( + self, + data: AccessRequestPermissionDeniedResponseErrorData, + raw_response: httpx.Response, + body: Optional[str] = None, + ): + message = body or raw_response.text + super().__init__(message, raw_response, body) + object.__setattr__(self, "data", data) diff --git a/src/glean/api_client/errors/platformunauthorizedagenttoolsproblem_error.py b/src/glean/api_client/errors/platformunauthorizedagenttoolsproblem_error.py new file mode 100644 index 00000000..52de3843 --- /dev/null +++ b/src/glean/api_client/errors/platformunauthorizedagenttoolsproblem_error.py @@ -0,0 +1,55 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from dataclasses import dataclass, field +from glean.api_client.errors import GleanBaseError +from glean.api_client.models import ( + platformauthenticationsuggestion as models_platformauthenticationsuggestion, + platformproblemdetailcode as models_platformproblemdetailcode, + platformproblemdetailerror as models_platformproblemdetailerror, +) +from glean.api_client.types import BaseModel +import httpx +from typing import List, Optional + + +class PlatformUnauthorizedAgentToolsProblemErrorData(BaseModel): + type: str + r"""URI identifying the error type.""" + title: str + r"""Short, human-readable summary of the error.""" + status: int + r"""HTTP status code mirrored from the response.""" + detail: str + r"""Human-readable explanation specific to this occurrence.""" + code: models_platformproblemdetailcode.PlatformProblemDetailCode + r"""Stable machine-readable error code.""" + request_id: str + r"""Platform-generated request ID for support correlation.""" + authentication_suggestions: List[ + models_platformauthenticationsuggestion.PlatformAuthenticationSuggestion + ] + r"""One entry per tool the caller must authorize.""" + documentation_url: Optional[str] = None + r"""Direct URL to documentation for this error code.""" + errors: Optional[ + List[models_platformproblemdetailerror.PlatformProblemDetailError] + ] = None + r"""Field-level validation problems, one entry per offending field.""" + + +@dataclass(unsafe_hash=True) +class PlatformUnauthorizedAgentToolsProblemError(GleanBaseError): + r"""Problem detail extended with `authentication_suggestions` naming each tool the caller must authorize.""" + + data: PlatformUnauthorizedAgentToolsProblemErrorData = field(hash=False) + + def __init__( + self, + data: PlatformUnauthorizedAgentToolsProblemErrorData, + raw_response: httpx.Response, + body: Optional[str] = None, + ): + message = body or raw_response.text + super().__init__(message, raw_response, body) + object.__setattr__(self, "data", data) diff --git a/src/glean/api_client/errors/unauthorizedagenttoolserror.py b/src/glean/api_client/errors/unauthorizedagenttoolserror.py new file mode 100644 index 00000000..0207c42c --- /dev/null +++ b/src/glean/api_client/errors/unauthorizedagenttoolserror.py @@ -0,0 +1,39 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from dataclasses import dataclass, field +from glean.api_client.errors import GleanBaseError +from glean.api_client.models import servertoolrequest as models_servertoolrequest +from glean.api_client.types import BaseModel +import httpx +import pydantic +from typing import List, Optional +from typing_extensions import Annotated + + +class UnauthorizedAgentToolsErrorData(BaseModel): + message: str + r"""Human-readable description of the failure.""" + authentication_suggestions: Annotated[ + List[models_servertoolrequest.ServerToolRequest], + pydantic.Field(alias="authenticationSuggestions"), + ] + r"""One entry per tool the caller must authorize.""" + + +@dataclass(unsafe_hash=True) +class UnauthorizedAgentToolsError(GleanBaseError): + r"""Returned when the agent has tools the caller must authorize before the run can start. Each entry in `authenticationSuggestions` names one such tool; POST its `serverId` to `/tool-servers/{serverId}/auth` with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to, then retry the run once OAuth completes.""" + + data: UnauthorizedAgentToolsErrorData = field(hash=False) + + def __init__( + self, + data: UnauthorizedAgentToolsErrorData, + raw_response: httpx.Response, + body: Optional[str] = None, + ): + fallback = body or raw_response.text + message = str(data.message) or fallback + super().__init__(message, raw_response, body) + object.__setattr__(self, "data", data) diff --git a/src/glean/api_client/indexing_datasource.py b/src/glean/api_client/indexing_datasource.py index 98889628..a0e769b2 100644 --- a/src/glean/api_client/indexing_datasource.py +++ b/src/glean/api_client/indexing_datasource.py @@ -56,7 +56,7 @@ def status( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, allow_empty_value=None, @@ -88,7 +88,7 @@ def status( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( models.DebugDatasourceStatusResponse, http_res ) @@ -147,7 +147,7 @@ async def status_async( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, allow_empty_value=None, @@ -179,7 +179,7 @@ async def status_async( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( models.DebugDatasourceStatusResponse, http_res ) diff --git a/src/glean/api_client/indexing_documents.py b/src/glean/api_client/indexing_documents.py index e296949f..6f044b6c 100644 --- a/src/glean/api_client/indexing_documents.py +++ b/src/glean/api_client/indexing_documents.py @@ -1091,7 +1091,7 @@ def debug( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -1130,7 +1130,7 @@ def debug( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.DebugDocumentResponse, http_res) if utils.match_response(http_res, ["400", "401", "4XX"], "*"): http_res_text = utils.stream_to_text(http_res) @@ -1195,7 +1195,7 @@ async def debug_async( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -1234,7 +1234,7 @@ async def debug_async( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.DebugDocumentResponse, http_res) if utils.match_response(http_res, ["400", "401", "4XX"], "*"): http_res_text = await utils.stream_to_text_async(http_res) @@ -1301,7 +1301,7 @@ def debug_many( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -1340,7 +1340,7 @@ def debug_many( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.DebugDocumentsResponse, http_res) if utils.match_response(http_res, ["400", "401", "4XX"], "*"): http_res_text = utils.stream_to_text(http_res) @@ -1407,7 +1407,7 @@ async def debug_many_async( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -1446,7 +1446,7 @@ async def debug_many_async( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.DebugDocumentsResponse, http_res) if utils.match_response(http_res, ["400", "401", "4XX"], "*"): http_res_text = await utils.stream_to_text_async(http_res) @@ -2137,7 +2137,7 @@ def debug_events( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -2176,7 +2176,7 @@ def debug_events( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( models.DebugDocumentLifecycleResponse, http_res ) @@ -2247,7 +2247,7 @@ async def debug_events_async( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -2286,7 +2286,7 @@ async def debug_events_async( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( models.DebugDocumentLifecycleResponse, http_res ) diff --git a/src/glean/api_client/models/__init__.py b/src/glean/api_client/models/__init__.py index 029adafe..c67a9167 100644 --- a/src/glean/api_client/models/__init__.py +++ b/src/glean/api_client/models/__init__.py @@ -71,6 +71,9 @@ from glean.api_client.utils.dynamic_imports import lazy_getattr, lazy_dir if TYPE_CHECKING: + from .accessrequestpermissiondeniedresponse_error import ( + AccessRequestPermissionDeniedResponseErrorType, + ) from .actionauthtype import ActionAuthType from .actionpackauthstatus import ( ActionPackAuthStatus, @@ -189,6 +192,7 @@ AuthConfigStatus, AuthConfigType, AuthConfigTypedDict, + AuthHeaderType, GrantType, TokenEndpointAuthMethod, ) @@ -992,6 +996,10 @@ GetToolServerAuthStatusRequest, GetToolServerAuthStatusRequestTypedDict, ) + from .gettoolservertoolsop import ( + GetToolServerToolsRequest, + GetToolServerToolsRequestTypedDict, + ) from .getusercountrequest import GetUserCountRequest, GetUserCountRequestTypedDict from .getusercountresponse import ( GetUserCountResponse, @@ -1012,6 +1020,19 @@ from .hotword import Hotword, HotwordTypedDict from .hotwordproximity import HotwordProximity, HotwordProximityTypedDict from .iconconfig import IconConfig, IconConfigTypedDict, IconType + from .importagentop import ( + ImportAgentRequestRequest, + ImportAgentRequestRequestTypedDict, + ) + from .importagentrequest import ( + Bundle, + BundleTypedDict, + ImportAgentRequest, + ImportAgentRequestTypedDict, + ) + from .importagentresponse import ImportAgentResponse, ImportAgentResponseTypedDict + from .importagentstatus import ImportAgentStatus + from .importagentsyncmode import ImportAgentSyncMode from .indexdocumentrequest import ( IndexDocumentRequest, IndexDocumentRequestTypedDict, @@ -1231,6 +1252,16 @@ PlatformAgentsGetRequest, PlatformAgentsGetRequestTypedDict, ) + from .platform_chat_createop import ( + PlatformChatCreateResponse, + PlatformChatCreateResponseTypedDict, + ) + from .platform_search_filtersop import ( + PlatformSearchFiltersRequest, + PlatformSearchFiltersRequestTypedDict, + PlatformSearchFiltersResponseResponse, + PlatformSearchFiltersResponseResponseTypedDict, + ) from .platform_skills_create_versionop import ( PlatformSkillsCreateVersionRequest, PlatformSkillsCreateVersionRequestTypedDict, @@ -1263,6 +1294,14 @@ PlatformSkillsListRequest, PlatformSkillsListRequestTypedDict, ) + from .platform_skills_preview_sourceop import ( + PlatformSkillsPreviewSourceResponse, + PlatformSkillsPreviewSourceResponseTypedDict, + ) + from .platform_skills_updateop import ( + PlatformSkillsUpdateRequest, + PlatformSkillsUpdateRequestTypedDict, + ) from .platformactionsummary import ( PlatformActionSummary, PlatformActionSummaryTypedDict, @@ -1298,8 +1337,86 @@ PlatformAgentsSearchResponse, PlatformAgentsSearchResponseTypedDict, ) + from .platformauthenticationsuggestion import ( + PlatformAuthenticationSuggestion, + PlatformAuthenticationSuggestionTypedDict, + ) + from .platformchatcitationannotation import ( + PlatformChatCitationAnnotation, + PlatformChatCitationAnnotationType, + PlatformChatCitationAnnotationTypedDict, + ) + from .platformchatcitationsnippet import ( + PlatformChatCitationSnippet, + PlatformChatCitationSnippetTypedDict, + ) + from .platformchatcitationsource import ( + PlatformChatCitationSource, + PlatformChatCitationSourceTypedDict, + ) + from .platformchatcompletedresponse import ( + Object, + PlatformChatCompletedResponse, + PlatformChatCompletedResponseStatus, + PlatformChatCompletedResponseTypedDict, + ) + from .platformchatcreaterequest import ( + Input, + InputTypedDict, + PlatformChatCreateRequest, + PlatformChatCreateRequestTypedDict, + ) + from .platformchatcustomentitysource import ( + PlatformChatCustomEntitySource, + PlatformChatCustomEntitySourceType, + PlatformChatCustomEntitySourceTypedDict, + ) + from .platformchatdocumentsource import ( + PlatformChatDocumentSource, + PlatformChatDocumentSourceDocument1, + PlatformChatDocumentSourceDocument1TypedDict, + PlatformChatDocumentSourceDocument2, + PlatformChatDocumentSourceDocument2TypedDict, + PlatformChatDocumentSourceType1, + PlatformChatDocumentSourceType2, + PlatformChatDocumentSourceTypedDict, + ) + from .platformchatfilesource import ( + PlatformChatFileSource, + PlatformChatFileSourceType, + PlatformChatFileSourceTypedDict, + ) + from .platformchatinputmessage import ( + PlatformChatInputMessage, + PlatformChatInputMessageRole, + PlatformChatInputMessageTypedDict, + ) + from .platformchatoutputmessage import ( + PlatformChatOutputMessage, + PlatformChatOutputMessageRole, + PlatformChatOutputMessageType, + PlatformChatOutputMessageTypedDict, + ) + from .platformchatoutputtextcontent import ( + PlatformChatOutputTextContent, + PlatformChatOutputTextContentType, + PlatformChatOutputTextContentTypedDict, + ) + from .platformchatpersonsource import ( + PlatformChatPersonSource, + PlatformChatPersonSourceType, + PlatformChatPersonSourceTypedDict, + ) from .platformcontenttype import PlatformContentType + from .platformdatasourcefilterinfo import ( + PlatformDatasourceFilterInfo, + PlatformDatasourceFilterInfoTypedDict, + ) from .platformfilter import PlatformFilter, PlatformFilterTypedDict + from .platformfilterfieldinfo import ( + PlatformFilterFieldInfo, + PlatformFilterFieldInfoTypedDict, + ) from .platformfilteroperator import PlatformFilterOperator from .platformmessage import PlatformMessage, PlatformMessageTypedDict from .platformmessagerole import PlatformMessageRole @@ -1317,6 +1434,10 @@ PlatformProblemDetailErrorTypedDict, ) from .platformresult import PlatformResult, PlatformResultTypedDict + from .platformsearchfiltersresponse import ( + PlatformSearchFiltersResponse, + PlatformSearchFiltersResponseTypedDict, + ) from .platformsearchrequest import ( PlatformSearchRequest, PlatformSearchRequestTypedDict, @@ -1345,12 +1466,44 @@ PlatformSkillsListResponse, PlatformSkillsListResponseTypedDict, ) + from .platformskillsourcepreview import ( + PlatformSkillSourcePreview, + PlatformSkillSourcePreviewTypedDict, + ) + from .platformskillsourcepreviewfailure import ( + PlatformSkillSourcePreviewFailure, + PlatformSkillSourcePreviewFailureTypedDict, + ) + from .platformskillsourcepreviewfailurecode import ( + PlatformSkillSourcePreviewFailureCode, + ) + from .platformskillsourcepreviewfile import ( + PlatformSkillSourcePreviewFile, + PlatformSkillSourcePreviewFileTypedDict, + ) + from .platformskillsourcepreviewrequest import ( + PlatformSkillSourcePreviewRequest, + PlatformSkillSourcePreviewRequestTypedDict, + ) + from .platformskillsourcepreviewresponse import ( + PlatformSkillSourcePreviewResponse, + PlatformSkillSourcePreviewResponseTypedDict, + ) from .platformskillsourceprovenance import ( PlatformSkillSourceProvenance, PlatformSkillSourceProvenanceTypedDict, ) from .platformskillstatus import PlatformSkillStatus from .platformskillsyncstatus import PlatformSkillSyncStatus + from .platformskillupdaterequest import ( + PlatformSkillUpdateRequest, + PlatformSkillUpdateRequestTypedDict, + ) + from .platformskillupdateresponse import ( + PlatformSkillUpdateResponse, + PlatformSkillUpdateResponseTypedDict, + ) + from .platformskillupdatestatus import PlatformSkillUpdateStatus from .platformskillvalidationfile import ( PlatformSkillValidationFile, PlatformSkillValidationFileTypedDict, @@ -1369,10 +1522,6 @@ PlatformSkillValidationResponse, PlatformSkillValidationResponseTypedDict, ) - from .platformskillvalidationwarning import ( - PlatformSkillValidationWarning, - PlatformSkillValidationWarningTypedDict, - ) from .platformskillversion import ( PlatformSkillVersion, PlatformSkillVersionTypedDict, @@ -1396,6 +1545,7 @@ PlatformSkillVersionsListResponseTypedDict, ) from .platformtimerange import PlatformTimeRange, PlatformTimeRangeTypedDict + from .platformwarning import PlatformWarning, PlatformWarningTypedDict from .possiblevalue import PossibleValue, PossibleValueTypedDict from .post_api_index_v1_debug_datasource_document_eventsop import ( PostAPIIndexV1DebugDatasourceDocumentEventsRequest, @@ -1604,6 +1754,12 @@ TimeRangeFilterTypedDict, ) from .tool import Tool, ToolType, ToolTypedDict + from .toolannotations import ToolAnnotations, ToolAnnotationsTypedDict + from .tooldefinition import ToolDefinition, ToolDefinitionTypedDict + from .tooldefinitionsresponse import ( + ToolDefinitionsResponse, + ToolDefinitionsResponseTypedDict, + ) from .toolinfo import ToolInfo, ToolInfoTypedDict from .toolmetadata import ( ActionTypeSource, @@ -1736,7 +1892,7 @@ VerifyRequestAction, VerifyRequestTypedDict, ) - from .viewerinfo import Role, ViewerInfo, ViewerInfoTypedDict + from .viewerinfo import ViewerInfo, ViewerInfoRole, ViewerInfoTypedDict from .workflow import Workflow, WorkflowTypedDict from .workflowfeedbackinfo import ( WorkflowFeedbackInfo, @@ -1801,6 +1957,7 @@ __all__ = [ + "AccessRequestPermissionDeniedResponseErrorType", "ActionAuthType", "ActionPackAuthStatus", "ActionPackAuthStatusResponse", @@ -1897,6 +2054,7 @@ "AuthConfigTypedDict", "AuthContext", "AuthContextTypedDict", + "AuthHeaderType", "AuthStatus", "AuthToken", "AuthTokenTypedDict", @@ -1946,6 +2104,8 @@ "BulkUploadHistoryEvent", "BulkUploadHistoryEventStatus", "BulkUploadHistoryEventTypedDict", + "Bundle", + "BundleTypedDict", "CalendarAttendee", "CalendarAttendeeTypedDict", "CalendarAttendees", @@ -2482,6 +2642,8 @@ "GetShortcutResponseTypedDict", "GetToolServerAuthStatusRequest", "GetToolServerAuthStatusRequestTypedDict", + "GetToolServerToolsRequest", + "GetToolServerToolsRequestTypedDict", "GetUserCountRequest", "GetUserCountRequestTypedDict", "GetUserCountResponse", @@ -2536,6 +2698,14 @@ "IconType", "Identity", "IdentityTypedDict", + "ImportAgentRequest", + "ImportAgentRequestRequest", + "ImportAgentRequestRequestTypedDict", + "ImportAgentRequestTypedDict", + "ImportAgentResponse", + "ImportAgentResponseTypedDict", + "ImportAgentStatus", + "ImportAgentSyncMode", "IncludeType", "IndexDocumentRequest", "IndexDocumentRequestTypedDict", @@ -2555,11 +2725,13 @@ "IndexUserRequestTypedDict", "IndexingShortcut", "IndexingShortcutTypedDict", + "Input", "InputOptions", "InputOptionsTimePeriodType", "InputOptionsTypedDict", "InputSchema", "InputSchemaTypedDict", + "InputTypedDict", "InsightsAssistantRequest", "InsightsAssistantRequestTypedDict", "InsightsChatSummary", @@ -2673,6 +2845,7 @@ "MessagesResponse", "MessagesResponseTypedDict", "Mode", + "Object", "ObjectDefinition", "ObjectDefinitionTypedDict", "ObjectPermissions", @@ -2758,8 +2931,55 @@ "PlatformAgentsSearchRequestTypedDict", "PlatformAgentsSearchResponse", "PlatformAgentsSearchResponseTypedDict", + "PlatformAuthenticationSuggestion", + "PlatformAuthenticationSuggestionTypedDict", + "PlatformChatCitationAnnotation", + "PlatformChatCitationAnnotationType", + "PlatformChatCitationAnnotationTypedDict", + "PlatformChatCitationSnippet", + "PlatformChatCitationSnippetTypedDict", + "PlatformChatCitationSource", + "PlatformChatCitationSourceTypedDict", + "PlatformChatCompletedResponse", + "PlatformChatCompletedResponseStatus", + "PlatformChatCompletedResponseTypedDict", + "PlatformChatCreateRequest", + "PlatformChatCreateRequestTypedDict", + "PlatformChatCreateResponse", + "PlatformChatCreateResponseTypedDict", + "PlatformChatCustomEntitySource", + "PlatformChatCustomEntitySourceType", + "PlatformChatCustomEntitySourceTypedDict", + "PlatformChatDocumentSource", + "PlatformChatDocumentSourceDocument1", + "PlatformChatDocumentSourceDocument1TypedDict", + "PlatformChatDocumentSourceDocument2", + "PlatformChatDocumentSourceDocument2TypedDict", + "PlatformChatDocumentSourceType1", + "PlatformChatDocumentSourceType2", + "PlatformChatDocumentSourceTypedDict", + "PlatformChatFileSource", + "PlatformChatFileSourceType", + "PlatformChatFileSourceTypedDict", + "PlatformChatInputMessage", + "PlatformChatInputMessageRole", + "PlatformChatInputMessageTypedDict", + "PlatformChatOutputMessage", + "PlatformChatOutputMessageRole", + "PlatformChatOutputMessageType", + "PlatformChatOutputMessageTypedDict", + "PlatformChatOutputTextContent", + "PlatformChatOutputTextContentType", + "PlatformChatOutputTextContentTypedDict", + "PlatformChatPersonSource", + "PlatformChatPersonSourceType", + "PlatformChatPersonSourceTypedDict", "PlatformContentType", + "PlatformDatasourceFilterInfo", + "PlatformDatasourceFilterInfoTypedDict", "PlatformFilter", + "PlatformFilterFieldInfo", + "PlatformFilterFieldInfoTypedDict", "PlatformFilterOperator", "PlatformFilterTypedDict", "PlatformMessage", @@ -2774,6 +2994,12 @@ "PlatformProblemDetailErrorTypedDict", "PlatformResult", "PlatformResultTypedDict", + "PlatformSearchFiltersRequest", + "PlatformSearchFiltersRequestTypedDict", + "PlatformSearchFiltersResponse", + "PlatformSearchFiltersResponseResponse", + "PlatformSearchFiltersResponseResponseTypedDict", + "PlatformSearchFiltersResponseTypedDict", "PlatformSearchRequest", "PlatformSearchRequestTypedDict", "PlatformSearchResponse", @@ -2788,11 +3014,27 @@ "PlatformSkillGetResponse", "PlatformSkillGetResponseTypedDict", "PlatformSkillOrigin", + "PlatformSkillSourcePreview", + "PlatformSkillSourcePreviewFailure", + "PlatformSkillSourcePreviewFailureCode", + "PlatformSkillSourcePreviewFailureTypedDict", + "PlatformSkillSourcePreviewFile", + "PlatformSkillSourcePreviewFileTypedDict", + "PlatformSkillSourcePreviewRequest", + "PlatformSkillSourcePreviewRequestTypedDict", + "PlatformSkillSourcePreviewResponse", + "PlatformSkillSourcePreviewResponseTypedDict", + "PlatformSkillSourcePreviewTypedDict", "PlatformSkillSourceProvenance", "PlatformSkillSourceProvenanceTypedDict", "PlatformSkillStatus", "PlatformSkillSyncStatus", "PlatformSkillTypedDict", + "PlatformSkillUpdateRequest", + "PlatformSkillUpdateRequestTypedDict", + "PlatformSkillUpdateResponse", + "PlatformSkillUpdateResponseTypedDict", + "PlatformSkillUpdateStatus", "PlatformSkillValidationFile", "PlatformSkillValidationFileTypedDict", "PlatformSkillValidationMetadata", @@ -2803,8 +3045,6 @@ "PlatformSkillValidationRequestTypedDict", "PlatformSkillValidationResponse", "PlatformSkillValidationResponseTypedDict", - "PlatformSkillValidationWarning", - "PlatformSkillValidationWarningTypedDict", "PlatformSkillVersion", "PlatformSkillVersionCreateRequest", "PlatformSkillVersionCreateRequestFile", @@ -2837,8 +3077,14 @@ "PlatformSkillsListResponseTypedDict", "PlatformSkillsListVersionsRequest", "PlatformSkillsListVersionsRequestTypedDict", + "PlatformSkillsPreviewSourceResponse", + "PlatformSkillsPreviewSourceResponseTypedDict", + "PlatformSkillsUpdateRequest", + "PlatformSkillsUpdateRequestTypedDict", "PlatformTimeRange", "PlatformTimeRangeTypedDict", + "PlatformWarning", + "PlatformWarningTypedDict", "PossibleValue", "PossibleValueTypedDict", "PostAPIIndexV1DebugDatasourceDocumentEventsRequest", @@ -2932,7 +3178,6 @@ "ResultsDescriptionTypedDict", "ResultsResponse", "ResultsResponseTypedDict", - "Role", "RotateDatasourceCredentialsRequest", "RotateDatasourceCredentialsRequestRequest", "RotateDatasourceCredentialsRequestRequestTypedDict", @@ -3056,6 +3301,12 @@ "TimeRangeTypedDict", "TokenEndpointAuthMethod", "Tool", + "ToolAnnotations", + "ToolAnnotationsTypedDict", + "ToolDefinition", + "ToolDefinitionTypedDict", + "ToolDefinitionsResponse", + "ToolDefinitionsResponseTypedDict", "ToolInfo", "ToolInfoTypedDict", "ToolMetadata", @@ -3165,6 +3416,7 @@ "VerifyRequestRequestTypedDict", "VerifyRequestTypedDict", "ViewerInfo", + "ViewerInfoRole", "ViewerInfoTypedDict", "WarningType", "Workflow", @@ -3183,6 +3435,7 @@ ] _dynamic_imports: dict[str, str] = { + "AccessRequestPermissionDeniedResponseErrorType": ".accessrequestpermissiondeniedresponse_error", "ActionAuthType": ".actionauthtype", "ActionPackAuthStatus": ".actionpackauthstatus", "ActionPackAuthStatusTypedDict": ".actionpackauthstatus", @@ -3275,6 +3528,7 @@ "AuthConfigStatus": ".authconfig", "AuthConfigType": ".authconfig", "AuthConfigTypedDict": ".authconfig", + "AuthHeaderType": ".authconfig", "GrantType": ".authconfig", "TokenEndpointAuthMethod": ".authconfig", "AuthContext": ".authcontext", @@ -3860,6 +4114,8 @@ "GetShortcutResponseTypedDict": ".getshortcutresponse", "GetToolServerAuthStatusRequest": ".gettoolserverauthstatusop", "GetToolServerAuthStatusRequestTypedDict": ".gettoolserverauthstatusop", + "GetToolServerToolsRequest": ".gettoolservertoolsop", + "GetToolServerToolsRequestTypedDict": ".gettoolservertoolsop", "GetUserCountRequest": ".getusercountrequest", "GetUserCountRequestTypedDict": ".getusercountrequest", "GetUserCountResponse": ".getusercountresponse", @@ -3882,6 +4138,16 @@ "IconConfig": ".iconconfig", "IconConfigTypedDict": ".iconconfig", "IconType": ".iconconfig", + "ImportAgentRequestRequest": ".importagentop", + "ImportAgentRequestRequestTypedDict": ".importagentop", + "Bundle": ".importagentrequest", + "BundleTypedDict": ".importagentrequest", + "ImportAgentRequest": ".importagentrequest", + "ImportAgentRequestTypedDict": ".importagentrequest", + "ImportAgentResponse": ".importagentresponse", + "ImportAgentResponseTypedDict": ".importagentresponse", + "ImportAgentStatus": ".importagentstatus", + "ImportAgentSyncMode": ".importagentsyncmode", "IndexDocumentRequest": ".indexdocumentrequest", "IndexDocumentRequestTypedDict": ".indexdocumentrequest", "IndexDocumentsRequest": ".indexdocumentsrequest", @@ -4061,6 +4327,12 @@ "PlatformAgentsGetSchemasRequestTypedDict": ".platform_agents_get_schemasop", "PlatformAgentsGetRequest": ".platform_agents_getop", "PlatformAgentsGetRequestTypedDict": ".platform_agents_getop", + "PlatformChatCreateResponse": ".platform_chat_createop", + "PlatformChatCreateResponseTypedDict": ".platform_chat_createop", + "PlatformSearchFiltersRequest": ".platform_search_filtersop", + "PlatformSearchFiltersRequestTypedDict": ".platform_search_filtersop", + "PlatformSearchFiltersResponseResponse": ".platform_search_filtersop", + "PlatformSearchFiltersResponseResponseTypedDict": ".platform_search_filtersop", "PlatformSkillsCreateVersionRequest": ".platform_skills_create_versionop", "PlatformSkillsCreateVersionRequestTypedDict": ".platform_skills_create_versionop", "PlatformSkillsGetContentRequest": ".platform_skills_get_contentop", @@ -4079,6 +4351,10 @@ "PlatformSkillsListVersionsRequestTypedDict": ".platform_skills_list_versionsop", "PlatformSkillsListRequest": ".platform_skills_listop", "PlatformSkillsListRequestTypedDict": ".platform_skills_listop", + "PlatformSkillsPreviewSourceResponse": ".platform_skills_preview_sourceop", + "PlatformSkillsPreviewSourceResponseTypedDict": ".platform_skills_preview_sourceop", + "PlatformSkillsUpdateRequest": ".platform_skills_updateop", + "PlatformSkillsUpdateRequestTypedDict": ".platform_skills_updateop", "PlatformActionSummary": ".platformactionsummary", "PlatformActionSummaryTypedDict": ".platformactionsummary", "PlatformAgent": ".platformagent", @@ -4100,9 +4376,57 @@ "PlatformAgentsSearchRequestTypedDict": ".platformagentssearchrequest", "PlatformAgentsSearchResponse": ".platformagentssearchresponse", "PlatformAgentsSearchResponseTypedDict": ".platformagentssearchresponse", + "PlatformAuthenticationSuggestion": ".platformauthenticationsuggestion", + "PlatformAuthenticationSuggestionTypedDict": ".platformauthenticationsuggestion", + "PlatformChatCitationAnnotation": ".platformchatcitationannotation", + "PlatformChatCitationAnnotationType": ".platformchatcitationannotation", + "PlatformChatCitationAnnotationTypedDict": ".platformchatcitationannotation", + "PlatformChatCitationSnippet": ".platformchatcitationsnippet", + "PlatformChatCitationSnippetTypedDict": ".platformchatcitationsnippet", + "PlatformChatCitationSource": ".platformchatcitationsource", + "PlatformChatCitationSourceTypedDict": ".platformchatcitationsource", + "Object": ".platformchatcompletedresponse", + "PlatformChatCompletedResponse": ".platformchatcompletedresponse", + "PlatformChatCompletedResponseStatus": ".platformchatcompletedresponse", + "PlatformChatCompletedResponseTypedDict": ".platformchatcompletedresponse", + "Input": ".platformchatcreaterequest", + "InputTypedDict": ".platformchatcreaterequest", + "PlatformChatCreateRequest": ".platformchatcreaterequest", + "PlatformChatCreateRequestTypedDict": ".platformchatcreaterequest", + "PlatformChatCustomEntitySource": ".platformchatcustomentitysource", + "PlatformChatCustomEntitySourceType": ".platformchatcustomentitysource", + "PlatformChatCustomEntitySourceTypedDict": ".platformchatcustomentitysource", + "PlatformChatDocumentSource": ".platformchatdocumentsource", + "PlatformChatDocumentSourceDocument1": ".platformchatdocumentsource", + "PlatformChatDocumentSourceDocument1TypedDict": ".platformchatdocumentsource", + "PlatformChatDocumentSourceDocument2": ".platformchatdocumentsource", + "PlatformChatDocumentSourceDocument2TypedDict": ".platformchatdocumentsource", + "PlatformChatDocumentSourceType1": ".platformchatdocumentsource", + "PlatformChatDocumentSourceType2": ".platformchatdocumentsource", + "PlatformChatDocumentSourceTypedDict": ".platformchatdocumentsource", + "PlatformChatFileSource": ".platformchatfilesource", + "PlatformChatFileSourceType": ".platformchatfilesource", + "PlatformChatFileSourceTypedDict": ".platformchatfilesource", + "PlatformChatInputMessage": ".platformchatinputmessage", + "PlatformChatInputMessageRole": ".platformchatinputmessage", + "PlatformChatInputMessageTypedDict": ".platformchatinputmessage", + "PlatformChatOutputMessage": ".platformchatoutputmessage", + "PlatformChatOutputMessageRole": ".platformchatoutputmessage", + "PlatformChatOutputMessageType": ".platformchatoutputmessage", + "PlatformChatOutputMessageTypedDict": ".platformchatoutputmessage", + "PlatformChatOutputTextContent": ".platformchatoutputtextcontent", + "PlatformChatOutputTextContentType": ".platformchatoutputtextcontent", + "PlatformChatOutputTextContentTypedDict": ".platformchatoutputtextcontent", + "PlatformChatPersonSource": ".platformchatpersonsource", + "PlatformChatPersonSourceType": ".platformchatpersonsource", + "PlatformChatPersonSourceTypedDict": ".platformchatpersonsource", "PlatformContentType": ".platformcontenttype", + "PlatformDatasourceFilterInfo": ".platformdatasourcefilterinfo", + "PlatformDatasourceFilterInfoTypedDict": ".platformdatasourcefilterinfo", "PlatformFilter": ".platformfilter", "PlatformFilterTypedDict": ".platformfilter", + "PlatformFilterFieldInfo": ".platformfilterfieldinfo", + "PlatformFilterFieldInfoTypedDict": ".platformfilterfieldinfo", "PlatformFilterOperator": ".platformfilteroperator", "PlatformMessage": ".platformmessage", "PlatformMessageTypedDict": ".platformmessage", @@ -4116,6 +4440,8 @@ "PlatformProblemDetailErrorTypedDict": ".platformproblemdetailerror", "PlatformResult": ".platformresult", "PlatformResultTypedDict": ".platformresult", + "PlatformSearchFiltersResponse": ".platformsearchfiltersresponse", + "PlatformSearchFiltersResponseTypedDict": ".platformsearchfiltersresponse", "PlatformSearchRequest": ".platformsearchrequest", "PlatformSearchRequestTypedDict": ".platformsearchrequest", "PlatformSearchResponse": ".platformsearchresponse", @@ -4133,10 +4459,26 @@ "PlatformSkillOrigin": ".platformskillorigin", "PlatformSkillsListResponse": ".platformskillslistresponse", "PlatformSkillsListResponseTypedDict": ".platformskillslistresponse", + "PlatformSkillSourcePreview": ".platformskillsourcepreview", + "PlatformSkillSourcePreviewTypedDict": ".platformskillsourcepreview", + "PlatformSkillSourcePreviewFailure": ".platformskillsourcepreviewfailure", + "PlatformSkillSourcePreviewFailureTypedDict": ".platformskillsourcepreviewfailure", + "PlatformSkillSourcePreviewFailureCode": ".platformskillsourcepreviewfailurecode", + "PlatformSkillSourcePreviewFile": ".platformskillsourcepreviewfile", + "PlatformSkillSourcePreviewFileTypedDict": ".platformskillsourcepreviewfile", + "PlatformSkillSourcePreviewRequest": ".platformskillsourcepreviewrequest", + "PlatformSkillSourcePreviewRequestTypedDict": ".platformskillsourcepreviewrequest", + "PlatformSkillSourcePreviewResponse": ".platformskillsourcepreviewresponse", + "PlatformSkillSourcePreviewResponseTypedDict": ".platformskillsourcepreviewresponse", "PlatformSkillSourceProvenance": ".platformskillsourceprovenance", "PlatformSkillSourceProvenanceTypedDict": ".platformskillsourceprovenance", "PlatformSkillStatus": ".platformskillstatus", "PlatformSkillSyncStatus": ".platformskillsyncstatus", + "PlatformSkillUpdateRequest": ".platformskillupdaterequest", + "PlatformSkillUpdateRequestTypedDict": ".platformskillupdaterequest", + "PlatformSkillUpdateResponse": ".platformskillupdateresponse", + "PlatformSkillUpdateResponseTypedDict": ".platformskillupdateresponse", + "PlatformSkillUpdateStatus": ".platformskillupdatestatus", "PlatformSkillValidationFile": ".platformskillvalidationfile", "PlatformSkillValidationFileTypedDict": ".platformskillvalidationfile", "PlatformSkillValidationMetadata": ".platformskillvalidationmetadata", @@ -4147,8 +4489,6 @@ "PlatformSkillValidationRequestTypedDict": ".platformskillvalidationrequest", "PlatformSkillValidationResponse": ".platformskillvalidationresponse", "PlatformSkillValidationResponseTypedDict": ".platformskillvalidationresponse", - "PlatformSkillValidationWarning": ".platformskillvalidationwarning", - "PlatformSkillValidationWarningTypedDict": ".platformskillvalidationwarning", "PlatformSkillVersion": ".platformskillversion", "PlatformSkillVersionTypedDict": ".platformskillversion", "PlatformSkillVersionCreateRequest": ".platformskillversioncreaterequest", @@ -4163,6 +4503,8 @@ "PlatformSkillVersionsListResponseTypedDict": ".platformskillversionslistresponse", "PlatformTimeRange": ".platformtimerange", "PlatformTimeRangeTypedDict": ".platformtimerange", + "PlatformWarning": ".platformwarning", + "PlatformWarningTypedDict": ".platformwarning", "PossibleValue": ".possiblevalue", "PossibleValueTypedDict": ".possiblevalue", "PostAPIIndexV1DebugDatasourceDocumentEventsRequest": ".post_api_index_v1_debug_datasource_document_eventsop", @@ -4343,6 +4685,12 @@ "Tool": ".tool", "ToolType": ".tool", "ToolTypedDict": ".tool", + "ToolAnnotations": ".toolannotations", + "ToolAnnotationsTypedDict": ".toolannotations", + "ToolDefinition": ".tooldefinition", + "ToolDefinitionTypedDict": ".tooldefinition", + "ToolDefinitionsResponse": ".tooldefinitionsresponse", + "ToolDefinitionsResponseTypedDict": ".tooldefinitionsresponse", "ToolInfo": ".toolinfo", "ToolInfoTypedDict": ".toolinfo", "ActionTypeSource": ".toolmetadata", @@ -4443,8 +4791,8 @@ "VerifyRequest": ".verifyrequest", "VerifyRequestAction": ".verifyrequest", "VerifyRequestTypedDict": ".verifyrequest", - "Role": ".viewerinfo", "ViewerInfo": ".viewerinfo", + "ViewerInfoRole": ".viewerinfo", "ViewerInfoTypedDict": ".viewerinfo", "Workflow": ".workflow", "WorkflowTypedDict": ".workflow", diff --git a/src/glean/api_client/models/accessrequestpermissiondeniedresponse_error.py b/src/glean/api_client/models/accessrequestpermissiondeniedresponse_error.py new file mode 100644 index 00000000..52b5d073 --- /dev/null +++ b/src/glean/api_client/models/accessrequestpermissiondeniedresponse_error.py @@ -0,0 +1,8 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + + +class AccessRequestPermissionDeniedResponseErrorType(str, Enum): + PERMISSION_DENIED = "PERMISSION_DENIED" diff --git a/src/glean/api_client/models/authconfig.py b/src/glean/api_client/models/authconfig.py index f01e07f8..f085390a 100644 --- a/src/glean/api_client/models/authconfig.py +++ b/src/glean/api_client/models/authconfig.py @@ -44,11 +44,29 @@ class AuthConfigStatus(str, Enum, metaclass=utils.OpenEnumMeta): class TokenEndpointAuthMethod(str, Enum, metaclass=utils.OpenEnumMeta): - r"""The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. client_secret_post sends credentials as form fields, client_secret_basic sends them via Authorization header, none omits client secret and relies on PKCE only. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2).""" + r"""The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2).""" + # Send client_id and client_secret as form fields in the token request body. CLIENT_SECRET_POST = "client_secret_post" + # Send client_id and client_secret via the HTTP Basic Authorization header. CLIENT_SECRET_BASIC = "client_secret_basic" + # Public client - omit the client secret and authenticate with the PKCE code_verifier only. NONE = "none" + # Authenticate with a JWT client assertion signed by the client's private key (RFC 7523 Section 2.2 / OIDC Core Section 9). Requires a key pair pre-registered with the authorization server. + PRIVATE_KEY_JWT = "private_key_jwt" + + +class AuthHeaderType(str, Enum, metaclass=utils.OpenEnumMeta): + r"""Defines the header structure for sending the API key or token to the server. Defaults to AUTHORIZATION_BEARER. Select the specific header format the server expects for transmitting the key.""" + + # Sends \"Authorization: Bearer \". + AUTHORIZATION_BEARER = "AUTHORIZATION_BEARER" + # Sends \"Authorization: Token \". + AUTHORIZATION_TOKEN = "AUTHORIZATION_TOKEN" + # Sends \"Authorization: ApiKey \". + AUTHORIZATION_API_KEY = "AUTHORIZATION_API_KEY" + # Sends \"X-API-Key: \". No Authorization header is sent. + X_API_KEY = "X_API_KEY" class AuthConfigTypedDict(TypedDict): @@ -81,7 +99,9 @@ class AuthConfigTypedDict(TypedDict): resource: NotRequired[str] r"""The OAuth 2.0 Resource Indicator (RFC 8707) for the protected resource. Discovered from Protected Resource Metadata (RFC 9728) during DCR. Included in authorization and token exchange requests when present.""" token_endpoint_auth_method: NotRequired[TokenEndpointAuthMethod] - r"""The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. client_secret_post sends credentials as form fields, client_secret_basic sends them via Authorization header, none omits client secret and relies on PKCE only. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2).""" + r"""The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2).""" + auth_header_type: NotRequired[AuthHeaderType] + r"""Defines the header structure for sending the API key or token to the server. Defaults to AUTHORIZATION_BEARER. Select the specific header format the server expects for transmitting the key.""" last_authorized_at: NotRequired[datetime] r"""The time the tool was last authorized in ISO format (ISO 8601).""" @@ -128,7 +148,12 @@ class AuthConfig(BaseModel): r"""The OAuth 2.0 Resource Indicator (RFC 8707) for the protected resource. Discovered from Protected Resource Metadata (RFC 9728) during DCR. Included in authorization and token exchange requests when present.""" token_endpoint_auth_method: Optional[TokenEndpointAuthMethod] = None - r"""The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. client_secret_post sends credentials as form fields, client_secret_basic sends them via Authorization header, none omits client secret and relies on PKCE only. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2).""" + r"""The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2).""" + + auth_header_type: Annotated[ + Optional[AuthHeaderType], pydantic.Field(alias="authHeaderType") + ] = None + r"""Defines the header structure for sending the API key or token to the server. Defaults to AUTHORIZATION_BEARER. Select the specific header format the server expects for transmitting the key.""" last_authorized_at: Annotated[ Optional[datetime], pydantic.Field(alias="lastAuthorizedAt") @@ -171,6 +196,15 @@ def serialize_token_endpoint_auth_method(self, value): return value return value + @field_serializer("auth_header_type") + def serialize_auth_header_type(self, value): + if isinstance(value, str): + try: + return models.AuthHeaderType(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( @@ -186,6 +220,7 @@ def serialize_model(self, handler): "authorization_url", "resource", "token_endpoint_auth_method", + "authHeaderType", "lastAuthorizedAt", ] ) diff --git a/src/glean/api_client/models/customdatasourceconfig.py b/src/glean/api_client/models/customdatasourceconfig.py index 635c888a..0b728d6f 100644 --- a/src/glean/api_client/models/customdatasourceconfig.py +++ b/src/glean/api_client/models/customdatasourceconfig.py @@ -37,6 +37,8 @@ class DatasourceCategory(str, Enum, metaclass=utils.OpenEnumMeta): ENTITY = "ENTITY" CALENDAR = "CALENDAR" AGENTS = "AGENTS" + AI_CONVERSATION = "AI_CONVERSATION" + AI_ARTIFACT = "AI_ARTIFACT" class HideBuiltInFacet(str, Enum, metaclass=utils.OpenEnumMeta): diff --git a/src/glean/api_client/models/feedentry.py b/src/glean/api_client/models/feedentry.py index 0c7309ee..03dd978e 100644 --- a/src/glean/api_client/models/feedentry.py +++ b/src/glean/api_client/models/feedentry.py @@ -112,6 +112,7 @@ class JustificationType(str, Enum, metaclass=utils.OpenEnumMeta): STARTER_KIT_ORG_CHART = "STARTER_KIT_ORG_CHART" STARTER_KIT_ADD_DOC = "STARTER_KIT_ADD_DOC" MEETING_RECAP = "MEETING_RECAP" + MEETING_PREP_AUTOMATION = "MEETING_PREP_AUTOMATION" ACTIVE_DISCUSSION = "ACTIVE_DISCUSSION" MID_DAY_CATCH_UP = "MID_DAY_CATCH_UP" QUERY_SUGGESTION = "QUERY_SUGGESTION" diff --git a/src/glean/api_client/models/feedrequest.py b/src/glean/api_client/models/feedrequest.py index 00be4150..69d85fb7 100644 --- a/src/glean/api_client/models/feedrequest.py +++ b/src/glean/api_client/models/feedrequest.py @@ -42,6 +42,7 @@ class FeedRequestCategory(str, Enum): PLAN_MY_DAY = "PLAN_MY_DAY" END_MY_DAY = "END_MY_DAY" STARTER_KIT = "STARTER_KIT" + MEETING_PREP_AUTOMATION = "MEETING_PREP_AUTOMATION" MID_DAY_CATCH_UP = "MID_DAY_CATCH_UP" QUERY_SUGGESTION = "QUERY_SUGGESTION" COWORK_CUJ_PROMO = "COWORK_CUJ_PROMO" diff --git a/src/glean/api_client/models/feedresult.py b/src/glean/api_client/models/feedresult.py index de49202b..f5bc568a 100644 --- a/src/glean/api_client/models/feedresult.py +++ b/src/glean/api_client/models/feedresult.py @@ -44,6 +44,7 @@ class FeedResultCategory(str, Enum, metaclass=utils.OpenEnumMeta): PLAN_MY_DAY = "PLAN_MY_DAY" END_MY_DAY = "END_MY_DAY" STARTER_KIT = "STARTER_KIT" + MEETING_PREP_AUTOMATION = "MEETING_PREP_AUTOMATION" MID_DAY_CATCH_UP = "MID_DAY_CATCH_UP" QUERY_SUGGESTION = "QUERY_SUGGESTION" COWORK_CUJ_PROMO = "COWORK_CUJ_PROMO" diff --git a/src/glean/api_client/models/gettoolservertoolsop.py b/src/glean/api_client/models/gettoolservertoolsop.py new file mode 100644 index 00000000..afb417b0 --- /dev/null +++ b/src/glean/api_client/models/gettoolservertoolsop.py @@ -0,0 +1,31 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from glean.api_client.types import BaseModel +from glean.api_client.utils import FieldMetadata, PathParamMetadata, QueryParamMetadata +import pydantic +from typing import List +from typing_extensions import Annotated, TypedDict + + +class GetToolServerToolsRequestTypedDict(TypedDict): + server_id: str + r"""Unique identifier of the tool server.""" + tool_names: List[str] + r"""Tool names to look up on this server. Maximum 100.""" + + +class GetToolServerToolsRequest(BaseModel): + server_id: Annotated[ + str, + pydantic.Field(alias="serverId"), + FieldMetadata(path=PathParamMetadata(style="simple", explode=False)), + ] + r"""Unique identifier of the tool server.""" + + tool_names: Annotated[ + List[str], + pydantic.Field(alias="toolNames"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=False)), + ] + r"""Tool names to look up on this server. Maximum 100.""" diff --git a/src/glean/api_client/models/importagentop.py b/src/glean/api_client/models/importagentop.py new file mode 100644 index 00000000..d30f537e --- /dev/null +++ b/src/glean/api_client/models/importagentop.py @@ -0,0 +1,66 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .importagentrequest import ImportAgentRequest, ImportAgentRequestTypedDict +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from glean.api_client.utils import ( + FieldMetadata, + PathParamMetadata, + QueryParamMetadata, + RequestMetadata, +) +import pydantic +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ImportAgentRequestRequestTypedDict(TypedDict): + agent_id: str + r"""The ID of the agent to create or update.""" + import_agent_request: ImportAgentRequestTypedDict + locale: NotRequired[str] + r"""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`.""" + timezone_offset: NotRequired[int] + r"""The offset of the client's timezone in minutes from UTC. e.g. PDT is -420 because it's 7 hours behind UTC.""" + + +class ImportAgentRequestRequest(BaseModel): + agent_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the agent to create or update.""" + + import_agent_request: Annotated[ + ImportAgentRequest, + FieldMetadata(request=RequestMetadata(media_type="multipart/form-data")), + ] + + locale: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""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`.""" + + timezone_offset: Annotated[ + Optional[int], + pydantic.Field(alias="timezoneOffset"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""The offset of the client's timezone in minutes from UTC. e.g. PDT is -420 because it's 7 hours behind UTC.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["locale", "timezoneOffset"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/importagentrequest.py b/src/glean/api_client/models/importagentrequest.py new file mode 100644 index 00000000..92ac1ff0 --- /dev/null +++ b/src/glean/api_client/models/importagentrequest.py @@ -0,0 +1,134 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .importagentsyncmode import ImportAgentSyncMode +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from glean.api_client.utils import FieldMetadata, MultipartFormMetadata +import io +import pydantic +from pydantic import model_serializer +from typing import IO, Optional, Union +from typing_extensions import Annotated, NotRequired, TypedDict + + +class BundleTypedDict(TypedDict): + file_name: str + content: Union[bytes, IO[bytes], io.IOBase] + content_type: NotRequired[str] + + +class Bundle(BaseModel): + file_name: Annotated[ + str, pydantic.Field(alias="fileName"), FieldMetadata(multipart=True) + ] + + content: Annotated[ + Union[bytes, IO[bytes], io.IOBase], + pydantic.Field(alias=""), + FieldMetadata(multipart=MultipartFormMetadata(content=True)), + ] + + content_type: Annotated[ + Optional[str], + pydantic.Field(alias="Content-Type"), + FieldMetadata(multipart=True), + ] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["contentType"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class ImportAgentRequestTypedDict(TypedDict): + bundle: BundleTypedDict + r"""Zip of the agent folder (spec.yaml, instructions.md, skills/, subagents/) with symlinks dereferenced. + + """ + git_commit_sha: NotRequired[str] + r"""Optional Git commit SHA to associate with this import.""" + git_author_id: NotRequired[str] + r"""Optional VCS commit author ID to associate with this import.""" + commit_message: NotRequired[str] + r"""Optional commit message for the imported version.""" + sync_mode: NotRequired[ImportAgentSyncMode] + r"""Whether the imported version is staged (saved without updating the live version) or published directly to the live version. + + """ + is_draft: NotRequired[bool] + r"""When true, validates and stores a draft preview without publishing (used for PR preview links). Takes precedence over `syncMode`: when `isDraft` is true, `syncMode` is ignored. + + """ + + +class ImportAgentRequest(BaseModel): + bundle: Annotated[Bundle, FieldMetadata(multipart=MultipartFormMetadata(file=True))] + r"""Zip of the agent folder (spec.yaml, instructions.md, skills/, subagents/) with symlinks dereferenced. + + """ + + git_commit_sha: Annotated[ + Optional[str], + pydantic.Field(alias="gitCommitSha"), + FieldMetadata(multipart=True), + ] = None + r"""Optional Git commit SHA to associate with this import.""" + + git_author_id: Annotated[ + Optional[str], + pydantic.Field(alias="gitAuthorId"), + FieldMetadata(multipart=True), + ] = None + r"""Optional VCS commit author ID to associate with this import.""" + + commit_message: Annotated[ + Optional[str], + pydantic.Field(alias="commitMessage"), + FieldMetadata(multipart=True), + ] = None + r"""Optional commit message for the imported version.""" + + sync_mode: Annotated[ + Optional[ImportAgentSyncMode], + pydantic.Field(alias="syncMode"), + FieldMetadata(multipart=True), + ] = None + r"""Whether the imported version is staged (saved without updating the live version) or published directly to the live version. + + """ + + is_draft: Annotated[ + Optional[bool], pydantic.Field(alias="isDraft"), FieldMetadata(multipart=True) + ] = None + r"""When true, validates and stores a draft preview without publishing (used for PR preview links). Takes precedence over `syncMode`: when `isDraft` is true, `syncMode` is ignored. + + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + ["gitCommitSha", "gitAuthorId", "commitMessage", "syncMode", "isDraft"] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/importagentresponse.py b/src/glean/api_client/models/importagentresponse.py new file mode 100644 index 00000000..19b134ef --- /dev/null +++ b/src/glean/api_client/models/importagentresponse.py @@ -0,0 +1,57 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .importagentstatus import ImportAgentStatus +from .workflowresult import WorkflowResult, WorkflowResultTypedDict +from glean.api_client import models +from glean.api_client.types import BaseModel, UNSET_SENTINEL +import pydantic +from pydantic import field_serializer, model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ImportAgentResponseTypedDict(TypedDict): + workflow_result: NotRequired[WorkflowResultTypedDict] + status: NotRequired[ImportAgentStatus] + r"""Outcome of the import for the target agent.""" + + +class ImportAgentResponse(BaseModel): + workflow_result: Annotated[ + Optional[WorkflowResult], pydantic.Field(alias="workflowResult") + ] = None + + status: Optional[ImportAgentStatus] = None + r"""Outcome of the import for the target agent.""" + + @field_serializer("status") + def serialize_status(self, value): + if isinstance(value, str): + try: + return models.ImportAgentStatus(value) + except ValueError: + return value + return value + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["workflowResult", "status"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +try: + ImportAgentResponse.model_rebuild() +except NameError: + pass diff --git a/src/glean/api_client/models/importagentstatus.py b/src/glean/api_client/models/importagentstatus.py new file mode 100644 index 00000000..fb11e89e --- /dev/null +++ b/src/glean/api_client/models/importagentstatus.py @@ -0,0 +1,13 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +from glean.api_client import utils + + +class ImportAgentStatus(str, Enum, metaclass=utils.OpenEnumMeta): + r"""Outcome of the import for the target agent.""" + + CREATED = "CREATED" + UPDATED = "UPDATED" + DRAFT_PREVIEW = "DRAFT_PREVIEW" diff --git a/src/glean/api_client/models/importagentsyncmode.py b/src/glean/api_client/models/importagentsyncmode.py new file mode 100644 index 00000000..3f93c95c --- /dev/null +++ b/src/glean/api_client/models/importagentsyncmode.py @@ -0,0 +1,11 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + + +class ImportAgentSyncMode(str, Enum): + r"""Whether the imported version is staged (saved without updating the live version) or published directly to the live version.""" + + STAGED = "STAGED" + PUBLISHED = "PUBLISHED" diff --git a/src/glean/api_client/models/manualfeedbackinfo.py b/src/glean/api_client/models/manualfeedbackinfo.py index dc8463af..5d4bb515 100644 --- a/src/glean/api_client/models/manualfeedbackinfo.py +++ b/src/glean/api_client/models/manualfeedbackinfo.py @@ -53,6 +53,8 @@ class Issue(str, Enum): RESULTS_HELPFUL = "RESULTS_HELPFUL" RESULTS_POOR_ORDER = "RESULTS_POOR_ORDER" TOO_MUCH_ONE_KIND = "TOO_MUCH_ONE_KIND" + NOT_A_QUESTION = "NOT_A_QUESTION" + UNSURE_IF_CORRECT = "UNSURE_IF_CORRECT" class ManualFeedbackInfoVote(str, Enum): diff --git a/src/glean/api_client/models/objectdefinition.py b/src/glean/api_client/models/objectdefinition.py index f9c359d3..65f80f05 100644 --- a/src/glean/api_client/models/objectdefinition.py +++ b/src/glean/api_client/models/objectdefinition.py @@ -33,6 +33,8 @@ class DocCategory(str, Enum, metaclass=utils.OpenEnumMeta): ENTITY = "ENTITY" CALENDAR = "CALENDAR" AGENTS = "AGENTS" + AI_CONVERSATION = "AI_CONVERSATION" + AI_ARTIFACT = "AI_ARTIFACT" class ObjectDefinitionTypedDict(TypedDict): diff --git a/src/glean/api_client/models/personmetadata.py b/src/glean/api_client/models/personmetadata.py index 4cddfb2e..5290ba80 100644 --- a/src/glean/api_client/models/personmetadata.py +++ b/src/glean/api_client/models/personmetadata.py @@ -48,6 +48,8 @@ class PersonMetadataTypedDict(TypedDict): r"""Typically the highest level organizational unit; generally applies to bigger companies with multiple distinct businesses.""" department: NotRequired[str] r"""An organizational unit where everyone has a similar task, e.g. `Engineering`.""" + job_function: NotRequired[str] + r"""Normalized job-function category assigned by Entity Builder from the source department and, when available, job title. Unlike `department`, which preserves the company-specific organizational unit, this field groups departments into configured categories such as `Engineering`, `Sales`, or `IT`; it may be `Unknown` when the mapping is inconclusive.""" teams: NotRequired[List[PersonTeamTypedDict]] r"""Info about the employee's team(s).""" department_count: NotRequired[int] @@ -145,6 +147,9 @@ class PersonMetadata(BaseModel): department: Optional[str] = None r"""An organizational unit where everyone has a similar task, e.g. `Engineering`.""" + job_function: Annotated[Optional[str], pydantic.Field(alias="jobFunction")] = None + r"""Normalized job-function category assigned by Entity Builder from the source department and, when available, job title. Unlike `department`, which preserves the company-specific organizational unit, this field groups departments into configured categories such as `Engineering`, `Sales`, or `IT`; it may be `Unknown` when the mapping is inconclusive.""" + teams: Optional[List[PersonTeam]] = None r"""Info about the employee's team(s).""" @@ -320,6 +325,7 @@ def serialize_model(self, handler): "title", "businessUnit", "department", + "jobFunction", "teams", "departmentCount", "email", diff --git a/src/glean/api_client/models/platform_chat_createop.py b/src/glean/api_client/models/platform_chat_createop.py new file mode 100644 index 00000000..03ee7209 --- /dev/null +++ b/src/glean/api_client/models/platform_chat_createop.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformchatcompletedresponse import ( + PlatformChatCompletedResponse, + PlatformChatCompletedResponseTypedDict, +) +from typing import Union +from typing_extensions import TypeAliasType + + +PlatformChatCreateResponseTypedDict = TypeAliasType( + "PlatformChatCreateResponseTypedDict", + Union[PlatformChatCompletedResponseTypedDict, str], +) + + +PlatformChatCreateResponse = TypeAliasType( + "PlatformChatCreateResponse", Union[PlatformChatCompletedResponse, str] +) diff --git a/src/glean/api_client/models/platform_search_filtersop.py b/src/glean/api_client/models/platform_search_filtersop.py new file mode 100644 index 00000000..2120898e --- /dev/null +++ b/src/glean/api_client/models/platform_search_filtersop.py @@ -0,0 +1,68 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformsearchfiltersresponse import ( + PlatformSearchFiltersResponse, + PlatformSearchFiltersResponseTypedDict, +) +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from glean.api_client.utils import FieldMetadata, QueryParamMetadata +from pydantic import model_serializer +from typing import Dict, List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class PlatformSearchFiltersRequestTypedDict(TypedDict): + datasources: NotRequired[List[str]] + r"""Restrict metadata to one or more datasource identifiers as returned by this endpoint (for example, `jira`). With a nonblank `query`, exactly one datasource is required. Unknown or inaccessible identifiers return `invalid_datasource`. + + """ + query: NotRequired[str] + r"""Optional search query that requests suggested filter values for the selected datasource. Must be nonblank when present. Triggers a search for facet values only; does not return documents. + + """ + + +class PlatformSearchFiltersRequest(BaseModel): + datasources: Annotated[ + Optional[List[str]], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Restrict metadata to one or more datasource identifiers as returned by this endpoint (for example, `jira`). With a nonblank `query`, exactly one datasource is required. Unknown or inaccessible identifiers return `invalid_datasource`. + + """ + + query: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Optional search query that requests suggested filter values for the selected datasource. Must be nonblank when present. Triggers a search for facet values only; does not return documents. + + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["datasources", "query"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class PlatformSearchFiltersResponseResponseTypedDict(TypedDict): + headers: Dict[str, List[str]] + result: PlatformSearchFiltersResponseTypedDict + + +class PlatformSearchFiltersResponseResponse(BaseModel): + headers: Dict[str, List[str]] + + result: PlatformSearchFiltersResponse diff --git a/src/glean/api_client/models/platform_skills_preview_sourceop.py b/src/glean/api_client/models/platform_skills_preview_sourceop.py new file mode 100644 index 00000000..30dcdd72 --- /dev/null +++ b/src/glean/api_client/models/platform_skills_preview_sourceop.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformskillsourcepreviewresponse import ( + PlatformSkillSourcePreviewResponse, + PlatformSkillSourcePreviewResponseTypedDict, +) +from typing import Union +from typing_extensions import TypeAliasType + + +PlatformSkillsPreviewSourceResponseTypedDict = TypeAliasType( + "PlatformSkillsPreviewSourceResponseTypedDict", + Union[PlatformSkillSourcePreviewResponseTypedDict, str], +) + + +PlatformSkillsPreviewSourceResponse = TypeAliasType( + "PlatformSkillsPreviewSourceResponse", + Union[PlatformSkillSourcePreviewResponse, str], +) diff --git a/src/glean/api_client/models/platform_skills_updateop.py b/src/glean/api_client/models/platform_skills_updateop.py new file mode 100644 index 00000000..42e0aca1 --- /dev/null +++ b/src/glean/api_client/models/platform_skills_updateop.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformskillupdaterequest import ( + PlatformSkillUpdateRequest, + PlatformSkillUpdateRequestTypedDict, +) +from glean.api_client.types import BaseModel +from glean.api_client.utils import FieldMetadata, PathParamMetadata, RequestMetadata +from typing_extensions import Annotated, TypedDict + + +class PlatformSkillsUpdateRequestTypedDict(TypedDict): + skill_id: str + r"""Glean skill ID.""" + platform_skill_update_request: PlatformSkillUpdateRequestTypedDict + + +class PlatformSkillsUpdateRequest(BaseModel): + skill_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""Glean skill ID.""" + + platform_skill_update_request: Annotated[ + PlatformSkillUpdateRequest, + FieldMetadata(request=RequestMetadata(media_type="application/json")), + ] diff --git a/src/glean/api_client/models/platformauthenticationsuggestion.py b/src/glean/api_client/models/platformauthenticationsuggestion.py new file mode 100644 index 00000000..04be56b8 --- /dev/null +++ b/src/glean/api_client/models/platformauthenticationsuggestion.py @@ -0,0 +1,42 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class PlatformAuthenticationSuggestionTypedDict(TypedDict): + r"""One tool the caller must authorize before the agent can run.""" + + server_id: str + r"""Identifier to POST to `/tool-servers/{serverId}/auth` (Client API) with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to.""" + tool_name: NotRequired[str] + r"""Human-readable tool name.""" + + +class PlatformAuthenticationSuggestion(BaseModel): + r"""One tool the caller must authorize before the agent can run.""" + + server_id: str + r"""Identifier to POST to `/tool-servers/{serverId}/auth` (Client API) with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to.""" + + tool_name: Optional[str] = None + r"""Human-readable tool name.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["tool_name"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformchatcitationannotation.py b/src/glean/api_client/models/platformchatcitationannotation.py new file mode 100644 index 00000000..e100f70c --- /dev/null +++ b/src/glean/api_client/models/platformchatcitationannotation.py @@ -0,0 +1,71 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformchatcitationsnippet import ( + PlatformChatCitationSnippet, + PlatformChatCitationSnippetTypedDict, +) +from .platformchatcitationsource import ( + PlatformChatCitationSource, + PlatformChatCitationSourceTypedDict, +) +from enum import Enum +from glean.api_client.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class PlatformChatCitationAnnotationType(str, Enum): + CITATION = "citation" + + +class PlatformChatCitationAnnotationTypedDict(TypedDict): + type: PlatformChatCitationAnnotationType + sources: List[PlatformChatCitationSourceTypedDict] + start_index: NotRequired[Nullable[int]] + end_index: NotRequired[Nullable[int]] + snippets: NotRequired[Nullable[List[PlatformChatCitationSnippetTypedDict]]] + + +class PlatformChatCitationAnnotation(BaseModel): + type: PlatformChatCitationAnnotationType + + sources: List[PlatformChatCitationSource] + + start_index: OptionalNullable[int] = UNSET + + end_index: OptionalNullable[int] = UNSET + + snippets: OptionalNullable[List[PlatformChatCitationSnippet]] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["start_index", "end_index", "snippets"]) + nullable_fields = set(["start_index", "end_index", "snippets"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformchatcitationsnippet.py b/src/glean/api_client/models/platformchatcitationsnippet.py new file mode 100644 index 00000000..c679f40a --- /dev/null +++ b/src/glean/api_client/models/platformchatcitationsnippet.py @@ -0,0 +1,48 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from glean.api_client.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing_extensions import NotRequired, TypedDict + + +class PlatformChatCitationSnippetTypedDict(TypedDict): + text: str + page_number: NotRequired[Nullable[int]] + + +class PlatformChatCitationSnippet(BaseModel): + text: str + + page_number: OptionalNullable[int] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["page_number"]) + nullable_fields = set(["page_number"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformchatcitationsource.py b/src/glean/api_client/models/platformchatcitationsource.py new file mode 100644 index 00000000..790d1678 --- /dev/null +++ b/src/glean/api_client/models/platformchatcitationsource.py @@ -0,0 +1,45 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformchatcustomentitysource import ( + PlatformChatCustomEntitySource, + PlatformChatCustomEntitySourceTypedDict, +) +from .platformchatdocumentsource import ( + PlatformChatDocumentSource, + PlatformChatDocumentSourceTypedDict, +) +from .platformchatfilesource import ( + PlatformChatFileSource, + PlatformChatFileSourceTypedDict, +) +from .platformchatpersonsource import ( + PlatformChatPersonSource, + PlatformChatPersonSourceTypedDict, +) +from typing import Union +from typing_extensions import TypeAliasType + + +PlatformChatCitationSourceTypedDict = TypeAliasType( + "PlatformChatCitationSourceTypedDict", + Union[ + PlatformChatPersonSourceTypedDict, + PlatformChatFileSourceTypedDict, + PlatformChatCustomEntitySourceTypedDict, + PlatformChatDocumentSourceTypedDict, + ], +) +r"""Four-variant citation source union.""" + + +PlatformChatCitationSource = TypeAliasType( + "PlatformChatCitationSource", + Union[ + PlatformChatPersonSource, + PlatformChatFileSource, + PlatformChatCustomEntitySource, + PlatformChatDocumentSource, + ], +) +r"""Four-variant citation source union.""" diff --git a/src/glean/api_client/models/platformchatcompletedresponse.py b/src/glean/api_client/models/platformchatcompletedresponse.py new file mode 100644 index 00000000..946d487c --- /dev/null +++ b/src/glean/api_client/models/platformchatcompletedresponse.py @@ -0,0 +1,91 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformchatoutputmessage import ( + PlatformChatOutputMessage, + PlatformChatOutputMessageTypedDict, +) +from datetime import datetime +from enum import Enum +from glean.api_client.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class Object(str, Enum): + RESPONSE = "response" + + +class PlatformChatCompletedResponseStatus(str, Enum): + COMPLETED = "completed" + + +class PlatformChatCompletedResponseTypedDict(TypedDict): + id: str + r"""Platform-owned, non-persisted response envelope identifier in `resp_` form. The same identifier is used for every event in one streamed response. + + """ + object: Object + created_at: datetime + r"""RFC 3339 UTC timestamp when the response was created.""" + status: PlatformChatCompletedResponseStatus + output: List[PlatformChatOutputMessageTypedDict] + store: bool + request_id: str + conversation_id: NotRequired[Nullable[str]] + r"""Present when the interaction was persisted.""" + + +class PlatformChatCompletedResponse(BaseModel): + id: str + r"""Platform-owned, non-persisted response envelope identifier in `resp_` form. The same identifier is used for every event in one streamed response. + + """ + + object: Object + + created_at: datetime + r"""RFC 3339 UTC timestamp when the response was created.""" + + status: PlatformChatCompletedResponseStatus + + output: List[PlatformChatOutputMessage] + + store: bool + + request_id: str + + conversation_id: OptionalNullable[str] = UNSET + r"""Present when the interaction was persisted.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["conversation_id"]) + nullable_fields = set(["conversation_id"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformchatcreaterequest.py b/src/glean/api_client/models/platformchatcreaterequest.py new file mode 100644 index 00000000..252f07c1 --- /dev/null +++ b/src/glean/api_client/models/platformchatcreaterequest.py @@ -0,0 +1,82 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformchatinputmessage import ( + PlatformChatInputMessage, + PlatformChatInputMessageTypedDict, +) +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import List, Optional, Union +from typing_extensions import NotRequired, TypeAliasType, TypedDict + + +InputTypedDict = TypeAliasType( + "InputTypedDict", Union[str, List[PlatformChatInputMessageTypedDict]] +) +r"""Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + +""" + + +Input = TypeAliasType("Input", Union[str, List[PlatformChatInputMessage]]) +r"""Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + +""" + + +class PlatformChatCreateRequestTypedDict(TypedDict): + input: InputTypedDict + r"""Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + + """ + stream: NotRequired[bool] + r"""When true, respond with `text/event-stream`. When false or omitted, respond with `application/json`. + + """ + store: NotRequired[bool] + r"""When true (default), persist the interaction and return a `conversation_id`. When false, run ephemerally with no persistence. + + """ + conversation_id: NotRequired[str] + r"""Continue an existing stored conversation. Incompatible with message-array `input` and with `store: false`. + + """ + + +class PlatformChatCreateRequest(BaseModel): + input: Input + r"""Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + + """ + + stream: Optional[bool] = False + r"""When true, respond with `text/event-stream`. When false or omitted, respond with `application/json`. + + """ + + store: Optional[bool] = True + r"""When true (default), persist the interaction and return a `conversation_id`. When false, run ephemerally with no persistence. + + """ + + conversation_id: Optional[str] = None + r"""Continue an existing stored conversation. Incompatible with message-array `input` and with `store: false`. + + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["stream", "store", "conversation_id"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformchatcustomentitysource.py b/src/glean/api_client/models/platformchatcustomentitysource.py new file mode 100644 index 00000000..76803768 --- /dev/null +++ b/src/glean/api_client/models/platformchatcustomentitysource.py @@ -0,0 +1,51 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class PlatformChatCustomEntitySourceType(str, Enum): + CUSTOM_ENTITY = "custom_entity" + + +class PlatformChatCustomEntitySourceTypedDict(TypedDict): + type: PlatformChatCustomEntitySourceType + entity_id: str + name: NotRequired[str] + title: NotRequired[str] + url: NotRequired[str] + datasource: NotRequired[str] + + +class PlatformChatCustomEntitySource(BaseModel): + type: PlatformChatCustomEntitySourceType + + entity_id: str + + name: Optional[str] = None + + title: Optional[str] = None + + url: Optional[str] = None + + datasource: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["name", "title", "url", "datasource"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformchatdocumentsource.py b/src/glean/api_client/models/platformchatdocumentsource.py new file mode 100644 index 00000000..0fa4f61a --- /dev/null +++ b/src/glean/api_client/models/platformchatdocumentsource.py @@ -0,0 +1,103 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional, Union +from typing_extensions import NotRequired, TypeAliasType, TypedDict + + +class PlatformChatDocumentSourceType2(str, Enum): + DOCUMENT = "document" + + +class PlatformChatDocumentSourceDocument2TypedDict(TypedDict): + type: PlatformChatDocumentSourceType2 + url: str + document_id: NotRequired[str] + title: NotRequired[str] + datasource: NotRequired[str] + + +class PlatformChatDocumentSourceDocument2(BaseModel): + type: PlatformChatDocumentSourceType2 + + url: str + + document_id: Optional[str] = None + + title: Optional[str] = None + + datasource: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["document_id", "title", "datasource"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class PlatformChatDocumentSourceType1(str, Enum): + DOCUMENT = "document" + + +class PlatformChatDocumentSourceDocument1TypedDict(TypedDict): + type: PlatformChatDocumentSourceType1 + document_id: str + url: NotRequired[str] + title: NotRequired[str] + datasource: NotRequired[str] + + +class PlatformChatDocumentSourceDocument1(BaseModel): + type: PlatformChatDocumentSourceType1 + + document_id: str + + url: Optional[str] = None + + title: Optional[str] = None + + datasource: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["url", "title", "datasource"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +PlatformChatDocumentSourceTypedDict = TypeAliasType( + "PlatformChatDocumentSourceTypedDict", + Union[ + PlatformChatDocumentSourceDocument1TypedDict, + PlatformChatDocumentSourceDocument2TypedDict, + ], +) + + +PlatformChatDocumentSource = TypeAliasType( + "PlatformChatDocumentSource", + Union[PlatformChatDocumentSourceDocument1, PlatformChatDocumentSourceDocument2], +) diff --git a/src/glean/api_client/models/platformchatfilesource.py b/src/glean/api_client/models/platformchatfilesource.py new file mode 100644 index 00000000..bde933e7 --- /dev/null +++ b/src/glean/api_client/models/platformchatfilesource.py @@ -0,0 +1,48 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class PlatformChatFileSourceType(str, Enum): + FILE = "file" + + +class PlatformChatFileSourceTypedDict(TypedDict): + type: PlatformChatFileSourceType + file_id: str + title: NotRequired[str] + url: NotRequired[str] + datasource: NotRequired[str] + + +class PlatformChatFileSource(BaseModel): + type: PlatformChatFileSourceType + + file_id: str + + title: Optional[str] = None + + url: Optional[str] = None + + datasource: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["title", "url", "datasource"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformchatinputmessage.py b/src/glean/api_client/models/platformchatinputmessage.py new file mode 100644 index 00000000..1031b464 --- /dev/null +++ b/src/glean/api_client/models/platformchatinputmessage.py @@ -0,0 +1,22 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +from glean.api_client.types import BaseModel +from typing_extensions import TypedDict + + +class PlatformChatInputMessageRole(str, Enum): + USER = "user" + ASSISTANT = "assistant" + + +class PlatformChatInputMessageTypedDict(TypedDict): + role: PlatformChatInputMessageRole + content: str + + +class PlatformChatInputMessage(BaseModel): + role: PlatformChatInputMessageRole + + content: str diff --git a/src/glean/api_client/models/platformchatoutputmessage.py b/src/glean/api_client/models/platformchatoutputmessage.py new file mode 100644 index 00000000..686a0c29 --- /dev/null +++ b/src/glean/api_client/models/platformchatoutputmessage.py @@ -0,0 +1,33 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformchatoutputtextcontent import ( + PlatformChatOutputTextContent, + PlatformChatOutputTextContentTypedDict, +) +from enum import Enum +from glean.api_client.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class PlatformChatOutputMessageType(str, Enum): + MESSAGE = "message" + + +class PlatformChatOutputMessageRole(str, Enum): + ASSISTANT = "assistant" + + +class PlatformChatOutputMessageTypedDict(TypedDict): + type: PlatformChatOutputMessageType + role: PlatformChatOutputMessageRole + content: List[PlatformChatOutputTextContentTypedDict] + + +class PlatformChatOutputMessage(BaseModel): + type: PlatformChatOutputMessageType + + role: PlatformChatOutputMessageRole + + content: List[PlatformChatOutputTextContent] diff --git a/src/glean/api_client/models/platformchatoutputtextcontent.py b/src/glean/api_client/models/platformchatoutputtextcontent.py new file mode 100644 index 00000000..0d076b64 --- /dev/null +++ b/src/glean/api_client/models/platformchatoutputtextcontent.py @@ -0,0 +1,46 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformchatcitationannotation import ( + PlatformChatCitationAnnotation, + PlatformChatCitationAnnotationTypedDict, +) +from enum import Enum +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import NotRequired, TypedDict + + +class PlatformChatOutputTextContentType(str, Enum): + OUTPUT_TEXT = "output_text" + + +class PlatformChatOutputTextContentTypedDict(TypedDict): + type: PlatformChatOutputTextContentType + text: str + annotations: NotRequired[List[PlatformChatCitationAnnotationTypedDict]] + + +class PlatformChatOutputTextContent(BaseModel): + type: PlatformChatOutputTextContentType + + text: str + + annotations: Optional[List[PlatformChatCitationAnnotation]] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["annotations"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformchatpersonsource.py b/src/glean/api_client/models/platformchatpersonsource.py new file mode 100644 index 00000000..d2548486 --- /dev/null +++ b/src/glean/api_client/models/platformchatpersonsource.py @@ -0,0 +1,45 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class PlatformChatPersonSourceType(str, Enum): + PERSON = "person" + + +class PlatformChatPersonSourceTypedDict(TypedDict): + type: PlatformChatPersonSourceType + person_id: str + name: NotRequired[str] + url: NotRequired[str] + + +class PlatformChatPersonSource(BaseModel): + type: PlatformChatPersonSourceType + + person_id: str + + name: Optional[str] = None + + url: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["name", "url"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformdatasourcefilterinfo.py b/src/glean/api_client/models/platformdatasourcefilterinfo.py new file mode 100644 index 00000000..cd2ba67f --- /dev/null +++ b/src/glean/api_client/models/platformdatasourcefilterinfo.py @@ -0,0 +1,33 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformfilterfieldinfo import ( + PlatformFilterFieldInfo, + PlatformFilterFieldInfoTypedDict, +) +from glean.api_client.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class PlatformDatasourceFilterInfoTypedDict(TypedDict): + datasource: str + r"""Datasource identifier usable in `POST /api/search` `datasources`. + + """ + filters: List[PlatformFilterFieldInfoTypedDict] + r"""Common built-in filter fields for this datasource. May be empty. A built-in omitted here can still be valid in `POST /api/search`; see `Filter.field` for the full built-in name list. + + """ + + +class PlatformDatasourceFilterInfo(BaseModel): + datasource: str + r"""Datasource identifier usable in `POST /api/search` `datasources`. + + """ + + filters: List[PlatformFilterFieldInfo] + r"""Common built-in filter fields for this datasource. May be empty. A built-in omitted here can still be valid in `POST /api/search`; see `Filter.field` for the full built-in name list. + + """ diff --git a/src/glean/api_client/models/platformfilter.py b/src/glean/api_client/models/platformfilter.py index 40c1e357..2243c553 100644 --- a/src/glean/api_client/models/platformfilter.py +++ b/src/glean/api_client/models/platformfilter.py @@ -2,43 +2,57 @@ from __future__ import annotations from .platformfilteroperator import PlatformFilterOperator +from glean.api_client import models from glean.api_client.types import BaseModel, UNSET_SENTINEL -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict class PlatformFilterTypedDict(TypedDict): - r"""A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd. For `NOT_EQUALS`, multiple values exclude all listed values. Filters are AND'd with each other and with any inline query operators.""" + r"""A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd; for `NOT_EQUALS`, listed values are excluded. Separate filters are AND'd with each other and with inline operators in `query`. Repeated same-field `EQUALS` filters are rejected.""" field: str - r"""The field to filter on. Accepts built-in filter field names such as `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`, plus custom datasource property names. + r"""Filter field name. Built-in names (case-sensitive, lowercase only): `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`. Built-ins accept only `EQUALS` and `NOT_EQUALS`. Any other nonblank name is accepted as a custom filter without spelling, existence, or type checks; behavior depends on your connected sources. """ values: List[str] - r"""One or more values to match.""" + r"""One or more values to match. Prefer values returned by filter discovery unchanged. For people (`USER`) fields, values may be email addresses or display names. + + """ operator: NotRequired[PlatformFilterOperator] - r"""Comparison operator to apply to this filter. Defaults to `EQUALS`. `GT`, `GTE`, `LT`, and `LTE` range operators require exactly one value; express bounded ranges with multiple filters on the same field. + r"""Comparison operator. Defaults to `EQUALS`. Built-in fields support only `EQUALS` and `NOT_EQUALS`. Range operators (`GT`, `GTE`, `LT`, `LTE`) require exactly one value; express ranges with multiple filters on the same field. Custom fields may support different operators depending on the data source. """ class PlatformFilter(BaseModel): - r"""A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd. For `NOT_EQUALS`, multiple values exclude all listed values. Filters are AND'd with each other and with any inline query operators.""" + r"""A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd; for `NOT_EQUALS`, listed values are excluded. Separate filters are AND'd with each other and with inline operators in `query`. Repeated same-field `EQUALS` filters are rejected.""" field: str - r"""The field to filter on. Accepts built-in filter field names such as `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`, plus custom datasource property names. + r"""Filter field name. Built-in names (case-sensitive, lowercase only): `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`. Built-ins accept only `EQUALS` and `NOT_EQUALS`. Any other nonblank name is accepted as a custom filter without spelling, existence, or type checks; behavior depends on your connected sources. """ values: List[str] - r"""One or more values to match.""" + r"""One or more values to match. Prefer values returned by filter discovery unchanged. For people (`USER`) fields, values may be email addresses or display names. + + """ operator: Optional[PlatformFilterOperator] = None - r"""Comparison operator to apply to this filter. Defaults to `EQUALS`. `GT`, `GTE`, `LT`, and `LTE` range operators require exactly one value; express bounded ranges with multiple filters on the same field. + r"""Comparison operator. Defaults to `EQUALS`. Built-in fields support only `EQUALS` and `NOT_EQUALS`. Range operators (`GT`, `GTE`, `LT`, `LTE`) require exactly one value; express ranges with multiple filters on the same field. Custom fields may support different operators depending on the data source. """ + @field_serializer("operator") + def serialize_operator(self, value): + if isinstance(value, str): + try: + return models.PlatformFilterOperator(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["operator"]) diff --git a/src/glean/api_client/models/platformfilterfieldinfo.py b/src/glean/api_client/models/platformfilterfieldinfo.py new file mode 100644 index 00000000..755b03c7 --- /dev/null +++ b/src/glean/api_client/models/platformfilterfieldinfo.py @@ -0,0 +1,61 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformfilteroperator import PlatformFilterOperator +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import NotRequired, TypedDict + + +class PlatformFilterFieldInfoTypedDict(TypedDict): + field: str + r"""Field name usable in the `filters` array for `POST /api/search`.""" + type: str + r"""Open field-type string. Current values are `STRING` for text and keyword fields and `USER` for people fields (`owner`, `from`, `author`, `assignee`, `reporter`, `mentions`). Clients must tolerate unknown values. + + """ + operators: List[PlatformFilterOperator] + r"""Comparison operators supported for this field. Built-in fields expose `EQUALS` and `NOT_EQUALS`. + + """ + values: NotRequired[List[str]] + r"""Suggested filter values observed for the supplied `query`. Omitted in catalog-only responses. Present as an array, including `[]`, when `query` is provided. Values are a bounded, non-exhaustive sample in search-provider order and may include duplicates; blank values are omitted. No additional endpoint-specific truncation is applied. Grouping in the search UI is not preserved; each value applies to the field broadly. An empty array does not mean no valid value exists. Availability varies by data source; federated and MCP integrations may return page-derived values or none at all. Reusing a suggested value in `POST /api/search` does not guarantee matching results or identical filter behavior. For `USER` fields, values may be email addresses or display names. + + """ + + +class PlatformFilterFieldInfo(BaseModel): + field: str + r"""Field name usable in the `filters` array for `POST /api/search`.""" + + type: str + r"""Open field-type string. Current values are `STRING` for text and keyword fields and `USER` for people fields (`owner`, `from`, `author`, `assignee`, `reporter`, `mentions`). Clients must tolerate unknown values. + + """ + + operators: List[PlatformFilterOperator] + r"""Comparison operators supported for this field. Built-in fields expose `EQUALS` and `NOT_EQUALS`. + + """ + + values: Optional[List[str]] = None + r"""Suggested filter values observed for the supplied `query`. Omitted in catalog-only responses. Present as an array, including `[]`, when `query` is provided. Values are a bounded, non-exhaustive sample in search-provider order and may include duplicates; blank values are omitted. No additional endpoint-specific truncation is applied. Grouping in the search UI is not preserved; each value applies to the field broadly. An empty array does not mean no valid value exists. Availability varies by data source; federated and MCP integrations may return page-derived values or none at all. Reusing a suggested value in `POST /api/search` does not guarantee matching results or identical filter behavior. For `USER` fields, values may be email addresses or display names. + + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["values"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformfilteroperator.py b/src/glean/api_client/models/platformfilteroperator.py index 1ac40ef8..f0185fb9 100644 --- a/src/glean/api_client/models/platformfilteroperator.py +++ b/src/glean/api_client/models/platformfilteroperator.py @@ -2,9 +2,10 @@ from __future__ import annotations from enum import Enum +from glean.api_client import utils -class PlatformFilterOperator(str, Enum): +class PlatformFilterOperator(str, Enum, metaclass=utils.OpenEnumMeta): r"""Supported filter operator.""" EQUALS = "EQUALS" diff --git a/src/glean/api_client/models/platformproblemdetailcode.py b/src/glean/api_client/models/platformproblemdetailcode.py index af54ad68..35cd1982 100644 --- a/src/glean/api_client/models/platformproblemdetailcode.py +++ b/src/glean/api_client/models/platformproblemdetailcode.py @@ -25,6 +25,7 @@ class PlatformProblemDetailCode(str, Enum, metaclass=utils.OpenEnumMeta): CONFLICT = "conflict" GONE = "gone" UNPROCESSABLE_QUERY = "unprocessable_query" + TOOLS_UNAUTHORIZED = "tools_unauthorized" RATE_LIMIT_EXCEEDED = "rate_limit_exceeded" INTERNAL_ERROR = "internal_error" SERVICE_UNAVAILABLE = "service_unavailable" diff --git a/src/glean/api_client/models/platformresult.py b/src/glean/api_client/models/platformresult.py index 08c36e88..167efcae 100644 --- a/src/glean/api_client/models/platformresult.py +++ b/src/glean/api_client/models/platformresult.py @@ -27,8 +27,6 @@ class PlatformResultTypedDict(TypedDict): r"""The datasource this result originates from.""" snippets: NotRequired[List[str]] r"""Query-relevant plain-text excerpts from the result body.""" - datasource_instance: NotRequired[Nullable[str]] - r"""The datasource instance this result originates from, if known.""" document_type: NotRequired[Nullable[str]] r"""The document type within the datasource.""" creator: NotRequired[PlatformPersonReferenceTypedDict] @@ -54,9 +52,6 @@ class PlatformResult(BaseModel): snippets: Optional[List[str]] = None r"""Query-relevant plain-text excerpts from the result body.""" - datasource_instance: OptionalNullable[str] = UNSET - r"""The datasource instance this result originates from, if known.""" - document_type: OptionalNullable[str] = UNSET r"""The document type within the datasource.""" @@ -77,7 +72,6 @@ def serialize_model(self, handler): optional_fields = set( [ "snippets", - "datasource_instance", "document_type", "creator", "owner", @@ -85,9 +79,7 @@ def serialize_model(self, handler): "created_at", ] ) - nullable_fields = set( - ["datasource_instance", "document_type", "updated_at", "created_at"] - ) + nullable_fields = set(["document_type", "updated_at", "created_at"]) serialized = handler(self) m = {} diff --git a/src/glean/api_client/models/platformsearchfiltersresponse.py b/src/glean/api_client/models/platformsearchfiltersresponse.py new file mode 100644 index 00000000..1d8aa689 --- /dev/null +++ b/src/glean/api_client/models/platformsearchfiltersresponse.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformdatasourcefilterinfo import ( + PlatformDatasourceFilterInfo, + PlatformDatasourceFilterInfoTypedDict, +) +from glean.api_client.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class PlatformSearchFiltersResponseTypedDict(TypedDict): + datasources: List[PlatformDatasourceFilterInfoTypedDict] + r"""Datasources visible to the authenticated user. Each `datasource` is an identifier you can pass to `POST /api/search` `datasources`. An empty array means no visible datasources. + + """ + request_id: str + r"""Platform-generated request ID for support correlation.""" + + +class PlatformSearchFiltersResponse(BaseModel): + datasources: List[PlatformDatasourceFilterInfo] + r"""Datasources visible to the authenticated user. Each `datasource` is an identifier you can pass to `POST /api/search` `datasources`. An empty array means no visible datasources. + + """ + + request_id: str + r"""Platform-generated request ID for support correlation.""" diff --git a/src/glean/api_client/models/platformsearchrequest.py b/src/glean/api_client/models/platformsearchrequest.py index 8f37fa7d..8a3cd9bc 100644 --- a/src/glean/api_client/models/platformsearchrequest.py +++ b/src/glean/api_client/models/platformsearchrequest.py @@ -27,15 +27,11 @@ class PlatformSearchRequestTypedDict(TypedDict): """ datasources: NotRequired[List[str]] - r"""Restrict results to specific datasources. Requests must not specify both `datasources` and `datasource_instances`. - - """ - datasource_instances: NotRequired[List[str]] - r"""Restrict results to specific datasource instances. Values are datasource instance identifiers returned by `GET /api/search/filters`. Requests must not specify both `datasources` and `datasource_instances`. + r"""Restrict results to specific datasource identifiers returned by `GET /api/search/filters`. Scopes by datasource type and may include results from multiple instances of that type. """ filters: NotRequired[List[PlatformFilterTypedDict]] - r"""Structured filters applied to search results. Equality operators OR multiple values within a filter. Multiple filters are AND'd together, including range filters on the same field. Filters are AND'd with any inline operators in `query`. Note that conflicting constraints on the same field (e.g., `type:document` in the query and `type: spreadsheet` in a filter) produce an empty result set. + r"""Structured filters applied to search results. Multiple values within a filter with `EQUALS` are OR'd; separate filters are AND'd. Conflicting constraints on the same field (for example, `type:document` in `query` and `type:spreadsheet` in a filter) return an empty result set. See `Filter.field` for built-in field names and operators. Other nonblank field names are accepted as custom filters without validation; behavior depends on your connected sources. """ time_range: NotRequired[PlatformTimeRangeTypedDict] @@ -57,17 +53,12 @@ class PlatformSearchRequest(BaseModel): """ datasources: Optional[List[str]] = None - r"""Restrict results to specific datasources. Requests must not specify both `datasources` and `datasource_instances`. - - """ - - datasource_instances: Optional[List[str]] = None - r"""Restrict results to specific datasource instances. Values are datasource instance identifiers returned by `GET /api/search/filters`. Requests must not specify both `datasources` and `datasource_instances`. + r"""Restrict results to specific datasource identifiers returned by `GET /api/search/filters`. Scopes by datasource type and may include results from multiple instances of that type. """ filters: Optional[List[PlatformFilter]] = None - r"""Structured filters applied to search results. Equality operators OR multiple values within a filter. Multiple filters are AND'd together, including range filters on the same field. Filters are AND'd with any inline operators in `query`. Note that conflicting constraints on the same field (e.g., `type:document` in the query and `type: spreadsheet` in a filter) produce an empty result set. + r"""Structured filters applied to search results. Multiple values within a filter with `EQUALS` are OR'd; separate filters are AND'd. Conflicting constraints on the same field (for example, `type:document` in `query` and `type:spreadsheet` in a filter) return an empty result set. See `Filter.field` for built-in field names and operators. Other nonblank field names are accepted as custom filters without validation; behavior depends on your connected sources. """ @@ -77,14 +68,7 @@ class PlatformSearchRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( - [ - "page_size", - "cursor", - "datasources", - "datasource_instances", - "filters", - "time_range", - ] + ["page_size", "cursor", "datasources", "filters", "time_range"] ) nullable_fields = set(["cursor"]) serialized = handler(self) diff --git a/src/glean/api_client/models/platformsearchresponse.py b/src/glean/api_client/models/platformsearchresponse.py index d98c78d6..ff13d204 100644 --- a/src/glean/api_client/models/platformsearchresponse.py +++ b/src/glean/api_client/models/platformsearchresponse.py @@ -2,6 +2,7 @@ from __future__ import annotations from .platformresult import PlatformResult, PlatformResultTypedDict +from .platformwarning import PlatformWarning, PlatformWarningTypedDict from glean.api_client.types import BaseModel, Nullable, UNSET_SENTINEL from pydantic import model_serializer from typing import List @@ -10,18 +11,26 @@ class PlatformSearchResponseTypedDict(TypedDict): results: List[PlatformResultTypedDict] - r"""Ordered list of search results.""" + r"""Ordered list of ranked document results. People cards, Q&A blocks, and other UI-only result types are not included. + + """ has_more: bool r"""Indicates whether additional pages of results are available.""" next_cursor: Nullable[str] r"""Opaque token to pass as `cursor` in the next request.""" request_id: str r"""Platform-generated request ID for support correlation.""" + warnings: List[PlatformWarningTypedDict] + r"""Non-blocking warnings for this response. Required; use `[]` when there are none. Clients must tolerate unknown warning codes. `results_incomplete` means some results may be unavailable for the requested datasource scope while `results`, `has_more`, and `next_cursor` remain present. Warning messages are generic and do not include query text or internal identifiers. + + """ class PlatformSearchResponse(BaseModel): results: List[PlatformResult] - r"""Ordered list of search results.""" + r"""Ordered list of ranked document results. People cards, Q&A blocks, and other UI-only result types are not included. + + """ has_more: bool r"""Indicates whether additional pages of results are available.""" @@ -32,6 +41,11 @@ class PlatformSearchResponse(BaseModel): request_id: str r"""Platform-generated request ID for support correlation.""" + warnings: List[PlatformWarning] + r"""Non-blocking warnings for this response. Required; use `[]` when there are none. Clients must tolerate unknown warning codes. `results_incomplete` means some results may be unavailable for the requested datasource scope while `results`, `has_more`, and `next_cursor` remain present. Warning messages are generic and do not include query text or internal identifiers. + + """ + @model_serializer(mode="wrap") def serialize_model(self, handler): serialized = handler(self) diff --git a/src/glean/api_client/models/platformskillsourcepreview.py b/src/glean/api_client/models/platformskillsourcepreview.py new file mode 100644 index 00000000..084954d9 --- /dev/null +++ b/src/glean/api_client/models/platformskillsourcepreview.py @@ -0,0 +1,50 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformskillsourcepreviewfile import ( + PlatformSkillSourcePreviewFile, + PlatformSkillSourcePreviewFileTypedDict, +) +from glean.api_client.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class PlatformSkillSourcePreviewTypedDict(TypedDict): + display_name: str + r"""Skill name parsed from SKILL.md frontmatter.""" + description: str + r"""Skill description parsed from SKILL.md frontmatter.""" + source_url: str + r"""Resolved URL for this skill within the source.""" + commit_sha: str + r"""Commit SHA used to produce the preview.""" + main_content: str + r"""SKILL.md content fetched as part of the preview.""" + files: List[PlatformSkillSourcePreviewFileTypedDict] + r"""Supporting files fetched with the skill.""" + file_tree: List[str] + r"""Relative paths discovered for the skill.""" + + +class PlatformSkillSourcePreview(BaseModel): + display_name: str + r"""Skill name parsed from SKILL.md frontmatter.""" + + description: str + r"""Skill description parsed from SKILL.md frontmatter.""" + + source_url: str + r"""Resolved URL for this skill within the source.""" + + commit_sha: str + r"""Commit SHA used to produce the preview.""" + + main_content: str + r"""SKILL.md content fetched as part of the preview.""" + + files: List[PlatformSkillSourcePreviewFile] + r"""Supporting files fetched with the skill.""" + + file_tree: List[str] + r"""Relative paths discovered for the skill.""" diff --git a/src/glean/api_client/models/platformskillsourcepreviewfailure.py b/src/glean/api_client/models/platformskillsourcepreviewfailure.py new file mode 100644 index 00000000..e190c122 --- /dev/null +++ b/src/glean/api_client/models/platformskillsourcepreviewfailure.py @@ -0,0 +1,37 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformskillsourcepreviewfailurecode import PlatformSkillSourcePreviewFailureCode +from glean.api_client import models +from glean.api_client.types import BaseModel +from pydantic import field_serializer +from typing_extensions import TypedDict + + +class PlatformSkillSourcePreviewFailureTypedDict(TypedDict): + source_url: str + r"""Resolved URL for the entry that could not be previewed.""" + code: PlatformSkillSourcePreviewFailureCode + r"""Stable machine-readable reason a discovered entry was excluded.""" + detail: str + r"""Safe explanation of why the entry was excluded.""" + + +class PlatformSkillSourcePreviewFailure(BaseModel): + source_url: str + r"""Resolved URL for the entry that could not be previewed.""" + + code: PlatformSkillSourcePreviewFailureCode + r"""Stable machine-readable reason a discovered entry was excluded.""" + + detail: str + r"""Safe explanation of why the entry was excluded.""" + + @field_serializer("code") + def serialize_code(self, value): + if isinstance(value, str): + try: + return models.PlatformSkillSourcePreviewFailureCode(value) + except ValueError: + return value + return value diff --git a/src/glean/api_client/models/platformskillsourcepreviewfailurecode.py b/src/glean/api_client/models/platformskillsourcepreviewfailurecode.py new file mode 100644 index 00000000..627495d3 --- /dev/null +++ b/src/glean/api_client/models/platformskillsourcepreviewfailurecode.py @@ -0,0 +1,12 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +from glean.api_client import utils + + +class PlatformSkillSourcePreviewFailureCode(str, Enum, metaclass=utils.OpenEnumMeta): + r"""Stable machine-readable reason a discovered entry was excluded.""" + + INVALID_SKILL = "INVALID_SKILL" + SKILL_FETCH_FAILED = "SKILL_FETCH_FAILED" diff --git a/src/glean/api_client/models/platformskillsourcepreviewfile.py b/src/glean/api_client/models/platformskillsourcepreviewfile.py new file mode 100644 index 00000000..71aee533 --- /dev/null +++ b/src/glean/api_client/models/platformskillsourcepreviewfile.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from glean.api_client.types import BaseModel +from typing_extensions import TypedDict + + +class PlatformSkillSourcePreviewFileTypedDict(TypedDict): + path: str + r"""Relative path within the skill bundle.""" + content: str + r"""UTF-8 file content.""" + + +class PlatformSkillSourcePreviewFile(BaseModel): + path: str + r"""Relative path within the skill bundle.""" + + content: str + r"""UTF-8 file content.""" diff --git a/src/glean/api_client/models/platformskillsourcepreviewrequest.py b/src/glean/api_client/models/platformskillsourcepreviewrequest.py new file mode 100644 index 00000000..92057490 --- /dev/null +++ b/src/glean/api_client/models/platformskillsourcepreviewrequest.py @@ -0,0 +1,38 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from glean.api_client.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class PlatformSkillSourcePreviewRequestTypedDict(TypedDict): + source_url: str + r"""GitHub URL for a skill directory, SKILL.md file, or repository to inspect.""" + stream: NotRequired[bool] + r"""Whether to stream repository scan progress using server-sent events.""" + + +class PlatformSkillSourcePreviewRequest(BaseModel): + source_url: str + r"""GitHub URL for a skill directory, SKILL.md file, or repository to inspect.""" + + stream: Optional[bool] = False + r"""Whether to stream repository scan progress using server-sent events.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["stream"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/glean/api_client/models/platformskillsourcepreviewresponse.py b/src/glean/api_client/models/platformskillsourcepreviewresponse.py new file mode 100644 index 00000000..37cf8bc1 --- /dev/null +++ b/src/glean/api_client/models/platformskillsourcepreviewresponse.py @@ -0,0 +1,34 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformskillsourcepreview import ( + PlatformSkillSourcePreview, + PlatformSkillSourcePreviewTypedDict, +) +from .platformskillsourcepreviewfailure import ( + PlatformSkillSourcePreviewFailure, + PlatformSkillSourcePreviewFailureTypedDict, +) +from glean.api_client.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class PlatformSkillSourcePreviewResponseTypedDict(TypedDict): + skills: List[PlatformSkillSourcePreviewTypedDict] + r"""Valid skills discovered at the source URL.""" + failures: List[PlatformSkillSourcePreviewFailureTypedDict] + r"""Discovered entries that could not be included in the preview.""" + request_id: str + r"""Platform-generated request ID for support correlation.""" + + +class PlatformSkillSourcePreviewResponse(BaseModel): + skills: List[PlatformSkillSourcePreview] + r"""Valid skills discovered at the source URL.""" + + failures: List[PlatformSkillSourcePreviewFailure] + r"""Discovered entries that could not be included in the preview.""" + + request_id: str + r"""Platform-generated request ID for support correlation.""" diff --git a/src/glean/api_client/models/platformskillupdaterequest.py b/src/glean/api_client/models/platformskillupdaterequest.py new file mode 100644 index 00000000..0d87a591 --- /dev/null +++ b/src/glean/api_client/models/platformskillupdaterequest.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformskillupdatestatus import PlatformSkillUpdateStatus +from glean.api_client.types import BaseModel +from typing_extensions import TypedDict + + +class PlatformSkillUpdateRequestTypedDict(TypedDict): + status: PlatformSkillUpdateStatus + r"""New status for the skill.""" + + +class PlatformSkillUpdateRequest(BaseModel): + status: PlatformSkillUpdateStatus + r"""New status for the skill.""" diff --git a/src/glean/api_client/models/platformskillupdateresponse.py b/src/glean/api_client/models/platformskillupdateresponse.py new file mode 100644 index 00000000..b508a52f --- /dev/null +++ b/src/glean/api_client/models/platformskillupdateresponse.py @@ -0,0 +1,19 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .platformskill import PlatformSkill, PlatformSkillTypedDict +from glean.api_client.types import BaseModel +from typing_extensions import TypedDict + + +class PlatformSkillUpdateResponseTypedDict(TypedDict): + skill: PlatformSkillTypedDict + request_id: str + r"""Platform-generated request ID for support correlation.""" + + +class PlatformSkillUpdateResponse(BaseModel): + skill: PlatformSkill + + request_id: str + r"""Platform-generated request ID for support correlation.""" diff --git a/src/glean/api_client/models/platformskillupdatestatus.py b/src/glean/api_client/models/platformskillupdatestatus.py new file mode 100644 index 00000000..ede7b308 --- /dev/null +++ b/src/glean/api_client/models/platformskillupdatestatus.py @@ -0,0 +1,11 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + + +class PlatformSkillUpdateStatus(str, Enum): + r"""New status for the skill.""" + + ENABLED = "ENABLED" + DISABLED = "DISABLED" diff --git a/src/glean/api_client/models/platformskillvalidationresponse.py b/src/glean/api_client/models/platformskillvalidationresponse.py index 70624e36..76af1575 100644 --- a/src/glean/api_client/models/platformskillvalidationresponse.py +++ b/src/glean/api_client/models/platformskillvalidationresponse.py @@ -9,10 +9,7 @@ PlatformSkillValidationMetadata, PlatformSkillValidationMetadataTypedDict, ) -from .platformskillvalidationwarning import ( - PlatformSkillValidationWarning, - PlatformSkillValidationWarningTypedDict, -) +from .platformwarning import PlatformWarning, PlatformWarningTypedDict from glean.api_client.types import BaseModel from typing import List from typing_extensions import TypedDict @@ -22,7 +19,7 @@ class PlatformSkillValidationResponseTypedDict(TypedDict): metadata: PlatformSkillValidationMetadataTypedDict files: List[PlatformSkillValidationFileTypedDict] r"""Normalized files in the bundle after stripping an optional single root folder.""" - warnings: List[PlatformSkillValidationWarningTypedDict] + warnings: List[PlatformWarningTypedDict] r"""Non-blocking validation warnings.""" request_id: str r"""Platform-generated request ID for support correlation.""" @@ -34,7 +31,7 @@ class PlatformSkillValidationResponse(BaseModel): files: List[PlatformSkillValidationFile] r"""Normalized files in the bundle after stripping an optional single root folder.""" - warnings: List[PlatformSkillValidationWarning] + warnings: List[PlatformWarning] r"""Non-blocking validation warnings.""" request_id: str diff --git a/src/glean/api_client/models/platformskillvalidationwarning.py b/src/glean/api_client/models/platformskillvalidationwarning.py deleted file mode 100644 index dfd939ef..00000000 --- a/src/glean/api_client/models/platformskillvalidationwarning.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from glean.api_client.types import BaseModel -from typing_extensions import TypedDict - - -class PlatformSkillValidationWarningTypedDict(TypedDict): - code: str - r"""Stable warning code.""" - message: str - r"""Human-readable warning message.""" - - -class PlatformSkillValidationWarning(BaseModel): - code: str - r"""Stable warning code.""" - - message: str - r"""Human-readable warning message.""" diff --git a/src/glean/api_client/models/platformwarning.py b/src/glean/api_client/models/platformwarning.py new file mode 100644 index 00000000..3f5ea79c --- /dev/null +++ b/src/glean/api_client/models/platformwarning.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from glean.api_client.types import BaseModel +from typing_extensions import TypedDict + + +class PlatformWarningTypedDict(TypedDict): + r"""Non-blocking warning attached to a successful Platform response.""" + + code: str + r"""Open snake_case warning code. Clients must tolerate unknown values; the set of codes is not a closed enum. + + """ + message: str + r"""Human-readable warning message.""" + + +class PlatformWarning(BaseModel): + r"""Non-blocking warning attached to a successful Platform response.""" + + code: str + r"""Open snake_case warning code. Clients must tolerate unknown values; the set of codes is not a closed enum. + + """ + + message: str + r"""Human-readable warning message.""" diff --git a/src/glean/api_client/models/toolannotations.py b/src/glean/api_client/models/toolannotations.py new file mode 100644 index 00000000..fa00357c --- /dev/null +++ b/src/glean/api_client/models/toolannotations.py @@ -0,0 +1,137 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from glean.api_client.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +import pydantic +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ToolAnnotationsTypedDict(TypedDict): + r"""Behavioural hints for the tool, exactly as declared by the tool server. No + defaults are filled in — see the per-field notes for what an absent value means. + + Per the MCP specification, clients MUST treat these hints as untrusted unless + the tool server is itself trusted. They are advisory metadata, not an + authorization signal, and must not be the sole basis of a security decision. + + """ + + title: NotRequired[str] + read_only_hint: NotRequired[bool] + r"""True if the tool does not modify its environment. Always present. MCP + defines no distinction between an undeclared value and `false` here, so + `false` means \"not declared read-only\" rather than \"declared mutating\". + + """ + destructive_hint: NotRequired[Nullable[bool]] + r"""True if the tool may perform destructive updates. **Absent means the server + did not declare it**, for which the MCP default is `true`. Only meaningful + when `readOnlyHint` is `false`. + + """ + idempotent_hint: NotRequired[bool] + r"""True if repeated calls with the same arguments have no additional effect. + Always present; as with `readOnlyHint`, `false` means \"not declared + idempotent\". Only meaningful when `readOnlyHint` is `false`. + + """ + open_world_hint: NotRequired[Nullable[bool]] + r"""True if the tool interacts with an open world of external entities. **Absent + means the server did not declare it**, for which the MCP default is `true`. + + """ + + +class ToolAnnotations(BaseModel): + r"""Behavioural hints for the tool, exactly as declared by the tool server. No + defaults are filled in — see the per-field notes for what an absent value means. + + Per the MCP specification, clients MUST treat these hints as untrusted unless + the tool server is itself trusted. They are advisory metadata, not an + authorization signal, and must not be the sole basis of a security decision. + + """ + + title: Optional[str] = None + + read_only_hint: Annotated[Optional[bool], pydantic.Field(alias="readOnlyHint")] = ( + None + ) + r"""True if the tool does not modify its environment. Always present. MCP + defines no distinction between an undeclared value and `false` here, so + `false` means \"not declared read-only\" rather than \"declared mutating\". + + """ + + destructive_hint: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="destructiveHint") + ] = UNSET + r"""True if the tool may perform destructive updates. **Absent means the server + did not declare it**, for which the MCP default is `true`. Only meaningful + when `readOnlyHint` is `false`. + + """ + + idempotent_hint: Annotated[ + Optional[bool], pydantic.Field(alias="idempotentHint") + ] = None + r"""True if repeated calls with the same arguments have no additional effect. + Always present; as with `readOnlyHint`, `false` means \"not declared + idempotent\". Only meaningful when `readOnlyHint` is `false`. + + """ + + open_world_hint: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="openWorldHint") + ] = UNSET + r"""True if the tool interacts with an open world of external entities. **Absent + means the server did not declare it**, for which the MCP default is `true`. + + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "title", + "readOnlyHint", + "destructiveHint", + "idempotentHint", + "openWorldHint", + ] + ) + nullable_fields = set(["destructiveHint", "openWorldHint"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m + + +try: + ToolAnnotations.model_rebuild() +except NameError: + pass diff --git a/src/glean/api_client/models/tooldefinition.py b/src/glean/api_client/models/tooldefinition.py new file mode 100644 index 00000000..805617b1 --- /dev/null +++ b/src/glean/api_client/models/tooldefinition.py @@ -0,0 +1,84 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .toolannotations import ToolAnnotations, ToolAnnotationsTypedDict +from glean.api_client.types import BaseModel, UNSET_SENTINEL +import pydantic +from pydantic import model_serializer +from typing import Any, Dict, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ToolDefinitionTypedDict(TypedDict): + server_id: str + r"""Tool server this tool belongs to.""" + name: str + r"""Name to invoke the tool by.""" + display_name: NotRequired[str] + r"""Human-readable name of the tool.""" + description: NotRequired[str] + r"""What the tool does, as surfaced to a model.""" + input_schema: NotRequired[Dict[str, Any]] + r"""JSON Schema for the tool's input parameters.""" + annotations: NotRequired[ToolAnnotationsTypedDict] + r"""Behavioural hints for the tool, exactly as declared by the tool server. No + defaults are filled in — see the per-field notes for what an absent value means. + + Per the MCP specification, clients MUST treat these hints as untrusted unless + the tool server is itself trusted. They are advisory metadata, not an + authorization signal, and must not be the sole basis of a security decision. + + """ + + +class ToolDefinition(BaseModel): + server_id: Annotated[str, pydantic.Field(alias="serverId")] + r"""Tool server this tool belongs to.""" + + name: str + r"""Name to invoke the tool by.""" + + display_name: Annotated[Optional[str], pydantic.Field(alias="displayName")] = None + r"""Human-readable name of the tool.""" + + description: Optional[str] = None + r"""What the tool does, as surfaced to a model.""" + + input_schema: Annotated[ + Optional[Dict[str, Any]], pydantic.Field(alias="inputSchema") + ] = None + r"""JSON Schema for the tool's input parameters.""" + + annotations: Optional[ToolAnnotations] = None + r"""Behavioural hints for the tool, exactly as declared by the tool server. No + defaults are filled in — see the per-field notes for what an absent value means. + + Per the MCP specification, clients MUST treat these hints as untrusted unless + the tool server is itself trusted. They are advisory metadata, not an + authorization signal, and must not be the sole basis of a security decision. + + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + ["displayName", "description", "inputSchema", "annotations"] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +try: + ToolDefinition.model_rebuild() +except NameError: + pass diff --git a/src/glean/api_client/models/tooldefinitionsresponse.py b/src/glean/api_client/models/tooldefinitionsresponse.py new file mode 100644 index 00000000..a0fa1e09 --- /dev/null +++ b/src/glean/api_client/models/tooldefinitionsresponse.py @@ -0,0 +1,46 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .tooldefinition import ToolDefinition, ToolDefinitionTypedDict +from glean.api_client.types import BaseModel, UNSET_SENTINEL +import pydantic +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ToolDefinitionsResponseTypedDict(TypedDict): + tools: List[ToolDefinitionTypedDict] + r"""Definitions for the requested tools that exist on this server.""" + not_found: NotRequired[List[str]] + r"""Requested names that do not exist on this server.""" + + +class ToolDefinitionsResponse(BaseModel): + tools: List[ToolDefinition] + r"""Definitions for the requested tools that exist on this server.""" + + not_found: Annotated[Optional[List[str]], pydantic.Field(alias="notFound")] = None + r"""Requested names that do not exist on this server.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["notFound"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +try: + ToolDefinitionsResponse.model_rebuild() +except NameError: + pass diff --git a/src/glean/api_client/models/viewerinfo.py b/src/glean/api_client/models/viewerinfo.py index c85d80b8..32b116e7 100644 --- a/src/glean/api_client/models/viewerinfo.py +++ b/src/glean/api_client/models/viewerinfo.py @@ -14,7 +14,7 @@ @deprecated( "warning: ** DEPRECATED ** - Deprecated on 2026-02-05, removal scheduled for 2026-10-15: Use permissions instead." ) -class Role(str, Enum, metaclass=utils.OpenEnumMeta): +class ViewerInfoRole(str, Enum, metaclass=utils.OpenEnumMeta): r"""DEPRECATED - use permissions instead. Viewer's role on the specific document.""" ANSWER_MODERATOR = "ANSWER_MODERATOR" @@ -23,14 +23,14 @@ class Role(str, Enum, metaclass=utils.OpenEnumMeta): class ViewerInfoTypedDict(TypedDict): - role: NotRequired[Role] + role: NotRequired[ViewerInfoRole] r"""DEPRECATED - use permissions instead. Viewer's role on the specific document.""" last_viewed_time: NotRequired[datetime] class ViewerInfo(BaseModel): role: Annotated[ - Optional[Role], + Optional[ViewerInfoRole], pydantic.Field( deprecated="warning: ** DEPRECATED ** - Deprecated on 2026-02-05, removal scheduled for 2026-10-15: Use permissions instead." ), @@ -45,7 +45,7 @@ class ViewerInfo(BaseModel): def serialize_role(self, value): if isinstance(value, str): try: - return models.Role(value) + return models.ViewerInfoRole(value) except ValueError: return value return value diff --git a/src/glean/api_client/people.py b/src/glean/api_client/people.py index 5e0a722f..a1cca36e 100644 --- a/src/glean/api_client/people.py +++ b/src/glean/api_client/people.py @@ -62,7 +62,7 @@ def debug( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -101,7 +101,7 @@ def debug( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.DebugUserResponse, http_res) if utils.match_response(http_res, ["400", "401", "4XX"], "*"): http_res_text = utils.stream_to_text(http_res) @@ -163,7 +163,7 @@ async def debug_async( request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json; charset=UTF-8", + accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -202,7 +202,7 @@ async def debug_async( retry_config=retry_config, ) - if utils.match_response(http_res, "200", "application/json; charset=UTF-8"): + if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.DebugUserResponse, http_res) if utils.match_response(http_res, ["400", "401", "4XX"], "*"): http_res_text = await utils.stream_to_text_async(http_res) diff --git a/src/glean/api_client/sdk.py b/src/glean/api_client/sdk.py index b2c9f79e..484c68ff 100644 --- a/src/glean/api_client/sdk.py +++ b/src/glean/api_client/sdk.py @@ -16,6 +16,7 @@ if TYPE_CHECKING: from glean.api_client.agents import Agents + from glean.api_client.chat_sdk import ChatSDK from glean.api_client.client import Client from glean.api_client.indexing import Indexing from glean.api_client.search import Search @@ -43,12 +44,14 @@ class Glean(BaseSDK): """ agents: "Agents" + chat: "ChatSDK" skills: "Skills" search: "Search" client: "Client" indexing: "Indexing" _sub_sdk_map = { "agents": ("glean.api_client.agents", "Agents"), + "chat": ("glean.api_client.chat_sdk", "ChatSDK"), "skills": ("glean.api_client.skills", "Skills"), "search": ("glean.api_client.search", "Search"), "client": ("glean.api_client.client", "Client"), diff --git a/src/glean/api_client/search.py b/src/glean/api_client/search.py index 571fc890..91ea57d2 100644 --- a/src/glean/api_client/search.py +++ b/src/glean/api_client/search.py @@ -17,7 +17,6 @@ def query( page_size: Optional[int] = 10, cursor: OptionalNullable[str] = UNSET, datasources: Optional[Iterable[str]] = None, - datasource_instances: Optional[Iterable[str]] = None, filters: Optional[ Union[ Iterable[models.PlatformFilter], @@ -34,7 +33,8 @@ def query( ) -> models.PlatformSearchResponse: r"""Search - Execute a search query and retrieve ranked results. This is the data retrieval variant of the search API and returns only results and pagination state. + Search your organization's connected content and return ranked document results with cursor pagination. Use `GET /api/search/filters` to discover datasource identifiers and common filter fields. Built-in filter names are validated; other field names are accepted as custom filters and behavior depends on your Glean configuration and connected sources. + Errors: HTTP 422 `unprocessable_query` returns no `results` or `next_cursor`. See `warnings` on the response for non-blocking issues such as partially available results. Not every query issue produces a warning or error. :param query: The search query string. Supports inline operators such as `from:jane type:document app:confluence`. Inline operators are AND'd with structured `filters`. @@ -42,11 +42,9 @@ def query( :param page_size: Number of results to return per page. :param cursor: Opaque pagination token from a previous response's `next_cursor` field. Omit on the first request. - :param datasources: Restrict results to specific datasources. Requests must not specify both `datasources` and `datasource_instances`. + :param datasources: Restrict results to specific datasource identifiers returned by `GET /api/search/filters`. Scopes by datasource type and may include results from multiple instances of that type. - :param datasource_instances: Restrict results to specific datasource instances. Values are datasource instance identifiers returned by `GET /api/search/filters`. Requests must not specify both `datasources` and `datasource_instances`. - - :param filters: Structured filters applied to search results. Equality operators OR multiple values within a filter. Multiple filters are AND'd together, including range filters on the same field. Filters are AND'd with any inline operators in `query`. Note that conflicting constraints on the same field (e.g., `type:document` in the query and `type: spreadsheet` in a filter) produce an empty result set. + :param filters: Structured filters applied to search results. Multiple values within a filter with `EQUALS` are OR'd; separate filters are AND'd. Conflicting constraints on the same field (for example, `type:document` in `query` and `type:spreadsheet` in a filter) return an empty result set. See `Filter.field` for built-in field names and operators. Other nonblank field names are accepted as custom filters without validation; behavior depends on your connected sources. :param time_range: Filter results to those last updated within this range. :param retries: Override the default retry configuration for this method @@ -69,9 +67,6 @@ def query( page_size=page_size, cursor=cursor, datasources=utils.unmarshal(datasources, Optional[List[str]]), - datasource_instances=utils.unmarshal( - datasource_instances, Optional[List[str]] - ), filters=utils.get_pydantic_model( filters, Optional[List[models.PlatformFilter]] ), @@ -137,7 +132,7 @@ def query( return unmarshal_json_response(models.PlatformSearchResponse, http_res) if utils.match_response( http_res, - ["400", "401", "403", "404", "408", "413", "429"], + ["400", "401", "403", "404", "408", "413", "422", "429"], "application/problem+json", ): response_data = unmarshal_json_response( @@ -165,7 +160,6 @@ async def query_async( page_size: Optional[int] = 10, cursor: OptionalNullable[str] = UNSET, datasources: Optional[Iterable[str]] = None, - datasource_instances: Optional[Iterable[str]] = None, filters: Optional[ Union[ Iterable[models.PlatformFilter], @@ -182,7 +176,8 @@ async def query_async( ) -> models.PlatformSearchResponse: r"""Search - Execute a search query and retrieve ranked results. This is the data retrieval variant of the search API and returns only results and pagination state. + Search your organization's connected content and return ranked document results with cursor pagination. Use `GET /api/search/filters` to discover datasource identifiers and common filter fields. Built-in filter names are validated; other field names are accepted as custom filters and behavior depends on your Glean configuration and connected sources. + Errors: HTTP 422 `unprocessable_query` returns no `results` or `next_cursor`. See `warnings` on the response for non-blocking issues such as partially available results. Not every query issue produces a warning or error. :param query: The search query string. Supports inline operators such as `from:jane type:document app:confluence`. Inline operators are AND'd with structured `filters`. @@ -190,11 +185,9 @@ async def query_async( :param page_size: Number of results to return per page. :param cursor: Opaque pagination token from a previous response's `next_cursor` field. Omit on the first request. - :param datasources: Restrict results to specific datasources. Requests must not specify both `datasources` and `datasource_instances`. + :param datasources: Restrict results to specific datasource identifiers returned by `GET /api/search/filters`. Scopes by datasource type and may include results from multiple instances of that type. - :param datasource_instances: Restrict results to specific datasource instances. Values are datasource instance identifiers returned by `GET /api/search/filters`. Requests must not specify both `datasources` and `datasource_instances`. - - :param filters: Structured filters applied to search results. Equality operators OR multiple values within a filter. Multiple filters are AND'd together, including range filters on the same field. Filters are AND'd with any inline operators in `query`. Note that conflicting constraints on the same field (e.g., `type:document` in the query and `type: spreadsheet` in a filter) produce an empty result set. + :param filters: Structured filters applied to search results. Multiple values within a filter with `EQUALS` are OR'd; separate filters are AND'd. Conflicting constraints on the same field (for example, `type:document` in `query` and `type:spreadsheet` in a filter) return an empty result set. See `Filter.field` for built-in field names and operators. Other nonblank field names are accepted as custom filters without validation; behavior depends on your connected sources. :param time_range: Filter results to those last updated within this range. :param retries: Override the default retry configuration for this method @@ -217,9 +210,6 @@ async def query_async( page_size=page_size, cursor=cursor, datasources=utils.unmarshal(datasources, Optional[List[str]]), - datasource_instances=utils.unmarshal( - datasource_instances, Optional[List[str]] - ), filters=utils.get_pydantic_model( filters, Optional[List[models.PlatformFilter]] ), @@ -285,7 +275,245 @@ async def query_async( return unmarshal_json_response(models.PlatformSearchResponse, http_res) if utils.match_response( http_res, - ["400", "401", "403", "404", "408", "413", "429"], + ["400", "401", "403", "404", "408", "413", "422", "429"], + "application/problem+json", + ): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, ["500", "503"], "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + + def list_filters( + self, + *, + datasources: Optional[Iterable[str]] = None, + query: Optional[str] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.PlatformSearchFiltersResponseResponse: + r"""List search filters + + List datasources and common built-in filter fields visible to the authenticated user. This is a best-effort catalog, not an exhaustive list of every filter search accepts. + Without `query`, returns field metadata only and does not run a search. With a nonblank `query`, provide exactly one `datasources` value to request suggested filter values for that query; no documents are returned and this endpoint does not include warning objects. See `FilterFieldInfo.values` for limitations on suggested values. Rate-limited requests return HTTP 429 with `Retry-After`; temporary backend unavailability returns HTTP 503. + + + :param datasources: Restrict metadata to one or more datasource identifiers as returned by this endpoint (for example, `jira`). With a nonblank `query`, exactly one datasource is required. Unknown or inaccessible identifiers return `invalid_datasource`. + + :param query: Optional search query that requests suggested filter values for the selected datasource. Must be nonblank when present. Triggers a search for facet values only; does not return documents. + + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PlatformSearchFiltersRequest( + datasources=utils.unmarshal(datasources, Optional[List[str]]), + query=query, + ) + + req = self._build_request( + method="GET", + path="/api/search/filters", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="platform-search-filters", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Search"], + extensions={ + "x-glean-experimental": { + "id": "0b585621-13fb-4544-bf20-5e1c99452735", + "introduced": "2026-05-12", + }, + "x-visibility": "Public", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return models.PlatformSearchFiltersResponseResponse( + result=unmarshal_json_response( + models.PlatformSearchFiltersResponse, http_res + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "408", "429"], + "application/problem+json", + ): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, ["500", "503"], "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + + async def list_filters_async( + self, + *, + datasources: Optional[Iterable[str]] = None, + query: Optional[str] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.PlatformSearchFiltersResponseResponse: + r"""List search filters + + List datasources and common built-in filter fields visible to the authenticated user. This is a best-effort catalog, not an exhaustive list of every filter search accepts. + Without `query`, returns field metadata only and does not run a search. With a nonblank `query`, provide exactly one `datasources` value to request suggested filter values for that query; no documents are returned and this endpoint does not include warning objects. See `FilterFieldInfo.values` for limitations on suggested values. Rate-limited requests return HTTP 429 with `Retry-After`; temporary backend unavailability returns HTTP 503. + + + :param datasources: Restrict metadata to one or more datasource identifiers as returned by this endpoint (for example, `jira`). With a nonblank `query`, exactly one datasource is required. Unknown or inaccessible identifiers return `invalid_datasource`. + + :param query: Optional search query that requests suggested filter values for the selected datasource. Must be nonblank when present. Triggers a search for facet values only; does not return documents. + + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PlatformSearchFiltersRequest( + datasources=utils.unmarshal(datasources, Optional[List[str]]), + query=query, + ) + + req = self._build_request_async( + method="GET", + path="/api/search/filters", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="platform-search-filters", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Search"], + extensions={ + "x-glean-experimental": { + "id": "0b585621-13fb-4544-bf20-5e1c99452735", + "introduced": "2026-05-12", + }, + "x-visibility": "Public", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return models.PlatformSearchFiltersResponseResponse( + result=unmarshal_json_response( + models.PlatformSearchFiltersResponse, http_res + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "408", "429"], "application/problem+json", ): response_data = unmarshal_json_response( diff --git a/src/glean/api_client/skills.py b/src/glean/api_client/skills.py index 094194c4..9ced0d8e 100644 --- a/src/glean/api_client/skills.py +++ b/src/glean/api_client/skills.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from .basesdk import BaseSDK +from enum import Enum from glean.api_client import errors, models, utils from glean.api_client._hooks import HookContext from glean.api_client.types import OptionalNullable, UNSET @@ -9,6 +10,11 @@ from typing import Any, Mapping, Optional, Union +class PreviewSourceAcceptEnum(str, Enum): + APPLICATION_JSON = "application/json" + TEXT_EVENT_STREAM = "text/event-stream" + + class Skills(BaseSDK): def create( self, @@ -704,6 +710,492 @@ async def validate_async( raise errors.GleanError("Unexpected response received", http_res) + def preview_source( + self, + *, + source_url: str, + stream: Optional[bool] = False, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + accept_header_override: Optional[PreviewSourceAcceptEnum] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.PlatformSkillsPreviewSourceResponse: + r"""Preview a GitHub skill source + + Inspect a GitHub URL without persisting a source or any discovered skills. Set stream to true to receive repository scan progress as server-sent events; otherwise the response contains the completed preview. + + + :param source_url: GitHub URL for a skill directory, SKILL.md file, or repository to inspect. + :param stream: Whether to stream repository scan progress using server-sent events. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param accept_header_override: Override the default accept header for this method + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PlatformSkillSourcePreviewRequest( + source_url=source_url, + stream=stream, + ) + + req = self._build_request( + method="POST", + path="/api/skills/sources/preview", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value=accept_header_override.value + if accept_header_override is not None + else "application/json;q=1, text/event-stream;q=0", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.PlatformSkillSourcePreviewRequest + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="platform-skills-preview-source", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Skills"], + extensions={ + "x-codegen-request-body-name": "request", + "x-glean-experimental": { + "id": "1629009b-244a-400a-bf55-c441dfbc586c", + "introduced": "2026-07-23", + }, + "x-visibility": "Public", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.PlatformSkillSourcePreviewResponse, http_res + ) + if utils.match_response(http_res, "200", "text/event-stream"): + return http_res.text + if utils.match_response( + http_res, + ["400", "401", "403", "408", "413", "429"], + "application/problem+json", + ): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, ["500", "503"], "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + + async def preview_source_async( + self, + *, + source_url: str, + stream: Optional[bool] = False, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + accept_header_override: Optional[PreviewSourceAcceptEnum] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.PlatformSkillsPreviewSourceResponse: + r"""Preview a GitHub skill source + + Inspect a GitHub URL without persisting a source or any discovered skills. Set stream to true to receive repository scan progress as server-sent events; otherwise the response contains the completed preview. + + + :param source_url: GitHub URL for a skill directory, SKILL.md file, or repository to inspect. + :param stream: Whether to stream repository scan progress using server-sent events. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param accept_header_override: Override the default accept header for this method + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PlatformSkillSourcePreviewRequest( + source_url=source_url, + stream=stream, + ) + + req = self._build_request_async( + method="POST", + path="/api/skills/sources/preview", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value=accept_header_override.value + if accept_header_override is not None + else "application/json;q=1, text/event-stream;q=0", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.PlatformSkillSourcePreviewRequest + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="platform-skills-preview-source", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Skills"], + extensions={ + "x-codegen-request-body-name": "request", + "x-glean-experimental": { + "id": "1629009b-244a-400a-bf55-c441dfbc586c", + "introduced": "2026-07-23", + }, + "x-visibility": "Public", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.PlatformSkillSourcePreviewResponse, http_res + ) + if utils.match_response(http_res, "200", "text/event-stream"): + return http_res.text + if utils.match_response( + http_res, + ["400", "401", "403", "408", "413", "429"], + "application/problem+json", + ): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, ["500", "503"], "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + + def update( + self, + *, + skill_id: str, + status: models.PlatformSkillUpdateStatus, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.PlatformSkillUpdateResponse: + r"""Update skill + + Update mutable metadata for a skill. V1 supports enabling or disabling a skill without changing its content. + + + :param skill_id: Glean skill ID. + :param status: New status for the skill. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PlatformSkillsUpdateRequest( + skill_id=skill_id, + platform_skill_update_request=models.PlatformSkillUpdateRequest( + status=status, + ), + ) + + req = self._build_request( + method="PATCH", + path="/api/skills/{skill_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.platform_skill_update_request, + False, + False, + "json", + models.PlatformSkillUpdateRequest, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="platform-skills-update", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Skills"], + extensions={ + "x-glean-experimental": { + "id": "262e1f6b-6c2d-4d6d-943b-fc251d2fb38b", + "introduced": "2026-07-20", + }, + "x-visibility": "Public", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.PlatformSkillUpdateResponse, http_res) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "408", "409", "413", "429"], + "application/problem+json", + ): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, ["500", "503"], "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + + async def update_async( + self, + *, + skill_id: str, + status: models.PlatformSkillUpdateStatus, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.PlatformSkillUpdateResponse: + r"""Update skill + + Update mutable metadata for a skill. V1 supports enabling or disabling a skill without changing its content. + + + :param skill_id: Glean skill ID. + :param status: New status for the skill. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PlatformSkillsUpdateRequest( + skill_id=skill_id, + platform_skill_update_request=models.PlatformSkillUpdateRequest( + status=status, + ), + ) + + req = self._build_request_async( + method="PATCH", + path="/api/skills/{skill_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.platform_skill_update_request, + False, + False, + "json", + models.PlatformSkillUpdateRequest, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="platform-skills-update", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Skills"], + extensions={ + "x-glean-experimental": { + "id": "262e1f6b-6c2d-4d6d-943b-fc251d2fb38b", + "introduced": "2026-07-20", + }, + "x-visibility": "Public", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.PlatformSkillUpdateResponse, http_res) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "408", "409", "413", "429"], + "application/problem+json", + ): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, ["500", "503"], "application/problem+json"): + response_data = unmarshal_json_response( + errors.PlatformProblemDetailErrorData, http_res + ) + raise errors.PlatformProblemDetailError(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + def retrieve( self, *, diff --git a/src/glean/api_client/tools.py b/src/glean/api_client/tools.py index 9c069926..aa8b10a3 100644 --- a/src/glean/api_client/tools.py +++ b/src/glean/api_client/tools.py @@ -1197,3 +1197,211 @@ async def authorize_tool_server_async( raise errors.GleanError("API error occurred", http_res, http_res_text) raise errors.GleanError("Unexpected response received", http_res) + + def get_tool_server_tools( + self, + *, + server_id: str, + tool_names: Iterable[str], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.ToolDefinitionsResponse: + r"""Get tool definitions from a tool server. + + Returns the name, description and JSON input schema for the named tools on the + specified tool server. Works for both action packs and MCP servers. + + `toolNames` is required. Names that do not exist on the server are returned in + `notFound` rather than failing the request, so a single bad name does not force + callers into one-at-a-time retries. Matching is case-insensitive and treats `-` + and `_` as equivalent. + + Native tools are not served; `serverId=native` returns 404. + + + :param server_id: Unique identifier of the tool server. + :param tool_names: Tool names to look up on this server. Maximum 100. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.GetToolServerToolsRequest( + server_id=server_id, + tool_names=utils.unmarshal(tool_names, List[str]), + ) + + req = self._build_request( + method="GET", + path="/rest/api/v1/tool-servers/{serverId}/tools", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="getToolServerTools", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Tools"], + extensions={ + "x-glean-experimental": { + "id": "332eb38f-1b5d-4896-88e3-59db5e96e4e1", + "introduced": "2026-07-30", + }, + "x-visibility": "Preview", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.ToolDefinitionsResponse, http_res) + if utils.match_response(http_res, ["400", "401", "404", "429", "4XX"], "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, ["503", "5XX"], "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) + + async def get_tool_server_tools_async( + self, + *, + server_id: str, + tool_names: Iterable[str], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.ToolDefinitionsResponse: + r"""Get tool definitions from a tool server. + + Returns the name, description and JSON input schema for the named tools on the + specified tool server. Works for both action packs and MCP servers. + + `toolNames` is required. Names that do not exist on the server are returned in + `notFound` rather than failing the request, so a single bad name does not force + callers into one-at-a-time retries. Matching is case-insensitive and treats `-` + and `_` as equivalent. + + Native tools are not served; `serverId=native` returns 404. + + + :param server_id: Unique identifier of the tool server. + :param tool_names: Tool names to look up on this server. Maximum 100. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.GetToolServerToolsRequest( + server_id=server_id, + tool_names=utils.unmarshal(tool_names, List[str]), + ) + + req = self._build_request_async( + method="GET", + path="/rest/api/v1/tool-servers/{serverId}/tools", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="getToolServerTools", + oauth2_scopes=None, + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + tags=["Tools"], + extensions={ + "x-glean-experimental": { + "id": "332eb38f-1b5d-4896-88e3-59db5e96e4e1", + "introduced": "2026-07-30", + }, + "x-visibility": "Preview", + }, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.ToolDefinitionsResponse, http_res) + if utils.match_response(http_res, ["400", "401", "404", "429", "4XX"], "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, ["503", "5XX"], "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.GleanError("API error occurred", http_res, http_res_text) + + raise errors.GleanError("Unexpected response received", http_res) diff --git a/tests/mockserver/internal/handler/generated_handlers.go b/tests/mockserver/internal/handler/generated_handlers.go index f24dcff8..690005ed 100644 --- a/tests/mockserver/internal/handler/generated_handlers.go +++ b/tests/mockserver/internal/handler/generated_handlers.go @@ -16,6 +16,7 @@ func GeneratedHandlers(ctx context.Context, dir *logging.HTTPFileDirectory, rt * NewGeneratedHandler(ctx, http.MethodDelete, "/rest/api/index/document/{docId}/custom-metadata/{groupName}", pathDeleteRestAPIIndexDocumentDocIDCustomMetadataGroupName(dir, rt)), NewGeneratedHandler(ctx, http.MethodGet, "/api/agents/{agent_id}", pathGetAPIAgentsAgentID(dir, rt)), NewGeneratedHandler(ctx, http.MethodGet, "/api/agents/{agent_id}/schemas", pathGetAPIAgentsAgentIDSchemas(dir, rt)), + NewGeneratedHandler(ctx, http.MethodGet, "/api/search/filters", pathGetAPISearchFilters(dir, rt)), NewGeneratedHandler(ctx, http.MethodGet, "/api/skills", pathGetAPISkills(dir, rt)), NewGeneratedHandler(ctx, http.MethodGet, "/api/skills/{skill_id}", pathGetAPISkillsSkillID(dir, rt)), NewGeneratedHandler(ctx, http.MethodGet, "/api/skills/{skill_id}/content", pathGetAPISkillsSkillIDContent(dir, rt)), @@ -34,10 +35,13 @@ func GeneratedHandlers(ctx context.Context, dir *logging.HTTPFileDirectory, rt * NewGeneratedHandler(ctx, http.MethodGet, "/rest/api/v1/governance/data/policies/{id}", pathGetRestAPIV1GovernanceDataPoliciesID(dir, rt)), NewGeneratedHandler(ctx, http.MethodGet, "/rest/api/v1/people/{person_id}/photo", pathGetRestAPIV1PeoplePersonIDPhoto(dir, rt)), NewGeneratedHandler(ctx, http.MethodGet, "/rest/api/v1/tool-servers/{serverId}/auth", pathGetRestAPIV1ToolServersServerIDAuth(dir, rt)), + NewGeneratedHandler(ctx, http.MethodGet, "/rest/api/v1/tool-servers/{serverId}/tools", pathGetRestAPIV1ToolServersServerIDTools(dir, rt)), NewGeneratedHandler(ctx, http.MethodGet, "/rest/api/v1/tools/list", pathGetRestAPIV1ToolsList(dir, rt)), + NewGeneratedHandler(ctx, http.MethodPatch, "/api/skills/{skill_id}", pathPatchAPISkillsSkillID(dir, rt)), NewGeneratedHandler(ctx, http.MethodPatch, "/rest/api/v1/configure/datasources/{datasourceId}/instances/{instanceId}", pathPatchRestAPIV1ConfigureDatasourcesDatasourceIDInstancesInstanceID(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/agents/search", pathPostAPIAgentsSearch(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/agents/{agent_id}/runs", pathPostAPIAgentsAgentIDRuns(dir, rt)), + NewGeneratedHandler(ctx, http.MethodPost, "/api/chat", pathPostAPIChat(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/adddatasource", pathPostAPIIndexV1Adddatasource(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/betausers", pathPostAPIIndexV1Betausers(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/bulkindexdocuments", pathPostAPIIndexV1Bulkindexdocuments(dir, rt)), @@ -45,6 +49,10 @@ func GeneratedHandlers(ctx context.Context, dir *logging.HTTPFileDirectory, rt * NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/bulkindexmemberships", pathPostAPIIndexV1Bulkindexmemberships(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/bulkindexusers", pathPostAPIIndexV1Bulkindexusers(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/checkdocumentaccess", pathPostAPIIndexV1Checkdocumentaccess(dir, rt)), + NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/debug/{datasource}/document", pathPostAPIIndexV1DebugDatasourceDocument(dir, rt)), + NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/debug/{datasource}/document/events", pathPostAPIIndexV1DebugDatasourceDocumentEvents(dir, rt)), + NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/debug/{datasource}/documents", pathPostAPIIndexV1DebugDatasourceDocuments(dir, rt)), + NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/debug/{datasource}/user", pathPostAPIIndexV1DebugDatasourceUser(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/deletedocument", pathPostAPIIndexV1Deletedocument(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/deletegroup", pathPostAPIIndexV1Deletegroup(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/deletemembership", pathPostAPIIndexV1Deletemembership(dir, rt)), @@ -65,6 +73,7 @@ func GeneratedHandlers(ctx context.Context, dir *logging.HTTPFileDirectory, rt * NewGeneratedHandler(ctx, http.MethodPost, "/api/index/v1/updatepermissions", pathPostAPIIndexV1Updatepermissions(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/search", pathPostAPISearch(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/skills", pathPostAPISkills(dir, rt)), + NewGeneratedHandler(ctx, http.MethodPost, "/api/skills/sources/preview", pathPostAPISkillsSourcesPreview(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/skills/validation", pathPostAPISkillsValidation(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/api/skills/{skill_id}/versions", pathPostAPISkillsSkillIDVersions(dir, rt)), NewGeneratedHandler(ctx, http.MethodPost, "/rest/api/index/submissions/{datasourceInstance}/{type}", pathPostRestAPIIndexSubmissionsDatasourceInstanceType(dir, rt)), @@ -74,6 +83,7 @@ func GeneratedHandlers(ctx context.Context, dir *logging.HTTPFileDirectory, 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/agents/{agent_id}/import", pathPostRestAPIV1AgentsAgentIDImport(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/tests/mockserver/internal/handler/pathgetapisearchfilters.go b/tests/mockserver/internal/handler/pathgetapisearchfilters.go new file mode 100644 index 00000000..61dfb292 --- /dev/null +++ b/tests/mockserver/internal/handler/pathgetapisearchfilters.go @@ -0,0 +1,65 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +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 pathGetAPISearchFilters(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 "platform-search-filters[0]": + dir.HandlerFunc("platform-search-filters", testPlatformSearchFiltersPlatformSearchFilters0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testPlatformSearchFiltersPlatformSearchFilters0(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.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.PlatformSearchFiltersResponse = &components.PlatformSearchFiltersResponse{ + Datasources: []components.PlatformDatasourceFilterInfo{}, + RequestID: "", + } + 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/tests/mockserver/internal/handler/pathgetrestapiv1toolserversserveridtools.go b/tests/mockserver/internal/handler/pathgetrestapiv1toolserversserveridtools.go new file mode 100644 index 00000000..71a41e80 --- /dev/null +++ b/tests/mockserver/internal/handler/pathgetrestapiv1toolserversserveridtools.go @@ -0,0 +1,69 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +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 pathGetRestAPIV1ToolServersServerIDTools(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 "getToolServerTools[0]": + dir.HandlerFunc("getToolServerTools", testGetToolServerToolsGetToolServerTools0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testGetToolServerToolsGetToolServerTools0(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.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.ToolDefinitionsResponse = &components.ToolDefinitionsResponse{ + Tools: []components.ToolDefinition{ + components.ToolDefinition{ + ServerID: "", + Name: "", + }, + }, + } + 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/tests/mockserver/internal/handler/pathpatchapiskillsskillid.go b/tests/mockserver/internal/handler/pathpatchapiskillsskillid.go new file mode 100644 index 00000000..2b4d9db5 --- /dev/null +++ b/tests/mockserver/internal/handler/pathpatchapiskillsskillid.go @@ -0,0 +1,84 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package handler + +import ( + "fmt" + "log" + "mockserver/internal/handler/assert" + "mockserver/internal/logging" + "mockserver/internal/sdk/models/components" + "mockserver/internal/sdk/types" + "mockserver/internal/sdk/utils" + "mockserver/internal/tracking" + "net/http" +) + +func pathPatchAPISkillsSkillID(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 "platform-skills-update[0]": + dir.HandlerFunc("platform-skills-update", testPlatformSkillsUpdatePlatformSkillsUpdate0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testPlatformSkillsUpdatePlatformSkillsUpdate0(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.PlatformSkillUpdateResponse = &components.PlatformSkillUpdateResponse{ + Skill: components.PlatformSkill{ + ID: "", + DisplayName: "Afton14", + Description: "taut netsuke duh sonata boastfully elegantly management come", + LatestVersion: 425795, + LatestMinorVersion: 741364, + Status: components.PlatformSkillStatusDisabled, + Origin: components.PlatformSkillOriginCustom, + Owner: components.PlatformPersonReference{ + Name: "", + }, + CreatedAt: types.MustTimeFromString("2024-12-20T01:31:39.364Z"), + UpdatedAt: types.MustTimeFromString("2025-12-04T02:59:37.124Z"), + }, + RequestID: "", + } + 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/tests/mockserver/internal/handler/pathpostapichat.go b/tests/mockserver/internal/handler/pathpostapichat.go new file mode 100644 index 00000000..7a5ec745 --- /dev/null +++ b/tests/mockserver/internal/handler/pathpostapichat.go @@ -0,0 +1,87 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package handler + +import ( + "fmt" + "log" + "mockserver/internal/handler/assert" + "mockserver/internal/logging" + "mockserver/internal/sdk/models/components" + "mockserver/internal/sdk/types" + "mockserver/internal/sdk/utils" + "mockserver/internal/tracking" + "net/http" +) + +func pathPostAPIChat(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 "platform-chat-create[0]": + dir.HandlerFunc("platform-chat-create", testPlatformChatCreatePlatformChatCreate0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testPlatformChatCreatePlatformChatCreate0(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;q=1", "text/event-stream;q=0"}); 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.PlatformChatCompletedResponse = &components.PlatformChatCompletedResponse{ + ID: "", + Object: components.ObjectResponse, + CreatedAt: types.MustTimeFromString("2026-05-19T05:32:52.505Z"), + Status: components.PlatformChatCompletedResponseStatusCompleted, + Output: []components.PlatformChatOutputMessage{ + components.PlatformChatOutputMessage{ + Type: components.PlatformChatOutputMessageTypeMessage, + Role: components.PlatformChatOutputMessageRoleAssistant, + Content: []components.PlatformChatOutputTextContent{ + components.PlatformChatOutputTextContent{ + Type: components.PlatformChatOutputTextContentTypeOutputText, + Text: "", + }, + }, + }, + }, + Store: false, + RequestID: "", + } + 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/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocument.go b/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocument.go new file mode 100644 index 00000000..bc55c2aa --- /dev/null +++ b/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocument.go @@ -0,0 +1,76 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package handler + +import ( + "fmt" + "log" + "mockserver/internal/handler/assert" + "mockserver/internal/logging" + "mockserver/internal/sdk/models/components" + "mockserver/internal/sdk/types" + "mockserver/internal/sdk/utils" + "mockserver/internal/tracking" + "net/http" +) + +func pathPostAPIIndexV1DebugDatasourceDocument(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 "post_/api/index/v1/debug/{datasource}/document[0]": + dir.HandlerFunc("post_/api/index/v1/debug/{datasource}/document", testPostAPIIndexV1DebugDatasourceDocumentPostAPIIndexV1DebugDatasourceDocument0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testPostAPIIndexV1DebugDatasourceDocumentPostAPIIndexV1DebugDatasourceDocument0(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.DebugDocumentResponse = &components.DebugDocumentResponse{ + Status: &components.DocumentStatusResponse{ + UploadStatus: types.String("UPLOADED"), + LastUploadedAt: types.String("2021-08-06T17:58:01.000Z"), + IndexingStatus: types.String("INDEXED"), + LastIndexedAt: types.String("2021-08-06T17:58:01.000Z"), + PermissionIdentityStatus: types.String("UPLOADED"), + }, + } + 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/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocumentevents.go b/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocumentevents.go new file mode 100644 index 00000000..84c2b224 --- /dev/null +++ b/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocumentevents.go @@ -0,0 +1,75 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package handler + +import ( + "fmt" + "log" + "mockserver/internal/handler/assert" + "mockserver/internal/logging" + "mockserver/internal/sdk/models/components" + "mockserver/internal/sdk/types" + "mockserver/internal/sdk/utils" + "mockserver/internal/tracking" + "net/http" +) + +func pathPostAPIIndexV1DebugDatasourceDocumentEvents(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 "post_/api/index/v1/debug/{datasource}/document/events[0]": + dir.HandlerFunc("post_/api/index/v1/debug/{datasource}/document/events", testPostAPIIndexV1DebugDatasourceDocumentEventsPostAPIIndexV1DebugDatasourceDocumentEvents0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testPostAPIIndexV1DebugDatasourceDocumentEventsPostAPIIndexV1DebugDatasourceDocumentEvents0(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.DebugDocumentLifecycleResponse = &components.DebugDocumentLifecycleResponse{ + LifeCycleEvents: []components.LifeCycleEvent{ + components.LifeCycleEvent{ + Event: components.LifeCycleEventEventIndexed.ToPointer(), + Timestamp: types.String("2021-08-06T17:58:01.000Z"), + }, + }, + } + 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/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocuments.go b/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocuments.go new file mode 100644 index 00000000..93cd1880 --- /dev/null +++ b/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourcedocuments.go @@ -0,0 +1,82 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package handler + +import ( + "fmt" + "log" + "mockserver/internal/handler/assert" + "mockserver/internal/logging" + "mockserver/internal/sdk/models/components" + "mockserver/internal/sdk/types" + "mockserver/internal/sdk/utils" + "mockserver/internal/tracking" + "net/http" +) + +func pathPostAPIIndexV1DebugDatasourceDocuments(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 "post_/api/index/v1/debug/{datasource}/documents[0]": + dir.HandlerFunc("post_/api/index/v1/debug/{datasource}/documents", testPostAPIIndexV1DebugDatasourceDocumentsPostAPIIndexV1DebugDatasourceDocuments0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testPostAPIIndexV1DebugDatasourceDocumentsPostAPIIndexV1DebugDatasourceDocuments0(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.DebugDocumentsResponse = &components.DebugDocumentsResponse{ + DocumentStatuses: []components.DebugDocumentsResponseItem{ + components.DebugDocumentsResponseItem{ + DebugInfo: &components.DebugDocumentResponse{ + Status: &components.DocumentStatusResponse{ + UploadStatus: types.String("UPLOADED"), + LastUploadedAt: types.String("2021-08-06T17:58:01.000Z"), + IndexingStatus: types.String("INDEXED"), + LastIndexedAt: types.String("2021-08-06T17:58:01.000Z"), + PermissionIdentityStatus: types.String("UPLOADED"), + }, + }, + }, + }, + } + 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/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourceuser.go b/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourceuser.go new file mode 100644 index 00000000..d7b771b1 --- /dev/null +++ b/tests/mockserver/internal/handler/pathpostapiindexv1debugdatasourceuser.go @@ -0,0 +1,74 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package handler + +import ( + "fmt" + "log" + "mockserver/internal/handler/assert" + "mockserver/internal/logging" + "mockserver/internal/sdk/models/components" + "mockserver/internal/sdk/types" + "mockserver/internal/sdk/utils" + "mockserver/internal/tracking" + "net/http" +) + +func pathPostAPIIndexV1DebugDatasourceUser(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 "post_/api/index/v1/debug/{datasource}/user[0]": + dir.HandlerFunc("post_/api/index/v1/debug/{datasource}/user", testPostAPIIndexV1DebugDatasourceUserPostAPIIndexV1DebugDatasourceUser0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testPostAPIIndexV1DebugDatasourceUserPostAPIIndexV1DebugDatasourceUser0(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.DebugUserResponse = &components.DebugUserResponse{ + Status: &components.UserStatusResponse{ + IsActiveUser: types.Bool(true), + UploadStatus: components.UploadStatusEnumUploaded.ToPointer(), + LastUploadedAt: types.String("2021-08-06T17:58:01.000Z"), + }, + } + 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/tests/mockserver/internal/handler/pathpostapisearch.go b/tests/mockserver/internal/handler/pathpostapisearch.go index 1575aab3..1e3fe6a9 100644 --- a/tests/mockserver/internal/handler/pathpostapisearch.go +++ b/tests/mockserver/internal/handler/pathpostapisearch.go @@ -56,6 +56,7 @@ func testPlatformSearchPlatformSearch0(w http.ResponseWriter, req *http.Request) HasMore: false, NextCursor: types.String(""), RequestID: "", + Warnings: []components.PlatformWarning{}, } respBodyBytes, err := utils.MarshalJSON(respBody, "", true) diff --git a/tests/mockserver/internal/handler/pathpostapiskillssourcespreview.go b/tests/mockserver/internal/handler/pathpostapiskillssourcespreview.go new file mode 100644 index 00000000..11e0efca --- /dev/null +++ b/tests/mockserver/internal/handler/pathpostapiskillssourcespreview.go @@ -0,0 +1,77 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +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 pathPostAPISkillsSourcesPreview(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 "platform-skills-preview-source[0]": + dir.HandlerFunc("platform-skills-preview-source", testPlatformSkillsPreviewSourcePlatformSkillsPreviewSource0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testPlatformSkillsPreviewSourcePlatformSkillsPreviewSource0(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;q=1", "text/event-stream;q=0"}); 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.PlatformSkillSourcePreviewResponse = &components.PlatformSkillSourcePreviewResponse{ + Skills: []components.PlatformSkillSourcePreview{}, + Failures: []components.PlatformSkillSourcePreviewFailure{ + components.PlatformSkillSourcePreviewFailure{ + SourceURL: "https://slimy-availability.org", + Code: components.PlatformSkillSourcePreviewFailureCodeSkillFetchFailed, + Detail: "", + }, + }, + RequestID: "", + } + 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/tests/mockserver/internal/handler/pathpostapiskillsvalidation.go b/tests/mockserver/internal/handler/pathpostapiskillsvalidation.go index 0fee34fc..2048ae91 100644 --- a/tests/mockserver/internal/handler/pathpostapiskillsvalidation.go +++ b/tests/mockserver/internal/handler/pathpostapiskillsvalidation.go @@ -56,7 +56,7 @@ func testPlatformSkillsValidatePlatformSkillsValidate0(w http.ResponseWriter, re Description: "overburden actual impact", }, Files: []components.PlatformSkillValidationFile{}, - Warnings: []components.PlatformSkillValidationWarning{}, + Warnings: []components.PlatformWarning{}, RequestID: "", } respBodyBytes, err := utils.MarshalJSON(respBody, "", true) diff --git a/tests/mockserver/internal/handler/pathpostrestapiv1agentsagentidimport.go b/tests/mockserver/internal/handler/pathpostrestapiv1agentsagentidimport.go new file mode 100644 index 00000000..1b96791e --- /dev/null +++ b/tests/mockserver/internal/handler/pathpostrestapiv1agentsagentidimport.go @@ -0,0 +1,84 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +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 pathPostRestAPIV1AgentsAgentIDImport(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 "importAgent[0]": + dir.HandlerFunc("importAgent", testImportAgentImportAgent0)(w, req) + default: + http.Error(w, fmt.Sprintf("Unknown test: %s[%d]", test, count), http.StatusBadRequest) + } + } +} + +func testImportAgentImportAgent0(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, "multipart/form-data", 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.ImportAgentResponse = &components.ImportAgentResponse{ + 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/tests/mockserver/internal/sdk/models/components/accessrequestpermissiondeniedresponseerror.go b/tests/mockserver/internal/sdk/models/components/accessrequestpermissiondeniedresponseerror.go new file mode 100644 index 00000000..bd5d24e4 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/accessrequestpermissiondeniedresponseerror.go @@ -0,0 +1,31 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" +) + +type AccessRequestPermissionDeniedResponseErrorType string + +const ( + AccessRequestPermissionDeniedResponseErrorTypePermissionDenied AccessRequestPermissionDeniedResponseErrorType = "PERMISSION_DENIED" +) + +func (e AccessRequestPermissionDeniedResponseErrorType) ToPointer() *AccessRequestPermissionDeniedResponseErrorType { + return &e +} +func (e *AccessRequestPermissionDeniedResponseErrorType) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "PERMISSION_DENIED": + *e = AccessRequestPermissionDeniedResponseErrorType(v) + return nil + default: + return fmt.Errorf("invalid value for AccessRequestPermissionDeniedResponseErrorType: %v", v) + } +} diff --git a/tests/mockserver/internal/sdk/models/components/authconfig.go b/tests/mockserver/internal/sdk/models/components/authconfig.go index 483958ea..6e47ddca 100644 --- a/tests/mockserver/internal/sdk/models/components/authconfig.go +++ b/tests/mockserver/internal/sdk/models/components/authconfig.go @@ -109,13 +109,14 @@ func (e *AuthConfigStatus) UnmarshalJSON(data []byte) error { } } -// TokenEndpointAuthMethod - The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. client_secret_post sends credentials as form fields, client_secret_basic sends them via Authorization header, none omits client secret and relies on PKCE only. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). +// TokenEndpointAuthMethod - The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). type TokenEndpointAuthMethod string const ( TokenEndpointAuthMethodClientSecretPost TokenEndpointAuthMethod = "client_secret_post" TokenEndpointAuthMethodClientSecretBasic TokenEndpointAuthMethod = "client_secret_basic" TokenEndpointAuthMethodNone TokenEndpointAuthMethod = "none" + TokenEndpointAuthMethodPrivateKeyJwt TokenEndpointAuthMethod = "private_key_jwt" ) func (e TokenEndpointAuthMethod) ToPointer() *TokenEndpointAuthMethod { @@ -132,6 +133,8 @@ func (e *TokenEndpointAuthMethod) UnmarshalJSON(data []byte) error { case "client_secret_basic": fallthrough case "none": + fallthrough + case "private_key_jwt": *e = TokenEndpointAuthMethod(v) return nil default: @@ -139,6 +142,39 @@ func (e *TokenEndpointAuthMethod) UnmarshalJSON(data []byte) error { } } +// AuthHeaderType - Defines the header structure for sending the API key or token to the server. Defaults to AUTHORIZATION_BEARER. Select the specific header format the server expects for transmitting the key. +type AuthHeaderType string + +const ( + AuthHeaderTypeAuthorizationBearer AuthHeaderType = "AUTHORIZATION_BEARER" + AuthHeaderTypeAuthorizationToken AuthHeaderType = "AUTHORIZATION_TOKEN" + AuthHeaderTypeAuthorizationAPIKey AuthHeaderType = "AUTHORIZATION_API_KEY" + AuthHeaderTypeXAPIKey AuthHeaderType = "X_API_KEY" +) + +func (e AuthHeaderType) ToPointer() *AuthHeaderType { + return &e +} +func (e *AuthHeaderType) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "AUTHORIZATION_BEARER": + fallthrough + case "AUTHORIZATION_TOKEN": + fallthrough + case "AUTHORIZATION_API_KEY": + fallthrough + case "X_API_KEY": + *e = AuthHeaderType(v) + return nil + default: + return fmt.Errorf("invalid value for AuthHeaderType: %v", v) + } +} + // AuthConfig - Config for tool's authentication method. type AuthConfig struct { // Whether or not this tool is hosted on-premise. @@ -166,8 +202,10 @@ type AuthConfig struct { AuthorizationURL *string `json:"authorization_url,omitempty"` // The OAuth 2.0 Resource Indicator (RFC 8707) for the protected resource. Discovered from Protected Resource Metadata (RFC 9728) during DCR. Included in authorization and token exchange requests when present. Resource *string `json:"resource,omitempty"` - // The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. client_secret_post sends credentials as form fields, client_secret_basic sends them via Authorization header, none omits client secret and relies on PKCE only. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). + // The OAuth 2.0 token endpoint authentication method (RFC 7591). Determines how the client authenticates when exchanging an authorization code for a token. Values use lowercase to match the OAuth 2.0 wire format (RFC 7591 Section 2). TokenEndpointAuthMethod *TokenEndpointAuthMethod `json:"token_endpoint_auth_method,omitempty"` + // Defines the header structure for sending the API key or token to the server. Defaults to AUTHORIZATION_BEARER. Select the specific header format the server expects for transmitting the key. + AuthHeaderType *AuthHeaderType `json:"authHeaderType,omitempty"` // The time the tool was last authorized in ISO format (ISO 8601). LastAuthorizedAt *time.Time `json:"lastAuthorizedAt,omitempty"` } @@ -260,6 +298,13 @@ func (o *AuthConfig) GetTokenEndpointAuthMethod() *TokenEndpointAuthMethod { return o.TokenEndpointAuthMethod } +func (o *AuthConfig) GetAuthHeaderType() *AuthHeaderType { + if o == nil { + return nil + } + return o.AuthHeaderType +} + func (o *AuthConfig) GetLastAuthorizedAt() *time.Time { if o == nil { return nil diff --git a/tests/mockserver/internal/sdk/models/components/customdatasourceconfig.go b/tests/mockserver/internal/sdk/models/components/customdatasourceconfig.go index 070e9e35..4316d060 100644 --- a/tests/mockserver/internal/sdk/models/components/customdatasourceconfig.go +++ b/tests/mockserver/internal/sdk/models/components/customdatasourceconfig.go @@ -30,6 +30,8 @@ const ( DatasourceCategoryEntity DatasourceCategory = "ENTITY" DatasourceCategoryCalendar DatasourceCategory = "CALENDAR" DatasourceCategoryAgents DatasourceCategory = "AGENTS" + DatasourceCategoryAiConversation DatasourceCategory = "AI_CONVERSATION" + DatasourceCategoryAiArtifact DatasourceCategory = "AI_ARTIFACT" ) func (e DatasourceCategory) ToPointer() *DatasourceCategory { @@ -76,6 +78,10 @@ func (e *DatasourceCategory) UnmarshalJSON(data []byte) error { case "CALENDAR": fallthrough case "AGENTS": + fallthrough + case "AI_CONVERSATION": + fallthrough + case "AI_ARTIFACT": *e = DatasourceCategory(v) return nil default: diff --git a/tests/mockserver/internal/sdk/models/components/feedentry.go b/tests/mockserver/internal/sdk/models/components/feedentry.go index 3786e358..75c2030f 100644 --- a/tests/mockserver/internal/sdk/models/components/feedentry.go +++ b/tests/mockserver/internal/sdk/models/components/feedentry.go @@ -98,6 +98,7 @@ const ( JustificationTypeStarterKitOrgChart JustificationType = "STARTER_KIT_ORG_CHART" JustificationTypeStarterKitAddDoc JustificationType = "STARTER_KIT_ADD_DOC" JustificationTypeMeetingRecap JustificationType = "MEETING_RECAP" + JustificationTypeMeetingPrepAutomation JustificationType = "MEETING_PREP_AUTOMATION" JustificationTypeActiveDiscussion JustificationType = "ACTIVE_DISCUSSION" JustificationTypeMidDayCatchUp JustificationType = "MID_DAY_CATCH_UP" JustificationTypeQuerySuggestion JustificationType = "QUERY_SUGGESTION" @@ -208,6 +209,8 @@ func (e *JustificationType) UnmarshalJSON(data []byte) error { fallthrough case "MEETING_RECAP": fallthrough + case "MEETING_PREP_AUTOMATION": + fallthrough case "ACTIVE_DISCUSSION": fallthrough case "MID_DAY_CATCH_UP": diff --git a/tests/mockserver/internal/sdk/models/components/feedrequest.go b/tests/mockserver/internal/sdk/models/components/feedrequest.go index 2eff19ff..854c8390 100644 --- a/tests/mockserver/internal/sdk/models/components/feedrequest.go +++ b/tests/mockserver/internal/sdk/models/components/feedrequest.go @@ -40,6 +40,7 @@ const ( FeedRequestCategoryPlanMyDay FeedRequestCategory = "PLAN_MY_DAY" FeedRequestCategoryEndMyDay FeedRequestCategory = "END_MY_DAY" FeedRequestCategoryStarterKit FeedRequestCategory = "STARTER_KIT" + FeedRequestCategoryMeetingPrepAutomation FeedRequestCategory = "MEETING_PREP_AUTOMATION" FeedRequestCategoryMidDayCatchUp FeedRequestCategory = "MID_DAY_CATCH_UP" FeedRequestCategoryQuerySuggestion FeedRequestCategory = "QUERY_SUGGESTION" FeedRequestCategoryCoworkCujPromo FeedRequestCategory = "COWORK_CUJ_PROMO" @@ -125,6 +126,8 @@ func (e *FeedRequestCategory) UnmarshalJSON(data []byte) error { fallthrough case "STARTER_KIT": fallthrough + case "MEETING_PREP_AUTOMATION": + fallthrough case "MID_DAY_CATCH_UP": fallthrough case "QUERY_SUGGESTION": diff --git a/tests/mockserver/internal/sdk/models/components/feedresult.go b/tests/mockserver/internal/sdk/models/components/feedresult.go index 8e2124eb..158c7428 100644 --- a/tests/mockserver/internal/sdk/models/components/feedresult.go +++ b/tests/mockserver/internal/sdk/models/components/feedresult.go @@ -41,6 +41,7 @@ const ( FeedResultCategoryPlanMyDay FeedResultCategory = "PLAN_MY_DAY" FeedResultCategoryEndMyDay FeedResultCategory = "END_MY_DAY" FeedResultCategoryStarterKit FeedResultCategory = "STARTER_KIT" + FeedResultCategoryMeetingPrepAutomation FeedResultCategory = "MEETING_PREP_AUTOMATION" FeedResultCategoryMidDayCatchUp FeedResultCategory = "MID_DAY_CATCH_UP" FeedResultCategoryQuerySuggestion FeedResultCategory = "QUERY_SUGGESTION" FeedResultCategoryCoworkCujPromo FeedResultCategory = "COWORK_CUJ_PROMO" @@ -126,6 +127,8 @@ func (e *FeedResultCategory) UnmarshalJSON(data []byte) error { fallthrough case "STARTER_KIT": fallthrough + case "MEETING_PREP_AUTOMATION": + fallthrough case "MID_DAY_CATCH_UP": fallthrough case "QUERY_SUGGESTION": diff --git a/tests/mockserver/internal/sdk/models/components/importagentrequest.go b/tests/mockserver/internal/sdk/models/components/importagentrequest.go new file mode 100644 index 00000000..f4d77d24 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/importagentrequest.go @@ -0,0 +1,86 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "io" +) + +type Bundle struct { + FileName string `multipartForm:"name=fileName"` + Content io.Reader `multipartForm:"content"` +} + +func (o *Bundle) GetFileName() string { + if o == nil { + return "" + } + return o.FileName +} + +func (o *Bundle) GetContent() io.Reader { + if o == nil { + return nil + } + return o.Content +} + +type ImportAgentRequest struct { + // Zip of the agent folder (spec.yaml, instructions.md, skills/, subagents/) with symlinks dereferenced. + // + Bundle Bundle `multipartForm:"file,name=bundle"` + // Optional Git commit SHA to associate with this import. + GitCommitSha *string `multipartForm:"name=gitCommitSha"` + // Optional VCS commit author ID to associate with this import. + GitAuthorID *string `multipartForm:"name=gitAuthorId"` + // Optional commit message for the imported version. + CommitMessage *string `multipartForm:"name=commitMessage"` + // Whether the imported version is staged (saved without updating the live version) or published directly to the live version. + // + SyncMode *ImportAgentSyncMode `multipartForm:"name=syncMode"` + // When true, validates and stores a draft preview without publishing (used for PR preview links). Takes precedence over `syncMode`: when `isDraft` is true, `syncMode` is ignored. + // + IsDraft *bool `multipartForm:"name=isDraft"` +} + +func (o *ImportAgentRequest) GetBundle() Bundle { + if o == nil { + return Bundle{} + } + return o.Bundle +} + +func (o *ImportAgentRequest) GetGitCommitSha() *string { + if o == nil { + return nil + } + return o.GitCommitSha +} + +func (o *ImportAgentRequest) GetGitAuthorID() *string { + if o == nil { + return nil + } + return o.GitAuthorID +} + +func (o *ImportAgentRequest) GetCommitMessage() *string { + if o == nil { + return nil + } + return o.CommitMessage +} + +func (o *ImportAgentRequest) GetSyncMode() *ImportAgentSyncMode { + if o == nil { + return nil + } + return o.SyncMode +} + +func (o *ImportAgentRequest) GetIsDraft() *bool { + if o == nil { + return nil + } + return o.IsDraft +} diff --git a/tests/mockserver/internal/sdk/models/components/importagentresponse.go b/tests/mockserver/internal/sdk/models/components/importagentresponse.go new file mode 100644 index 00000000..711f70bd --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/importagentresponse.go @@ -0,0 +1,23 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type ImportAgentResponse struct { + WorkflowResult *WorkflowResult `json:"workflowResult,omitempty"` + // Outcome of the import for the target agent. + Status *ImportAgentStatus `json:"status,omitempty"` +} + +func (o *ImportAgentResponse) GetWorkflowResult() *WorkflowResult { + if o == nil { + return nil + } + return o.WorkflowResult +} + +func (o *ImportAgentResponse) GetStatus() *ImportAgentStatus { + if o == nil { + return nil + } + return o.Status +} diff --git a/tests/mockserver/internal/sdk/models/components/importagentstatus.go b/tests/mockserver/internal/sdk/models/components/importagentstatus.go new file mode 100644 index 00000000..9098ec1e --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/importagentstatus.go @@ -0,0 +1,38 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" +) + +// ImportAgentStatus - Outcome of the import for the target agent. +type ImportAgentStatus string + +const ( + ImportAgentStatusCreated ImportAgentStatus = "CREATED" + ImportAgentStatusUpdated ImportAgentStatus = "UPDATED" + ImportAgentStatusDraftPreview ImportAgentStatus = "DRAFT_PREVIEW" +) + +func (e ImportAgentStatus) ToPointer() *ImportAgentStatus { + return &e +} +func (e *ImportAgentStatus) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "CREATED": + fallthrough + case "UPDATED": + fallthrough + case "DRAFT_PREVIEW": + *e = ImportAgentStatus(v) + return nil + default: + return fmt.Errorf("invalid value for ImportAgentStatus: %v", v) + } +} diff --git a/tests/mockserver/internal/sdk/models/components/importagentsyncmode.go b/tests/mockserver/internal/sdk/models/components/importagentsyncmode.go new file mode 100644 index 00000000..993ad143 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/importagentsyncmode.go @@ -0,0 +1,35 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" +) + +// ImportAgentSyncMode - Whether the imported version is staged (saved without updating the live version) or published directly to the live version. +type ImportAgentSyncMode string + +const ( + ImportAgentSyncModeStaged ImportAgentSyncMode = "STAGED" + ImportAgentSyncModePublished ImportAgentSyncMode = "PUBLISHED" +) + +func (e ImportAgentSyncMode) ToPointer() *ImportAgentSyncMode { + return &e +} +func (e *ImportAgentSyncMode) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "STAGED": + fallthrough + case "PUBLISHED": + *e = ImportAgentSyncMode(v) + return nil + default: + return fmt.Errorf("invalid value for ImportAgentSyncMode: %v", v) + } +} diff --git a/tests/mockserver/internal/sdk/models/components/manualfeedbackinfo.go b/tests/mockserver/internal/sdk/models/components/manualfeedbackinfo.go index ae25ff90..a6091270 100644 --- a/tests/mockserver/internal/sdk/models/components/manualfeedbackinfo.go +++ b/tests/mockserver/internal/sdk/models/components/manualfeedbackinfo.go @@ -112,6 +112,8 @@ const ( IssueResultsHelpful Issue = "RESULTS_HELPFUL" IssueResultsPoorOrder Issue = "RESULTS_POOR_ORDER" IssueTooMuchOneKind Issue = "TOO_MUCH_ONE_KIND" + IssueNotAQuestion Issue = "NOT_A_QUESTION" + IssueUnsureIfCorrect Issue = "UNSURE_IF_CORRECT" ) func (e Issue) ToPointer() *Issue { @@ -152,6 +154,10 @@ func (e *Issue) UnmarshalJSON(data []byte) error { case "RESULTS_POOR_ORDER": fallthrough case "TOO_MUCH_ONE_KIND": + fallthrough + case "NOT_A_QUESTION": + fallthrough + case "UNSURE_IF_CORRECT": *e = Issue(v) return nil default: diff --git a/tests/mockserver/internal/sdk/models/components/objectdefinition.go b/tests/mockserver/internal/sdk/models/components/objectdefinition.go index 9a9c55c6..32a3df40 100644 --- a/tests/mockserver/internal/sdk/models/components/objectdefinition.go +++ b/tests/mockserver/internal/sdk/models/components/objectdefinition.go @@ -29,6 +29,8 @@ const ( DocCategoryEntity DocCategory = "ENTITY" DocCategoryCalendar DocCategory = "CALENDAR" DocCategoryAgents DocCategory = "AGENTS" + DocCategoryAiConversation DocCategory = "AI_CONVERSATION" + DocCategoryAiArtifact DocCategory = "AI_ARTIFACT" ) func (e DocCategory) ToPointer() *DocCategory { @@ -75,6 +77,10 @@ func (e *DocCategory) UnmarshalJSON(data []byte) error { case "CALENDAR": fallthrough case "AGENTS": + fallthrough + case "AI_CONVERSATION": + fallthrough + case "AI_ARTIFACT": *e = DocCategory(v) return nil default: diff --git a/tests/mockserver/internal/sdk/models/components/personmetadata.go b/tests/mockserver/internal/sdk/models/components/personmetadata.go index da09ade4..7813a6fb 100644 --- a/tests/mockserver/internal/sdk/models/components/personmetadata.go +++ b/tests/mockserver/internal/sdk/models/components/personmetadata.go @@ -54,6 +54,8 @@ type PersonMetadata struct { BusinessUnit *string `json:"businessUnit,omitempty"` // An organizational unit where everyone has a similar task, e.g. `Engineering`. Department *string `json:"department,omitempty"` + // Normalized job-function category assigned by Entity Builder from the source department and, when available, job title. Unlike `department`, which preserves the company-specific organizational unit, this field groups departments into configured categories such as `Engineering`, `Sales`, or `IT`; it may be `Unknown` when the mapping is inconclusive. + JobFunction *string `json:"jobFunction,omitempty"` // Info about the employee's team(s). Teams []PersonTeam `json:"teams,omitempty"` // The number of people in this person's department. @@ -185,6 +187,13 @@ func (o *PersonMetadata) GetDepartment() *string { return o.Department } +func (o *PersonMetadata) GetJobFunction() *string { + if o == nil { + return nil + } + return o.JobFunction +} + func (o *PersonMetadata) GetTeams() []PersonTeam { if o == nil { return nil diff --git a/tests/mockserver/internal/sdk/models/components/platformauthenticationsuggestion.go b/tests/mockserver/internal/sdk/models/components/platformauthenticationsuggestion.go new file mode 100644 index 00000000..58281ae6 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformauthenticationsuggestion.go @@ -0,0 +1,25 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +// PlatformAuthenticationSuggestion - One tool the caller must authorize before the agent can run. +type PlatformAuthenticationSuggestion struct { + // Human-readable tool name. + ToolName *string `json:"tool_name,omitempty"` + // Identifier to POST to `/tool-servers/{serverId}/auth` (Client API) with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to. + ServerID string `json:"server_id"` +} + +func (o *PlatformAuthenticationSuggestion) GetToolName() *string { + if o == nil { + return nil + } + return o.ToolName +} + +func (o *PlatformAuthenticationSuggestion) GetServerID() string { + if o == nil { + return "" + } + return o.ServerID +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatcitationannotation.go b/tests/mockserver/internal/sdk/models/components/platformchatcitationannotation.go new file mode 100644 index 00000000..eb920c41 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatcitationannotation.go @@ -0,0 +1,75 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" + "mockserver/internal/sdk/optionalnullable" +) + +type PlatformChatCitationAnnotationType string + +const ( + PlatformChatCitationAnnotationTypeCitation PlatformChatCitationAnnotationType = "citation" +) + +func (e PlatformChatCitationAnnotationType) ToPointer() *PlatformChatCitationAnnotationType { + return &e +} +func (e *PlatformChatCitationAnnotationType) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "citation": + *e = PlatformChatCitationAnnotationType(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatCitationAnnotationType: %v", v) + } +} + +type PlatformChatCitationAnnotation struct { + Type PlatformChatCitationAnnotationType `json:"type"` + Sources []PlatformChatCitationSource `json:"sources"` + StartIndex optionalnullable.OptionalNullable[int64] `json:"start_index,omitempty"` + EndIndex optionalnullable.OptionalNullable[int64] `json:"end_index,omitempty"` + Snippets optionalnullable.OptionalNullable[[]PlatformChatCitationSnippet] `json:"snippets,omitempty"` +} + +func (o *PlatformChatCitationAnnotation) GetType() PlatformChatCitationAnnotationType { + if o == nil { + return PlatformChatCitationAnnotationType("") + } + return o.Type +} + +func (o *PlatformChatCitationAnnotation) GetSources() []PlatformChatCitationSource { + if o == nil { + return []PlatformChatCitationSource{} + } + return o.Sources +} + +func (o *PlatformChatCitationAnnotation) GetStartIndex() optionalnullable.OptionalNullable[int64] { + if o == nil { + return nil + } + return o.StartIndex +} + +func (o *PlatformChatCitationAnnotation) GetEndIndex() optionalnullable.OptionalNullable[int64] { + if o == nil { + return nil + } + return o.EndIndex +} + +func (o *PlatformChatCitationAnnotation) GetSnippets() optionalnullable.OptionalNullable[[]PlatformChatCitationSnippet] { + if o == nil { + return nil + } + return o.Snippets +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatcitationsnippet.go b/tests/mockserver/internal/sdk/models/components/platformchatcitationsnippet.go new file mode 100644 index 00000000..def72755 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatcitationsnippet.go @@ -0,0 +1,26 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "mockserver/internal/sdk/optionalnullable" +) + +type PlatformChatCitationSnippet struct { + Text string `json:"text"` + PageNumber optionalnullable.OptionalNullable[int64] `json:"page_number,omitempty"` +} + +func (o *PlatformChatCitationSnippet) GetText() string { + if o == nil { + return "" + } + return o.Text +} + +func (o *PlatformChatCitationSnippet) GetPageNumber() optionalnullable.OptionalNullable[int64] { + if o == nil { + return nil + } + return o.PageNumber +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatcitationsource.go b/tests/mockserver/internal/sdk/models/components/platformchatcitationsource.go new file mode 100644 index 00000000..c4c149d7 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatcitationsource.go @@ -0,0 +1,117 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "errors" + "fmt" + "mockserver/internal/sdk/utils" +) + +type PlatformChatCitationSourceType string + +const ( + PlatformChatCitationSourceTypePlatformChatDocumentSource PlatformChatCitationSourceType = "PlatformChatDocumentSource" + PlatformChatCitationSourceTypePlatformChatPersonSource PlatformChatCitationSourceType = "PlatformChatPersonSource" + PlatformChatCitationSourceTypePlatformChatFileSource PlatformChatCitationSourceType = "PlatformChatFileSource" + PlatformChatCitationSourceTypePlatformChatCustomEntitySource PlatformChatCitationSourceType = "PlatformChatCustomEntitySource" +) + +// PlatformChatCitationSource - Four-variant citation source union. +type PlatformChatCitationSource struct { + PlatformChatDocumentSource *PlatformChatDocumentSource `queryParam:"inline"` + PlatformChatPersonSource *PlatformChatPersonSource `queryParam:"inline"` + PlatformChatFileSource *PlatformChatFileSource `queryParam:"inline"` + PlatformChatCustomEntitySource *PlatformChatCustomEntitySource `queryParam:"inline"` + + Type PlatformChatCitationSourceType +} + +func CreatePlatformChatCitationSourcePlatformChatDocumentSource(platformChatDocumentSource PlatformChatDocumentSource) PlatformChatCitationSource { + typ := PlatformChatCitationSourceTypePlatformChatDocumentSource + + return PlatformChatCitationSource{ + PlatformChatDocumentSource: &platformChatDocumentSource, + Type: typ, + } +} + +func CreatePlatformChatCitationSourcePlatformChatPersonSource(platformChatPersonSource PlatformChatPersonSource) PlatformChatCitationSource { + typ := PlatformChatCitationSourceTypePlatformChatPersonSource + + return PlatformChatCitationSource{ + PlatformChatPersonSource: &platformChatPersonSource, + Type: typ, + } +} + +func CreatePlatformChatCitationSourcePlatformChatFileSource(platformChatFileSource PlatformChatFileSource) PlatformChatCitationSource { + typ := PlatformChatCitationSourceTypePlatformChatFileSource + + return PlatformChatCitationSource{ + PlatformChatFileSource: &platformChatFileSource, + Type: typ, + } +} + +func CreatePlatformChatCitationSourcePlatformChatCustomEntitySource(platformChatCustomEntitySource PlatformChatCustomEntitySource) PlatformChatCitationSource { + typ := PlatformChatCitationSourceTypePlatformChatCustomEntitySource + + return PlatformChatCitationSource{ + PlatformChatCustomEntitySource: &platformChatCustomEntitySource, + Type: typ, + } +} + +func (u *PlatformChatCitationSource) UnmarshalJSON(data []byte) error { + + var platformChatPersonSource PlatformChatPersonSource = PlatformChatPersonSource{} + if err := utils.UnmarshalJSON(data, &platformChatPersonSource, "", true, nil); err == nil { + u.PlatformChatPersonSource = &platformChatPersonSource + u.Type = PlatformChatCitationSourceTypePlatformChatPersonSource + return nil + } + + var platformChatFileSource PlatformChatFileSource = PlatformChatFileSource{} + if err := utils.UnmarshalJSON(data, &platformChatFileSource, "", true, nil); err == nil { + u.PlatformChatFileSource = &platformChatFileSource + u.Type = PlatformChatCitationSourceTypePlatformChatFileSource + return nil + } + + var platformChatCustomEntitySource PlatformChatCustomEntitySource = PlatformChatCustomEntitySource{} + if err := utils.UnmarshalJSON(data, &platformChatCustomEntitySource, "", true, nil); err == nil { + u.PlatformChatCustomEntitySource = &platformChatCustomEntitySource + u.Type = PlatformChatCitationSourceTypePlatformChatCustomEntitySource + return nil + } + + var platformChatDocumentSource PlatformChatDocumentSource = PlatformChatDocumentSource{} + if err := utils.UnmarshalJSON(data, &platformChatDocumentSource, "", true, nil); err == nil { + u.PlatformChatDocumentSource = &platformChatDocumentSource + u.Type = PlatformChatCitationSourceTypePlatformChatDocumentSource + return nil + } + + return fmt.Errorf("could not unmarshal `%s` into any supported union types for PlatformChatCitationSource", string(data)) +} + +func (u PlatformChatCitationSource) MarshalJSON() ([]byte, error) { + if u.PlatformChatDocumentSource != nil { + return utils.MarshalJSON(u.PlatformChatDocumentSource, "", true) + } + + if u.PlatformChatPersonSource != nil { + return utils.MarshalJSON(u.PlatformChatPersonSource, "", true) + } + + if u.PlatformChatFileSource != nil { + return utils.MarshalJSON(u.PlatformChatFileSource, "", true) + } + + if u.PlatformChatCustomEntitySource != nil { + return utils.MarshalJSON(u.PlatformChatCustomEntitySource, "", true) + } + + return nil, errors.New("could not marshal union type PlatformChatCitationSource: all fields are null") +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatcompletedresponse.go b/tests/mockserver/internal/sdk/models/components/platformchatcompletedresponse.go new file mode 100644 index 00000000..36264777 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatcompletedresponse.go @@ -0,0 +1,139 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" + "mockserver/internal/sdk/optionalnullable" + "mockserver/internal/sdk/utils" + "time" +) + +type Object string + +const ( + ObjectResponse Object = "response" +) + +func (e Object) ToPointer() *Object { + return &e +} +func (e *Object) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "response": + *e = Object(v) + return nil + default: + return fmt.Errorf("invalid value for Object: %v", v) + } +} + +type PlatformChatCompletedResponseStatus string + +const ( + PlatformChatCompletedResponseStatusCompleted PlatformChatCompletedResponseStatus = "completed" +) + +func (e PlatformChatCompletedResponseStatus) ToPointer() *PlatformChatCompletedResponseStatus { + return &e +} +func (e *PlatformChatCompletedResponseStatus) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "completed": + *e = PlatformChatCompletedResponseStatus(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatCompletedResponseStatus: %v", v) + } +} + +type PlatformChatCompletedResponse struct { + // Platform-owned, non-persisted response envelope identifier in `resp_` form. The same identifier is used for every event in one streamed response. + // + ID string `json:"id"` + Object Object `json:"object"` + // RFC 3339 UTC timestamp when the response was created. + CreatedAt time.Time `json:"created_at"` + Status PlatformChatCompletedResponseStatus `json:"status"` + Output []PlatformChatOutputMessage `json:"output"` + Store bool `json:"store"` + // Present when the interaction was persisted. + ConversationID optionalnullable.OptionalNullable[string] `json:"conversation_id,omitempty"` + RequestID string `json:"request_id"` +} + +func (p PlatformChatCompletedResponse) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformChatCompletedResponse) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"id", "object", "created_at", "status", "output", "store", "request_id"}); err != nil { + return err + } + return nil +} + +func (o *PlatformChatCompletedResponse) GetID() string { + if o == nil { + return "" + } + return o.ID +} + +func (o *PlatformChatCompletedResponse) GetObject() Object { + if o == nil { + return Object("") + } + return o.Object +} + +func (o *PlatformChatCompletedResponse) GetCreatedAt() time.Time { + if o == nil { + return time.Time{} + } + return o.CreatedAt +} + +func (o *PlatformChatCompletedResponse) GetStatus() PlatformChatCompletedResponseStatus { + if o == nil { + return PlatformChatCompletedResponseStatus("") + } + return o.Status +} + +func (o *PlatformChatCompletedResponse) GetOutput() []PlatformChatOutputMessage { + if o == nil { + return []PlatformChatOutputMessage{} + } + return o.Output +} + +func (o *PlatformChatCompletedResponse) GetStore() bool { + if o == nil { + return false + } + return o.Store +} + +func (o *PlatformChatCompletedResponse) GetConversationID() optionalnullable.OptionalNullable[string] { + if o == nil { + return nil + } + return o.ConversationID +} + +func (o *PlatformChatCompletedResponse) GetRequestID() string { + if o == nil { + return "" + } + return o.RequestID +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatcreaterequest.go b/tests/mockserver/internal/sdk/models/components/platformchatcreaterequest.go new file mode 100644 index 00000000..ff12189e --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatcreaterequest.go @@ -0,0 +1,127 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "errors" + "fmt" + "mockserver/internal/sdk/utils" +) + +type InputType string + +const ( + InputTypeStr InputType = "str" + InputTypeArrayOfPlatformChatInputMessage InputType = "arrayOfPlatformChatInputMessage" +) + +// Input - Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. +type Input struct { + Str *string `queryParam:"inline"` + ArrayOfPlatformChatInputMessage []PlatformChatInputMessage `queryParam:"inline"` + + Type InputType +} + +func CreateInputStr(str string) Input { + typ := InputTypeStr + + return Input{ + Str: &str, + Type: typ, + } +} + +func CreateInputArrayOfPlatformChatInputMessage(arrayOfPlatformChatInputMessage []PlatformChatInputMessage) Input { + typ := InputTypeArrayOfPlatformChatInputMessage + + return Input{ + ArrayOfPlatformChatInputMessage: arrayOfPlatformChatInputMessage, + Type: typ, + } +} + +func (u *Input) UnmarshalJSON(data []byte) error { + + var str string = "" + if err := utils.UnmarshalJSON(data, &str, "", true, nil); err == nil { + u.Str = &str + u.Type = InputTypeStr + return nil + } + + var arrayOfPlatformChatInputMessage []PlatformChatInputMessage = []PlatformChatInputMessage{} + if err := utils.UnmarshalJSON(data, &arrayOfPlatformChatInputMessage, "", true, nil); err == nil { + u.ArrayOfPlatformChatInputMessage = arrayOfPlatformChatInputMessage + u.Type = InputTypeArrayOfPlatformChatInputMessage + return nil + } + + return fmt.Errorf("could not unmarshal `%s` into any supported union types for Input", string(data)) +} + +func (u Input) MarshalJSON() ([]byte, error) { + if u.Str != nil { + return utils.MarshalJSON(u.Str, "", true) + } + + if u.ArrayOfPlatformChatInputMessage != nil { + return utils.MarshalJSON(u.ArrayOfPlatformChatInputMessage, "", true) + } + + return nil, errors.New("could not marshal union type Input: all fields are null") +} + +type PlatformChatCreateRequest struct { + // Either a plain string (single user turn) or a chronological array of `user`/`assistant` messages. The final array message must be `user`. + // + Input Input `json:"input"` + // When true, respond with `text/event-stream`. When false or omitted, respond with `application/json`. + // + Stream *bool `default:"false" json:"stream"` + // When true (default), persist the interaction and return a `conversation_id`. When false, run ephemerally with no persistence. + // + Store *bool `default:"true" json:"store"` + // Continue an existing stored conversation. Incompatible with message-array `input` and with `store: false`. + // + ConversationID *string `json:"conversation_id,omitempty"` +} + +func (p PlatformChatCreateRequest) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformChatCreateRequest) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"input"}); err != nil { + return err + } + return nil +} + +func (o *PlatformChatCreateRequest) GetInput() Input { + if o == nil { + return Input{} + } + return o.Input +} + +func (o *PlatformChatCreateRequest) GetStream() *bool { + if o == nil { + return nil + } + return o.Stream +} + +func (o *PlatformChatCreateRequest) GetStore() *bool { + if o == nil { + return nil + } + return o.Store +} + +func (o *PlatformChatCreateRequest) GetConversationID() *string { + if o == nil { + return nil + } + return o.ConversationID +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatcustomentitysource.go b/tests/mockserver/internal/sdk/models/components/platformchatcustomentitysource.go new file mode 100644 index 00000000..a935970d --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatcustomentitysource.go @@ -0,0 +1,94 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" + "mockserver/internal/sdk/utils" +) + +type PlatformChatCustomEntitySourceType string + +const ( + PlatformChatCustomEntitySourceTypeCustomEntity PlatformChatCustomEntitySourceType = "custom_entity" +) + +func (e PlatformChatCustomEntitySourceType) ToPointer() *PlatformChatCustomEntitySourceType { + return &e +} +func (e *PlatformChatCustomEntitySourceType) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "custom_entity": + *e = PlatformChatCustomEntitySourceType(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatCustomEntitySourceType: %v", v) + } +} + +type PlatformChatCustomEntitySource struct { + Type PlatformChatCustomEntitySourceType `json:"type"` + EntityID string `json:"entity_id"` + Name *string `json:"name,omitempty"` + Title *string `json:"title,omitempty"` + URL *string `json:"url,omitempty"` + Datasource *string `json:"datasource,omitempty"` +} + +func (p PlatformChatCustomEntitySource) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformChatCustomEntitySource) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"type", "entity_id"}); err != nil { + return err + } + return nil +} + +func (o *PlatformChatCustomEntitySource) GetType() PlatformChatCustomEntitySourceType { + if o == nil { + return PlatformChatCustomEntitySourceType("") + } + return o.Type +} + +func (o *PlatformChatCustomEntitySource) GetEntityID() string { + if o == nil { + return "" + } + return o.EntityID +} + +func (o *PlatformChatCustomEntitySource) GetName() *string { + if o == nil { + return nil + } + return o.Name +} + +func (o *PlatformChatCustomEntitySource) GetTitle() *string { + if o == nil { + return nil + } + return o.Title +} + +func (o *PlatformChatCustomEntitySource) GetURL() *string { + if o == nil { + return nil + } + return o.URL +} + +func (o *PlatformChatCustomEntitySource) GetDatasource() *string { + if o == nil { + return nil + } + return o.Datasource +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatdocumentsource.go b/tests/mockserver/internal/sdk/models/components/platformchatdocumentsource.go new file mode 100644 index 00000000..9dd42aa5 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatdocumentsource.go @@ -0,0 +1,227 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "errors" + "fmt" + "mockserver/internal/sdk/utils" +) + +type PlatformChatDocumentSourceType2 string + +const ( + PlatformChatDocumentSourceType2Document PlatformChatDocumentSourceType2 = "document" +) + +func (e PlatformChatDocumentSourceType2) ToPointer() *PlatformChatDocumentSourceType2 { + return &e +} +func (e *PlatformChatDocumentSourceType2) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "document": + *e = PlatformChatDocumentSourceType2(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatDocumentSourceType2: %v", v) + } +} + +type PlatformChatDocumentSourceDocument2 struct { + Type PlatformChatDocumentSourceType2 `json:"type"` + DocumentID *string `json:"document_id,omitempty"` + URL string `json:"url"` + Title *string `json:"title,omitempty"` + Datasource *string `json:"datasource,omitempty"` +} + +func (p PlatformChatDocumentSourceDocument2) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformChatDocumentSourceDocument2) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"type", "url"}); err != nil { + return err + } + return nil +} + +func (o *PlatformChatDocumentSourceDocument2) GetType() PlatformChatDocumentSourceType2 { + if o == nil { + return PlatformChatDocumentSourceType2("") + } + return o.Type +} + +func (o *PlatformChatDocumentSourceDocument2) GetDocumentID() *string { + if o == nil { + return nil + } + return o.DocumentID +} + +func (o *PlatformChatDocumentSourceDocument2) GetURL() string { + if o == nil { + return "" + } + return o.URL +} + +func (o *PlatformChatDocumentSourceDocument2) GetTitle() *string { + if o == nil { + return nil + } + return o.Title +} + +func (o *PlatformChatDocumentSourceDocument2) GetDatasource() *string { + if o == nil { + return nil + } + return o.Datasource +} + +type PlatformChatDocumentSourceType1 string + +const ( + PlatformChatDocumentSourceType1Document PlatformChatDocumentSourceType1 = "document" +) + +func (e PlatformChatDocumentSourceType1) ToPointer() *PlatformChatDocumentSourceType1 { + return &e +} +func (e *PlatformChatDocumentSourceType1) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "document": + *e = PlatformChatDocumentSourceType1(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatDocumentSourceType1: %v", v) + } +} + +type PlatformChatDocumentSourceDocument1 struct { + Type PlatformChatDocumentSourceType1 `json:"type"` + DocumentID string `json:"document_id"` + URL *string `json:"url,omitempty"` + Title *string `json:"title,omitempty"` + Datasource *string `json:"datasource,omitempty"` +} + +func (p PlatformChatDocumentSourceDocument1) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformChatDocumentSourceDocument1) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"type", "document_id"}); err != nil { + return err + } + return nil +} + +func (o *PlatformChatDocumentSourceDocument1) GetType() PlatformChatDocumentSourceType1 { + if o == nil { + return PlatformChatDocumentSourceType1("") + } + return o.Type +} + +func (o *PlatformChatDocumentSourceDocument1) GetDocumentID() string { + if o == nil { + return "" + } + return o.DocumentID +} + +func (o *PlatformChatDocumentSourceDocument1) GetURL() *string { + if o == nil { + return nil + } + return o.URL +} + +func (o *PlatformChatDocumentSourceDocument1) GetTitle() *string { + if o == nil { + return nil + } + return o.Title +} + +func (o *PlatformChatDocumentSourceDocument1) GetDatasource() *string { + if o == nil { + return nil + } + return o.Datasource +} + +type PlatformChatDocumentSourceType string + +const ( + PlatformChatDocumentSourceTypePlatformChatDocumentSourceDocument1 PlatformChatDocumentSourceType = "PlatformChatDocumentSource_Document_1" + PlatformChatDocumentSourceTypePlatformChatDocumentSourceDocument2 PlatformChatDocumentSourceType = "PlatformChatDocumentSource_Document_2" +) + +type PlatformChatDocumentSource struct { + PlatformChatDocumentSourceDocument1 *PlatformChatDocumentSourceDocument1 `queryParam:"inline"` + PlatformChatDocumentSourceDocument2 *PlatformChatDocumentSourceDocument2 `queryParam:"inline"` + + Type PlatformChatDocumentSourceType +} + +func CreatePlatformChatDocumentSourcePlatformChatDocumentSourceDocument1(platformChatDocumentSourceDocument1 PlatformChatDocumentSourceDocument1) PlatformChatDocumentSource { + typ := PlatformChatDocumentSourceTypePlatformChatDocumentSourceDocument1 + + return PlatformChatDocumentSource{ + PlatformChatDocumentSourceDocument1: &platformChatDocumentSourceDocument1, + Type: typ, + } +} + +func CreatePlatformChatDocumentSourcePlatformChatDocumentSourceDocument2(platformChatDocumentSourceDocument2 PlatformChatDocumentSourceDocument2) PlatformChatDocumentSource { + typ := PlatformChatDocumentSourceTypePlatformChatDocumentSourceDocument2 + + return PlatformChatDocumentSource{ + PlatformChatDocumentSourceDocument2: &platformChatDocumentSourceDocument2, + Type: typ, + } +} + +func (u *PlatformChatDocumentSource) UnmarshalJSON(data []byte) error { + + var platformChatDocumentSourceDocument1 PlatformChatDocumentSourceDocument1 = PlatformChatDocumentSourceDocument1{} + if err := utils.UnmarshalJSON(data, &platformChatDocumentSourceDocument1, "", true, nil); err == nil { + u.PlatformChatDocumentSourceDocument1 = &platformChatDocumentSourceDocument1 + u.Type = PlatformChatDocumentSourceTypePlatformChatDocumentSourceDocument1 + return nil + } + + var platformChatDocumentSourceDocument2 PlatformChatDocumentSourceDocument2 = PlatformChatDocumentSourceDocument2{} + if err := utils.UnmarshalJSON(data, &platformChatDocumentSourceDocument2, "", true, nil); err == nil { + u.PlatformChatDocumentSourceDocument2 = &platformChatDocumentSourceDocument2 + u.Type = PlatformChatDocumentSourceTypePlatformChatDocumentSourceDocument2 + return nil + } + + return fmt.Errorf("could not unmarshal `%s` into any supported union types for PlatformChatDocumentSource", string(data)) +} + +func (u PlatformChatDocumentSource) MarshalJSON() ([]byte, error) { + if u.PlatformChatDocumentSourceDocument1 != nil { + return utils.MarshalJSON(u.PlatformChatDocumentSourceDocument1, "", true) + } + + if u.PlatformChatDocumentSourceDocument2 != nil { + return utils.MarshalJSON(u.PlatformChatDocumentSourceDocument2, "", true) + } + + return nil, errors.New("could not marshal union type PlatformChatDocumentSource: all fields are null") +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatfilesource.go b/tests/mockserver/internal/sdk/models/components/platformchatfilesource.go new file mode 100644 index 00000000..ad39a1de --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatfilesource.go @@ -0,0 +1,86 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" + "mockserver/internal/sdk/utils" +) + +type PlatformChatFileSourceType string + +const ( + PlatformChatFileSourceTypeFile PlatformChatFileSourceType = "file" +) + +func (e PlatformChatFileSourceType) ToPointer() *PlatformChatFileSourceType { + return &e +} +func (e *PlatformChatFileSourceType) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "file": + *e = PlatformChatFileSourceType(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatFileSourceType: %v", v) + } +} + +type PlatformChatFileSource struct { + Type PlatformChatFileSourceType `json:"type"` + FileID string `json:"file_id"` + Title *string `json:"title,omitempty"` + URL *string `json:"url,omitempty"` + Datasource *string `json:"datasource,omitempty"` +} + +func (p PlatformChatFileSource) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformChatFileSource) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"type", "file_id"}); err != nil { + return err + } + return nil +} + +func (o *PlatformChatFileSource) GetType() PlatformChatFileSourceType { + if o == nil { + return PlatformChatFileSourceType("") + } + return o.Type +} + +func (o *PlatformChatFileSource) GetFileID() string { + if o == nil { + return "" + } + return o.FileID +} + +func (o *PlatformChatFileSource) GetTitle() *string { + if o == nil { + return nil + } + return o.Title +} + +func (o *PlatformChatFileSource) GetURL() *string { + if o == nil { + return nil + } + return o.URL +} + +func (o *PlatformChatFileSource) GetDatasource() *string { + if o == nil { + return nil + } + return o.Datasource +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatinputmessage.go b/tests/mockserver/internal/sdk/models/components/platformchatinputmessage.go new file mode 100644 index 00000000..5989ab25 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatinputmessage.go @@ -0,0 +1,65 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" + "mockserver/internal/sdk/utils" +) + +type PlatformChatInputMessageRole string + +const ( + PlatformChatInputMessageRoleUser PlatformChatInputMessageRole = "user" + PlatformChatInputMessageRoleAssistant PlatformChatInputMessageRole = "assistant" +) + +func (e PlatformChatInputMessageRole) ToPointer() *PlatformChatInputMessageRole { + return &e +} +func (e *PlatformChatInputMessageRole) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "user": + fallthrough + case "assistant": + *e = PlatformChatInputMessageRole(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatInputMessageRole: %v", v) + } +} + +type PlatformChatInputMessage struct { + Role PlatformChatInputMessageRole `json:"role"` + Content string `json:"content"` +} + +func (p PlatformChatInputMessage) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformChatInputMessage) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"role", "content"}); err != nil { + return err + } + return nil +} + +func (o *PlatformChatInputMessage) GetRole() PlatformChatInputMessageRole { + if o == nil { + return PlatformChatInputMessageRole("") + } + return o.Role +} + +func (o *PlatformChatInputMessage) GetContent() string { + if o == nil { + return "" + } + return o.Content +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatoutputmessage.go b/tests/mockserver/internal/sdk/models/components/platformchatoutputmessage.go new file mode 100644 index 00000000..c7ccd4be --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatoutputmessage.go @@ -0,0 +1,81 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" +) + +type PlatformChatOutputMessageType string + +const ( + PlatformChatOutputMessageTypeMessage PlatformChatOutputMessageType = "message" +) + +func (e PlatformChatOutputMessageType) ToPointer() *PlatformChatOutputMessageType { + return &e +} +func (e *PlatformChatOutputMessageType) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "message": + *e = PlatformChatOutputMessageType(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatOutputMessageType: %v", v) + } +} + +type PlatformChatOutputMessageRole string + +const ( + PlatformChatOutputMessageRoleAssistant PlatformChatOutputMessageRole = "assistant" +) + +func (e PlatformChatOutputMessageRole) ToPointer() *PlatformChatOutputMessageRole { + return &e +} +func (e *PlatformChatOutputMessageRole) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "assistant": + *e = PlatformChatOutputMessageRole(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatOutputMessageRole: %v", v) + } +} + +type PlatformChatOutputMessage struct { + Type PlatformChatOutputMessageType `json:"type"` + Role PlatformChatOutputMessageRole `json:"role"` + Content []PlatformChatOutputTextContent `json:"content"` +} + +func (o *PlatformChatOutputMessage) GetType() PlatformChatOutputMessageType { + if o == nil { + return PlatformChatOutputMessageType("") + } + return o.Type +} + +func (o *PlatformChatOutputMessage) GetRole() PlatformChatOutputMessageRole { + if o == nil { + return PlatformChatOutputMessageRole("") + } + return o.Role +} + +func (o *PlatformChatOutputMessage) GetContent() []PlatformChatOutputTextContent { + if o == nil { + return []PlatformChatOutputTextContent{} + } + return o.Content +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatoutputtextcontent.go b/tests/mockserver/internal/sdk/models/components/platformchatoutputtextcontent.go new file mode 100644 index 00000000..fedd3f28 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatoutputtextcontent.go @@ -0,0 +1,58 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" +) + +type PlatformChatOutputTextContentType string + +const ( + PlatformChatOutputTextContentTypeOutputText PlatformChatOutputTextContentType = "output_text" +) + +func (e PlatformChatOutputTextContentType) ToPointer() *PlatformChatOutputTextContentType { + return &e +} +func (e *PlatformChatOutputTextContentType) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "output_text": + *e = PlatformChatOutputTextContentType(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatOutputTextContentType: %v", v) + } +} + +type PlatformChatOutputTextContent struct { + Type PlatformChatOutputTextContentType `json:"type"` + Text string `json:"text"` + Annotations []PlatformChatCitationAnnotation `json:"annotations,omitempty"` +} + +func (o *PlatformChatOutputTextContent) GetType() PlatformChatOutputTextContentType { + if o == nil { + return PlatformChatOutputTextContentType("") + } + return o.Type +} + +func (o *PlatformChatOutputTextContent) GetText() string { + if o == nil { + return "" + } + return o.Text +} + +func (o *PlatformChatOutputTextContent) GetAnnotations() []PlatformChatCitationAnnotation { + if o == nil { + return nil + } + return o.Annotations +} diff --git a/tests/mockserver/internal/sdk/models/components/platformchatpersonsource.go b/tests/mockserver/internal/sdk/models/components/platformchatpersonsource.go new file mode 100644 index 00000000..1e969fb9 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformchatpersonsource.go @@ -0,0 +1,78 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" + "mockserver/internal/sdk/utils" +) + +type PlatformChatPersonSourceType string + +const ( + PlatformChatPersonSourceTypePerson PlatformChatPersonSourceType = "person" +) + +func (e PlatformChatPersonSourceType) ToPointer() *PlatformChatPersonSourceType { + return &e +} +func (e *PlatformChatPersonSourceType) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "person": + *e = PlatformChatPersonSourceType(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformChatPersonSourceType: %v", v) + } +} + +type PlatformChatPersonSource struct { + Type PlatformChatPersonSourceType `json:"type"` + PersonID string `json:"person_id"` + Name *string `json:"name,omitempty"` + URL *string `json:"url,omitempty"` +} + +func (p PlatformChatPersonSource) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformChatPersonSource) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"type", "person_id"}); err != nil { + return err + } + return nil +} + +func (o *PlatformChatPersonSource) GetType() PlatformChatPersonSourceType { + if o == nil { + return PlatformChatPersonSourceType("") + } + return o.Type +} + +func (o *PlatformChatPersonSource) GetPersonID() string { + if o == nil { + return "" + } + return o.PersonID +} + +func (o *PlatformChatPersonSource) GetName() *string { + if o == nil { + return nil + } + return o.Name +} + +func (o *PlatformChatPersonSource) GetURL() *string { + if o == nil { + return nil + } + return o.URL +} diff --git a/tests/mockserver/internal/sdk/models/components/platformdatasourcefilterinfo.go b/tests/mockserver/internal/sdk/models/components/platformdatasourcefilterinfo.go new file mode 100644 index 00000000..e577fb7f --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformdatasourcefilterinfo.go @@ -0,0 +1,26 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformDatasourceFilterInfo struct { + // Datasource identifier usable in `POST /api/search` `datasources`. + // + Datasource string `json:"datasource"` + // Common built-in filter fields for this datasource. May be empty. A built-in omitted here can still be valid in `POST /api/search`; see `Filter.field` for the full built-in name list. + // + Filters []PlatformFilterFieldInfo `json:"filters"` +} + +func (o *PlatformDatasourceFilterInfo) GetDatasource() string { + if o == nil { + return "" + } + return o.Datasource +} + +func (o *PlatformDatasourceFilterInfo) GetFilters() []PlatformFilterFieldInfo { + if o == nil { + return []PlatformFilterFieldInfo{} + } + return o.Filters +} diff --git a/tests/mockserver/internal/sdk/models/components/platformfilter.go b/tests/mockserver/internal/sdk/models/components/platformfilter.go index b8a9ea1a..c1ab5360 100644 --- a/tests/mockserver/internal/sdk/models/components/platformfilter.go +++ b/tests/mockserver/internal/sdk/models/components/platformfilter.go @@ -2,14 +2,15 @@ package components -// PlatformFilter - A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd. For `NOT_EQUALS`, multiple values exclude all listed values. Filters are AND'd with each other and with any inline query operators. +// PlatformFilter - A single filter criterion. For `EQUALS`, multiple values within a filter are OR'd; for `NOT_EQUALS`, listed values are excluded. Separate filters are AND'd with each other and with inline operators in `query`. Repeated same-field `EQUALS` filters are rejected. type PlatformFilter struct { - // The field to filter on. Accepts built-in filter field names such as `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`, plus custom datasource property names. + // Filter field name. Built-in names (case-sensitive, lowercase only): `type`, `owner`, `from`, `author`, `channel`, `status`, `assignee`, `reporter`, `component`, `mentions`, and `collection`. Built-ins accept only `EQUALS` and `NOT_EQUALS`. Any other nonblank name is accepted as a custom filter without spelling, existence, or type checks; behavior depends on your connected sources. // Field string `json:"field"` - // One or more values to match. + // One or more values to match. Prefer values returned by filter discovery unchanged. For people (`USER`) fields, values may be email addresses or display names. + // Values []string `json:"values"` - // Comparison operator to apply to this filter. Defaults to `EQUALS`. `GT`, `GTE`, `LT`, and `LTE` range operators require exactly one value; express bounded ranges with multiple filters on the same field. + // Comparison operator. Defaults to `EQUALS`. Built-in fields support only `EQUALS` and `NOT_EQUALS`. Range operators (`GT`, `GTE`, `LT`, `LTE`) require exactly one value; express ranges with multiple filters on the same field. Custom fields may support different operators depending on the data source. // Operator *PlatformFilterOperator `json:"operator,omitempty"` } diff --git a/tests/mockserver/internal/sdk/models/components/platformfilterfieldinfo.go b/tests/mockserver/internal/sdk/models/components/platformfilterfieldinfo.go new file mode 100644 index 00000000..5b3272e0 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformfilterfieldinfo.go @@ -0,0 +1,45 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformFilterFieldInfo struct { + // Field name usable in the `filters` array for `POST /api/search`. + Field string `json:"field"` + // Open field-type string. Current values are `STRING` for text and keyword fields and `USER` for people fields (`owner`, `from`, `author`, `assignee`, `reporter`, `mentions`). Clients must tolerate unknown values. + // + Type string `json:"type"` + // Comparison operators supported for this field. Built-in fields expose `EQUALS` and `NOT_EQUALS`. + // + Operators []PlatformFilterOperator `json:"operators"` + // Suggested filter values observed for the supplied `query`. Omitted in catalog-only responses. Present as an array, including `[]`, when `query` is provided. Values are a bounded, non-exhaustive sample in search-provider order and may include duplicates; blank values are omitted. No additional endpoint-specific truncation is applied. Grouping in the search UI is not preserved; each value applies to the field broadly. An empty array does not mean no valid value exists. Availability varies by data source; federated and MCP integrations may return page-derived values or none at all. Reusing a suggested value in `POST /api/search` does not guarantee matching results or identical filter behavior. For `USER` fields, values may be email addresses or display names. + // + Values []string `json:"values,omitempty"` +} + +func (o *PlatformFilterFieldInfo) GetField() string { + if o == nil { + return "" + } + return o.Field +} + +func (o *PlatformFilterFieldInfo) GetType() string { + if o == nil { + return "" + } + return o.Type +} + +func (o *PlatformFilterFieldInfo) GetOperators() []PlatformFilterOperator { + if o == nil { + return []PlatformFilterOperator{} + } + return o.Operators +} + +func (o *PlatformFilterFieldInfo) GetValues() []string { + if o == nil { + return nil + } + return o.Values +} diff --git a/tests/mockserver/internal/sdk/models/components/platformproblemdetailcode.go b/tests/mockserver/internal/sdk/models/components/platformproblemdetailcode.go index cbbd7173..f4d4eeb9 100644 --- a/tests/mockserver/internal/sdk/models/components/platformproblemdetailcode.go +++ b/tests/mockserver/internal/sdk/models/components/platformproblemdetailcode.go @@ -28,6 +28,7 @@ const ( PlatformProblemDetailCodeConflict PlatformProblemDetailCode = "conflict" PlatformProblemDetailCodeGone PlatformProblemDetailCode = "gone" PlatformProblemDetailCodeUnprocessableQuery PlatformProblemDetailCode = "unprocessable_query" + PlatformProblemDetailCodeToolsUnauthorized PlatformProblemDetailCode = "tools_unauthorized" PlatformProblemDetailCodeRateLimitExceeded PlatformProblemDetailCode = "rate_limit_exceeded" PlatformProblemDetailCodeInternalError PlatformProblemDetailCode = "internal_error" PlatformProblemDetailCodeServiceUnavailable PlatformProblemDetailCode = "service_unavailable" @@ -76,6 +77,8 @@ func (e *PlatformProblemDetailCode) UnmarshalJSON(data []byte) error { fallthrough case "unprocessable_query": fallthrough + case "tools_unauthorized": + fallthrough case "rate_limit_exceeded": fallthrough case "internal_error": diff --git a/tests/mockserver/internal/sdk/models/components/platformresult.go b/tests/mockserver/internal/sdk/models/components/platformresult.go index 441ea968..f09289f8 100644 --- a/tests/mockserver/internal/sdk/models/components/platformresult.go +++ b/tests/mockserver/internal/sdk/models/components/platformresult.go @@ -17,8 +17,6 @@ type PlatformResult struct { Snippets []string `json:"snippets,omitempty"` // The datasource this result originates from. Datasource string `json:"datasource"` - // The datasource instance this result originates from, if known. - DatasourceInstance optionalnullable.OptionalNullable[string] `json:"datasource_instance,omitempty"` // The document type within the datasource. DocumentType optionalnullable.OptionalNullable[string] `json:"document_type,omitempty"` // A lightweight reference to a person, used where a payload merely points at someone. @@ -70,13 +68,6 @@ func (o *PlatformResult) GetDatasource() string { return o.Datasource } -func (o *PlatformResult) GetDatasourceInstance() optionalnullable.OptionalNullable[string] { - if o == nil { - return nil - } - return o.DatasourceInstance -} - func (o *PlatformResult) GetDocumentType() optionalnullable.OptionalNullable[string] { if o == nil { return nil diff --git a/tests/mockserver/internal/sdk/models/components/platformsearchfiltersresponse.go b/tests/mockserver/internal/sdk/models/components/platformsearchfiltersresponse.go new file mode 100644 index 00000000..51409a03 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformsearchfiltersresponse.go @@ -0,0 +1,25 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformSearchFiltersResponse struct { + // Datasources visible to the authenticated user. Each `datasource` is an identifier you can pass to `POST /api/search` `datasources`. An empty array means no visible datasources. + // + Datasources []PlatformDatasourceFilterInfo `json:"datasources"` + // Platform-generated request ID for support correlation. + RequestID string `json:"request_id"` +} + +func (o *PlatformSearchFiltersResponse) GetDatasources() []PlatformDatasourceFilterInfo { + if o == nil { + return []PlatformDatasourceFilterInfo{} + } + return o.Datasources +} + +func (o *PlatformSearchFiltersResponse) GetRequestID() string { + if o == nil { + return "" + } + return o.RequestID +} diff --git a/tests/mockserver/internal/sdk/models/components/platformsearchrequest.go b/tests/mockserver/internal/sdk/models/components/platformsearchrequest.go index 108bab41..83c3c79d 100644 --- a/tests/mockserver/internal/sdk/models/components/platformsearchrequest.go +++ b/tests/mockserver/internal/sdk/models/components/platformsearchrequest.go @@ -16,13 +16,10 @@ type PlatformSearchRequest struct { // Opaque pagination token from a previous response's `next_cursor` field. Omit on the first request. // Cursor optionalnullable.OptionalNullable[string] `json:"cursor,omitempty"` - // Restrict results to specific datasources. Requests must not specify both `datasources` and `datasource_instances`. + // Restrict results to specific datasource identifiers returned by `GET /api/search/filters`. Scopes by datasource type and may include results from multiple instances of that type. // Datasources []string `json:"datasources,omitempty"` - // Restrict results to specific datasource instances. Values are datasource instance identifiers returned by `GET /api/search/filters`. Requests must not specify both `datasources` and `datasource_instances`. - // - DatasourceInstances []string `json:"datasource_instances,omitempty"` - // Structured filters applied to search results. Equality operators OR multiple values within a filter. Multiple filters are AND'd together, including range filters on the same field. Filters are AND'd with any inline operators in `query`. Note that conflicting constraints on the same field (e.g., `type:document` in the query and `type: spreadsheet` in a filter) produce an empty result set. + // Structured filters applied to search results. Multiple values within a filter with `EQUALS` are OR'd; separate filters are AND'd. Conflicting constraints on the same field (for example, `type:document` in `query` and `type:spreadsheet` in a filter) return an empty result set. See `Filter.field` for built-in field names and operators. Other nonblank field names are accepted as custom filters without validation; behavior depends on your connected sources. // Filters []PlatformFilter `json:"filters,omitempty"` // Filter results to those last updated within this range. @@ -68,13 +65,6 @@ func (o *PlatformSearchRequest) GetDatasources() []string { return o.Datasources } -func (o *PlatformSearchRequest) GetDatasourceInstances() []string { - if o == nil { - return nil - } - return o.DatasourceInstances -} - func (o *PlatformSearchRequest) GetFilters() []PlatformFilter { if o == nil { return nil diff --git a/tests/mockserver/internal/sdk/models/components/platformsearchresponse.go b/tests/mockserver/internal/sdk/models/components/platformsearchresponse.go index e8243de2..3eed4668 100644 --- a/tests/mockserver/internal/sdk/models/components/platformsearchresponse.go +++ b/tests/mockserver/internal/sdk/models/components/platformsearchresponse.go @@ -3,7 +3,8 @@ package components type PlatformSearchResponse struct { - // Ordered list of search results. + // Ordered list of ranked document results. People cards, Q&A blocks, and other UI-only result types are not included. + // Results []PlatformResult `json:"results"` // Indicates whether additional pages of results are available. HasMore bool `json:"has_more"` @@ -11,6 +12,9 @@ type PlatformSearchResponse struct { NextCursor *string `json:"next_cursor"` // Platform-generated request ID for support correlation. RequestID string `json:"request_id"` + // Non-blocking warnings for this response. Required; use `[]` when there are none. Clients must tolerate unknown warning codes. `results_incomplete` means some results may be unavailable for the requested datasource scope while `results`, `has_more`, and `next_cursor` remain present. Warning messages are generic and do not include query text or internal identifiers. + // + Warnings []PlatformWarning `json:"warnings"` } func (o *PlatformSearchResponse) GetResults() []PlatformResult { @@ -40,3 +44,10 @@ func (o *PlatformSearchResponse) GetRequestID() string { } return o.RequestID } + +func (o *PlatformSearchResponse) GetWarnings() []PlatformWarning { + if o == nil { + return []PlatformWarning{} + } + return o.Warnings +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillsourcepreview.go b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreview.go new file mode 100644 index 00000000..f7a467f1 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreview.go @@ -0,0 +1,69 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformSkillSourcePreview struct { + // Skill name parsed from SKILL.md frontmatter. + DisplayName string `json:"display_name"` + // Skill description parsed from SKILL.md frontmatter. + Description string `json:"description"` + // Resolved URL for this skill within the source. + SourceURL string `json:"source_url"` + // Commit SHA used to produce the preview. + CommitSha string `json:"commit_sha"` + // SKILL.md content fetched as part of the preview. + MainContent string `json:"main_content"` + // Supporting files fetched with the skill. + Files []PlatformSkillSourcePreviewFile `json:"files"` + // Relative paths discovered for the skill. + FileTree []string `json:"file_tree"` +} + +func (o *PlatformSkillSourcePreview) GetDisplayName() string { + if o == nil { + return "" + } + return o.DisplayName +} + +func (o *PlatformSkillSourcePreview) GetDescription() string { + if o == nil { + return "" + } + return o.Description +} + +func (o *PlatformSkillSourcePreview) GetSourceURL() string { + if o == nil { + return "" + } + return o.SourceURL +} + +func (o *PlatformSkillSourcePreview) GetCommitSha() string { + if o == nil { + return "" + } + return o.CommitSha +} + +func (o *PlatformSkillSourcePreview) GetMainContent() string { + if o == nil { + return "" + } + return o.MainContent +} + +func (o *PlatformSkillSourcePreview) GetFiles() []PlatformSkillSourcePreviewFile { + if o == nil { + return []PlatformSkillSourcePreviewFile{} + } + return o.Files +} + +func (o *PlatformSkillSourcePreview) GetFileTree() []string { + if o == nil { + return []string{} + } + return o.FileTree +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailure.go b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailure.go new file mode 100644 index 00000000..5a6c6fe8 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailure.go @@ -0,0 +1,33 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformSkillSourcePreviewFailure struct { + // Resolved URL for the entry that could not be previewed. + SourceURL string `json:"source_url"` + // Stable machine-readable reason a discovered entry was excluded. + Code PlatformSkillSourcePreviewFailureCode `json:"code"` + // Safe explanation of why the entry was excluded. + Detail string `json:"detail"` +} + +func (o *PlatformSkillSourcePreviewFailure) GetSourceURL() string { + if o == nil { + return "" + } + return o.SourceURL +} + +func (o *PlatformSkillSourcePreviewFailure) GetCode() PlatformSkillSourcePreviewFailureCode { + if o == nil { + return PlatformSkillSourcePreviewFailureCode("") + } + return o.Code +} + +func (o *PlatformSkillSourcePreviewFailure) GetDetail() string { + if o == nil { + return "" + } + return o.Detail +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailurecode.go b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailurecode.go new file mode 100644 index 00000000..0096a296 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfailurecode.go @@ -0,0 +1,35 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" +) + +// PlatformSkillSourcePreviewFailureCode - Stable machine-readable reason a discovered entry was excluded. +type PlatformSkillSourcePreviewFailureCode string + +const ( + PlatformSkillSourcePreviewFailureCodeInvalidSkill PlatformSkillSourcePreviewFailureCode = "INVALID_SKILL" + PlatformSkillSourcePreviewFailureCodeSkillFetchFailed PlatformSkillSourcePreviewFailureCode = "SKILL_FETCH_FAILED" +) + +func (e PlatformSkillSourcePreviewFailureCode) ToPointer() *PlatformSkillSourcePreviewFailureCode { + return &e +} +func (e *PlatformSkillSourcePreviewFailureCode) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "INVALID_SKILL": + fallthrough + case "SKILL_FETCH_FAILED": + *e = PlatformSkillSourcePreviewFailureCode(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformSkillSourcePreviewFailureCode: %v", v) + } +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfile.go b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfile.go new file mode 100644 index 00000000..43503cfb --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewfile.go @@ -0,0 +1,24 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformSkillSourcePreviewFile struct { + // Relative path within the skill bundle. + Path string `json:"path"` + // UTF-8 file content. + Content string `json:"content"` +} + +func (o *PlatformSkillSourcePreviewFile) GetPath() string { + if o == nil { + return "" + } + return o.Path +} + +func (o *PlatformSkillSourcePreviewFile) GetContent() string { + if o == nil { + return "" + } + return o.Content +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewrequest.go b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewrequest.go new file mode 100644 index 00000000..506e0c09 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewrequest.go @@ -0,0 +1,39 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "mockserver/internal/sdk/utils" +) + +type PlatformSkillSourcePreviewRequest struct { + // GitHub URL for a skill directory, SKILL.md file, or repository to inspect. + SourceURL string `json:"source_url"` + // Whether to stream repository scan progress using server-sent events. + Stream *bool `default:"false" json:"stream"` +} + +func (p PlatformSkillSourcePreviewRequest) MarshalJSON() ([]byte, error) { + return utils.MarshalJSON(p, "", false) +} + +func (p *PlatformSkillSourcePreviewRequest) UnmarshalJSON(data []byte) error { + if err := utils.UnmarshalJSON(data, &p, "", false, []string{"source_url"}); err != nil { + return err + } + return nil +} + +func (o *PlatformSkillSourcePreviewRequest) GetSourceURL() string { + if o == nil { + return "" + } + return o.SourceURL +} + +func (o *PlatformSkillSourcePreviewRequest) GetStream() *bool { + if o == nil { + return nil + } + return o.Stream +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewresponse.go b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewresponse.go new file mode 100644 index 00000000..0607598d --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillsourcepreviewresponse.go @@ -0,0 +1,33 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformSkillSourcePreviewResponse struct { + // Valid skills discovered at the source URL. + Skills []PlatformSkillSourcePreview `json:"skills"` + // Discovered entries that could not be included in the preview. + Failures []PlatformSkillSourcePreviewFailure `json:"failures"` + // Platform-generated request ID for support correlation. + RequestID string `json:"request_id"` +} + +func (o *PlatformSkillSourcePreviewResponse) GetSkills() []PlatformSkillSourcePreview { + if o == nil { + return []PlatformSkillSourcePreview{} + } + return o.Skills +} + +func (o *PlatformSkillSourcePreviewResponse) GetFailures() []PlatformSkillSourcePreviewFailure { + if o == nil { + return []PlatformSkillSourcePreviewFailure{} + } + return o.Failures +} + +func (o *PlatformSkillSourcePreviewResponse) GetRequestID() string { + if o == nil { + return "" + } + return o.RequestID +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillupdaterequest.go b/tests/mockserver/internal/sdk/models/components/platformskillupdaterequest.go new file mode 100644 index 00000000..16b5b625 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillupdaterequest.go @@ -0,0 +1,15 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformSkillUpdateRequest struct { + // New status for the skill. + Status PlatformSkillUpdateStatus `json:"status"` +} + +func (o *PlatformSkillUpdateRequest) GetStatus() PlatformSkillUpdateStatus { + if o == nil { + return PlatformSkillUpdateStatus("") + } + return o.Status +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillupdateresponse.go b/tests/mockserver/internal/sdk/models/components/platformskillupdateresponse.go new file mode 100644 index 00000000..99256154 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillupdateresponse.go @@ -0,0 +1,23 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type PlatformSkillUpdateResponse struct { + Skill PlatformSkill `json:"skill"` + // Platform-generated request ID for support correlation. + RequestID string `json:"request_id"` +} + +func (o *PlatformSkillUpdateResponse) GetSkill() PlatformSkill { + if o == nil { + return PlatformSkill{} + } + return o.Skill +} + +func (o *PlatformSkillUpdateResponse) GetRequestID() string { + if o == nil { + return "" + } + return o.RequestID +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillupdatestatus.go b/tests/mockserver/internal/sdk/models/components/platformskillupdatestatus.go new file mode 100644 index 00000000..d40a5b9f --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformskillupdatestatus.go @@ -0,0 +1,35 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "encoding/json" + "fmt" +) + +// PlatformSkillUpdateStatus - New status for the skill. +type PlatformSkillUpdateStatus string + +const ( + PlatformSkillUpdateStatusEnabled PlatformSkillUpdateStatus = "ENABLED" + PlatformSkillUpdateStatusDisabled PlatformSkillUpdateStatus = "DISABLED" +) + +func (e PlatformSkillUpdateStatus) ToPointer() *PlatformSkillUpdateStatus { + return &e +} +func (e *PlatformSkillUpdateStatus) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "ENABLED": + fallthrough + case "DISABLED": + *e = PlatformSkillUpdateStatus(v) + return nil + default: + return fmt.Errorf("invalid value for PlatformSkillUpdateStatus: %v", v) + } +} diff --git a/tests/mockserver/internal/sdk/models/components/platformskillvalidationresponse.go b/tests/mockserver/internal/sdk/models/components/platformskillvalidationresponse.go index 55c51a40..f8bd1eae 100644 --- a/tests/mockserver/internal/sdk/models/components/platformskillvalidationresponse.go +++ b/tests/mockserver/internal/sdk/models/components/platformskillvalidationresponse.go @@ -7,7 +7,7 @@ type PlatformSkillValidationResponse struct { // Normalized files in the bundle after stripping an optional single root folder. Files []PlatformSkillValidationFile `json:"files"` // Non-blocking validation warnings. - Warnings []PlatformSkillValidationWarning `json:"warnings"` + Warnings []PlatformWarning `json:"warnings"` // Platform-generated request ID for support correlation. RequestID string `json:"request_id"` } @@ -26,9 +26,9 @@ func (o *PlatformSkillValidationResponse) GetFiles() []PlatformSkillValidationFi return o.Files } -func (o *PlatformSkillValidationResponse) GetWarnings() []PlatformSkillValidationWarning { +func (o *PlatformSkillValidationResponse) GetWarnings() []PlatformWarning { if o == nil { - return []PlatformSkillValidationWarning{} + return []PlatformWarning{} } return o.Warnings } diff --git a/tests/mockserver/internal/sdk/models/components/platformskillvalidationwarning.go b/tests/mockserver/internal/sdk/models/components/platformskillvalidationwarning.go deleted file mode 100644 index 10a5ba75..00000000 --- a/tests/mockserver/internal/sdk/models/components/platformskillvalidationwarning.go +++ /dev/null @@ -1,24 +0,0 @@ -// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - -package components - -type PlatformSkillValidationWarning struct { - // Stable warning code. - Code string `json:"code"` - // Human-readable warning message. - Message string `json:"message"` -} - -func (o *PlatformSkillValidationWarning) GetCode() string { - if o == nil { - return "" - } - return o.Code -} - -func (o *PlatformSkillValidationWarning) GetMessage() string { - if o == nil { - return "" - } - return o.Message -} diff --git a/tests/mockserver/internal/sdk/models/components/platformwarning.go b/tests/mockserver/internal/sdk/models/components/platformwarning.go new file mode 100644 index 00000000..c96ef7a9 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/platformwarning.go @@ -0,0 +1,26 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +// PlatformWarning - Non-blocking warning attached to a successful Platform response. +type PlatformWarning struct { + // Open snake_case warning code. Clients must tolerate unknown values; the set of codes is not a closed enum. + // + Code string `json:"code"` + // Human-readable warning message. + Message string `json:"message"` +} + +func (o *PlatformWarning) GetCode() string { + if o == nil { + return "" + } + return o.Code +} + +func (o *PlatformWarning) GetMessage() string { + if o == nil { + return "" + } + return o.Message +} diff --git a/tests/mockserver/internal/sdk/models/components/toolannotations.go b/tests/mockserver/internal/sdk/models/components/toolannotations.go new file mode 100644 index 00000000..68923329 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/toolannotations.go @@ -0,0 +1,71 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +import ( + "mockserver/internal/sdk/optionalnullable" +) + +// ToolAnnotations - Behavioural hints for the tool, exactly as declared by the tool server. No +// defaults are filled in — see the per-field notes for what an absent value means. +// +// Per the MCP specification, clients MUST treat these hints as untrusted unless +// the tool server is itself trusted. They are advisory metadata, not an +// authorization signal, and must not be the sole basis of a security decision. +type ToolAnnotations struct { + Title *string `json:"title,omitempty"` + // True if the tool does not modify its environment. Always present. MCP + // defines no distinction between an undeclared value and `false` here, so + // `false` means "not declared read-only" rather than "declared mutating". + // + ReadOnlyHint *bool `json:"readOnlyHint,omitempty"` + // True if the tool may perform destructive updates. **Absent means the server + // did not declare it**, for which the MCP default is `true`. Only meaningful + // when `readOnlyHint` is `false`. + // + DestructiveHint optionalnullable.OptionalNullable[bool] `json:"destructiveHint,omitempty"` + // True if repeated calls with the same arguments have no additional effect. + // Always present; as with `readOnlyHint`, `false` means "not declared + // idempotent". Only meaningful when `readOnlyHint` is `false`. + // + IdempotentHint *bool `json:"idempotentHint,omitempty"` + // True if the tool interacts with an open world of external entities. **Absent + // means the server did not declare it**, for which the MCP default is `true`. + // + OpenWorldHint optionalnullable.OptionalNullable[bool] `json:"openWorldHint,omitempty"` +} + +func (o *ToolAnnotations) GetTitle() *string { + if o == nil { + return nil + } + return o.Title +} + +func (o *ToolAnnotations) GetReadOnlyHint() *bool { + if o == nil { + return nil + } + return o.ReadOnlyHint +} + +func (o *ToolAnnotations) GetDestructiveHint() optionalnullable.OptionalNullable[bool] { + if o == nil { + return nil + } + return o.DestructiveHint +} + +func (o *ToolAnnotations) GetIdempotentHint() *bool { + if o == nil { + return nil + } + return o.IdempotentHint +} + +func (o *ToolAnnotations) GetOpenWorldHint() optionalnullable.OptionalNullable[bool] { + if o == nil { + return nil + } + return o.OpenWorldHint +} diff --git a/tests/mockserver/internal/sdk/models/components/tooldefinition.go b/tests/mockserver/internal/sdk/models/components/tooldefinition.go new file mode 100644 index 00000000..918fecce --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/tooldefinition.go @@ -0,0 +1,66 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type ToolDefinition struct { + // Tool server this tool belongs to. + ServerID string `json:"serverId"` + // Name to invoke the tool by. + Name string `json:"name"` + // Human-readable name of the tool. + DisplayName *string `json:"displayName,omitempty"` + // What the tool does, as surfaced to a model. + Description *string `json:"description,omitempty"` + // JSON Schema for the tool's input parameters. + InputSchema map[string]any `json:"inputSchema,omitempty"` + // Behavioural hints for the tool, exactly as declared by the tool server. No + // defaults are filled in — see the per-field notes for what an absent value means. + // + // Per the MCP specification, clients MUST treat these hints as untrusted unless + // the tool server is itself trusted. They are advisory metadata, not an + // authorization signal, and must not be the sole basis of a security decision. + // + Annotations *ToolAnnotations `json:"annotations,omitempty"` +} + +func (o *ToolDefinition) GetServerID() string { + if o == nil { + return "" + } + return o.ServerID +} + +func (o *ToolDefinition) GetName() string { + if o == nil { + return "" + } + return o.Name +} + +func (o *ToolDefinition) GetDisplayName() *string { + if o == nil { + return nil + } + return o.DisplayName +} + +func (o *ToolDefinition) GetDescription() *string { + if o == nil { + return nil + } + return o.Description +} + +func (o *ToolDefinition) GetInputSchema() map[string]any { + if o == nil { + return nil + } + return o.InputSchema +} + +func (o *ToolDefinition) GetAnnotations() *ToolAnnotations { + if o == nil { + return nil + } + return o.Annotations +} diff --git a/tests/mockserver/internal/sdk/models/components/tooldefinitionsresponse.go b/tests/mockserver/internal/sdk/models/components/tooldefinitionsresponse.go new file mode 100644 index 00000000..ab96ce32 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/components/tooldefinitionsresponse.go @@ -0,0 +1,24 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package components + +type ToolDefinitionsResponse struct { + // Definitions for the requested tools that exist on this server. + Tools []ToolDefinition `json:"tools"` + // Requested names that do not exist on this server. + NotFound []string `json:"notFound,omitempty"` +} + +func (o *ToolDefinitionsResponse) GetTools() []ToolDefinition { + if o == nil { + return []ToolDefinition{} + } + return o.Tools +} + +func (o *ToolDefinitionsResponse) GetNotFound() []string { + if o == nil { + return nil + } + return o.NotFound +} diff --git a/tests/mockserver/internal/sdk/models/components/viewerinfo.go b/tests/mockserver/internal/sdk/models/components/viewerinfo.go index 5abdc47f..f893b058 100644 --- a/tests/mockserver/internal/sdk/models/components/viewerinfo.go +++ b/tests/mockserver/internal/sdk/models/components/viewerinfo.go @@ -9,21 +9,21 @@ import ( "time" ) -// Role - DEPRECATED - use permissions instead. Viewer's role on the specific document. +// ViewerInfoRole - DEPRECATED - use permissions instead. Viewer's role on the specific document. // // Deprecated: Deprecated on 2026-02-05, removal scheduled for 2026-10-15: Use permissions instead. -type Role string +type ViewerInfoRole string const ( - RoleAnswerModerator Role = "ANSWER_MODERATOR" - RoleOwner Role = "OWNER" - RoleViewer Role = "VIEWER" + ViewerInfoRoleAnswerModerator ViewerInfoRole = "ANSWER_MODERATOR" + ViewerInfoRoleOwner ViewerInfoRole = "OWNER" + ViewerInfoRoleViewer ViewerInfoRole = "VIEWER" ) -func (e Role) ToPointer() *Role { +func (e ViewerInfoRole) ToPointer() *ViewerInfoRole { return &e } -func (e *Role) UnmarshalJSON(data []byte) error { +func (e *ViewerInfoRole) UnmarshalJSON(data []byte) error { var v string if err := json.Unmarshal(data, &v); err != nil { return err @@ -34,10 +34,10 @@ func (e *Role) UnmarshalJSON(data []byte) error { case "OWNER": fallthrough case "VIEWER": - *e = Role(v) + *e = ViewerInfoRole(v) return nil default: - return fmt.Errorf("invalid value for Role: %v", v) + return fmt.Errorf("invalid value for ViewerInfoRole: %v", v) } } @@ -45,8 +45,8 @@ type ViewerInfo struct { // DEPRECATED - use permissions instead. Viewer's role on the specific document. // // Deprecated: Deprecated on 2026-02-05, removal scheduled for 2026-10-15: Use permissions instead. - Role *Role `json:"role,omitempty"` - LastViewedTime *time.Time `json:"lastViewedTime,omitempty"` + Role *ViewerInfoRole `json:"role,omitempty"` + LastViewedTime *time.Time `json:"lastViewedTime,omitempty"` } func (v ViewerInfo) MarshalJSON() ([]byte, error) { @@ -60,7 +60,7 @@ func (v *ViewerInfo) UnmarshalJSON(data []byte) error { return nil } -func (o *ViewerInfo) GetRole() *Role { +func (o *ViewerInfo) GetRole() *ViewerInfoRole { if o == nil { return nil } diff --git a/tests/mockserver/internal/sdk/models/operations/gettoolservertools.go b/tests/mockserver/internal/sdk/models/operations/gettoolservertools.go new file mode 100644 index 00000000..7a3bfa4e --- /dev/null +++ b/tests/mockserver/internal/sdk/models/operations/gettoolservertools.go @@ -0,0 +1,48 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package operations + +import ( + "mockserver/internal/sdk/models/components" +) + +type GetToolServerToolsRequest struct { + // Unique identifier of the tool server. + ServerID string `pathParam:"style=simple,explode=false,name=serverId"` + // Tool names to look up on this server. Maximum 100. + ToolNames []string `queryParam:"style=form,explode=false,name=toolNames"` +} + +func (o *GetToolServerToolsRequest) GetServerID() string { + if o == nil { + return "" + } + return o.ServerID +} + +func (o *GetToolServerToolsRequest) GetToolNames() []string { + if o == nil { + return []string{} + } + return o.ToolNames +} + +type GetToolServerToolsResponse struct { + HTTPMeta components.HTTPMetadata `json:"-"` + // Successful operation + ToolDefinitionsResponse *components.ToolDefinitionsResponse +} + +func (o *GetToolServerToolsResponse) GetHTTPMeta() components.HTTPMetadata { + if o == nil { + return components.HTTPMetadata{} + } + return o.HTTPMeta +} + +func (o *GetToolServerToolsResponse) GetToolDefinitionsResponse() *components.ToolDefinitionsResponse { + if o == nil { + return nil + } + return o.ToolDefinitionsResponse +} diff --git a/tests/mockserver/internal/sdk/models/operations/importagent.go b/tests/mockserver/internal/sdk/models/operations/importagent.go new file mode 100644 index 00000000..ddb85ab6 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/operations/importagent.go @@ -0,0 +1,65 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package operations + +import ( + "mockserver/internal/sdk/models/components" +) + +type ImportAgentRequest 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"` + // The ID of the agent to create or update. + AgentID string `pathParam:"style=simple,explode=false,name=agent_id"` + Body components.ImportAgentRequest `request:"mediaType=multipart/form-data"` +} + +func (o *ImportAgentRequest) GetLocale() *string { + if o == nil { + return nil + } + return o.Locale +} + +func (o *ImportAgentRequest) GetTimezoneOffset() *int64 { + if o == nil { + return nil + } + return o.TimezoneOffset +} + +func (o *ImportAgentRequest) GetAgentID() string { + if o == nil { + return "" + } + return o.AgentID +} + +func (o *ImportAgentRequest) GetBody() components.ImportAgentRequest { + if o == nil { + return components.ImportAgentRequest{} + } + return o.Body +} + +type ImportAgentResponse struct { + HTTPMeta components.HTTPMetadata `json:"-"` + // Success + ImportAgentResponse *components.ImportAgentResponse +} + +func (o *ImportAgentResponse) GetHTTPMeta() components.HTTPMetadata { + if o == nil { + return components.HTTPMetadata{} + } + return o.HTTPMeta +} + +func (o *ImportAgentResponse) GetImportAgentResponse() *components.ImportAgentResponse { + if o == nil { + return nil + } + return o.ImportAgentResponse +} diff --git a/tests/mockserver/internal/sdk/models/operations/platformchatcreate.go b/tests/mockserver/internal/sdk/models/operations/platformchatcreate.go new file mode 100644 index 00000000..1676f643 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/operations/platformchatcreate.go @@ -0,0 +1,36 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package operations + +import ( + "mockserver/internal/sdk/models/components" +) + +type PlatformChatCreateResponse struct { + HTTPMeta components.HTTPMetadata `json:"-"` + // Successful response. + PlatformChatCompletedResponse *components.PlatformChatCompletedResponse + // Successful response. + Res *string +} + +func (o *PlatformChatCreateResponse) GetHTTPMeta() components.HTTPMetadata { + if o == nil { + return components.HTTPMetadata{} + } + return o.HTTPMeta +} + +func (o *PlatformChatCreateResponse) GetPlatformChatCompletedResponse() *components.PlatformChatCompletedResponse { + if o == nil { + return nil + } + return o.PlatformChatCompletedResponse +} + +func (o *PlatformChatCreateResponse) GetRes() *string { + if o == nil { + return nil + } + return o.Res +} diff --git a/tests/mockserver/internal/sdk/models/operations/platformsearch.go b/tests/mockserver/internal/sdk/models/operations/platformsearch.go index 16b6e86f..381c8530 100644 --- a/tests/mockserver/internal/sdk/models/operations/platformsearch.go +++ b/tests/mockserver/internal/sdk/models/operations/platformsearch.go @@ -8,7 +8,7 @@ import ( type PlatformSearchResponse struct { HTTPMeta components.HTTPMetadata `json:"-"` - // Successful search. + // Successful response. PlatformSearchResponse *components.PlatformSearchResponse } diff --git a/tests/mockserver/internal/sdk/models/operations/platformsearchfilters.go b/tests/mockserver/internal/sdk/models/operations/platformsearchfilters.go new file mode 100644 index 00000000..8e578bcd --- /dev/null +++ b/tests/mockserver/internal/sdk/models/operations/platformsearchfilters.go @@ -0,0 +1,58 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package operations + +import ( + "mockserver/internal/sdk/models/components" +) + +type PlatformSearchFiltersRequest struct { + // Restrict metadata to one or more datasource identifiers as returned by this endpoint (for example, `jira`). With a nonblank `query`, exactly one datasource is required. Unknown or inaccessible identifiers return `invalid_datasource`. + // + Datasources []string `queryParam:"style=form,explode=true,name=datasources"` + // Optional search query that requests suggested filter values for the selected datasource. Must be nonblank when present. Triggers a search for facet values only; does not return documents. + // + Query *string `queryParam:"style=form,explode=true,name=query"` +} + +func (o *PlatformSearchFiltersRequest) GetDatasources() []string { + if o == nil { + return nil + } + return o.Datasources +} + +func (o *PlatformSearchFiltersRequest) GetQuery() *string { + if o == nil { + return nil + } + return o.Query +} + +type PlatformSearchFiltersResponse struct { + HTTPMeta components.HTTPMetadata `json:"-"` + // Successful response. + PlatformSearchFiltersResponse *components.PlatformSearchFiltersResponse + Headers map[string][]string +} + +func (o *PlatformSearchFiltersResponse) GetHTTPMeta() components.HTTPMetadata { + if o == nil { + return components.HTTPMetadata{} + } + return o.HTTPMeta +} + +func (o *PlatformSearchFiltersResponse) GetPlatformSearchFiltersResponse() *components.PlatformSearchFiltersResponse { + if o == nil { + return nil + } + return o.PlatformSearchFiltersResponse +} + +func (o *PlatformSearchFiltersResponse) GetHeaders() map[string][]string { + if o == nil { + return map[string][]string{} + } + return o.Headers +} diff --git a/tests/mockserver/internal/sdk/models/operations/platformskillspreviewsource.go b/tests/mockserver/internal/sdk/models/operations/platformskillspreviewsource.go new file mode 100644 index 00000000..a32c6102 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/operations/platformskillspreviewsource.go @@ -0,0 +1,36 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package operations + +import ( + "mockserver/internal/sdk/models/components" +) + +type PlatformSkillsPreviewSourceResponse struct { + HTTPMeta components.HTTPMetadata `json:"-"` + // Successful response. + PlatformSkillSourcePreviewResponse *components.PlatformSkillSourcePreviewResponse + // Successful response. + Res *string +} + +func (o *PlatformSkillsPreviewSourceResponse) GetHTTPMeta() components.HTTPMetadata { + if o == nil { + return components.HTTPMetadata{} + } + return o.HTTPMeta +} + +func (o *PlatformSkillsPreviewSourceResponse) GetPlatformSkillSourcePreviewResponse() *components.PlatformSkillSourcePreviewResponse { + if o == nil { + return nil + } + return o.PlatformSkillSourcePreviewResponse +} + +func (o *PlatformSkillsPreviewSourceResponse) GetRes() *string { + if o == nil { + return nil + } + return o.Res +} diff --git a/tests/mockserver/internal/sdk/models/operations/platformskillsupdate.go b/tests/mockserver/internal/sdk/models/operations/platformskillsupdate.go new file mode 100644 index 00000000..ec45cac3 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/operations/platformskillsupdate.go @@ -0,0 +1,47 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package operations + +import ( + "mockserver/internal/sdk/models/components" +) + +type PlatformSkillsUpdateRequest struct { + // Glean skill ID. + SkillID string `pathParam:"style=simple,explode=false,name=skill_id"` + Body components.PlatformSkillUpdateRequest `request:"mediaType=application/json"` +} + +func (o *PlatformSkillsUpdateRequest) GetSkillID() string { + if o == nil { + return "" + } + return o.SkillID +} + +func (o *PlatformSkillsUpdateRequest) GetBody() components.PlatformSkillUpdateRequest { + if o == nil { + return components.PlatformSkillUpdateRequest{} + } + return o.Body +} + +type PlatformSkillsUpdateResponse struct { + HTTPMeta components.HTTPMetadata `json:"-"` + // Successful response. + PlatformSkillUpdateResponse *components.PlatformSkillUpdateResponse +} + +func (o *PlatformSkillsUpdateResponse) GetHTTPMeta() components.HTTPMetadata { + if o == nil { + return components.HTTPMetadata{} + } + return o.HTTPMeta +} + +func (o *PlatformSkillsUpdateResponse) GetPlatformSkillUpdateResponse() *components.PlatformSkillUpdateResponse { + if o == nil { + return nil + } + return o.PlatformSkillUpdateResponse +} diff --git a/tests/mockserver/internal/sdk/models/sdkerrors/accessrequestpermissiondeniedresponseerror.go b/tests/mockserver/internal/sdk/models/sdkerrors/accessrequestpermissiondeniedresponseerror.go new file mode 100644 index 00000000..5f501493 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/sdkerrors/accessrequestpermissiondeniedresponseerror.go @@ -0,0 +1,23 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package sdkerrors + +import ( + "encoding/json" + "mockserver/internal/sdk/models/components" +) + +type AccessRequestPermissionDeniedResponseError struct { + ErrorType components.AccessRequestPermissionDeniedResponseErrorType `json:"errorType"` + CreatedBy components.Person `json:"createdBy"` + RequestableRoles []components.UserRole `json:"requestableRoles"` + HasPendingRequest bool `json:"hasPendingRequest"` + HTTPMeta components.HTTPMetadata `json:"-"` +} + +var _ error = &AccessRequestPermissionDeniedResponseError{} + +func (e *AccessRequestPermissionDeniedResponseError) Error() string { + data, _ := json.Marshal(e) + return string(data) +} diff --git a/tests/mockserver/internal/sdk/models/sdkerrors/platformunauthorizedagenttoolsproblemerror.go b/tests/mockserver/internal/sdk/models/sdkerrors/platformunauthorizedagenttoolsproblemerror.go new file mode 100644 index 00000000..45b9087a --- /dev/null +++ b/tests/mockserver/internal/sdk/models/sdkerrors/platformunauthorizedagenttoolsproblemerror.go @@ -0,0 +1,38 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package sdkerrors + +import ( + "encoding/json" + "mockserver/internal/sdk/models/components" +) + +// PlatformUnauthorizedAgentToolsProblemError - Problem detail extended with `authentication_suggestions` naming each tool the caller must authorize. +type PlatformUnauthorizedAgentToolsProblemError struct { + // URI identifying the error type. + Type string `json:"type"` + // Short, human-readable summary of the error. + Title string `json:"title"` + // HTTP status code mirrored from the response. + Status int64 `json:"status"` + // Human-readable explanation specific to this occurrence. + Detail string `json:"detail"` + // Stable machine-readable error code. + Code components.PlatformProblemDetailCode `json:"code"` + // Direct URL to documentation for this error code. + DocumentationURL *string `json:"documentation_url,omitempty"` + // Platform-generated request ID for support correlation. + RequestID string `json:"request_id"` + // Field-level validation problems, one entry per offending field. + Errors []components.PlatformProblemDetailError `json:"errors,omitempty"` + // One entry per tool the caller must authorize. + AuthenticationSuggestions []components.PlatformAuthenticationSuggestion `json:"authentication_suggestions"` + HTTPMeta components.HTTPMetadata `json:"-"` +} + +var _ error = &PlatformUnauthorizedAgentToolsProblemError{} + +func (e *PlatformUnauthorizedAgentToolsProblemError) Error() string { + data, _ := json.Marshal(e) + return string(data) +} diff --git a/tests/mockserver/internal/sdk/models/sdkerrors/unauthorizedagenttoolserror.go b/tests/mockserver/internal/sdk/models/sdkerrors/unauthorizedagenttoolserror.go new file mode 100644 index 00000000..0f579e13 --- /dev/null +++ b/tests/mockserver/internal/sdk/models/sdkerrors/unauthorizedagenttoolserror.go @@ -0,0 +1,24 @@ +// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +package sdkerrors + +import ( + "encoding/json" + "mockserver/internal/sdk/models/components" +) + +// UnauthorizedAgentToolsError - Returned when the agent has tools the caller must authorize before the run can start. Each entry in `authenticationSuggestions` names one such tool; POST its `serverId` to `/tool-servers/{serverId}/auth` with `returnUrl` in the request body to obtain an `authorizationUrl` to redirect the end user to, then retry the run once OAuth completes. +type UnauthorizedAgentToolsError struct { + // Human-readable description of the failure. + Message string `json:"message"` + // One entry per tool the caller must authorize. + AuthenticationSuggestions []components.ServerToolRequest `json:"authenticationSuggestions"` + HTTPMeta components.HTTPMetadata `json:"-"` +} + +var _ error = &UnauthorizedAgentToolsError{} + +func (e *UnauthorizedAgentToolsError) Error() string { + data, _ := json.Marshal(e) + return string(data) +} diff --git a/tests/test_chat_sdk.py b/tests/test_chat_sdk.py new file mode 100644 index 00000000..41b3a54c --- /dev/null +++ b/tests/test_chat_sdk.py @@ -0,0 +1,19 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from glean.api_client import Glean +import os +from tests.test_client import create_test_http_client + + +def test_chat_sdk_platform_chat_create(): + test_http_client = create_test_http_client("platform-chat-create") + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.chat.create(input="", stream=False, store=True) + assert res is not None diff --git a/tests/test_client_agents.py b/tests/test_client_agents.py index 93354a84..154665a2 100644 --- a/tests/test_client_agents.py +++ b/tests/test_client_agents.py @@ -17,3 +17,23 @@ def test_client_agents_create_agent(): res = glean.client.agents.create() assert res is not None + + +def test_client_agents_import_agent(): + test_http_client = create_test_http_client("importAgent") + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.client.agents.import_( + agent_id="", + bundle={ + "file_name": "example.file", + "content": open(".speakeasy/testfiles/example.file", "rb"), + }, + ) + assert res is not None diff --git a/tests/test_indexing_documents.py b/tests/test_indexing_documents.py index 53c2f4b1..c7ffe762 100644 --- a/tests/test_indexing_documents.py +++ b/tests/test_indexing_documents.py @@ -89,3 +89,61 @@ def test_indexing_documents_post_api_index_v1_deletedocument(): glean.indexing.documents.delete( datasource="", object_type="", id="" ) + + +def test_indexing_documents_post_api_index_v1_debug_datasource_document(): + test_http_client = create_test_http_client( + "post_/api/index/v1/debug/{datasource}/document" + ) + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.indexing.documents.debug( + datasource="", object_type="Article", doc_id="art123" + ) + assert res is not None + + +def test_indexing_documents_post_api_index_v1_debug_datasource_documents(): + test_http_client = create_test_http_client( + "post_/api/index/v1/debug/{datasource}/documents" + ) + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.indexing.documents.debug_many( + datasource="", debug_documents=[] + ) + assert res is not None + + +def test_indexing_documents_post_api_index_v1_debug_datasource_document_events(): + test_http_client = create_test_http_client( + "post_/api/index/v1/debug/{datasource}/document/events" + ) + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.indexing.documents.debug_events( + datasource="", + object_type="Article", + doc_id="art123", + start_date="2025-05-01", + max_events=50, + ) + assert res is not None diff --git a/tests/test_messages.py b/tests/test_messages.py index dfdc1864..132005ec 100644 --- a/tests/test_messages.py +++ b/tests/test_messages.py @@ -18,7 +18,7 @@ def test_messages_messages(): res = glean.client.messages.retrieve( id_type=models.IDType.CONVERSATION_ID, id="", - datasource=models.Datasource.SLACKENTGRID, + datasource=models.Datasource.FACEBOOKWORKPLACE, timestamp_millis=558834, ) assert res is not None diff --git a/tests/test_people.py b/tests/test_people.py index c64882ef..a1febc58 100644 --- a/tests/test_people.py +++ b/tests/test_people.py @@ -18,3 +18,19 @@ def test_people_post_api_index_v1_processallemployeesandteams(): assert glean is not None glean.indexing.people.process_all_employees_and_teams() + + +def test_people_post_api_index_v1_debug_datasource_user(): + test_http_client = create_test_http_client( + "post_/api/index/v1/debug/{datasource}/user" + ) + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.indexing.people.debug(datasource="", email="u1@foo.com") + assert res is not None diff --git a/tests/test_search.py b/tests/test_search.py index 3925a6e0..0761637a 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -2234,3 +2234,17 @@ def test_search_platform_search(): ], ) assert res is not None + + +def test_search_platform_search_filters(): + test_http_client = create_test_http_client("platform-search-filters") + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.search.list_filters() + assert res is not None diff --git a/tests/test_skills.py b/tests/test_skills.py index de32443a..3b8e1c51 100644 --- a/tests/test_skills.py +++ b/tests/test_skills.py @@ -1,6 +1,6 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from glean.api_client import Glean +from glean.api_client import Glean, models import os from tests.test_client import create_test_http_client @@ -145,3 +145,35 @@ def test_skills_platform_skills_get_version_content(): res = glean.skills.retrieve_version_content(skill_id="", version=117760) assert res is not None + + +def test_skills_platform_skills_preview_source(): + test_http_client = create_test_http_client("platform-skills-preview-source") + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.skills.preview_source( + source_url="https://ugly-information.name/", stream=False + ) + assert res is not None + + +def test_skills_platform_skills_update(): + test_http_client = create_test_http_client("platform-skills-update") + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.skills.update( + skill_id="", status=models.PlatformSkillUpdateStatus.DISABLED + ) + assert res is not None diff --git a/tests/test_summarize.py b/tests/test_summarize.py index 449a8966..2b5d1f38 100644 --- a/tests/test_summarize.py +++ b/tests/test_summarize.py @@ -18,12 +18,11 @@ def test_summarize_summarize(): res = glean.client.documents.summarize( document_specs=[ { - "ugc_type": models.DocumentSpecUgcType1.ANNOUNCEMENTS, - "content_id": 150932, + "ugc_type": models.DocumentSpecUgcType2.ARTIFACTS, + "ugc_id": "", }, { - "ugc_type": models.DocumentSpecUgcType1.ANNOUNCEMENTS, - "content_id": 150932, + "id": "", }, ] ) diff --git a/tests/test_tools.py b/tests/test_tools.py index e4d534d4..626f9c2c 100644 --- a/tests/test_tools.py +++ b/tests/test_tools.py @@ -99,3 +99,24 @@ def test_tools_authorize_tool_server(): server_id="", return_url="https://lucky-disadvantage.com" ) assert res is not None + + +def test_tools_get_tool_server_tools(): + test_http_client = create_test_http_client("getToolServerTools") + + with Glean( + server_url=os.getenv("TEST_SERVER_URL", "http://localhost:18080"), + client=test_http_client, + api_token=os.getenv("GLEAN_API_TOKEN", "value"), + ) as glean: + assert glean is not None + + res = glean.client.tools.get_tool_server_tools( + server_id="", + tool_names=[ + "", + "", + "", + ], + ) + assert res is not None From ec8c37aa925199ec54521e9ca3cb9a9b214c6e76 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 02:40:11 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow